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/forum/trying_to_--spin_to_a_sid+experimental_machine.mdwn290
-rw-r--r--doc/forum/trying_to_--spin_to_a_sid+experimental_machine/comment_1_df7ac45d7e576e8d73a8665521dbd6e0._comment29
-rw-r--r--doc/forum/trying_to_--spin_to_a_sid+experimental_machine/comment_2_8600d257d92f786f2fcf0d4934f727d5._comment17
-rw-r--r--doc/news/propellor_demo.mdwn8
-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.2.1.mdwn6
-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/publish_propellor_as_library_to_hackage/comment_3_efbe0ef77be957c37e745ec64452ae99._comment10
-rw-r--r--doc/todo/publish_propellor_as_library_to_hackage/comment_4_6ebf2e30596ddf6eba91717576837019._comment8
-rw-r--r--doc/todo/publish_propellor_as_library_to_hackage/comment_5_4a4e94c637e0380adc1a43ec3d0633e1._comment8
-rw-r--r--doc/todo/publish_propellor_as_library_to_hackage/comment_6_19470170c3ef461f446b0af1d8501640._comment8
-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
66 files changed, 1098 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 c88cc004..a71212db 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/forum/trying_to_--spin_to_a_sid+experimental_machine.mdwn b/doc/forum/trying_to_--spin_to_a_sid+experimental_machine.mdwn
new file mode 100644
index 00000000..1fde595c
--- /dev/null
+++ b/doc/forum/trying_to_--spin_to_a_sid+experimental_machine.mdwn
@@ -0,0 +1,290 @@
+I'm trying to get propellor running, and for now, I'd prefer
+to not use a central git repo, according to what I have read
+
+```
+ propellor --spin host
+```
+
+should do just that: not use git.
+
+So I have cabal installed propellor locally, and
+in addition cloned
+
+```
+ git clone git://propellor.branchable.com/ .propellor
+```
+
+in my $HOME
+
+My local machine (from where I run propellor) runs debian testing, the
+machine I want to spin to: softland, debian unstable+experimental,
+ie. unstable in general + all things ghc from experimental, to get ghc
+7.8.4 (but not any more than that from experimental).
+
+was not sure, what the right propellor config would be in that case:
+
+```
+& os (System (Debian Experimental) "amd64")
+```
+which I have used, or
+
+```
+ & os (System (Debian Unstable) "amd64")
+```
+because in general I want Unstable
+
+
+First thing I notice, when running
+
+
+```
+$ propellor --spin softland
+```
+
+propellor nevertheless tries to git push (but fails, obviously,
+somewhere down in propellors output):
+
+```
+...
+Building propellor-2.2.1...
+Preprocessing library propellor-2.2.1...
+In-place registering propellor-2.2.1...
+Preprocessing executable 'propellor' for propellor-2.2.1...
+Preprocessing executable 'propellor-config' for propellor-2.2.1...
+Propellor build ... done
+[master 8ca2715] propellor spin
+Git commit ... done
+Counting objects: 10, done.
+Delta compression using up to 2 threads.
+Compressing objects: 100% (8/8), done.
+Writing objects: 100% (10/10), 913 bytes | 0 bytes/s, done.
+Total 10 (delta 6), reused 0 (delta 0)
+remote: you are not allowed to change config.hs
+To git://propellor.branchable.com/
+ ! [remote rejected] master -> master (pre-receive hook declined)
+error: failed to push some refs to 'git://propellor.branchable.com/'
+Push to central git repository ... failed
+Stop listening request sent.
+Hit http://ftp.uk.debian.org sid InRelease
+Hit http://ftp.uk.debian.org experimental InRelease
+Get:1 http://ftp.uk.debian.org sid/main amd64 Packages/DiffIndex [7,876 B]
+...
+```
+
+Note in particular the lines:
+
+```
+ To git://propellor.branchable.com/
+ ! [remote rejected] master -> master (pre-receive hook declined)
+ error: failed to push some refs to 'git://propellor.branchable.com/'
+ Push to central git repository ... failed
+```
+
+Shouldn't propellor be completely quiet about git /
+not try to push at all?
+
+OK, never mind, let's see what's next: some long
+output, propellor finally fails, I assume it's because
+of my sid+experimental configuration?
+
+
+```
+Stop listening request sent.
+Hit http://ftp.uk.debian.org sid InRelease
+Hit http://ftp.uk.debian.org experimental InRelease
+Get:1 http://ftp.uk.debian.org sid/main amd64 Packages/DiffIndex [7,876 B]
+Get:2 http://ftp.uk.debian.org sid/contrib amd64 Packages/DiffIndex [7,819 B]
+Get:3 http://ftp.uk.debian.org sid/non-free amd64 Packages/DiffIndex [7,819 B]
+Get:4 http://ftp.uk.debian.org sid/contrib Translation-en/DiffIndex [7,819 B]
+Get:5 http://ftp.uk.debian.org sid/main Translation-en/DiffIndex [7,876 B]
+Get:6 http://ftp.uk.debian.org sid/non-free Translation-en/DiffIndex [7,819 B]
+Get:7 http://ftp.uk.debian.org sid/main Sources [7,633 kB]
+Get:8 http://ftp.uk.debian.org sid/contrib Sources [57.1 kB]
+Get:9 http://ftp.uk.debian.org sid/non-free Sources [105 kB]
+Get:10 http://ftp.uk.debian.org experimental/main Sources/DiffIndex [7,819 B]
+Get:11 http://ftp.uk.debian.org experimental/contrib Sources/DiffIndex [7,819 B]
+Get:12 http://ftp.uk.debian.org experimental/non-free Sources/DiffIndex [7,819 B]
+Get:13 http://ftp.uk.debian.org experimental/main amd64 Packages/DiffIndex [7,819 B]
+Get:14 http://ftp.uk.debian.org experimental/contrib amd64 Packages/DiffIndex [7,819 B]
+Get:15 http://ftp.uk.debian.org experimental/contrib Translation-en/DiffIndex [7,819 B]
+Get:16 http://ftp.uk.debian.org experimental/main Translation-en/DiffIndex [7,819 B]
+Fetched 7,897 kB in 6s (1,169 kB/s)
+Reading package lists...
+Reading package lists...
+Building dependency tree...
+Reading state information...
+Skipping gnupg, it is already installed and upgrade is not set.
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Reading package lists...
+Building dependency tree...
+Reading state information...
+Skipping ghc, it is already installed and upgrade is not set.
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Reading package lists...
+Building dependency tree...
+Reading state information...
+Skipping cabal-install, it is already installed and upgrade is not set.
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Reading package lists...
+Building dependency tree...
+Reading state information...
+Skipping libghc-async-dev, it is already installed and upgrade is not set.
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Reading package lists...
+Building dependency tree...
+Reading state information...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+The following packages have unmet dependencies:
+ libghc-missingh-dev : Depends: libghc-hunit-dev-1.2.5.2-6e02e
+ Depends: libghc-array-dev-0.4.0.1-3b784
+ Depends: libghc-base-dev-4.6.0.1-8aa5d
+ Depends: libghc-containers-dev-0.5.0.0-ab1da
+ Depends: libghc-directory-dev-1.2.0.1-91a78
+ Depends: libghc-filepath-dev-1.3.0.1-b12cb
+ Depends: libghc-hslogger-dev-1.2.1-028cc
+ Depends: libghc-mtl-dev-2.1.2-94c72
+ Depends: libghc-network-dev-2.4.1.2-040ce
+ Depends: libghc-old-locale-dev-1.0.0.5-6729c
+ Depends: libghc-old-time-dev-1.1.0.1-2f8ea
+ Depends: libghc-parsec-dev-3.1.3-6c6e2
+ Depends: libghc-process-dev-1.1.0.2-76e05
+ Depends: libghc-random-dev-1.0.1.1-43fdc
+ Depends: libghc-regex-compat-dev-0.95.1-121c7
+ Depends: libghc-time-dev-1.4.0.1-10dc4
+ Depends: libghc-unix-dev-2.6.0.1-4f219
+E: Unable to correct problems, you have held broken packages.
+Reading package lists...
+Building dependency tree...
+Reading state information...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+The following packages have unmet dependencies:
+ libghc-hslogger-dev : Depends: libghc-base-dev-4.6.0.1-8aa5d
+ Depends: libghc-containers-dev-0.5.0.0-ab1da
+ Depends: libghc-directory-dev-1.2.0.1-91a78
+ Depends: libghc-mtl-dev-2.1.2-94c72
+ Depends: libghc-network-dev-2.4.1.2-040ce
+ Depends: libghc-old-locale-dev-1.0.0.5-6729c
+ Depends: libghc-process-dev-1.1.0.2-76e05
+ Depends: libghc-time-dev-1.4.0.1-10dc4
+ Depends: libghc-unix-dev-2.6.0.1-4f219
+E: Unable to correct problems, you have held broken packages.
+Reading package lists...
+Building dependency tree...
+Reading state information...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+The following packages have unmet dependencies:
+ libghc-unix-compat-dev : Depends: libghc-base-dev-4.6.0.1-8aa5d
+ Depends: libghc-unix-dev-2.6.0.1-4f219
+E: Unable to correct problems, you have held broken packages.
+Reading package lists...
+Building dependency tree...
+Reading state information...
+Skipping libghc-ansi-terminal-dev, it is already installed and upgrade is not set.
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Reading package lists...
+Building dependency tree...
+Reading state information...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+The following packages have unmet dependencies:
+ libghc-ifelse-dev : Depends: libghc-base-dev-4.6.0.1-8aa5d
+E: Unable to correct problems, you have held broken packages.
+Reading package lists...
+Building dependency tree...
+Reading state information...
+Skipping libghc-network-dev, it is already installed and upgrade is not set.
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Reading package lists...
+Building dependency tree...
+Reading state information...
+Skipping libghc-quickcheck2-dev, it is already installed and upgrade is not set.
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Reading package lists...
+Building dependency tree...
+Reading state information...
+Skipping libghc-mtl-dev, it is already installed and upgrade is not set.
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Reading package lists...
+Building dependency tree...
+Reading state information...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+The following packages have unmet dependencies:
+ libghc-monadcatchio-transformers-dev : Depends: libghc-base-dev-4.6.0.1-8aa5d
+ Depends: libghc-extensible-exceptions-dev-0.1.1.4-255a3
+ Depends: libghc-monads-tf-dev-0.1.0.2-731f0
+ Depends: libghc-transformers-dev-0.3.0.0-ff2bb
+E: Unable to correct problems, you have held broken packages.
+Downloading the latest package list from hackage.haskell.org
+Skipping download: Local and remote files match.
+Resolving dependencies...
+All the requested packages are already installed:
+Use --reinstall if you want to reinstall anyway.
+Resolving dependencies...
+Configuring propellor-2.2.1...
+Building propellor-2.2.1...
+Preprocessing library propellor-2.2.1...
+In-place registering propellor-2.2.1...
+Preprocessing executable 'propellor' for propellor-2.2.1...
+Preprocessing excaecutable 'propellor-bal: can't find source for configconf in src
+ig' for propellor-2.2.1...
+propellor: user error (ssh ["-o","ControlPath=/home/rx/.ssh/propellor/softland.sock","-o","ControlMaster=auto","-o","ControlPersist=yes","root@softland","sh -c 'if [ ! -d /usr/local/propellor/.git ] ; then (if ! git --version >/dev/null; then apt-get update && apt-get --no-install-recommends --no-upgrade -y install git; fi && echo STATUSNeedGitClone) || echo STATUSNeedPrecompiled ; else cd /usr/local/propellor && if ! test -x ./propellor; then ( apt-get update ; apt-get --no-upgrade --no-install-recommends -y install gnupg ; apt-get --no-upgrade --no-install-recommends -y install ghc ; apt-get --no-upgrade --no-install-recommends -y install cabal-install ; apt-get --no-upgrade --no-install-recommends -y install libghc-async-dev ; apt-get --no-upgrade --no-install-recommends -y install libghc-missingh-dev ; apt-get --no-upgrade --no-install-recommends -y install libghc-hslogger-dev ; apt-get --no-upgrade --no-install-recommends -y install libghc-unix-compat-dev ; apt-get --no-upgrade --no-install-recommends -y install libghc-ansi-terminal-dev ; apt-get --no-upgrade --no-install-recommends -y install libghc-ifelse-dev ; apt-get --no-upgrade --no-install-recommends -y install libghc-network-dev ; apt-get --no-upgrade --no-install-recommends -y install libghc-quickcheck2-dev ; apt-get --no-upgrade --no-install-recommends -y install libghc-mtl-dev ; apt-get --no-upgrade --no-install-recommends -y install libghc-monadcatchio-transformers-dev ; cabal update ; cabal install --only-dependencies ) || true && cabal configure && cabal build && ln -sf dist/build/propellor-config/propellor-config propellor; fi && ./propellor --boot softland ; fi'"] exited 1)
+rx@varenne ~/work/propellor $
+```
+
+I should add, that I have tried to --spin to another
+machine, and ... finally got that working:
+
+
+```
+ , host "laptop"
+ & os (System (Debian Testing) "amd64")
+```
+
+Not sure, if I need more than that, want to keep it to the
+minimum first, anyway:
+
+
+```
+ propellor --spin laptop
+```
+
+this works, yeah - sorry for the noise, above - but still I get
+
+
+```
+Git commit ... done
+To git://propellor.branchable.com/
+ ! [rejected] master -> master (fetch first)
+error: failed to push some refs to 'git://propellor.branchable.com/'
+hint: Updates were rejected because the remote contains work that you do
+hint: not have locally. This is usually caused by another repository pushing
+hint: to the same ref. You may want to first integrate the remote changes
+hint: (e.g., 'git pull ...') before pushing again.
+hint: See the 'Note about fast-forwards' in 'git push --help' for details.
+Push to central git repository ... failed
+```
+
+Possible to turn off these git push attempts?
+
+
+Thanks,
+ Andreas
diff --git a/doc/forum/trying_to_--spin_to_a_sid+experimental_machine/comment_1_df7ac45d7e576e8d73a8665521dbd6e0._comment b/doc/forum/trying_to_--spin_to_a_sid+experimental_machine/comment_1_df7ac45d7e576e8d73a8665521dbd6e0._comment
new file mode 100644
index 00000000..cfe1750a
--- /dev/null
+++ b/doc/forum/trying_to_--spin_to_a_sid+experimental_machine/comment_1_df7ac45d7e576e8d73a8665521dbd6e0._comment
@@ -0,0 +1,29 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm-czsfuWENKQ0GI8l0gnGTeF1JEli1mA0"
+ nickname="Andreas"
+ subject="finally got it working"
+ date="2015-03-27T05:15:26Z"
+ content="""
+can spin to softland, my sid+experimental host now.
+
+with recent git://propellor.branchable.com/ updates
+and have used:
+
+```
+ & os (System (Debian Experimental) \"amd64\")
+```
+
+so sorry for the noise, still not sure about:
+
+* how to express my installation properly:
+ mostly unstable, ghc stuff from experimental
+
+* how to turn off the git push to branchable attempts
+ when just spinning to one of my mashines:
+ have set now:
+ ```
+ git branch --unset-upstream
+ ```
+ which shortcuts these attempts at least.
+
+"""]]
diff --git a/doc/forum/trying_to_--spin_to_a_sid+experimental_machine/comment_2_8600d257d92f786f2fcf0d4934f727d5._comment b/doc/forum/trying_to_--spin_to_a_sid+experimental_machine/comment_2_8600d257d92f786f2fcf0d4934f727d5._comment
new file mode 100644
index 00000000..51c3fc53
--- /dev/null
+++ b/doc/forum/trying_to_--spin_to_a_sid+experimental_machine/comment_2_8600d257d92f786f2fcf0d4934f727d5._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2015-03-30T23:22:17Z"
+ content="""
+Pushing to origin is needed when using propellor in the central git
+repository deployment mode. So it makes sense for --spin to try to push.
+If that push fails for some reason, it's not a fatal error, since propellor
+--spin also does peer-to-peer pushes.
+
+I don't think I want to get into trying to determine if a particular origin
+repo url is read-only or read-write. It can be hard to tell with eg
+a https url.
+
+Why don't you just `git remote rename origin upstream`? If the remote
+is not called origin, propellor will ignore it.
+"""]]
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.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.2.1.mdwn b/doc/news/version_2.2.1.mdwn
new file mode 100644
index 00000000..69f7faa3
--- /dev/null
+++ b/doc/news/version_2.2.1.mdwn
@@ -0,0 +1,6 @@
+propellor 2.2.1 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * userScriptProperty now passes --shell /bin/sh, so it can be used
+ even for users with nonstandard shells.
+ * Fix bug in docker propellor shim setup introduced in last release,
+ which broke provisioning of new docker containers."""]] \ 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/publish_propellor_as_library_to_hackage/comment_3_efbe0ef77be957c37e745ec64452ae99._comment b/doc/todo/publish_propellor_as_library_to_hackage/comment_3_efbe0ef77be957c37e745ec64452ae99._comment
new file mode 100644
index 00000000..09628e53
--- /dev/null
+++ b/doc/todo/publish_propellor_as_library_to_hackage/comment_3_efbe0ef77be957c37e745ec64452ae99._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmtnXa0F3OsNh8H7yf5EEbtuufPZG-3StI"
+ nickname="Arnaud"
+ subject="You rocks!"
+ date="2015-03-05T15:24:49Z"
+ content="""
+Apologies for wrong information, I did not check if propellor was on hackage. Anyway, thanks a lot for caring to \"fix\" that, will give it a try this week and keep you posted.
+
+Thanks a lot
+"""]]
diff --git a/doc/todo/publish_propellor_as_library_to_hackage/comment_4_6ebf2e30596ddf6eba91717576837019._comment b/doc/todo/publish_propellor_as_library_to_hackage/comment_4_6ebf2e30596ddf6eba91717576837019._comment
new file mode 100644
index 00000000..737e7066
--- /dev/null
+++ b/doc/todo/publish_propellor_as_library_to_hackage/comment_4_6ebf2e30596ddf6eba91717576837019._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmtnXa0F3OsNh8H7yf5EEbtuufPZG-3StI"
+ nickname="Arnaud"
+ subject="Propellor 2.2.0 not on hackage"
+ date="2015-03-08T20:21:42Z"
+ content="""
+So I cannot depend on it right now. Do you know when it will be available there?
+"""]]
diff --git a/doc/todo/publish_propellor_as_library_to_hackage/comment_5_4a4e94c637e0380adc1a43ec3d0633e1._comment b/doc/todo/publish_propellor_as_library_to_hackage/comment_5_4a4e94c637e0380adc1a43ec3d0633e1._comment
new file mode 100644
index 00000000..85f95c17
--- /dev/null
+++ b/doc/todo/publish_propellor_as_library_to_hackage/comment_5_4a4e94c637e0380adc1a43ec3d0633e1._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 5"""
+ date="2015-03-09T17:00:35Z"
+ content="""
+SImply because 2.2.0 had not been released yet. (UNRELEASED in
+changelog..)
+"""]]
diff --git a/doc/todo/publish_propellor_as_library_to_hackage/comment_6_19470170c3ef461f446b0af1d8501640._comment b/doc/todo/publish_propellor_as_library_to_hackage/comment_6_19470170c3ef461f446b0af1d8501640._comment
new file mode 100644
index 00000000..143f1dea
--- /dev/null
+++ b/doc/todo/publish_propellor_as_library_to_hackage/comment_6_19470170c3ef461f446b0af1d8501640._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmtnXa0F3OsNh8H7yf5EEbtuufPZG-3StI"
+ nickname="Arnaud"
+ subject="comment 6"
+ date="2015-03-10T06:28:52Z"
+ content="""
+Sorry, I did not read the changelog. Thanks for all the hard work on propellor.
+"""]]
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 6d570307..00000000
--- a/privdata.joey/privdata.gpg
+++ /dev/null
@@ -1,1214 +0,0 @@
------BEGIN PGP MESSAGE-----
-Version: GnuPG v1
-
-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
-GeDwRq2wKVexXroYfQh/h6CYCSE+R7iWkIUFF3gKYKini+RtVHWtyTTgtXG5ctGo
-6tzVUB7ZpYD7CvE4lfby80yCBZnl7mkRLsN5ZVwAQIRlSandQqc6089SB/KSQx/7
-gDSwtx56DwKGf6832s6XCpqmMfTRj5eggLvaaiFOXfUUzYJPMV+NNYf1fCchwdif
-/LHfrC+YBHKJTWOe8rchLspEBPlDGO/ken9bqs3pse0x+XjkB0qcpoUy9VKVvaqT
-oLnube4ZE56BgMK8rOu35NKSEqvq1qufiNq+rQUdMg5Z0xBBvgUs4dmSkK+hY1Bw
-ClJerccmMp3P9Jjw4n7WgdNQ57fUnLwRBYQhodFpuJGb7ohydveYSID8jE9ACVfo
-m9+2+WSML77zemDTNWxReVFhq46h94fpbLIVrYAf7fMsFQWPsrOd6D/B6ev6dtPY
-MS7qxFSI0OJfxjw2i0Yl98i5rZ4+B6nPb4YQ0h7h50S1FqvJRI1Py9x9SMZ3hcGs
-Q0NLxndYYCVCIQ+YfLGb6rhM2MTWA7rCBblZgoosMrUc7fIZkZZ8LQQg0tXJkSFv
-COueiCF7XM+jobm7DUxCzG9Rh+pUILVb9UGkk3ZxwiTnAi4HiPkIdwZIuomHeGhM
-vcS5qVLej9dNhEA/Mfmz5lnfIw35ZLo/Wrbjj71I7vJG2U41SNqE9OkJPUmp5fou
-mBQFQVPFEO3U8VzX3DzB58iHaP/b/c66/t4tvjPmYfuqn9ZS5uLvskk4zlS/ohk8
-KIjmBkshU7yAlV9tRDEAIi029qv8wyWVRds+BKAv+cEfutfyNKnprWWn69Zfobc/
-eUJYd6tVxM/hW9nBFDXureFdka9IvAC8UDsgKagIiVpHA77e/olf/+cTgwe+ujjw
-kmnOPsr3GKQPnDdt2J1EtXW96BRnmRW+J0XHsl0K/46XA0nC18dOycWj+MHroNbq
-665zS2Q5H+3w5n9vTCu37uio1yb4sb6Gc0+TW/5UnWKuqokf2A4CgQ0DaUsp2m/0
-ITO7TloLX/134jgNaDl88nR3lpr5ZqIw37x3/TXPMB7xdAwNfx3673Ym9bclF/R+
-KFXGpmSw9ozIvtgKDC5JzFiXHeqcNET8N+Fx09RMwerSJmcsxLvi7a1PEpyH2zMi
-ThEn7P519NLwNqzQw0EfMDIiyEq6jzGaYKwQGtnSNtCAZvZGknIzz85hwkcAOp1A
-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
-=xwrR
------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"