summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
l---------config.hs2
-rwxr-xr-xdebian/rules2
-rw-r--r--doc/forum/Supported_OS.mdwn5
-rw-r--r--doc/forum/Supported_OS/comment_1_f324bed708305e2667bd00f80544dd90._comment25
-rw-r--r--doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac.mdwn12
-rw-r--r--doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_1_69d7c8fb1d62300456575bb10e935d69._comment10
-rw-r--r--doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_2_da30b2621493e48ceabcfa5732dbcdf8._comment19
-rw-r--r--doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_3_bd76d169af2ef2f154ad1f0f64506661._comment11
-rw-r--r--doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_4_a6a49d35ee8a05abc982049b55d0397c._comment11
-rw-r--r--doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_5_7783b8a96c8032a39ff3b5b446a976ed._comment7
-rw-r--r--doc/forum/modify_managed_host_propellor__39__s_.git__47__config.mdwn1
-rw-r--r--doc/forum/modify_managed_host_propellor__39__s_.git__47__config/comment_1_da3ebb4736a1f1012b6d27bcd33ff44f._comment10
-rw-r--r--doc/forum/propellor_with_no_central_repository__63__.mdwn1
-rw-r--r--doc/forum/propellor_with_no_central_repository__63__/comment_1_6a2a5068962b17dac08609cd65887f48._comment7
-rw-r--r--doc/forum/propellor_with_no_central_repository__63__/comment_2_0f035bb4bb5cc13574394505f28abe5e._comment9
-rw-r--r--doc/forum/property_combinator_ordering.mdwn8
-rw-r--r--doc/forum/property_combinator_ordering/comment_1_0ea2186b5cfa7eadaf38ac2e97fc4a2c._comment31
-rw-r--r--doc/news/propellor_demo.mdwn8
-rw-r--r--doc/news/version_0.8.3.mdwn11
-rw-r--r--doc/news/version_0.9.0.mdwn12
-rw-r--r--doc/news/version_0.9.1.mdwn6
-rw-r--r--doc/news/version_0.9.2.mdwn8
-rw-r--r--doc/news/version_1.0.0.mdwn24
-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/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/port_info_for_properties_for_firewall.mdwn24
-rw-r--r--doc/todo/type_level_port_conflict_detection.mdwn5
-rw-r--r--privdata.joey/keyring.gpgbin113014 -> 0 bytes
-rw-r--r--privdata.joey/privdata.gpg751
-rw-r--r--src/Propellor/PrivData/Paths.hs2
44 files changed, 445 insertions, 755 deletions
diff --git a/config.hs b/config.hs
index 07959a0a..ec313725 120000
--- a/config.hs
+++ b/config.hs
@@ -1 +1 @@
-config-joey.hs \ No newline at end of file
+config-simple.hs \ No newline at end of file
diff --git a/debian/rules b/debian/rules
index c553132f..bcb681c1 100755
--- a/debian/rules
+++ b/debian/rules
@@ -1,4 +1,4 @@
-#!/bin/false
+#!/usr/bin/make -f
# Avoid using cabal, as it writes to $HOME
export CABAL=./Setup
diff --git a/doc/forum/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..094fa678
--- /dev/null
+++ b/doc/forum/Supported_OS/comment_1_f324bed708305e2667bd00f80544dd90._comment
@@ -0,0 +1,25 @@
+[[!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:
+
+[[!format haskell """
+foo :: Property
+foo = property "foo" withOS desc $ \o -> case o of
+ (Just (System (Debian _) _)) -> ensureProperty fooDebian
+ (Just (System (Ubuntu _) _)) -> ensureProperty fooUbuntu
+
+The first step for adding a new OS will be to modify <http://hackage.haskell.org/package/propellor-1.0.0/docs/Propellor-Types-OS.html>.
+Compilation will then warn about all OS parameterized properties that
+need to be updated to support your added OS, and it can be taken from there.
+
+I'll accept reasonable patches to support other OS's.
+"""]]
+
diff --git a/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac.mdwn b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac.mdwn
new file mode 100644
index 00000000..c88defcf
--- /dev/null
+++ b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac.mdwn
@@ -0,0 +1,12 @@
+Hello,
+
+I am trying propellor on Debian Jessie (haskell is fantastic for this sort or things) to setup one of my computer.
+
+On my network, the system administrator set proxies for http and https.
+These information are available via a http://proxy/proxy.pac URL.
+
+So I would like to know what should be done to extract this information and set it for all users on the system ?
+
+Cheers
+
+Frederic
diff --git a/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_1_69d7c8fb1d62300456575bb10e935d69._comment b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_1_69d7c8fb1d62300456575bb10e935d69._comment
new file mode 100644
index 00000000..6bf8844d
--- /dev/null
+++ b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_1_69d7c8fb1d62300456575bb10e935d69._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-11-25T15:44:13Z"
+ content="""
+You could, for example, use Propellor.Propety.Cmd.cmdProperty
+to run a command that sets up the proxying. If there's not a single command
+that does it, you could cause propellor to fetch the url and deploy the
+info itself.
+"""]]
diff --git a/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_2_da30b2621493e48ceabcfa5732dbcdf8._comment b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_2_da30b2621493e48ceabcfa5732dbcdf8._comment
new file mode 100644
index 00000000..8458ee49
--- /dev/null
+++ b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_2_da30b2621493e48ceabcfa5732dbcdf8._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="picca"
+ subject="comment 2"
+ date="2014-11-25T17:55:25Z"
+ content="""
+In my case I need to wget the proxy.pac file and parse it to find the right proxy.
+
+what worried me is that these proxy.pac things are dynamical depending on the ip of the sender AND the receive.
+It work nicely with web browser, but not with the unix http_proxy and HTTPS_PROXY env.
+
+nevertheless, I can create something to parse my local setup and extract the right http_proxy.
+
+Is there something available in Propellor to set a global environment variable in /etc/environment (the right place for this ?)
+
+cheers
+
+Frederic
+
+"""]]
diff --git a/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_3_bd76d169af2ef2f154ad1f0f64506661._comment b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_3_bd76d169af2ef2f154ad1f0f64506661._comment
new file mode 100644
index 00000000..9bdcb4df
--- /dev/null
+++ b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_3_bd76d169af2ef2f154ad1f0f64506661._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-11-25T19:37:46Z"
+ content="""
+There's no Property that handles setting global environment currently, but
+it's a reasonable one to add.
+
+I think that /etc/environment is read by `pam_env` logins, but maybe not
+other things, so dunno.
+"""]]
diff --git a/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_4_a6a49d35ee8a05abc982049b55d0397c._comment b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_4_a6a49d35ee8a05abc982049b55d0397c._comment
new file mode 100644
index 00000000..d2a0b45e
--- /dev/null
+++ b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_4_a6a49d35ee8a05abc982049b55d0397c._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="picca"
+ subject="comment 4"
+ date="2014-11-25T20:01:12Z"
+ content="""
+I saw that there is an haskell binding for augeas.
+
+Maybe this could be a nice uniform interface to deal with all the system configuration files.
+then no need to deal with the config file formats.
+
+"""]]
diff --git a/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_5_7783b8a96c8032a39ff3b5b446a976ed._comment b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_5_7783b8a96c8032a39ff3b5b446a976ed._comment
new file mode 100644
index 00000000..d670fa3b
--- /dev/null
+++ b/doc/forum/how_to_set_the_proxy_using_an_automatix_proxy.pac/comment_5_7783b8a96c8032a39ff3b5b446a976ed._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="gueux"
+ subject="comment 5"
+ date="2014-11-27T08:17:36Z"
+ content="""
+Just looked at augeas, and add it to propellor would be great. Much more robust than Propellor.Property.File.{containsLine,containsLines,lacksLine}, at least.
+"""]]
diff --git a/doc/forum/modify_managed_host_propellor__39__s_.git__47__config.mdwn b/doc/forum/modify_managed_host_propellor__39__s_.git__47__config.mdwn
new file mode 100644
index 00000000..0815b4b3
--- /dev/null
+++ b/doc/forum/modify_managed_host_propellor__39__s_.git__47__config.mdwn
@@ -0,0 +1 @@
+How can I modify the configuration of a managed host (which seems to be stored in /usr/local/propellor/.git/config) from the host on which I run propellor?
diff --git a/doc/forum/modify_managed_host_propellor__39__s_.git__47__config/comment_1_da3ebb4736a1f1012b6d27bcd33ff44f._comment b/doc/forum/modify_managed_host_propellor__39__s_.git__47__config/comment_1_da3ebb4736a1f1012b6d27bcd33ff44f._comment
new file mode 100644
index 00000000..f034a377
--- /dev/null
+++ b/doc/forum/modify_managed_host_propellor__39__s_.git__47__config/comment_1_da3ebb4736a1f1012b6d27bcd33ff44f._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-31T14:40:33Z"
+ content="""
+I'm curious what you need to configure there..
+
+But, there seems to be a simple solution: Add a Property that configures
+the .git/config however you need to! :)
+"""]]
diff --git a/doc/forum/propellor_with_no_central_repository__63__.mdwn b/doc/forum/propellor_with_no_central_repository__63__.mdwn
new file mode 100644
index 00000000..5f322878
--- /dev/null
+++ b/doc/forum/propellor_with_no_central_repository__63__.mdwn
@@ -0,0 +1 @@
+Is there a way to use propellor with no central repository?
diff --git a/doc/forum/propellor_with_no_central_repository__63__/comment_1_6a2a5068962b17dac08609cd65887f48._comment b/doc/forum/propellor_with_no_central_repository__63__/comment_1_6a2a5068962b17dac08609cd65887f48._comment
new file mode 100644
index 00000000..1f1456c5
--- /dev/null
+++ b/doc/forum/propellor_with_no_central_repository__63__/comment_1_6a2a5068962b17dac08609cd65887f48._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-31T14:39:48Z"
+ content="""
+Not yet, but see [[todo/git_push_over_propellor_ssh_channel]]
+"""]]
diff --git a/doc/forum/propellor_with_no_central_repository__63__/comment_2_0f035bb4bb5cc13574394505f28abe5e._comment b/doc/forum/propellor_with_no_central_repository__63__/comment_2_0f035bb4bb5cc13574394505f28abe5e._comment
new file mode 100644
index 00000000..6a6aa946
--- /dev/null
+++ b/doc/forum/propellor_with_no_central_repository__63__/comment_2_0f035bb4bb5cc13574394505f28abe5e._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""yay!"""
+ date="2014-11-19T01:31:14Z"
+ content="""
+propellor now supports this mode by default, just use `propellor --spin
+hostname` and the changes in the local repo will be pushed and deployed to
+the host, w/o needing a centralized git repo.
+"""]]
diff --git a/doc/forum/property_combinator_ordering.mdwn b/doc/forum/property_combinator_ordering.mdwn
new file mode 100644
index 00000000..25549bb4
--- /dev/null
+++ b/doc/forum/property_combinator_ordering.mdwn
@@ -0,0 +1,8 @@
+when I write
+
+ setDistribution cfg = f `File.hasContent` cfg
+ `onChange` update
+ `requires` File.dirExists confDir
+
+is update called before ensuring the confiDir Exist ?
+It seems to me but who knows ?
diff --git a/doc/forum/property_combinator_ordering/comment_1_0ea2186b5cfa7eadaf38ac2e97fc4a2c._comment b/doc/forum/property_combinator_ordering/comment_1_0ea2186b5cfa7eadaf38ac2e97fc4a2c._comment
new file mode 100644
index 00000000..c41abd90
--- /dev/null
+++ b/doc/forum/property_combinator_ordering/comment_1_0ea2186b5cfa7eadaf38ac2e97fc4a2c._comment
@@ -0,0 +1,31 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-12-01T15:53:11Z"
+ content="""
+I think that should behave intuitively, but of course if you're unsure
+of this kind of thing, adding parens is a good way to disambiguate the
+code.
+
+ (f `File.hasContent` cfg `onChange` update)
+ `requires` File.dirExists confDir
+
+Written that way, it's explicit that the parenthesized part runs
+together as one action.
+
+Or, we can do a quick test in ghci:
+
+ joey@darkstar:~/src/propellor/src#joeyconfig>ghci Propellor.hs Propellor/Property.hs
+ *Propellor> let f1 = property "hasContent" (liftIO (print "f1") >> return MadeChange)
+ *Propellor> let f2 = property "update" (liftIO (print "f2") >> return MadeChange)
+ *Propellor> let f3 = property "dirExists" (liftIO (print "f3") >> return MadeChange)
+ *Propellor> runPropellor (Host "foo" [] mempty) $ ensureProperty $ f1 `onChange` f2 `requires` f3
+ "dirExists"
+ "hasContent"
+ "update"
+ MadeChange
+
+So, yes, it's behaving as it should, first ensuring that the `requires`
+property is met, and then running the main property, and since it made a
+change, following up by running the `onChange` property.
+"""]]
diff --git a/doc/news/propellor_demo.mdwn b/doc/news/propellor_demo.mdwn
new file mode 100644
index 00000000..362f56e6
--- /dev/null
+++ b/doc/news/propellor_demo.mdwn
@@ -0,0 +1,8 @@
+A quick demo of propellor.
+
+<video controls src="http://downloads.kitenet.net/talks/propellor_demo/propellor_demo.webm"></video>
+
+[video](http://downloads.kitenet.net/talks/propellor_demo/propellor_demo.webm)
+
+(Audio quality is clipped/fast in places, unfortunately this was a problem
+with the source recording.)
diff --git a/doc/news/version_0.8.3.mdwn b/doc/news/version_0.8.3.mdwn
new file mode 100644
index 00000000..82f400c0
--- /dev/null
+++ b/doc/news/version_0.8.3.mdwn
@@ -0,0 +1,11 @@
+propellor 0.8.3 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * The Debian package now includes a single-revision git repository in
+ /usr/src/propellor/, and ~/.propellor/ is set up to use this repository as
+ its origin remote. This avoids relying on the security of the github
+ repository when using the Debian package.
+ * The /usr/bin/propellor wrapper will warn when ~/.propellor/ is out of date
+ and a newer version is available, after which git merge upstream/master
+ can be run to merge it.
+ * Included the config.hs symlink to config-simple.hs in the cabal and Debian
+ packages."""]] \ No newline at end of file
diff --git a/doc/news/version_0.9.0.mdwn b/doc/news/version_0.9.0.mdwn
new file mode 100644
index 00000000..f50a6b29
--- /dev/null
+++ b/doc/news/version_0.9.0.mdwn
@@ -0,0 +1,12 @@
+propellor 0.9.0 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * Avoid encoding the current stable suite in propellor's code,
+ since that poses a difficult transition around the release,
+ and can easily be wrong if an older version of propellor is used.
+ Instead, the os property for a stable system includes the suite name
+ to use, eg Stable "wheezy".
+ * stdSourcesList uses the stable suite name, to avoid unwanted
+ immediate upgrades to the next stable release.
+ * debCdn switched from cdn.debian.net to http.debian.net, which seems to be
+ better managed now.
+ * Docker: Avoid committing container every time it's started up."""]] \ No newline at end of file
diff --git a/doc/news/version_0.9.1.mdwn b/doc/news/version_0.9.1.mdwn
new file mode 100644
index 00000000..1a7039cf
--- /dev/null
+++ b/doc/news/version_0.9.1.mdwn
@@ -0,0 +1,6 @@
+propellor 0.9.1 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * Docker: Add ability to control when containers restart.
+ * Docker: Default to always restarting containers, so they come back
+ up after reboots and docker daemon upgrades.
+ * Fix loop when a docker host that does not exist was docked."""]] \ No newline at end of file
diff --git a/doc/news/version_0.9.2.mdwn b/doc/news/version_0.9.2.mdwn
new file mode 100644
index 00000000..ee7d618d
--- /dev/null
+++ b/doc/news/version_0.9.2.mdwn
@@ -0,0 +1,8 @@
+propellor 0.9.2 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * Added nginx module, contributed by Félix Sipma.
+ * Added firewall module, contributed by Arnaud Bailly.
+ * Apache: Fix daemon reload when enabling a new module or site.
+ * Docker: Stop using docker.io; that was a compat symlink in
+ the Debian package which has been removed in docker.io 1.3.1~dfsg1-2.
+ * Orphaned the Debian package, as I am retiring from Debian."""]] \ No newline at end of file
diff --git a/doc/news/version_1.0.0.mdwn b/doc/news/version_1.0.0.mdwn
new file mode 100644
index 00000000..dc454f8b
--- /dev/null
+++ b/doc/news/version_1.0.0.mdwn
@@ -0,0 +1,24 @@
+propellor 1.0.0 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * propellor --spin can now be used to update remote hosts, without
+ any central git repository needed. The central git repository is
+ still useful for running propellor from cron, but this simplifies
+ getting started with propellor, and allows for more ad-hoc usage.
+ * The git repo url, if any, is updated whenever propellor --spin is used.
+ * Added prosody module, contributed by Félix Sipma.
+ * Can be used to configure tor hidden services. Thanks, Félix Sipma.
+ * When multiple gpg keys are added, ensure that the privdata file
+ can be decrypted by all of them.
+ * Convert GpgKeyId to newtype. (API change)
+ * DigitalOcean.distroKernel property now reboots into the distribution
+ kernel when necessary.
+ * Avoid outputting color setting sequences when not run on a terminal.
+ * Docker code simplified by using `docker exec`; needs docker 1.3.1.
+ * Docker containers are now a separate data type, cannot be included
+ in the main host list, and are instead passed to
+ Docker.docked. (API change)
+ * Added support for using debootstrap from propellor.
+ * Propellor can now be used to provision chroots.
+ * systemd-nspawn containers can now be managed by propellor, very similar
+ to its handling of docker containers.
+ * Debian package will be maintained by Gergely Nagy."""]] \ 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/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/port_info_for_properties_for_firewall.mdwn b/doc/todo/port_info_for_properties_for_firewall.mdwn
new file mode 100644
index 00000000..efaaba05
--- /dev/null
+++ b/doc/todo/port_info_for_properties_for_firewall.mdwn
@@ -0,0 +1,24 @@
+The firewall module could be improved if properties that set up a service
+on a port included info (see Propellor.Info and Propellor.Types.Info)
+about the port(s) used.
+
+While currently the ports have to be explicitly listed:
+
+ & Apache.installed
+ & Firewall.installed
+ & Firewall.addRule (Rule INPUT ACCEPT (Proto TCP :- Port 80))
+ & Firewall.addRule (Rule INPUT ACCEPT (Proto TCP :- Port 443))
+
+Instead the ports would be derived from the installed services.
+
+ & Apache.installed
+ & Firewall.installed
+
+There could also be some combinators to adjust the exposed
+ports of a property.
+
+ & localOnly Apache.installed
+ & exposedPorts [443,80] (Apt.serviceInstalledRunning "apache2")
+
+Such port enformation is also going to be needed as a basis of
+[[type_level_port_conflict_detection]]. --[[Joey]]
diff --git a/doc/todo/type_level_port_conflict_detection.mdwn b/doc/todo/type_level_port_conflict_detection.mdwn
new file mode 100644
index 00000000..5aec5775
--- /dev/null
+++ b/doc/todo/type_level_port_conflict_detection.mdwn
@@ -0,0 +1,5 @@
+See <http://stackoverflow.com/questions/26027765/using-types-to-prevent-conflicting-port-numbers-in-a-list> --[[Joey]]
+
+Needs ghc newer than 7.6.3. It may be possible to port Data.Type.Equality
+and Data.Type.Bool to older versions; I got them to compile but they didn't
+work right. --[[Joey]]
diff --git a/privdata.joey/keyring.gpg b/privdata.joey/keyring.gpg
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 ec14e14b..00000000
--- a/privdata.joey/privdata.gpg
+++ /dev/null
@@ -1,751 +0,0 @@
------BEGIN PGP MESSAGE-----
-Version: GnuPG v1
-
-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
-RFMS/Qn0N5a2wPrlw1WDQUbj5VS1Y+hkzS8fAiMY830l9g5MJDcb7U+bDpIiJV1N
-QDV3aMCdJ84Wh9DK9Gw/mVgTjuA14xqt9N31wE293itQb+A6qeWcI5kXB4t5/2Xi
-4jl6JEiWzfLOX6Jg0HO6R5ulL3TbgDGkOfZbQluumn2Jwmr51ZCYfUiLoUt5ffLe
-a5dFe2lLDViztct/KS2rHMQ1kA093eqNyzek+f+Bgfssid6A0aULN8TVW5RfqMjP
-pMNFSaiP7QJGxNvX8PW4PjiFqNGNg01FhFRaKGo5SxqbhdEVjDHkZdtoL/ovLz9i
-BafP+EbNX1zx4GpDK4KNzn4YvZEf9OKO++SCDRjl785Gc9zB7AE7lRrvfjmKQjA2
-BMpIuo567Dsj5rMfyHWRFFCYXx+0rpItkEFfxTLs5TFaHc0gpyhCLSNnnsqdvCex
-pqLawyd08lEsDA3Cfe+ZoBrJE+Igi1Sdzu+u37VEE0DAI8jZx2NqxHBFhEr4LrDc
-9nAe3EDMsQZz6vrj8XLIX5H4+icF9kH0F8ti3I/MEarDfc4JJVXnCSFyohrqcQBX
-sK2gXuFVZpww6JnvplGsuZdfvDUe9OF5bB/6Q2rf58t2X7siernKVbxmyFXhOueR
-z9qdVpwwwAbp2q1TQBMiPS6vTZVfgjNqTjT2BSx8dRn4KQ01RABkC1Jip6N2ZFp5
-a/zYDz/cQsEDWRMVvw+vo0WTMn9uPaTFf3EmIdvkLgk0r8B1thQLdxDdmKsopWTj
-0p3cz2/GiGysGeTNX3zw7M91p5DfJ0t+RpIWNdeyWuhJ2Q9yIawTDzIm5y/GHt11
-S20KiDrD83y3ycII8d/nVA0OWpOR7bfYNJuwnOqQLzXSIYDWslbpakK9HdlYhF7e
-w+NgqDjrqs4nVaOu0SB5Ez7bRYGN9y7dGxzTu7wT/Q9HfZRUqFMTtmzDXD9uDXnr
-ukmLpYjHEWn1oAGS3mU0K//wuX+xA1VA6bP/8Adaaiks95jTxIXucD5eh1jj+cRd
-+UtMXmZvWdkQ/CNmpGoXn6c6NuDZZ3tPHpIaYJAYKAhq9BqFtIXyORKzDa0BeH2I
-7AwmPli94uZE/yFv5H3FU7PSvUPqXaKPsIq999YzRofIie1vsFAAEJROVCVCAztF
-5oqjwia9NIduO4+CfduwJeM+cMdXQRcV93FdFJVDYmdPd+ag30phJVzM6g91hy8U
-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
-D2HIWUtfsGH91A/5sWbz738FOOWOy26+nQ==
-=NAqV
------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"