diskimage-builder/diskimage_builder/lib
Ian Wienand 5284564071 Unmount internal mounts on finalise errors
This is only one line, but it takes a lot to untangle ...  basically
the current "correct" path is:

---
 mk_build_dir()
  -> sets trap trap_cleanup EXIT

 ... stuff ..

 mount_proc_dev_sys
  -> mounts $TMP_MOUNT_PATH/<proc,dev.sysfs>

 pre-finalise.d
 finalise.d

 unmount_image $TMP_BUILD_DIR/mnt # nb == $TMP_MOUNT_PATH
  -> unmount_dir()
   -> recursive unmount everything inside TMP_MOUNT_PATH

 TMP_IMAGE_PATH=$(dib-block-device getval image-path)
 export TMP_IMAGE_PATH

 dib-block-device umount
 dib-block-device cleanup

 ... actually cleanup directories ...
---

Our current failure exit trap does:

---
 dib-block-device umount
 unmount_image
 ...
---

Note this is the *opposite* of what is done in the correct exit path.
In the failure case, if a script fails in the finalise stages it leads
to /proc, /sys, /dev etc. still being mounted inside the image; the
"dib-block-device umount" call doesn't know anything about these
mounts and tries to unmount the parent directory, and we get a hard
failure with a busy mount, and all the mounts are subsequently leaked.

Note that "unmount_dir", which is ultimately called by
"unmount_image", already knows to skip those mounts that
"dib-block-device umount" manages (this is the DIB_MOUNTPOINTS list).
This is further evidence it should be called *before* the
dib-block-device umount.

Change-Id: Ibef3ce9d1167b9c4ff3d5717b113cd3ed374f5e3
2019-03-13 16:38:49 +11:00
..
common-defaults Support for Cloud Images on ppc64le for rhel7 and centos7 2017-06-29 15:44:26 +10:00
common-functions Make sure $TMP_BUILD_DIR/mnt is owned by root 2019-01-09 20:08:15 -08:00
dib-run-parts Add timestamp output filter 2017-06-16 15:58:50 +10:00
die Move elements & lib relative to diskimage_builder package 2016-11-01 17:27:41 -07:00
disk-image-create Fix a typo in the help message of disk-image-create 2018-11-23 09:09:31 +00:00
img-defaults Move elements & lib relative to diskimage_builder package 2016-11-01 17:27:41 -07:00
img-functions Unmount internal mounts on finalise errors 2019-03-13 16:38:49 +11:00
outfilter.py Use surrogateescape with outfilter.py 2018-05-25 11:48:14 +10:00
ramdisk-defaults Move elements & lib relative to diskimage_builder package 2016-11-01 17:27:41 -07:00
ramdisk-functions Remove use of 'which'. 2017-05-19 12:43:36 -07:00
ramdisk-image-create Move diskimage-image-create to an entry point 2016-11-02 05:12:11 +00:00