Recent changes to this wiki:

creating "Unknown host OS" after merging recent propellor
diff --git a/doc/forum/__34__Unknown_host_OS__34___after_merging_recent_propellor.mdwn b/doc/forum/__34__Unknown_host_OS__34___after_merging_recent_propellor.mdwn
new file mode 100644
index 00000000..8625ee00
--- /dev/null
+++ b/doc/forum/__34__Unknown_host_OS__34___after_merging_recent_propellor.mdwn
@@ -0,0 +1,43 @@
+Hello,
+
+I merged 5.2.0 into my .propellor, last merge was merging f6797bed.
+
+Since the merge, when I try to spin, I get:
+
+    riva4.ni.fr.eu.org has ipv4 91.121.114.4 ... ok
+    ** warning: Unknown host OS is not supported by this property.
+    CallStack (from HasCallStack):
+      error, called at src/Propellor/Property.hs:350:30 in main:Propellor.Property
+    riva4.ni.fr.eu.org container vz-web2 ... failed
+    riva4.ni.fr.eu.org overall ... failed
+
+I have in my config.hs:
+
+    riva4 :: Host   
+    riva4 = host "riva4.ni.fr.eu.org" $ props
+	    & ipv4 "91.121.114.4"
+	    & stdContainerSpawn "vz-web2" "2g" vzWeb2
+
+    stdContainerSpawn :: Systemd.MachineName
+		      -> String
+		      -> Systemd.Container
+		      -> Property (HasInfo + DebianLike)
+    stdContainerSpawn name size container =
+	    Lvm.lvFormatted Lvm.YesReallyFormatLogicalVolume
+		    (Lvm.LogicalVolume name (Lvm.VolumeGroup "vg0")) size
+		    Partition.EXT4
+		    `before` Fstab.mounted "auto" dev dir mempty
+		    `before` Systemd.nspawned container
+		    `describe` ("container " ++ name)
+      where 
+	    dev = "/dev/vg0" </> name
+	    dir = "/var/lib/container" </> name
+
+    vzWeb2 :: Systemd.Container
+    vzWeb2 = Systemd.debContainer "vz-web2" $ props
+	    & osDebian (Stable "stretch") X86_64
+	    & ipv4 "10.42.2.13"
+
+I reviewed all changes in propellor, but I cannot find what can cause this.
+
+How can I debug this?

Added a comment
diff --git a/doc/todo/partition_properties_should_install_e2fsprogs/comment_2_54a6e8a53221d0db2fe37703cd0a011d._comment b/doc/todo/partition_properties_should_install_e2fsprogs/comment_2_54a6e8a53221d0db2fe37703cd0a011d._comment
new file mode 100644
index 00000000..e7527bdc
--- /dev/null
+++ b/doc/todo/partition_properties_should_install_e2fsprogs/comment_2_54a6e8a53221d0db2fe37703cd0a011d._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ avatar="http://cdn.libravatar.org/avatar/9c3f08f80e67733fd506c353239569eb"
+ subject="comment 2"
+ date="2018-01-19T22:59:44Z"
+ content="""
+Thanks for checking this!
+"""]]

followup and close
diff --git a/doc/todo/partition_properties_should_install_e2fsprogs.mdwn b/doc/todo/partition_properties_should_install_e2fsprogs.mdwn
index 02b9491f..7232bdeb 100644
--- a/doc/todo/partition_properties_should_install_e2fsprogs.mdwn
+++ b/doc/todo/partition_properties_should_install_e2fsprogs.mdwn
@@ -1 +1,3 @@
 The e2fsprogs package is becoming non-essential in Debian.  Properties that invoke `mkfs.ext*` should start explicitly requiring that the package is installed (probably using `Apt.installed`).  --spwhitton
+
+> [[done]] seems no change needed --[[Joey]]
diff --git a/doc/todo/partition_properties_should_install_e2fsprogs/comment_1_0a6335e03587b18d5ae085f9a7bc0656._comment b/doc/todo/partition_properties_should_install_e2fsprogs/comment_1_0a6335e03587b18d5ae085f9a7bc0656._comment
new file mode 100644
index 00000000..555ae84f
--- /dev/null
+++ b/doc/todo/partition_properties_should_install_e2fsprogs/comment_1_0a6335e03587b18d5ae085f9a7bc0656._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2018-01-17T17:02:36Z"
+ content="""
+AFAICS, only Partition.formatted runs that, and it's always made sure to
+install e2fsprogs.
+
+Closing this, unless you know of something else that my grep didn't turn
+up.
+"""]]

fix syntax
diff --git a/doc/todo/Sbuild_and_jessie.mdwn b/doc/todo/Sbuild_and_jessie.mdwn
index 4960c5d8..d90a23a3 100644
--- a/doc/todo/Sbuild_and_jessie.mdwn
+++ b/doc/todo/Sbuild_and_jessie.mdwn
@@ -22,4 +22,4 @@ Cheers and thanks for this new Sbuild which is really nice :))
 
 Frederic
 
-:[[done]] --spwhitton
+> [[done]] --spwhitton

patch merged
diff --git a/doc/todo/Sbuild_and_jessie.mdwn b/doc/todo/Sbuild_and_jessie.mdwn
index 3786a26f..4960c5d8 100644
--- a/doc/todo/Sbuild_and_jessie.mdwn
+++ b/doc/todo/Sbuild_and_jessie.mdwn
@@ -21,3 +21,5 @@ So to my opinion the autopkgtest dependency is missing.
 Cheers and thanks for this new Sbuild which is really nice :))
 
 Frederic
+
+:[[done]] --spwhitton

rename forum/Sbuild_and_jessie.mdwn to todo/Sbuild_and_jessie.mdwn
diff --git a/doc/forum/Sbuild_and_jessie.mdwn b/doc/todo/Sbuild_and_jessie.mdwn
similarity index 100%
rename from doc/forum/Sbuild_and_jessie.mdwn
rename to doc/todo/Sbuild_and_jessie.mdwn
diff --git a/doc/forum/Sbuild_and_jessie/comment_1_31dc85774c182a583aeb1935e9fef2d6._comment b/doc/todo/Sbuild_and_jessie/comment_1_31dc85774c182a583aeb1935e9fef2d6._comment
similarity index 100%
rename from doc/forum/Sbuild_and_jessie/comment_1_31dc85774c182a583aeb1935e9fef2d6._comment
rename to doc/todo/Sbuild_and_jessie/comment_1_31dc85774c182a583aeb1935e9fef2d6._comment
diff --git a/doc/forum/Sbuild_and_jessie/comment_2_41ed6253709b18ec799624a66b9b8078._comment b/doc/todo/Sbuild_and_jessie/comment_2_41ed6253709b18ec799624a66b9b8078._comment
similarity index 100%
rename from doc/forum/Sbuild_and_jessie/comment_2_41ed6253709b18ec799624a66b9b8078._comment
rename to doc/todo/Sbuild_and_jessie/comment_2_41ed6253709b18ec799624a66b9b8078._comment
diff --git a/doc/forum/Sbuild_and_jessie/comment_3_a4d6fdbed71270d7a4ffbfe98d1aa479._comment b/doc/todo/Sbuild_and_jessie/comment_3_a4d6fdbed71270d7a4ffbfe98d1aa479._comment
similarity index 100%
rename from doc/forum/Sbuild_and_jessie/comment_3_a4d6fdbed71270d7a4ffbfe98d1aa479._comment
rename to doc/todo/Sbuild_and_jessie/comment_3_a4d6fdbed71270d7a4ffbfe98d1aa479._comment
diff --git a/doc/forum/Sbuild_and_jessie/comment_4_9e409a59abc81786481207ffbbd7c3ac._comment b/doc/todo/Sbuild_and_jessie/comment_4_9e409a59abc81786481207ffbbd7c3ac._comment
similarity index 100%
rename from doc/forum/Sbuild_and_jessie/comment_4_9e409a59abc81786481207ffbbd7c3ac._comment
rename to doc/todo/Sbuild_and_jessie/comment_4_9e409a59abc81786481207ffbbd7c3ac._comment
diff --git a/doc/forum/Sbuild_and_jessie/comment_5_6303943e3425b29b1e4727d809574cda._comment b/doc/todo/Sbuild_and_jessie/comment_5_6303943e3425b29b1e4727d809574cda._comment
similarity index 100%
rename from doc/forum/Sbuild_and_jessie/comment_5_6303943e3425b29b1e4727d809574cda._comment
rename to doc/todo/Sbuild_and_jessie/comment_5_6303943e3425b29b1e4727d809574cda._comment
diff --git a/doc/forum/Sbuild_and_jessie/comment_6_a88b331c80f57acdf55ac0c0ce3dce6f._comment b/doc/todo/Sbuild_and_jessie/comment_6_a88b331c80f57acdf55ac0c0ce3dce6f._comment
similarity index 100%
rename from doc/forum/Sbuild_and_jessie/comment_6_a88b331c80f57acdf55ac0c0ce3dce6f._comment
rename to doc/todo/Sbuild_and_jessie/comment_6_a88b331c80f57acdf55ac0c0ce3dce6f._comment
diff --git a/doc/forum/Sbuild_and_jessie/comment_7_38650a2151201eaf6f40d8becbbe8861._comment b/doc/todo/Sbuild_and_jessie/comment_7_38650a2151201eaf6f40d8becbbe8861._comment
similarity index 100%
rename from doc/forum/Sbuild_and_jessie/comment_7_38650a2151201eaf6f40d8becbbe8861._comment
rename to doc/todo/Sbuild_and_jessie/comment_7_38650a2151201eaf6f40d8becbbe8861._comment

submit bug report
diff --git a/doc/todo/partition_properties_should_install_e2fsprogs.mdwn b/doc/todo/partition_properties_should_install_e2fsprogs.mdwn
new file mode 100644
index 00000000..02b9491f
--- /dev/null
+++ b/doc/todo/partition_properties_should_install_e2fsprogs.mdwn
@@ -0,0 +1 @@
+The e2fsprogs package is becoming non-essential in Debian.  Properties that invoke `mkfs.ext*` should start explicitly requiring that the package is installed (probably using `Apt.installed`).  --spwhitton

response
diff --git a/doc/forum/Executing_a_property_within_a_explicit_CWD/comment_3_60154b98f64306e627a417905e2bef73._comment b/doc/forum/Executing_a_property_within_a_explicit_CWD/comment_3_60154b98f64306e627a417905e2bef73._comment
new file mode 100644
index 00000000..e24bc461
--- /dev/null
+++ b/doc/forum/Executing_a_property_within_a_explicit_CWD/comment_3_60154b98f64306e627a417905e2bef73._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2018-01-08T22:52:51Z"
+ content="""
+That is what I was suggesting yes.
+
+Another way to do it is using `cmdProperty'`, for example:
+
+	import Utility.Process
+	import Propellor.Property.Cmd
+
+	foo = cmdProperty' "apt-get" ["-y", "install", "gitlab"]
+		(\p -> p { cwd = Just "/tmp" })
+		`assume` MadeChange
+"""]]

Added a comment: To be sure to understand…
diff --git a/doc/forum/Executing_a_property_within_a_explicit_CWD/comment_2_b9ba322a7770ca537174795792ec0a40._comment b/doc/forum/Executing_a_property_within_a_explicit_CWD/comment_2_b9ba322a7770ca537174795792ec0a40._comment
new file mode 100644
index 00000000..aba3618f
--- /dev/null
+++ b/doc/forum/Executing_a_property_within_a_explicit_CWD/comment_2_b9ba322a7770ca537174795792ec0a40._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="serge1cohen@4282f0c177ae4ac2f90ceddf63d2281e1f739cb1"
+ nickname="serge1cohen"
+ avatar="http://cdn.libravatar.org/avatar/c86bcca74216ed367c91a99ff27259f0"
+ subject="To be sure to understand…"
+ date="2018-01-08T20:49:28Z"
+ content="""
+Hi again,
+
+Thanks for the swift answer. As I am not (yet ?-) an expert of either Haskell or Propellor I'd prefer to be sure before going further.
+Your proposal is to somehow «copy» the machinery of Apt.installed and Apt.reConfigure but using this time «createProcess with {cwd = whatever}». And I should find useful examples/snippets to implement this in the Property.DnsSec.forceZoneSigned sources.
+
+If I manage that I'll definitely propose a contribution on it :-)
+
+By the way, thanks for the complete system. As often elegance comes with a great quality of use !
+
+Serge.
+"""]]

response
diff --git a/doc/forum/Executing_a_property_within_a_explicit_CWD/comment_1_00e636c4ec122361213f0e1062569704._comment b/doc/forum/Executing_a_property_within_a_explicit_CWD/comment_1_00e636c4ec122361213f0e1062569704._comment
new file mode 100644
index 00000000..b898b822
--- /dev/null
+++ b/doc/forum/Executing_a_property_within_a_explicit_CWD/comment_1_00e636c4ec122361213f0e1062569704._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2018-01-08T18:33:06Z"
+ content="""
+Since propellor can run multiple properties at the same time
+(Propellor.Property.Concurrent), setting the CWD while running a property
+is probably not a good idea, as it would affect any other property that's
+currently running. Might be possible to fork and set CWD, 
+but haskell is not great at supporting fork w/o exec.
+
+Instead, the best way to do it is to use `createProcess` with
+`{cwd = whatever}` when your property runs apt and dpkg-reconfigure.
+See Property.DnsSec.forceZoneSigned for an example.
+"""]]

diff --git a/doc/forum/Executing_a_property_within_a_explicit_CWD.mdwn b/doc/forum/Executing_a_property_within_a_explicit_CWD.mdwn
new file mode 100644
index 00000000..e1b6ae7b
--- /dev/null
+++ b/doc/forum/Executing_a_property_within_a_explicit_CWD.mdwn
@@ -0,0 +1,11 @@
+I am trying to create a Property to install (and configure) gitlab through Propellor.
+To perform the installation and configuration I am using Apt.installed and Apt.reConfigure. When ever Propellor has to go though configuration of the package it «fails» (cf. bug report on gitlab package : 
+https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=886657
+
+Awaiting a resolution of the bug itself, a workaround would be to perform the apt-get install or dpkg-reconfigure from a «world-readable» directory (such as /tmp or /etc or ...). Currently these properties are executed with CWD eing the propellor repository.
+
+I have looked for, but not found yet, a way to perform the work of this property within a specific directory.
+
+Thanks in advance for any help or pointers,
+
+Serge.

Added a comment: central git repository git.joeyh.name
diff --git a/doc/forum/secret-project_deliverable/comment_14_4b6959a061c468f3498005fce19019d0._comment b/doc/forum/secret-project_deliverable/comment_14_4b6959a061c468f3498005fce19019d0._comment
new file mode 100644
index 00000000..70e222fc
--- /dev/null
+++ b/doc/forum/secret-project_deliverable/comment_14_4b6959a061c468f3498005fce19019d0._comment
@@ -0,0 +1,82 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="central git repository git.joeyh.name"
+ date="2018-01-07T22:10:40Z"
+ content="""
+I got my copy of `secret-project` by
+
+	git clone https://git.joeyh.name/git/secret-project.git
+
+During build it tries to contact git.joeyh.name
+
+	$ propellor
+	Pull from central git repository ... done
+	Copying from /home/stappers/src/secret-project/.stack-work/install/x86_64-linux-nopie/lts-8.12/8.0.2/bin/propellor-config to /home/stappers/src/secret-project/.built/propellor-config
+	
+	Copied executables to /home/stappers/src/secret-project/.built:
+	- propellor-config
+	
+	Warning: Installation path /home/stappers/src/secret-project/.built
+	         not found on the PATH environment variable.
+	Propellor build ... done
+	[master 7d7bc07] propellor spin
+	Git commit ... done
+	error: Cannot access URL https://git.joeyh.name/git/secret-project.git/, return code 22
+	fatal: git-http-push failed
+	error: failed to push some refs to 'https://git.joeyh.name/git/secret-Push to central git repository ... failed
+	project.git'
+	Stop listening request sent.
+	Pull from central git repository ... done
+	Sending privdata (11 bytes) to paddy.gpm.stappers.nl ... done
+	remote: Counting objects: 1, done.        
+	remote: Total 1 (delta 0), reused 0 (delta 0)        
+	Sending git update to paddy.gpm.stappers.nl ... done
+	From .
+	 * branch            HEAD       -> FETCH_HEAD
+	Pull from central git repository ... done
+	Copying from /usr/local/propellor/.stack-work/install/x86_64-linux-nopie/lts-8.12/8.0.2/bin/propellor-config to /usr/local/propellor/.built/propellor-config
+	
+	Copied executables to /usr/local/propellor/.built:
+	- propellor-config
+	
+	Warning: Installation path /usr/local/propellor/.built not found on the PATH environment variable.
+	Propellor build ... done
+	Pull from central git repository ... done
+	paddy.gpm.stappers.nl has propellor bootstrapped with stack ... ok
+	paddy.gpm.stappers.nl has Operating System (Debian Linux Unstable) X86_64 ... ok
+	debian.local no services started ... ok
+	debian.local has Operating System (Debian Linux Unstable) X86_64 ... ok
+	debian.local sane hostname ... ok
+	debian.local standard sources.list ... ok
+	debian.local apt installed linux-image-amd64 ... ok
+	debian.local grub package installed ... ok
+	debian.local XFCE desktop installed ... ok
+	debian.local apt installed firefox ... ok
+	debian.local en_US.UTF-8 locale selected ... ok
+	fatal: unable to access 'https://git.joeyh.name/git/secret-project.git/': Could not resolve host: git.joeyh.name
+	debian.local has propellor bootstrapped with stack ... ok
+	debian.local Propellor bootstrapped ... failed
+	debian.local user installer in group audio ... ok
+	debian.local user installer in group cdrom ... ok
+	debian.local user installer in group dip ... ok
+	debian.local user installer in group floppy ... ok
+	debian.local user installer in group video ... ok
+	debian.local user installer in group plugdev ... ok
+	debian.local user installer in group netdev ... ok
+	debian.local user installer in group scanner ... ok
+	debian.local user installer in group lpadmin ... ok
+	debian.local has desktop user installer and not has desktop user user ... done
+	debian.local autostart installer UI ... ok
+	debian.local apt installed rsync ... ok
+	debian.local cache cleaned ... ok
+	paddy.gpm.stappers.nl built disk image /srv/installer.vmdk ... failed
+	paddy.gpm.stappers.nl overall ... failed
+	Shared connection to paddy.gpm.stappers.nl closed.
+	propellor: remote propellor failed
+	$ 
+
+How to avoid connecting to git.joeyh.name during build?
+
+"""]]

