diff options
author | Tails developers <amnesia@boum.org> | 2012-12-07 22:27:51 +0100 |
---|---|---|
committer | Daniel Baumann <mail@daniel-baumann.ch> | 2013-05-06 13:54:13 +0200 |
commit | 63a94b2bfcc454b05ead6e06f08363e4f6ac3b71 (patch) | |
tree | 37a6650530ebd89786d7c33bf86891d2ea3281e8 | |
parent | 2648cbc4fbb19cc4b20bca4b4f3d38d515f130a1 (diff) | |
download | live-boot-63a94b2bfcc454b05ead6e06f08363e4f6ac3b71.tar.gz live-boot-63a94b2bfcc454b05ead6e06f08363e4f6ac3b71.zip |
Making the /live to /lib/live move for the persistence code.
Exposing /lib/live/mount/persistence in user-space is highly relevant
for the (soon-to-come) tool for activating persistence post-initramfs.
We want to use the same persistence code for both scenarios, and avoid
using different cases for them, so we make it only use /lib/live.
Similarly we also make sure that persistence modes using unions use
the same copy-on-write dir or "overlay" (i.e. /lib/live/mount/overlay)
in order to make them work as intended.
-rwxr-xr-x | scripts/boot/9990-misc-helpers.sh | 29 | ||||
-rwxr-xr-x | scripts/boot/9990-overlay.sh | 47 |
2 files changed, 35 insertions, 41 deletions
diff --git a/scripts/boot/9990-misc-helpers.sh b/scripts/boot/9990-misc-helpers.sh index 358448b..c080d15 100755 --- a/scripts/boot/9990-misc-helpers.sh +++ b/scripts/boot/9990-misc-helpers.sh @@ -719,7 +719,7 @@ mount_persistence_media () local device=${1} local probe=${2} - local backing="/live/persistence/$(basename ${device})" + local backing="${rootmnt}/lib/live/mount/persistence/$(basename ${device})" mkdir -p "${backing}" local old_backing="$(where_is_mounted ${device})" @@ -931,7 +931,7 @@ find_persistence_media () local white_listed_devices="${2}" local ret="" - local black_listed_devices="$(what_is_mounted_on /live/medium)" + local black_listed_devices="$(what_is_mounted_on ${rootmnt}/lib/live/medium)" for dev in $(storage_devices "${black_listed_devices}" "${white_listed_devices}") do @@ -1224,7 +1224,7 @@ do_union () get_custom_mounts () { - # Side-effect: leaves $devices with persistence.conf mounted in /live/persistence + # Side-effect: leaves $devices with persistence.conf mounted in ${rootmnt}/lib/live/mount/persistence # Side-effect: prints info to file $custom_mounts local custom_mounts=${1} @@ -1262,7 +1262,7 @@ get_custom_mounts () if [ -n "${DEBUG}" ] && [ -e "${include_list}" ] then - cp ${include_list} /live/persistence/${persistence_list}.${device_name} + cp ${include_list} ${rootmnt}/lib/live/mount/persistence/${persistence_list}.${device_name} fi while read dir options # < ${include_list} @@ -1273,9 +1273,9 @@ get_custom_mounts () continue fi - if trim_path ${dir} | grep -q -e "^[^/]" -e "^/live\(/.*\)\?$" -e "^/\(.*/\)\?\.\.\?\(/.*\)\?$" + if trim_path ${dir} | grep -q -e "^[^/]" -e "^/lib" -e "^/lib/live\(/.*\)\?$" -e "^/\(.*/\)\?\.\.\?\(/.*\)\?$" then - log_warning_msg "Skipping unsafe custom mount ${dir}: must be an absolute path containing neither the \".\" nor \"..\" special dirs, and cannot be \"/live\" or any sub-directory therein." + log_warning_msg "Skipping unsafe custom mount ${dir}: must be an absolute path containing neither the \".\" nor \"..\" special dirs, and cannot be \"/lib\", or \"/lib/live\" or any of its sub-directories." continue fi @@ -1442,7 +1442,7 @@ activate_custom_mounts () local rootfs_dest_backing="" if [ -n "${opt_link}"] then - for d in /live/rootfs/* + for d in ${rootmnt}/lib/live/mount/rootfs/* do if [ -n "${rootmnt}" ] then @@ -1464,8 +1464,8 @@ activate_custom_mounts () link_files ${source} ${dest} ${rootmnt} elif [ -n "${opt_link}" ] && [ -n "${PERSISTENCE_READONLY}" ] then - mkdir -p /live/persistence - local links_source=$(mktemp -d /live/persistence/links-source-XXXXXX) + mkdir -p ${rootmnt}/lib/live/mount/persistence + local links_source=$(mktemp -d ${rootmnt}/lib/live/mount/persistence/links-source-XXXXXX) chown_ref ${source} ${links_source} chmod_ref ${source} ${links_source} # We put the cow dir in the below strange place to @@ -1473,7 +1473,7 @@ activate_custom_mounts () # has its own directory and isn't nested with some # other custom mount (if so that mount's files would # be linked, causing breakage. - local cow_dir="/live/overlay/live/persistence/$(basename ${links_source})" + local cow_dir="${rootmnt}/lib/live/mount/overlay/lib/live/mount/persistence/$(basename ${links_source})" mkdir -p ${cow_dir} chown_ref "${source}" "${cow_dir}" chmod_ref "${source}" "${cow_dir}" @@ -1490,14 +1490,7 @@ activate_custom_mounts () # bind-mount and union mount are handled the same # in read-only mode, but note that rootfs_dest_backing # is non-empty (and necessary) only for unions - if [ -n "${rootmnt}" ] - then - local cow_dir="$(echo ${dest} | sed -e "s|^${rootmnt}|/live/overlay/|")" - else - # This is happens if persistence is activated - # post boot - local cow_dir="/live/overlay/${dest}" - fi + local cow_dir="${rootmnt}/lib/live/mount/overlay/${dest}" if [ -e "${cow_dir}" ] && [ -z "${opt_link}" ] then # If an earlier custom mount has files here diff --git a/scripts/boot/9990-overlay.sh b/scripts/boot/9990-overlay.sh index e8e00b6..b586a47 100755 --- a/scripts/boot/9990-overlay.sh +++ b/scripts/boot/9990-overlay.sh @@ -361,6 +361,29 @@ setup_unionfs () esac done + # move all /live mountpoints that the custom persistence + # system depends on into /lib/live on the root filesystem + for _DIRECTORY in rootfs + do + if [ -d "/live/${_DIRECTORY}" ] + then + mkdir -p "${rootmnt}/lib/live/mount/${_DIRECTORY}" + + for _MOUNT in $(ls /live/${_DIRECTORY}) + do + mkdir -p "${rootmnt}/lib/live/mount/${_DIRECTORY}/${_MOUNT}" + mount -o move "/live/${_DIRECTORY}/${_MOUNT}" "${rootmnt}/lib/live/mount/${_DIRECTORY}/${_MOUNT}" > /dev/null 2>&1 || \ + mount -o bind "/live/${_DIRECTORY}/${_MOUNT}" "${rootmnt}/lib/live/mount/${_DIRECTORY}/${_MOUNT}" || \ + log_warning_msg "W: failed to mount /live/${_DIRECTORY}/${_MOUNT} to ${rootmnt}/lib/live/mount/${_DIRECTORY}/${_MOUNT}" + done + fi + done + + mkdir -p "${rootmnt}/lib/live/mount/overlay" + mount -o move /live/overlay "${rootmnt}/lib/live/mount/overlay" > /dev/null 2>&1 || \ + mount -o bind /live/overlay "${rootmnt}/lib/live/mount/overlay" || \ + log_warning_msg "W: failed to mount /live/overlay to ${rootmnt}/lib/live/mount/overlay" + # Adding custom persistence if [ -n "${PERSISTENCE}" ] && [ -z "${NOPERSISTENCE}" ] then @@ -370,7 +393,7 @@ setup_unionfs () # Gather information about custom mounts from devies detected as overlays get_custom_mounts ${custom_mounts} ${overlay_devices} - [ -n "${DEBUG}" ] && cp ${custom_mounts} "/live/persistence" + [ -n "${DEBUG}" ] && cp ${custom_mounts} "/lib/live/mount/persistence" # Now we do the actual mounting (and symlinking) local used_overlays="" @@ -387,28 +410,6 @@ setup_unionfs () done fi - # move all mountpoints to root filesystem - for _DIRECTORY in rootfs persistence - do - if [ -d "/live/${_DIRECTORY}" ] - then - mkdir -p "${rootmnt}/lib/live/mount/${_DIRECTORY}" - - for _MOUNT in $(ls /live/${_DIRECTORY}) - do - mkdir -p "${rootmnt}/lib/live/mount/${_DIRECTORY}/${_MOUNT}" - mount -o move "/live/${_DIRECTORY}/${_MOUNT}" "${rootmnt}/lib/live/mount/${_DIRECTORY}/${_MOUNT}" > /dev/null 2>&1 || \ - mount -o bind "/live/${_DIRECTORY}/${_MOUNT}" "${rootmnt}/lib/live/mount/${_DIRECTORY}/${_MOUNT}" || \ - log_warning_msg "W: failed to mount /live/${_DIRECTORY}/${_MOUNT} to ${rootmnt}/lib/live/mount/${_DIRECTORY}/${_MOUNT}" - done - fi - done - - mkdir -p "${rootmnt}/lib/live/mount/overlay" - mount -o move /live/overlay "${rootmnt}/lib/live/mount/overlay" > /dev/null 2>&1 || \ - mount -o bind /live/overlay "${rootmnt}/lib/live/mount/overlay" || \ - log_warning_msg "W: failed to mount /live/overlay to ${rootmnt}/lib/live/mount/overlay" - # ensure that a potentially stray tmpfs gets removed # otherways, initramfs-tools is unable to remove /live # and fails to boot |