X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=scripts%2Flive;h=08d6d7495694053cae2ea43f08429b44c7eeb47f;hb=13bb5656427cd5ad5475ceb48fe973c2f3b41f8c;hp=e80c47091a09dbb0060463f446e50a6c295b0f02;hpb=baa35e3dbde1d68bedca73fa03425d0a7d8b374c;p=live-boot-grml.git diff --git a/scripts/live b/scripts/live index e80c470..08d6d74 100755 --- a/scripts/live +++ b/scripts/live @@ -1237,17 +1237,6 @@ setup_unionfs () # Let's just mount the read-only file systems first rofslist="" - if [ "${UNIONTYPE}" = "aufs" ] - then - roopt="rr+wh" - noxino_opt="noxino," - elif [ "${UNIONTYPE}" = "unionfs-fuse" ] - then - roopt="RO" - else - roopt="ro" - fi - if [ -z "${PLAIN_ROOT}" ] then # Read image names from ${MODULE}.module if it exists @@ -1496,21 +1485,21 @@ setup_unionfs () then if [ -n "${PERSISTENT_READONLY}" ] then - persistent_root="/$(basename ${cowdevice})-backing" - mkdir -p ${persistent_root} + root_backing="/${rootmnt}/live/persistent/$(basename ${cowdevice})-root" + mkdir -p ${root_backing} else - persistent_root="/cow" + root_backing="/cow" fi if [ "${cow_fstype}" = "nfs" ] then log_begin_msg \ - "Trying nfsmount ${nfs_cow_opts} ${cowdevice} ${persistent_root}" - nfsmount ${nfs_cow_opts} ${cowdevice} ${persistent_root} || \ - panic "Can not mount ${cowdevice} (n: ${cow_fstype}) on ${persistent_root}" + "Trying nfsmount ${nfs_cow_opts} ${cowdevice} ${root_backing}" + nfsmount ${nfs_cow_opts} ${cowdevice} ${root_backing} || \ + panic "Can not mount ${cowdevice} (n: ${cow_fstype}) on ${root_backing}" else - mount -t ${cow_fstype} -o ${cow_mountopt} ${cowdevice} ${persistent_root} || \ - panic "Can not mount ${cowdevice} (o: ${cow_fstype}) on ${persistent_root}" + mount -t ${cow_fstype} -o ${cow_mountopt} ${cowdevice} ${root_backing} || \ + panic "Can not mount ${cowdevice} (o: ${cow_fstype}) on ${root_backing}" fi fi @@ -1547,44 +1536,18 @@ setup_unionfs () unionmountpoint="" for dir in ${cow_dirs}; do - mkdir -p /cow${dir} - - unionmountpoint="${rootmnt}${dir}" unionrw="/cow${dir}" unionro="${rofs}${dir}" - # We don't handle spaces and other junk gracefully here, hopefully not needed. - case "${UNIONTYPE}" in - unionfs-fuse) - unionmountopts="-o cow -o noinitgroups -o default_permissions -o allow_other -o use_ino -o suid" - unionmountopts="${unionmountopts} ${unionrw}=RW:${unionro}=RO" - ( sysctl -w fs.file-max=391524 ; ulimit -HSn 16384 - unionfs-fuse ${unionmountopts} "${unionmountpoint}" ) && \ - ( mkdir -p /run/sendsigs.omit.d - pidof unionfs-fuse >> /run/sendsigs.omit.d/unionfs-fuse || true ) - ;; - - unionmount) - unionmountopts="-t ${cow_fstype} -o noatime,union,${cow_mountopt} ${cowdevice}" - mount_full $unionmountopts "${unionmountpoint}" - ;; - - overlayfs) - unionmountopts="-o noatime,${noxino_opt},lowerdir=${unionro},upperdir=${unionrw}" - mount -t ${UNIONTYPE} ${unionmountopts} ${UNIONTYPE} "${unionmountpoint}" - ;; - - *) - if [ -n "${PERSISTENT_READONLY}" ] - then - mount -t tmpfs -o rw,noatime,mode=755 tmpfs "${unionrw}" - unionmountopts="-o noatime,${noxino_opt}dirs=${unionrw}=rw:${persistent_root}=${roopt}:${unionro}=${roopt}" - else - unionmountopts="-o noatime,${noxino_opt}dirs=${unionrw}=rw:${unionro}=${roopt}" - fi - mount -t ${UNIONTYPE} ${unionmountopts} ${UNIONTYPE} "${unionmountpoint}" - ;; - esac || \ - panic "mount ${UNIONTYPE} on ${unionmountpoint} failed with option ${unionmountopts}" + unionmountpoint="${rootmnt}${dir}" + mkdir -p ${unionrw} + if [ "${UNIONTYPE}" = "unionmount" ] + then + # FIXME: handle PERSISTENT_READONLY + unionmountopts="-t ${cow_fstype} -o noatime,union,${cow_mountopt} ${cowdevice}" + mount_full $unionmountopts "${unionmountpoint}" + else + do_union ${root_backing} ${unionrw} ${unionro} ${unionmountpoint} + fi || panic "mount ${UNIONTYPE} on ${unionmountpoint} failed with option ${unionmountopts}" done # Correct the permissions of /: @@ -1663,7 +1626,7 @@ setup_unionfs () ;; *) log_warning_msg "Skipping custom mount with unkown option: ${opt}" - continue + continue 2 ;; esac done @@ -1695,16 +1658,28 @@ setup_unionfs () # that we won't hide a previous mount. We also ignore # duplicate destinations in a more or less arbitrary way. [ -e "${bindings}" ] && sort -k2 -sbu ${bindings} >> ${custom_mounts} + rm -f ${bindings} # After all mounts are considered we add symlinks so they # won't be hidden by some mount. [ -e "${links}" ] && sort -k2 -sbu ${links} >> ${custom_mounts} + rm -f ${links} [ "${DEBUG}" = "Yes" ] && cp ${custom_mounts} ${persistent_backing} # Now we do the actual mounting (and symlinking) while read source dest options # < ${custom_mounts} do + local opt_linkfiles="" + for opt in $(echo ${options} | tr ',' ' '); + do + case "${opt}" in + "linkfiles") + opt_linkfiles="yes" + ;; + esac + done + if mountpoint -q "${dest}"; then log_warning_msg "Skipping custom mount ${source} on ${dest}: destination is already a mount point" @@ -1743,7 +1718,7 @@ setup_unionfs () # dealing with /etc or other system dir. if [ ! -d "${source}" ] then - if [ -n "${PERSISTENT_READONLY}" ] || echo ${options} | grep -qe "\" + if [ -n "${PERSISTENT_READONLY}" ] || [ -n "${opt_linkfiles}" ] then continue fi @@ -1754,7 +1729,7 @@ setup_unionfs () if [ -z "${PERSISTENT_READONLY}" ] then - if echo ${options} | grep -qe "\"; + if [ -n "${opt_linkfiles}" ] then links_source="${source}" links_dest="${dest}" @@ -1762,7 +1737,7 @@ setup_unionfs () mount --bind "${source}" "${dest}" fi else - if echo ${options} | grep -qe "\"; + if [ -n "${opt_linkfiles}" ] then links_dest="${dest}" dest="$(mktemp -d ${persistent_backing}/links_source-XXXXXX)" @@ -1771,10 +1746,10 @@ setup_unionfs () unionrw="$(echo ${dest} | sed -e "s|${rootmnt}|/cow/|")" mkdir -p ${unionrw} unionmountopts="noatime,${noxino_opt}dirs=${unionrw}=rw:${source}=${roopt}" - mount -t "${UNIONTYPE}" -o "${unionmountopts}" "${UNIONTYPE}" "${dest}" + do_union ${root_backing} ${unionrw} ${source} ${dest} fi - if echo $options | grep -qe "\"; + if [ -n "${opt_linkfiles}" ] then link_files "${links_source}" "${links_dest}" "${rootmnt}" fi