log_end_msg
fi
- mkdir -p /overlay
+ # tmpfs file systems
+ touch /etc/fstab
+ mkdir -p /live
+ mount -t tmpfs tmpfs /live
+ mkdir -p /live/overlay
# Looking for persistence devices or files
if [ -n "${PERSISTENCE}" ] && [ -z "${NOPERSISTENCE}" ]
;;
esac
- if echo ${PERSISTENCE_METHOD} | grep -qe "\<overlay\>"
+ if is_in_comma_sep_list overlay ${PERSISTENCE_METHOD}
then
- overlays="${root_overlay_label} ${old_root_overlay_label} ${old_home_overlay_label} ${custom_overlay_label}"
+ overlays="${old_root_overlay_label} ${old_home_overlay_label} ${custom_overlay_label}"
fi
- if echo ${PERSISTENCE_METHOD} | grep -qe "\<snapshot\>"
+ if is_in_comma_sep_list snapshot ${PERSISTENCE_METHOD}
then
snapshots="${root_snapshot_label} ${home_snapshot_label}"
fi
local root_snapdata=""
- local home_snapshot_label=""
- local root_overlay_label=""
+ local home_snapdata=""
local overlay_devices=""
for media in $(find_persistence_media "${overlays}" "${snapshots}" "${whitelistdev}")
do
home_snapdata="${media#*=}"
fi
;;
- ${root_overlay_label}=*|${old_root_overlay_label}=*)
- if [ -z "${root_overlay_device}" ]
- then
- device="${media#*=}"
- root_overlay_device="${device}"
- fi
+ ${old_root_overlay_label}=*)
+ device="${media#*=}"
+ fix_backwards_compatibility ${device} / union
+ overlay_devices="${overlay_devices} ${device}"
;;
${old_home_overlay_label}=*)
device="${media#*=}"
- fix_home_rw_compatibility ${device}
+ fix_backwards_compatibility ${device} /home bind
overlay_devices="${overlay_devices} ${device}"
;;
${custom_overlay_label}=*)
;;
esac
done
-
- if [ -b "${root_overlay_device}" ]
- then
- PERSISTENCE_IS_ON="1"
- export PERSISTENCE_IS_ON
-
- cowdevice=${root_overlay_device}
- cow_fstype=$(get_fstype "${root_overlay_device}")
- if [ -z "${PERSISTENCE_READONLY}" ]
- then
- cow_mountopt="rw,noatime"
- else
- cow_mountopt="ro,noatime"
- fi
-
- if [ "${FORCEPERSISTENCEFSCK}" = "Yes" ]
- then
- fsck -y ${cowdevice}
- fi
- fi
elif [ -n "${NFS_COW}" ] && [ -z "${NOPERSISTENCE}" ]
then
# check if there are any nfs options
if [ "${UNIONTYPE}" != "unionmount" ]
then
- if [ -n "${PERSISTENCE_READONLY}" ]
+ if [ -n "${PERSISTENCE_READONLY}" ] && [ "${cowdevice}" != "tmpfs" ]
then
- mount -t tmpfs -o rw,noatime,mode=755 tmpfs "/overlay"
- root_backing="${rootmnt}/live/persistence/$(basename ${cowdevice})-root"
+ mount -t tmpfs -o rw,noatime,mode=755 tmpfs "/live/overlay"
+ root_backing="/live/persistence/$(basename ${cowdevice})-root"
mkdir -p ${root_backing}
else
- root_backing="/overlay"
+ root_backing="/live/overlay"
fi
if [ "${cow_fstype}" = "nfs" ]
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}"
- fi
rofs=${rofslist%% }
if [ -n "${EXPOSED_ROOT}" ]
then
+ if [ ${rofscount} -ne 1 ]
+ then
+ panic "only one RO file system supported with exposedroot: ${rofslist}"
+ fi
+
mount --bind ${rofs} ${rootmnt} || \
panic "bind mount of ${rofs} failed"
unionmountopts="-t ${cow_fstype} -o noatime,union,${cow_mountopt} ${cowdevice}"
mount_full $unionmountopts "${unionmountpoint}"
else
- cow_dir="/overlay${dir}"
+ cow_dir="/live/overlay${dir}"
rofs_dir="${rofs}${dir}"
mkdir -p ${cow_dir}
if [ -n "${PERSISTENCE_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}
# Correct the permissions of /:
chmod 0755 "${rootmnt}"
- # tmpfs file systems
- touch /etc/fstab
- mkdir -p "${rootmnt}/live"
- mount -t tmpfs tmpfs ${rootmnt}/live
-
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
# 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
- live_rofs="${rootmnt}/live/rofs/${d##*/}"
+ live_rofs="/live/rofs/${d##*/}"
live_rofs_list="${live_rofs_list} ${live_rofs}"
mkdir -p "${live_rofs}"
case d in
# Gather information about custom mounts from devies detected as overlays
get_custom_mounts ${custom_mounts} ${overlay_devices}
- [ -n "${DEBUG}" ] && cp ${custom_mounts} "${rootmnt}/live/persistence"
+ [ -n "${DEBUG}" ] && cp ${custom_mounts} "/live/persistence"
# Now we do the actual mounting (and symlinking)
local used_overlays=""
done
# Look for other snapshots to copy in
- try_snap "${root_snapdata}" "${rootmnt}" "ROOT"
+ [ -n "${root_snapdata}" ] && try_snap "${root_snapdata}" "${rootmnt}" "ROOT"
# This second type should be removed when snapshot grow smarter
- try_snap "${home_snapdata}" "${rootmnt}" "HOME" "/home"
+ [ -n "${home_snapdata}" ] && try_snap "${home_snapdata}" "${rootmnt}" "HOME" "/home"
fi
+ mkdir -p "${rootmnt}/live"
+ mount -o move /live "${rootmnt}/live" >/dev/null 2>&1 || mount -o bind /live "${rootmnt}/live" || log_warning_msg "Unable to move or bind /live to ${rootmnt}/live"
+
# shows cow fs on /overlay for use by live-snapshot
mkdir -p "${rootmnt}/live/overlay"
- mount -o move /overlay "${rootmnt}/live/overlay" >/dev/null 2>&1 || mount -o bind /overlay "${rootmnt}/live/overlay" || log_warning_msg "Unable to move or bind /overlay to ${rootmnt}/live/overlay"
+ mount -o move /live/overlay "${rootmnt}/live/overlay" >/dev/null 2>&1 || mount -o bind /overlay "${rootmnt}/live/overlay" || log_warning_msg "Unable to move or bind /overlay to ${rootmnt}/live/overlay"
+
}
check_dev ()
if [ "$ISO_DEVICE" = "/" ]
then
- echo "Warning: device for bootoption isofrom= ($FROMISO) not found.">>/live-boot.log
+ echo "Warning: device for bootoption fromiso= ($FROMISO) not found.">>/boot.log
else
fs_type=$(get_fstype "${ISO_DEVICE}")
if is_supported_fs ${fs_type}
then
- mkdir /isofrom
- mount -t $fs_type "$ISO_DEVICE" /isofrom
+ mkdir /live/fromiso
+ mount -t $fs_type "$ISO_DEVICE" /live/fromiso
ISO_NAME="$(echo $FROMISO | sed "s|$ISO_DEVICE||")"
- loopdevname=$(setup_loop "/isofrom/${ISO_NAME}" "loop" "/sys/block/loop*" "" '')
+ loopdevname=$(setup_loop "/live/fromiso/${ISO_NAME}" "loop" "/sys/block/loop*" "" '')
devname="${loopdevname}"
else
- echo "Warning: unable to mount $ISO_DEVICE." >>/live-boot.log
+ echo "Warning: unable to mount $ISO_DEVICE." >>/boot.log
fi
fi
fi
exec 6>&1
exec 7>&2
- exec > live-boot.log
+ exec > boot.log
exec 2>&1
- tail -f live-boot.log >&7 &
+ tail -f boot.log >&7 &
tailpid="${!}"
# Ensure 'panic' function is overridden
# rid of it when running from RAM
if [ -n "$FROMISO" ] && [ "${TORAM}" ]
then
- losetup -d /dev/loop0
- grep -q /isofrom /proc/mounts && umount /isofrom
+ losetup -d /dev/loop0
+
+ if is_mountpoint /live/fromiso
+ then
+ umount /live/fromiso
+ rmdir --ignore-fail-on-non-empty /live/fromiso \
+ >/dev/null 2>&1 || true
+ fi
fi
if [ -n "${MODULETORAMFILE}" ] || [ -n "${PLAIN_ROOT}" ]
then
losetup -d /dev/loop0
- if is_mountpoint /live/findiso
+ if is_mountpoint /root/live/findiso
then
umount /root/live/findiso
rmdir --ignore-fail-on-non-empty /root/live/findiso \
exec 1>&6 6>&-
exec 2>&7 7>&-
kill ${tailpid}
- [ -w "${rootmnt}/var/log/" ] && cp live-boot.log "${rootmnt}/var/log/" 2>/dev/null
+ [ -w "${rootmnt}/var/log/" ] && mkdir -p /var/log/live && cp boot.log "${rootmnt}/var/log/live" 2>/dev/null
}