summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
l---------config.hs2
-rwxr-xr-xdebian/rules2
-rw-r--r--doc/documentation.mdwn5
-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/my_experience_with_propellor:_how_to_run_a_single_task_on_a_host__63__.mdwn177
-rw-r--r--doc/forum/my_experience_with_propellor:_how_to_run_a_single_task_on_a_host__63__/comment_1_8959a79735aa3fa13ee37e57eb5a92e1._comment14
-rw-r--r--doc/forum/my_experience_with_propellor:_how_to_run_a_single_task_on_a_host__63__/comment_2_f07c33b4a14cdc0b78695de49875c9b5._comment52
-rw-r--r--doc/forum/my_experience_with_propellor:_how_to_run_a_single_task_on_a_host__63__/comment_3_06c63446531f56e4c93f64f6bcfba2b1._comment25
-rw-r--r--doc/forum/my_experience_with_propellor:_how_to_run_a_single_task_on_a_host__63__/comment_4_f52f30380b4fe58292fcf0ef368efbb1._comment44
-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/forum/trying_to_--spin_to_a_sid+experimental_machine/comment_3_f1ca62944fe0303db6f1dc0916e8c967._comment13
-rw-r--r--doc/forum/trying_to_--spin_to_a_sid+experimental_machine/comment_4_d0d946df7455d079af9bc331da6fac55._comment16
-rw-r--r--doc/haskell_newbie.mdwn3
-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/Wishlist:_User.hasLoginShell.mdwn9
-rw-r--r--doc/todo/Wishlist:_User.hasLoginShell/comment_1_c02e8783b91c3c0326bf1b317be4694f._comment59
-rw-r--r--doc/todo/bytes_in_privData__63__.mdwn17
-rw-r--r--doc/todo/bytes_in_privData__63__/comment_1_42c107179b091f74ef55aff1fc240c5e._comment19
-rw-r--r--doc/todo/bytes_in_privData__63__/comment_2_60f577b476adc6ee1e4f18e11843df90._comment7
-rw-r--r--doc/todo/bytes_in_privData__63__/comment_3_55f34128de77b7947d32fac71071e033._comment7
-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/issue_after_upgrading_shared_library.mdwn25
-rw-r--r--doc/todo/issue_after_upgrading_shared_library/comment_1_8d9144d57871cb5d234710d1ab1b7183._comment20
-rw-r--r--doc/todo/issue_after_upgrading_shared_library/comment_2_01a3d5e006158302e12862cacee3327e._comment7
-rw-r--r--doc/todo/issue_after_upgrading_shared_library/comment_2_6025ec35330fbac220f2888e60be1e78._comment17
-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--doc/writing_properties.mdwn82
-rw-r--r--privdata.joey/keyring.gpgbin113014 -> 0 bytes
-rw-r--r--privdata.joey/privdata.gpg1254
-rw-r--r--src/Propellor/PrivData/Paths.hs2
86 files changed, 1713 insertions, 1287 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/documentation.mdwn b/doc/documentation.mdwn
index 340eb09f..99f61c04 100644
--- a/doc/documentation.mdwn
+++ b/doc/documentation.mdwn
@@ -1,14 +1,15 @@
The [API documentation](http://hackage.haskell.org/package/propellor) of
-Propellor's modules is the most important docuemntation of propellor.
+Propellor's modules is the most important documentation of propellor.
Other documentation:
* [[man page|usage]]
* [[Haskell Newbie]]
+* [[Writing Properties]]
* [[Centralized Git Repository]]
* [[Components]]
* [[Contributing]]
* [[Interface Stability]]
-* [[Coding Stye]]
+* [[Coding Style]]
* [[Security]]
* [[Debugging]]
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/my_experience_with_propellor:_how_to_run_a_single_task_on_a_host__63__.mdwn b/doc/forum/my_experience_with_propellor:_how_to_run_a_single_task_on_a_host__63__.mdwn
new file mode 100644
index 00000000..0a50fc91
--- /dev/null
+++ b/doc/forum/my_experience_with_propellor:_how_to_run_a_single_task_on_a_host__63__.mdwn
@@ -0,0 +1,177 @@
+Having taken the inital hurdle of getting propellor running
+(cf. my last post in this forum), I am beginning to like propellor
+quite a lot. - This comes not too much as a surprise, as I am
+a Haskeller really. - I would love to use it for all my configuration
+needs, and to that end ditch ansible.
+
+Propellor's biggest show stopper for me is this (maybe I am misunderstanding
+propellor?):
+
+I can run
+
+```
+ propellor --spin myhost
+```
+
+from the command line, and all the tasks/properties that I have
+defined myhost to have beforehand will be executed/realized/configured.
+
+Say eg. I haved defined (sorry for the bad formatting,
+seems I have to do it line by line to get the markdown look nice)
+
+```
+myhost :: Host
+```
+
+```
+myhost = host "myhost"
+ & os (System (Debian Testing) "amd64")
+ & emacs
+ & apt
+```
+
+```
+emacs :: Property HasInfo
+```
+
+```
+emacs = propertyList "install & configure emacs" $ props
+ & Apt.installed ["emacs"
+ , "auto-complete-el"]
+```
+
+```
+ apt :: Property HasInfo
+```
+
+```
+apt = propertyList "apt update + upgrade" $ props
+ & Apt.update
+ & Apt.upgrade
+```
+
+
+Then running
+
+```
+ propellor --spin myhost
+```
+
+will make sure, that emacs is installed, and all my
+packages on myhost are up to date.
+
+It does so every time I run propellor, but normally I install
+emacs only once (and I know it's installed), whereas
+the apt update+upgrade combo I would want to run every other day.
+
+So what I would like is this: have just a minimal config for
+myhost, like this:
+
+```
+myhost :: Host
+```
+
+```
+myhost = host "myhost"
+ & os (System (Debian Testing) "amd64")
+```
+
+and then run a task (require a property ?) on myhost, somehow
+from the command line, like this
+
+```
+ propellor --spin myhost --task apt
+```
+
+Many other properties / installation steps I could run in this
+manner, like installing emacs initially
+
+```
+ propellor --spin myhost --task emacs
+```
+
+In ansible I can do this with playbooks:
+
+```
+ ansible-playbook -l myhost apt.yml
+```
+
+with some preconfigured playbook apt.yml that does just
+the apt update + upgrade task and nothing else. But I would
+have other tasks in other playbooks of course: I can install & configure
+emacs on myhost
+
+```
+ ansible-playbook -l myhost emacs.yml
+```
+
+etc.
+
+Related to that (but maybe not strictly the same question):
+
+I wouldn't mind writing my own haskell script that does
+the command line parsing (with optparse applicative eg):
+I could have options for
+
+```
+ --host (myhost/...)
+```
+
+and
+
+```
+ --task (emacs/apt/...)
+```
+
+and then just call into propellor. Unfortunately propellor's
+defaultMain does more than I want: gets the command line
+from processCmdLine.
+
+So I tried to create my own otherMain (similar to defaultMain,
+but would let me do my own command line parsing):
+
+```
+ otherMain :: [Host] -> CmdLine -> IO ()
+```
+
+but then at some point just gave up: for one thing: things
+were getting complicated, because of all the indirection:
+the propellor command line tool recompiles itself (?),
+does all this git stuff etc.
+
+And then: maybe I am approaching things in the wrong direction:
+maybe it's just not meant to be used that way
+(but ansible works fine for me in this regard)?
+
+And I thought: I don't really want to start a major programming
+task just to get this thing working, the way that seems
+reasonable to me. Or maybe it's possible already, and I just
+don't know how to use it? (So I am stuck with ansible for the time
+being).
+
+Still more or less related:
+
+Say this otherMain function existed, that allowed me to
+to do my own command line parsing and just
+call propellor on some host with the one or the other task,
+I am not 100% what's the right
+way to ensure/require/execute such a task on a host:
+
+above I am just using
+
+```
+ host & property
+```
+
+(from PropAccum), but maybe ensureProperty is better suited
+for that?
+
+Also for the wish list: some CONFIG_FILE env variable that
+would allow me to keep my config.hs somewhere other than
+in ~/.propellor/config.hs
+
+
+Anyway, thanks so far
+I would certainly want to switch to propellor completely.
+
+ Andreas
diff --git a/doc/forum/my_experience_with_propellor:_how_to_run_a_single_task_on_a_host__63__/comment_1_8959a79735aa3fa13ee37e57eb5a92e1._comment b/doc/forum/my_experience_with_propellor:_how_to_run_a_single_task_on_a_host__63__/comment_1_8959a79735aa3fa13ee37e57eb5a92e1._comment
new file mode 100644
index 00000000..273dc758
--- /dev/null
+++ b/doc/forum/my_experience_with_propellor:_how_to_run_a_single_task_on_a_host__63__/comment_1_8959a79735aa3fa13ee37e57eb5a92e1._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-04-14T18:48:23Z"
+ content="""
+By composing these things at the command-line, you're using the
+command-line, rather than haskell, for describing your system. I don't
+think that's a win.
+
+As far as properties that you don't want to have run every time, see
+`Propellor.Property.Scheduled.period`. For example:
+
+ & Apt.update `period` Daily
+"""]]
diff --git a/doc/forum/my_experience_with_propellor:_how_to_run_a_single_task_on_a_host__63__/comment_2_f07c33b4a14cdc0b78695de49875c9b5._comment b/doc/forum/my_experience_with_propellor:_how_to_run_a_single_task_on_a_host__63__/comment_2_f07c33b4a14cdc0b78695de49875c9b5._comment
new file mode 100644
index 00000000..3eca3457
--- /dev/null
+++ b/doc/forum/my_experience_with_propellor:_how_to_run_a_single_task_on_a_host__63__/comment_2_f07c33b4a14cdc0b78695de49875c9b5._comment
@@ -0,0 +1,52 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm-czsfuWENKQ0GI8l0gnGTeF1JEli1mA0"
+ nickname="Andreas"
+ subject="comment 2"
+ date="2015-04-14T19:24:46Z"
+ content="""
+using the command line: well yes, that's right.
+Still: I can configure a lot of details in haskell (ansible playbooks):
+
+my emacs task eg. is not only ensuring that emacs is installed
+(as in the example above), but I also set some links to my
+elisp config files, ensure that cask installed etc.
+
+another task for me is installing X windows:
+again lots of details: not only the xorg packages,
+but some links to .xsession files, window manager config
+files etc.
+
+and yes: I am happy, that I can spell out the details
+of these tasks in propellor/haskell.
+
+I just don't see the point of ensuring them again and again
+with every spin of propellor, and I would want
+to be able to run just this one task on the command line.
+
+
+concerning
+```
+ Apt.update `period` Daily
+```
+thanks, will have a look.
+but I guess this is cron job (will see),
+in general I think I will want to stick to my habit, that I want
+to see what's going on (what is upgraded), thus prefer
+to not run any cron jobs for apt upgrades
+
+My overall message / concern is: I don't want to completly change my
+habits, just because I am using propellor
+
+I had the habit of installing my computers task by task
+
+I had the habit of logging in to one of my systems, and
+doing apt-get update && apt-get upgrade
+
+I want my config tool to help me achieve things in my
+way that I am used to.
+
+
+
+
+
+"""]]
diff --git a/doc/forum/my_experience_with_propellor:_how_to_run_a_single_task_on_a_host__63__/comment_3_06c63446531f56e4c93f64f6bcfba2b1._comment b/doc/forum/my_experience_with_propellor:_how_to_run_a_single_task_on_a_host__63__/comment_3_06c63446531f56e4c93f64f6bcfba2b1._comment
new file mode 100644
index 00000000..144915df
--- /dev/null
+++ b/doc/forum/my_experience_with_propellor:_how_to_run_a_single_task_on_a_host__63__/comment_3_06c63446531f56e4c93f64f6bcfba2b1._comment
@@ -0,0 +1,25 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2015-04-14T19:42:22Z"
+ content="""
+[period](http://hackage.haskell.org/package/propellor-2.2.1/docs/Propellor-Property-Scheduled.html)
+is not a cron job, it just modifies the Property to only do anything
+every so often.
+
+It's also possible to modify a Property so it only runs once.
+[flagFile](http://hackage.haskell.org/package/propellor-2.2.1/docs/Propellor-Property.html#v:flagFile)
+can be used to do that.
+
+But there are good reasons for propellor to default to checking all
+Properties of a system each time:
+
+* It means that most Properties are idempotent, which has many good
+ features, like being able to recover from a crash.
+* If a system no longer has a configured Property, to fix it back to having
+ the property it's supposed to have.
+* Or, if it can't be fixed, to tell you with an error message in red.
+* It keeps propellor mostly stateless; rather than having to record state
+ about how it thinks a system is, which could diverge from reality,
+ it just looks at how it actually is.
+"""]]
diff --git a/doc/forum/my_experience_with_propellor:_how_to_run_a_single_task_on_a_host__63__/comment_4_f52f30380b4fe58292fcf0ef368efbb1._comment b/doc/forum/my_experience_with_propellor:_how_to_run_a_single_task_on_a_host__63__/comment_4_f52f30380b4fe58292fcf0ef368efbb1._comment
new file mode 100644
index 00000000..ecd20630
--- /dev/null
+++ b/doc/forum/my_experience_with_propellor:_how_to_run_a_single_task_on_a_host__63__/comment_4_f52f30380b4fe58292fcf0ef368efbb1._comment
@@ -0,0 +1,44 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm-czsfuWENKQ0GI8l0gnGTeF1JEli1mA0"
+ nickname="Andreas"
+ subject="comment 4"
+ date="2015-04-15T10:15:17Z"
+ content="""
+Well thanks a lot, and yes I am learning: propellor has a lot
+of powerful features under the hood already.
+
+I still remain sceptical for the time being:
+
+Propellor's overall approach seems: one spin of propellor does ensure
+that a complete systems is properly installed (and then one can
+declare exceptions: don't check this every time...). I can even see
+how this is useful: if I where a sys admin with a huge farm of
+systems, I wouldn't want to deal with half installed systems, but just
+have propellor do a complete job.
+
+As far as I am only concerned with a few personal computers of mine, I
+prefer to stick to my task by task approach, though, and for tasks
+that come up reapeatedly (like keeping my apt cache + installed
+packages up to date) that seems reasonable to me as well. - having
+only a minimal required configuration for a host, and then building
+upon that (I think/hope, you got the idea by now). The fact, that
+this model is nicely supported by ansible, seems to suggest at least,
+that this kind of reasoning/approach is not completely flawed.
+
+What is not 100% clear to me: if propellor could be bent to support my
+kind of workflow: I would think that it's possible? (even though I
+might not have the time to bend it that way myself). Or are there any
+fundamental issues with it?
+
+What I am suggesting is: that propellor be at my disposal,
+more as a library, and would not also impose a certain
+command line interface / workflow on me.
+
+Anyway, you would certainly win me as a user (don't know
+how much that counts, and cannot speak for other people's
+needs).
+
+Thanks anyway.
+ Andreas
+
+"""]]
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/forum/trying_to_--spin_to_a_sid+experimental_machine/comment_3_f1ca62944fe0303db6f1dc0916e8c967._comment b/doc/forum/trying_to_--spin_to_a_sid+experimental_machine/comment_3_f1ca62944fe0303db6f1dc0916e8c967._comment
new file mode 100644
index 00000000..ed34d6a7
--- /dev/null
+++ b/doc/forum/trying_to_--spin_to_a_sid+experimental_machine/comment_3_f1ca62944fe0303db6f1dc0916e8c967._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2015-03-30T23:26:38Z"
+ content="""
+As to a mixed unstable/experimental machine, such a machine has a Property
+of having somepackage installed from experimental. One way to represent
+that is by defining a property:
+
+installedFromExperimental :: [Package] -> Property NoInfo
+installedFromExperimental = Apt.installed' ["-y", "-texperimental"]
+
+"""]]
diff --git a/doc/forum/trying_to_--spin_to_a_sid+experimental_machine/comment_4_d0d946df7455d079af9bc331da6fac55._comment b/doc/forum/trying_to_--spin_to_a_sid+experimental_machine/comment_4_d0d946df7455d079af9bc331da6fac55._comment
new file mode 100644
index 00000000..72b21450
--- /dev/null
+++ b/doc/forum/trying_to_--spin_to_a_sid+experimental_machine/comment_4_d0d946df7455d079af9bc331da6fac55._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm-czsfuWENKQ0GI8l0gnGTeF1JEli1mA0"
+ nickname="Andreas"
+ subject="thanks a lot"
+ date="2015-04-06T21:11:46Z"
+ content="""
+thanks for your your commments (both of them),
+and fair enough: have just renamed my origin remote to upstream,
+will try your installedFromExperimental suggestion next.
+
+
+I will have more questions about propellor,
+but aske them in a different thread
+(as they are not really about installation)
+
+"""]]
diff --git a/doc/haskell_newbie.mdwn b/doc/haskell_newbie.mdwn
index 39a62f45..38da5ab0 100644
--- a/doc/haskell_newbie.mdwn
+++ b/doc/haskell_newbie.mdwn
@@ -114,7 +114,8 @@ That's really all there is to configuring Propellor. Once you
have a `config.hs` ready to try out, you can run `propellor --spin $host`
on one of the hosts configured in it.
-See the [[README]] for a further quick start.
+See the [[README]] for a further quick start and [[Writing Properties]]
+for guidance on extending propellor with your own custom properties.
(If you'd like to learn a little Haskell after all, check out
[Learn You a Haskell for Great Good](http://learnyouahaskell.com/).)
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/Wishlist:_User.hasLoginShell.mdwn b/doc/todo/Wishlist:_User.hasLoginShell.mdwn
new file mode 100644
index 00000000..cf8aa73c
--- /dev/null
+++ b/doc/todo/Wishlist:_User.hasLoginShell.mdwn
@@ -0,0 +1,9 @@
+As far as I can tell there is no easy way to set a user's
+login shell. A Property User.hasLoginShell, which ensures
+that a user has a specified login shell and that said shell
+is in /etc/shells would be really helpful. Sadly, I lack the
+skills to put this together myself :(
+
+-- weinzwang
+
+> patched in and so [[done]] --[[Joey]]
diff --git a/doc/todo/Wishlist:_User.hasLoginShell/comment_1_c02e8783b91c3c0326bf1b317be4694f._comment b/doc/todo/Wishlist:_User.hasLoginShell/comment_1_c02e8783b91c3c0326bf1b317be4694f._comment
new file mode 100644
index 00000000..52043406
--- /dev/null
+++ b/doc/todo/Wishlist:_User.hasLoginShell/comment_1_c02e8783b91c3c0326bf1b317be4694f._comment
@@ -0,0 +1,59 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-04-19T16:07:24Z"
+ content="""
+Propellor makes it very easy to put together a property like this.
+
+Let's start with a property that combines the two properties you mentioned:
+
+ hasLoginShell :: UserName -> FilePath -> Property
+ hasLoginShell user shell = shellSetTo user shell `requires` shellEnabled shell
+
+The shellEnabled property can be easily written using propellor's file
+manipulation properties.
+
+ -- Need to add an import to the top of the source file.
+ import qualified Propellor.Property.File as File
+
+ shellEnabled :: FilePath -> Property
+ shellEnabled shell = "/etc/shells" `File.containsLine` shell
+
+And then, we want to actually change the user's shell. The `chsh(1)`
+program can do that, so we can simply tell propellor the command line to
+run:
+
+ shellSetTo :: UserName -> FilePath -> Property
+ shellSetTo user shell = cmdProperty "chsh" ["--shell", shell, user]
+
+The only remaining problem with this is that shellSetTo runs chsh every
+time, and propellor will always display that it's made a change each time
+it runs, even when it didn't really do much. Now, there's an easy way to
+avoid that problem, we could just tell propellor that it's a trivial
+property, and then it will run chsh every time and not think it made any
+change:
+
+ shellSetTo :: UserName -> FilePath -> Property
+ shellSetTo user shell = trivial $
+ cmdProperty "chsh" ["--shell", shell, user]
+
+But, it's not much harder to do this right. Let's make the property
+check if the user's shell is already set to the desired value and avoid
+doing anything in that case.
+
+ shellSetTo :: UserName -> FilePath -> Property
+ shellSetTo user shell = check needchangeshell $
+ cmdProperty "chsh" ["--shell", shell, user]
+ where
+ needchangeshell = do
+ currshell <- userShell <$> getUserEntryForName user
+ return (currshell /= shell)
+
+And that will probably all work, although I've not tested it. You might
+want to throw in some uses of `describe` to give the new properties
+more useful descriptions.
+
+I hope this has been helpful as an explanation of how to add properties to
+Propellor, and if you get these properties to work, a patch adding them
+to Propellor.User would be happily merged.
+"""]]
diff --git a/doc/todo/bytes_in_privData__63__.mdwn b/doc/todo/bytes_in_privData__63__.mdwn
new file mode 100644
index 00000000..27297fd5
--- /dev/null
+++ b/doc/todo/bytes_in_privData__63__.mdwn
@@ -0,0 +1,17 @@
+It seems like I can't set the content of a PrivFile to arbitrary bytes.
+
+ $ propellor --set 'PrivFile "mysecret.key"' 'mycontext' < ~/mysecret.key
+ find . | grep -v /.git/ | grep -v /tmp/ | grep -v /dist/ | grep -v /doc/ | egrep '\.hs$' | xargs hothasktags | perl -ne 'print; s/Propellor\.Property\.//; print' | sort > tags 2>/dev/null || true
+ cabal build
+ 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...
+ [70 of 70] Compiling Main ( src/config.hs, dist/build/propellor-config/propellor-config-tmp/Main.o )
+ Linking dist/build/propellor-config/propellor-config ...
+ ln -sf dist/build/propellor-config/propellor-config propellor
+
+
+ Enter private data on stdin; ctrl-D when done:
+ propellor: <stdin>: hGetContents: invalid argument (invalid byte sequence)
diff --git a/doc/todo/bytes_in_privData__63__/comment_1_42c107179b091f74ef55aff1fc240c5e._comment b/doc/todo/bytes_in_privData__63__/comment_1_42c107179b091f74ef55aff1fc240c5e._comment
new file mode 100644
index 00000000..5c1508fd
--- /dev/null
+++ b/doc/todo/bytes_in_privData__63__/comment_1_42c107179b091f74ef55aff1fc240c5e._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-04-20T01:04:26Z"
+ content="""
+I imagine that adding `fileEncoding stdin` to setPrivData will fix
+this crash, but I'd expect there are also other problems with encodings
+for privdata that haskell doesn't like. Similar fixes would probably
+be needed in several other places.
+
+Probably cleaner and better to convert
+`PrivData` from a String to a ByteString, and so avoid encodings
+being applied to it. I think this could be done without changing the
+file format; the privdata file uses Read/Show for serialization,
+and happily ByteString uses the same Read/Show format as String does.
+
+So, changing the type and following the compile errors should get you
+there, I think!
+"""]]
diff --git a/doc/todo/bytes_in_privData__63__/comment_2_60f577b476adc6ee1e4f18e11843df90._comment b/doc/todo/bytes_in_privData__63__/comment_2_60f577b476adc6ee1e4f18e11843df90._comment
new file mode 100644
index 00000000..10ff956a
--- /dev/null
+++ b/doc/todo/bytes_in_privData__63__/comment_2_60f577b476adc6ee1e4f18e11843df90._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="gueux"
+ subject="comment 2"
+ date="2015-04-21T12:59:42Z"
+ content="""
+Would you accept a patch converting PrivData from String to ByteString?
+"""]]
diff --git a/doc/todo/bytes_in_privData__63__/comment_3_55f34128de77b7947d32fac71071e033._comment b/doc/todo/bytes_in_privData__63__/comment_3_55f34128de77b7947d32fac71071e033._comment
new file mode 100644
index 00000000..a1c7f62f
--- /dev/null
+++ b/doc/todo/bytes_in_privData__63__/comment_3_55f34128de77b7947d32fac71071e033._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2015-04-21T16:52:06Z"
+ content="""
+Absolutely. Thought that went w/o saying. ;)
+"""]]
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/issue_after_upgrading_shared_library.mdwn b/doc/todo/issue_after_upgrading_shared_library.mdwn
new file mode 100644
index 00000000..52e72d4a
--- /dev/null
+++ b/doc/todo/issue_after_upgrading_shared_library.mdwn
@@ -0,0 +1,25 @@
+After upgrading my server to jessie, I noticed that propellor does not work anymore. The issue seems to be that, libffi was upgraded from libffi5:amd64 to libffi6:amd64
+
+ $ ./propellor --spin myserver
+ 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
+
+ You need a passphrase to unlock the secret key for
+ user: bla
+
+ [master 2aabb40] propellor spin
+ Git commit ... done
+ Counting objects: 1, done.
+ Writing objects: 100% (1/1), 852 bytes | 0 bytes/s, done.
+ Total 1 (delta 0), reused 0 (delta 0)
+ To root@myserver:/var/lib/git/private/propellor.git
+ b16f1a6..2aabb40 master -> master
+ Push to central git repository ... done
+ ./propellor: error while loading shared libraries: libffi.so.5: cannot open shared object file: No such file or directory
+ propellor: user error (ssh ["-o","ControlPath=/home/myuser/.ssh/propellor/myserver.sock","-o","ControlMaster=auto","-o","ControlPersist=yes","root@myserver","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 myserver ; fi'"] exited 127)
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/todo/issue_after_upgrading_shared_library/comment_1_8d9144d57871cb5d234710d1ab1b7183._comment b/doc/todo/issue_after_upgrading_shared_library/comment_1_8d9144d57871cb5d234710d1ab1b7183._comment
new file mode 100644
index 00000000..77c7df83
--- /dev/null
+++ b/doc/todo/issue_after_upgrading_shared_library/comment_1_8d9144d57871cb5d234710d1ab1b7183._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-04-02T01:14:06Z"
+ content="""
+I think I saw this once myself (have no servers older than jessie left
+now).
+
+I believe the problem can be worked around by running make clean
+in /usr/local/propellor on the server.
+
+I'm not clear yet on a good way for --spin to detect that propellor
+has failed due to this, rather than some other problem, and try
+a clean and rebuild.
+
+Hmm, xmonad should have a similar problem, since it builds a haskell
+program locally. I wonder how the debian package deals with it there.
+
+Note there's a libffi6, so this will presumably happen again..
+"""]]
diff --git a/doc/todo/issue_after_upgrading_shared_library/comment_2_01a3d5e006158302e12862cacee3327e._comment b/doc/todo/issue_after_upgrading_shared_library/comment_2_01a3d5e006158302e12862cacee3327e._comment
new file mode 100644
index 00000000..3f7a7bbc
--- /dev/null
+++ b/doc/todo/issue_after_upgrading_shared_library/comment_2_01a3d5e006158302e12862cacee3327e._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="gueux"
+ subject="comment 2"
+ date="2015-04-02T09:24:07Z"
+ content="""
+Indeed, \"make clean\" on the server worked. I don't know it could be made more robust to this kind of upgrade...
+"""]]
diff --git a/doc/todo/issue_after_upgrading_shared_library/comment_2_6025ec35330fbac220f2888e60be1e78._comment b/doc/todo/issue_after_upgrading_shared_library/comment_2_6025ec35330fbac220f2888e60be1e78._comment
new file mode 100644
index 00000000..bc89ad7f
--- /dev/null
+++ b/doc/todo/issue_after_upgrading_shared_library/comment_2_6025ec35330fbac220f2888e60be1e78._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2015-04-02T14:27:26Z"
+ content="""
+So I thought of two approaches.
+
+1. Propellor could copy in all the shared libraries. It already contains
+ code to do this. But, this would add overhead to every build. And it
+ might not guard against all snafus.
+
+2. Make propellor --check that should exit 0. Make --spin check that
+ propellor works and rebuild if not. Also make the runPropellor cron job
+ do that.
+
+I've gone with option #2.
+"""]]
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/doc/writing_properties.mdwn b/doc/writing_properties.mdwn
new file mode 100644
index 00000000..c7183e09
--- /dev/null
+++ b/doc/writing_properties.mdwn
@@ -0,0 +1,82 @@
+Propellor comes with a lot of properties you can use. But eventually,
+you'll want to write a property of your own.
+
+This isn't hard. Often propellor has some properties you can use to build
+the property you want. Need to modify the content of a file? Use any of
+the properties in
+[Propellor.Property.File](http://hackage.haskell.org/package/propellor-2.2.1/docs/Propellor-Property-File.htm)
+Need to run some commands? Use [Propellor.Property.Cmd](http://hackage.haskell.org/package/propellor-2.2.1/docs/Propellor-Property-Cmd.html).
+
+To combine properties, the easiest way is to use `requires`.
+
+ someproperty `requires` otherproperty
+
+[Propellor.Property.List](http://hackage.haskell.org/package/propellor-2.2.1/docs/Propellor-Property-List.html)
+has a `propertyList` combinator that's also useful.
+
+[Propellor.Property](http://hackage.haskell.org/package/propellor-2.2.1/docs/Propellor-Property.html)
+has some other functions to modify Properties in useful ways.
+For example, `check` makes a Property call an `IO Bool` to check if the
+Property needs be run.
+
+## example: User.hasLoginShell
+
+> As far as I can tell there is no easy way to set a user's
+> login shell. A Property User.hasLoginShell, which ensures
+> that a user has a specified login shell and that said shell
+> is in /etc/shells would be really helpful. Sadly, I lack the
+> skills to put this together myself :( -- weinzwang
+
+Propellor makes it very easy to put together a property like this.
+
+Let's start with a property that combines the two properties you mentioned:
+
+ hasLoginShell :: UserName -> FilePath -> Property
+ hasLoginShell user shell = shellSetTo user shell `requires` shellEnabled shell
+
+The shellEnabled property can be easily written using propellor's file
+manipulation properties.
+
+ -- Need to add an import to the top of the source file.
+ import qualified Propellor.Property.File as File
+
+ shellEnabled :: FilePath -> Property
+ shellEnabled shell = "/etc/shells" `File.containsLine` shell
+
+And then, we want to actually change the user's shell. The `chsh(1)`
+program can do that, so we can simply tell propellor the command line to
+run:
+
+ shellSetTo :: UserName -> FilePath -> Property
+ shellSetTo user shell = cmdProperty "chsh" ["--shell", shell, user]
+
+The only remaining problem with this is that shellSetTo runs chsh every
+time, and propellor will always display that it's made a change each time
+it runs, even when it didn't really do much. Now, there's an easy way to
+avoid that problem, we could just tell propellor that it's a trivial
+property, and then it will run chsh every time and not think it made any
+change:
+
+ shellSetTo :: UserName -> FilePath -> Property
+ shellSetTo user shell = trivial $
+ cmdProperty "chsh" ["--shell", shell, user]
+
+But, it's not much harder to do this right. Let's make the property
+check if the user's shell is already set to the desired value and avoid
+doing anything in that case.
+
+ shellSetTo :: UserName -> FilePath -> Property
+ shellSetTo user shell = check needchangeshell $
+ cmdProperty "chsh" ["--shell", shell, user]
+ where
+ needchangeshell = do
+ currshell <- userShell <$> getUserEntryForName user
+ return (currshell /= shell)
+
+And that will probably all work, although I've not tested it. You might
+want to throw in some uses of `describe` to give the new properties
+more useful descriptions.
+
+I hope this has been helpful as an explanation of how to add properties to
+Propellor, and if you get these properties to work, a patch adding them
+to Propellor.User would be happily merged.
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 e642f498..00000000
--- a/privdata.joey/privdata.gpg
+++ /dev/null
@@ -1,1254 +0,0 @@
------BEGIN PGP MESSAGE-----
-Version: GnuPG v1
-
-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
-VJ0G
-=SQRp
------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"