removed
diff --git a/doc/forum/secret-project_deliverable/comment_14_7296343b6f1d2906127ed138c64f82c6._comment b/doc/forum/secret-project_deliverable/comment_14_7296343b6f1d2906127ed138c64f82c6._comment
deleted file mode 100644
index 75cb4292..00000000
--- a/doc/forum/secret-project_deliverable/comment_14_7296343b6f1d2906127ed138c64f82c6._comment
+++ /dev/null
@@ -1,77 +0,0 @@
-[[!comment format=mdwn
- username="stappers@eb96885816da287c29f6f699999434d532149234"
- nickname="stappers"
- avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
- subject="central git repository git.joeyh.name"
- date="2018-01-07T22:05:10Z"
- content="""
-I got my copy of `secret-project` by
-
-
-	$ propellor
-	Pull from central git repository ... done
-	Copying from /home/stappers/src/secret-project/.stack-work/install/x86_64-linux-nopie/lts-8.12/8.0.2/bin/propellor-config to /home/stappers/src/secret-project/.built/propellor-config
-	
-	Copied executables to /home/stappers/src/secret-project/.built:
-	- propellor-config
-	
-	Warning: Installation path /home/stappers/src/secret-project/.built
-	         not found on the PATH environment variable.
-	Propellor build ... done
-	[master 7d7bc07] propellor spin
-	Git commit ... done
-	error: Cannot access URL https://git.joeyh.name/git/secret-project.git/, return code 22
-	fatal: git-http-push failed
-	error: failed to push some refs to 'https://git.joeyh.name/git/secret-Push to central git repository ... failed
-	project.git'
-	Stop listening request sent.
-	Pull from central git repository ... done
-	Sending privdata (11 bytes) to paddy.gpm.stappers.nl ... done
-	remote: Counting objects: 1, done.        
-	remote: Total 1 (delta 0), reused 0 (delta 0)        
-	Sending git update to paddy.gpm.stappers.nl ... done
-	From .
-	 * branch            HEAD       -> FETCH_HEAD
-	Pull from central git repository ... done
-	Copying from /usr/local/propellor/.stack-work/install/x86_64-linux-nopie/lts-8.12/8.0.2/bin/propellor-config to /usr/local/propellor/.built/propellor-config
-	
-	Copied executables to /usr/local/propellor/.built:
-	- propellor-config
-	
-	Warning: Installation path /usr/local/propellor/.built not found on the PATH environment variable.
-	Propellor build ... done
-	Pull from central git repository ... done
-	paddy.gpm.stappers.nl has propellor bootstrapped with stack ... ok
-	paddy.gpm.stappers.nl has Operating System (Debian Linux Unstable) X86_64 ... ok
-	debian.local no services started ... ok
-	debian.local has Operating System (Debian Linux Unstable) X86_64 ... ok
-	debian.local sane hostname ... ok
-	debian.local standard sources.list ... ok
-	debian.local apt installed linux-image-amd64 ... ok
-	debian.local grub package installed ... ok
-	debian.local XFCE desktop installed ... ok
-	debian.local apt installed firefox ... ok
-	debian.local en_US.UTF-8 locale selected ... ok
-	fatal: unable to access 'https://git.joeyh.name/git/secret-project.git/': Could not resolve host: git.joeyh.name
-	debian.local has propellor bootstrapped with stack ... ok
-	debian.local Propellor bootstrapped ... failed
-	debian.local user installer in group audio ... ok
-	debian.local user installer in group cdrom ... ok
-	debian.local user installer in group dip ... ok
-	debian.local user installer in group floppy ... ok
-	debian.local user installer in group video ... ok
-	debian.local user installer in group plugdev ... ok
-	debian.local user installer in group netdev ... ok
-	debian.local user installer in group scanner ... ok
-	debian.local user installer in group lpadmin ... ok
-	debian.local has desktop user installer and not has desktop user user ... done
-	debian.local autostart installer UI ... ok
-	debian.local apt installed rsync ... ok
-	debian.local cache cleaned ... ok
-	paddy.gpm.stappers.nl built disk image /srv/installer.vmdk ... failed
-	paddy.gpm.stappers.nl overall ... failed
-	Shared connection to paddy.gpm.stappers.nl closed.
-	propellor: remote propellor failed
-	$ 
-
-"""]]

Added a comment: central git repository git.joeyh.name
diff --git a/doc/forum/secret-project_deliverable/comment_14_7296343b6f1d2906127ed138c64f82c6._comment b/doc/forum/secret-project_deliverable/comment_14_7296343b6f1d2906127ed138c64f82c6._comment
new file mode 100644
index 00000000..75cb4292
--- /dev/null
+++ b/doc/forum/secret-project_deliverable/comment_14_7296343b6f1d2906127ed138c64f82c6._comment
@@ -0,0 +1,77 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="central git repository git.joeyh.name"
+ date="2018-01-07T22:05:10Z"
+ content="""
+I got my copy of `secret-project` by
+
+
+	$ propellor
+	Pull from central git repository ... done
+	Copying from /home/stappers/src/secret-project/.stack-work/install/x86_64-linux-nopie/lts-8.12/8.0.2/bin/propellor-config to /home/stappers/src/secret-project/.built/propellor-config
+	
+	Copied executables to /home/stappers/src/secret-project/.built:
+	- propellor-config
+	
+	Warning: Installation path /home/stappers/src/secret-project/.built
+	         not found on the PATH environment variable.
+	Propellor build ... done
+	[master 7d7bc07] propellor spin
+	Git commit ... done
+	error: Cannot access URL https://git.joeyh.name/git/secret-project.git/, return code 22
+	fatal: git-http-push failed
+	error: failed to push some refs to 'https://git.joeyh.name/git/secret-Push to central git repository ... failed
+	project.git'
+	Stop listening request sent.
+	Pull from central git repository ... done
+	Sending privdata (11 bytes) to paddy.gpm.stappers.nl ... done
+	remote: Counting objects: 1, done.        
+	remote: Total 1 (delta 0), reused 0 (delta 0)        
+	Sending git update to paddy.gpm.stappers.nl ... done
+	From .
+	 * branch            HEAD       -> FETCH_HEAD
+	Pull from central git repository ... done
+	Copying from /usr/local/propellor/.stack-work/install/x86_64-linux-nopie/lts-8.12/8.0.2/bin/propellor-config to /usr/local/propellor/.built/propellor-config
+	
+	Copied executables to /usr/local/propellor/.built:
+	- propellor-config
+	
+	Warning: Installation path /usr/local/propellor/.built not found on the PATH environment variable.
+	Propellor build ... done
+	Pull from central git repository ... done
+	paddy.gpm.stappers.nl has propellor bootstrapped with stack ... ok
+	paddy.gpm.stappers.nl has Operating System (Debian Linux Unstable) X86_64 ... ok
+	debian.local no services started ... ok
+	debian.local has Operating System (Debian Linux Unstable) X86_64 ... ok
+	debian.local sane hostname ... ok
+	debian.local standard sources.list ... ok
+	debian.local apt installed linux-image-amd64 ... ok
+	debian.local grub package installed ... ok
+	debian.local XFCE desktop installed ... ok
+	debian.local apt installed firefox ... ok
+	debian.local en_US.UTF-8 locale selected ... ok
+	fatal: unable to access 'https://git.joeyh.name/git/secret-project.git/': Could not resolve host: git.joeyh.name
+	debian.local has propellor bootstrapped with stack ... ok
+	debian.local Propellor bootstrapped ... failed
+	debian.local user installer in group audio ... ok
+	debian.local user installer in group cdrom ... ok
+	debian.local user installer in group dip ... ok
+	debian.local user installer in group floppy ... ok
+	debian.local user installer in group video ... ok
+	debian.local user installer in group plugdev ... ok
+	debian.local user installer in group netdev ... ok
+	debian.local user installer in group scanner ... ok
+	debian.local user installer in group lpadmin ... ok
+	debian.local has desktop user installer and not has desktop user user ... done
+	debian.local autostart installer UI ... ok
+	debian.local apt installed rsync ... ok
+	debian.local cache cleaned ... ok
+	paddy.gpm.stappers.nl built disk image /srv/installer.vmdk ... failed
+	paddy.gpm.stappers.nl overall ... failed
+	Shared connection to paddy.gpm.stappers.nl closed.
+	propellor: remote propellor failed
+	$ 
+
+"""]]

PTUUID
diff --git a/doc/todo/removable_drive_partitioning_and_install.mdwn b/doc/todo/removable_drive_partitioning_and_install.mdwn
index ac270109..e88673c3 100644
--- a/doc/todo/removable_drive_partitioning_and_install.mdwn
+++ b/doc/todo/removable_drive_partitioning_and_install.mdwn
@@ -25,12 +25,29 @@ Open design questions:
 
   Question: When using microsd card adapter, does the serial number pass
   through so different microsds can be distinguished?
+
   > Checked this, and two microsd card adapters from different
   > manufacturers with different microsd cards have the same by-id.
   > Those must have no serial number..
   > 
   > Also, a USB SD/microSD reader had the same by-id for multiple cards.
 
+  > > For disks with a MBR, there's a disk identifier / volume id, 
+  > > which should uniquely identify that disk,
+  > > as long as propellor does not overwrite the MBR when imaging it.
+  > > And, GPT has a similar disk GUID.
+  > >
+  > > /dev/disk/by-partuuid exposes this. Some documentation suggests
+  > > it's GPT-only, but my laptop is not GPT and its MBR disk identifier
+  > > shows up there. Oddly, that points to /dev/sda1 and not /dev/sda.
+  > >
+  > > blkid can also display it, as the PTUUID, which works for
+  > > both GPT and MBT.
+  > > --[[Joey]]
+
+	root@darkstar:/home/joey>blkid /dev/sda
+	/dev/sda: PTUUID="d0497bc6" PTTYPE="dos"
+
 * Should an already imaged drive be updated incrementally or re-imaged?
   Seems both cases would be useful, the former especially for incrementally
   configuring it, the latter to bring it up from a clean state.

update
diff --git a/doc/todo/removable_drive_partitioning_and_install.mdwn b/doc/todo/removable_drive_partitioning_and_install.mdwn
index 891c3b92..ac270109 100644
--- a/doc/todo/removable_drive_partitioning_and_install.mdwn
+++ b/doc/todo/removable_drive_partitioning_and_install.mdwn
@@ -28,6 +28,8 @@ Open design questions:
   > Checked this, and two microsd card adapters from different
   > manufacturers with different microsd cards have the same by-id.
   > Those must have no serial number..
+  > 
+  > Also, a USB SD/microSD reader had the same by-id for multiple cards.
 
 * Should an already imaged drive be updated incrementally or re-imaged?
   Seems both cases would be useful, the former especially for incrementally

changes to allow GPT BIOS boot partitions
* Parted: Allow partitions to have no filesystem, for eg, GPT BIOS boot
partitions. (API change)
* Added rawPartition to PartSpec, for specifying partitions with no
filesystem.
* Added BiosGrubFlag to PartFlag.
Note that man parted does not list the "bios_boot" flag, but I found it in
its html documentation. Other flags may also be missing.
This commit was sponsored by Boyd Stephen Smith Jr. on Patreon.
diff --git a/debian/changelog b/debian/changelog
index 8923b94a..4545bcd1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,13 @@
-propellor (5.2.1) UNRELEASED; urgency=medium
+propellor (5.3.0) UNRELEASED; urgency=medium
 
   * Avoid bogus warning about new upstream version when /usr/bin/propellor
     is run on a Debian system, but ~/.propellor was not cloned from the
     Debian git bundle.
+  * Parted: Allow partitions to have no filesystem, for eg, GPT BIOS boot
+    partitions. (API change)
+  * Added rawPartition to PartSpec, for specifying partitions with no
+    filesystem.
+  * Added BiosGrubFlag to PartFlag.
 
  -- Joey Hess <id@joeyh.name>  Tue, 02 Jan 2018 13:06:45 -0400
 
diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_18_adea3a8a65cf954a5244bbb47a1636e4._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_18_adea3a8a65cf954a5244bbb47a1636e4._comment
new file mode 100644
index 00000000..8a9a380e
--- /dev/null
+++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_18_adea3a8a65cf954a5244bbb47a1636e4._comment
@@ -0,0 +1,26 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 18"""
+ date="2018-01-06T17:51:05Z"
+ content="""
+I don't know much about GPT boot stuff. I found mention of a BIOS boot
+partition for GPT here:
+
+<https://help.ubuntu.com/community/DiskSpace>
+
+So, 1 mb partition with no filesystem and a "bios_grub" flag.
+
+Propellor's partitioning DSL will need to be extended in order to
+support that. Currently, `Partition` has a `Fs` that is one of the common
+filesystems or swap. Now we need no filesystem, so either add a NoFs to Fs,
+or change it to use `Maybe Fs`. I chose the latter, because with NoFs,
+Partition.formatted would be a no-op, which would be kinda surprising.
+
+I've made a commit adding all the stuff you should need, but I have not
+tested making a BIOS boot partition with it. Should look
+something like this:
+
+	& hasPartition (rawPartition (MegaBytes 1) `setFlag` BiosGrubFlag)
+
+If you get it working, it would be good to add an example to propellor's docs.
+"""]]
diff --git a/src/Propellor/Property/DiskImage.hs b/src/Propellor/Property/DiskImage.hs
index 24459476..289de151 100644
--- a/src/Propellor/Property/DiskImage.hs
+++ b/src/Propellor/Property/DiskImage.hs
@@ -420,7 +420,7 @@ imageFinalized final img mnts mntopts devs (PartTable _ _ parts) =
 	orderedmntsdevs = sortBy (compare `on` fst) $ zip mnts (zip mntopts devs)
 
 	swaps = map (SwapPartition . partitionLoopDev . snd) $
-		filter ((== LinuxSwap) . partFs . fst) $
+		filter ((== Just LinuxSwap) . partFs . fst) $
 			zip parts devs
 
 	mountall top = forM_ orderedmntsdevs $ \(mp, (mopts, loopdev)) -> case mp of
diff --git a/src/Propellor/Property/DiskImage/PartSpec.hs b/src/Propellor/Property/DiskImage/PartSpec.hs
index 942cfa3e..b78e4280 100644
--- a/src/Propellor/Property/DiskImage/PartSpec.hs
+++ b/src/Propellor/Property/DiskImage/PartSpec.hs
@@ -9,6 +9,7 @@ module Propellor.Property.DiskImage.PartSpec (
 	partition,
 	-- * PartSpec combinators
 	swapPartition,
+	rawPartition,
 	mountedAt,
 	addFreeSpace,
 	setSize,
@@ -48,11 +49,15 @@ import Data.Ord
 -- The partition is not mounted anywhere by default; use the combinators
 -- below to configure it.
 partition :: Monoid t => Fs -> PartSpec t
-partition fs = (Nothing, mempty, mkPartition fs, mempty)
+partition fs = (Nothing, mempty, mkPartition (Just fs), mempty)
 
 -- | Specifies a swap partition of a given size.
 swapPartition :: Monoid t => PartSize -> PartSpec t
-swapPartition sz = (Nothing, mempty, const (mkPartition LinuxSwap sz), mempty)
+swapPartition sz = (Nothing, mempty, const (mkPartition (Just LinuxSwap) sz), mempty)
+
+-- | Specifies a partition without any filesystem, of a given size.
+rawPartition :: Monoid t => PartSize -> PartSpec t
+rawPartition sz = (Nothing, mempty, const (mkPartition Nothing sz), mempty)
 
 -- | Specifies where to mount a partition.
 mountedAt :: PartSpec t -> MountPoint -> PartSpec t
diff --git a/src/Propellor/Property/Installer/Target.hs b/src/Propellor/Property/Installer/Target.hs
index 62ec4082..80e660ad 100644
--- a/src/Propellor/Property/Installer/Target.hs
+++ b/src/Propellor/Property/Installer/Target.hs
@@ -246,10 +246,10 @@ fstabLists userinput (TargetPartTable _ partspecs) = setup <!> doNothing
 	
 	partitions = map (\(mp, _, mkpart, _) -> (mp, mkpart mempty)) partspecs
 	mnts = mapMaybe fst $
-		filter (\(_, p) -> partFs p /= LinuxSwap) partitions
+		filter (\(_, p) -> partFs p /= Just LinuxSwap && partFs p /= Nothing) partitions
 	swaps targetdev = 
 		map (Fstab.SwapPartition . diskPartition targetdev . snd) $
-			filter (\((_, p), _) -> partFs p == LinuxSwap)
+			filter (\((_, p), _) -> partFs p == Just LinuxSwap)
 				(zip partitions partNums)
 
 -- | Make the target bootable using whatever bootloader is installed on it.
diff --git a/src/Propellor/Property/Parted.hs b/src/Propellor/Property/Parted.hs
index 97cf815e..81b84972 100644
--- a/src/Propellor/Property/Parted.hs
+++ b/src/Propellor/Property/Parted.hs
@@ -62,8 +62,10 @@ partitioned eep disk parttable@(PartTable _ _ parts) = property' desc $ \w -> do
   where
 	desc = disk ++ " partitioned"
 	formatl devs = combineProperties desc (toProps $ map format (zip parts devs))
-	format (p, dev) = Partition.formatted' (partMkFsOpts p)
-		Partition.YesReallyFormatPartition (partFs p) dev
+	format (p, dev) = case partFs p of
+		Just fs -> Partition.formatted' (partMkFsOpts p)
+			Partition.YesReallyFormatPartition fs dev
+		Nothing -> doNothing
 
 -- | Gets the total size of the disk specified by the partition table.
 partTableSize :: PartTable -> ByteSize
@@ -81,12 +83,12 @@ calcPartedParamsSize (PartTable tabletype alignment parts) =
 		, pval f
 		, pval b
 		]
-	mkpart partnum startpos endpos p =
-		[ "mkpart"
-		, pval (partType p)
-		, pval (partFs p)
-		, partposexact startpos
-		, partposfuzzy endpos
+	mkpart partnum startpos endpos p = catMaybes
+		[ Just "mkpart"
+		, Just $ pval (partType p)
+		, fmap pval (partFs p)
+		, Just $ partposexact startpos
+		, Just $ partposfuzzy endpos
 		] ++ case partName p of
 			Just n -> ["name", show partnum, n]
 			Nothing -> []
diff --git a/src/Propellor/Property/Parted/Types.hs b/src/Propellor/Property/Parted/Types.hs
index e5c62739..cfd8760d 100644
--- a/src/Propellor/Property/Parted/Types.hs
+++ b/src/Propellor/Property/Parted/Types.hs
@@ -31,7 +31,7 @@ instance Monoid PartTable where
 data Partition = Partition
 	{ partType :: PartType
 	, partSize :: PartSize
-	, partFs :: Partition.Fs
+	, partFs :: Maybe Partition.Fs
 	, partMkFsOpts :: Partition.MkfsOpts
 	, partFlags :: [(PartFlag, Bool)] -- ^ flags can be set or unset (parted may set some flags by default)
 	, partName :: Maybe String -- ^ optional name for partition (only works for GPT, PC98, MAC)
@@ -39,7 +39,7 @@ data Partition = Partition
 	deriving (Show)
 
 -- | Makes a Partition with defaults for non-important values.
-mkPartition :: Partition.Fs -> PartSize -> Partition
+mkPartition :: Maybe Partition.Fs -> PartSize -> Partition
 mkPartition fs sz = Partition
 	{ partType = Primary
 	, partSize = sz
@@ -105,7 +105,7 @@ fromAlignment :: Alignment -> ByteSize
 fromAlignment (Alignment n) = n
 
 -- | Flags that can be set on a partition.
-data PartFlag = BootFlag | RootFlag | SwapFlag | HiddenFlag | RaidFlag | LvmFlag | LbaFlag | LegacyBootFlag | IrstFlag | EspFlag | PaloFlag
+data PartFlag = BootFlag | RootFlag | SwapFlag | HiddenFlag | RaidFlag | LvmFlag | LbaFlag | LegacyBootFlag | IrstFlag | EspFlag | PaloFlag | BiosGrubFlag
 	deriving (Show)
 
 instance PartedVal PartFlag where
@@ -120,6 +120,7 @@ instance PartedVal PartFlag where
 	pval IrstFlag = "irst"
 	pval EspFlag = "esp"
 	pval PaloFlag = "palo"
+	pval BiosGrubFlag = "bios_grub"
 
 instance PartedVal Bool where
 	pval True = "on"

response
diff --git a/doc/todo/etckeeper/comment_5_af3b29e3e066c05e4b5a0004f0e57926._comment b/doc/todo/etckeeper/comment_5_af3b29e3e066c05e4b5a0004f0e57926._comment
new file mode 100644
index 00000000..11e59e2c
--- /dev/null
+++ b/doc/todo/etckeeper/comment_5_af3b29e3e066c05e4b5a0004f0e57926._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 5"""
+ date="2018-01-06T17:38:34Z"
+ content="""
+I avoid those warnings with properties that clone dotfiles repos containing
+.gitconfig for root and users who can sudo.
+
+It would be fine to have a property to configure them in
+/etckeeper/.git/config, if you wanted to write it.
+I think this would do it:
+
+	Git.repoConfigured "/etc/" ("user.name", "whatever")
+	Git.repoConfigured "/etc/" ("user.email", "whatever@whatever")
+
+Those would only be used when the user running etckeeper has not configured
+it in their own ~/.gitconfig
+"""]]

