sbin/overlayRoot.sh aktualisiert

This commit is contained in:
2024-12-12 22:29:39 +01:00
parent ea5ff24038
commit 56f754c0ee

View File

@@ -26,43 +26,43 @@ modprobe overlay || fail "ERROR: OverlayFS-Modul nicht geladen."
mountpoint -q /proc || mount -t proc proc /proc mountpoint -q /proc || mount -t proc proc /proc
# Temporäres Dateisystem für Overlay erstellen # Temporäres Dateisystem für Overlay erstellen
mount -t tmpfs tmpfs /mnt || fail "ERROR: tmpfs konnte nicht gemountet werden." mount -t tmpfs tmpfs /overlay || fail "ERROR: tmpfs konnte nicht gemountet werden."
mkdir -p /mnt/lower /mnt/rw/upper /mnt/rw/work /mnt/newroot mkdir -p /overlay/lower /overlay/rw/upper /overlay/rw/work /overlay/newroot
# Root-Dateisystem schreibgeschützt einbinden # Root-Dateisystem schreibgeschützt einbinden
rootDev=$(awk '$2 == "/" {print $1}' /proc/mounts) rootDev=$(awk '$2 == "/" {print $1}' /proc/mounts)
rootMountOpt=$(awk '$2 == "/" {print $4}' /proc/mounts) rootMountOpt=$(awk '$2 == "/" {print $4}' /proc/mounts)
rootFsType=$(awk '$2 == "/" {print $3}' /proc/mounts) rootFsType=$(awk '$2 == "/" {print $3}' /proc/mounts)
mount -t "${rootFsType}" -o "${rootMountOpt},ro" "${rootDev}" /mnt/lower || \ mount -t "${rootFsType}" -o "${rootMountOpt},ro" "${rootDev}" /overlay/lower || \
fail "ERROR: Ursprüngliches Root-Dateisystem konnte nicht schreibgeschützt eingebunden werden." fail "ERROR: Ursprüngliches Root-Dateisystem konnte nicht schreibgeschützt eingebunden werden."
# OverlayFS einbinden # OverlayFS einbinden
mount -t overlay \ mount -t overlay \
-o lowerdir=/mnt/lower,upperdir=/mnt/rw/upper,workdir=/mnt/rw/work \ -o lowerdir=/overlay/lower,upperdir=/overlay/rw/upper,workdir=/overlay/rw/work \
overlay /mnt/newroot || fail "ERROR: OverlayFS konnte nicht gemountet werden." overlay /overlay/newroot || fail "ERROR: OverlayFS konnte nicht gemountet werden."
# Neue Root-Overlay-Verzeichnisse erstellen # Neue Root-Overlay-Verzeichnisse erstellen
mkdir -p /mnt/newroot/overlay/ro /mnt/newroot/overlay/rw mkdir -p /overlay/newroot/overlay/ro /overlay/newroot/overlay/rw
# Originale fstab modifizieren # Originale fstab modifizieren
grep -v "$rootDev" /mnt/lower/etc/fstab > /mnt/newroot/etc/fstab grep -v "$rootDev" /overlay/lower/etc/fstab > /overlay/newroot/etc/fstab
cat <<EOF >> /mnt/newroot/etc/fstab cat <<EOF >> /overlay/newroot/etc/fstab
# Das originale Root-Dateisystem wurde durch overlayRoot.sh entfernt. # Das originale Root-Dateisystem wurde durch overlayRoot.sh entfernt.
# Diese Änderung ist temporär. Die originale fstab ist in /ro/etc/fstab verfügbar. # Diese Änderung ist temporär. Die originale fstab ist in /ro/etc/fstab verfügbar.
EOF EOF
# Root wechseln und alte Root aufräumen # Root wechseln und alte Root aufräumen
cd /mnt/newroot cd /overlay/newroot
pivot_root . mnt || fail "ERROR: pivot_root fehlgeschlagen." pivot_root . overlay || fail "ERROR: pivot_root fehlgeschlagen."
exec chroot . /bin/bash -c " exec chroot . /bin/bash -c "
mount --move /mnt/mnt/lower /overlay/ro || fail 'ERROR: /ro konnte nicht verschoben werden.' mount --move /overlay/overlay/lower /overlay/ro || fail 'ERROR: /ro konnte nicht verschoben werden.'
mount --move /mnt/mnt/rw /overlay/rw || fail 'ERROR: /rw konnte nicht verschoben werden.' mount --move /overlay/overlay/rw /overlay/rw || fail 'ERROR: /rw konnte nicht verschoben werden.'
umount /mnt/mnt || true umount /overlay/overlay || true
umount /mnt/proc || true umount /overlay/proc || true
umount -l -f /mnt/dev || true umount -l -f /overlay/dev || true
umount -l -f /mnt || true umount -l -f /overlay || true
exec /sbin/init exec /sbin/init
" "