Package: live-boot Version: 3.0~b10-1 Severity: important Tags: patch The squeeze version of live-boot supported using multiple squashfs images. This no longer works with the current version in sid. Multiple squashfs images are important for large live systems that should work from filesystems with a 4GB file size limit (e.g. iso9660).
While there was never support to create multiple squashfs images in live-build this was working in previous versions if the squashafs are manually split. IMO it's important to fix this regression in wheezy. The attached patch fixes this bug. Gaudenz -- System Information: Debian Release: wheezy/sid APT prefers testing APT policy: (800, 'testing'), (700, 'unstable'), (50, 'experimental') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 3.2.0-4-amd64 (SMP w/2 CPU cores) Locale: LANG=de_CH.UTF-8, LC_CTYPE=de_CH.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash
>From a82bfc59e7046e5388545b9ae0e3b3306be3617d Mon Sep 17 00:00:00 2001 From: Gaudenz Steinlin <gaud...@debian.org> Date: Fri, 21 Dec 2012 17:03:09 +0100 Subject: [PATCH] Fix support for multiple squashfs images Support for multiple squashfs images got lost somewhen in the wheezy release cycle. This add support for an arbitrary number of readonly branches. Support for two branches was partially present, but not working corectly in all cases. --- scripts/boot/9990-misc-helpers.sh | 54 ++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/scripts/boot/9990-misc-helpers.sh b/scripts/boot/9990-misc-helpers.sh index 71ba7e1..d647c77 100755 --- a/scripts/boot/9990-misc-helpers.sh +++ b/scripts/boot/9990-misc-helpers.sh @@ -1197,11 +1197,12 @@ link_files () do_union () { - local unionmountpoint unionrw unionro1 unionro2 + local unionmountpoint unionrw unionro unionmountpoint="${1}" # directory where the union is mounted - unionrw="${2}" # branch where the union changes are stored - unionro1="${3}" # first underlying read-only branch (optional) - unionro2="${4}" # second underlying read-only branch (optional) + shift + unionrw="${1}" # branch where the union changes are stored + shift + unionro="${*}" # space separated list of read-only branches (optional) case "${UNIONTYPE}" in aufs) @@ -1225,13 +1226,12 @@ do_union () unionfs-fuse) unionmountopts="-o cow -o noinitgroups -o default_permissions -o allow_other -o use_ino -o suid" unionmountopts="${unionmountopts} ${unionrw}=${rw_opt}" - if [ -n "${unionro1}" ] - then - unionmountopts="${unionmountopts}:${unionro1}=${ro_opt}" - fi - if [ -n "${unionro2}" ] + if [ -n "${unionro}" ] then - unionmountopts="${unionmountopts}:${unionro2}=${ro_opt}" + for rofs in ${unionro} + do + unionmountopts="${unionmountopts}:${rofs}=${ro_opt}" + done fi ( sysctl -w fs.file-max=391524 ; ulimit -HSn 16384 unionfs-fuse ${unionmountopts} "${unionmountpoint}" ) && \ @@ -1240,21 +1240,27 @@ do_union () ;; overlayfs) - # XXX: can unionro2 be used? (overlayfs only handles two dirs, but perhaps they can be chained?) - # XXX: and can unionro1 be optional? i.e. can overlayfs skip lowerdir? - unionmountopts="-o noatime,lowerdir=${unionro1},upperdir=${unionrw}" + # XXX: can multiple unionro be used? (overlayfs only handles two dirs, but perhaps they can be chained?) + # XXX: and can unionro be optional? i.e. can overlayfs skip lowerdir? + if echo ${unionro} | grep -q " " + then + panic "Multiple lower filesystems are currently not supported with overlayfs (unionro = ${unionro})." + elif [ -z "${unionro}" ] + then + panic "Overlayfs needs at least one lower filesystem (read-only branch)." + fi + unionmountopts="-o noatime,lowerdir=${unionro},upperdir=${unionrw}" mount -t ${UNIONTYPE} ${unionmountopts} ${UNIONTYPE} "${unionmountpoint}" ;; *) unionmountopts="-o noatime,${noxino_opt},dirs=${unionrw}=${rw_opt}" - if [ -n "${unionro1}" ] - then - unionmountopts="${unionmountopts}:${unionro1}=${ro_opt}" - fi - if [ -n "${unionro2}" ] + if [ -n "${unionro}" ] then - unionmountopts="${unionmountopts}:${unionro2}=${ro_opt}" + for rofs in ${unionro} + do + unionmountopts="${unionmountopts}:${rofs}=${ro_opt}" + done fi mount -t ${UNIONTYPE} ${unionmountopts} ${UNIONTYPE} "${unionmountpoint}" ;; @@ -1491,15 +1497,13 @@ activate_custom_mounts () do if [ -n "${rootmnt}" ] then - rootfs_dest_backing="${d}/$(echo ${dest} | sed -e "s|${rootmnt}||")" + fs="${d}/$(echo ${dest} | sed -e "s|${rootmnt}||")" else - rootfs_dest_backing="${d}/${dest}" + fs="${d}/${dest}" fi - if [ -d "${rootfs_dest_backing}" ] + if [ -d "${fs}" ] then - break - else - rootfs_dest_backing="" + rootfs_dest_backing="${rootfs_dest_backing} ${fs}" fi done fi -- 1.7.10.4