sbin/overlayRoot.sh aktualisiert
This commit is contained in:
@@ -25,43 +25,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/ro /mnt/newroot/rw
|
mkdir -p /overlay/newroot/ro /overlay/newroot/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 /ro || fail 'ERROR: /ro konnte nicht verschoben werden.'
|
mount --move /overlay/overlay/lower /ro || fail 'ERROR: /ro konnte nicht verschoben werden.'
|
||||||
mount --move /mnt/mnt/rw /rw || fail 'ERROR: /rw konnte nicht verschoben werden.'
|
mount --move /overlay/overlay/rw /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
|
||||||
"
|
"
|
||||||
|
|||||||
Reference in New Issue
Block a user