Added a comment
diff --git a/doc/todo/etckeeper/comment_4_f4f9f3e3d7c81e631aaec45fdd17dfe8._comment b/doc/todo/etckeeper/comment_4_f4f9f3e3d7c81e631aaec45fdd17dfe8._comment
new file mode 100644
index 00000000..e6755e2c
--- /dev/null
+++ b/doc/todo/etckeeper/comment_4_f4f9f3e3d7c81e631aaec45fdd17dfe8._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="gueux"
+ avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8"
+ subject="comment 4"
+ date="2018-01-06T09:24:04Z"
+ content="""
+I think I was thinking at least about configuring git to prevent
+
+    Your name and email address were configured automatically based
+    on your username and hostname. Please check that they are accurate.
+    You can suppress this message by setting them explicitly. Run the
+    following command and follow the instructions in your editor to edit
+    your configuration file:
+        git config --global --edit
+    After doing this, you may fix the identity used for this commit with:
+        git commit --amend --reset-author
+
+messages. I can live with these, though. So I guess you're right, `Apt.installed [\"etckeeper\"]` is enough.
+"""]]

Added a comment
diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_17_0c1349784ba28b6fbbd833e76d5075b3._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_17_0c1349784ba28b6fbbd833e76d5075b3._comment
new file mode 100644
index 00000000..994d432c
--- /dev/null
+++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_17_0c1349784ba28b6fbbd833e76d5075b3._comment
@@ -0,0 +1,24 @@
+[[!comment format=mdwn
+ username="gueux"
+ avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8"
+ subject="comment 17"
+ date="2018-01-05T17:57:40Z"
+ content="""
+As the config with Grub.EFI64 didn't boot, I'd like to be sure that Grub.MSDOS does not boot either. But GPT tables seem to need a BIOS Boot partition:
+
+    creating /srv/router.img of size 1.67 gigabytes
+    mkfs.fat 4.1 (2017-01-24)
+    loop deleted : /dev/loop0
+         26,473,509 100%  206.69MB/s    0:00:00 (xfr#5, to-chk=0/7)
+        772,611,350  99%   60.26MB/s    0:00:12 (xfr#26272, to-chk=0/33603)   
+    update-initramfs: Generating /boot/initrd.img-4.9.0-5-amd64
+    Generating grub configuration file ...
+    Found linux image: /boot/vmlinuz-4.9.0-5-amd64
+    Found initrd image: /boot/initrd.img-4.9.0-5-amd64
+    done
+    Installing for i386-pc platform.
+    grub-install: warning: this GPT partition label contains no BIOS Boot Partition; embedding won't be possible.
+    grub-install: warning: Embedding is not possible.  GRUB can only be installed in this setup by using blocklists.  However, blocklists are UNRELIABLE and their use is discouraged..
+    grub-install: error: will not proceed with blocklists.
+
+"""]]

Added a comment
diff --git a/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_8_28c9fe9c8acef04998c885161748ad49._comment b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_8_28c9fe9c8acef04998c885161748ad49._comment
new file mode 100644
index 00000000..0317b488
--- /dev/null
+++ b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_8_28c9fe9c8acef04998c885161748ad49._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ avatar="http://cdn.libravatar.org/avatar/9c3f08f80e67733fd506c353239569eb"
+ subject="comment 8"
+ date="2018-01-05T08:49:56Z"
+ content="""
+Sweet!  Thanks again!
+"""]]

update
diff --git a/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_7_f54ff51d2e413f0bbd534470b4b3b5a6._comment b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_7_f54ff51d2e413f0bbd534470b4b3b5a6._comment
new file mode 100644
index 00000000..5423db28
--- /dev/null
+++ b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_7_f54ff51d2e413f0bbd534470b4b3b5a6._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 7"""
+ date="2018-01-04T18:49:14Z"
+ content="""
+@spwhitton, ah but in that case you have a remote named "upstream", so
+it can assume you don't want it messing with upstream/master. Done!
+"""]]

Added a comment
diff --git a/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_6_ee440c1ceab7875ad6375b38f4580f08._comment b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_6_ee440c1ceab7875ad6375b38f4580f08._comment
new file mode 100644
index 00000000..d867906e
--- /dev/null
+++ b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_6_ee440c1ceab7875ad6375b38f4580f08._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ avatar="http://cdn.libravatar.org/avatar/9c3f08f80e67733fd506c353239569eb"
+ subject="comment 6"
+ date="2018-01-03T14:46:48Z"
+ content="""
+Thanks for this fix!  However, in my case I am going to have to do `git remote rename upstream joey` ;)
+"""]]

comment
diff --git a/doc/forum/secret-project_deliverable/comment_13_bdb28cfa4990d60f6767fd857a7398d5._comment b/doc/forum/secret-project_deliverable/comment_13_bdb28cfa4990d60f6767fd857a7398d5._comment
new file mode 100644
index 00000000..e7a110bc
--- /dev/null
+++ b/doc/forum/secret-project_deliverable/comment_13_bdb28cfa4990d60f6767fd857a7398d5._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 13"""
+ date="2018-01-02T21:21:49Z"
+ content="""
+Yes, I also found it kind of annoying to need to move /usr/local/propellor
+out of the way when I was working on secret-project. This is why I'd like
+it to be usable without propellor --spin so that directory would not be
+used, but until the bug with that can be fixed, you can't work on
+secret-project with an unrelated other propellor config at the same time.
+"""]]

Added a comment: buid should be build
diff --git a/doc/forum/secret-project_deliverable/comment_12_edebbe9056d9dad486c24f3ce226366c._comment b/doc/forum/secret-project_deliverable/comment_12_edebbe9056d9dad486c24f3ce226366c._comment
new file mode 100644
index 00000000..43f2dff5
--- /dev/null
+++ b/doc/forum/secret-project_deliverable/comment_12_edebbe9056d9dad486c24f3ce226366c._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="buid should be  build"
+ date="2018-01-02T20:46:53Z"
+ content="""
+The
+
+    special buid with stack
+
+in previous comment should have been
+
+    special build with stack
+"""]]

Added a comment: two git repos and one /usr/local/propellor
diff --git a/doc/forum/secret-project_deliverable/comment_11_9cbcee2364a499206d5329c5a88a1211._comment b/doc/forum/secret-project_deliverable/comment_11_9cbcee2364a499206d5329c5a88a1211._comment
new file mode 100644
index 00000000..be3346e3
--- /dev/null
+++ b/doc/forum/secret-project_deliverable/comment_11_9cbcee2364a499206d5329c5a88a1211._comment
@@ -0,0 +1,73 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="two git repos and one /usr/local/propellor"
+ date="2018-01-02T20:43:54Z"
+ content="""
+Perhaps I don't understand the secret-project and its special buid with stack.
+
+
+I have a git repo in `~/.propellor` and I have a git repo in `~/src/secret-project`.
+
+
+In the ~/secret-project directory
+
+	$ propellor
+	Pull from central git repository ... done
+	Copying from /home/stappers/src/secret-project/.stack-work/install/x86_64-linux-nopie/lts-8.12/8.0.2/bin/propellor-config to /home/stappers/src/secret-project/.built/propellor-config
+	
+	Copied executables to /home/stappers/src/secret-project/.built:
+	- propellor-config
+	
+	Warning: Installation path /home/stappers/src/secret-project/.built
+	         not found on the PATH environment variable.
+	Propellor build ... done
+	[master fb46460] propellor spin
+	Git commit ... done
+	error: Cannot access URL https://git.joeyh.name/git/secret-project.git/, return code 22
+	fatal: git-http-push failed
+	error: failed to push some refs to 'https://git.joeyh.name/git/secret-project.git'
+	Push to central git repository ... failed
+	Pull from central git repository ... done
+	** warning: git branch origin/master is not signed with a trusted gpg key; refusing to deploy it! (Running with previous configuration instead.)
+	Sending privdata (11 bytes) to paddy.gpm.stappers.nl ... done
+	remote: Counting objects: 6, done.        
+	remote: Compressing objects: 100% (6/6), done.        
+	remote: Total 6 (delta 4), reused 0 (delta 0)        
+	Sending git update to paddy.gpm.stappers.nl ... done
+	From .
+	 * branch            HEAD       -> FETCH_HEAD
+	fatal: refusing to merge unrelated histories
+	** error: git merge from client failed
+	propellor: Cannot continue!
+	CallStack (from HasCallStack):
+	  error, called at src/Propellor/Message.hs:143:9 in main:Propellor.Message
+	propellor: user error (ssh [\"-o\",\"ControlPath=/home/stappers/.ssh/propellor/paddy.gpm.stappers.nl.sock\",
+		\"-o\",\"ControlMaster=auto\",
+		\"-o\",\"ControlPersist=yes\",
+		\"root@paddy.gpm.stappers.nl\",
+		\"sh -c 'if [ ! -d /usr/local/propellor/.git ] ;
+			 then (if ! git --version >/dev/null 2>&1;
+			 then apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -qq --no-install-recommends --no-upgrade -y install git;
+			 fi && echo STATUSNeedGitClone) || echo STATUSNeedPrecompiled ;
+			 else cd /usr/local/propellor && if ! stack build --dry-run >/dev/null 2>&1;
+			 then ( apt-get update ;
+			 DEBIAN_FRONTEND=noninteractive apt-get -qq --no-upgrade --no-install-recommends -y install gnupg ;
+			 DEBIAN_FRONTEND=noninteractive apt-get -qq --no-upgrade --no-install-recommends -y install haskell-stack ;
+			 stack setup ;
+			 stack build --only-dependencies :propellor-config) || true;
+			 fi&& if ! test -x ./propellor;
+			 then stack build :propellor-config && ln -sf $(stack path --dist-dir)/build/propellor-config/propellor-config propellor;
+			 fi;
+			if test -x ./propellor && ! ./propellor --check;
+			 then stack clean && stack build :propellor-config && ln -sf $(stack path --dist-dir)/build/propellor-config/propellor-config propellor;
+			 fi && ./propellor --boot paddy.gpm.stappers.nl ;
+			 fi'\"] exited 1)
+	stappers@paddy:~/src/secret-project
+	$
+
+
+The `/usr/local/propellor/` has already a  .git directory from  ~/.propellor ...
+
+"""]]

Added a comment: unstuck
diff --git a/doc/forum/secret-project_deliverable/comment_10_df12578135263d7e0a42415532cb04e3._comment b/doc/forum/secret-project_deliverable/comment_10_df12578135263d7e0a42415532cb04e3._comment
new file mode 100644
index 00000000..a3d93892
--- /dev/null
+++ b/doc/forum/secret-project_deliverable/comment_10_df12578135263d7e0a42415532cb04e3._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="unstuck"
+ date="2018-01-02T20:20:24Z"
+ content="""
+After removing the `.stack-work` directory I got beyond the Installer.Types error.
+
+
+"""]]

comment
diff --git a/doc/forum/secret-project_deliverable/comment_9_4a6e1a53f5bf5b72aaafba3a7dd45346._comment b/doc/forum/secret-project_deliverable/comment_9_4a6e1a53f5bf5b72aaafba3a7dd45346._comment
new file mode 100644
index 00000000..c9f45ac3
--- /dev/null
+++ b/doc/forum/secret-project_deliverable/comment_9_4a6e1a53f5bf5b72aaafba3a7dd45346._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 9"""
+ date="2018-01-02T17:14:23Z"
+ content="""
+Since propellor 5.2.0 certianly *does* include the Propellor.Property.Installer.Types
+module, I guess you either have a somehow lost file on your local system
+there, or perhaps you installed a unreleased version of propellor 5.2.0
+from git before that file was added to it.
+"""]]

avoid bogus warning
Avoid bogus warning about new upstream version when /usr/bin/propellor is
run on a Debian system, but ~/.propellor was not cloned from the Debian git
bundle.
diff --git a/debian/changelog b/debian/changelog
index f4204e06..8923b94a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+propellor (5.2.1) UNRELEASED; urgency=medium
+
+  * Avoid bogus warning about new upstream version when /usr/bin/propellor
+    is run on a Debian system, but ~/.propellor was not cloned from the
+    Debian git bundle.
+
+ -- Joey Hess <id@joeyh.name>  Tue, 02 Jan 2018 13:06:45 -0400
+
 propellor (5.2.0) unstable; urgency=medium
 
   [ Joey Hess ]
diff --git a/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_5_af7919be09eb454b2dca235ede03008f._comment b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_5_af7919be09eb454b2dca235ede03008f._comment
new file mode 100644
index 00000000..157e7803
--- /dev/null
+++ b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_5_af7919be09eb454b2dca235ede03008f._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 5"""
+ date="2018-01-02T17:08:07Z"
+ content="""
+@spwhitton ah, I had not noticed that case. I found a way to avoid the
+unncessary warning in that case; since there's no upstream/master ref when
+~/.propellor has not been cloned from the debian git bundle, it can detect
+that and avoid warning. Done so.
+"""]]
diff --git a/src/Propellor/DotDir.hs b/src/Propellor/DotDir.hs
index e9253b87..200625e8 100644
--- a/src/Propellor/DotDir.hs
+++ b/src/Propellor/DotDir.hs
@@ -358,7 +358,7 @@ checkRepoUpToDate = whenM (gitbundleavail <&&> dotpropellorpopulated) $ do
 		withQuietOutput createProcessSuccess $
 			proc "git" ["log", headrev]
 	if (headknown == Nothing)
-		then setupUpstreamMaster headrev
+		then updateUpstreamMaster headrev
 		else do
 			theirhead <- getCurrentGitSha1 =<< getCurrentBranchRef
 			when (theirhead /= headrev) $ do
@@ -372,26 +372,29 @@ checkRepoUpToDate = whenM (gitbundleavail <&&> dotpropellorpopulated) $ do
 		d <- dotPropellor
 		doesFileExist (d </> "propellor.cabal")
 
--- Makes upstream/master in dotPropellor be a usefully mergeable branch.
+-- Updates upstream/master in dotPropellor so merging from it will update
+-- to the latest distrepo.
 --
--- We cannot just use origin/master, because in the case of a distrepo,
--- it only contains 1 commit. So, trying to merge with it will result
--- in lots of merge conflicts, since git cannot find a common parent
--- commit.
+-- We cannot just fetch the distrepo because the distrepo contains only 
+-- 1 commit. So, trying to merge with it will result in lots of merge
+-- conflicts, since git cannot find a common parent commit.
 --
--- Instead, the upstream/master branch is created by taking the
+-- Instead, the upstream/master branch is updated by taking the
 -- upstream/master branch (which must be an old version of propellor,
 -- as distributed), and diffing from it to the current origin/master,
 -- and committing the result. This is done in a temporary clone of the
 -- repository, giving it a new master branch. That new branch is fetched
 -- into the user's repository, as if fetching from a upstream remote,
 -- yielding a new upstream/master branch.
