From d1f766d2b8bca1654a6740ce759b3d7560505788 Mon Sep 17 00:00:00 2001 From: Joseph Carter Date: Thu, 6 Oct 2016 02:14:43 -0700 Subject: [PATCH] Fix umount_image (#22) * export-noobs/prerun.sh: Use nested mountpoint While it seems elegant and intuitive to use separate bootfs and rootfs mountpoints for compressing the partitions, doing so violates a precondition of unmount_image that they be mounted as a tree. This causes the image to not be properly unmounted and detached. A better solution might be to pack up the previous stage's chroot directory, but that rework can wait for the time being. scripts/common.sh: Output device name correctly A misplaced ) in unmount_image caused the loop device to be incorrectly identified, resulting in a fair bit of chaos trying to unmount other filesystems on /dev/mapper devices. Such as / on a LUKS-encrypted installation, for example. The unmount will fail as it should and build.sh will abort the build without any cleanup. Best to avoid that. These changes close RPi-Distro/pi-gen#19 --- export-noobs/prerun.sh | 7 +++---- scripts/common | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/export-noobs/prerun.sh b/export-noobs/prerun.sh index a531be6..6065ae8 100755 --- a/export-noobs/prerun.sh +++ b/export-noobs/prerun.sh @@ -14,13 +14,12 @@ BOOT_DEV=/dev/mapper/${LOOP_DEV}p1 ROOT_DEV=/dev/mapper/${LOOP_DEV}p2 mkdir -p ${STAGE_WORK_DIR}/rootfs -mkdir -p ${STAGE_WORK_DIR}/bootfs mkdir -p ${NOOBS_DIR} mount $ROOT_DEV ${STAGE_WORK_DIR}/rootfs -mount $BOOT_DEV ${STAGE_WORK_DIR}/bootfs +mount $BOOT_DEV ${STAGE_WORK_DIR}/rootfs/boot -tar -I pxz -C ${STAGE_WORK_DIR}/bootfs -cpf ${NOOBS_DIR}/boot.tar.xz . -tar -I pxz -C ${STAGE_WORK_DIR}/rootfs -cpf ${NOOBS_DIR}/root.tar.xz . +tar -I pxz -C ${STAGE_WORK_DIR}/rootfs/boot -cpf ${NOOBS_DIR}/boot.tar.xz . +tar -I pxz -C ${STAGE_WORK_DIR}/rootfs --one-file-system -cpf ${NOOBS_DIR}/root.tar.xz . unmount_image ${IMG_FILE} diff --git a/scripts/common b/scripts/common index 6db58e2..ad00c08 100644 --- a/scripts/common +++ b/scripts/common @@ -52,7 +52,7 @@ unmount_image(){ sleep 1 local LOOP_DEV=$(losetup -j ${1} | cut -f1 -d':') if [ -n "${LOOP_DEV}" ]; then - local MOUNTED_DIR=$(mount | grep $(basename ${LOOP_DEV} | head -n 1 | cut -f 3 -d ' ')) + local MOUNTED_DIR=$(mount | grep $(basename ${LOOP_DEV}) | head -n 1 | cut -f 3 -d ' ') if [ -n "${MOUNTED_DIR}" ]; then unmount $(dirname ${MOUNTED_DIR}) fi