Ich verwende den Raspberry Pi für viele unterschiedliche Zwecke, als Companion an Bord unserer Kopter, aber auch für die Bodenstation, z.B. zur Telemetrie- und Videoweiterleitung. Dafür werden die PIs erst einmal für den Betrieb mit Readonly-Image auf der SD-Card vorbreitet, damit man sie bedenkenlos ohne korrektes Herunterfahren einfach ausschalten kann. Da die Dateisysteme alle nur im ReadOnly-Modus gemounted werden, ist das gefahrlos möglich. Alle temporären Dateien werden im Betrieb auf Ramdisk-Laufwerken abgelegt und gehen damit beim Ausschalten logischerweise verloren, das aber nicht schlimm ist.

Da die Schritte im Grund immer die selben sind, habe ich meine Methode einfach hier einmal Schritt für Schritt zusammengestellt. Dabei füge ich immer noch ein kleines Shell-Marko dazu, damit ich beim Entwickeln oder Verändern einfach zwischen ReadOnly und ReadWrite umschalten kann.

Erst einmal müssen alle Dienste gelöscht werden, die zwingend ein RW-Filesystem brauchen. Die benötigt unser Minimalsystem auch nicht:

apt-get update && apt-get dist-upgrade
apt-get remove –purge cron logrotate triggerhappy dphys-swapfile fake-hwclock samba-common
apt-get autoremove –purge

Dann müssen wir die typischen Spool- und Temp-Verzeichnisse nach /tmp umlegen, das dann später im Normalbetrieb eine Ramdisk werden wird:

rm -rf /var/lib/dhcp/ /var/spool /var/lock
ln -s /tmp /var/lib/dhcp
ln -s /tmp /var/spool
ln -s /tmp /var/lock
ln -s /tmp/resolv.conf /etc/resolv.conf

Die etc/fstab wird nun angepasst, um die Ramdisks anzulegen:

Bei /boot und / (root) wird der Parameter „ro“ angehängt. Rasbian Jessy führt hier als Laufwerke in der Regel /dev/mmcblk0p1 bzw. /dev/mmcblk0p2 , Stretch statt dessen jeweils die PARTUUID. Die bleibt natürlich unverändert.

PARTUUID=????????-01  /boot vfat defaults,ro  0 2
PARTUUID=????????-02   / ext4 defaults,noatime,ro  0 1

Ergänzt wird die fstab nun um die Ramdisk-Laufwerke:

tmpfs /tmp tmpfs nosuid,nodev,size=50M 0 0
tmpfs /var/log tmpfs nosuid,nodev,size=250M 0 0
tmpfs /var/tmp tmpfs nosuid,nodev,size=10M 0 0

/var/log muss nur dann so groß angegeben, wenn mavproxy benutz werden soll. mavproxy weigert sich zu starten, wenn weniger als 200MB im Logverzeichnis frei sind.

Ich werdende gerne nginx als Webserver, z.B. um eine webbasierende Oberfläche für bestimmte Befehle zu haben. nginx ist leider beim Start als daemon extrem zickig, wenn er sein hardcodiertes Default- log-Verzeichnis nicht findet (die eigentlichen Logs können dann problemlos über die Konfiguration umgelegt werden). Deshalb lege ich für nginx eine kleine Mini-Dummy-Ramdisk noch an (tut im Betrieb nicht weiter weh):

tmpfs           /var/log/nginx  tmpfs   nosuid,nodev,size=10K       0       0

Auch /boot/cmdline muss verändert werden. Am Ende der langen Optionszeile fügen wir die Optionen fastboot noswap hinzu:

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=????????-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait fastboot noswap

 

Zum einfachen Umschalten zwischen ReadOnly und ReadWrite (für Änderungen) modifizieren wir die Datei /etc/bash.bashrc . Wir fügen für „rw“ und „ro“ jeweils einen alias dazu, der den entsprechenden Mount macht. Damit wir das dann auch nicht übersehen, passen wir dem Prompt auch gleich etwas an.

 

set_bash_prompt(){

fs_mode=$(mount | sed -n -e „s/^\/dev\/.* on \/ .*(\(r[w|o]\).*/\1/p“)

PS1=’\[\033[01;32m\]\u@\h${fs_mode:+($fs_mode)}\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ‚

}

alias ro=’mount -o remount,ro / ; mount -o remount,ro /boot‘

alias rw=’mount -o remount,rw / ; mount -o remount,rw /boot‘

PROMPT_COMMAND=set_bash_prompt

 

Um WLAN einzurichten, brauchen wir noch in der Datei wpa_supplicant.conf in der Boot-Partition (Raspbian Stretch)
country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid=“wlan-bezeichnung“
psk=“passwort“
key_mgmt=WPA-PSK
}

Damit sind die ersten Arbeiten abgeschlossen.

Leave Comment

Ihre Mailadresse wird nicht publiziert. Pflichtfelder sind mit * markiert.

löschenSenden