X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=scripts%2Flive-helpers;h=889d1576af313853f2ffb04f220ab8cb79d55425;hb=d15a4009895b692ff2645e1e7041a7975c49e518;hp=78de240511938f83da98a2ed20137973ae658562;hpb=d4d4f98335c3bd91192501e123694a727da85956;p=live-boot-grml.git 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