summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
l---------config.hs2
-rwxr-xr-xdebian/rules2
-rw-r--r--doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file.mdwn34
-rw-r--r--doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_1_932ba6f4e444c99d8d561149d17c8fe7._comment30
-rw-r--r--doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_2_5323336b92d9aef5a9021b924029f3af._comment38
-rw-r--r--doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_3_531c2c5e78fb5c62e54d84231b129dc8._comment11
-rw-r--r--doc/forum/Apache.siteEnabled_doesn_not_update_the_apache_config_file/comment_4_54281604c588a7229f9d987e8cdee802._comment16
-rw-r--r--doc/forum/Propellor_without_superuser_privileges.mdwn3
-rw-r--r--doc/forum/Propellor_without_superuser_privileges/comment_1_021ecbb1b8bd7e26776b49ec75e90d0c._comment26
-rw-r--r--doc/forum/Supported_OS.mdwn5
-rw-r--r--doc/forum/Supported_OS/comment_1_f324bed708305e2667bd00f80544dd90._comment23
-rw-r--r--doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac.mdwn12
-rw-r--r--doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_1_69d7c8fb1d62300456575bb10e935d69._comment10
-rw-r--r--doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_2_da30b2621493e48ceabcfa5732dbcdf8._comment19
-rw-r--r--doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_3_bd76d169af2ef2f154ad1f0f64506661._comment11
-rw-r--r--doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_4_a6a49d35ee8a05abc982049b55d0397c._comment11
-rw-r--r--doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_5_7783b8a96c8032a39ff3b5b446a976ed._comment7
-rw-r--r--doc/forum/modify_managed_host_propellor__39__s_.git__47__config.mdwn1
-rw-r--r--doc/forum/modify_managed_host_propellor__39__s_.git__47__config/comment_1_da3ebb4736a1f1012b6d27bcd33ff44f._comment10
-rw-r--r--doc/forum/propellor_with_no_central_repository__63__.mdwn1
-rw-r--r--doc/forum/propellor_with_no_central_repository__63__/comment_1_6a2a5068962b17dac08609cd65887f48._comment7
-rw-r--r--doc/forum/propellor_with_no_central_repository__63__/comment_2_0f035bb4bb5cc13574394505f28abe5e._comment9
-rw-r--r--doc/forum/property_combinator_ordering.mdwn8
-rw-r--r--doc/forum/property_combinator_ordering/comment_1_0ea2186b5cfa7eadaf38ac2e97fc4a2c._comment31
-rw-r--r--doc/news/propellor_demo.mdwn8
-rw-r--r--doc/news/version_1.2.1.mdwn6
-rw-r--r--doc/news/version_1.2.2.mdwn4
-rw-r--r--doc/news/version_1.3.0.mdwn17
-rw-r--r--doc/news/version_1.3.1.mdwn6
-rw-r--r--doc/news/version_1.3.2.mdwn5
-rw-r--r--doc/news/version_2.1.0.mdwn10
-rw-r--r--doc/security.mdwn2
-rw-r--r--doc/security/comment_1_6b4d8f45fc60f12b2b8c41046390cf43._comment10
-rw-r--r--doc/security/comment_2_7cd009d097b01bb3197210b5ea77c7d5._comment8
-rw-r--r--doc/security/comment_3_91876d995c40a24858bce61a749a3c16._comment17
-rw-r--r--doc/security/comment_4_347ce6a229a2347c5fd945eef72fd7f7._comment22
-rw-r--r--doc/security/comment_5_0c682e12a21d1477628ff0b80e6505d4._comment13
-rw-r--r--doc/security/comment_6_e5f2fdced08fb823efed35684110a840._comment11
-rw-r--r--doc/security/comment_7_ebbb6f3617c879715a35900a07ea1909._comment8
-rw-r--r--doc/todo/Bug_in_Property.Ssh.authorizedKey.mdwn8
-rw-r--r--doc/todo/docker_todo_list.mdwn2
-rw-r--r--doc/todo/editor_for_privdata__63__.mdwn4
-rw-r--r--doc/todo/editor_for_privdata__63__/comment_2_4fcbdf36f32ca7cf82593a8992167aff._comment9
-rw-r--r--doc/todo/etckeeper.mdwn1
-rw-r--r--doc/todo/etckeeper/comment_1_8766da27c69bbae357d497e0e557fad2._comment9
-rw-r--r--doc/todo/fail_if_modification_not_commited_when_using_--spin.mdwn3
-rw-r--r--doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_1_7267d62ccc8db44bccb935836536e8a1._comment30
-rw-r--r--doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_2_e4d170a14d689bef5d9174b251a4fe6f._comment7
-rw-r--r--doc/todo/fail_if_modification_not_commited_when_using_--spin/comment_3_c69eaa9c6ae5b07b5c2dd2591de965a3._comment19
-rw-r--r--doc/todo/git_push_over_propellor_ssh_channel.mdwn13
-rw-r--r--doc/todo/info_propigation_out_of_nested_properties.mdwn109
-rw-r--r--doc/todo/lxc_containers_support.mdwn1
-rw-r--r--doc/todo/port_info_for_properties_for_firewall.mdwn24
-rw-r--r--doc/todo/publish_propellor_as_library_to_hackage.mdwn4
-rw-r--r--doc/todo/publish_propellor_as_library_to_hackage/comment_1_00a865bf7977c0e49f54a365f4b60ce8._comment27
-rw-r--r--doc/todo/publish_propellor_as_library_to_hackage/comment_2_29cc276929020e68eae8ae04110a3f5f._comment17
-rw-r--r--doc/todo/type_level_port_conflict_detection.mdwn5
-rw-r--r--privdata.joey/keyring.gpgbin113014 -> 0 bytes
-rw-r--r--privdata.joey/privdata.gpg1214
-rw-r--r--src/Propellor/PrivData/Paths.hs2
60 files changed, 738 insertions, 1244 deletions
diff --git a/config.hs b/config.hs
index 07959a0a..ec313725 120000
--- a/config.hs
+++ b/config.hs
@@ -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.
-
-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!
-
-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.
+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 consider this example:
+
+ 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..709ee35b
--- /dev/null
+++ b/doc/todo/publish_propellor_as_library_to_hackage.mdwn
@@ -0,0 +1,4 @@
+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.
+
+> [[done]] --[[Joey]]
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/publish_propellor_as_library_to_hackage/comment_2_29cc276929020e68eae8ae04110a3f5f._comment b/doc/todo/publish_propellor_as_library_to_hackage/comment_2_29cc276929020e68eae8ae04110a3f5f._comment
new file mode 100644
index 00000000..af61b1db
--- /dev/null
+++ b/doc/todo/publish_propellor_as_library_to_hackage/comment_2_29cc276929020e68eae8ae04110a3f5f._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2015-02-28T17:08:28Z"
+ content="""
+Ok, I got --spin to not use the Makefile any more. So with the 2.2.0
+release, if you want to make ~/.propellor contain only a config.hs
+file and a foo.cabal file, that will work. The cabal file would contain
+something like:
+
+<pre>
+Executable propellor-config
+ Main-Is: config.hs
+ GHC-Options: -Wall -threaded -O0
+ Build-Depends: propellor, base >= 4.5, base < 5
+</pre>
+"""]]
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
deleted file mode 100644
index 01dd24e7..00000000
--- a/privdata.joey/keyring.gpg
+++ /dev/null
Binary files differ
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"