data/overlayRoot.sh aktualisiert
This commit is contained in:
70
data/overlayRoot.sh
Normal file
70
data/overlayRoot.sh
Normal file
@@ -0,0 +1,70 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Dieses Skript wird das Root-Dateisystem schreibgeschützt einbinden und es mit einem temporären tmpfs-Overlay versehen.
|
||||
#
|
||||
# Installation:
|
||||
# Kopiere dieses Skript nach /sbin/overlayRoot.sh und füge "init=/sbin/overlayRoot.sh" zur cmdline.txt-Datei
|
||||
# in der Boot-Partition des Raspbian-Images hinzu.
|
||||
#
|
||||
# Führe die folgenden Befehle als root aus:
|
||||
# sudo dphys-swapfile swapoff
|
||||
# sudo dphys-swapfile uninstall
|
||||
# sudo update-rc.d dphys-swapfile remove
|
||||
#
|
||||
# Um Software zu installieren, Upgrades durchzuführen und andere Änderungen an der Raspberry-Konfiguration vorzunehmen,
|
||||
# entferne einfach den Eintrag "init=/sbin/overlayRoot.sh" aus der cmdline.txt-Datei und starte das System neu.
|
||||
# Nimm die gewünschten Änderungen vor, füge den init= Eintrag wieder hinzu und starte erneut neu.
|
||||
|
||||
set -e
|
||||
fail() {
|
||||
echo -e "$1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Prüfen und Modul laden
|
||||
modprobe overlay || fail "ERROR: OverlayFS-Modul nicht geladen."
|
||||
|
||||
# /proc einbinden
|
||||
mountpoint -q /proc || mount -t proc proc /proc
|
||||
|
||||
# Temporäres Dateisystem für Overlay erstellen
|
||||
mount -t tmpfs tmpfs /overlay || fail "ERROR: tmpfs konnte nicht gemountet werden."
|
||||
mkdir -p /overlay/lower /overlay/rw/upper /overlay/rw/work /overlay/newroot
|
||||
|
||||
# Root-Dateisystem schreibgeschützt einbinden
|
||||
rootDev=$(awk '$2 == "/" {print $1}' /proc/mounts)
|
||||
rootMountOpt=$(awk '$2 == "/" {print $4}' /proc/mounts)
|
||||
rootFsType=$(awk '$2 == "/" {print $3}' /proc/mounts)
|
||||
|
||||
mount -t "${rootFsType}" -o "${rootMountOpt},ro" "${rootDev}" /overlay/lower || \
|
||||
fail "ERROR: Ursprüngliches Root-Dateisystem konnte nicht schreibgeschützt eingebunden werden."
|
||||
|
||||
# OverlayFS einbinden
|
||||
mount -t overlay \
|
||||
-o lowerdir=/overlay/lower,upperdir=/overlay/rw/upper,workdir=/overlay/rw/work \
|
||||
overlay /overlay/newroot || fail "ERROR: OverlayFS konnte nicht gemountet werden."
|
||||
|
||||
# Neue Root-Overlay-Verzeichnisse erstellen
|
||||
mkdir -p /overlay/newroot/overlay/ro /overlay/newroot/overlay/rw
|
||||
|
||||
# Originale fstab modifizieren
|
||||
grep -v "$rootDev" /overlay/lower/etc/fstab > /overlay/newroot/etc/fstab
|
||||
cat <<EOF >> /overlay/newroot/etc/fstab
|
||||
# Das originale Root-Dateisystem wurde durch overlayRoot.sh entfernt.
|
||||
# Diese änderung ist temporär. Die originale fstab ist in /overlay/ro/etc/fstab verfügbar.
|
||||
EOF
|
||||
|
||||
# Root wechseln und alte Root aufräumen
|
||||
cd /overlay/newroot
|
||||
pivot_root . overlay || fail "ERROR: pivot_root fehlgeschlagen."
|
||||
|
||||
exec chroot . /bin/bash -c "
|
||||
mount --move /overlay/overlay/lower /overlay/ro || fail 'ERROR: /ro konnte nicht verschoben werden.'
|
||||
mount --move /overlay/overlay/rw /overlay/rw || fail 'ERROR: /rw konnte nicht verschoben werden.'
|
||||
umount /overlay/overlay || true
|
||||
umount /overlay/proc || true
|
||||
umount -l -f /overlay/dev || true
|
||||
umount -l -f /overlay || true
|
||||
|
||||
exec /sbin/init
|
||||
"
|
||||
Reference in New Issue
Block a user