[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#696494: Using multiple squashfs images does no longer work



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 <gaudenz@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


Reply to: