diff options
52 files changed, 685 insertions, 875 deletions
@@ -1 +1 @@ -config-joey.hs
\ No newline at end of file +config-simple.hs
\ No newline at end of file diff --git a/debian/rules b/debian/rules index c553132f..bcb681c1 100755 --- a/debian/rules +++ b/debian/rules @@ -1,4 +1,4 @@ -#!/bin/false +#!/usr/bin/make -f # Avoid using cabal, as it writes to $HOME export CABAL=./Setup diff --git a/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file.mdwn b/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file.mdwn new file mode 100644 index 00000000..b678d8d0 --- /dev/null +++ b/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file.mdwn @@ -0,0 +1,34 @@ +Hello, + +Still working on the reprepro property :) + +Here A property that I am using to publish a repository via apache (this is a prototype) + + website :: String -> Property + website hn = toProp $ Apache.siteEnabled hn apachecfg + where + apachecfg = [ "<VirtualHost *>" + , "DocumentRoot " ++ basePath + , "<Directory " ++ basePath ++ ">" + , " Options Indexes FollowSymLinks Multiviews" + , " Order allow,deny" + , Apache.allowAll + , "</Directory>" + ] ++ concatMap deny ["db", "conf", "incoming"] + ++ ["</VirtualHost>"] + + deny dir = [ "<Directory \"" ++ basePath ++ "apt/*/" ++ dir ++ "\">" + , " Order deny,allow" + , " Deny from all" + , "</Directory>" + ] + +during my test I am runing the config.hs with +runhaskell config.hs (it work the first time, the apache config files are ok) + +but when I do a modification on the apachecfg and rerun the runhaskell, +the config files are not updated. I need to remove them to have an updated version. + +cheers + +Fred diff --git a/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_1_932ba6f4e444c99d8d561149d17c8fe7._comment b/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_1_932ba6f4e444c99d8d561149d17c8fe7._comment new file mode 100644 index 00000000..0101ccb2 --- /dev/null +++ b/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_1_932ba6f4e444c99d8d561149d17c8fe7._comment @@ -0,0 +1,30 @@ +[[!comment format=mdwn + username="picca" + subject="first run" + date="2014-12-08T09:31:46Z" + content=""" +root@mordor:~/propellor/src# PROPELLOR_DEBUG=1 runhaskell config.hs +[2014-12-08 10:27:10 CET] read: hostname [\"-f\"] +[2014-12-08 10:27:10 CET] command line: Run \"mordor\" +[2014-12-08 10:27:10 CET] read: git [\"remote\"] +[2014-12-08 10:27:10 CET] read: git [\"symbolic-ref\",\"--short\",\"HEAD\"] +[2014-12-08 10:27:10 CET] call: git [\"fetch\"] +Pull from central git repository ... done +[2014-12-08 10:27:12 CET] read: git [\"show-ref\",\"--hash\",\"master\"] +[2014-12-08 10:27:12 CET] read: git [\"show-ref\",\"--hash\",\"master\"] +mordor has Operating System (Debian Unstable) \"i386\" ... ok +[2014-12-08 10:27:12 CET] read: apt-cache [\"policy\",\"etckeeper\"] +mordor apt installed etckeeper ... ok +[2014-12-08 10:27:13 CET] read: apt-cache [\"policy\",\"ssh\"] +mordor apt installed ssh ... ok +[2014-12-08 10:27:13 CET] read: passwd [\"-S\",\"root\"] +mordor root has password ... ok +[2014-12-08 10:27:13 CET] call: a2query [\"-q\",\"-s\",\"reprepro\"] +[2014-12-08 10:27:14 CET] read: apt-cache [\"policy\",\"apache2\"] +[2014-12-08 10:27:14 CET] call: a2ensite [\"--quiet\",\"reprepro\"] +Enabling site reprepro. +[2014-12-08 10:27:15 CET] call: sh [\"-c\",\"set -e ; service 'apache2' reload >/dev/null 2>&1 || true\"] +mordor create reprepro ... done +mordor overall ... done + +"""]] diff --git a/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_2_5323336b92d9aef5a9021b924029f3af._comment b/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_2_5323336b92d9aef5a9021b924029f3af._comment new file mode 100644 index 00000000..85a57383 --- /dev/null +++ b/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_2_5323336b92d9aef5a9021b924029f3af._comment @@ -0,0 +1,38 @@ +[[!comment format=mdwn + username="picca" + subject="second run with content modified" + date="2014-12-08T09:37:43Z" + content=""" +Second run after adding a space here + + - , \" Options Indexes FollowSymLinks Multiviews\" + + , \" Options Indexes FollowSymLinks Multiviews\" + + + root@mordor:~/propellor/src# PROPELLOR_DEBUG=1 runhaskell config.hs + [2014-12-08 10:34:19 CET] read: hostname [\"-f\"] + [2014-12-08 10:34:19 CET] command line: Run \"mordor\" + [2014-12-08 10:34:19 CET] read: git [\"remote\"] + [2014-12-08 10:34:19 CET] read: git [\"symbolic-ref\",\"--short\",\"HEAD\"] + [2014-12-08 10:34:19 CET] call: git [\"fetch\"] + remote: Counting objects: 32, done. + remote: Compressing objects: 100% (6/6), done. + remote: Total 6 (delta 3), reused 0 (delta 0) + Dépaquetage des objets: 100% (6/6), fait. + Depuis git://git.kitenet.net/propellor + c5a8cae..9ac0dfb master -> origin/master + Pull from central git repository ... done + [2014-12-08 10:34:20 CET] read: git [\"show-ref\",\"--hash\",\"master\"] + [2014-12-08 10:34:20 CET] read: git [\"show-ref\",\"--hash\",\"master\"] + mordor has Operating System (Debian Unstable) \"i386\" ... ok + [2014-12-08 10:34:20 CET] read: apt-cache [\"policy\",\"etckeeper\"] + mordor apt installed etckeeper ... ok + [2014-12-08 10:34:21 CET] read: apt-cache [\"policy\",\"ssh\"] + mordor apt installed ssh ... ok + [2014-12-08 10:34:21 CET] read: passwd [\"-S\",\"root\"] + mordor root has password ... ok + [2014-12-08 10:34:21 CET] call: a2query [\"-q\",\"-s\",\"reprepro\"] + mordor create reprepro ... ok + mordor overall ... ok + +"""]] diff --git a/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_3_531c2c5e78fb5c62e54d84231b129dc8._comment b/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_3_531c2c5e78fb5c62e54d84231b129dc8._comment new file mode 100644 index 00000000..5dc67fb0 --- /dev/null +++ b/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_3_531c2c5e78fb5c62e54d84231b129dc8._comment @@ -0,0 +1,11 @@ +[[!comment format=mdwn + username="picca" + subject="comment 3" + date="2014-12-08T10:47:59Z" + content=""" +I forgot to say that the content of + +/etc/apache2/site-xxx/reprepro[.conf] + +is unmodifed after this second run +"""]] diff --git a/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_4_54281604c588a7229f9d987e8cdee802._comment b/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_4_54281604c588a7229f9d987e8cdee802._comment new file mode 100644 index 00000000..a9201541 --- /dev/null +++ b/doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_4_54281604c588a7229f9d987e8cdee802._comment @@ -0,0 +1,16 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 4""" + date="2014-12-09T04:35:12Z" + content=""" +Pretty obvious why if you look at the code: + + enable = check (not <$> isenabled) $ + cmdProperty "a2ensite" ["--quiet", hn] + `describe` ("apache site enabled " ++ hn) + `requires` siteAvailable hn cf + +So that property was skipped entirely if the site was already enabled and never looked at the config file. + +I've put in a fix. +"""]] diff --git a/doc/forum/Propellor_without_superuser_privileges.mdwn b/doc/forum/Propellor_without_superuser_privileges.mdwn new file mode 100644 index 00000000..d7288a72 --- /dev/null +++ b/doc/forum/Propellor_without_superuser_privileges.mdwn @@ -0,0 +1,3 @@ +Joey uses propellor to popular his /home/joey on hosts he controls. I'd like to use it to populate my home directory on hosts where I don't have root. If someone gives me a shell account on a Debian box, it would be great to just run `propellor --spin` to have apply properties such as having certain stuff downloaded and compiled in `~/local/bin`, putting cronjobs in place, and checking stuff out with `myrepos`. + +Does propellor assume root access at a deep enough level that writing properties to do this stuff would be impractical? diff --git a/doc/forum/Propellor_without_superuser_privileges/comment_1_021ecbb1b8bd7e26776b49ec75e90d0c._comment b/doc/forum/Propellor_without_superuser_privileges/comment_1_021ecbb1b8bd7e26776b49ec75e90d0c._comment new file mode 100644 index 00000000..1a38ef94 --- /dev/null +++ b/doc/forum/Propellor_without_superuser_privileges/comment_1_021ecbb1b8bd7e26776b49ec75e90d0c._comment @@ -0,0 +1,26 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2014-12-26T19:26:00Z" + content=""" +I think that the root assumptions are in basically 3 places: + +* Many Properties assume they're run as root, and will fail if they're not. + Probably not a problem in practice for most of them. It might be nice + to make a few, such as `User.hasSomePassword` work when run as a normal + user. + +* Propellor's self-deployment involves running apt-get to instal ghc, + etc. This could be modified to check if it's not root and do a local + user of ghc if necessary. + +* `localdir = "/usr/local" and this is used in various places by eg, + `--spin`. It is, however, entirely possible to run "./propellor" in + some other directory, which causes it to run in that directory + and ensure the properties of localhost. `--spin` could certianly be + taught to run in a user mode where it uses "~/.propellor/" instead of + `localdir`. + +I think that's all! I don't plan to try to add this feature myself, but +will be happy to support anyone who wants to work on it. +"""]] diff --git a/doc/forum/Supported_OS.mdwn b/doc/forum/Supported_OS.mdwn new file mode 100644 index 00000000..f17b9054 --- /dev/null +++ b/doc/forum/Supported_OS.mdwn @@ -0,0 +1,5 @@ +What are the requirements for the configured OS ? Does it need to be Debian ? + +Would Propellor work for Arch linux, RHEL, Windows, AIX or linux on pSeries) ? + +Cheers diff --git a/doc/forum/Supported_OS/comment_1_f324bed708305e2667bd00f80544dd90._comment b/doc/forum/Supported_OS/comment_1_f324bed708305e2667bd00f80544dd90._comment new file mode 100644 index 00000000..3a2055ea --- /dev/null +++ b/doc/forum/Supported_OS/comment_1_f324bed708305e2667bd00f80544dd90._comment @@ -0,0 +1,23 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2014-12-07T15:58:03Z" + content=""" +I have heard of propellor being used on OSX. Probably that user wrote their +own code for OSX specific stuff. + +Propellor properites can be parameterized by OS. Currently it has support +for Debian and some untested support for Ubuntu. A property can be parameterized +like this: + + foo :: Property + foo = property "foo" withOS desc $ \o -> case o of + (Just (System (Debian _) _)) -> ensureProperty fooDebian + (Just (System (Ubuntu _) _)) -> ensureProperty fooUbuntu + +The first step for adding a new OS will be to modify <http://hackage.haskell.org/package/propellor-1.0.0/docs/Propellor-Types-OS.html>. +Compilation will then warn about all OS parameterized properties that +need to be updated to support your added OS, and it can be taken from there. + +I'll accept reasonable patches to support other OS's. +"""]] diff --git a/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac.mdwn b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac.mdwn new file mode 100644 index 00000000..c88defcf --- /dev/null +++ b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac.mdwn @@ -0,0 +1,12 @@ +Hello, + +I am trying propellor on Debian Jessie (haskell is fantastic for this sort or things) to setup one of my computer. + +On my network, the system administrator set proxies for http and https. +These information are available via a http://proxy/proxy.pac URL. + +So I would like to know what should be done to extract this information and set it for all users on the system ? + +Cheers + +Frederic diff --git a/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_1_69d7c8fb1d62300456575bb10e935d69._comment b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_1_69d7c8fb1d62300456575bb10e935d69._comment new file mode 100644 index 00000000..6bf8844d --- /dev/null +++ b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_1_69d7c8fb1d62300456575bb10e935d69._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2014-11-25T15:44:13Z" + content=""" +You could, for example, use Propellor.Propety.Cmd.cmdProperty +to run a command that sets up the proxying. If there's not a single command +that does it, you could cause propellor to fetch the url and deploy the +info itself. +"""]] diff --git a/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_2_da30b2621493e48ceabcfa5732dbcdf8._comment b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_2_da30b2621493e48ceabcfa5732dbcdf8._comment new file mode 100644 index 00000000..8458ee49 --- /dev/null +++ b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_2_da30b2621493e48ceabcfa5732dbcdf8._comment @@ -0,0 +1,19 @@ +[[!comment format=mdwn + username="picca" + subject="comment 2" + date="2014-11-25T17:55:25Z" + content=""" +In my case I need to wget the proxy.pac file and parse it to find the right proxy. + +what worried me is that these proxy.pac things are dynamical depending on the ip of the sender AND the receive. +It work nicely with web browser, but not with the unix http_proxy and HTTPS_PROXY env. + +nevertheless, I can create something to parse my local setup and extract the right http_proxy. + +Is there something available in Propellor to set a global environment variable in /etc/environment (the right place for this ?) + +cheers + +Frederic + +"""]] diff --git a/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_3_bd76d169af2ef2f154ad1f0f64506661._comment b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_3_bd76d169af2ef2f154ad1f0f64506661._comment new file mode 100644 index 00000000..9bdcb4df --- /dev/null +++ b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_3_bd76d169af2ef2f154ad1f0f64506661._comment @@ -0,0 +1,11 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2014-11-25T19:37:46Z" + content=""" +There's no Property that handles setting global environment currently, but +it's a reasonable one to add. + +I think that /etc/environment is read by `pam_env` logins, but maybe not +other things, so dunno. +"""]] diff --git a/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_4_a6a49d35ee8a05abc982049b55d0397c._comment b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_4_a6a49d35ee8a05abc982049b55d0397c._comment new file mode 100644 index 00000000..d2a0b45e --- /dev/null +++ b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_4_a6a49d35ee8a05abc982049b55d0397c._comment @@ -0,0 +1,11 @@ +[[!comment format=mdwn + username="picca" + subject="comment 4" + date="2014-11-25T20:01:12Z" + content=""" +I saw that there is an haskell binding for augeas. + +Maybe this could be a nice uniform interface to deal with all the system configuration files. +then no need to deal with the config file formats. + +"""]] diff --git a/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_5_7783b8a96c8032a39ff3b5b446a976ed._comment b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_5_7783b8a96c8032a39ff3b5b446a976ed._comment new file mode 100644 index 00000000..d670fa3b --- /dev/null +++ b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_5_7783b8a96c8032a39ff3b5b446a976ed._comment @@ -0,0 +1,7 @@ +[[!comment format=mdwn + username="gueux" + subject="comment 5" + date="2014-11-27T08:17:36Z" + content=""" +Just looked at augeas, and add it to propellor would be great. Much more robust than Propellor.Property.File.{containsLine,containsLines,lacksLine}, at least. +"""]] diff --git a/doc/forum/modify_managed_host_propellor__39__s_.git__47__config.mdwn b/doc/forum/modify_managed_host_propellor__39__s_.git__47__config.mdwn new file mode 100644 index 00000000..0815b4b3 --- /dev/null +++ b/doc/forum/modify_managed_host_propellor__39__s_.git__47__config.mdwn @@ -0,0 +1 @@ +How can I modify the configuration of a managed host (which seems to be stored in /usr/local/propellor/.git/config) from the host on which I run propellor? diff --git a/doc/forum/modify_managed_host_propellor__39__s_.git__47__config/comment_1_da3ebb4736a1f1012b6d27bcd33ff44f._comment b/doc/forum/modify_managed_host_propellor__39__s_.git__47__config/comment_1_da3ebb4736a1f1012b6d27bcd33ff44f._comment new file mode 100644 index 00000000..f034a377 --- /dev/null +++ b/doc/forum/modify_managed_host_propellor__39__s_.git__47__config/comment_1_da3ebb4736a1f1012b6d27bcd33ff44f._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2014-10-31T14:40:33Z" + content=""" +I'm curious what you need to configure there.. + +But, there seems to be a simple solution: Add a Property that configures +the .git/config however you need to! :) +"""]] diff --git a/doc/forum/propellor_with_no_central_repository__63__.mdwn b/doc/forum/propellor_with_no_central_repository__63__.mdwn new file mode 100644 index 00000000..5f322878 --- /dev/null +++ b/doc/forum/propellor_with_no_central_repository__63__.mdwn @@ -0,0 +1 @@ +Is there a way to use propellor with no central repository? diff --git a/doc/forum/propellor_with_no_central_repository__63__/comment_1_6a2a5068962b17dac08609cd65887f48._comment b/doc/forum/propellor_with_no_central_repository__63__/comment_1_6a2a5068962b17dac08609cd65887f48._comment new file mode 100644 index 00000000..1f1456c5 --- /dev/null +++ b/doc/forum/propellor_with_no_central_repository__63__/comment_1_6a2a5068962b17dac08609cd65887f48._comment @@ -0,0 +1,7 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2014-10-31T14:39:48Z" + content=""" +Not yet, but see [[todo/git_push_over_propellor_ssh_channel]] +"""]] diff --git a/doc/forum/propellor_with_no_central_repository__63__/comment_2_0f035bb4bb5cc13574394505f28abe5e._comment b/doc/forum/propellor_with_no_central_repository__63__/comment_2_0f035bb4bb5cc13574394505f28abe5e._comment new file mode 100644 index 00000000..6a6aa946 --- /dev/null +++ b/doc/forum/propellor_with_no_central_repository__63__/comment_2_0f035bb4bb5cc13574394505f28abe5e._comment @@ -0,0 +1,9 @@ +[[!comment format=mdwn + username="joey" + subject="""yay!""" + date="2014-11-19T01:31:14Z" + content=""" +propellor now supports this mode by default, just use `propellor --spin +hostname` and the changes in the local repo will be pushed and deployed to +the host, w/o needing a centralized git repo. +"""]] diff --git a/doc/forum/property_combinator_ordering.mdwn b/doc/forum/property_combinator_ordering.mdwn new file mode 100644 index 00000000..25549bb4 --- /dev/null +++ b/doc/forum/property_combinator_ordering.mdwn @@ -0,0 +1,8 @@ +when I write + + setDistribution cfg = f `File.hasContent` cfg + `onChange` update + `requires` File.dirExists confDir + +is update called before ensuring the confiDir Exist ? +It seems to me but who knows ? diff --git a/doc/forum/property_combinator_ordering/comment_1_0ea2186b5cfa7eadaf38ac2e97fc4a2c._comment b/doc/forum/property_combinator_ordering/comment_1_0ea2186b5cfa7eadaf38ac2e97fc4a2c._comment new file mode 100644 index 00000000..c41abd90 --- /dev/null +++ b/doc/forum/property_combinator_ordering/comment_1_0ea2186b5cfa7eadaf38ac2e97fc4a2c._comment @@ -0,0 +1,31 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2014-12-01T15:53:11Z" + content=""" +I think that should behave intuitively, but of course if you're unsure +of this kind of thing, adding parens is a good way to disambiguate the +code. + + (f `File.hasContent` cfg `onChange` update) + `requires` File.dirExists confDir + +Written that way, it's explicit that the parenthesized part runs +together as one action. + +Or, we can do a quick test in ghci: + + joey@darkstar:~/src/propellor/src#joeyconfig>ghci Propellor.hs Propellor/Property.hs + *Propellor> let f1 = property "hasContent" (liftIO (print "f1") >> return MadeChange) + *Propellor> let f2 = property "update" (liftIO (print "f2") >> return MadeChange) + *Propellor> let f3 = property "dirExists" (liftIO (print "f3") >> return MadeChange) + *Propellor> runPropellor (Host "foo" [] mempty) $ ensureProperty $ f1 `onChange` f2 `requires` f3 + "dirExists" + "hasContent" + "update" + MadeChange + +So, yes, it's behaving as it should, first ensuring that the `requires` +property is met, and then running the main property, and since it made a +change, following up by running the `onChange` property. +"""]] diff --git a/doc/news/propellor_demo.mdwn b/doc/news/propellor_demo.mdwn new file mode 100644 index 00000000..362f56e6 --- /dev/null +++ b/doc/news/propellor_demo.mdwn @@ -0,0 +1,8 @@ +A quick demo of propellor. + +<video controls src="http://downloads.kitenet.net/talks/propellor_demo/propellor_demo.webm"></video> + +[video](http://downloads.kitenet.net/talks/propellor_demo/propellor_demo.webm) + +(Audio quality is clipped/fast in places, unfortunately this was a problem +with the source recording.) diff --git a/doc/news/version_1.1.0.mdwn b/doc/news/version_1.1.0.mdwn new file mode 100644 index 00000000..4bf09cc4 --- /dev/null +++ b/doc/news/version_1.1.0.mdwn @@ -0,0 +1,33 @@ +propellor 1.1.0 released with [[!toggle text="these changes"]] +[[!toggleable text=""" + * --spin target --via relay causes propellor to bounce through an + intermediate relay host, which handles any necessary uploads + when provisioning the target host. + * --spin can be passed multiple hosts, and it will provision each host + in turn. + * Add --merge, to combine multiple --spin commits into a single, more useful + commit. + * Hostname parameters not containing dots are looked up in the DNS to + find the full hostname. + * propellor --spin can now deploy propellor to hosts that do not have + git, ghc, or apt-get. This is accomplished by uploading a fairly + portable precompiled tarball of propellor. + * Propellor.Property.OS contains properties that can be used to do a clean + reinstall of the OS of an existing host. This can be used, for example, + to do an in-place conversion from Fedora to Debian. + This is experimental; use with caution! + * Added group-related properties. Thanks, Félix Sipma. + * Added Git.barerepo. Thanks, Félix Sipma. + * Added Grub.installed and Grub.boots properties. + * New HostContext can be specified when a PrivData value varies per host. + * hasSomePassword and hasPassword now default to using HostContext. + To specify a different context, use hasSomePassword' and + hasPassword' (API change) + * hasSomePassword and hasPassword now make sure shadow passwords are enabled. + * cron.runPropellor now runs propellor, rather than using its Makefile. + This is more robust. + * propellor.debug can be set in the git config to enable more persistent + debugging output. + * Run apt-cache policy with LANG=C so it works on other locales. + * endAction can be used to register an action to run once propellor + has successfully run on a host."""]]
\ No newline at end of file diff --git a/doc/news/version_1.2.0.mdwn b/doc/news/version_1.2.0.mdwn new file mode 100644 index 00000000..6ea5581e --- /dev/null +++ b/doc/news/version_1.2.0.mdwn @@ -0,0 +1,9 @@ +propellor 1.2.0 released with [[!toggle text="these changes"]] +[[!toggleable text=""" + * Display a warning when ensureProperty is used on a property which has + Info and is so prevented from propigating it. + * Removed boolProperty; instead the new toResult can be used. (API change) + * Include Propellor.Property.OS, which was accidentially left out of the + cabal file in the last release. + * Fix Apache.siteEnabled to update the config file and reload apache when + configuration has changed."""]]
\ No newline at end of file diff --git a/doc/news/version_1.2.1.mdwn b/doc/news/version_1.2.1.mdwn new file mode 100644 index 00000000..59dd4cee --- /dev/null +++ b/doc/news/version_1.2.1.mdwn @@ -0,0 +1,6 @@ +propellor 1.2.1 released with [[!toggle text="these changes"]] +[[!toggleable text=""" + * Added CryptPassword to PrivDataField, for password hashes as produced + by crypt(3). + * User.hasPassword and User.hasSomePassword will now use either + a CryptPassword or a Password from privdata, depending on which is set."""]]
\ No newline at end of file diff --git a/doc/news/version_1.2.2.mdwn b/doc/news/version_1.2.2.mdwn new file mode 100644 index 00000000..c10940fd --- /dev/null +++ b/doc/news/version_1.2.2.mdwn @@ -0,0 +1,4 @@ +propellor 1.2.2 released with [[!toggle text="these changes"]] +[[!toggleable text=""" + * Revert ensureProperty warning message, too many false positives in places + where Info is correctly propigated. Better approach needed."""]]
\ No newline at end of file diff --git a/doc/security.mdwn b/doc/security.mdwn index 12ae18de..831b2b41 100644 --- a/doc/security.mdwn +++ b/doc/security.mdwn @@ -29,7 +29,7 @@ in cleartext private data such as passwords, ssh private keys, etc. Instead, `propellor --spin $host` looks for a `~/.propellor/privdata/privdata.gpg` file and if found decrypts it, -extracts the private that that the $host needs, and sends it to to the +extracts the private data that the $host needs, and sends it to to the $host using ssh. This lets a host know its own private data, without seeing all the rest. diff --git a/doc/security/comment_1_6b4d8f45fc60f12b2b8c41046390cf43._comment b/doc/security/comment_1_6b4d8f45fc60f12b2b8c41046390cf43._comment new file mode 100644 index 00000000..4ed9ecdb --- /dev/null +++ b/doc/security/comment_1_6b4d8f45fc60f12b2b8c41046390cf43._comment @@ -0,0 +1,10 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmtnXa0F3OsNh8H7yf5EEbtuufPZG-3StI" + nickname="Arnaud" + subject="Is it ok to publish to a public repository?" + date="2014-08-29T21:13:19Z" + content=""" +It is not clear to me whether or not it is safe to publish my own propellor repository to a publicly hosted service. It seems to me that when I do ./propellor --add-key MYKEYID, the private key data is stored in the repository as a commit, so pushing it exposes this data to the public. Am I wrong? + +Thanks +"""]] diff --git a/doc/security/comment_2_7cd009d097b01bb3197210b5ea77c7d5._comment b/doc/security/comment_2_7cd009d097b01bb3197210b5ea77c7d5._comment new file mode 100644 index 00000000..4d209b03 --- /dev/null +++ b/doc/security/comment_2_7cd009d097b01bb3197210b5ea77c7d5._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + ip="131.252.200.111" + subject="comment 2" + date="2014-08-29T21:52:02Z" + content=""" +--add-key puts your **public** key in the repository, not the private key. +"""]] diff --git a/doc/security/comment_3_91876d995c40a24858bce61a749a3c16._comment b/doc/security/comment_3_91876d995c40a24858bce61a749a3c16._comment new file mode 100644 index 00000000..4d75842d --- /dev/null +++ b/doc/security/comment_3_91876d995c40a24858bce61a749a3c16._comment @@ -0,0 +1,17 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmtnXa0F3OsNh8H7yf5EEbtuufPZG-3StI" + nickname="Arnaud" + subject="Remote host fails to connect" + date="2014-08-30T06:40:33Z" + content=""" +Makes sense of course, but the message one gets when doing that is a bit misleading. + +I ran into another issue: propellor deploys itself to remote host, but then the propellor instance run on remote host cannot read the remote git repo, because: + +1. the host key is not initially present in root's known_hosts, then +2. the user's (root) public key is unknown to the remote git repo, in my case bitbucket.org, and the URL used is git@bitbucket.org:abailly/capital-match-infra.git which implies connection goes through SSH + +I am puzzled: Does this mean I should add some for use by the remote host deployed to? This does not make sense so there should be another way... If I change the origin url to use https, then I cannot push locally anymore. + +Thanks for your help +"""]] diff --git a/doc/security/comment_4_347ce6a229a2347c5fd945eef72fd7f7._comment b/doc/security/comment_4_347ce6a229a2347c5fd945eef72fd7f7._comment new file mode 100644 index 00000000..b2ac4d57 --- /dev/null +++ b/doc/security/comment_4_347ce6a229a2347c5fd945eef72fd7f7._comment @@ -0,0 +1,22 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmtnXa0F3OsNh8H7yf5EEbtuufPZG-3StI" + nickname="Arnaud" + subject="Output from propellor --spin $host" + date="2014-08-30T07:17:52Z" + content=""" +Here is the output (truncated): + + + Permission denied (publickey). + fatal: Could not read from remote repository. + + Please make sure you have the correct access rights + and the repository exists. + Git fetch ... failed + fatal: ambiguous argument 'origin/master': unknown revision or path not in the working tree. + Use '--' to separate paths from revisions, like this: + 'git <command> [<revision>...] -- [<file>...]' + propellor: user error (git [\"log\",\"-n\",\"1\",\"--format=%G?\",\"origin/master\"] exited 128) + + +"""]] diff --git a/doc/security/comment_5_0c682e12a21d1477628ff0b80e6505d4._comment b/doc/security/comment_5_0c682e12a21d1477628ff0b80e6505d4._comment new file mode 100644 index 00000000..cc26f42d --- /dev/null +++ b/doc/security/comment_5_0c682e12a21d1477628ff0b80e6505d4._comment @@ -0,0 +1,13 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawmtnXa0F3OsNh8H7yf5EEbtuufPZG-3StI" + nickname="Arnaud" + subject="Got it working..." + date="2014-08-31T12:50:17Z" + content=""" +OK, I manage to get my first propellor config run fine by setting different branch.master.url and branch.master.pushUrl configurations: + +* Use a https:// based url for the first +* Use a git:// based url for the second + +I had to nuke the remote /usr/local/propellor directory because it still had wrong configuration with a single remote url. +"""]] diff --git a/doc/security/comment_6_e5f2fdced08fb823efed35684110a840._comment b/doc/security/comment_6_e5f2fdced08fb823efed35684110a840._comment new file mode 100644 index 00000000..be8ac7f9 --- /dev/null +++ b/doc/security/comment_6_e5f2fdced08fb823efed35684110a840._comment @@ -0,0 +1,11 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 6""" + date="2014-11-19T01:35:59Z" + content=""" +@Arnaud, see [[centralized_repository]], including its documentation of a +"deploy" remote, which can be used to configure the url that remote hosts +should pull from. + +Also, propellor can be used now without any centralized repository. +"""]] diff --git a/doc/security/comment_7_ebbb6f3617c879715a35900a07ea1909._comment b/doc/security/comment_7_ebbb6f3617c879715a35900a07ea1909._comment new file mode 100644 index 00000000..e9d20642 --- /dev/null +++ b/doc/security/comment_7_ebbb6f3617c879715a35900a07ea1909._comment @@ -0,0 +1,8 @@ +[[!comment format=mdwn + username="https://www.google.com/accounts/o8/id?id=AItOawkgUir7k_amh9RFp4D3QutX1fGh_nd7ko4" + nickname="Philipp" + subject="Passwords in PrivData" + date="2014-12-13T18:25:23Z" + content=""" +I wonder if there could be a shortcut in PrivData handling that hashes the input with crypt() instead of passing it raw to a machine. For instance passwords are stored in plain on the target machines, while this is not required to set the password in shadow: the hash would suffice. I think this page should at least spell out that fact. +"""]] diff --git a/doc/todo/editor_for_privdata__63__.mdwn b/doc/todo/editor_for_privdata__63__.mdwn new file mode 100644 index 00000000..8b91338c --- /dev/null +++ b/doc/todo/editor_for_privdata__63__.mdwn @@ -0,0 +1,4 @@ +Would adding a way to call $EDITOR to edit privdata be possible? +It would make sense for editing data like logcheck files. + +> [[done]] diff --git a/doc/todo/editor_for_privdata__63__/comment_2_4fcbdf36f32ca7cf82593a8992167aff._comment b/doc/todo/editor_for_privdata__63__/comment_2_4fcbdf36f32ca7cf82593a8992167aff._comment new file mode 100644 index 00000000..bbe93fe3 --- /dev/null +++ b/doc/todo/editor_for_privdata__63__/comment_2_4fcbdf36f32ca7cf82593a8992167aff._comment @@ -0,0 +1,9 @@ +[[!comment format=mdwn + username="http://joeyh.name/" + subject="comment 2" + date="2014-11-11T21:16:09Z" + content=""" +Already exists in `propellor --edit` + +Documentation patches accepted! :) +"""]] diff --git a/doc/todo/etckeeper.mdwn b/doc/todo/etckeeper.mdwn new file mode 100644 index 00000000..7dc80cef --- /dev/null +++ b/doc/todo/etckeeper.mdwn @@ -0,0 +1 @@ +It would be cool to have an etckeeper module :-). diff --git a/doc/todo/etckeeper/comment_1_8766da27c69bbae357d497e0e557fad2._comment b/doc/todo/etckeeper/comment_1_8766da27c69bbae357d497e0e557fad2._comment new file mode 100644 index 00000000..f080f70e --- /dev/null +++ b/doc/todo/etckeeper/comment_1_8766da27c69bbae357d497e0e557fad2._comment @@ -0,0 +1,9 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2014-11-06T15:46:56Z" + content=""" +All I've needed for this is `& Apt.installed ["etckeeper"]` + +Patches welcome, I suppose. +"""]] diff --git a/doc/todo/fail_if_modification_not_commited_when_using_--spin.mdwn b/doc/todo/fail_if_modification_not_commited_when_using_--spin.mdwn new file mode 100644 index 00000000..046f4a6f --- /dev/null +++ b/doc/todo/fail_if_modification_not_commited_when_using_--spin.mdwn @@ -0,0 +1,3 @@ +Sometimes I forget to commit a modification, and running "propellor --spin" automatically commits this stuff. It would be better if "propellor --spin" failed (or, even better, warned the user) that there are uncommited changes, and "propellor --spin" would just always add an empty commit. + +> --merge added; [[done]] --[[Joey]] diff --git a/doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_1_7267d62ccc8db44bccb935836536e8a1._comment b/doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_1_7267d62ccc8db44bccb935836536e8a1._comment new file mode 100644 index 00000000..19b2fab6 --- /dev/null +++ b/doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_1_7267d62ccc8db44bccb935836536e8a1._comment @@ -0,0 +1,30 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2014-11-23T18:41:40Z" + content=""" +Letting --spin commit is part of my workflow. It's great when you're just +changing config.hs to quickly blast out the changes. + +Granted, it is not so nice when doing Property development, as changes get +fragmented across the spins used to test them. I'd be happy to find some +way to improve that. Perhaps a way could be found to get this structure of +git commits: + + manual commit------------------------->manual commit--merge + \--spin--spin--spin--spin--spin------------/ + +Where the second manual commit has an identical tree committed as does the +spin just underneath it, and so the following merge doesn't change any files, +just grafts the two branches back together. + +I guess that could be handled by haing a checkpoint command, that squashes +all the previous spins since the last checkpoint together into one commit, +lets the user edit the commit message of that, and the juggles the branches +into place and creates the merge commit -- which then becomes the new last +checkpoint. + +I'll take patches for such a thing, or more simply a way to configure --spin's +auto-committing behavior. However, I don't want to change the default +behavior to not commit. +"""]] diff --git a/doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_2_e4d170a14d689bef5d9174b251a4fe6f._comment b/doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_2_e4d170a14d689bef5d9174b251a4fe6f._comment new file mode 100644 index 00000000..3e8e5f62 --- /dev/null +++ b/doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_2_e4d170a14d689bef5d9174b251a4fe6f._comment @@ -0,0 +1,7 @@ +[[!comment format=mdwn + username="gueux" + subject="comment 2" + date="2014-11-23T20:23:24Z" + content=""" +Your solution seems a lot better :-). +"""]] diff --git a/doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_3_c69eaa9c6ae5b07b5c2dd2591de965a3._comment b/doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_3_c69eaa9c6ae5b07b5c2dd2591de965a3._comment new file mode 100644 index 00000000..8ad6ab49 --- /dev/null +++ b/doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_3_c69eaa9c6ae5b07b5c2dd2591de965a3._comment @@ -0,0 +1,19 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 3""" + date="2014-11-23T21:12:19Z" + content=""" +Here's a almost-script to do it, which worked when it did it by hand: + +<pre> +get old-head (git show-ref HEAD -s) +get curr-branch (refs/heads/master eg) +find old-commit (look back through git log for the first commit that was not "propellor spin") +git reset old-commit +git commit -a # user gets to edit commit message for all the spins and any staged changes here +git merge -S -s ours old-head +get current-commit (result of merge) +git update-ref curr-branch current-commit +git checkout curr-branch +</pre> +"""]] diff --git a/doc/todo/git_push_over_propellor_ssh_channel.mdwn b/doc/todo/git_push_over_propellor_ssh_channel.mdwn new file mode 100644 index 00000000..c6d42fcf --- /dev/null +++ b/doc/todo/git_push_over_propellor_ssh_channel.mdwn @@ -0,0 +1,13 @@ +Propellor currently needs a central git server. And it has a special-cased +protocol during bootstrap that transfers the git repo over to a new host, +using the ssh connection that will be used to run propellor. + +This could be improved by making a git push be done whenever +`propellor spin $host` runs. The remote propellor runs `git receive-pack`; +the local one runs `git send-pack`. + +Then there would be no need for a central git repo. Although still very +useful if you have multiple propellor driven hosts and you want to just git +commit and let cron sort them out. + +> [[done]]! --[[Joey]] diff --git a/doc/todo/info_propigation_out_of_nested_properties.mdwn b/doc/todo/info_propigation_out_of_nested_properties.mdwn index 1a586be6..b08e326f 100644 --- a/doc/todo/info_propigation_out_of_nested_properties.mdwn +++ b/doc/todo/info_propigation_out_of_nested_properties.mdwn @@ -1,7 +1,7 @@ Currently, Info about a Host's Properties is manually gathered and -propigated. propertyList combines the Info of the Properties in the list. +propigated. propertyList combines the Info of the Properties in the list; Docker.docked extracts relevant Info from the Properties of the container -(but not al of it, intentionally!). +(but not al of it, intentionally!); etc. This works, but it's error-prone. Consider this example: @@ -9,26 +9,91 @@ This works, but it's error-prone. Consider this example: (Just (System (Debian Unstable) _)) -> ensureProperty foo _ -> ensureProperty bar -Here, the Info of `foo` is not propigated out. Nor is `bar`'s Info. -Of course, only one of them will be run, and only its info should be propigated -out.. +Here, the Info of `foo` is not propigated out. Nor is `bar`'s Info. Of +course, only one of them will be run, and only its info should be +propigated out.. -This commonly afflicts eg, privData. For example, `User.hasPassword'` -has this problem, and this prevents --list-fields from listing privdata -that's not set from that property. +---- One approach might be to make the Propellor monad be able to be run in two -modes. In one mode, it actually perform IO, etc. In the other mode, all -liftIO is a no-op, but all Info encountered is accumulated using a Reader -monad. This might need two separate monad definitions. +modes. In run mode, it actually performs IO, etc. In introspection mode, all +liftIO is a no-op, but all Info encountered is accumulated using a Reader. +This might need two separate monad definitions. -That is surely doable, but the withOS example above shows a problem with it -- -the OS is itself part of a Host's info, so won't be known until all its -properties have been examined for info! +That is surely doable, but consider this example: -Perhaps that can be finessed. We don't really need to propigate out OS info. -Just DNS and PrivDataField Info. So info could be collected in 2 passes, -first as it's done now by static propertyInfo values. Then take that -and use it as the Info when running the Properties in the Reader monad. -Combine what the Reader accumulates with the static info to get the full -info. + property "demo" = do + needfoo <- liftIO checkFoo + if needfoo + then ensureProperty foo + else ensureProperty bar + +In introspection mode, the liftIO is a no-op, but needs to return a Bool. +That seems unlikely (how to pick which?), but even if some defaulting is +used, only one of foo or bar's info will be seen. + +---- + +Another approach could be something like this: + + withInfoFrom foo $ \callfoo -> + withInfoFrom bar $ \callbar -> + property "demo" = do + needfoo <- liftIO checkFoo + if needfoo + then callfoo + else callbar + +Here withInfoFrom is able to add foo and bar's Info to the info of the +property that (may) call them. + +This approach is not fully type safe; it would be possible to call +withInfoFrom in a way that didn't let it propigate the info. + +Also it has the problem that it doesn't support this: + + property "demo" = do + needfoo <- liftIO checkFoo + if needfoo + then do + foop <- liftIO getFooParam + ensureProperty (foo foop) + else ensureProperty bar + +---- + +Another approach would be to add a new SimpleProperty, which is a property +that has no Info. Only allow calling ensureProperty on this new type. + +(Or, remove propertyInfo from Property, and add a new InfoProperty that +has the info.) + +But, propertyList can only contain one type at a time, +not a mixed list of Property and SimpleProperty. + +Could a GADT be used instead? + + {-# LANGUAGE GADTs #-} + {-# LANGUAGE EmptyDataDecls #-} + + data HasInfo + data NoInfo + + data Property = IProperty (GProperty HasInfo) | SProperty (GProperty NoInfo) + + data GProperty i where + GIProperty :: Desc -> Propellor Result -> Info -> GProperty HasInfo + GSProperty :: Desc -> Propellor Result -> GProperty NoInfo + + ensureProperty :: GProperty NoInfo -> Propellor Result + ensureProperty (GSProperty d r) = r + +That works. I made a `gadtwip` git branch that elaborated on that, +to the point that Property.File compiles, but is otherwise +unfinished. Most definitions of `Property` need to be changed to +`GProperty NoInfo`, so that ensureProperty can call them. It's a big, +intrusive change, and it may complicate propellor too much. + +(I may need to make instances of Prop for `GProperty NoInfo` and `GProperty +HasInfo`, if that's possible, and make more Property combinators work on +Prop.) diff --git a/doc/todo/port_info_for_properties_for_firewall.mdwn b/doc/todo/port_info_for_properties_for_firewall.mdwn new file mode 100644 index 00000000..efaaba05 --- /dev/null +++ b/doc/todo/port_info_for_properties_for_firewall.mdwn @@ -0,0 +1,24 @@ +The firewall module could be improved if properties that set up a service +on a port included info (see Propellor.Info and Propellor.Types.Info) +about the port(s) used. + +While currently the ports have to be explicitly listed: + + & Apache.installed + & Firewall.installed + & Firewall.addRule (Rule INPUT ACCEPT (Proto TCP :- Port 80)) + & Firewall.addRule (Rule INPUT ACCEPT (Proto TCP :- Port 443)) + +Instead the ports would be derived from the installed services. + + & Apache.installed + & Firewall.installed + +There could also be some combinators to adjust the exposed +ports of a property. + + & localOnly Apache.installed + & exposedPorts [443,80] (Apt.serviceInstalledRunning "apache2") + +Such port enformation is also going to be needed as a basis of +[[type_level_port_conflict_detection]]. --[[Joey]] diff --git a/doc/todo/type_level_port_conflict_detection.mdwn b/doc/todo/type_level_port_conflict_detection.mdwn new file mode 100644 index 00000000..5aec5775 --- /dev/null +++ b/doc/todo/type_level_port_conflict_detection.mdwn @@ -0,0 +1,5 @@ +See <http://stackoverflow.com/questions/26027765/using-types-to-prevent-conflicting-port-numbers-in-a-list> --[[Joey]] + +Needs ghc newer than 7.6.3. It may be possible to port Data.Type.Equality +and Data.Type.Bool to older versions; I got them to compile but they didn't +work right. --[[Joey]] diff --git a/privdata.joey/keyring.gpg b/privdata.joey/keyring.gpg Binary files differdeleted file mode 100644 index 01dd24e7..00000000 --- a/privdata.joey/keyring.gpg +++ /dev/null diff --git a/privdata.joey/privdata.gpg b/privdata.joey/privdata.gpg deleted file mode 100644 index 8f0622fd..00000000 --- a/privdata.joey/privdata.gpg +++ /dev/null @@ -1,851 +0,0 @@ ------BEGIN PGP MESSAGE----- -Version: GnuPG v1 - -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 -UKqlNjNUgvYeVunnry5unNyiTtU0B0/GpYSNM0BwcSNIhTl0R+ASnGOFTjBJdbhU -JGjq2l0P3qR7JKxqDmBISzyjQgwGLGQS+iVdtvDTUdY/JPsuM+/ri1mVPiiQtkEg -pMilJhrjDndgYexL6oy9GaSbkWBLGj/5Y9Tj1t6aMDD3pHG86RzUaOoo547i4MpX -EQQOwLUvlAAFlkPXQSfLMo0IDOOw3XjCtCJrBtHtXeivCPAKGNA/xvs0FLaJlemm -wZeYAxtc6uiTwJZ0E5hl8YfoXOca1CSDO/twJ+S1PpCx+7Wyf2W9dwMt7JCo1ukn -rwr1DrEouzouvveTYcmtT7YkDMGLHzfh8FGoi0ZC4WHFVj9vP7MSymtQnLZU5GmN -GnkQJmm56HytLG3r/JcD6SoSfShZxHcHBTf05oJEmpKFjdL+HJR7W52sisZWBYda -3nw5W39F0wRRwQak4zdYSsGhYKyPZuBTZBYgHpxFkwpOYni/gEwcYq4n90JVLKDf -WRanSvJbVxsO3SwMk/FZAkDzRtIBsK5TKeax0oIJ6Wv7qSO0+48ayV1i5AwXVm8t -FDkdiY/iikduP37zn47GeejnlCA6bCyDauN6AOS2FAhAxNXUkA3Gu3abNXXmrrjs -F36cwbNgvrC5zTACFf8TT53uMiuXIQj60nGMd5ZTFtic9PlX9Q85UvMe9pkNi50n -e1QmaT64DVhNoAri07m7t7NX8YJWc0lOONeScdy/6moYdU9KImoQNs+h1j6hTbe9 -1m6plLONv6nESOFodmRxN5ysO/W694ONLELWe0s4OQ0g0a9ZOi74/s3FmK1hR8EB -6w3zDA1YlBRyaJzb4ArIoU9CMnC0BMM+676NRxAXm33r9VsD9x6MDIdokWQCyb45 -h6lfNl8n4eo0P5rANMhQk5EJAM2JaqthcaumLDWO9V/4GY9M3OXU1JbVWIXAXdct -GbaJshp7/OOcFF23Augzlym5nySfOSCuVSc6YnXG8Icr5Kg1ideU1AW/HxnFgXg/ -BFIiG6IsA0Oeel+ojMhEymg20YlvaGLuiAMzSLlALAQLNrxcMzjsp5z5TgluiyqA -HAMgR7eYYrvI8rb2v9d3wUTN1lft9gVc1UE/lPOOdQHh1o22C+fe/N0blaGEpqEz -XewmBK0+Coyui1yojgND8I9jzO8mxi15XMuhKf6me60ZbRDs40kY6otC/0YNmleX -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 -thMSNK40eLl2ceR0iaGZGdpMYk7b7fBJmBledMgOmDPl/LiMKnZZjMmrtBKv6+qU -wfMpjS9Kw8wYPX5tkAoKWbBXwANQf8xieh+lWtZtsgZVOd4JFCLoU8+iBourqoIZ -z0puaU3YtFsJZpDr4DLgjKPT/qlzuWOU6jTkTWT51/wn+RuT4jC/Al4wPmuM4dW+ -KrNJX3XrC4mxs1Q1kfFTjsHUmFM0f7LFm9+SwOnEjMAmqi9xnXcKY2Tp4Kz9x2PS -jVWOrLrg112mQ49m12ThSPV6ZRYfm9T1cxpnZkUO5uvO1U5LgknAa6tA2WI7qkRc -p6Yhzr3BpOCSwsx2OjiAcx3CRxeAdZ38gvnuxcrAIPnn6QX98rpfJQYZQ+rhllVW -4yImh9z0GeSLgzTLMqFUjx7yYyi+Wnf3V32oxXLuuSBS2CLFMtgivGlUfwedT6GF -QExKTfRfVXjtN0bCo6yIf/p19/bS02fXPeQjgzIqmt2NtlJu+xC4q3JwAwjc7dDY -lGslz0YgN93FqsXYqipsPUH+9rkOC+4BZ9AI2yw3MQ7JJJhCB0ouAX9ZZhL0mZgM -gDE3qzxA8tBt7NBIrfsW2euc4ZKDy4xkugnHrIXuF3E= -=QTfA ------END PGP MESSAGE----- diff --git a/src/Propellor/PrivData/Paths.hs b/src/Propellor/PrivData/Paths.hs index 9f791b76..3d0d8a58 100644 --- a/src/Propellor/PrivData/Paths.hs +++ b/src/Propellor/PrivData/Paths.hs @@ -3,7 +3,7 @@ module Propellor.PrivData.Paths where import System.FilePath privDataDir :: FilePath -privDataDir = "privdata.joey" +privDataDir = "privdata" privDataFile :: FilePath privDataFile = privDataDir </> "privdata.gpg" |
