summaryrefslogtreecommitdiff
path: root/doc/forum
diff options
context:
space:
mode:
Diffstat (limited to 'doc/forum')
-rw-r--r--doc/forum/Fail_to_push_changes_when_merging.mdwn27
-rw-r--r--doc/forum/Fail_to_push_changes_when_merging/comment_1_a44e03cbce4c996e136f917d8e06a7bb._comment12
-rw-r--r--doc/forum/Fail_to_push_changes_when_merging/comment_2_4c8e1d9409b8ecfc465550fbbf5c0708._comment8
-rw-r--r--doc/forum/Fail_to_push_changes_when_merging/comment_3_bdf54ac096c994c33d661b454d89c770._comment13
-rw-r--r--doc/forum/FreeBSD_Port.mdwn12
-rw-r--r--doc/forum/Git_repo_updating.mdwn1
-rw-r--r--doc/forum/Git_repo_updating/comment_1_f601e29b5fb82700b21914f3fb1ef49b._comment17
-rw-r--r--doc/forum/Locales_always_generated.mdwn18
-rw-r--r--doc/forum/Locales_always_generated/comment_1_26e9d3c1ec2ad32d18ee2205254b71b8._comment12
-rw-r--r--doc/forum/Locales_always_generated/comment_2_fcce3726ab696a55abb12367ff5bf36c._comment8
-rw-r--r--doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring.mdwn13
-rw-r--r--doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring/comment_1_c9a24f6022fbe9063356df3ddbd767d6._comment16
-rw-r--r--doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring/comment_2_2300ca8616f5bd229bf7b72a6fb96980._comment7
-rw-r--r--doc/forum/Script_to_convert_config_files_for_inclusion_in_Propellor_config.mdwn41
-rw-r--r--doc/forum/Script_to_convert_config_files_for_inclusion_in_Propellor_config/comment_1_98a4c56ba162a1e04a5b5649ff39ee3f._comment8
-rw-r--r--doc/forum/Ssh.authorizedKey_does_not_work_on_brand_new_user.mdwn1
-rw-r--r--doc/forum/Ssh.authorizedKey_does_not_work_on_brand_new_user/comment_1_e22d4f2c96564a7f927a83207651be1c._comment8
-rw-r--r--doc/forum/Ssh.authorizedKey_does_not_work_on_brand_new_user/comment_2_3cd8b6d02f8826f27b41c1ca27817bfe._comment8
-rw-r--r--doc/forum/Systemd.container_produces_non-standard_systemd_container/comment_4_5dc1c3ee7f111fcc36c72487b7713854._comment9
-rw-r--r--doc/forum/Understanding_changesFile_equation.mdwn15
-rw-r--r--doc/forum/Understanding_changesFile_equation/comment_1_eab28824f8cd1a03bcc16aee4e161643._comment15
-rw-r--r--doc/forum/Weird_SSH_issue.mdwn3
-rw-r--r--doc/forum/Weird_SSH_issue/comment_1_8598e38bc60fd25ebecb7b3b09d74940._comment10
-rw-r--r--doc/forum/Weird_SSH_issue/comment_2_5c0bb1b38a92ff17277f514703ce2761._comment8
-rw-r--r--doc/forum/Weird_SSH_issue/comment_3_8347b69df64b737f4e5df854c55d4e92._comment15
-rw-r--r--doc/forum/Weird_SSH_issue/comment_4_2fbb97cb5bca3a0e2835e7667aff7a00._comment22
-rw-r--r--doc/forum/Weird_SSH_issue/comment_5_bfbcb2a81bff6b6432217c72a5e54576._comment12
-rw-r--r--doc/forum/Weird_SSH_issue/comment_6_d6c4f22f48c5f0b6d06e9a155e8e5f69._comment8
-rw-r--r--doc/forum/Weird_SSH_issue/comment_7_77d2d330846c80ed463644860e49f184._comment9
-rw-r--r--doc/forum/chroot_issue_when_upgrading.mdwn42
-rw-r--r--doc/forum/chroot_issue_when_upgrading/comment_2_eea48d51f241651935f695ea1dc7dd87._comment16
-rw-r--r--doc/forum/gnupg2/comment_2_9070abc82d8aa259aca187ed5d6638cc._comment12
-rw-r--r--doc/forum/gnupg2/comment_3_996fe5791c175d709217875b5e751c4f._comment7
-rw-r--r--doc/forum/howto_mapM_RevertableProperty.mdwn52
-rw-r--r--doc/forum/howto_mapM_RevertableProperty/comment_1_c2800340a5361add82f5e9e30b56b18c._comment22
-rw-r--r--doc/forum/howto_mapM_RevertableProperty/comment_2_1327f1f218433ce262f871771c43452c._comment23
-rw-r--r--doc/forum/howto_mapM_RevertableProperty/comment_3_7e519cc5f1c07b66561ec31866ddbc8a._comment11
-rw-r--r--doc/forum/propellor_2.15.2_does_not_work_on_jessie.mdwn20
-rw-r--r--doc/forum/propellor_2.15.2_does_not_work_on_jessie/comment_1_eafe3affdad32bc9f4493a938f71d83f._comment9
39 files changed, 570 insertions, 0 deletions
diff --git a/doc/forum/Fail_to_push_changes_when_merging.mdwn b/doc/forum/Fail_to_push_changes_when_merging.mdwn
new file mode 100644
index 00000000..62bb314d
--- /dev/null
+++ b/doc/forum/Fail_to_push_changes_when_merging.mdwn
@@ -0,0 +1,27 @@
+I use a single propellor configuration repository shared across multiple hosts, but we don't have a central repository, e.g. we don't set origin on master branch so propellor do not push/pull from central repository when updating. That works fine as long as we do not merge branches. When we do we encounter the following error:
+
+ remote: Counting objects: 108, done.
+ remote: Compressing objects: 100% (105/105), done.
+ remote: Total 108 (delta 53), reused 0 (delta 0) s
+ Receiving objects: 100% (108/108), 41.16 KiB | 22.00 KiB/s, done.
+ Resolving deltas: 100% (53/53), completed with 19 local objects.
+ From .
+ * branch HEAD -> FETCH_HEAD
+
+ *** Please tell me who you are.
+
+ Run
+
+ git config --global user.email "you@example.com"
+ git config --global user.name "Your Name"
+
+ to set your account's default identity.
+ Omit --global to set the identity only in this repository.
+
+ fatal: unable to auto-detect email address (got 'root@lending-test.(none)')
+ propellor: <stdout>: hIsTerminalDevice: illegal operation (handle is closed)
+
+I do not understand properly how propellor does propagate changes in this case so I am unable to fix this issue in a sane way. What we currently do is simply log in in the server and wipe out propellor repo there, which works but kind of defeat the whole purpose of automated configuration management.
+
+Could you please advise on how we can fix this issue? Simply having a central repository would do the trick I guess, but is there another solution?
+
diff --git a/doc/forum/Fail_to_push_changes_when_merging/comment_1_a44e03cbce4c996e136f917d8e06a7bb._comment b/doc/forum/Fail_to_push_changes_when_merging/comment_1_a44e03cbce4c996e136f917d8e06a7bb._comment
new file mode 100644
index 00000000..751d701a
--- /dev/null
+++ b/doc/forum/Fail_to_push_changes_when_merging/comment_1_a44e03cbce4c996e136f917d8e06a7bb._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 1"
+ date="2015-12-08T01:20:26Z"
+ content="""
+It looks like git is failing because it can't autodetect an e-mail address for root on the target machine. This might be because the target machine does not have a FQDN, but I'm not sure. Try logging into the target machine as root and running
+
+ git config --global user.email root@lending-test.local
+ git config --global user.name root
+
+as it suggests.
+"""]]
diff --git a/doc/forum/Fail_to_push_changes_when_merging/comment_2_4c8e1d9409b8ecfc465550fbbf5c0708._comment b/doc/forum/Fail_to_push_changes_when_merging/comment_2_4c8e1d9409b8ecfc465550fbbf5c0708._comment
new file mode 100644
index 00000000..47eb9f6a
--- /dev/null
+++ b/doc/forum/Fail_to_push_changes_when_merging/comment_2_4c8e1d9409b8ecfc465550fbbf5c0708._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="arnaud@30aba4d9f1742050874551d3ddc55ca8694809f8"
+ nickname="arnaud"
+ subject="comment 2"
+ date="2015-12-08T07:04:21Z"
+ content="""
+Thanks, I will try that. But why does it not happen when updating with fast-forward?
+"""]]
diff --git a/doc/forum/Fail_to_push_changes_when_merging/comment_3_bdf54ac096c994c33d661b454d89c770._comment b/doc/forum/Fail_to_push_changes_when_merging/comment_3_bdf54ac096c994c33d661b454d89c770._comment
new file mode 100644
index 00000000..a59296a0
--- /dev/null
+++ b/doc/forum/Fail_to_push_changes_when_merging/comment_3_bdf54ac096c994c33d661b454d89c770._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2015-12-08T15:53:27Z"
+ content="""
+Looks like a lacking FQDN indeed. There's a property to fix that! ;)
+
+Git is also picky about the user having a name.
+
+AFAIK, git does not make commits for fast-forward merges, but it does for
+non-fast-forward merges. I suspect that it's making such a merge in your
+case.
+"""]]
diff --git a/doc/forum/FreeBSD_Port.mdwn b/doc/forum/FreeBSD_Port.mdwn
new file mode 100644
index 00000000..6a184d61
--- /dev/null
+++ b/doc/forum/FreeBSD_Port.mdwn
@@ -0,0 +1,12 @@
+Hey all, I just thought I'd mention I'm working on porting Propellor to FreeBSD. Here's my [GitHub fork](https://github.com/misandrist/propellor/tree/FreeBSD), and the branch is called FreeBSD.
+
+Currently:
+
+- I've started passing the System down into the Bootstrap to choose the right shell commands and package dependencies
+- I've briefly commented out the Cron job creation
+- I've added a module for FreeBSD, and a really minimal property for Pkg
+- I've created a sample configuration which is only tests pkg update
+
+It's pretty encouraging so far, and I'm hoping to have more working soon.
+
+Thanks!
diff --git a/doc/forum/Git_repo_updating.mdwn b/doc/forum/Git_repo_updating.mdwn
new file mode 100644
index 00000000..e0cccedd
--- /dev/null
+++ b/doc/forum/Git_repo_updating.mdwn
@@ -0,0 +1 @@
+Propellor.Property.Git.cloned clones a git repo to a location, great! Is there an easy way to keep it updated afterwards, though? I guess having a property that enforce up-to-dateness wouldn't be so practical since you have to hit the remote to check, perhaps a cron job to run some equivalent of `git fetch && git reset --hard && git clean -dfx`. (Just thinking out loud here, and wondering what everyone else is doing)
diff --git a/doc/forum/Git_repo_updating/comment_1_f601e29b5fb82700b21914f3fb1ef49b._comment b/doc/forum/Git_repo_updating/comment_1_f601e29b5fb82700b21914f3fb1ef49b._comment
new file mode 100644
index 00000000..9aaa4f60
--- /dev/null
+++ b/doc/forum/Git_repo_updating/comment_1_f601e29b5fb82700b21914f3fb1ef49b._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2016-03-04T16:25:55Z"
+ content="""
+You could certianly write a property that did a git pull every time. It
+would do some unnessesary work and still not keep the checkout always
+immediately up-to-date.
+
+Better to have some kind of hook that causes the checkout to update when
+changes are pushed into its parent repository. How such a hook works
+depends on where the parent repository is hosted. Propellor properties
+could be written to set up whatever's needed for such a hook on the system
+where the repository is checked out. If you're hosting your own git
+server as well, propellor properties could set up the post-update hook in
+the origin repo too.
+"""]]
diff --git a/doc/forum/Locales_always_generated.mdwn b/doc/forum/Locales_always_generated.mdwn
new file mode 100644
index 00000000..769cbad0
--- /dev/null
+++ b/doc/forum/Locales_always_generated.mdwn
@@ -0,0 +1,18 @@
+I'm using the `Locale.available` property, and it seems the locales are always generated:
+
+```
+Generating locales (this might take a while)...
+ en_GB.UTF-8... done
+ en_US.UTF-8... done
+ en_ZA.UTF-8... done
+Generation complete.
+onyx.fusionapp.com en_ZA.UTF-8 locale generated ... done
+Generating locales (this might take a while)...
+ en_GB.UTF-8... done
+ en_US.UTF-8... done
+ en_ZA.UTF-8... done
+Generation complete.
+onyx.fusionapp.com en_US.UTF-8 locale generated ... done
+```
+
+I inspected the definition of the property, but I'm not sure where the bug is. Should `fileProperty` with identical contents be causing `onChange` to trigger?
diff --git a/doc/forum/Locales_always_generated/comment_1_26e9d3c1ec2ad32d18ee2205254b71b8._comment b/doc/forum/Locales_always_generated/comment_1_26e9d3c1ec2ad32d18ee2205254b71b8._comment
new file mode 100644
index 00000000..de64aaa8
--- /dev/null
+++ b/doc/forum/Locales_always_generated/comment_1_26e9d3c1ec2ad32d18ee2205254b71b8._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2016-03-06T17:06:16Z"
+ content="""
+What seems to be going on is, /etc/locale.gen is changed, uncommenting
+the line, but then the dpkg-reconfigure locales rewrites the file
+with the same set of locales enabled but a different set of lines and
+comments. So, next time the property runs, it wants to change the file again.
+
+I changed it to run locale-gen instead, which avoids the problem.
+"""]]
diff --git a/doc/forum/Locales_always_generated/comment_2_fcce3726ab696a55abb12367ff5bf36c._comment b/doc/forum/Locales_always_generated/comment_2_fcce3726ab696a55abb12367ff5bf36c._comment
new file mode 100644
index 00000000..67143d74
--- /dev/null
+++ b/doc/forum/Locales_always_generated/comment_2_fcce3726ab696a55abb12367ff5bf36c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="mithrandi@311efa1b2b5c4999c2edae7da06fb825899e8a82"
+ nickname="mithrandi"
+ subject="comment 2"
+ date="2016-03-06T17:38:57Z"
+ content="""
+Ah, nice! I hadn't noticed that the contents was actually changing.
+"""]]
diff --git a/doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring.mdwn b/doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring.mdwn
new file mode 100644
index 00000000..45f85767
--- /dev/null
+++ b/doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring.mdwn
@@ -0,0 +1,13 @@
+ Obnam.backupEncrypted "/" (Cron.Times "44 2 * * *") [] Obnam.OnlyClient (Gpg.GpgKeyId "XXXXXX")
+
+ $ propellor --spin myhost
+ myhost apt installed obnam ... ok
+ gpg: key XXXXXX: already in secret keyring
+ gpg: Total number processed: 1
+ gpg: secret keys read: 1
+ gpg: secret keys unchanged: 1
+ ** warning: user error (su ["-c","gpg --import","root"] exited 2)
+ myhost / backed up by obnam ... failed
+ myhost overall ... failed
+ Shared connection to myhost closed.
+ propellor: remote propellor failed
diff --git a/doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring/comment_1_c9a24f6022fbe9063356df3ddbd767d6._comment b/doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring/comment_1_c9a24f6022fbe9063356df3ddbd767d6._comment
new file mode 100644
index 00000000..c65cc5cd
--- /dev/null
+++ b/doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring/comment_1_c9a24f6022fbe9063356df3ddbd767d6._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-12-11T16:41:30Z"
+ content="""
+More accurately, it's Gpg.keyImported that's failing, and this is because
+it's implemented using a flagFile to remember if it's imported the gpg key
+before. So the fix would be to implement:
+
+ hasPrivKey :: GpgKeyId -> User -> IO Bool
+
+ hasPubKey :: GpgKeyId -> User -> IO Bool
+
+And then Gpg.keyImported could use those with `check` to avoid redundant
+import.
+"""]]
diff --git a/doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring/comment_2_2300ca8616f5bd229bf7b72a6fb96980._comment b/doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring/comment_2_2300ca8616f5bd229bf7b72a6fb96980._comment
new file mode 100644
index 00000000..8592e7e1
--- /dev/null
+++ b/doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring/comment_2_2300ca8616f5bd229bf7b72a6fb96980._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="gueux"
+ subject="comment 2"
+ date="2015-12-13T20:45:06Z"
+ content="""
+OK, I'll try to implement something this way :).
+"""]]
diff --git a/doc/forum/Script_to_convert_config_files_for_inclusion_in_Propellor_config.mdwn b/doc/forum/Script_to_convert_config_files_for_inclusion_in_Propellor_config.mdwn
new file mode 100644
index 00000000..c9f5ec8b
--- /dev/null
+++ b/doc/forum/Script_to_convert_config_files_for_inclusion_in_Propellor_config.mdwn
@@ -0,0 +1,41 @@
+This script turns
+
+ Section "Monitor"
+ Identifier "Configured Monitor"
+ EndSection
+
+into this:
+
+ [ "Section \"Monitor\""
+ , "\tIdentifier \"Configured Monitor\""
+ , "EndSection"
+ ]
+
+for the inclusion of short config files in your Propellor config using `File.hasContent`.
+
+[[!format haskell """
+#!/usr/bin/runhaskell
+
+main = interact $ unlines . propellorLines . lines
+
+propellorLines :: [String] -> [String]
+propellorLines (x:xs) = ("[ " ++ wrapEscapeLine x) : propellorLines' xs
+
+propellorLines' :: [String] -> [String]
+propellorLines' = foldr step ["]"]
+ where
+ step x xs = (", " ++ wrapEscapeLine x) : xs
+
+wrapEscapeLine :: String -> String
+wrapEscapeLine line = "\"" ++ (foldr step "" line) ++ "\""
+ where
+ step x xs
+ | x == '\t' = "\\t" ++ xs
+ | x == '\\' = x : x : xs
+ | x == '"' = '\\' : x : xs
+ | otherwise = x : xs
+"""]]
+
+Usage: `cat config_file | propellor_lines` (or in Emacs, dump the config file into your propellor config, select the region and use `C-u M-|` to pipe it through).
+
+-- [[spwhitton|https://spwhitton.name]]
diff --git a/doc/forum/Script_to_convert_config_files_for_inclusion_in_Propellor_config/comment_1_98a4c56ba162a1e04a5b5649ff39ee3f._comment b/doc/forum/Script_to_convert_config_files_for_inclusion_in_Propellor_config/comment_1_98a4c56ba162a1e04a5b5649ff39ee3f._comment
new file mode 100644
index 00000000..553ba0b9
--- /dev/null
+++ b/doc/forum/Script_to_convert_config_files_for_inclusion_in_Propellor_config/comment_1_98a4c56ba162a1e04a5b5649ff39ee3f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="mithrandi@311efa1b2b5c4999c2edae7da06fb825899e8a82"
+ nickname="mithrandi"
+ subject="Quasiquoter"
+ date="2016-02-22T04:25:24Z"
+ content="""
+You could also use something like [raw-strings-qq](http://hackage.haskell.org/package/raw-strings-qq) to embed the files as-is without having to quote/escape a ton of stuff.
+"""]]
diff --git a/doc/forum/Ssh.authorizedKey_does_not_work_on_brand_new_user.mdwn b/doc/forum/Ssh.authorizedKey_does_not_work_on_brand_new_user.mdwn
new file mode 100644
index 00000000..aa40dffc
--- /dev/null
+++ b/doc/forum/Ssh.authorizedKey_does_not_work_on_brand_new_user.mdwn
@@ -0,0 +1 @@
+I couldn't quite figure out what is wrong with the code as written, but the properties in modAuthorizedKey relating to the file modes/ownership get applied before the properties to create the directory and file are applied, so if they don't already exist then you get an error.
diff --git a/doc/forum/Ssh.authorizedKey_does_not_work_on_brand_new_user/comment_1_e22d4f2c96564a7f927a83207651be1c._comment b/doc/forum/Ssh.authorizedKey_does_not_work_on_brand_new_user/comment_1_e22d4f2c96564a7f927a83207651be1c._comment
new file mode 100644
index 00000000..40ab94c4
--- /dev/null
+++ b/doc/forum/Ssh.authorizedKey_does_not_work_on_brand_new_user/comment_1_e22d4f2c96564a7f927a83207651be1c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2016-02-26T14:55:32Z"
+ content="""
+Indeed, I think I've fixed it by making the permissions fixup come `after`
+the property that creates the file, rather than `before`.
+"""]]
diff --git a/doc/forum/Ssh.authorizedKey_does_not_work_on_brand_new_user/comment_2_3cd8b6d02f8826f27b41c1ca27817bfe._comment b/doc/forum/Ssh.authorizedKey_does_not_work_on_brand_new_user/comment_2_3cd8b6d02f8826f27b41c1ca27817bfe._comment
new file mode 100644
index 00000000..5b308812
--- /dev/null
+++ b/doc/forum/Ssh.authorizedKey_does_not_work_on_brand_new_user/comment_2_3cd8b6d02f8826f27b41c1ca27817bfe._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="mithrandi@311efa1b2b5c4999c2edae7da06fb825899e8a82"
+ nickname="mithrandi"
+ subject="comment 2"
+ date="2016-02-26T23:36:33Z"
+ content="""
+I just verified that it works now (with your fix), thanks!
+"""]]
diff --git a/doc/forum/Systemd.container_produces_non-standard_systemd_container/comment_4_5dc1c3ee7f111fcc36c72487b7713854._comment b/doc/forum/Systemd.container_produces_non-standard_systemd_container/comment_4_5dc1c3ee7f111fcc36c72487b7713854._comment
new file mode 100644
index 00000000..d7fe1dd5
--- /dev/null
+++ b/doc/forum/Systemd.container_produces_non-standard_systemd_container/comment_4_5dc1c3ee7f111fcc36c72487b7713854._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="jerryjacobs1989@d19093c366dfb2959c549ed1aff6175ddc7a7a5b"
+ nickname="jerryjacobs1989"
+ subject="Thank you"
+ date="2015-11-29T13:04:56Z"
+ content="""
+I was bitten also by this weird error message and have submitted it upstream:
+https://github.com/systemd/systemd/issues/2060
+"""]]
diff --git a/doc/forum/Understanding_changesFile_equation.mdwn b/doc/forum/Understanding_changesFile_equation.mdwn
new file mode 100644
index 00000000..5e360097
--- /dev/null
+++ b/doc/forum/Understanding_changesFile_equation.mdwn
@@ -0,0 +1,15 @@
+Hi, I'm trying to understand a part of the `changesFile` equation, specifically `oldstat`.
+
+```
+changesFile :: Checkable p i => p i -> FilePath -> Property i
+changesFile p f = checkResult getstat comparestat p
+ where
+ getstat = catchMaybeIO $ getSymbolicLinkStatus f
+ comparestat oldstat = do
+ newstat <- getstat
+ return $ if samestat oldstat newstat then NoChange else MadeChange
+```
+
+As we see, we catch `getstat` given `f`, but what I don't understand or see, is how is `oldstat` been passed/generated?
+
+Thanks for the help.
diff --git a/doc/forum/Understanding_changesFile_equation/comment_1_eab28824f8cd1a03bcc16aee4e161643._comment b/doc/forum/Understanding_changesFile_equation/comment_1_eab28824f8cd1a03bcc16aee4e161643._comment
new file mode 100644
index 00000000..22bcc014
--- /dev/null
+++ b/doc/forum/Understanding_changesFile_equation/comment_1_eab28824f8cd1a03bcc16aee4e161643._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2016-02-24T21:09:52Z"
+ content="""
+`checkResult` is the key to understanding this. Its (simplified) type
+signature:
+
+ checkResult :: m a -> (a -> m Result) -> p i -> Property i
+
+It's being given getstat as the first parameter. It runs that before the
+property does anything, and it passes that value to comparestat.
+
+So, oldstat is the getstat value from before the property did anything.
+"""]]
diff --git a/doc/forum/Weird_SSH_issue.mdwn b/doc/forum/Weird_SSH_issue.mdwn
new file mode 100644
index 00000000..11094d55
--- /dev/null
+++ b/doc/forum/Weird_SSH_issue.mdwn
@@ -0,0 +1,3 @@
+For some reason (and I'm not sure exactly when this started), when I propellor --spin a host when the control master socket does not yet exist, none of the output from the remote host comes back. The remote run works fine, I just have to ^C the local propellor once I see that the remote run is done (by watching top on the remote host or something). If the socket does already exist (eg. spinning again immediately), then everything is fine.
+
+I assume this is some issue with my local SSH version or config, but I have no clue what. Anyone have any ideas?
diff --git a/doc/forum/Weird_SSH_issue/comment_1_8598e38bc60fd25ebecb7b3b09d74940._comment b/doc/forum/Weird_SSH_issue/comment_1_8598e38bc60fd25ebecb7b3b09d74940._comment
new file mode 100644
index 00000000..0eb98f6c
--- /dev/null
+++ b/doc/forum/Weird_SSH_issue/comment_1_8598e38bc60fd25ebecb7b3b09d74940._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2016-03-06T17:00:02Z"
+ content="""
+I think I've been seeing this too, recently.
+
+I had not put together that it involves the ssh control socket.
+And am not 100% sure it does yet.
+"""]]
diff --git a/doc/forum/Weird_SSH_issue/comment_2_5c0bb1b38a92ff17277f514703ce2761._comment b/doc/forum/Weird_SSH_issue/comment_2_5c0bb1b38a92ff17277f514703ce2761._comment
new file mode 100644
index 00000000..0b545262
--- /dev/null
+++ b/doc/forum/Weird_SSH_issue/comment_2_5c0bb1b38a92ff17277f514703ce2761._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="mithrandi@311efa1b2b5c4999c2edae7da06fb825899e8a82"
+ nickname="mithrandi"
+ subject="comment 2"
+ date="2016-03-06T17:39:34Z"
+ content="""
+Yes, it's possible I misdiagnosed the problem; I've never had the issue spinning twice in a row, but there may be other factors at play.
+"""]]
diff --git a/doc/forum/Weird_SSH_issue/comment_3_8347b69df64b737f4e5df854c55d4e92._comment b/doc/forum/Weird_SSH_issue/comment_3_8347b69df64b737f4e5df854c55d4e92._comment
new file mode 100644
index 00000000..adc64e5d
--- /dev/null
+++ b/doc/forum/Weird_SSH_issue/comment_3_8347b69df64b737f4e5df854c55d4e92._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2016-03-06T17:54:20Z"
+ content="""
+It also seemed to affect the first spin and not the second one when I was
+seeing it. But that was 1-2 weeks ago, and I am not currently reproducing
+the issue.
+
+If you can reproduce it consistently, it would be good to check if the
+concurrent output layer, which involves intercepting all command output and
+serializing it, might be involved. If you edit
+`src/Utility/Process/Shim.hs` and make it simply `import System.Process as X`
+and remove the other import, that will bypass the concurrent output layer.
+"""]]
diff --git a/doc/forum/Weird_SSH_issue/comment_4_2fbb97cb5bca3a0e2835e7667aff7a00._comment b/doc/forum/Weird_SSH_issue/comment_4_2fbb97cb5bca3a0e2835e7667aff7a00._comment
new file mode 100644
index 00000000..2ffdcbac
--- /dev/null
+++ b/doc/forum/Weird_SSH_issue/comment_4_2fbb97cb5bca3a0e2835e7667aff7a00._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2016-03-06T18:43:37Z"
+ content="""
+Added some debugging, I found that processes run by concurrent-output tend to
+alternate between running foreground and background. So, when the socket
+exists and is old, it will run one more process than otherwise to
+stop ssh on that socket, and this will change which run method is
+used for subsequent processes.
+
+However, it really shouldn't matter if a process starts in the background;
+concurrent-output shoud notice when the output lock frees up, and start
+displaying the processes's output.
+
+So, this theory explains why the ssh socket seems to be involved, perhaps,
+but it doesn't really explain what's happening to prevent the remote
+propellor output from being shown.
+
+Unless some other foreground process is hanging around and keeping
+the output lock. Or some bug in concurrent-output..
+"""]]
diff --git a/doc/forum/Weird_SSH_issue/comment_5_bfbcb2a81bff6b6432217c72a5e54576._comment b/doc/forum/Weird_SSH_issue/comment_5_bfbcb2a81bff6b6432217c72a5e54576._comment
new file mode 100644
index 00000000..72315aa0
--- /dev/null
+++ b/doc/forum/Weird_SSH_issue/comment_5_bfbcb2a81bff6b6432217c72a5e54576._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 5"""
+ date="2016-03-06T19:57:03Z"
+ content="""
+Managed to reproduce the hang once, and the ssh was indeed being run as
+bgProcess. However, I didn't manage to see what foreground process, if any,
+was running when that happened. And had no luck reproducing it again.
+
+I added some more `PROPELLOR_DEBUG` output around this, so it'll tell
+when a process is being run by fgProcess or bgProcess.
+"""]]
diff --git a/doc/forum/Weird_SSH_issue/comment_6_d6c4f22f48c5f0b6d06e9a155e8e5f69._comment b/doc/forum/Weird_SSH_issue/comment_6_d6c4f22f48c5f0b6d06e9a155e8e5f69._comment
new file mode 100644
index 00000000..7d01913b
--- /dev/null
+++ b/doc/forum/Weird_SSH_issue/comment_6_d6c4f22f48c5f0b6d06e9a155e8e5f69._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="mithrandi@311efa1b2b5c4999c2edae7da06fb825899e8a82"
+ nickname="mithrandi"
+ subject="comment 6"
+ date="2016-03-06T21:27:18Z"
+ content="""
+Might it have something to do with how ssh forks (but doesn't double fork or \"daemonize\") to start the control master, if one isn't already running?
+"""]]
diff --git a/doc/forum/Weird_SSH_issue/comment_7_77d2d330846c80ed463644860e49f184._comment b/doc/forum/Weird_SSH_issue/comment_7_77d2d330846c80ed463644860e49f184._comment
new file mode 100644
index 00000000..ab82a6c1
--- /dev/null
+++ b/doc/forum/Weird_SSH_issue/comment_7_77d2d330846c80ed463644860e49f184._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 7"""
+ date="2016-03-06T22:59:31Z"
+ content="""
+I don't see how that could be relevant, but if you want to, edit
+src/Propellor/Ssh.hs and make sshCachingParams return [] and
+see if that changes it.
+"""]]
diff --git a/doc/forum/chroot_issue_when_upgrading.mdwn b/doc/forum/chroot_issue_when_upgrading.mdwn
new file mode 100644
index 00000000..9d65eed4
--- /dev/null
+++ b/doc/forum/chroot_issue_when_upgrading.mdwn
@@ -0,0 +1,42 @@
+Hello,
+
+It seems that my unstable chroot is broken.
+When I do an upgrade, I get this error message
+
+
+ E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem.
+ /srv/chroot/unstable-i386-sbuild has Operating System (Debian Unstable) "i386" ... ok
+ /srv/chroot/unstable-i386-sbuild noop property ... ok
+ /srv/chroot/unstable-i386-sbuild apt installed apt-transport-https ... ok
+ /srv/chroot/unstable-i386-sbuild standard sources.list ... ok
+ Hit:1 http://ftp2.fr.debian.org/debian unstable InRelease
+ Hit:2 http://mirrors.kernel.org/debian unstable InRelease
+ /srv/chroot/unstable-i386-sbuild apt update ... failed
+ /srv/chroot/unstable-i386-sbuild apt cache cleaned ... ok
+ mordor chroot /srv/chroot/unstable-i386-sbuild provisioned ... failed
+
+the properties are here
+ sbuild :: System -> Proxy -> RevertableProperty HasInfo
+ sbuild system proxy = Sbuild.schroot schrootname chroot
+ where
+ chroot = Chroot.debootstrapped Debootstrap.BuilddD chrootdir
+ & os system
+ & case proxy of
+ (Just p) -> "/etc/apt/apt.conf.d/01proxy" `File.hasContent` ["Acquire::http::Proxy \"" ++ p ++ "\";"]
+ Nothing -> doNothing
+ & Apt.installed ["apt-transport-https"]
+ & Apt.stdSourcesList
+ & Apt.update `onChange` Apt.upgrade
+ & Apt.cacheCleaned
+ schrootname = Sbuild.schrootname system
+ chrootdir = "/srv/chroot" </> schrootname
+
+so the update failed and the solution seems to be
+
+ dpkg --configure -a
+
+Is it possible to deal with this problem in the update property in order to make it transparent for the users.
+
+Cheers
+
+Frederic
diff --git a/doc/forum/chroot_issue_when_upgrading/comment_2_eea48d51f241651935f695ea1dc7dd87._comment b/doc/forum/chroot_issue_when_upgrading/comment_2_eea48d51f241651935f695ea1dc7dd87._comment
new file mode 100644
index 00000000..654ea40c
--- /dev/null
+++ b/doc/forum/chroot_issue_when_upgrading/comment_2_eea48d51f241651935f695ea1dc7dd87._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2016-02-29T21:44:19Z"
+ content="""
+There are several ways this could happen, along the lines of a power
+failure or ctrl-c at the wrong time. A failing postinst may also cause
+apt to leave other packages un-configured, although `dpkg configure -a`
+probably won't recover from that case.
+
+I think it makes sense for Apt.upgrade to run `dpkg --configure -a`
+in case the last upgrade got into this state. I don't think it makes sense
+for Apt.install to do that (too much overhead to do it every time,
+and I don't think that unconfigured packages normally prevent installing
+of an unrelated package anyway). I've made a change along these lines.
+"""]]
diff --git a/doc/forum/gnupg2/comment_2_9070abc82d8aa259aca187ed5d6638cc._comment b/doc/forum/gnupg2/comment_2_9070abc82d8aa259aca187ed5d6638cc._comment
new file mode 100644
index 00000000..d8233cee
--- /dev/null
+++ b/doc/forum/gnupg2/comment_2_9070abc82d8aa259aca187ed5d6638cc._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2015-12-30T19:02:30Z"
+ content="""
+I've merged a patch that adds a GNUPGBIN environment variable.
+
+It might make sense for propellor to look at git's gpg.program
+configuration and use it if set. Probably a propellor user wants to use the
+same gpg program for both signing and verifying their git commit and for
+propellor's privdata.
+"""]]
diff --git a/doc/forum/gnupg2/comment_3_996fe5791c175d709217875b5e751c4f._comment b/doc/forum/gnupg2/comment_3_996fe5791c175d709217875b5e751c4f._comment
new file mode 100644
index 00000000..ead20fb6
--- /dev/null
+++ b/doc/forum/gnupg2/comment_3_996fe5791c175d709217875b5e751c4f._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2016-01-03T20:57:42Z"
+ content="""
+gpg.program is also honored now
+"""]]
diff --git a/doc/forum/howto_mapM_RevertableProperty.mdwn b/doc/forum/howto_mapM_RevertableProperty.mdwn
new file mode 100644
index 00000000..7ebcbd47
--- /dev/null
+++ b/doc/forum/howto_mapM_RevertableProperty.mdwn
@@ -0,0 +1,52 @@
+Hello
+
+I have this kind of property
+
+ myProperty :: Conf -> RevertableProperty NoInfo
+
+
+now I have a [Conf] and I want to create also a RevertableProperty NoInfo which apply myProperty for each Conf
+
+I tried to find an equivalent of mapM for properties but I found nothing which works as expected.
+
+I tried with combineProperties but it failed also with a "cryptic message"
+mpoints is the [Conf]
+
+
+ src/config.hs:250:17:
+ Couldn't match type `CInfo
+ (PropertyListType (Property [NoInfo]))
+ (PropertyListType (Property [NoInfo]))'
+ with `NoInfo'
+ Expected type: RevertableProperty NoInfo
+ Actual type: RevertableProperty
+ (CInfo
+ (PropertyListType (Property [NoInfo]))
+ (PropertyListType (Property [NoInfo])))
+ In the expression: mount <!> umount
+ In an equation for `mountExp':
+ mountExp b
+ = mount <!> umount
+ where
+ mount
+ = combineProperties
+ "mount nfs files" (mapM mount'' mpoints)
+ umount
+ = combineProperties
+ "umount nfs files" (mapM umount'' mpoints)
+ mpoints
+ = [MountConf
+ "nfs"
+ ("ruche-"
+ ++
+ beamline ++ ".mydomain.org:/" ++ beamline ++ "-users")
+ ("/nfs/ruche-" ++ beamline ++ "/" ++ beamline ++ "-users"),
+ ....]
+ beamline = show b
+
+What is the right way to create a RevertableProperty from a list of RevertableProperty
+
+thanks
+
+Frederic
+
diff --git a/doc/forum/howto_mapM_RevertableProperty/comment_1_c2800340a5361add82f5e9e30b56b18c._comment b/doc/forum/howto_mapM_RevertableProperty/comment_1_c2800340a5361add82f5e9e30b56b18c._comment
new file mode 100644
index 00000000..66ac9a4f
--- /dev/null
+++ b/doc/forum/howto_mapM_RevertableProperty/comment_1_c2800340a5361add82f5e9e30b56b18c._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2016-02-08T15:00:26Z"
+ content="""
+combineProperties takes a list of PropertyListType, which is a type family
+consisting of [Property NoInfo] and [Property HasInfo]. So, you need to get
+from RevertableProperty NoInfo to one of those. `toProp` can do that.
+
+ combineProperties "desc" (map (toProp . myProperty) confs)
+
+But! I had a look and it was easy to make [RevertableProperty i] an
+instance of PropertyListType, which makes what you already tried type check
+too. I've done so in git.
+
+It would perhaps be nice to make lists of various sorts of properties
+instances of Traversable, so that mapM etc could be used over them. That
+would need some kind of monad for combining properties though, which does
+not currently exist. Might make more sense to make an instance of Foldable
+or just Monoid for properties. Any improvements in this area would be
+appreciated!
+"""]]
diff --git a/doc/forum/howto_mapM_RevertableProperty/comment_2_1327f1f218433ce262f871771c43452c._comment b/doc/forum/howto_mapM_RevertableProperty/comment_2_1327f1f218433ce262f871771c43452c._comment
new file mode 100644
index 00000000..20f6e640
--- /dev/null
+++ b/doc/forum/howto_mapM_RevertableProperty/comment_2_1327f1f218433ce262f871771c43452c._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="picca"
+ subject="comment 2"
+ date="2016-02-10T06:41:49Z"
+ content="""
+Thanks a lot joey :)
+
+I am learning haskell for now and I am not very confortable yet with the haskell Monoid, functor, applicative and monad.
+
+So what you are saying is that it would be great to do something like
+
+ instance monoid Property where
+ mempty = doNothing
+ mappend p1 p2 = combineProperty [p1, p2]
+ mconcat ps = combineProperty ps
+
+in order to combine properties.
+my question is why did you choose to create combineProperty instead of a Monoid at first ?
+
+thanks
+
+Frederic
+"""]]
diff --git a/doc/forum/howto_mapM_RevertableProperty/comment_3_7e519cc5f1c07b66561ec31866ddbc8a._comment b/doc/forum/howto_mapM_RevertableProperty/comment_3_7e519cc5f1c07b66561ec31866ddbc8a._comment
new file mode 100644
index 00000000..79ca2d93
--- /dev/null
+++ b/doc/forum/howto_mapM_RevertableProperty/comment_3_7e519cc5f1c07b66561ec31866ddbc8a._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2016-02-10T16:09:08Z"
+ content="""
+Would probably be better to use `before`, since `combineProperties`
+needs a description of the combined properties.
+
+Using `doNothing` is kind of a hack, it would make propellor say it was
+running "noop property". Perhaps better to use a SemiGroup than a Monoid.
+"""]]
diff --git a/doc/forum/propellor_2.15.2_does_not_work_on_jessie.mdwn b/doc/forum/propellor_2.15.2_does_not_work_on_jessie.mdwn
new file mode 100644
index 00000000..7676a8a3
--- /dev/null
+++ b/doc/forum/propellor_2.15.2_does_not_work_on_jessie.mdwn
@@ -0,0 +1,20 @@
+Hello, I am trying to use propellor 2.15.2 on jessie.
+
+but when I do
+
+runhaskell config.hs, I get this error message
+
+
+ Propellor/Git.hs:10:9 Not in scope: `<$>'
+
+ Propellor/Git.hs:14:9 Not in scope: `<$>'
+
+ Propellor/Git.hs:18:9 Not in scope: `<$>'
+
+ Propellor/Git.hs:22:21 Not in scope: `<$>'
+
+maybe an import is missing with ghc 7.6.3
+
+Cheers
+
+Frederic
diff --git a/doc/forum/propellor_2.15.2_does_not_work_on_jessie/comment_1_eafe3affdad32bc9f4493a938f71d83f._comment b/doc/forum/propellor_2.15.2_does_not_work_on_jessie/comment_1_eafe3affdad32bc9f4493a938f71d83f._comment
new file mode 100644
index 00000000..f3af56ee
--- /dev/null
+++ b/doc/forum/propellor_2.15.2_does_not_work_on_jessie/comment_1_eafe3affdad32bc9f4493a938f71d83f._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2016-01-12T16:39:26Z"
+ content="""
+Yes, unfortuntely by importing Control.Applicative by default, newer
+versions of ghc make it rather harder to produce code that will build on
+older versions too. I've added these imports.
+"""]]