Listing 1
$ sudo systemctl disable dphys-swapfile $ sudo apt-get -y remove dphys-swapfile logrotate plymouth cron $ sudo ln -s /dev/null /etc/systemd/system/apt-daily-upgrade.timer $ sudo ln -s /dev/null /etc/systemd/system/apt-daily.timer
Dazu gehört logrotate, das entfallen kann, da die Protokolldateien ohnehin auf der virtuellen Festplatte und damit im Nirwana landen. Das Paket plymouth sorgt für einen schönen grafischen Boot-Bildschirm, für Embedded-Systeme ohne Belang. Das letzte Paket, cron, führt regelmäßig Programme aus, hauptsächlich für die Systempflege. Falls Sie es für Ihren Einsatzzweck weiter benötigen, sollten Sie zumindest alle Skripte aus den Verzeichnissen /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/ und /etc/cron.monthly/ löschen.
Die beiden Befehle aus Zeile 3 und 4 sorgen dafür, dass das oben erwähnte automatische Update des Paketmanagers unterbleibt. Die Aktionen des Listings beziehen sich auf ein aktuelles Raspbian “Stretch” Lite vom März 2018. Für andere Versionen sieht das im Detail anders aus.
Nach diesen Änderungen starten Sie das Testsystem neu und lassen es eine Weile laufen. In dieser Trainingsphase geht es darum, herauszufinden, welche Dateien das System noch schreibt. Deshalb sollten Sie das System dabei für den Zweck nutzen, für den Sie es verwenden wollen. Bei einer anderen als der erwähnten Raspbian-Version liefert die Trainingsphase unter Umständen auch wichtige Hinweise hinsichtlich noch zu entfernender Pakete.
Wer schreibt was?
Nach der Trainingsphase setzen Sie zum Ermitteln der Schreibvorgänge, die stattgefunden haben, ohne Neustart aus einem Terminal den Befehl aus Listing 2 ab.
Listing 2
$ sudo find / /boot -xdev -newermt "$(cat /etc/fake-hwclock.data) UTC" -ls
Da Raspbian keine Hardware-Uhr mitbringt, speichert es kurz vor dem Herunterfahren die aktuelle Uhrzeit in der Datei /etc/fake-hwclock.data ab. Beim nächsten Start setzt es die Zeit dann vorläufig auf die dort gespeicherte Zeit; später synchronisiert sich die Uhr mit einer Zeitquelle aus dem Internet. Der Ausdruck -newermt "$(cat /etc/fake-hwclock.data) UTC" findet dann alle Dateien, die neuer sind als dieser Zeitstempel.
Bei unserem Testsystem handelt es sich um ein pures Raspbian Lite ohne weitere Anwendungsprogramme. Wie Sie in Abbildung 2 sehen, schreibt das System nur geringe Datenmengen in nur wenige Verzeichnisse. Raspbian Lite eignet sich also entsprechend gut als Basis für ein Read-only-System. Die Schreibvorgänge konzentrieren sich auf die Verzeichnisse /tmp/, /var/tmp/, /var/log/ und /var/cache/.

Abbildung 2: Ein erweiterter Find-Befehl listet alle geschriebenen Dateien seit dem letzten Boot-Vorgang auf.
In diese Verzeichnisse hängen wir deshalb jeweils eine virtuelle Festplatte ein. Dazu ergänzen Sie als Benutzer root die Datei /etc/fstab um die Zeilen aus Listing 3. Da die RAM-Disks ungenutzt kaum Speicherplatz belegen, wirft das keinerlei Probleme auf. Das System richtet beim Booten selbst schon entsprechende RAM-Disks ein, zum Beispiel für /run/. Das Einhängen der virtuellen Festplatten verdeckt alle vorhandenen Dateien in diesen Verzeichnissen.
Listing 3
tmpfs /tmp tmpfs nodev,nosuid 0 0 tmpfs /var/log tmpfs nodev,nosuid 0 0 tmpfs /var/tmp tmpfs nodev,nosuid 0 0 tmpfs /var/cache tmpfs nodev,nosuid 0 0
Nach diesen Änderungen an der Fstab starten Sie das System neu und setzen nach einiger Zeit wieder den Find-Befehl aus Listing 2 ab. Jetzt müsste die Ausgabe des Befehls deutlich kürzer ausfallen und nur noch verstreute Dateien anzeigen, beispielsweise /var/lib/systemd/clock.
Um diese Dateien kümmern wir uns im nächsten Schritt. Hier helfen RAM-Disks nicht weiter, da sie, wie oben beschrieben, den kompletten Verzeichnisinhalt maskieren – für Einzeldateien nicht das gewünschte Verhalten.
Dateien verlegen
Das Verlegen einzelner Dateien funktioniert mit den Befehlen aus Listing 4. Der erste wechselt den Benutzer fest nach root, was viele Sudo-Befehle erspart. Der Exit-Befehl am Schluss verlässt diesen Modus wieder.
Listing 4
$ sudo su - # cd /var/lib/systemd/ # mv clock /tmp # ln -s /tmp/clock # mv random-seed /tmp/ # ln -s /tmp/random-seed # cd /etc # mv resolv.conf /tmp # ln -s /tmp/resolv.conf # cd /var/lib # mv dhcpcd5 /tmp # ln -s /tmp/dhcpcd5 # exit





