mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-26 02:11:53 +00:00
- Update patch-db submodule: fixes DB null-nuke caused by ciborium's broken deserialize_str, and stack overflow from recursive apply_patches - Create /media/startos with mode 750 in initramfs before subdirectories
116 lines
3.1 KiB
Bash
Executable File
116 lines
3.1 KiB
Bash
Executable File
# Local filesystem mounting -*- shell-script -*-
|
|
|
|
#
|
|
# This script overrides local_mount_root() in /scripts/local
|
|
# and mounts root as a read-only filesystem with a temporary (rw)
|
|
# overlay filesystem.
|
|
#
|
|
|
|
. /scripts/local
|
|
|
|
local_mount_root()
|
|
{
|
|
echo 'using startos initramfs module'
|
|
|
|
local_top
|
|
local_device_setup "${ROOT}" "root file system"
|
|
ROOT="${DEV}"
|
|
|
|
# Get the root filesystem type if not set
|
|
if [ -z "${ROOTFSTYPE}" ]; then
|
|
FSTYPE=$(get_fstype "${ROOT}")
|
|
else
|
|
FSTYPE=${ROOTFSTYPE}
|
|
fi
|
|
|
|
local_premount
|
|
|
|
# CHANGES TO THE ORIGINAL FUNCTION BEGIN HERE
|
|
# N.B. this code still lacks error checking
|
|
|
|
modprobe ${FSTYPE}
|
|
checkfs ${ROOT} root "${FSTYPE}"
|
|
|
|
echo 'mounting startos'
|
|
mkdir /startos
|
|
|
|
ROOTFLAGS="$(echo "${ROOTFLAGS}" | sed 's/subvol=\(next\|current\)//' | sed 's/^-o *$//')"
|
|
|
|
if [ "${FSTYPE}" != "unknown" ]; then
|
|
mount -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} /startos
|
|
else
|
|
mount ${ROOTFLAGS} ${ROOT} /startos
|
|
fi
|
|
|
|
if [ -d /startos/images ]; then
|
|
if [ -h /startos/config/current.rootfs ] && [ -e /startos/config/current.rootfs ]; then
|
|
image=$(readlink -f /startos/config/current.rootfs)
|
|
else
|
|
image="$(ls -t1 /startos/images/*.rootfs | head -n1)"
|
|
fi
|
|
if ! [ -f "$image" ]; then
|
|
>&2 echo "image $image not available to boot"
|
|
exit 1
|
|
fi
|
|
else
|
|
if [ -f /startos/config/upgrade ] && [ -d /startos/next ]; then
|
|
oldroot=/startos/next
|
|
elif [ -d /startos/current ]; then
|
|
oldroot=/startos/current
|
|
elif [ -d /startos/prev ]; then
|
|
oldroot=/startos/prev
|
|
else
|
|
>&2 echo no StartOS filesystem found
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p /startos/config/overlay/etc
|
|
mv $oldroot/etc/fstab /startos/config/overlay/etc/fstab
|
|
mv $oldroot/etc/machine-id /startos/config/overlay/etc/machine-id
|
|
mv $oldroot/etc/ssh /startos/config/overlay/etc/ssh
|
|
|
|
mkdir -p /startos/images
|
|
mv $oldroot /startos/images/legacy.rootfs
|
|
|
|
rm -rf /startos/next /startos/current /startos/prev
|
|
|
|
ln -rsf /startos/images/old.squashfs /startos/config/current.rootfs
|
|
image=$(readlink -f /startos/config/current.rootfs)
|
|
fi
|
|
|
|
mkdir /lower /upper
|
|
|
|
if [ -d "$image" ]; then
|
|
mount -r --bind $image /lower
|
|
elif [ -f "$image" ]; then
|
|
modprobe loop
|
|
modprobe squashfs
|
|
mount -r $image /lower
|
|
else
|
|
>&2 echo "not a regular file or directory: $image"
|
|
exit 1
|
|
fi
|
|
|
|
modprobe overlay || insmod "/lower/lib/modules/$(uname -r)/kernel/fs/overlayfs/overlay.ko"
|
|
|
|
# Mount a tmpfs for the overlay in /upper
|
|
mount -t tmpfs tmpfs /upper
|
|
mkdir /upper/data /upper/work
|
|
|
|
mkdir -p /startos/config/overlay
|
|
|
|
# Mount the final overlay-root in $rootmnt
|
|
mount -t overlay \
|
|
-olowerdir=/startos/config/overlay:/lower,upperdir=/upper/data,workdir=/upper/work \
|
|
overlay ${rootmnt}
|
|
|
|
mkdir -m 750 -p ${rootmnt}/media/startos
|
|
mkdir -p ${rootmnt}/media/startos/config
|
|
mount --bind /startos/config ${rootmnt}/media/startos/config
|
|
mkdir -p ${rootmnt}/media/startos/images
|
|
mount --bind /startos/images ${rootmnt}/media/startos/images
|
|
mkdir -p ${rootmnt}/media/startos/root
|
|
mount -r --bind /startos ${rootmnt}/media/startos/root
|
|
mkdir -p ${rootmnt}/media/startos/current
|
|
mount -r --bind /lower ${rootmnt}/media/startos/current
|
|
} |