# ProLinux Init # /squishroot - squashfs rootfs # /persistroot - overlayed persisant storage # /tmproot - overlayed tmpfs # /workdir - overlayfs workdir # /oroot - target root splash_error() { show_splash "ERROR: $1" sleep 5 pkill pbsplash /bin/busybox sh } echo "Running ProLinux Init script..." # show_splash "Loading system configuration..." pkill pbsplash echo "-- Welcome to Sineware ProLinux 2 --" modprobe squashfs || echo "Could not load squashfs module!" modprobe overlay || echo "Could not load overlayfs module!" echo "Mounting prolinux squashfs 'squishroot'" mount -o remount,rw /sysroot echo "----" echo "Loading System Configuration..." # read /sysroot/data/prolinux.toml for which squashfs to use selected_root=$(awk -F "=" '/pl2.selected_root/ {print $2}' /sysroot/data/prolinux.toml | tr -d ' ' | tr -d "'") locked_root=$(awk -F "=" '/pl2.locked_root/ {print $2}' /sysroot/data/prolinux.toml | tr -d ' ' | tr -d "'") disable_kexec=$(awk -F "=" '/pl2.disable_kexec/ {print $2}' /sysroot/data/prolinux.toml | tr -d ' ' | tr -d "'") echo "Selected Root: $selected_root" echo "Locked Root: $locked_root" echo "Disable Kexec: $disable_kexec" echo "----" mount -o loop /sysroot/prolinux_${selected_root}.squish /sysroot/squishroot # if pl2.stage2 is in the cmdline, OR if disable_kexec is true, we are in stage 2 if [ "$(cat /proc/cmdline | grep pl2.stage2)" != "" ] || [ "$disable_kexec" = "true" ]; then echo "Loaded stage 2 kernel!" # If /sysroot/data/.reset_persistroot exists, we need to reset the persistroot if [ -f /sysroot/data/.reset_persistroot ]; then echo "Resetting persistroot..." rm -rf /sysroot/persistroot/* rm -rf /sysroot/data/.reset_persistroot fi # we are booted into the stage 2 kernel. # if we are locked, we need to mount the locked rootfs mkdir -pv /sysroot/data/customization if [ "$locked_root" = "true" ]; then echo "Locked rootfs detected, mounting..." mkdir -pv /tmproot mount -t tmpfs tmpfs /tmproot mkdir -pv /tmproot/overlay mkdir -pv /tmproot/workdir mount -t overlay overlay -o lowerdir=/sysroot/data/customization:/sysroot/persistroot:/sysroot/squishroot,upperdir=/tmproot/overlay,workdir=/tmproot/workdir /sysroot/oroot || splash_error "Could not mount overlayfs!" else mount -t overlay overlay -o lowerdir=/sysroot/data/customization:/sysroot/squishroot,upperdir=/sysroot/persistroot,workdir=/sysroot/workdir /sysroot/oroot || splash_error "Could not mount overlayfs!" fi echo "Binding persistent directories into oroot" mount --bind /sysroot /sysroot/oroot/sineware mount --bind /sysroot/data/home /sysroot/oroot/home mkdir -pv /sysroot/oroot/lib/modules mount --bind /sysroot/squishroot/opt/device-support/$deviceinfo_codename/modules /sysroot/oroot/usr/lib/modules || splash_error "Could not mount kernel modules!" mkdir -pv /sysroot/oroot/lib/firmware mount --bind /sysroot/squishroot/opt/device-support/$deviceinfo_codename/firmware /sysroot/oroot/usr/lib/firmware || splash_error "Could not mount firmware!" # Podman container directories mkdir -pv /sysroot/data/containers mount --bind /sysroot/data/containers /sysroot/oroot/var/lib/containers # PMOS_BOOT to /sysroot/oroot/boot #mkdir -pv /sysroot/oroot/boot #mount /dev/disk/by-label/PMOS_BOOT /sysroot/oroot/boot || splash_error "Could not mount PMOS_BOOT!" echo $deviceinfo_codename > /sysroot/deviceinfo_codename ls -l /sysroot echo "----" #/bin/busybox sh ls -l /sysroot/oroot echo "Starting up..." show_splash "Starting up..." else echo "Loading stage 2 kernel (kexec) from /sysroot/squishroot/device-support/$deviceinfo_codename/..." cmdline=$(cat /proc/cmdline) # remove initcall_blacklist=* from cmdline cmdline=$(echo $cmdline | sed 's/initcall_blacklist=[^ ]*//g') cmdline=$(echo $cmdline | sed 's/modprobe.blacklist=[^ ]*//g') cmdline="$cmdline pl2.stage2" kexec -l /sysroot/squishroot/opt/device-support/$deviceinfo_codename/vmlinuz* --initrd=/sysroot/squishroot/opt/device-support/$deviceinfo_codename/initramfs --append="$cmdline" umount /sysroot/squishroot kexec -e # kexec failed splash_error "Could not kexec stage 2 kernel!" fi