croot="/"
# Let's just mount the read-only file systems first
- rofslist=""
+ rootfslist=""
if [ -z "${PLAIN_ROOT}" ]
then
if [ -d "${image}" ]
then
# it is a plain directory: do nothing
- rofslist="${image} ${rofslist}"
+ rootfslist="${image} ${rootfslist}"
elif [ -f "${image}" ]
then
if losetup --help 2>&1 | grep -q -- "-r\b"
case "${UNIONTYPE}" in
unionmount)
mpoint="${rootmnt}"
- rofslist="${rootmnt} ${rofslist}"
+ rootfslist="${rootmnt} ${rootfslist}"
;;
*)
mpoint="${croot}/${imagename}"
- rofslist="${mpoint} ${rofslist}"
+ rootfslist="${mpoint} ${rootfslist}"
;;
esac
log_begin_msg "Mounting \"${image_directory}\" on \"${croot}/filesystem\""
mount -t $(get_fstype "${image_directory}") -o ro,noatime "${image_directory}" "${croot}/filesystem" || \
panic "Can not mount ${image_directory} on ${croot}/filesystem" && \
- rofslist="${croot}/filesystem ${rofslist}"
+ rootfslist="${croot}/filesystem ${rootfslist}"
# probably broken:
mount -o bind ${croot}/filesystem $mountpoint
log_end_msg
done
fi
- case "${PERSISTENCE_MEDIA}" in
- removable)
- whitelistdev="$(removable_dev)"
- ;;
-
- removable-usb)
- whitelistdev="$(removable_usb_dev)"
- ;;
+ local whitelistdev
+ whitelistdev=""
+ if [ -n "${PERSISTENCE_MEDIA}" ]
+ then
+ case "${PERSISTENCE_MEDIA}" in
+ removable)
+ whitelistdev="$(removable_dev)"
+ ;;
- *)
- whitelistdev=""
- ;;
- esac
+ removable-usb)
+ whitelistdev="$(removable_usb_dev)"
+ ;;
+ esac
+ if [ -z "${whitelistdev}" ]
+ then
+ whitelistdev="ignore_all_devices"
+ fi
+ fi
if is_in_comma_sep_list overlay ${PERSISTENCE_METHOD}
then
- overlays="${old_root_overlay_label} ${old_home_overlay_label} ${custom_overlay_label}"
+ overlays="${custom_overlay_label}"
fi
- local overlay_devices=""
- for media in $(find_persistence_media "${overlays}" "${whitelistdev}")
- do
- media="$(echo ${media} | tr ":" " ")"
-
- case ${media} in
- ${old_root_overlay_label}=*)
- device="${media#*=}"
- fix_backwards_compatibility ${device} / union
- overlay_devices="${overlay_devices} ${device}"
- ;;
-
- ${old_home_overlay_label}=*)
- device="${media#*=}"
- fix_backwards_compatibility ${device} /home bind
- overlay_devices="${overlay_devices} ${device}"
- ;;
+ local overlay_devices
+ overlay_devices=""
+ if [ "${whitelistdev}" != "ignore_all_devices" ]
+ then
+ for media in $(find_persistence_media "${overlays}" "${whitelistdev}")
+ do
+ media="$(echo ${media} | tr ":" " ")"
- ${custom_overlay_label}=*)
- device="${media#*=}"
- overlay_devices="${overlay_devices} ${device}"
- ;;
- esac
- done
+ case ${media} in
+ ${custom_overlay_label}=*)
+ device="${media#*=}"
+ overlay_devices="${overlay_devices} ${device}"
+ ;;
+ esac
+ done
+ fi
elif [ -n "${NFS_COW}" ] && [ -z "${NOPERSISTENCE}" ]
then
# check if there are any nfs options
fi
fi
- rofscount=$(echo ${rofslist} |wc -w)
+ rootfscount=$(echo ${rootfslist} |wc -w)
- rofs=${rofslist%% }
+ rootfs=${rootfslist%% }
if [ -n "${EXPOSED_ROOT}" ]
then
- if [ ${rofscount} -ne 1 ]
+ if [ ${rootfscount} -ne 1 ]
then
- panic "only one RO file system supported with exposedroot: ${rofslist}"
+ panic "only one RO file system supported with exposedroot: ${rootfslist}"
fi
- mount --bind ${rofs} ${rootmnt} || \
- panic "bind mount of ${rofs} failed"
+ mount --bind ${rootfs} ${rootmnt} || \
+ panic "bind mount of ${rootfs} failed"
if [ -z "${SKIP_UNION_MOUNTS}" ]
then
then
# FIXME: handle PERSISTENCE_READONLY
unionmountopts="-t ${cow_fstype} -o noatime,union,${cow_mountopt} ${cowdevice}"
- mount_full $unionmountopts "${unionmountpoint}"
+ # unionmount only works with util-linux mount
+ mount.util-linux $unionmountopts "${unionmountpoint}"
else
cow_dir="/live/overlay${dir}"
- rofs_dir="${rofs}${dir}"
+ rootfs_dir="${rootfs}${dir}"
mkdir -p ${cow_dir}
if [ -n "${PERSISTENCE_READONLY}" ] && [ "${cowdevice}" != "tmpfs" ]
then
- do_union ${unionmountpoint} ${cow_dir} ${root_backing} ${rofs_dir}
+ do_union ${unionmountpoint} ${cow_dir} ${root_backing} ${rootfs_dir}
else
- do_union ${unionmountpoint} ${cow_dir} ${rofs_dir}
+ do_union ${unionmountpoint} ${cow_dir} ${rootfs_dir}
fi
fi || panic "mount ${UNIONTYPE} on ${unionmountpoint} failed with option ${unionmountopts}"
done
chmod 1777 "${rootmnt}"/tmp
fi
- 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 "${PERSISTENCE}" ] && [ -z "${NOPERSISTENCE}" ] 1)
- then
- # 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="/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}"
- ;;
-
- *)
- mount -o move "${d}" "${live_rofs}"
- ;;
- esac
- ;;
- esac
- done
- fi
+ live_rootfs_list=""
+ for d in ${rootfslist}
+ do
+ live_rootfs="/live/rootfs/${d##*/}"
+ live_rootfs_list="${live_rootfs_list} ${live_rootfs}"
+ mkdir -p "${live_rootfs}"
+ case d in
+ *.dir)
+ # do nothing # mount -o bind "${d}" "${live_rootfs}"
+ ;;
+ *)
+ case "${UNIONTYPE}" in
+ unionfs-fuse)
+ mount -o bind "${d}" "${live_rootfs}"
+ ;;
+
+ *)
+ mount -o move "${d}" "${live_rootfs}"
+ ;;
+ esac
+ ;;
+ esac
+ done
# Adding custom persistence
if [ -n "${PERSISTENCE}" ] && [ -z "${NOPERSISTENCE}" ]
then
- local custom_mounts="/tmp/custom_mounts.list"
+ local custom_mounts
+ custom_mounts="/tmp/custom_mounts.list"
rm -rf ${custom_mounts} 2> /dev/null
# Gather information about custom mounts from devies detected as overlays
get_custom_mounts ${custom_mounts} ${overlay_devices}
- [ -n "${DEBUG}" ] && cp ${custom_mounts} "/live/persistence"
+ [ -n "${DEBUG}" ] && cp ${custom_mounts} "/lib/live/mount/persistence"
# Now we do the actual mounting (and symlinking)
- local used_overlays=""
+ local used_overlays
+ used_overlays=""
used_overlays=$(activate_custom_mounts ${custom_mounts})
rm ${custom_mounts}
done
fi
- # make /root/lib/live writable for moving filesystems
- mkdir -p "${rootmnt}/lib/live"
- mount -t tmpfs tmpfs "${rootmnt}/lib/live"
-
- # move all mountpoints to root filesystem
- for _DIRECTORY in rofs persistence
- do
- if [ -d "/live/${_DIRECTORY}" ]
- then
- mkdir -p "${rootmnt}/lib/live/${_DIRECTORY}"
-
- for _MOUNT in $(ls /live/${_DIRECTORY})
- do
- mkdir -p "${rootmnt}/lib/live/${_DIRECTORY}/${_MOUNT}"
- mount -o move "/live/${_DIRECTORY}/${_MOUNT}" "${rootmnt}/lib/live/${_DIRECTORY}/${_MOUNT}" > /dev/null 2>&1 || \
- mount -o bind "/live/${_DIRECTORY}/${_MOUNT}" "${rootmnt}/lib/live/${_DIRECTORY}/${_MOUNT}" || \
- log_warning_msg "W: failed to mount /live/${_DIRECTORY}/${_MOUNT} to ${rootmnt}/lib/live/${_DIRECTORY}/${_MOUNT}"
- done
- fi
- done
-
- mkdir -p "${rootmnt}/lib/live/overlay"
- mount -o move /live/overlay "${rootmnt}/lib/live/overlay" > /dev/null 2>&1 || \
- mount -o bind /live/overlay "${rootmnt}/lib/live/overlay" || \
- log_warning_msg "W: failed to mount /live/overlay to ${rootmnt}/lib/live/overlay"
-
+ # ensure that a potentially stray tmpfs gets removed
+ # otherways, initramfs-tools is unable to remove /live
+ # and fails to boot
+ umount /live/overlay > /dev/null 2>&1 || true
}