[SCM] live-boot branch, debian, updated. debian/3.0_a25-1-72-gfc7a680

Daniel Baumann daniel at debian.org
Thu Apr 5 06:21:39 UTC 2012


The following commit has been merged in the debian branch:
commit e3ad4752eb66317c2a9c21a76ff0a1b0ac53b32f
Author: Tails developers <amnesia at boum.org>
Date:   Thu Feb 9 12:18:56 2012 +0100

    Optionally mount custom mounts as unions.
    
    This can potentially save a lot of space, and this type of persistence
    doesn't hide changes to the read-only filesystem which can be both
    good and bad.

diff --git a/scripts/live b/scripts/live
index abdc87c..fad7107 100755
--- a/scripts/live
+++ b/scripts/live
@@ -1564,6 +1564,34 @@ setup_unionfs ()
 	mkdir -p "${rootmnt}/live"
 	mount -t tmpfs tmpfs ${rootmnt}/live
 
+	live_rofs_list=""
+	# SHOWMOUNTS is necessary for custom mounts with the union option
+	if [ -n "${SHOWMOUNTS}" ] || ( [ -n "${PERSISTENT}" ] && [ -z "${NOPERSISTENT}" ] )
+	then
+		# XXX: is the for loop really necessary? rofslist can only contain one item (see above XXX about EXPOSEDROOT) and this is also assumed elsewhere above (see use of $rofs above).
+		for d in ${rofslist}
+		do
+			live_rofs="${rootmnt}/live/${d##*/}"
+			live_rofs_list="${live_rofs_list} ${live_rofs}"
+			mkdir -p "${live_rofs}"
+			case d in
+				*.dir)
+					# do nothing # mount -o bind "${d}" "${live_rofs}"
+					;;
+				*)
+					case "${UNIONTYPE}" in
+						unionfs-fuse)
+							mount -o bind "${d}" "${live_rofs}"
+							;;
+						*)
+							mount -o move "${d}" "${live_rofs}"
+							;;
+					esac
+					;;
+			esac
+		done
+	fi
+
 	# Adding other custom mounts
 	if [ -n "${PERSISTENT}" ] && [ -z "${NOPERSISTENT}" ]
 	then
@@ -1628,7 +1656,7 @@ setup_unionfs ()
 				for opt in $(echo ${options} | tr ',' ' ');
 				do
 					case "${opt}" in
-						"linkfiles")
+						linkfiles|union)
 							;;
 						*)
 							log_warning_msg "Skipping custom mount with unkown option: ${opt}"
@@ -1677,12 +1705,16 @@ setup_unionfs ()
 		while read source dest options	# < ${custom_mounts}
 		do
 			local opt_linkfiles=""
+			local opt_union=""
 			for opt in $(echo ${options} | tr ',' ' ');
 			do
 				 case "${opt}" in
-					"linkfiles")
+					linkfiles)
 						opt_linkfiles="yes"
 						;;
+					union)
+						opt_union="yes"
+						;;
 				esac
 			done
 
@@ -1716,8 +1748,6 @@ setup_unionfs ()
 				fi
 			fi
 
-			# FIXME: could we instead only save the aufs-diff in the persistent media? implications? What about when there's changes in the live image?
-
 			# if ${source} doesn't exist on our persistent media we
 			# bootstrap it with $dest from the live filesystem.
 			# this both makes sense and is critical if we're
@@ -1727,18 +1757,38 @@ setup_unionfs ()
 				if [ -n "${PERSISTENT_READONLY}" ] || [ -n "${opt_linkfiles}" ]
 				then
 					continue
+				elif [ -n "${opt_union}" ]
+				then
+					# union's don't need to be bootstrapped
+					mkdir "${source}"
+				else
+					# ensure that $dest is not copied *into* $source
+					mkdir -p "$(dirname ${source})"
+					cp -a "${dest}" "${source}"
 				fi
-				# ensure that $dest is not copied *into* $source
-				mkdir -p "$(dirname ${source})"
-				cp -a "${dest}" "${source}"
 			fi
 
+			rofs_dest_backing=""
+			for d in ${live_rofs_list}
+			do
+				rofs_dest_backing="${d}/$(echo ${dest} | sed -e "s|${rootmnt}||")"
+				if [ -d "${rofs_dest_backing}" ]
+				then
+					break
+				else
+					rofs_dest_backing=""
+				fi
+			done
+
 			if [ -z "${PERSISTENT_READONLY}" ]
 			then
 				if [ -n "${opt_linkfiles}" ]
 				then
 					links_source="${source}"
 					links_dest="${dest}"
+				elif [ -n "${opt_union}" ]
+				then
+					do_union ${dest} ${source} ${rofs_dest_backing}
 				else
 					mount --bind "${source}" "${dest}"
 				fi
@@ -1751,8 +1801,7 @@ setup_unionfs ()
 				fi
 				cow_dir="$(echo ${dest} | sed -e "s|${rootmnt}|/cow/|")"
 				mkdir -p ${cow_dir}
-				# XXX: broken! will be fixed in the next few commits...
-				do_union ${dest} ${cow_dir} ${source}
+				do_union ${dest} ${cow_dir} ${source} ${rofs_dest_backing}
 			fi
 
 			if [ -n "${opt_linkfiles}" ]
@@ -1771,32 +1820,6 @@ setup_unionfs ()
 		try_snap "${home_snapdata}" "${rootmnt}" "HOME" "/home"
 	fi
 
-	if [ -n "${SHOWMOUNTS}" ]
-	then
-		for d in ${rofslist}
-		do
-			mkdir -p "${rootmnt}/live/${d##*/}"
-
-			case d in
-				*.dir)
-					# do nothing # mount -o bind "${d}" "${rootmnt}/live/${d##*/}"
-					;;
-
-				*)
-					case "${UNIONTYPE}" in
-						unionfs-fuse)
-							mount -o bind "${d}" "${rootmnt}/live/${d##*/}"
-							;;
-
-						*)
-							mount -o move "${d}" "${rootmnt}/live/${d##*/}"
-							;;
-					esac
-					;;
-			esac
-		done
-	fi
-
 	# shows cow fs on /cow for use by live-snapshot
 	mkdir -p "${rootmnt}/live/cow"
 	mount -o move /cow "${rootmnt}/live/cow" >/dev/null 2>&1 || mount -o bind /cow "${rootmnt}/live/cow" || log_warning_msg "Unable to move or bind /cow to ${rootmnt}/live/cow"

-- 
live-boot



More information about the debian-live-changes mailing list