X-Git-Url: http://git.grml.org/?a=blobdiff_plain;ds=sidebyside;f=scripts%2Fboot%2F9990-misc-helpers.sh;h=94c48e6e2ffc195ea02b1f1e0ff16a3fa934ec79;hb=c32e1b2f0f8cbf4a11d198824f463cf7f7455a76;hp=117876fe2fcbe0c674597179d6bb917461d6d9fb;hpb=ee04164312a51ba075ff169140a8969b7ee66512;p=live-boot-grml.git diff --git a/scripts/boot/9990-misc-helpers.sh b/scripts/boot/9990-misc-helpers.sh index 117876f..94c48e6 100755 --- a/scripts/boot/9990-misc-helpers.sh +++ b/scripts/boot/9990-misc-helpers.sh @@ -723,12 +723,17 @@ try_mount () fi } +# Try to mount $device to the place expected by live-boot. If $device +# is already mounted somewhere, move it to the expected place. If +# we're only probing $device (to check if it has custom persistence) +# $probe should be set, which suppresses warnings upon failure. On +# success, print the mount point for $device. 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})" @@ -760,8 +765,12 @@ mount_persistence_media () rmdir "${backing}" return 1 fi + else + # This means that $device has already been mounted on + # the place expected by live-boot, so we're done. + echo ${backing} + return 0 fi - return 0 } close_persistence_media () @@ -911,7 +920,9 @@ probe_for_file_name () then echo ${ret} else + # unmount and remove mountpoint umount ${backing} > /dev/null 2>&1 || true + rmdir ${backing} > /dev/null 2>&1 || true fi } @@ -938,7 +949,7 @@ find_persistence_media () local white_listed_devices="${2}" local ret="" - local black_listed_devices="$(what_is_mounted_on /live/image)" + local black_listed_devices="$(what_is_mounted_on ${rootmnt}/lib/live/medium)" for dev in $(storage_devices "${black_listed_devices}" "${white_listed_devices}") do @@ -1231,7 +1242,7 @@ do_union () get_custom_mounts () { - # Side-effect: leaves $devices with live-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} @@ -1256,15 +1267,20 @@ get_custom_mounts () continue fi - local include_list="${backing}/${persistence_list}" - if [ ! -r "${include_list}" ] + local include_list + if [ -r "${backing}/${persistence_list}" ] then + include_list="${backing}/${persistence_list}" + elif [ -r "${backing}/${old_persistence_list}" ] + then + include_list="${backing}/${old_persistence_list}" + else continue fi 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} @@ -1275,9 +1291,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 @@ -1440,23 +1456,23 @@ activate_custom_mounts () fi # XXX: If CONFIG_AUFS_ROBR is added to the Debian kernel we can - # ignore the loop below and set rofs_dest_backing=$dest - local rofs_dest_backing="" + # ignore the loop below and set rootfs_dest_backing=$dest + local rootfs_dest_backing="" if [ -n "${opt_link}"] then - for d in /live/rofs/* + for d in ${rootmnt}/lib/live/mount/rootfs/* do if [ -n "${rootmnt}" ] then - rofs_dest_backing="${d}/$(echo ${dest} | sed -e "s|${rootmnt}||")" + rootfs_dest_backing="${d}/$(echo ${dest} | sed -e "s|${rootmnt}||")" else - rofs_dest_backing="${d}/${dest}" + rootfs_dest_backing="${d}/${dest}" fi - if [ -d "${rofs_dest_backing}" ] + if [ -d "${rootfs_dest_backing}" ] then break else - rofs_dest_backing="" + rootfs_dest_backing="" fi done fi @@ -1466,8 +1482,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 @@ -1475,31 +1491,24 @@ 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}" - do_union ${links_source} ${cow_dir} ${source} ${rofs_dest_backing} + do_union ${links_source} ${cow_dir} ${source} ${rootfs_dest_backing} link_files ${links_source} ${dest} ${rootmnt} elif [ -n "${opt_union}" ] && [ -z "${PERSISTENCE_READONLY}" ] then - do_union ${dest} ${source} ${rofs_dest_backing} + do_union ${dest} ${source} ${rootfs_dest_backing} elif [ -n "${opt_bind}" ] && [ -z "${PERSISTENCE_READONLY}" ] then mount --bind "${source}" "${dest}" elif [ -n "${opt_bind}" -o -n "${opt_union}" ] && [ -n "${PERSISTENCE_READONLY}" ] then # bind-mount and union mount are handled the same - # in read-only mode, but note that rofs_dest_backing + # 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 @@ -1510,7 +1519,7 @@ activate_custom_mounts () mkdir -p ${cow_dir} chown_ref "${source}" "${cow_dir}" chmod_ref "${source}" "${cow_dir}" - do_union ${dest} ${cow_dir} ${source} ${rofs_dest_backing} + do_union ${dest} ${cow_dir} ${source} ${rootfs_dest_backing} fi PERSISTENCE_IS_ON="1"