-setupUpstreamMaster :: String -> IO ()
-setupUpstreamMaster newref = do
+--
+-- If there's no upstream/master, the user is not using the distrepo,
+-- so does nothing.
+updateUpstreamMaster :: String -> IO ()
+updateUpstreamMaster newref = do
 	changeWorkingDirectory =<< dotPropellor
 	go =<< catchMaybeIO getoldrev
   where
-	go Nothing = warnoutofdate False
+	go Nothing = return ()
 	go (Just oldref) = do
 		let tmprepo = ".git/propellordisttmp"
 		let cleantmprepo = void $ catchMaybeIO $ removeDirectoryRecursive tmprepo

fixed
diff --git a/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_4_93c97f8767a7ae3b9795aea051b0e77e._comment b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_4_93c97f8767a7ae3b9795aea051b0e77e._comment
new file mode 100644
index 00000000..73dd3fec
--- /dev/null
+++ b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_4_93c97f8767a7ae3b9795aea051b0e77e._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2018-01-02T16:36:32Z"
+ content="""
+Ah I see, it was mixing concurrent output with unbuffered output, which in
+this case caused the related messages to appear separated. Fixed that.
+"""]]

Added a comment: Progress
diff --git a/doc/forum/to_teach_propellor_about_other_ARM_boards/comment_1_70f9d9442616144d6f862c81516e721b._comment b/doc/forum/to_teach_propellor_about_other_ARM_boards/comment_1_70f9d9442616144d6f862c81516e721b._comment
new file mode 100644
index 00000000..e1a7ee2c
--- /dev/null
+++ b/doc/forum/to_teach_propellor_about_other_ARM_boards/comment_1_70f9d9442616144d6f862c81516e721b._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="Progress"
+ date="2018-01-02T14:19:53Z"
+ content="""
+Hi,
+
+FYI  I'm making progress in teaching propellor about other ARM boards.
+
+What I have done is deleting `~/.propellor/` and creating a new one.
+
+The new one is a full .propellor repository.
+
+
+See also <http://propellor.branchable.com/components/>
+"""]]

diff --git a/doc/forum/to_teach_propellor_about_other_ARM_boards.mdwn b/doc/forum/to_teach_propellor_about_other_ARM_boards.mdwn
new file mode 100644
index 00000000..aef3c59f
--- /dev/null
+++ b/doc/forum/to_teach_propellor_about_other_ARM_boards.mdwn
@@ -0,0 +1,33 @@
+Inspirated by <http://joeyh.name/blog/entry/custom_ARM_disk_image_generation_with_propellor/>
+I started to teach propellor about other ARM boards.
+(After having a clean build for a supported ARM board)
+
+
+Using two directories, a `~/.propellor` with my hosts and `src/propellor` with propellor source code.
+
+In the code directory I modified `src/Propellor/Property/Machine.hs`,
+compiled with `debuild -uc -us` and installed with `dpkg -i ../propellor*.deb`.
+
+Then using my hosts directory to get a WTF moment
+
+	$ propellor --spin paddy.gpm.stappers.nl
+	Auto-merging src/Propellor/Property/Machine.hs
+	Auto-merging propellor.cabal
+	Auto-merging debian/changelog
+	Auto-merging config.hs
+	CONFLICT (add/add): Merge conflict in config.hs
+	Automatic merge failed; fix conflicts and then commit the result.
+	propellor: Failed to run git ["merge","279b9267952b598914037983f74606d4f9c4ff6e","-s",
+		"recursive","-Xtheirs","--quiet","-m","merging upstream version"
+		,"--allow-unrelated-histories"]
+	CallStack (from HasCallStack):
+	  error, called at src/Propellor/DotDir.hs:425:17 in main:Propellor.DotDir
+
+
+What did connect both directories and why?
+
+
+More important:
+
+What directory setup and workflow to use
+to teach propellor about other ARM boards?

Added a comment: twice the warning
diff --git a/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_3_ecd5b0d960f1eb92795c559736f92e25._comment b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_3_ecd5b0d960f1eb92795c559736f92e25._comment
new file mode 100644
index 00000000..a6a24f53
--- /dev/null
+++ b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_3_ecd5b0d960f1eb92795c559736f92e25._comment
@@ -0,0 +1,34 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="twice the warning"
+ date="2018-01-01T15:57:05Z"
+ content="""
+The warning is printed twice.
+
+One at the very beginning:
+
+	stappers@paddy:~
+	$ propellor paddy.gpm.stappers.nl
+	   A newer upstream version is available in /usr/src/propellor/propellor.git
+	   To merge it, run: git merge upstream/master
+	   
+	[2018-01-01 16:42:54 CET] command line:  Run \"paddy.gpm.stappers.nl\"
+
+
+The other at the end of executing:
+
+	loop deleted : /dev/loop0
+	paddy.gpm.stappers.nl built disk image /srv/image/lime.img ... done
+	paddy.gpm.stappers.nl overall ... done
+	Shared connection to paddy.gpm.stappers.nl closed.
+	** warning: ** Your ~/.propellor/ is out of date..
+	stappers@paddy:~
+	$ 
+
+It was the last one that made me report this.
+The one that is color highlighted,
+the one that doesn't have the `git merge` advice.
+
+"""]]

Added a comment: Happy New Year
diff --git a/doc/forum/secret-project_deliverable/comment_8_30bc5e081916688468e750de6c95aebf._comment b/doc/forum/secret-project_deliverable/comment_8_30bc5e081916688468e750de6c95aebf._comment
new file mode 100644
index 00000000..401cd6a9
--- /dev/null
+++ b/doc/forum/secret-project_deliverable/comment_8_30bc5e081916688468e750de6c95aebf._comment
@@ -0,0 +1,36 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="Happy New Year"
+ date="2018-01-01T14:51:59Z"
+ content="""
+	stappers@paddy:~/src/secret-project
+	$ git config propellor.buildsystem stack
+	stappers@paddy:~/src/secret-project
+	$ propellor --spin paddy.gpm.stappers.nl
+	Building all executables for `secret-project' once. After a successful build of all of them, only specified executables will be rebuilt.
+	secret-project-0.0: build (exe)
+	Preprocessing executable 'propellor-config' for secret-project-0.0...
+	[1 of 9] Compiling Installer.Types  ( Installer/Types.hs, .stack-work/dist/x86_64-linux-nopie/Cabal-1.24.2.0/build/propellor-config/propellor-config-tmp/Installer/Types.o )
+	
+	/home/stappers/src/secret-project/Installer/Types.hs:3:1: error:
+	    Failed to load interface for ‘Propellor.Property.Installer.Types’
+	    There are files missing in the ‘propellor-5.2.0’ package,
+	    try running 'ghc-pkg check'.
+	    Use -v to see a list of the files searched for.
+	
+	--  While building custom Setup.hs for package secret-project-0.0 using:
+	      /home/stappers/.stack/setup-exe-cache/x86_64-linux-nopie/Cabal-simple_mPHDZzAJ_1.24.2.0_ghc-8.0.2 \
+		--builddir=.stack-work/dist/x86_64-linux-nopie/Cabal-1.24.2.0 build exe:propellor-config \
+		--ghc-options \" -ddump-hi -ddump-to-file\"
+	    Process exited with code: ExitFailure 1
+	Propellor build ... failed
+	** error: Propellor build failed!
+	propellor: Cannot continue!
+	CallStack (from HasCallStack):
+	  error, called at src/Propellor/Message.hs:143:9 in main:Propellor.Message
+	stappers@paddy:~/src/secret-project
+	$ 
+
+"""]]

Added a comment
diff --git a/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_2_c8bfbc1eaa3565ed3e92a402c75b63dc._comment b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_2_c8bfbc1eaa3565ed3e92a402c75b63dc._comment
new file mode 100644
index 00000000..46028b1e
--- /dev/null
+++ b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_2_c8bfbc1eaa3565ed3e92a402c75b63dc._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ avatar="http://cdn.libravatar.org/avatar/9c3f08f80e67733fd506c353239569eb"
+ subject="comment 2"
+ date="2018-01-01T11:10:01Z"
+ content="""
+If you update by merging from Joey's repo but have the Debian propellor package installed you'll always get this because the bundle in `/usr/src/propellor` has a commit ID that is distinct from any of those in Joey's branch.
+
+I think it would be nice to have a git config option to disable the check for those of us in the situation I just described.
+"""]]

response
diff --git a/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_1_79e18b696ed18c998cd2605cccbf3750._comment b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_1_79e18b696ed18c998cd2605cccbf3750._comment
new file mode 100644
index 00000000..6c8d187a
--- /dev/null
+++ b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date../comment_1_79e18b696ed18c998cd2605cccbf3750._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2017-12-31T16:03:40Z"
+ content="""
+You'd update it by git merge with propellor upstream, since your ~/.propellor
+in this case is forked from propellor's git repository, rather than the other
+option of being a separate git repository that uses propellor as a library.
+
+I think there should be more to the message than what you showed,
+explaining what you'd to do merge.
+
+        warningMessage ("** Your ~/.propellor/ is out of date..")
+        let also s = hPutStrLn stderr ("   " ++ s)
+        also ("A newer upstream version is available in " ++ distrepo)
+        if havebranch
+                then also ("To merge it, run: git merge " ++ upstreambranch)
+                else also ("To merge it, find the most recent commit in your repository's history that corresponds to an upstream release of propellor, and set refs/remotes/" ++ upstreambranch ++ " to it. Then run propellor again.")
+"""]]

diff --git a/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date...mdwn b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date...mdwn
new file mode 100644
index 00000000..7f912eb8
--- /dev/null
+++ b/doc/forum/__42____42___warning:___42____42___Your___126____47__.propellor__47___is_out_of_date...mdwn
@@ -0,0 +1,20 @@
+Hi,
+
+After upgrading from propellor 5.1.0 to 5.2.0  I do get
+
+    ** warning: ** Your ~/.propellor/ is out of date..
+
+
+
+The `~/.propellor` directory was created with
+
+    propellor --init
+
+
+
+Is there a
+
+     propellor --update-my-home-propellor
+
+
+??

comment
diff --git a/doc/forum/secret-project_deliverable/comment_7_a707f939469b74dc92a77ffb382a6359._comment b/doc/forum/secret-project_deliverable/comment_7_a707f939469b74dc92a77ffb382a6359._comment
new file mode 100644
index 00000000..404dd405
--- /dev/null
+++ b/doc/forum/secret-project_deliverable/comment_7_a707f939469b74dc92a77ffb382a6359._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 7"""
+ date="2017-12-31T15:07:40Z"
+ content="""
+Oh yeah, I forgot that needs first:
+
+	git config propellor.buildsystem stack
+"""]]

document propellor.buildsystem
diff --git a/doc/usage.mdwn b/doc/usage.mdwn
index 3d32538f..fb19250e 100644
--- a/doc/usage.mdwn
+++ b/doc/usage.mdwn
@@ -160,6 +160,11 @@ spin when the foo branch is not checked out.
 `git config propellor.forbid-dirty-spin true` will configure propellor to refuse
 to spin when there are uncommitted changes in the `~/.propellor` repository.
 
+`git config propellor.buildsystem stack` makes propellor use stack for
+building itself, rather than the default cabal. This only controls the
+local build of propellor; Hosts can have properties set to control how
+propellor is built on them.
+
 The usual git configuration controls which centralized repository (if any)
 propellor pushes and pulls from. 
 

Added a comment: Enough for this year ;-)
diff --git a/doc/forum/secret-project_deliverable/comment_6_a03868f03316f940e3f4edc6ee970292._comment b/doc/forum/secret-project_deliverable/comment_6_a03868f03316f940e3f4edc6ee970292._comment
new file mode 100644
index 00000000..e048132c
--- /dev/null
+++ b/doc/forum/secret-project_deliverable/comment_6_a03868f03316f940e3f4edc6ee970292._comment
@@ -0,0 +1,37 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="Enough for this year   ;-)"
+ date="2017-12-31T08:51:02Z"
+ content="""
+	stappers@paddy:~/src/secret-project
+	$ propellor --spin paddy.gpm.stappers.nl
+	Resolving dependencies...
+	Warning: solver failed to find a solution:
+	Could not resolve dependencies:
+	trying: secret-project-0.0 (user goal)
+	next goal: random-shuffle (dependency of secret-project-0.0)
+	Dependency tree exhaustively searched.
+	Trying configure anyway.
+	Configuring secret-project-0.0...
+	cabal: Encountered missing dependencies:
+	propellor ==5.2.0,
+	random >=1.1,
+	random-shuffle >=0.0.4,
+	threepenny-gui ==0.8.0.0
+	propellor: failed to make dist/setup-config
+	CallStack (from HasCallStack):
+	  error, called at src/Propellor/Bootstrap.hs:322:25 in main:Propellor.Bootstrap
+	stappers@paddy:~/src/secret-project
+	$ LANG=C dpkg -l propellor
+	Desired=Unknown/Install/Remove/Purge/Hold
+	| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
+	|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
+	||/ Name             Version       Architecture  Description
+	+++-================-=============-=============-=====================================
+	ii  propellor        5.2.0         amd64         property-based host configuration man
+	stappers@paddy:~/src/secret-project
+	$ 
+
+"""]]

response
diff --git a/doc/forum/secret-project_deliverable/comment_5_70eb3b130cb1b7449083669f16452682._comment b/doc/forum/secret-project_deliverable/comment_5_70eb3b130cb1b7449083669f16452682._comment
new file mode 100644
index 00000000..5158dbe6
--- /dev/null
+++ b/doc/forum/secret-project_deliverable/comment_5_70eb3b130cb1b7449083669f16452682._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 5"""
+ date="2017-12-31T00:46:49Z"
+ content="""
+I think this is more bad documentation on my part;
+probably running propellor like that does not fully work
+and only the propellor --spin method will really work currently.
+
+(Kind of a bug in propellor to; [[todo/chroot_localdir_issue]])
+"""]]
diff --git a/doc/todo/chroot_localdir_issue.mdwn b/doc/todo/chroot_localdir_issue.mdwn
new file mode 100644
index 00000000..497c7a93
--- /dev/null
+++ b/doc/todo/chroot_localdir_issue.mdwn
@@ -0,0 +1,15 @@
+Running "sudo ./propellor" is documented as a way to provision the local
+host. However, properties involving chroots and docker hard code localdir,
+so run /usr/local/propellor/propellor inside the chroot. When running
+propellor this way, that may not exist, or may be from some other propellor
+configuration and not know how to privision the chroot correctly.
+
+Should this stuff look at the path to the propellor executable that's
+really being run and use it? There's also the shimdir, which is under
+/usr/local/propellor and gets bind mounted into the chroot, so using
+something close to the executable run by "sudo ./propellor" may be
+surprising. And, exposeTrueLocaldir also uses the localdir.
+
+It may make more sense to detect when propellor is run this way and refuse
+to provision chroots. Or to eliminate this little-used way of running
+propellor entirely.. --[[Joey]]

Added a comment: patch
diff --git a/doc/forum/secret-project_deliverable/comment_4_96d1c080c94474edef500d7564c30d77._comment b/doc/forum/secret-project_deliverable/comment_4_96d1c080c94474edef500d7564c30d77._comment
new file mode 100644
index 00000000..67080b02
--- /dev/null
+++ b/doc/forum/secret-project_deliverable/comment_4_96d1c080c94474edef500d7564c30d77._comment
@@ -0,0 +1,43 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="patch"
+ date="2017-12-30T23:37:58Z"
+ content="""
+After applying this
+
+	--- a/secret-project.cabal
+	+++ b/secret-project.cabal
+	@@ -35,6 +35,7 @@ Executable propellor-config
+	     Installer.Progress
+	     Installer.Server
+	     Installer.StoreUserInput
+	+    Installer.Types
+	     Installer.UI
+	     Installer.User
+	     Installer.UserInput
+
+is `stack build` happy.
+
+But help needed for:
+
+	$ sudo stack --allow-different-user exec propellor-config paddy.gpm.stappers.nl
+	Pull from central git repository ... done
+	paddy.gpm.stappers.nl has propellor bootstrapped with stack ... ok
+	paddy.gpm.stappers.nl has Operating System (Debian Linux Unstable) X86_64 ... ok
+	** error: cannot find chroot /srv/installer.img.chroot on host paddy.gpm.stappers.nl
+	propellor: Cannot continue!
+	CallStack (from HasCallStack):
+	  error, called at src/Propellor/Message.hs:143:9 in main:Propellor.Message
+	** warning: user error (chroot [\"/srv/installer.img.chroot\"
+		,\"/usr/local/propellor/chroot/_srv_installer.img.chroot.shim/propellor\"
+		,\"--continue\"
+		,\"ChrootChain \\"paddy.gpm.stappers.nl\\" \\"/srv/installer.img.chroot\\" False True\"] exited 1)
+	paddy.gpm.stappers.nl built disk image /srv/installer.vmdk ... failed
+	paddy.gpm.stappers.nl overall ... failed
+	$ 
+
+
+
+"""]]

