diff options
59 files changed, 717 insertions, 1242 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.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/news/version_1.3.0.mdwn b/doc/news/version_1.3.0.mdwn new file mode 100644 index 00000000..87abb2f7 --- /dev/null +++ b/doc/news/version_1.3.0.mdwn @@ -0,0 +1,17 @@ +propellor 1.3.0 released with [[!toggle text="these changes"]] +[[!toggleable text=""" + * --spin checks if the DNS matches any configured IP address property + of the host, and if not, sshes to the host by IP address. + * Detect #774376 and refuse to use docker if the system is so broken + that docker exec doesn't enter a chroot. + * Update intermediary propellor in --spin --via + * Added support for DNSSEC. + * Ssh.hostKey and Ssh.hostKeys no longer install public keys from + the privdata. Instead, the public keys are included in the + configuration. (API change) + * Ssh.hostKeys now removes any host keys of types that the host is not + configured to have. + * sshPubKey is renamed to Ssh.pubKey, and has an added SshKeyType + parameter. (API change) + * CloudAtCost.deCruft no longer forces randomHostKeys. + * Fix build with process 1.2.1.0."""]]
\ No newline at end of file diff --git a/doc/news/version_1.3.1.mdwn b/doc/news/version_1.3.1.mdwn new file mode 100644 index 00000000..74a39ac4 --- /dev/null +++ b/doc/news/version_1.3.1.mdwn @@ -0,0 +1,6 @@ +propellor 1.3.1 released with [[!toggle text="these changes"]] +[[!toggleable text=""" + * Fix bug that prevented deploying ssh host keys when the file for the + key didn't already exist. + * DNS records for hosts with known ssh public keys now automatically + include SSHFP records."""]]
\ No newline at end of file diff --git a/doc/news/version_1.3.2.mdwn b/doc/news/version_1.3.2.mdwn new file mode 100644 index 00000000..77902008 --- /dev/null +++ b/doc/news/version_1.3.2.mdwn @@ -0,0 +1,5 @@ +propellor 1.3.2 released with [[!toggle text="these changes"]] +[[!toggleable text=""" + * SSHFP records are also generated for CNAMES of hosts. + * Merge Utiity modules from git-annex. + * Ignore bogus DNS when spinning the local host."""]]
\ No newline at end of file diff --git a/doc/news/version_2.1.0.mdwn b/doc/news/version_2.1.0.mdwn new file mode 100644 index 00000000..c2857f7c --- /dev/null +++ b/doc/news/version_2.1.0.mdwn @@ -0,0 +1,10 @@ +propellor 2.1.0 released with [[!toggle text="these changes"]] +[[!toggleable text=""" + * Additional tor properties, including support for making relays, + and naming bridges, relays, etc. + * New Cron.Times data type, which allows Cron.job to install + daily/monthly/weekly jobs that anacron can run. (API change) + * Fix Git.daemonRunning to restart inetd after enabling the git server. + * Ssh.authorizedKey: Make the authorized\_keys file and .ssh directory + be owned by the user, not root. + * Ssh.knownHost: Make the .ssh directory be owned by the user, not root."""]]
\ 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/Bug_in_Property.Ssh.authorizedKey.mdwn b/doc/todo/Bug_in_Property.Ssh.authorizedKey.mdwn new file mode 100644 index 00000000..7a59fc20 --- /dev/null +++ b/doc/todo/Bug_in_Property.Ssh.authorizedKey.mdwn @@ -0,0 +1,8 @@ +If Ssh.authorizedKey in propellor 2.0.0 is used to create .ssh/authorized_keys for +a user other than root, it will be owned by root:root and won't +work for the user. Adding a key to an existing authorized_keys +file doesn't change its ownership and therefore works fine. + +-- weinzwang + +> Thanks, [[fixed|done]] this and will make a release. diff --git a/doc/todo/docker_todo_list.mdwn b/doc/todo/docker_todo_list.mdwn index 72ded426..1321445d 100644 --- a/doc/todo/docker_todo_list.mdwn +++ b/doc/todo/docker_todo_list.mdwn @@ -1,5 +1,3 @@ * There is no way for a property of a docker container to require some property be met outside the container. For example, some servers need ntp installed for a good date source. -* The SimpleSh was added before `docker exec` existed, and could probably - be eliminated by using that. 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 e6427069..536d6719 100644 --- a/doc/todo/info_propigation_out_of_nested_properties.mdwn +++ b/doc/todo/info_propigation_out_of_nested_properties.mdwn @@ -1,36 +1,97 @@ > Now [[fixed|done]]!! --[[Joey]] -Currently, Info about a Host's Properties is manually gathered and -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!). +Currently, Info about a Host's Properties is propigated to the host by +examining the tree of Properties. -This works, but it's error-prone. Consider this example: +This works, but there's one problem. Consider this example: withOS desc $ \o -> case o of (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.. +It's not really clear if just one Info, or both 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 =<< liftIO (getBarParam) + +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. + +Worse, the bar property is not fully known until IO can be performed to get +its parameter. + +---- + +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 adds foo and bar as child properties of the demo 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. + +And again this doesn't solve the problem that IO can be needed to get +a parameter of a child property. + +---- + +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've tried to make this change a couple times now, and not been completely +successful so far. + +(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/lxc_containers_support.mdwn b/doc/todo/lxc_containers_support.mdwn new file mode 100644 index 00000000..5e9da306 --- /dev/null +++ b/doc/todo/lxc_containers_support.mdwn @@ -0,0 +1 @@ +Adding lxc containers support would be great, as an alternative to docker, chroot, or systemd containers. 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/publish_propellor_as_library_to_hackage.mdwn b/doc/todo/publish_propellor_as_library_to_hackage.mdwn new file mode 100644 index 00000000..24e07497 --- /dev/null +++ b/doc/todo/publish_propellor_as_library_to_hackage.mdwn @@ -0,0 +1,2 @@ +Currently, AFAIK, one needs to fork propellor repo, add its own configuration and compile propellor binary from all the source tree. +It would be handy and more modular to allow one to have a propellor configuration linked to propellor as a library, hosted on hackage. diff --git a/doc/todo/publish_propellor_as_library_to_hackage/comment_1_00a865bf7977c0e49f54a365f4b60ce8._comment b/doc/todo/publish_propellor_as_library_to_hackage/comment_1_00a865bf7977c0e49f54a365f4b60ce8._comment new file mode 100644 index 00000000..8d56f0f1 --- /dev/null +++ b/doc/todo/publish_propellor_as_library_to_hackage/comment_1_00a865bf7977c0e49f54a365f4b60ce8._comment @@ -0,0 +1,27 @@ +[[!comment format=mdwn + username="joey" + subject="""comment 1""" + date="2015-02-28T15:01:24Z" + content=""" +Unusual as it is for propellor's configuration git repo to include the full +source code to propellor, I like this approach. It lets users change any +existing property that is not generic enough, or makes assumptions they +don't like, or needs porting to their OS of choice. + +But still, propellor is +[on hackage](http://hackage.haskell.org/package/propellor), as +a library. It can be used that way if you want to. + +I don't think that any of propellor's code cares how it's distributed, +except for src/wrapper.hs (which cabal will install as +~/.cabal/bin/propellor), which sets up the ~/.propellor/ repository. You +can bypass using that wrapper if you like, and cabal install propellor and +create your own ~/.propellor/ repository containing only your own +config.hs, and build and use propellor that way. + +Where that approach becomes a problem is that propellor --spin currently +relies on propellor's Makefile being in the repository, when bootstrapping +propellor on a remote host. So you'll need to include a copy of that in +your repo for --spin to work. I'd like to get rid of the need for the +Makefile. (Only the build and deps targets are used by --spin.) +"""]] 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 1eecddd5..00000000 --- a/privdata.joey/privdata.gpg +++ /dev/null @@ -1,1214 +0,0 @@ ------BEGIN PGP MESSAGE----- -Version: GnuPG v1 - -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 -8pC5d06SwlJDaXFDpDzq -=wgfH ------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" |
