diff options
53 files changed, 675 insertions, 882 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.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/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/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 1e3c2182..00000000 --- a/privdata.joey/privdata.gpg +++ /dev/null @@ -1,858 +0,0 @@ ------BEGIN PGP MESSAGE----- -Version: GnuPG v1 - -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 -=tleV ------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" |