Added a comment: stuck
diff --git a/doc/forum/secret-project_deliverable/comment_3_12d569df836f8c1ec926f00c9c344885._comment b/doc/forum/secret-project_deliverable/comment_3_12d569df836f8c1ec926f00c9c344885._comment
new file mode 100644
index 00000000..8c5290e3
--- /dev/null
+++ b/doc/forum/secret-project_deliverable/comment_3_12d569df836f8c1ec926f00c9c344885._comment
@@ -0,0 +1,81 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="stuck"
+ date="2017-12-30T23:27:11Z"
+ content="""
+Hi,
+
+I feel stupid because I'm still stuck.
+
+What I have is ''secret-project'' from git, commit 14433a9494ed2946c8683a19a13dde54eae64723,
+Author: Joey Hess <joeyh@joeyh.name>,
+Date:   Sat Dec 30 13:38:06 2017 -0400
+
+I, stappers, work on host with FQDN  paddy.gpm.stappers.nl  so I have these changes:
+
+	--- a/config.hs
+	+++ b/config.hs
+	@@ -31,7 +31,7 @@ hosts =
+	 -- to build the installer disk images, by running, as root:
+	 --     propellor installer.builder
+	 installer_builder :: Host
+	-installer_builder = host \"installer.builder\" $ props
+	+installer_builder = host \"previous_attempt_on_paddy.gpm.stappers.nl\" $ props
+	        & bootstrapWith (Robustly Stack) -- temporary
+	        & osDebian Unstable X86_64
+	        & installerBuilt
+	@@ -42,12 +42,12 @@ installer_builder = host \"installer.builder\" $ props
+	 --     propellor --spin darkstar.kitenet.net
+	 -- (Replace darkstar with your own hostname.)
+	 darkstar :: Host
+	-darkstar = host \"darkstar.kitenet.net\" $ props
+	+darkstar = host \"paddy.gpm.stappers.nl\" $ props
+	        & bootstrapWith (Robustly Stack) -- temporary
+	        & osDebian Unstable X86_64
+	        & installerBuilt
+	-               `before` File.ownerGroup \"/srv/installer.img\" (User \"joey\") (Group \"joey\")
+	-               `before` File.ownerGroup \"/srv/installer.vmdk\" (User \"joey\") (Group \"joey\")
+	+               `before` File.ownerGroup \"/srv/installer.img\" (User \"stappers\") (Group \"stappers\")
+	+               `before` File.ownerGroup \"/srv/installer.vmdk\" (User \"stappers\") (Group \"stappers\")
+	 
+	 -- | Build a disk image for the installer.
+	 installerBuilt :: RevertableProperty (HasInfo + DebianLike) Linux
+	
+
+When I follow the instructions from README  I get:
+
+	$ stack build
+	secret-project-0.0: build (exe)
+	Preprocessing executable 'propellor-config' for secret-project-0.0...
+	[9 of 9] Compiling Main             ( config.hs, .stack-work/dist/x86_64-linux-nopie/Cabal-1.24.2.0/build/propellor-config/propellor-config-tmp/Main.o )
+	Linking .stack-work/dist/x86_64-linux-nopie/Cabal-1.24.2.0/build/propellor-config/propellor-config ...
+	
+	Warning: The following modules should be added to exposed-modules or other-modules in /home/stappers/src/secret-project/secret-project.cabal:
+	             - In propellor-config component:
+	                 Installer.Types
+	         
+	         Missing modules in the cabal file are likely to cause undefined reference errors from the linker, along with other problems.
+	secret-project-0.0: copy/register
+	Installing executable(s) in
+	/home/stappers/src/secret-project/.stack-work/install/x86_64-linux-nopie/lts-8.12/8.0.2/bin
+	$ sudo stack --allow-different-user exec propellor-config paddy.gpm.stappers.nl
+	Pull from central git repository ... done
+	paddy.gpm.stappers.nl has propellor bootstrapped with stack ... ok
+	paddy.gpm.stappers.nl has Operating System (Debian Linux Unstable) X86_64 ... ok
+	** error: cannot find chroot /srv/installer.img.chroot on host paddy.gpm.stappers.nl
+	propellor: Cannot continue!
+	CallStack (from HasCallStack):
+	  error, called at src/Propellor/Message.hs:143:9 in main:Propellor.Message
+	** warning: user error (chroot [\"/srv/installer.img.chroot\"
+		,\"/usr/local/propellor/chroot/_srv_installer.img.chroot.shim/propellor\"
+		,\"--continue\"
+		,\"ChrootChain \\"paddy.gpm.stappers.nl\\" \\"/srv/installer.img.chroot\\" False True\"] exited 1)
+	paddy.gpm.stappers.nl built disk image /srv/installer.vmdk ... failed
+	paddy.gpm.stappers.nl overall ... failed
+	$ 
+
+How do I get unstuck??
+
+"""]]

add news item for propellor 5.2.0
diff --git a/doc/news/version_5.1.0.mdwn b/doc/news/version_5.1.0.mdwn
deleted file mode 100644
index dd007a24..00000000
--- a/doc/news/version_5.1.0.mdwn
+++ /dev/null
@@ -1,18 +0,0 @@
-propellor 5.1.0 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * [ Sean Whitton ]
-   * File.isSymlinkedTo now revertable. (minor API change)
-   * Sbuild module changes:
-     - Type of Sbuild.built changed to accept additional properties to be
-       ensured inside schroots. (API change)
-       See the suggested usage in module's documentation for new syntax.
-     - Drop Sbuild.installed, Sbuild.builtFor, Sbuild.updated,
-       Sbuild.updatedFor. (API change)
-       Use Sbuild.built instead.  See suggested usage in module's documentation.
-     - Propellor no longer sets up apt proxies in sbuild chroots automatically.
-       Instead, pass the new Sbuild.useHostProxy to Sbuild.built to have
-       Propellor propagate the host's Apt proxy configuration into the chroot.
-       See suggested usage in module's documentation.
-     - Internally, Propellor no longer invokes sbuild-createchroot(1) to build
-       schroots.
-     - Update documentation."""]]
\ No newline at end of file
diff --git a/doc/news/version_5.2.0.mdwn b/doc/news/version_5.2.0.mdwn
new file mode 100644
index 00000000..8cd1edaf
--- /dev/null
+++ b/doc/news/version_5.2.0.mdwn
@@ -0,0 +1,24 @@
+propellor 5.2.0 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * [ Joey Hess ]
+   * bootstrappedFrom: Set up local privdata file.
+   * Parted: Fix names used for FAT and VFAT partitions.
+   * Parted: Add an Alignment parameter. (API change)
+     A good default to use is safeAlignment, which is 4MiB,
+     well suited for inexpensive flash drives, and fine for other disks too.
+     Previously, a very non-optimial 1MB (not 1MiB) alignment had been used.
+   * DiskImage: Use safeAlignment. It didn't seem worth making the
+     alignment configurable here.
+   * Fixed rounding bug in Parted.calcPartTable.
+   * DiskImage: Fix rsync crash when a mount point does not exist in the
+     chroot.
+   * Fix bug in unmountBelow that caused unmounting of nested mounts to
+     fail.
+   * Grub.boots, Grub.bootsMounted: Pass --target to grub-install.
+   * Added Propellor.Property.Installer modules, which can be used to create
+     bootable installer disk images, which then run propellor to install
+     a system. This code was extracted from the demo I gave in my
+     talk at DebConf 2017.
+ * [ Sean Whitton ]
+   * Sbuild: add notes about Debian jessie hosts and backports of sbuild and
+     autopkgtest."""]]
\ No newline at end of file

Added a comment: almost there
diff --git a/doc/forum/secret-project_deliverable/comment_2_a3faea076e7477d5ce4fcb03a38d74a7._comment b/doc/forum/secret-project_deliverable/comment_2_a3faea076e7477d5ce4fcb03a38d74a7._comment
new file mode 100644
index 00000000..24738e49
--- /dev/null
+++ b/doc/forum/secret-project_deliverable/comment_2_a3faea076e7477d5ce4fcb03a38d74a7._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="almost there"
+ date="2017-12-29T21:09:04Z"
+ content="""
+thanks
+
+got another error that I probaly can fix my self
+"""]]

response
diff --git a/doc/forum/secret-project_deliverable/comment_1_49f421da4a94d9267ca5e75679a4c92c._comment b/doc/forum/secret-project_deliverable/comment_1_49f421da4a94d9267ca5e75679a4c92c._comment
new file mode 100644
index 00000000..9f8c8a90
--- /dev/null
+++ b/doc/forum/secret-project_deliverable/comment_1_49f421da4a94d9267ca5e75679a4c92c._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2017-12-29T19:49:02Z"
+ content="""
+I've added some hints to the README, of course it's been a while since I
+ran it and I only ran it a couple times. The content of the config.hs is
+really more important than the gory details of how to run it, in my opinion.
+"""]]

diff --git a/doc/forum/secret-project_deliverable.mdwn b/doc/forum/secret-project_deliverable.mdwn
new file mode 100644
index 00000000..b1fcab54
--- /dev/null
+++ b/doc/forum/secret-project_deliverable.mdwn
@@ -0,0 +1,27 @@
+Hi,
+
+The secret-project README says to do `stack build`.
+
+Doing that gives me a clean compile.
+
+
+But what deliverable should I have now?
+
+
+Snippet from `secret-project.cabal`:
+
+    Executable propellor-config
+      Main-Is: config.hs
+
+But I don't have a `propellor-config`.
+
+Running `propellor` gives compile errors.
+So that doesn't seem the next step for getting any deliverable.
+
+For what should I be looking??
+
+
+Cheers
+
+Geert Stappers
+

Added a comment: Clean build
diff --git a/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_8_66bab35f7eb78584e1adf93b4b8dccb4._comment b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_8_66bab35f7eb78584e1adf93b4b8dccb4._comment
new file mode 100644
index 00000000..a5c37aac
--- /dev/null
+++ b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_8_66bab35f7eb78584e1adf93b4b8dccb4._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="Clean build"
+ date="2017-12-29T17:41:02Z"
+ content="""
+Yes, with the updated  `stack.yaml` I do get a clean build upon `stack build`.
+
+Yeah
+
+"""]]

update
diff --git a/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_7_cf7efafc0ee96d5cecf452ebe49015d5._comment b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_7_cf7efafc0ee96d5cecf452ebe49015d5._comment
new file mode 100644
index 00000000..3f140c2e
--- /dev/null
+++ b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_7_cf7efafc0ee96d5cecf452ebe49015d5._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 7"""
+ date="2017-12-29T16:26:41Z"
+ content="""
+Asked the stack developers and found a stack.yaml that
+I think worked with both versions of stack. At least both can build with
+it, have not tried running secret-project again.
+"""]]

comment
diff --git a/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_6_249337c7f647cca8f4e23c99897458d9._comment b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_6_249337c7f647cca8f4e23c99897458d9._comment
new file mode 100644
index 00000000..9d540993
--- /dev/null
+++ b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_6_249337c7f647cca8f4e23c99897458d9._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 6"""
+ date="2017-12-29T15:56:21Z"
+ content="""
+You need this for it to build with the newer stack:
+
+	--- a/stack.yaml
+	+++ b/stack.yaml
+	@@ -4,4 +4,5 @@ packages:
+	 resolver: lts-8.12
+	 extra-deps:
+	 - propellor-5.1.0
+	+- archive: http://github.com/joeyh/threepenny-gui/archive/59242cf93bdb8eaa805f5c2b0241e9a1cba9a70f.zip
+	 explicit-setup-deps:
+
+However, that won't work with the 
+[stack currently in debian](http://package.debian.org/haskell-stack)
+and since secret-project later installs that version of stack and runs
+it against the same stack.yaml file, I can't commit that change until 
+Debian gets around to [upgrading haskell-stack](http://bugs.debian.org/877256)
+"""]]

Added a comment: stack extra dep threepenny-gui-0.8.2.0 compile error
diff --git a/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_5_4cda097e7650c4ba46e26c6e3dbbdc75._comment b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_5_4cda097e7650c4ba46e26c6e3dbbdc75._comment
new file mode 100644
index 00000000..608e0bb1
--- /dev/null
+++ b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_5_4cda097e7650c4ba46e26c6e3dbbdc75._comment
@@ -0,0 +1,65 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="stack extra dep  threepenny-gui-0.8.2.0   compile error"
+ date="2017-12-29T09:22:34Z"
+ content="""
+With having
+
+	extra-deps:
+	- propellor-5.1.0
+	- threepenny-gui-0.8.2.0
+
+in `stack.yaml` gives me this compile error:
+
+	Preprocessing executable 'propellor-config' for secret-project-0.0...
+	[ 7 of 10] Compiling Installer.UI     ( Installer/UI.hs, .stack-work/dist/x86_64-linux-nopie/Cabal-1.24.2.0/build/propellor-config/propellor-config-tmp/Installer/UI.o )
+	             
+	/home/stappers/src/secret-project/Installer/UI.hs:282:32: error:
+	    • Couldn't match type ‘(t1, (Int, Int))’ with ‘[Char]’
+	      Expected type: UI.DragData
+	        Actual type: (t1, (Int, Int))
+	    • In the pattern: (_d, (x, y))
+	      In the second argument of ‘($)’, namely
+	        ‘\ (_d, (x, y))
+	           -> void
+	              $ do { now <- getTime clock;
+	                     liftIO $ writeIORef draginfo (x, y, now);
+	                     .... }’
+	      In a stmt of a 'do' block:
+	        on UI.dragStart elt
+	        $ \ (_d, (x, y))
+	            -> void
+	               $ do { now <- getTime clock;
+	                      liftIO $ writeIORef draginfo (x, y, now);
+	                      .... }
+	             
+	/home/stappers/src/secret-project/Installer/UI.hs:487:27: error:
+	    • Couldn't match type ‘(t0 a0, (Int, Int))’ with ‘[Char]’
+	      Expected type: UI.DragData
+	        Actual type: (t0 a0, (Int, Int))
+	    • In the pattern: (d, (x, y))
+	      In the second argument of ‘($)’, namely
+	        ‘\ (d, (x, y))
+	           -> when (not (null d))
+	              $ liftIO $ writeIORef dropSuccess (True, (x, y))’
+	      In a stmt of a 'do' block:
+	        on UI.drop elt
+	        $ \ (d, (x, y))
+	            -> when (not (null d))
+	               $ liftIO $ writeIORef dropSuccess (True, (x, y))
+	             
+	--  While building custom Setup.hs for package secret-project-0.0 using:
+	      /root/.stack/setup-exe-cache/x86_64-linux-nopie/Cabal-simple_mPHDZzAJ_1.24.2.0_ghc-8.0.2 --builddir=.stack-work/dist/x86_64-linux-nopie/Cabal-1.24.2.0 build exe:propellor-config --ghc-options \" -ddump-hi -ddump-to-file\"
+	    Process exited with code: ExitFailure 1
+	
+I hope it is reproduceable and that it can be fixed.
+
+Thank you
+
+Groeten
+
+Geert Stappers
+
+"""]]

Added a comment: threepenny-ui in cabal
diff --git a/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_4_074a7c14425635ddb25b7d3046337533._comment b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_4_074a7c14425635ddb25b7d3046337533._comment
new file mode 100644
index 00000000..4ea04076
--- /dev/null
+++ b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_4_074a7c14425635ddb25b7d3046337533._comment
@@ -0,0 +1,38 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="threepenny-ui in cabal"
+ date="2017-12-29T08:46:19Z"
+ content="""
+Without a version for threepenny-ui in secret-project.cabal gets 0.7.0.1 installed by `stack build`.
+
+Where 0.7.0.1 comes from is unclear to me.
+Downloading and unzipping <https://github.com/joeyh/threepenny-gui/archive/59242cf93bdb8eaa805f5c2b0241e9a1cba9a70f.zip> didn't reveal any 0.7.0.1.
+
+Having `threepenny-gui (>= 0.8.0.0)` in secret-project.cabal gives this compile error:
+
+	
+	Error: While constructing the build plan, the following exceptions were encountered:
+	
+	In the dependencies for secret-project-0.0:
+	    threepenny-gui-0.7.0.1 from stack configuration does not match (>=0.8.0.0) (latest matching version
+	                           is 0.8.2.0)
+	needed since secret-project is a build target.
+	
+	Some potential ways to resolve this:
+	
+	  * Recommended action: try adding the following to your extra-deps
+	    in /home/stappers/src/secret-project/stack.yaml:
+	
+	- threepenny-gui-0.8.2.0
+	
+	  * Set 'allow-newer: true' to ignore all version constraints and build anyway.
+	
+	  * You may also want to try using the 'stack solver' command.
+	
+	Plan construction failed.
+
+
+
+"""]]

Added a comment: my stack version
diff --git a/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_3_e288978072a6f38539150be1ebf4b0f2._comment b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_3_e288978072a6f38539150be1ebf4b0f2._comment
new file mode 100644
index 00000000..5dc314de
--- /dev/null
+++ b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_3_e288978072a6f38539150be1ebf4b0f2._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="my stack version"
+ date="2017-12-28T22:13:21Z"
+ content="""
+    $ stack --version
+    Version 1.6.3, Git revision b27e629b8c4ce369e3b8273f04db193b060000db (5454 commits) x86_64 hpack-0.20.0
+
+"""]]

response
diff --git a/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_2_10e8132f96e66a4c215ed275e22d1bda._comment b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_2_10e8132f96e66a4c215ed275e22d1bda._comment
new file mode 100644
index 00000000..f25b614b
--- /dev/null
+++ b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_2_10e8132f96e66a4c215ed275e22d1bda._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2017-12-28T17:01:21Z"
+ content="""
+The zip file pointed to by the stack.yaml file contains a patched version
+of threepenny-gui 0.8.0.0, the same as the cabal file requires.
+
+Downgrading the dependency won't work, thus your build problems. All I can
+tell you is it's built successfully with stack every time I've tried to
+build it, and stack pins all package versions to ensure a reproducible
+build.
+
+It may be that you're using too old a version of stack or 
+something like that; I've used stack 1.1.2.
+"""]]

Added a comment: patch
diff --git a/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_4_568bda577a15f1ef405dd20eec24aa9b._comment b/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_4_568bda577a15f1ef405dd20eec24aa9b._comment
new file mode 100644
index 00000000..52726dc1
--- /dev/null
+++ b/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_4_568bda577a15f1ef405dd20eec24aa9b._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="patch"
+ date="2017-12-28T13:08:12Z"
+ content="""
+patch against the now existing README file
+
+	--- a/README
+	+++ b/README
+	@@ -4,3 +4,5 @@ based GUI. I ran it live in my \"Life After Debian\" talk at DebConf 17.
+	 http://meetings-archive.debian.net/pub/debian-meetings/2017/debconf17/life-after-debian.vp8.webm
+	 
+	 If you would like to build this, use stack, eg \"stack build\"
+	+
+	+FYI stack homepage is https://docs.haskellstack.org/en/stable/README/
+
+"""]]

