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

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


The following commit has been merged in the debian branch:
commit d15a4009895b692ff2645e1e7041a7975c49e518
Author: Tails developers <amnesia at boum.org>
Date:   Mon Mar 26 19:23:56 2012 +0200

    Make cases for all different custom mounting situations more explicit.
    
    The old code had grown wild over time and was hard to follow, and
    consequently contained bugs (all related to linkfiles custom mounts in
    read-only mode) that that became obvious and were fixed solely all
    thanks to this re-write.

diff --git a/scripts/live-helpers b/scripts/live-helpers
index 78de240..889d157 100644
--- a/scripts/live-helpers
+++ b/scripts/live-helpers
@@ -1466,49 +1466,73 @@ activate_custom_mounts ()
 
 		# XXX: If CONFIG_AUFS_ROBR is added to the Debian kernel we can
 		# ignore the loop below and set rofs_dest_backing=$dest
-		rofs_dest_backing=""
-		for d in ${rootmnt}/live/rofs/*
-		do
-			if [ -n "${rootmnt}" ]
-			then
-				rofs_dest_backing="${d}/$(echo ${dest} | sed -e "s|${rootmnt}||")"
-			else
-				rofs_dest_backing="${d}/${dest}"
-			fi
-			if [ -d "${rofs_dest_backing}" ]
-			then
-				break
-			else
-				rofs_dest_backing=""
-			fi
-		done
+		local rofs_dest_backing=""
+		if [ -n "${opt_linkfiles}"]
+		then
+			for d in ${rootmnt}/live/rofs/*
+			do
+				if [ -n "${rootmnt}" ]
+				then
+					rofs_dest_backing="${d}/$(echo ${dest} | sed -e "s|${rootmnt}||")"
+				else
+					rofs_dest_backing="${d}/${dest}"
+				fi
+				if [ -d "${rofs_dest_backing}" ]
+				then
+					break
+				else
+					rofs_dest_backing=""
+				fi
+			done
+		fi
 
-		if [ -z "${PERSISTENT_READONLY}" ]
+		if [ -n "${opt_linkfiles}" ] && [ -z "${PERSISTENT_READONLY}" ]
 		then
-			if [ -n "${opt_linkfiles}" ]
-			then
-				links_source="${source}"
-				links_dest="${dest}"
-			elif [ -n "${opt_union}" ]
+			link_files ${source} ${dest} ${rootmnt}
+		elif [ -n "${opt_linkfiles}" ] && [ -n "${PERSISTENT_READONLY}" ]
+		then
+			mkdir -p ${rootmnt}/live/persistent
+			local links_source=$(mktemp -d ${rootmnt}/live/persistent/links-source-XXXXXX)
+			chown_ref ${source} ${links_source}
+			chmod_ref ${source} ${links_source}
+			# We put the cow dir in the below strange place to
+			# make it absolutely certain that the link source
+			# has its own directory and isn't nested with some
+			# other custom mount (if so that mount's files would
+			# be linked, causing breakage.
+			if [ -n "${rootmnt}" ]
 			then
-				do_union ${dest} ${source} ${rofs_dest_backing}
+				local cow_dir="/cow/live/persistent/$(basename ${links_source})"
 			else
-				mount --bind "${source}" "${dest}"
-			fi
-		else
-			if [ -n "${opt_linkfiles}" ]
-			then
-				links_dest="${dest}"
-				dest="$(mktemp -d ${persistent_backing}/links_source-XXXXXX)"
-				links_source="${dest}"
+				# This is happens if persistence is activated
+				# post boot
+				local cow_dir="/live/cow/live/persistent/$(basename ${links_source})"
 			fi
+			mkdir -p ${cow_dir}
+			chown_ref "${source}" "${cow_dir}"
+			chmod_ref "${source}" "${cow_dir}"
+			do_union ${links_source} ${cow_dir} ${source} ${rofs_dest_backing}
+			link_files ${links_source} ${dest} ${rootmnt}
+		elif [ -n "${opt_union}" ] && [ -z "${PERSISTENT_READONLY}" ]
+		then
+			do_union ${dest} ${source} ${rofs_dest_backing}
+		elif [ -n "${opt_bind}" ] && [ -z "${PERSISTENT_READONLY}" ]
+		then
+			mount --bind "${source}" "${dest}"
+		elif [ -n "${opt_bind}" -o -n "${opt_union}" ] && [ -n "${PERSISTENT_READONLY}" ]
+		then
+			# bind-mount and union mount are handled the same
+			# in read-only mode, but note that rofs_dest_backing
+			# is non-empty (and necessary) only for unions
 			if [ -n "${rootmnt}" ]
 			then
-				cow_dir="$(echo ${dest} | sed -e "s|${rootmnt}|/cow/|")"
+				local cow_dir="$(echo ${dest} | sed -e "s|^${rootmnt}|/cow/|")"
 			else
-				cow_dir="/live/cow/${dest}"
+				# This is happens if persistence is activated
+				# post boot
+				local cow_dir="/live/cow/${dest}"
 			fi
-			if [ -e "${cow_dir}" ]
+			if [ -e "${cow_dir}" ] && [ -z "${opt_linkfiles}" ]
 			then
 				# If an earlier custom mount has files here
 				# it will "block" the current mount's files
@@ -1521,11 +1545,6 @@ activate_custom_mounts ()
 			do_union ${dest} ${cow_dir} ${source} ${rofs_dest_backing}
 		fi
 
-		if [ -n "${opt_linkfiles}" ]
-		then
-			link_files "${links_source}" "${links_dest}" "${rootmnt}"
-		fi
-
 		PERSISTENCE_IS_ON="1"
 		export PERSISTENCE_IS_ON
 

-- 
live-boot



More information about the debian-live-changes mailing list