summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
l---------config.hs2
-rwxr-xr-xdebian/rules2
-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/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
34 files changed, 306 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/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/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 5872c5c4..00000000
--- a/privdata.joey/privdata.gpg
+++ /dev/null
@@ -1,751 +0,0 @@
------BEGIN PGP MESSAGE-----
-Version: GnuPG v1
-
-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
-43zNxw40Yhf/
-=TsK1
------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"