Added a comment: additional information
diff --git a/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_1_4dea8fc15186923aeffcd0272a8c14c0._comment b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_1_4dea8fc15186923aeffcd0272a8c14c0._comment
new file mode 100644
index 00000000..58543ee5
--- /dev/null
+++ b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__./comment_1_4dea8fc15186923aeffcd0272a8c14c0._comment
@@ -0,0 +1,38 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="additional information"
+ date="2017-12-28T12:44:23Z"
+ content="""
+There was another error before the error reported above. It was
+
+	Error: While constructing the build plan, the following exceptions were encountered:
+	
+	In the dependencies for secret-project-0.0:
+	    threepenny-gui-0.7.0.1 from stack configuration does not match (==0.8.0.0) (latest matching version
+	                           is 0.8.0.0)
+	needed since secret-project is a build target.
+
+My workaround was
+
+	--- a/secret-project.cabal
+	+++ b/secret-project.cabal
+	@@ -21,7 +21,7 @@ Executable propellor-config
+	   Build-Depends:
+	       base (>= 4.9 && < 5.0)
+	     , propellor >= 4.7.6
+	-    , threepenny-gui (== 0.8.0.0)
+	+    , threepenny-gui (== 0.7.0.1)
+	     , random (>= 1.1)
+	     , random-shuffle (>= 0.0.4)
+	     , filepath (>= 1.4)
+
+That because `stack.yaml` has a package line
+
+	- http://github.com/joeyh/threepenny-gui/archive/59242cf93bdb8eaa805f5c2b0241e9a1cba9a70f.zip
+
+where I think/assume the 0.7.0.1 comes from.
+	
+
+"""]]

diff --git a/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__..mdwn b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__..mdwn
new file mode 100644
index 00000000..ca665c3c
--- /dev/null
+++ b/doc/forum/secret-project_and_Module___8216__Graphics.UI.Threepenny__8217___does_not_export___8216__loadFile__8217__..mdwn
@@ -0,0 +1,25 @@
+Hi,
+
+While attempting to build "secret-project" I encountered this
+
+	[ 7 of 10] Compiling Installer.UI     ( Installer/UI.hs, .stack-work/dist/x86_64-linux-nopie/Cabal-1.24.2.0/build/propellor-config/propellor-config-tmp/Installer/UI.o )
+	             
+	/home/stappers/src/secret-project/Installer/UI.hs:228:14: error:
+	    Not in scope: ‘UI.loadFile’
+	    Module ‘Graphics.UI.Threepenny’ does not export ‘loadFile’.
+	             
+	--  While building custom Setup.hs for package secret-project-0.0 using:
+	      /root/.stack/setup-exe-cache/x86_64-linux-nopie/Cabal-simple_mPHDZzAJ_1.24.2.0_ghc-8.0.2 --builddir=.stack-work/dist/x86_64-linux-nopie/Cabal-1.24.2.0 build exe:propellor-config --ghc-options " -ddump-hi -ddump-to-file"
+	    Process exited with code: ExitFailure 1
+	
+
+From <http://propellor.branchable.com/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/#comment-179662ace1bc9a24782d60e73f2a5a4e>
+I understand that a UI patch to threepenny-gui is needed.
+But I don't understand that request.
+
+How to patch the threepenny-gui??
+
+
+Cheers
+
+Geert Stappers

Added a comment: README.mdwn
diff --git a/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_3_b436b5eb909dd4b228bb36546f593547._comment b/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_3_b436b5eb909dd4b228bb36546f593547._comment
new file mode 100644
index 00000000..3380be42
--- /dev/null
+++ b/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_3_b436b5eb909dd4b228bb36546f593547._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="README.mdwn"
+ date="2017-12-28T12:02:17Z"
+ content="""
+
+Use `stack` for building.
+Find stack at <https://docs.haskellstack.org/en/stable/README/>
+
+After installing `stack` do
+
+	stack build
+
+in this directory.
+"""]]

response
diff --git a/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_2_4e2f36fc1de2644c22d69ab9a2d7e94a._comment b/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_2_4e2f36fc1de2644c22d69ab9a2d7e94a._comment
new file mode 100644
index 00000000..a5e48372
--- /dev/null
+++ b/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_2_4e2f36fc1de2644c22d69ab9a2d7e94a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2017-12-27T23:42:50Z"
+ content="""
+You need to build secret-project using stack, to get the right version
+of propellor and also a UI patch to threepenny-gui.
+"""]]

comment
diff --git a/doc/todo/etckeeper/comment_3_5f62128bdb550de475d22abb35730949._comment b/doc/todo/etckeeper/comment_3_5f62128bdb550de475d22abb35730949._comment
new file mode 100644
index 00000000..7d2f8d43
--- /dev/null
+++ b/doc/todo/etckeeper/comment_3_5f62128bdb550de475d22abb35730949._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2017-12-27T23:35:16Z"
+ content="""
+Yeah, just been waiting to hear back from the issue submitter.
+"""]]

Added a comment: patch, sorry for the previous line wraps
diff --git a/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_1_492a5c5297a80f18282361fb5c27ad8a._comment b/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_1_492a5c5297a80f18282361fb5c27ad8a._comment
new file mode 100644
index 00000000..5fbd00ff
--- /dev/null
+++ b/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__/comment_1_492a5c5297a80f18282361fb5c27ad8a._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="patch, sorry for the previous line wraps"
+ date="2017-12-27T23:14:22Z"
+ content="""
+	--- a/secret-project.cabal
+	+++ b/secret-project.cabal
+	@@ -21,7 +21,7 @@ Executable propellor-config
+	   Build-Depends:
+	       base (>= 4.9 && < 5.0)
+	     , propellor >= 4.7.6
+	-    , threepenny-gui (== 0.8.0.0)
+	+    , threepenny-gui (>= 0.8.0.0)
+	     , random (>= 1.1)
+	     , random-shuffle (>= 0.0.4)
+	     , filepath (>= 1.4)
+
+"""]]

Installer/Target.hs:28:51: error: Not in scope: type constructor or class ‘PartSpec’
diff --git a/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__.mdwn b/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__.mdwn
new file mode 100644
index 00000000..94d58f2b
--- /dev/null
+++ b/doc/forum/secret-project_and_type_constructor_or_class___8216__PartSpec__8217__.mdwn
@@ -0,0 +1,43 @@
+Hi,
+
+After
+  git clone https://git.joeyh.name/git/secret-project.git
+
+plus
+ --- a/secret-project.cabal
+ +++ b/secret-project.cabal
+ @@ -21,7 +21,7 @@ Executable propellor-config
+   Build-Depends:
+        base (>= 4.9 && < 5.0)
+      , propellor >= 4.7.6
+ -    , threepenny-gui (== 0.8.0.0)
+ +    , threepenny-gui (>= 0.8.0.0)
+      , random (>= 1.1)
+      , random-shuffle (>= 0.0.4)
+      , filepath (>= 1.4)
+
+
+Gives `propellor spin` me this
+
+[ 5 of 10] Compiling Installer.Target ( Installer/Target.hs, dist/build/propellor-config/propellor-config-tmp/Installer/Target.o )
+
+Installer/Target.hs:28:51: error:
+    Not in scope: type constructor or class ‘PartSpec’
+
+Installer/Target.hs:97:30: error:
+    Not in scope: type constructor or class ‘PartSpec’
+
+Installer/Target.hs:178:51: error:
+    Not in scope: type constructor or class ‘PartSpec’
+propellor: cabal build failed
+CallStack (from HasCallStack):
+  error, called at src/Propellor/Bootstrap.hs:259:25 in main:Propellor.Bootstrap
+
+
+
+How to get beyond that compile error?
+
+
+Cheers
+Geert Stappers
+

Added a comment: why still on todo list
diff --git a/doc/todo/etckeeper/comment_2_69484bfac40de156a4b877f27aa69eca._comment b/doc/todo/etckeeper/comment_2_69484bfac40de156a4b877f27aa69eca._comment
new file mode 100644
index 00000000..dfb9f9df
--- /dev/null
+++ b/doc/todo/etckeeper/comment_2_69484bfac40de156a4b877f27aa69eca._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="stappers@eb96885816da287c29f6f699999434d532149234"
+ nickname="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="why still on todo list"
+ date="2017-12-27T23:00:58Z"
+ content="""
+the 'all needed apt.installed[\"etckeeper\"]' seems to me that the etckeeper is available.
+
+Why is this still on the todo list?
+
+What kind of patches are wanted??
+
+"""]]

Added a comment: the working config
diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_16_53ec0ff959e60af5382f2b6fd54ced26._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_16_53ec0ff959e60af5382f2b6fd54ced26._comment
new file mode 100644
index 00000000..e471dfc2
--- /dev/null
+++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_16_53ec0ff959e60af5382f2b6fd54ced26._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="stappers"
+ avatar="http://cdn.libravatar.org/avatar/bf33450acf6fc2a17a8b4e6fc7749c65"
+ subject="the working config"
+ date="2017-12-27T21:26:21Z"
+ content="""
+Is the working config somewhere available?
+
+If yes,  where??
+
+
+Yes, I what to reproduce it.
+
+
+Cheers
+Geert Stappers
+"""]]

update
diff --git a/doc/todo/removable_drive_partitioning_and_install.mdwn b/doc/todo/removable_drive_partitioning_and_install.mdwn
index a915b777..891c3b92 100644
--- a/doc/todo/removable_drive_partitioning_and_install.mdwn
+++ b/doc/todo/removable_drive_partitioning_and_install.mdwn
@@ -25,6 +25,9 @@ Open design questions:
 
   Question: When using microsd card adapter, does the serial number pass
   through so different microsds can be distinguished?
+  > Checked this, and two microsd card adapters from different
+  > manufacturers with different microsd cards have the same by-id.
+  > Those must have no serial number..
 
 * Should an already imaged drive be updated incrementally or re-imaged?
   Seems both cases would be useful, the former especially for incrementally

Added a comment: Patch mailed to propellor@joeyh.name
diff --git a/doc/forum/Sbuild_and_jessie/comment_7_38650a2151201eaf6f40d8becbbe8861._comment b/doc/forum/Sbuild_and_jessie/comment_7_38650a2151201eaf6f40d8becbbe8861._comment
new file mode 100644
index 00000000..12dfbaac
--- /dev/null
+++ b/doc/forum/Sbuild_and_jessie/comment_7_38650a2151201eaf6f40d8becbbe8861._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ avatar="http://cdn.libravatar.org/avatar/9c3f08f80e67733fd506c353239569eb"
+ subject="Patch mailed to propellor@joeyh.name"
+ date="2017-12-22T18:11:07Z"
+ content="""
+I started preparing a patch so that `Sbuild.userConfig` would install the backport on Jessie, but realised that what is probably going on is that you have a backport of sbuild installed -- I assume that the sbuild that comes with jessie tries to invoke `adt-run` not `autopkgtest`.  So `Sbuild.userConfig` would have to check the installed version of sbuild before it could determine whether to install the backport of autopkgtest.
+
+I think it would be unwise to incorporate that complexity into Sbuild.hs for the sake of an old release of Debian, so I've mailed a patch to Joey simply documenting the issue.
+"""]]

