My recent change to move the making of mountpoints private into
do_umount actually made it ineffective. I tried to change things
so that we always made mountpoints private before unmounting them
but that ran into problems of its own. So I changed do_umount to
have a "private" flag ChrootableTarget.__exit__ could use to
request that mountpoints be made private before unmounting, which
makes things work again but I still don't see how to make a
generally robust "curtin unmount" command, as explained at length
in the comment I added.
curthooks: do not unconditionally copy e/n/interfaces to target
When I tried to install a more-minimal server image using curtin, it
failed in copy_interfaces because the image did not have an /etc/network
directory at all (full ubuntu-server images have this directory because
ethtool installs files in there). Fix this by shuffling around how the
$state_dir/interfaces file is handled a bit: basically it used to always
be created by the install commmand and then updated by the net-meta
command. Change this to have the file only be created by net-meta, then
curthooks can copy it if and only if it exists.
curthooks: do not add lvm devices filter when / is mutipathed
This code was added to defend against lvcreate seeing multiple paths to
a PV but the relevant udev rules already protect against this, and the
devices filter prevents assembling a VG containing an encrypted volume.
Permit arbitrary fstype values if preserve == true
Goal here is to enumerate more filesystem formats, ones that blkid
recognizes, but not claim in any way that we can create them.
This is useful for presenting existing filesystem partitions to users
in an installer, as otherwise they just get unhelpfully marked as
'unknown'.
The commmit "disk_handler: check wipe field when deciding whether to
reformat raids" fixed the case of putting a partition on an existing
raid but broke the case of putting a partition on a new RAID.
fix tearing down ChrootableTarget when mounts appear while it is set up
There are several bug reports that boil down to
ChrootableTarget.__exit__ failing to unmount bind mounts with "target is
busy". For example, ssh-ing in while running tends to do this, because
that creates a mount in /run and then umounting /target/run fails
because of the sub mount. Fix this by marking the mountpoints
recursively private and then unmounting them recursively.