diff -urN old/etc/initrd.scripts new/etc/initrd.scripts --- old/etc/initrd.scripts 2022-09-02 16:18:14.019410585 -0400 +++ new/etc/initrd.scripts 2022-09-02 16:26:02.879402191 -0400 @@ -326,6 +326,24 @@ findmediamount "cdrom" "${SUBDIR}/${CDROOT_MARKER}" \ "REAL_ROOT" "${CDROOT_PATH}" ${DEVICES} + if [ -n "${overlayfs_persist}" ] && [ -n "${overlayfs_persist_dev}" ]; then + persist_dev=/mnt/persist_dev + mkdir "${persist_dev}" + findmediamount "persist" "${overlayfs_persist}" \ + "PERSIST" "${persist_dev}" ${overlayfs_persist_dev} + elif [ -n "${overlayfs_persist}" ]; then + if [ -f "${CDROOT_PATH}/${overlayfs_persist}" ]; then + persist_dev=${CDROOT_PATH} + elif [ -n "${ISOBOOT}" ] && [ -f "/mnt/iso/${overlayfs_persist}" ]; then + persist_dev=/mnt/iso + else + persist_dev=/mnt/persist_dev + mkdir "${persist_dev}" + findmediamount "persist" "${overlayfs_persist}" \ + "PERSIST" "${persist_dev}" ${DEVICES} + fi + fi + if [ "${VERIFY}" = '1' ] then cd "${CDROOT_PATH}" @@ -407,6 +425,18 @@ run rm -rf ${NEW_ROOT}/mnt/livecd.* 2>/dev/null run rm -rf ${NEW_ROOT}/mnt/image.* 2>/dev/null run rm -rf ${NEW_ROOT}/mnt/zisofs 2>/dev/null + elif [ -n "${overlayfs_persist}" ] && [ -n "${persist_dev}" ]; then + good_msg "Copying persist file for caching ..." + # Verify that the needed directory exists + run mkdir -p "$(dirname ${NEW_ROOT}/mnt/${overlayfs_persist})" + run cp -a ${persist_dev}/${overlayfs_persist} ${NEW_ROOT}/mnt/${overlayfs_persist} + if [ $? -ne 0 ] + then + warn_msg "Failed to cache the persist file! Lack of RAM?" 0 + run rm -rf ${NEW_ROOT}/mnt/${overlayfs_persist} 2>/dev/null + else + persist_dev=${NEW_ROOT}/mnt + fi fi fi fi @@ -818,6 +848,7 @@ local overlay=/mnt/overlay local upperdir="${overlay}/.upper" local workdir="${overlay}/.work" + local persist="${overlay}/.persist" local static=/mnt/livecd run_debug_shell overlayfs @@ -830,23 +861,45 @@ run modprobe overlay >/dev/null 2>&1 checkfs overlay - mount -t squashfs -o loop,ro "${CDROOT_PATH}/${LOOPEXT}${LOOP}" "${static}" + if [ -f "${NEW_ROOT}/mnt/${LOOP}" ]; then + run mount -t squashfs -o loop,ro "${NEW_ROOT}/mnt/${LOOP}" "${static}" + else + run mount -t squashfs -o loop,ro "${CDROOT_PATH}/${LOOPEXT}${LOOP}" "${static}" + fi mount -t tmpfs none "${overlay}" - mkdir "${upperdir}" "${workdir}" + mkdir "${upperdir}" "${workdir}" "${persist}" + + if [ -n "${overlayfs_persist}" ] && [ -n "${persist_dev}" ] && [ -f "${persist_dev}/${overlayfs_persist}" ]; then + run mount -t squashfs -o loop,ro "${persist_dev}/${overlayfs_persist}" "${persist}" + fi is_union_modules overlayfs - run mount -t overlay overlay -o lowerdir="${static}${mod_path}",upperdir="${upperdir}",workdir="${workdir}" "${NEW_ROOT}" + run mount -t overlay overlay -o lowerdir="${persist}:${static}${mod_path}",upperdir="${upperdir}",workdir="${workdir}" "${NEW_ROOT}" [ ! -d "${NEW_ROOT}${overlay}" ] && mkdir -p "${NEW_ROOT}${overlay}" [ ! -d "${NEW_ROOT}${static}" ] && mkdir -p "${NEW_ROOT}${static}" - echo "overlay / overlay defaults 0 0" > "${NEW_ROOT}"/etc/fstab + [ ! -f ${persist}/etc/fstab ] && echo "overlay / overlay defaults 0 0" > "${NEW_ROOT}"/etc/fstab - for i in "${overlay}" "${static}" + for i in "${overlay}" "${static}" "${persist}" do run mount --bind "${i}" "${NEW_ROOT}${i}" done + for i in "/mnt/iso" "${CDROOT_PATH}" "/mnt/persist_dev" + do + if [ -d "${i}" ] && mountpoint -q "${i}"; then + if (grep -q $(mountpoint -n "${i}" | sed -e 's/ .*$//' | head -n 1) ${NEW_ROOT}/etc/fstab); then + local mountpoint_iso="$(grep $(mountpoint -n "${i}" | sed -e 's/ .*$//' | head -n 1) ${NEW_ROOT}/etc/fstab)" + run mount --move "${i}" "${NEW_ROOT}$(echo ${mountpoint_iso} | cut -d ' ' -f2)" + run mount -o "remount,$(echo ${mountpoint_iso} | cut -d ' ' -f4)" "${NEW_ROOT}$(echo ${mountpoint_iso} | cut -d ' ' -f2)" + else + mkdir -p "${NEW_ROOT}${i}" + run mount --move "${i}" "${NEW_ROOT}${i}" + fi + fi + done + # Did we populate the overlayfs modules path locations variable? if [ -n "${mods}" ] then diff -urN old/init new/init --- old/init 2022-09-02 16:18:14.056077251 -0400 +++ new/init 2022-09-02 16:18:37.809410149 -0400 @@ -429,6 +429,13 @@ overlayfs_dev=${x#*=} fi ;; + # Allow user to specify persistent image on top of image.squashfs + overlayfs_persist\=*) + overlayfs_persist=${x#*=} + ;; + overlayfs_persist_dev\=*) + overlayfs_persist_dev=${x#*=} + ;; # Allow user to specify the modules location overlayfs.modules\=*) overlayfs_modules_dir=${x#*=} @@ -1262,7 +1269,8 @@ then [ ! -d "${CHROOT}${CDROOT_PATH}" ] && mkdir "${CHROOT}${CDROOT_PATH}" run mount --move "${CDROOT_PATH}" "${CHROOT}${CDROOT_PATH}" - else + elif run mountpoint -q "${CDROOT_PATH}" + then [ ! -d "${NEW_ROOT}${CDROOT_PATH}" ] && mkdir -p "${NEW_ROOT}${CDROOT_PATH}" run mount --move "${CDROOT_PATH}" "${NEW_ROOT}${CDROOT_PATH}" fi