comment
diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_15_05bdf475e1a8b5d8d36f88fef0210383._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_15_05bdf475e1a8b5d8d36f88fef0210383._comment
new file mode 100644
index 00000000..5bf364ac
--- /dev/null
+++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_15_05bdf475e1a8b5d8d36f88fef0210383._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 15"""
+ date="2017-12-22T13:24:44Z"
+ content="""
+Oops, fixed the Grub.targetParam inversion.
+"""]]

Added a comment
diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_14_d7948bf285cc4769ccd1802a1fa86eee._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_14_d7948bf285cc4769ccd1802a1fa86eee._comment
new file mode 100644
index 00000000..88870d0d
--- /dev/null
+++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_14_d7948bf285cc4769ccd1802a1fa86eee._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="gueux"
+ avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8"
+ subject="comment 14"
+ date="2017-12-22T12:44:18Z"
+ content="""
+Unfortunately it didn't... But I think it's probably a problem of choosing the right grub version. I did boot a grml64 sdcard, and I think they use hybrid bios/uefi boot. I have to investigate, let's see this in a few days :)
+
+Thanks a lot for your help!
+"""]]

Added a comment
diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_13_10b9bf6e92a80dff2c14f41c22347b3f._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_13_10b9bf6e92a80dff2c14f41c22347b3f._comment
new file mode 100644
index 00000000..6d8a33eb
--- /dev/null
+++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_13_10b9bf6e92a80dff2c14f41c22347b3f._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="gueux"
+ avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8"
+ subject="comment 13"
+ date="2017-12-22T12:20:57Z"
+ content="""
+         17,514,598  66%   53.61MB/s    0:00:00 (xfr#1, to-chk=0/7)
+                129   0%    0.06kB/s    0:00:01 (xfr#3, to-chk=0/33583)   
+    update-initramfs: Generating /boot/initrd.img-4.9.0-4-amd64
+    Generating grub configuration file ...
+    Found linux image: /boot/vmlinuz-4.9.0-4-amd64
+    Found initrd image: /boot/initrd.img-4.9.0-4-amd64
+    done
+    Installing for x86_64-efi platform.
+    Installation finished. No error reported.
+    loop deleted : /dev/loop0
+    laptop built disk image /srv/router.img ... done
+    laptop overall ... done
+
+
+\o/. Let's see if it boots... I just have one try, then I'll have to move for a few days...
+"""]]

Added a comment
diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_12_8717ae3d2e60d07025a11c930cf26b84._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_12_8717ae3d2e60d07025a11c930cf26b84._comment
new file mode 100644
index 00000000..caaa5713
--- /dev/null
+++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_12_8717ae3d2e60d07025a11c930cf26b84._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="gueux"
+ avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8"
+ subject="comment 12"
+ date="2017-12-22T12:16:50Z"
+ content="""
+Or not? I found this one: you inverted EFI64 and EFI32 in Grub.targetParam :)
+"""]]

Added a comment
diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_11_6f691ea981679e92d7c0ae6cf1cfce6f._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_11_6f691ea981679e92d7c0ae6cf1cfce6f._comment
new file mode 100644
index 00000000..8d39744b
--- /dev/null
+++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_11_6f691ea981679e92d7c0ae6cf1cfce6f._comment
@@ -0,0 +1,29 @@
+[[!comment format=mdwn
+ username="gueux"
+ avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8"
+ subject="comment 11"
+ date="2017-12-22T12:10:37Z"
+ content="""
+So, I rebooted, but I still had the /dev/mapper/loop problem. I was able to \"dmsetup remove\" these, though...
+
+I deleted router.img and router.img.parttable...
+
+    creating /srv/router.img of size 1.66 gigabytes
+    loop deleted : /dev/loop0
+    mkfs.fat 4.1 (2017-01-24)
+    loop deleted : /dev/loop0
+         26,456,191 100%   29.82MB/s    0:00:00 (xfr#5, to-chk=0/7)
+        770,763,841  99%    2.16MB/s    0:05:40 (xfr#26256, to-chk=0/33583)   
+    update-initramfs: Generating /boot/initrd.img-4.9.0-4-amd64
+    Generating grub configuration file ...
+    Found linux image: /boot/vmlinuz-4.9.0-4-amd64
+    Found initrd image: /boot/initrd.img-4.9.0-4-amd64
+    done
+    grub-install: error: /usr/lib/grub/i386-efi/modinfo.sh doesn't exist. Please specify --target or --directory.
+    loop deleted : /dev/loop0
+    laptop built disk image /srv/router.img ... failed
+    laptop overall ... failed
+
+
+...and I'm back to the grub-install/grub-update problem, which seems to apply to grub-efi-amd64. It's weird, because it's the version I have on my laptop, and I did not notice this issue (but I installed debian on it a long time ago, so, the bug may have appeared since then).
+"""]]

Added a comment
diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_10_00b4f5d4fd445b8041a2744c2dd755f0._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_10_00b4f5d4fd445b8041a2744c2dd755f0._comment
new file mode 100644
index 00000000..e38825e1
--- /dev/null
+++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_10_00b4f5d4fd445b8041a2744c2dd755f0._comment
@@ -0,0 +1,36 @@
+[[!comment format=mdwn
+ username="gueux"
+ avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8"
+ subject="comment 10"
+ date="2017-12-22T10:21:28Z"
+ content="""
+Ouch, that does not seem like it was easy to debug... Thanks for looking into this!
+
+    src/Propellor/Property/Parted.hs:114:27: warning: [-Wtype-defaults]
+        • Defaulting the following constraints to type ‘Double’
+            (Show a0)
+              arising from a use of ‘show’
+              at src/Propellor/Property/Parted.hs:114:27-57
+            (Fractional a0)
+              arising from a use of ‘/’
+              at src/Propellor/Property/Parted.hs:114:33-56
+            (Num a0)
+              arising from a use of ‘fromIntegral’
+              at src/Propellor/Property/Parted.hs:114:33-46
+        • In the first argument of ‘(++)’, namely
+            ‘show (fromIntegral n / 1000000)’
+          In the expression: show (fromIntegral n / 1000000) ++ \"MB\"
+          In an equation for ‘partposfuzzy’:
+              partposfuzzy n
+                | n > 0 = show (fromIntegral n / 1000000) ++ \"MB\"
+                | otherwise = \"1MB\"
+
+I now get:
+
+    mount: /tmp/mntzZ3vjF: wrong fs type, bad option, bad superblock on /dev/mapper/loop0p2, missing codepage or helper program, or other error.
+    umount: /tmp/mntzZ3vjF: not mounted.
+    ** fatal error: failed unmounting /tmp/mntzZ3vjF
+    propellor: StopPropellorException \"Cannot continue!\"
+
+:(. I'll try to reboot, I don't get how to remove/unmount this /dev/mapper/loop0p2 (I tried \"dmsetup remove\", \"losetup -d\" without success...)
+"""]]

question
diff --git a/doc/todo/removable_drive_partitioning_and_install.mdwn b/doc/todo/removable_drive_partitioning_and_install.mdwn
index aa5dc4c3..a915b777 100644
--- a/doc/todo/removable_drive_partitioning_and_install.mdwn
+++ b/doc/todo/removable_drive_partitioning_and_install.mdwn
@@ -23,6 +23,9 @@ Open design questions:
   look up. Or, could parse the /dev/disk/by-id/ name, excluding the bus
   part of it.
 
+  Question: When using microsd card adapter, does the serial number pass
+  through so different microsds can be distinguished?
+
 * Should an already imaged drive be updated incrementally or re-imaged?
   Seems both cases would be useful, the former especially for incrementally
   configuring it, the latter to bring it up from a clean state.

todo
diff --git a/doc/todo/removable_drive_partitioning_and_install.mdwn b/doc/todo/removable_drive_partitioning_and_install.mdwn
new file mode 100644
index 00000000..aa5dc4c3
--- /dev/null
+++ b/doc/todo/removable_drive_partitioning_and_install.mdwn
@@ -0,0 +1,34 @@
+I want to be able to temporarily plug in the root drive of another host
+to my laptop and run propellor to re-image the drive with the properties of
+the host it belongs to. This is especially useful when the drive is too
+large to make a DiskImage on my laptop.
+
+Open design questions:
+
+* How to uniquely identify which removable drive belongs to which Host?
+  Could use partition uuids for updating an already imaged drive, but not
+  for the initial build.
+
+  /dev/disk/by-id/ seems a good way to go. Eg for a USB drive I have,
+  "/dev/disk/by-id/usb-LaCie_iamaKey_37637172f536ba-0:0" probably uniquely
+  identifies it, at least as long as the manufacturer is not reusing serial
+  numbers.
+
+  One problem with /dev/disk/by-id/ is, if a removable drive is attached
+  on a different bus (ie, a SATA drive might be connected via SATA or a USB
+  dock), it won't appear the same there.
+
+  Could instead use eg `udevadm info --query=all -n /dev/sdb`, which
+  breaks out `ID_SERIAL`. However, this would be harder for the user to
+  look up. Or, could parse the /dev/disk/by-id/ name, excluding the bus
+  part of it.
+
+* Should an already imaged drive be updated incrementally or re-imaged?
+  Seems both cases would be useful, the former especially for incrementally
+  configuring it, the latter to bring it up from a clean state.
+  If it defaults to updating, the user could force a re-image by deleting
+  the partitions from the drive manually.
+
+secret-project has some code for /target which might be reusable here.
+
+--[[Joey]]

typo
diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_9_68b3d9ca04283c2400f5b23e486bb4b7._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_9_68b3d9ca04283c2400f5b23e486bb4b7._comment
index c7d7e384..fd5b25e4 100644
--- a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_9_68b3d9ca04283c2400f5b23e486bb4b7._comment
+++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_9_68b3d9ca04283c2400f5b23e486bb4b7._comment
@@ -49,7 +49,7 @@ Let's see.. this works with the gpt example:
 
 	(parted) mkpart primary fat32 4194304B 16.777215MB
 	(parted) mkpart primary ext2 16777216B 167.772159MB
-	(parted) mkpart primary ext4 167772160B 660.944383MB
+	(parted) mkpart primary ext4 167772160B 1660.944383MB
 
 That lets parted end the last partition right at the ideal 1660927487B.
 The previous two partitions end right where propellor expects.

fix location
diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_7_ad9ea2799890df2dfce4f0cc99e397e9/comment_1_68b3d9ca04283c2400f5b23e486bb4b7._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_9_68b3d9ca04283c2400f5b23e486bb4b7._comment
similarity index 100%
rename from doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_7_ad9ea2799890df2dfce4f0cc99e397e9/comment_1_68b3d9ca04283c2400f5b23e486bb4b7._comment
rename to doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_9_68b3d9ca04283c2400f5b23e486bb4b7._comment

fuzzy partition end location for parted
This should fix the reversion in GPT partition creation. See my long
comment for the gory details.
This commit was sponsored by Peter on Patreon.
diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_7_ad9ea2799890df2dfce4f0cc99e397e9/comment_1_68b3d9ca04283c2400f5b23e486bb4b7._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_7_ad9ea2799890df2dfce4f0cc99e397e9/comment_1_68b3d9ca04283c2400f5b23e486bb4b7._comment
new file mode 100644
index 00000000..c7d7e384
--- /dev/null
+++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_7_ad9ea2799890df2dfce4f0cc99e397e9/comment_1_68b3d9ca04283c2400f5b23e486bb4b7._comment
@@ -0,0 +1,62 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2017-12-21T19:44:45Z"
+ content="""
+Reproduced it with that information.
+
+	ghci> calcPartedParamsSize guexPartTable
+	(["mklabel","gpt","mkpart","primary","fat32","4194304B","16777215B","set","1","esp","on","mkpart","primary","ext2","16777216B","167772159B","mkpart","primary","ext4","167772160B","1660944383B"],1660944384)
+	joey@darkstar:~>dd if=/dev/zero of=test bs=1M count=1584
+	joey@darkstar:~>parted test
+	(parted) p
+	Model:  (file)
+	Disk /home/joey/test: 1661MB
+	Sector size (logical/physical): 512B/512B
+	(parted) mklabel gpt
+	(parted) mkpart primary fat32 4194304B 16777215B
+	(parted) mkpart primary ext2 16777216B 167772159B
+	(parted) mkpart primary ext4 167772160B 1660944383B
+	Warning: You requested a partition from 168MB to 1661MB (sectors 327680..3244031).
+	The closest location we can manage is 168MB to 1661MB (sectors 327680..3243998).
+
+The problem only occurs with the gpt partition table. With "mklabel msdos",
+the mkpart command succeeds. 
+
+So, gpt must have an additional restriction
+of some kind. I don't know what. The highest end position that parted
+will accept for that partition is 1660927487B; slightly smaller partitions
+are accepted. It's not a requirement that the position or size be divisible
+by anything in particular. Perhaps gpt needs some amount of reserved space
+at the end of the disk or something.
+
+Before 4MiB alignment was added, here's what 
+propellor did for the same PartTable, which worked.
+
+	mkpart primary ext4 160MB 1649MB
+
+It would be good for propellor to not need to know about all the minutia of
+partition tables. Seems that the way it used to call parted gave it enough
+wiggle room that it avoided this kind of problem.
+	
+To make parititions well aligned, propellor needs to precisely control where
+they begin (since parted does not have a way to configure modern 
+alignment requirments). Perhaps propellor could precisely specify where a
+partition begins, but use the "MB" to leave wiggle room in where it ends
+so parted can pick a suitable end point.
+
+Let's see.. this works with the gpt example:
+
+	(parted) mkpart primary fat32 4194304B 16.777215MB
+	(parted) mkpart primary ext2 16777216B 167.772159MB
+	(parted) mkpart primary ext4 167772160B 660.944383MB
+
+That lets parted end the last partition right at the ideal 1660927487B.
+The previous two partitions end right where propellor expects.
+(Hopefully parted never rounds a MB value *up*!)
+
+Ok, I've convinced myself to make propellor use this wacky technique
+of B for the start position and fractional MB for the end position!
+I've implemented it, hopefully my analysis above is good to make
+this work with all the different kinds of partition tables.
+"""]]
diff --git a/src/Propellor/Property/Parted.hs b/src/Propellor/Property/Parted.hs
index 38c55b93..be12933d 100644
--- a/src/Propellor/Property/Parted.hs
+++ b/src/Propellor/Property/Parted.hs
@@ -85,8 +85,8 @@ calcPartedParamsSize (PartTable tabletype alignment parts) =
 		[ "mkpart"
 		, pval (partType p)
 		, pval (partFs p)
-		, partpos startpos
-		, partpos endpos
+		, partposexact startpos
+		, partposfuzzy endpos
 		] ++ case partName p of
 			Just n -> ["name", show partnum, n]
 			Nothing -> []
@@ -95,14 +95,29 @@ calcPartedParamsSize (PartTable tabletype alignment parts) =
 		in calcparts (partnum+1) endpos ps
 			(c ++ mkpart partnum startpos (endpos-1) p : map (mkflag partnum) (partFlags p))
 	calcparts _ endpos [] c = (c, endpos)
-	partpos n
-		| n > 0 = val n ++ "B"
+
+	-- Exact partition position value for parted.
+	-- For alignment to work, the start of a partition must be
+	-- specified exactly.
+	partposexact n
+		| n > 0 = show n ++ "B"
 		-- parted can't make partitions smaller than 1MB;
 		-- avoid failure in edge cases
 		| otherwise = "1MB"
+	
+	-- Fuzzy partition position valie for parted.
+	-- This is used to specify the end of the partition,
+	-- parted takes the "MB" as license to slightly reduce the
+	-- partition size when something about the partition table
+	-- does not allow the partition to end exactly at the position.
+	partposfuzzy n
+		| n > 0 = show (fromIntegral n / 1000000) ++ "MB"
+		| otherwise = "1MB"
+
 	-- Location of the start of the first partition,
 	-- leaving space for the partition table, and aligning.
 	firstpos = align partitionTableOverhead
+	
 	align = alignTo alignment
 
 -- | Runs parted on a disk with the specified parameters.

Added a comment
diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_8_ad50abb937a9801a4db2293765137b75._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_8_ad50abb937a9801a4db2293765137b75._comment
new file mode 100644
index 00000000..4e102a26
--- /dev/null
+++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_8_ad50abb937a9801a4db2293765137b75._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="gueux"
+ avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8"
+ subject="comment 8"
+ date="2017-12-21T20:40:56Z"
+ content="""
+parted seems pretty hairy with partition alignment. In case it's too hard to integrate parted with propellor, maybe fdisk would be easier?
+"""]]

Added a comment
diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_7_ad9ea2799890df2dfce4f0cc99e397e9._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_7_ad9ea2799890df2dfce4f0cc99e397e9._comment
new file mode 100644
index 00000000..f273d3b0
--- /dev/null
+++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_7_ad9ea2799890df2dfce4f0cc99e397e9._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="gueux"
+ avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8"
+ subject="comment 7"
+ date="2017-12-21T18:54:32Z"
+ content="""
+1660944384
+"""]]

more
diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_6_8c454f014e0cf4e6b3af9b8f68f987fa._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_6_8c454f014e0cf4e6b3af9b8f68f987fa._comment
new file mode 100644
index 00000000..711fc21e
--- /dev/null
+++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_6_8c454f014e0cf4e6b3af9b8f68f987fa._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 6"""
+ date="2017-12-21T18:51:01Z"
+ content="""
+Oh also need the size of /srv/router.img in bytes.
+"""]]

Added a comment
diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_5_95af19d3f8e01525a616b48e376c3326._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_5_95af19d3f8e01525a616b48e376c3326._comment
new file mode 100644
index 00000000..6eaa60ab
--- /dev/null
+++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_5_95af19d3f8e01525a616b48e376c3326._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="gueux"
+ avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8"
+ subject="comment 5"
+ date="2017-12-21T16:21:50Z"
+ content="""
+    PartTable GPT (Alignment 4194304) [Partition {partType = Primary, partSize = MegaBytes 10, partFs = VFAT, partMkFsOpts = [], partFlags = [(EspFlag,True)], partName = Nothing},Partition {partType = Primary, partSize = MegaBytes 150, partFs = EXT2, partMkFsOpts = [], partFlags = [], partName = Nothing},Partition {partType = Primary, partSize = MegaBytes 1489, partFs = EXT4, partMkFsOpts = [], partFlags = [], partName = Nothing}]
+"""]]

comment
diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_4_021311b587601d76c64afe06638e1fef._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_4_021311b587601d76c64afe06638e1fef._comment
new file mode 100644
index 00000000..ae5f6463
--- /dev/null
+++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_4_021311b587601d76c64afe06638e1fef._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2017-12-21T16:06:56Z"
+ content="""
+That's definitely due to the alignment changes, I knew those changes
+could run afoul of parted's checks, but in my tests they seemed to work.
+
+Could you paste /srv/router.img.parttable, that should have enough
+infromation for me to reproduce the problem.
+"""]]

Added a comment
diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_3_f2ec6998ed728f42cdb23116dbce8ade._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_3_f2ec6998ed728f42cdb23116dbce8ade._comment
new file mode 100644
index 00000000..8bf91368
--- /dev/null
+++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_3_f2ec6998ed728f42cdb23116dbce8ade._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="gueux"
+ avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8"
+ subject="comment 3"
+ date="2017-12-21T09:11:23Z"
+ content="""
+OK.
+I tried to run propellor again, I got a new error (probably related to the recent alignment changes):
+
+    ...
+    creating /srv/router.img of size 1.66 gigabytes
+    Error: You requested a partition from 168MB to 1661MB (sectors 327680..3244031).
+    The closest location we can manage is 168MB to 1661MB (sectors 327680..3243998).
+    laptop built disk image /srv/router.img ... failed
+    laptop overall ... failed
+
+"""]]

Grub.boots, Grub.bootsMounted: Pass --target to grub-install.
This is to support eg, coreboot. The GrubTarget passed to Grub.installed
is introspected to determine --target. If multiple grubs are installed,
it currently doesn't pass any --target. Might make more sense to run
grub-install repeatedly, but I don't know if that case is sane at all.
The Xen -> "x86_64-xen" mapping is kind of arbitrarily
chosen since there's a i386-xen available too. I don't know when that
case would be used in any case though; chainPVGrub uses installed Xen,
but it does not run grub-install. If this does become a problem,
would probably need to split it into Xen64 and Xen32.
Renamed BIOS to GrubTarget in passing to match grub's terminology; BIOS was
kind of a joke term for this in propellor.
This commit was sponsored by Francois Marier on Patreon.
diff --git a/debian/changelog b/debian/changelog
index 3da0622f..c1694108 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -13,6 +13,7 @@ propellor (5.2.0) UNRELEASED; urgency=medium
     chroot.
   * Fix bug in unmountBelow that caused unmounting of nested mounts to
     fail.
+  * Grub.boots, Grub.bootsMounted: Pass --target to grub-install.
 
  -- Joey Hess <id@joeyh.name>  Wed, 29 Nov 2017 11:45:08 -0400
 
diff --git a/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_10_4cfd25f81e2ed3a0cc491558038e347b._comment b/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_10_4cfd25f81e2ed3a0cc491558038e347b._comment
new file mode 100644
index 00000000..a6eb510a
--- /dev/null
+++ b/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_10_4cfd25f81e2ed3a0cc491558038e347b._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 10"""
+ date="2017-12-21T04:05:40Z"
+ content="""
+Implemented --target passing based on Grub.installed's Info.
+"""]]
diff --git a/src/Propellor/Property/DiskImage.hs b/src/Propellor/Property/DiskImage.hs
index 1f4f8118..24459476 100644
--- a/src/Propellor/Property/DiskImage.hs
+++ b/src/Propellor/Property/DiskImage.hs
@@ -17,7 +17,7 @@ module Propellor.Property.DiskImage (
 	imageRebuiltFor,
 	imageBuiltFrom,
 	imageExists,
-	Grub.BIOS(..),
+	GrubTarget(..),
 ) where
 
 import Propellor.Base
@@ -221,7 +221,7 @@ imageBuilt' rebuild img mkchroot tabletype partspec =
 	-- installed.
 	final = case fromInfo (containerInfo chroot) of
 		[] -> unbootable "no bootloader is installed"
-		[GrubInstalled] -> grubFinalized
+		[GrubInstalled grubtarget] -> grubFinalized grubtarget
 		[UbootInstalled p] -> ubootFinalized p
 		[FlashKernelInstalled] -> flashKernelFinalized
 		[UbootInstalled p, FlashKernelInstalled] -> 
@@ -454,9 +454,10 @@ unbootable msg = \_ _ _ -> property desc $ do
   where
 	desc = "image is not bootable"
 
-grubFinalized :: Finalization
-grubFinalized _img mnt loopdevs = Grub.bootsMounted mnt wholediskloopdev
-	`describe` "disk image boots using grub"
+grubFinalized :: GrubTarget -> Finalization
+grubFinalized grubtarget _img mnt loopdevs = 
+	Grub.bootsMounted mnt wholediskloopdev grubtarget
+		`describe` "disk image boots using grub"
   where
 	-- It doesn't matter which loopdev we use; all
 	-- come from the same disk image, and it's the loop dev
diff --git a/src/Propellor/Property/Grub.hs b/src/Propellor/Property/Grub.hs
index d0516dc8..a23f12e4 100644
--- a/src/Propellor/Property/Grub.hs
+++ b/src/Propellor/Property/Grub.hs
@@ -1,4 +1,15 @@
-module Propellor.Property.Grub where
+module Propellor.Property.Grub (
+	GrubDevice,
+	OSDevice,
+	GrubTarget(..),
+	installed,
+	mkConfig,
+	installed',
+	boots,
+	bootsMounted,
+	TimeoutSecs,
+	chainPVGrub
+) where
 
 import Propellor.Base
 import qualified Propellor.Property.File as File
@@ -14,40 +25,36 @@ type GrubDevice = String
 -- | Eg, \"\/dev/sda\"
 type OSDevice = String
 
-type TimeoutSecs = Int
-
--- | Types of machines that grub can boot.
-data BIOS = PC | EFI64 | EFI32 | Coreboot | Xen
-
 -- | Installs the grub package. This does not make grub be used as the
 -- bootloader.
 --
 -- This includes running update-grub, unless it's run in a chroot.
-installed :: BIOS -> Property (HasInfo + DebianLike)
-installed bios = installed' bios 
+installed :: GrubTarget -> Property (HasInfo + DebianLike)
+installed grubtarget = installed' grubtarget 
 	`onChange` (check (not <$> inChroot) mkConfig)
 
--- Run update-grub, to generate the grub boot menu. It will be
+-- | Run update-grub, to generate the grub boot menu. It will be
 -- automatically updated when kernel packages are installed.
 mkConfig :: Property DebianLike
 mkConfig = tightenTargets $ cmdProperty "update-grub" []
 	`assume` MadeChange
 
 -- | Installs grub; does not run update-grub.
-installed' :: BIOS -> Property (HasInfo + DebianLike)
-installed' bios = setInfoProperty aptinstall
-	(toInfo [GrubInstalled])
+installed' :: GrubTarget -> Property (HasInfo + DebianLike)
+installed' grubtarget = setInfoProperty aptinstall
+	(toInfo [GrubInstalled grubtarget])
 	`describe` "grub package installed"
   where
 	aptinstall = Apt.installed [debpkg]
-	debpkg = case bios of
+	debpkg = case grubtarget of
 		PC -> "grub-pc"
 		EFI64 -> "grub-efi-amd64"
 		EFI32 -> "grub-efi-ia32"
 		Coreboot -> "grub-coreboot"
 		Xen -> "grub-xen"
 
--- | Installs grub onto a device, so the system can boot from that device.
+-- | Installs grub onto a device's boot loader, 
+-- so the system can boot from that device.
 --
 -- You may want to install grub to multiple devices; eg for a system
 -- that uses software RAID.
@@ -57,9 +64,24 @@ installed' bios = setInfoProperty aptinstall
 -- to arrange for this property to only run once, by eg making it be run
 -- onChange after OS.cleanInstallOnce.
 boots :: OSDevice -> Property Linux
-boots dev = tightenTargets $ cmdProperty "grub-install" [dev]
-	`assume` MadeChange
-	`describe` ("grub boots " ++ dev)
+boots dev = property' ("grub boots " ++ dev) $ \w -> do
+	grubtarget <- askInfo
+	let ps = case grubtarget of
+		[GrubInstalled t] -> [targetParam t]
+		_ -> []
+	ensureProperty w $
+		cmdProperty "grub-install" (ps ++ [dev])
+			`assume` MadeChange
+
+targetParam :: GrubTarget -> String
+targetParam t = "--target=" ++ case t of
+	PC -> "i386-pc"
+	EFI64 -> "i386-efi"
+	EFI32 -> "x86_64-efi"
+	Coreboot -> "i386-coreboot"
+	Xen -> "x86_64-xen"
+
+type TimeoutSecs = Int
 
 -- | Use PV-grub chaining to boot
 --
@@ -95,8 +117,8 @@ chainPVGrub rootdev bootdev timeout = combineProperties desc $ props
 -- at a particular directory. The OSDevice should be the underlying disk
 -- device that grub will be installed to (generally a whole disk, 
 -- not a partition).
-bootsMounted :: FilePath -> OSDevice -> Property Linux
-bootsMounted mnt wholediskdev = combineProperties desc $ props
+bootsMounted :: FilePath -> OSDevice -> GrubTarget -> Property Linux
+bootsMounted mnt wholediskdev grubtarget = combineProperties desc $ props
 	-- remove mounts that are done below to make sure the right thing
 	-- gets mounted
 	& cleanupmounts
@@ -112,7 +134,7 @@ bootsMounted mnt wholediskdev = combineProperties desc $ props
 	& inchroot "update-grub" []
 		`assume` MadeChange
 	& check haveosprober (inchroot "chmod" ["+x", osprober])
-	& inchroot "grub-install" [wholediskdev]
+	& inchroot "grub-install" [targetParam grubtarget, wholediskdev]
 		`assume` MadeChange
 	& cleanupmounts
 	-- sync all buffered changes out to the disk in case it's
diff --git a/src/Propellor/Types/Bootloader.hs b/src/Propellor/Types/Bootloader.hs
index fd929d7e..65117bd2 100644
--- a/src/Propellor/Types/Bootloader.hs
+++ b/src/Propellor/Types/Bootloader.hs
@@ -7,13 +7,16 @@ import Propellor.Types.Info
 
 -- | Boot loader installed on a host.
 data BootloaderInstalled
-	= GrubInstalled
+	= GrubInstalled GrubTarget
 	| FlashKernelInstalled
 	| UbootInstalled (FilePath -> FilePath -> Property Linux)
 	deriving (Typeable)
 
+-- | Platforms that grub can boot.
+data GrubTarget = PC | EFI64 | EFI32 | Coreboot | Xen
+
 instance Show BootloaderInstalled where
-	show GrubInstalled = "GrubInstalled"
+	show (GrubInstalled _) = "GrubInstalled"

(Diff truncated)
second thought
diff --git a/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_9_b0ebdfabdc973c7e4a24825d5ab327d2._comment b/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_9_b0ebdfabdc973c7e4a24825d5ab327d2._comment
new file mode 100644
index 00000000..683e7989
--- /dev/null
+++ b/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_9_b0ebdfabdc973c7e4a24825d5ab327d2._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 9"""
+ date="2017-12-21T03:32:59Z"
+ content="""
+I forgot -- Grub.installed already sets Info to say what BIOS
+it was installed for. So, bootsMounted can just get that Info and
+pass the appropriate --target.
+"""]]

