touch /live.vars
fi
-Arguments ()
-{
- PRESEEDS=""
- LOCATIONS=""
-
- for ARGUMENT in $(cat /proc/cmdline)
- do
- case "${ARGUMENT}" in
- skipconfig)
- NOACCESSIBILITY="Yes"
- NOFASTBOOT="Yes"
- NOFSTAB="Yes"
- NONETWORKING="Yes"
-
- export NOACCESSIBILITY NOFASTBOOT NOFSTAB NONETWORKING
- ;;
-
- access=*)
- ACCESS="${ARGUMENT#access=}"
- export ACCESS
- ;;
-
- console=*)
- DEFCONSOLE="${ARGUMENT#*=}"
- export DEFCONSOLE
- ;;
-
- BOOTIF=*)
- BOOTIF="${x#BOOTIF=}"
- ;;
-
- debug)
- DEBUG="Yes"
- export DEBUG
-
- set -x
- ;;
-
- dhcp)
- # Force dhcp even while netbooting
- # Use for debugging in case somebody works on fixing dhclient
- DHCP="Force";
- export DHCP
- ;;
-
- nodhcp)
- unset DHCP
- ;;
-
- ethdevice=*)
- DEVICE="${ARGUMENT#ethdevice=}"
- ETHDEVICE="${DEVICE}"
- export DEVICE ETHDEVICE
- ;;
-
- ethdevice-timeout=*)
- ETHDEV_TIMEOUT="${ARGUMENT#ethdevice-timeout=}"
- export ETHDEV_TIMEOUT
- ;;
-
- fetch=*)
- FETCH="${ARGUMENT#fetch=}"
- export FETCH
- ;;
-
- forcepersistentfsck)
- FORCEPERSISTENTFSCK="Yes"
- export FORCEPERSISTENTFSCK
- ;;
-
- ftpfs=*)
- FTPFS="${ARGUMENT#ftpfs=}"
- export FTPFS
- ;;
-
- httpfs=*)
- HTTPFS="${ARGUMENT#httpfs=}"
- export HTTPFS
- ;;
-
- iscsi=*)
- ISCSI="${ARGUMENT#iscsi=}"
- #ip:port - separated by ;
- ISCSI_PORTAL="${ISCSI%;*}"
- if echo "${ISCSI_PORTAL}" | grep -q , ; then
- ISCSI_SERVER="${ISCSI_PORTAL%,*}"
- ISCSI_PORT="${ISCSI_PORTAL#*,}"
- fi
- #target name
- ISCSI_TARGET="${ISCSI#*;}"
- export ISCSI ISCSI_PORTAL ISCSI_TARGET ISCSI_SERVER ISCSI_PORT
- ;;
-
- isofrom=*|fromiso=*)
- FROMISO="${ARGUMENT#*=}"
- export FROMISO
- ;;
-
- ignore_uuid)
- IGNORE_UUID="Yes"
- export IGNORE_UUID
- ;;
-
- integrity-check)
- INTEGRITY_CHECK="Yes"
- export INTEGRITY_CHECK
- ;;
-
- ip=*)
- STATICIP="${ARGUMENT#ip=}"
-
- if [ -z "${STATICIP}" ]
- then
- STATICIP="frommedia"
- fi
-
- export STATICIP
- ;;
-
- live-getty)
- LIVE_GETTY="1"
- export LIVE_GETTY
- ;;
-
- live-media=*|bootfrom=*)
- LIVE_MEDIA="${ARGUMENT#*=}"
- export LIVE_MEDIA
- ;;
-
- live-media-encryption=*|encryption=*)
- LIVE_MEDIA_ENCRYPTION="${ARGUMENT#*=}"
- export LIVE_MEDIA_ENCRYPTION
- ;;
-
- live-media-offset=*)
- LIVE_MEDIA_OFFSET="${ARGUMENT#live-media-offset=}"
- export LIVE_MEDIA_OFFSET
- ;;
-
- live-media-path=*)
- LIVE_MEDIA_PATH="${ARGUMENT#live-media-path=}"
- export LIVE_MEDIA_PATH
- ;;
-
- live-media-timeout=*)
- LIVE_MEDIA_TIMEOUT="${ARGUMENT#live-media-timeout=}"
- export LIVE_MEDIA_TIMEOUT
- ;;
-
- module=*)
- MODULE="${ARGUMENT#module=}"
- export MODULE
- ;;
-
- netboot=*)
- NETBOOT="${ARGUMENT#netboot=}"
- export NETBOOT
- ;;
-
- nfsopts=*)
- NFSOPTS="${ARGUMENT#nfsopts=}"
- export NFSOPTS
- ;;
-
- nfscow=*)
- NFS_COW="${ARGUMENT#nfscow=}"
- export NFS_COW
- ;;
-
- noaccessibility)
- NOACCESSIBILITY="Yes"
- export NOACCESSIBILITY
- ;;
-
- nofastboot)
- NOFASTBOOT="Yes"
- export NOFASTBOOT
- ;;
-
- nofstab)
- NOFSTAB="Yes"
- export NOFSTAB
- ;;
-
- nonetworking)
- NONETWORKING="Yes"
- export NONETWORKING
- ;;
-
- ramdisk-size=*)
- ramdisk_size="${ARGUMENT#ramdisk-size=}"
- ;;
-
- swapon)
- SWAPON="Yes"
- export SWAPON
- ;;
-
- persistent)
- PERSISTENT="Yes"
- export PERSISTENT
- ;;
-
- persistent-encryption=*)
- PERSISTENT_ENCRYPTION="${ARGUMENT#*=}"
- export PERSISTENT_ENCRYPTION
- ;;
-
- persistent-media=*)
- PERSISTENT_MEDIA="${ARGUMENT#*=}"
- export PERSISTENT_MEDIA
- ;;
- persistent-method=*)
- PERSISTENT_METHOD="${ARGUMENT#*=}"
- export PERSISTENT_METHOD
- ;;
-
- persistent-path=*)
- PERSISTENT_PATH="${ARGUMENT#persistent-path=}"
- export PERSISTENT_PATH
- ;;
- persistent-read-only)
- PERSISTENT_READONLY="Yes"
- export PERSISTENT_READONLY
- ;;
-
- persistent-storage=*)
- PERSISTENT_STORAGE="${ARGUMENT#persistent-storage=}"
- export PERSISTENT_STORAGE
- ;;
-
- persistent-subtext=*)
- root_overlay_label="${root_overlay_label}-${ARGUMENT#persistent-subtext=}"
- custom_overlay_label="${custom_overlay_label}-${ARGUMENT#persistent-subtext=}"
- root_snapshot_label="${root_snapshot_label}-${ARGUMENT#persistent-subtext=}"
- home_snapshot_label="${home_snapshot_label}-${ARGUMENT#persistent-subtext=}"
- ;;
-
- nopersistent)
- NOPERSISTENT="Yes"
- export NOPERSISTENT
- ;;
-
- noprompt)
- NOPROMPT="Yes"
- export NOPROMPT
- ;;
-
- noprompt=*)
- NOPROMPT="${ARGUMENT#noprompt=}"
- export NOPROMPT
- ;;
-
- quickusbmodules)
- QUICKUSBMODULES="Yes"
- export QUICKUSBMODULES
- ;;
-
- preseed/file=*|file=*)
- LOCATIONS="${ARGUMENT#*=} ${LOCATIONS}"
- export LOCATIONS
- ;;
-
- nopreseed)
- NOPRESEED="Yes"
- export NOPRESEED
- ;;
-
- */*=*)
- question="${ARGUMENT%%=*}"
- value="${ARGUMENT#*=}"
- PRESEEDS="${PRESEEDS}\"${question}=${value}\" "
- export PRESEEDS
- ;;
-
- showmounts)
- SHOWMOUNTS="Yes"
- export SHOWMOUNTS
- ;;
-
- silent)
- SILENT="Yes"
- export SILENT
- ;;
-
- todisk=*)
- TODISK="${ARGUMENT#todisk=}"
- export TODISK
- ;;
-
- toram)
- TORAM="Yes"
- export TORAM
- ;;
-
- toram=*)
- TORAM="Yes"
- MODULETORAM="${ARGUMENT#toram=}"
- export TORAM MODULETORAM
- ;;
-
- exposedroot)
- EXPOSED_ROOT="Yes"
- export EXPOSED_ROOT
- ;;
-
- plainroot)
- PLAIN_ROOT="Yes"
- export PLAIN_ROOT
- ;;
-
- skipunion)
- SKIP_UNION_MOUNTS="Yes"
- export SKIP_UNION_MOUNTS
- ;;
-
- root=*)
- ROOT="${ARGUMENT#root=}"
- export ROOT
- ;;
-
- union=*)
- UNIONTYPE="${ARGUMENT#union=}"
- export UNIONTYPE
- ;;
- esac
- done
-
- # sort of compatibility with netboot.h from linux docs
- if [ -z "${NETBOOT}" ]
- then
- if [ "${ROOT}" = "/dev/nfs" ]
- then
- NETBOOT="nfs"
- export NETBOOT
- elif [ "${ROOT}" = "/dev/cifs" ]
- then
- NETBOOT="cifs"
- export NETBOOT
- fi
- fi
-
- if [ -z "${MODULE}" ]
- then
- MODULE="filesystem"
- export MODULE
- fi
-
- if [ -z "${UNIONTYPE}" ]
- then
- UNIONTYPE="aufs"
- export UNIONTYPE
- fi
-
- if [ -z "${PERSISTENT_ENCRYPTION}" ]
- then
- PERSISTENT_ENCRYPTION="none"
- export PERSISTENT_ENCRYPTION
- elif echo ${PERSISTENT_ENCRYPTION} | grep -qe "\<luks\>"
- then
- if ! modprobe dm-crypt
- then
- log_warning_msg "Unable to load module dm-crypt"
- PERSISTENT_ENCRYPTION=$(echo ${PERSISTENT_ENCRYPTION} | sed -e 's/\<luks,\|,\?luks$//g')
- export PERSISTENT_ENCRYPTION
- fi
-
- if [ ! -x /lib/cryptsetup/askpass ] || [ ! -x /sbin/cryptsetup ]
- then
- log_warning_msg "cryptsetup in unavailable"
- PERSISTENT_ENCRYPTION=$(echo ${PERSISTENT_ENCRYPTION} | sed -e 's/\<luks,\|,\?luks$//g')
- export PERSISTENT_ENCRYPTION
- fi
- fi
-
- if [ -n "${PERSISTENT}" ] && [ -z "${PERSISTENT_METHOD}" ]
- then
- PERSISTENT_METHOD="snapshot,overlay"
- export PERSISTENT_METHOD
- fi
-
- if [ -n "${PERSISTENT}" ] && [ -z "${PERSISTENT_STORAGE}" ]
- then
- PERSISTENT_STORAGE="filesystem,file"
- export PERSISTENT_STORAGE
- fi
-}
-
is_live_path ()
{
DIRECTORY="${1}"
modprobe -q nfs
- if [ -z "${NFSOPTS}" ]
+ if [ -n "${NFSOPTS}" ]
then
- NFSOPTS=""
+ NFSOPTS="-o ${NFSOPTS}"
fi
log_begin_msg "Trying nfsmount -o nolock -o ro ${NFSOPTS} ${NFSROOT} ${mountpoint}"
then
CIFSOPTS="-ouser=root,password="
else
- CIFSOPTS="${NFSOPTS}"
+ CIFSOPTS="-o ${NFSOPTS}"
fi
log_begin_msg "Trying mount.cifs ${NFSROOT} ${mountpoint} ${CIFSOPTS}"
# 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
snapshots="${root_snapshot_label} ${home_snapshot_label}"
fi
- overlay_devices=""
+ local root_snapdata=""
+ local home_snapshot_label=""
+ local root_overlay_label=""
+ local overlay_devices=""
for media in $(find_persistent_media "${overlays}" "${snapshots}" "${blacklistdev}" "${whitelistdev}")
do
media="$(echo ${media} | tr ":" " ")"
case ${media} in
${root_snapshot_label}=*)
- root_snapdata="${media#*=}"
+ if [ -z "${root_snapdata}" ]
+ then
+ root_snapdata="${media#*=}"
+ fi
;;
${home_snapshot_label}=*)
# This second type should be removed when snapshot will get smarter,
# hence when "/etc/live-snapshot*list" will be supported also by
# ext2|ext3|ext4|jffs2 snapshot types.
- home_snapdata="${media#*=}"
+ if [ -z "${home_snapdata}" ]
+ then
+ home_snapdata="${media#*=}"
+ fi
;;
${root_overlay_label}=*)
- device="${media#*=}"
- root_overlay_device="${device}"
+ if [ -z "${root_overlay_device}" ]
+ then
+ device="${media#*=}"
+ root_overlay_device="${device}"
+ fi
;;
${custom_overlay_label}=*)
device="${media#*=}"
then
if [ -n "${PERSISTENT_READONLY}" ]
then
- persistent_root="/$(basename ${cowdevice})-backing"
- mkdir -p ${persistent_root}
+ mount -t tmpfs -o rw,noatime,mode=755 tmpfs "/cow"
+ 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
rofscount=$(echo ${rofslist} |wc -w)
+ # XXX: we now ensure that there can only be one read-only filesystem. Should this be inside the EXPOSED_ROOT if?
if [ ${rofscount} -ne 1 ]
then
panic "only one RO file system supported with exposedroot: ${rofslist}"
#panic "unionmount does not support subunions (${cow_dirs})."
fi
- unionmountopts=""
- 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}"
+ mkdir -p ${unionmountpoint}
+ if [ "${UNIONTYPE}" = "unionmount" ]
+ then
+ # FIXME: handle PERSISTENT_READONLY
+ unionmountopts="-t ${cow_fstype} -o noatime,union,${cow_mountopt} ${cowdevice}"
+ mount_full $unionmountopts "${unionmountpoint}"
+ else
+ cow_dir="/cow${dir}"
+ rofs_dir="${rofs}${dir}"
+ mkdir -p ${cow_dir}
+ if [ -n "${PERSISTENT_READONLY}" ] && [ "${cowdevice}" != "tmpfs" ]
+ then
+ #mount -t tmpfs -o rw,noatime,mode=755 tmpfs "${cow_dir}"
+ do_union ${unionmountpoint} ${cow_dir} ${root_backing} ${rofs_dir}
+ else
+ do_union ${unionmountpoint} ${cow_dir} ${rofs_dir}
+ fi
+ fi || panic "mount ${UNIONTYPE} on ${unionmountpoint} failed with option ${unionmountopts}"
done
# Correct the permissions of /:
mkdir -p "${rootmnt}/live"
mount -t tmpfs tmpfs ${rootmnt}/live
- # Adding other custom mounts
- if [ -n "${PERSISTENT}" ] && [ -z "${NOPERSISTENT}" ]
+ live_rofs_list=""
+ # SHOWMOUNTS is necessary for custom mounts with the union option
+ # Since we may want to do custom mounts in user-space it's best to always enable SHOWMOUNTS
+ if true #[ -n "${SHOWMOUNTS}" ] || ( [ -n "${PERSISTENT}" ] && [ -z "${NOPERSISTENT}" ] 1)
then
- bindings="/bindings.list"
- links="/links.list"
- custom_mounts="/custom_mounts.list"
- rm -f ${bindings} ${links} ${custom_mounts} >/dev/null 2>&1
- persistent_backing="${rootmnt}/live/persistent"
-
- # First we scan all media and gather all information about custom mounts
- for device in ${overlay_devices}
+ # XXX: is the for loop really necessary? rofslist can only contain one item (see above XXX about EXPOSEDROOT) and this is also assumed elsewhere above (see use of $rofs above).
+ for d in ${rofslist}
do
- if [ ! -b "${device}" ]
- then
- continue
- fi
- device_name="$(basename ${device})"
- backing="${persistent_backing}/${device_name}"
- mkdir -p "${backing}"
- device_fstype="$(get_fstype ${device})"
- if [ -z "${PERSISTENT_READONLY}" ]
- then
- device_mount_opts="rw,noatime"
- else
- device_mount_opts="ro,noatime"
- fi
- device_used=""
- mount -t "${device_fstype}" -o "${device_mount_opts}" "${device}" "${backing}"
- include_list="${backing}/${persistence_list}"
- if [ ! -r "${include_list}" ]
- then
- umount "${backing}"
- rmdir "${backing}"
- continue
- fi
-
- [ "${DEBUG}" = "Yes" ] && cp ${include_list} ${persistent_backing}/${persistence_list}.${device_name}
- while read source dest options # < ${include_list}
- do
- if echo ${source} | grep -qe "^[[:space:]]*#"
- then
- # skipping commented line
- continue
- fi
-
- if echo ${dest} | grep -qe "^[^/]"
- then
- options="${dest}"
- dest="${source}"
- elif [ -z "${dest}" ]
- then
- dest="${source}"
- fi
-
- if echo ${dest} | grep -qe "^/\+$\|^/\+live\(/.*\)\?$"
- then
- # mounting on / or /live could cause trouble
- log_warning_msg "Skipping unsafe custom mount on ${dest}"
- continue
- fi
-
- for opt in $(echo ${options} | tr ',' ' ');
- do
- case "${opt}" in
- "linkfiles")
+ live_rofs="${rootmnt}/live/rofs/${d##*/}"
+ live_rofs_list="${live_rofs_list} ${live_rofs}"
+ mkdir -p "${live_rofs}"
+ case d in
+ *.dir)
+ # do nothing # mount -o bind "${d}" "${live_rofs}"
+ ;;
+ *)
+ case "${UNIONTYPE}" in
+ unionfs-fuse)
+ mount -o bind "${d}" "${live_rofs}"
;;
*)
- log_warning_msg "Skipping custom mount with unkown option: ${opt}"
- continue
+ mount -o move "${d}" "${live_rofs}"
;;
esac
- done
-
- # FIXME: handle case: we already have /a/b in $bindings added from current $device, but now we find /a -- /a should replace /a/b in $bindings.
- # FIXME: handle case: we have /a in $bindings from current $device, now we find /a/b, so we skip /a/b
-
- # ensure that no multiple-/ occur in paths
- full_source="$(echo ${backing}/${source}/ | sed -e 's|/\+|/|g')"
- full_dest="$(echo ${rootmnt}/${dest}/ | sed -e 's|/\+|/|g')"
- device_used="yes"
- if echo ${options} | grep -qe "\<linkfiles\>";
- then
- echo "${full_source} ${full_dest} ${options}" >> ${links}
- else
- echo "${full_source} ${full_dest} ${options}" >> ${bindings}
- fi
- done < ${include_list}
-
- if [ -z "${device_used}" ]
- then
- # this device was not used for / earlier, or custom mount point now, so it's useless
- umount "${backing}"
- rmdir "${backing}"
- fi
+ ;;
+ esac
done
+ fi
- # We sort the list according to destination so we're sure
- # 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}
+ # Adding custom persistent
+ if [ -n "${PERSISTENT}" ] && [ -z "${NOPERSISTENT}" ]
+ then
+ local custom_mounts="/custom_mounts.list"
+ rm -rf ${custom_mounts} 2> /dev/null
- # 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}
+ # Gather information about custom mounts from devies detected as overlays
+ get_custom_mounts ${overlay_devices} ${custom_mounts} ${rootmnt}
- [ "${DEBUG}" = "Yes" ] && cp ${custom_mounts} ${persistent_backing}
+ [ "${DEBUG}" = "Yes" ] && cp ${custom_mounts} "${rootmnt}/live/persistent"
# 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"
- continue
- fi
-
- # FIXME: we don't handle already existing non-directory files in the paths of both $source and $dest.
-
- if [ ! -d "${dest}" ]
- then
- # if ${dest} is in /home/$user, try fixing proper ownership
- # FIXME: this should really be handled by live-config since we don't know for sure which uid a certain user has until then
- if echo ${dest} | grep -qe "^${rootmnt}/*home/\+[^/]\+"
- then
- path="/"
- for dir in $(echo ${dest} | sed -e 's|/\+| |g')
- do
- path=${path}/${dir}
- if [ ! -e ${path} ]
- then
- mkdir -p ${path}
- # assume that the intended user is the first, which is usually the case
- chown 1000:1000 ${path}
- fi
- done
- else
- mkdir -p ${dest}
- fi
- fi
-
- # FIXME: could we instead only save the aufs-diff in the persistent media? implications? What about when there's changes in the live image?
-
- # if ${source} doesn't exist on our persistent media we
- # bootstrap it with $dest from the live filesystem.
- # this both makes sense and is critical if we're
- # dealing with /etc or other system dir.
- if [ ! -d "${source}" ]
- then
- if [ -n "${PERSISTENT_READONLY}" ] || [ -n "${opt_linkfiles}" ]
- then
- continue
- fi
- # ensure that $dest is not copied *into* $source
- mkdir -p "$(dirname ${source})"
- cp -a "${dest}" "${source}"
- fi
-
- if [ -z "${PERSISTENT_READONLY}" ]
- then
- if [ -n "${opt_linkfiles}" ]
- then
- links_source="${source}"
- links_dest="${dest}"
- 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}"
- fi
- 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}"
- fi
-
- if [ -n "${opt_linkfiles}" ]
- then
- link_files "${links_source}" "${links_dest}" "${rootmnt}"
- fi
-
- PERSISTENCE_IS_ON="1"
- export PERSISTENCE_IS_ON
- done < ${custom_mounts}
- rm -f ${bindings}
+ do_custom_mounts ${custom_mounts} ${rootmnt}
+ rm ${custom_mounts}
# Look for other snapshots to copy in
try_snap "${root_snapdata}" "${rootmnt}" "ROOT"
try_snap "${home_snapdata}" "${rootmnt}" "HOME" "/home"
fi
- if [ -n "${SHOWMOUNTS}" ]
- then
- for d in ${rofslist}
- do
- mkdir -p "${rootmnt}/live/${d##*/}"
-
- case d in
- *.dir)
- # do nothing # mount -o bind "${d}" "${rootmnt}/live/${d##*/}"
- ;;
-
- *)
- case "${UNIONTYPE}" in
- unionfs-fuse)
- mount -o bind "${d}" "${rootmnt}/live/${d##*/}"
- ;;
-
- *)
- mount -o move "${d}" "${rootmnt}/live/${d##*/}"
- ;;
- esac
- ;;
- esac
- done
- fi
-
# shows cow fs on /cow for use by live-snapshot
mkdir -p "${rootmnt}/live/cow"
mount -o move /cow "${rootmnt}/live/cow" >/dev/null 2>&1 || mount -o bind /cow "${rootmnt}/live/cow" || log_warning_msg "Unable to move or bind /cow to ${rootmnt}/live/cow"