Package: live-boot Version: 1:20220505 Severity: wishlist Tags: patch Control: found -1 1:20190614
[Please do not Cc: me, for I’m “on the list,” so to say, and I try to reserve my inbox for private communication only. I’d have set up Mail-Followup-To:, but there doesn’t seem to be a way to make it point to the report being filed.] SquashFS support for file-level deduplication makes it more space-efficient to have several distinct Debian installs on a single SquashFS image, rather than have one image per install (as per the following syslinux.cfg example snippet.) LABEL bookworm-2022-08-20 ... APPEND ... boot=live toram=6300e90c.squashfs ... LABEL bookworm-2022-08-24 ... APPEND ... boot=live toram=6305aa79.squashfs ... This in turn can be used for tracking testing / unstable, or for having an image with conflicting packages installed (even though only one of any given set of such will be usable for a given boot.) Moreover, this allows for the SquashFS in question to be updated incrementally, rather than written anew each time, which is more friendly to flash-based storage devices; and also allows for booting into an earlier install should there be issues with the latest one. I hereby suggest that a subroot= option is implemented, to point to a subdirectory on the underlying read-only image to be used in place of its root; like, Syslinux-wise: LABEL bookworm-2022-08-24 ... APPEND ... boot=live toram=bookworm.squashfs subroot=x6305aa79 ... The overlay will then use lowerdir=/run/live/rootfs/bookworm .squashfs/x6305aa79 in place of /run/live/rootfs/bookworm .squashfs . FWIW, I’m using this feature for all my ‘live’ images for a couple of years now, but my configurations are somewhat similar, so I can’t claim that I’ve tested it extensively. Also, while we’re at it, I’ve followed the surrounding code’s style and used: subroot=*) ROOTINFIX="${_PARAMETER#subroot=}" ... union=*) UNIONTYPE="${_PARAMETER#union=}" ... But it sure is less redundant (and thus less error-prone) to use instead: subroot=*) ROOTINFIX="${_PARAMETER#*=}" ... union=*) UNIONTYPE="${_PARAMETER#*=}" ... Note that in the latter case there’s only one place the option name needs to be changed (or aliases added), if ever need arises. -- FSF associate member #7257 http://am-1.org/~ivan/
--- lib/live/boot/.9990-overlay.sh.~2022-08-23~ 2022-05-05 10:16:56 +0000 +++ lib/live/boot/9990-overlay.sh 2022-08-23 22:45:09 +0000 @@ -83,7 +83,7 @@ setup_unionfs () if [ -d "${image}" ] then # it is a plain directory: do nothing - rootfslist="${image} ${rootfslist}" + rootfslist="${image}${ROOTINFIX:+/$ROOTINFIX} ${rootfslist}" elif [ -f "${image}" ] then if losetup --help 2>&1 | grep -q -- "-r\b" @@ -106,7 +106,7 @@ setup_unionfs () esac mpoint=$(trim_path "${croot}/${imagename}") - rootfslist="${mpoint} ${rootfslist}" + rootfslist="${mpoint}${ROOTINFIX:+/$ROOTINFIX} ${rootfslist}" mount_options="" # Setup dm-verity support if a device has it supported @@ -188,9 +188,9 @@ setup_unionfs () log_begin_msg "Mounting \"${image_directory}\" on \"${croot}/filesystem\"" mount -t $(get_fstype "${image_directory}") -o ro,noatime "${image_directory}" "${croot}/filesystem" || \ panic "Can not mount ${image_directory} on ${croot}/filesystem" && \ - rootfslist="${croot}/filesystem ${rootfslist}" + rootfslist="${croot}/filesystem${ROOTINFIX:+/$ROOTINFIX} ${rootfslist}" # probably broken: - mount -o bind ${croot}/filesystem $mountpoint + mount -o bind "${croot}/filesystem${ROOTINFIX:+/$ROOTINFIX}" "$mountpoint" log_end_msg fi --- lib/live/boot/.9990-cmdline-old.~2022-08-23~ 2022-05-05 10:16:56 +0000 +++ lib/live/boot/9990-cmdline-old 2022-08-23 22:45:10 +0000 @@ -257,6 +257,11 @@ Cmdline_old () export ROOT ;; + subroot=*) + ROOTINFIX="${_PARAMETER#subroot=}" + export ROOTINFIX + ;; + union=*) UNIONTYPE="${_PARAMETER#union=}" export UNIONTYPE