comment
diff --git a/config.hs b/config.hs
index 97d90636..ec313725 120000
--- a/config.hs
+++ b/config.hs
@@ -1 +1 @@
-joeyconfig.hs
\ No newline at end of file
+config-simple.hs
\ No newline at end of file
diff --git a/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_8_7f0b14866c6473f2218fc6ae97a9adee._comment b/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_8_7f0b14866c6473f2218fc6ae97a9adee._comment
new file mode 100644
index 00000000..bdf10e6f
--- /dev/null
+++ b/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_8_7f0b14866c6473f2218fc6ae97a9adee._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 8"""
+ date="2017-12-20T22:21:35Z"
+ content="""
+The debian grub-pc package creates /boot/grub in its postinst.
+
+It seems that grub-coreboot does not. I don't know why.
+Seems like it could be considered a bug to me; installing the package
+and then running grub-mkconfig ought to just work.  I'm going to file a bug
+report.
+
+Anyway, I suppose propellor ought to work around the bug by making sure
+/boot/grub exists.
+"""]]
diff --git a/privdata/relocate b/privdata/relocate
deleted file mode 100644
index 271692d8..00000000
--- a/privdata/relocate
+++ /dev/null
@@ -1 +0,0 @@
-.joeyconfig

two diskimage edge case fixes
* DiskImage: Fix rsync crash when a mount point does not exist in the
chroot.
* Fix bug in unmountBelow that caused unmounting of nested mounts to
fail.
This commit was sponsored by Jack Hill on Patreon.
diff --git a/debian/changelog b/debian/changelog
index bfb884ce..3da0622f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -9,6 +9,10 @@ propellor (5.2.0) UNRELEASED; urgency=medium
   * DiskImage: Use safeAlignment. It didn't seem worth making the
     alignment configurable here.
   * Fixed rounding bug in Parted.calcPartTable.
+  * DiskImage: Fix rsync crash when a mount point does not exist in the
+    chroot.
+  * Fix bug in unmountBelow that caused unmounting of nested mounts to
+    fail.
 
  -- Joey Hess <id@joeyh.name>  Wed, 29 Nov 2017 11:45:08 -0400
 
diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_2_f90109eb016065586225fc59674c431c._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_2_f90109eb016065586225fc59674c431c._comment
new file mode 100644
index 00000000..d8655a59
--- /dev/null
+++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_2_f90109eb016065586225fc59674c431c._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2017-12-20T21:36:36Z"
+ content="""
+AFAICS, DiskImage.imageFinalized creates any mount points that were not
+rsynced over from the chroot. But, I guess that partitionsPopulated is
+expecting the mount point to exist in order to rsync its content over,
+and if nothing created /boot/efi that would explain the rsync error.
+I've added a check to prevent that problem.
+
+As for the unmount problem, it's a problem with the order
+it traverses the mount points for unmounting. That is using
+"unmountBelow" with the directory where the disk image partitions
+are loop mounted. If that unmounts `boot` first, it will implicitly
+unmount `boot/efi` (due to --lazy) and then will fail when it
+tries to explicitly unmount it. Added sorting that should fix that.
+
+Let me know how that goes, I've not tested it with your config.
+"""]]
diff --git a/src/Propellor/Property/DiskImage.hs b/src/Propellor/Property/DiskImage.hs
index 79865db4..c9998d3c 100644
--- a/src/Propellor/Property/DiskImage.hs
+++ b/src/Propellor/Property/DiskImage.hs
@@ -274,13 +274,18 @@ partitionsPopulated chrootdir mnts mntopts devs = property' desc $ \w ->
 	desc = "partitions populated from " ++ chrootdir
 
 	go _ Nothing _ _ = noChange
-	go w (Just mnt) mntopt loopdev = withTmpDir "mnt" $ \tmpdir -> bracket
-		(liftIO $ mount "auto" (partitionLoopDev loopdev) tmpdir mntopt)
-		(const $ liftIO $ umountLazy tmpdir)
-		$ \ismounted -> if ismounted
-			then ensureProperty w $
-				syncDirFiltered (filtersfor mnt) (chrootdir ++ mnt) tmpdir
-			else return FailedChange
+	go w (Just mnt) mntopt loopdev = ifM (liftIO $ doesDirectoryExist srcdir) $
+		( withTmpDir "mnt" $ \tmpdir -> bracket
+			(liftIO $ mount "auto" (partitionLoopDev loopdev) tmpdir mntopt)
+			(const $ liftIO $ umountLazy tmpdir)
+			$ \ismounted -> if ismounted
+				then ensureProperty w $
+					syncDirFiltered (filtersfor mnt) srcdir tmpdir
+				else return FailedChange
+		, return NoChange
+		)
+	  where
+		srcdir = chrootdir ++ mnt
 
 	filtersfor mnt =
 		let childmnts = map (drop (length (dropTrailingPathSeparator mnt))) $
diff --git a/src/Propellor/Property/Mount.hs b/src/Propellor/Property/Mount.hs
index c047161d..e8f3f092 100644
--- a/src/Propellor/Property/Mount.hs
+++ b/src/Propellor/Property/Mount.hs
@@ -149,4 +149,6 @@ umountLazy mnt =
 unmountBelow :: FilePath -> IO ()
 unmountBelow d = do
 	submnts <- mountPointsBelow d
-	forM_ submnts umountLazy
+	-- sort so sub-mounts are unmounted before the mount point
+	-- containing them
+	forM_ (sort submnts) umountLazy

Added a comment
diff --git a/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_7_cb0a1052e1ad421d4c1f2b15c30a7f06._comment b/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_7_cb0a1052e1ad421d4c1f2b15c30a7f06._comment
new file mode 100644
index 00000000..f5fcf414
--- /dev/null
+++ b/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_7_cb0a1052e1ad421d4c1f2b15c30a7f06._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="gueux"
+ avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8"
+ subject="comment 7"
+ date="2017-12-20T21:54:30Z"
+ content="""
+But that seems to fail without switching the two (see my original problem and my first comment), or is there another problem?
+
+I can provide the patch for BIOS tomorrow.
+"""]]

response
diff --git a/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_6_2dac20b315875c93e17e6733a42264ff._comment b/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_6_2dac20b315875c93e17e6733a42264ff._comment
new file mode 100644
index 00000000..37712317
--- /dev/null
+++ b/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_6_2dac20b315875c93e17e6733a42264ff._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 6"""
+ date="2017-12-20T21:33:31Z"
+ content="""
+update-grub generates the grub config file, so AFAIK it needs to come
+before grub-install.
+
+If you can do the patches for BIOS please do.
+"""]]

Added a comment
diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_1_af7d83cf29a578901fcf9aca0ea2426b._comment b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_1_af7d83cf29a578901fcf9aca0ea2426b._comment
new file mode 100644
index 00000000..e32e0870
--- /dev/null
+++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created/comment_1_af7d83cf29a578901fcf9aca0ea2426b._comment
@@ -0,0 +1,27 @@
+[[!comment format=mdwn
+ username="gueux"
+ avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8"
+ subject="comment 1"
+ date="2017-12-20T19:00:54Z"
+ content="""
+When I add a `File.dirExists \"/boot/efi\"` property, it goes further, but fails at the end:
+
+                  0 100%    0.00kB/s    0:00:00 (xfr#0, to-chk=0/1)
+         26,454,269 100%  163.62MB/s    0:00:00 (xfr#5, to-chk=0/8)
+        770,765,173  99%   53.06MB/s    0:00:13 (xfr#26256, to-chk=0/33584)   
+    update-initramfs: Generating /boot/initrd.img-4.9.0-4-amd64
+    Installing for x86_64-efi platform.
+    Installation finished. No error reported.
+    Generating grub configuration file ...
+    Found linux image: /boot/vmlinuz-4.9.0-4-amd64
+    Found initrd image: /boot/initrd.img-4.9.0-4-amd64
+    done
+    umount: /tmp/mntAMcRoY/boot/efi: not mounted.
+    ** fatal error: failed unmounting /tmp/mntAMcRoY/boot/efi
+    ** warning: /tmp/mntAMcRoY: removeDirectoryRecursive:removeContentsRecursive:removeDirectory: resource busy (Device or resource busy)
+    device-mapper: remove ioctl on loop0p3  failed: Device or resource busy
+    loop deleted : /dev/loop0
+    laptop built disk image /srv/router.img ... failed
+    laptop overall ... failed
+
+"""]]

diff --git a/doc/forum/imageBuiltFor_mount_points_not_automatically_created.mdwn b/doc/forum/imageBuiltFor_mount_points_not_automatically_created.mdwn
new file mode 100644
index 00000000..003bc716
--- /dev/null
+++ b/doc/forum/imageBuiltFor_mount_points_not_automatically_created.mdwn
@@ -0,0 +1,52 @@
+I'm trying to build an image for my router, which (after all) seems to need Grub.EFI64...
+
+Here is my config:
+
+    caillette = host hn $ props
+        & hasPartitionTableType GPT
+        & hasPartition
+            ( partition VFAT
+                `mountedAt` "/boot/efi"
+                `partLocation` Beginning
+                `setSize` MegaBytes 10
+                `setFlag` EspFlag
+            )
+        & hasPartition
+            ( partition EXT2
+                `mountedAt` "/boot"
+                `setSize` MegaBytes 150
+            )
+        & hasPartition
+            ( partition EXT4
+                `mountedAt` "/"
+                `partLocation` End
+                `addFreeSpace` MegaBytes 500
+            )
+        & standardSystem (Stable "stretch") X86_64
+            [ "home router" ]
+        & Apt.installed ["linux-image-amd64"]
+        & serialGrub
+      where
+        serialGrub :: Property (HasInfo + DebianLike)
+        serialGrub = "/etc/default/grub" `File.containsLines`
+            [ "GRUB_CMDLINE_LINUX=\"console=ttyS0,115200n8 biosdevname=0\""
+            , "GRUB_SERIAL_COMMAND=\"serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1\""
+            , "GRUB_TERMINAL=serial"
+            ]
+            -- `onChange` Grub.mkConfig
+            `requires` Grub.installed Grub.EFI64
+            `describe` "GRUB configured for PC Engines' APU2 serial console"
+
+When running propellor it fails with:
+
+    ...
+    mkfs.fat 4.1 (2017-01-24)
+    loop deleted : /dev/loop0
+    rsync: change_dir "/srv/router.img.chroot/boot/efi" failed: No such file or directory (2)
+                  0 100%    0.00kB/s    0:00:00 (xfr#0, to-chk=0/0)rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1196) [sender=3.1.2]
+    
+    loop deleted : /dev/loop0
+    laptop built disk image /srv/router.img ... failed
+    laptop overall ... failed
+
+Shouldn't /boot/efi be automatically created?

Added a comment
diff --git a/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_5_2de24368d2891a5d44107ab7a858f3c1._comment b/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_5_2de24368d2891a5d44107ab7a858f3c1._comment
new file mode 100644
index 00000000..08f78521
--- /dev/null
+++ b/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_5_2de24368d2891a5d44107ab7a858f3c1._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="gueux"
+ avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8"
+ subject="comment 5"
+ date="2017-12-20T18:19:49Z"
+ content="""
+Are you preparing a patch to pass BIOS to Grub.bootsMounted and Grub.boots or do you want me to do so?
+"""]]

Added a comment
diff --git a/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_4_e30b385d9b6a5e41809eb7b482d15e46._comment b/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_4_e30b385d9b6a5e41809eb7b482d15e46._comment
new file mode 100644
index 00000000..ab320e25
--- /dev/null
+++ b/doc/forum/grub-mkconfig_incorrectly_run_by_imageBuiltFor__63__/comment_4_e30b385d9b6a5e41809eb7b482d15e46._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="gueux"
+ avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8"
+ subject="comment 4"
+ date="2017-12-20T18:01:33Z"
+ content="""
+Should update-grub and grub-install be swapped (as I did) in Grub.bootsMounted?
+
+
+"""]]

Added a comment
diff --git a/doc/forum/parted:_invalid_token:_fat/comment_3_76fd3da6d79f4a369d01ecfad8300025._comment b/doc/forum/parted:_invalid_token:_fat/comment_3_76fd3da6d79f4a369d01ecfad8300025._comment
new file mode 100644
index 00000000..0d45590a
--- /dev/null
+++ b/doc/forum/parted:_invalid_token:_fat/comment_3_76fd3da6d79f4a369d01ecfad8300025._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="gueux"
+ avatar="http://cdn.libravatar.org/avatar/2982bac2c2cd94ab3860efb189deafc8"
+ subject="comment 3"
+ date="2017-12-20T17:59:02Z"
+ content="""
+OK, great!
+"""]]

Parted: Fix names used for FAT and VFAT partitions.
Use "fat32" for both; these are not distinguished at the partition table
level.
This commit was sponsored by Henrik Riomar on Patreon.
diff --git a/debian/changelog b/debian/changelog
index b738f874..94cbca20 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,7 @@
 propellor (5.1.1) UNRELEASED; urgency=medium
 
   * bootstrappedFrom: Set up local privdata file.
+  * Parted: Fix names used for FAT and VFAT partitions.
 
  -- Joey Hess <id@joeyh.name>  Wed, 29 Nov 2017 11:45:08 -0400
 
diff --git a/doc/forum/parted:_invalid_token:_fat/comment_2_88db9d05c7e4d028f35d98ba6b082d55._comment b/doc/forum/parted:_invalid_token:_fat/comment_2_88db9d05c7e4d028f35d98ba6b082d55._comment
new file mode 100644
index 00000000..292a4109
--- /dev/null
+++ b/doc/forum/parted:_invalid_token:_fat/comment_2_88db9d05c7e4d028f35d98ba6b082d55._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2017-12-20T17:25:11Z"
+ content="""
+I went ahead and made the change in parted.
+"""]]
diff --git a/src/Propellor/Property/Parted/Types.hs b/src/Propellor/Property/Parted/Types.hs
index 3350e008..e32df310 100644
--- a/src/Propellor/Property/Parted/Types.hs
+++ b/src/Propellor/Property/Parted/Types.hs
@@ -106,6 +106,8 @@ instance PartedVal Bool where
 	pval True = "on"
 	pval False = "off"
 
+-- This is used for creating partitions, not formatting partitions,
+-- so it's ok to use eg, fat32 for both FAT and VFAT.
 instance PartedVal Partition.Fs where
 	pval Partition.EXT2 = "ext2"
 	pval Partition.EXT3 = "ext3"
@@ -113,7 +115,7 @@ instance PartedVal Partition.Fs where
 	pval Partition.BTRFS = "btrfs"
 	pval Partition.REISERFS = "reiserfs"
 	pval Partition.XFS = "xfs"
-	pval Partition.FAT = "fat"
-	pval Partition.VFAT = "vfat"
+	pval Partition.FAT = "fat32"
+	pval Partition.VFAT = "fat32"
 	pval Partition.NTFS = "ntfs"
 	pval Partition.LinuxSwap = "linux-swap"