diff --git a/data/scripts/squashfsRoot.sh b/data/scripts/squashfsRoot.sh new file mode 100644 index 0000000..e06c11d --- /dev/null +++ b/data/scripts/squashfsRoot.sh @@ -0,0 +1,50 @@ +#!/bin/bash +set -e + +fail() { + echo -e "$1" >&2 + exit 1 +} + +echo "Lade SquashFS-Root in den RAM..." + +# Prüfen, ob genügend RAM verfügbar ist +RAM_FREE=$(grep MemAvailable /proc/meminfo | awk '{print $2}') +if [ "$RAM_FREE" -lt 1000000 ]; then # Mindestens 1GB RAM nötig + fail "Nicht genügend freier RAM!" +fi + +# RAMFS für SquashFS-Image erstellen +mount -t ramfs -o mode=0755 ramfs /mnt || fail "Fehler beim Mounten von ramfs" + +# SquashFS-Image nach RAM laden (600-900 MB) +cp /root.sqsh /mnt/root.sqsh || fail "Fehler beim Kopieren von SquashFS-Image" + +# SquashFS-Image mounten (Read-Only) +mkdir -p /mnt/squashfs +mount -t squashfs /mnt/root.sqsh /mnt/squashfs -o loop || fail "Fehler beim Mounten von SquashFS" + +# OverlayFS für Schreibzugriff einrichten +mkdir -p /mnt/overlay/{upper,work,newroot} +mount -t overlay overlay -o lowerdir=/mnt/squashfs,upperdir=/mnt/overlay/upper,workdir=/mnt/overlay/work /mnt/overlay/newroot || fail "Fehler beim Mounten von OverlayFS" + +# Mountpunkte ins neue Root verschieben +mkdir -p /mnt/overlay/newroot/{proc,sys,dev,run,tmp} +mount --move /proc /mnt/overlay/newroot/proc +mount --move /sys /mnt/overlay/newroot/sys +mount --move /dev /mnt/overlay/newroot/dev +mount --move /run /mnt/overlay/newroot/run + +# Root wechseln +cd /mnt/overlay/newroot +pivot_root . oldroot || fail "pivot_root fehlgeschlagen" + +# Altes Root unmounten +umount -l /oldroot/proc || true +umount -l /oldroot/sys || true +umount -l /oldroot/dev || true +umount -l /oldroot/run || true +umount -l /oldroot || true + +echo "SquashFS Root erfolgreich geladen. Starte init..." +exec /sbin/init