Aus Raspberry Pi Geek 01/2016

Raspbian-Installation per Skript automatisieren (Seite 2)

Listing 2

 

$ sudo apiinst -i 2015-05-05-wheezy.img -t /dev/sdb -P

Das Installationsziel /dev/sdb passen Sie an die von Ihnen genutzte Umgebung an. Im Gegensatz zu Dd prüft das Skript aber, ob eine Partition des Zielgeräts bereits eingehängt ist. Trotzdem sollten Sie Vorsicht walten lassen, bei einem Irrtum droht Datenverlust. Intern nutzt Apiinst übrigens sehr wohl Dd, akzeptiert aber auch unausgepackte Zip-Archive von RasPi-Images. Darüber hinaus passt es noch die auf dem Image gespeicherte Systemzeit an, was später die Suche nach den geänderten Dateien vereinfacht (siehe Kasten “RasPi-Uhr”).

RasPi-Uhr

Dem RasPi fehlt eine interne Uhr, eine sogenannte Real Time Clock oder kurz RTC. Das Standard-Raspbian holt sich daher die aktuelle Uhrzeit per Network Time Protocol (NTP) aus dem Internet. Damit die Systemzeit bis zum Aufbau einer Internetverbindung nicht immer wieder bei null anfängt (unter Unix entspricht das dem 1. Januar 1970), verwendet Raspbian einen Trick: Es schreibt beim Herunterfahren die aktuelle Zeit in die Datei /etc/fake-hwclock.data. Im Gegensatz zu einem PC mit RTC bleibt die Zeit für den RasPi während des Shutdowns zwar stehen, beim nächsten Boot setzt sie jedoch wieder genau zu dem Zeitpunkt ein, an dem Sie den Mini-PCs heruntergefahren haben.

Bevor Sie jetzt den RasPi mit dem erstellten Image hochfahren, kopieren Sie das Programm colfiles aus dem Verzeichnis bin des oben erwähnten Github-Projekts auf einen USB-Stick. Der muss nicht sonderlich viel Platz bieten: Das Programm sammelt später lediglich die durch die Erstkonfiguration geänderten Dateien ein und speichert sie auf dem Stick. Den USB-Stick legen Sie für später zur Seite.

Mit der vorbereiteten SD-Karte booten Sie den Raspberry Pi, und zwar ohne Netzwerkkabel oder WLAN-Stick – sonst holt er sich nach dem Hochfahren von einem Zeitserver die aktuelle Zeit. Genau das gilt es zu vermeiden, denn das erschwert das Identifizieren der geänderten Dateien während der Erstkonfiguration. Anschließend konfigurieren Sie das System wie gewohnt mit Raspi-config. Auf die Expansion des Dateisystems sollten Sie verzichten, ebenso auf den Neustart danach.

Jetzt schlägt die Stunde des vorbereiteten USB-Sticks: Stecken Sie ihn in den RasPi ein und öffnen Sie ein Terminal. Darin geben Sie die Befehle aus Listing 3 ein. Gelegentlich enthalten die Sticks auch Partitionen; in solchen Fällen ersetzen Sie /dev/sda durch etwa /dev/sda1. Am Ende findet sich auf dem Stick ein Tarball mit dem Namen apiinst_files.tgz.

Listing 3

 

$ sudo mount /dev/sda /mnt
$ /mnt/colfiles
$ sudo umount /mnt

Das Skript colfiles besteht im Grunde nur aus zwei Befehlen. Ein Find-Kommando sucht alle Dateien, die in der letzten Stunde geändert wurden, und übergibt die Liste an einen Tar-Befehl, der sie in ein Archiv kopiert. Das ginge selbstverständlich auch ohne Skript. Weil aber Find ein paar Dateien und Verzeichnisse von der Suche ausschließen soll, fällt der entsprechende Find-Befehl nicht eben trivial aus und ist deshalb in einem Hilfsprogramm gut aufgehoben (Listing 4).

Listing 4

 

find / /boot -xdev \
  \( -path "/var" -o -path "/home" -o -path "/tmp" \) \
  -prune -o \( -type f -o -type l \) \
  ! -path "/etc/mtab" \
  ! -path "/etc/.fstab" \
  ! -path "/etc/dhcpcd.duid" \
  -mtime -1 -print | \
  tar -cvzpf "/mnt/apiinst_files.tgz" -T -

Das Archiv entpacken Sie auf dem PC entweder mit grafischen Packwerkzeugen oder per Kommando in das Vorlagenverzeichnis (Listing 5). Damit liegt ein Minimum an Dateien für die spätere automatische Installation bereit. Weitere Dateien dürfen Sie nach Ihren Bedürfnissen ergänzen, etwa die Netzwerkkonfiguration (aus /etc/network/interfaces) oder eigene Konfigurationsdateien aus /etc beziehungsweise dem Home-Verzeichnis. Denken Sie daran, die Dateien mit administrativen Rechten zu kopieren (als Root oder mit sudo), damit sie die richtigen Rechte behalten.

Listing 5

 

$ sudo tar -xvzpf /mnt/apiinst_files.tgz -C /Pfad/zum/Vorlagenverzeichnis

Einfache Installation

Damit wäre die etwas mühsame, aber nur einmal notwendige Vorarbeit erledigt. Als Lohn winkt die schnelle Neuinstallation weiterer RasPis. Mit der Karte in einem Kartenleser (im Beispiel /dev/sdb) kopiert der Befehl aus Listing 6 das Image auf die Speicherkarte des RasPi. Dabei expandiert das Skript auch das Root-Dateisystem und kopiert zum Schluss den Inhalt des Vorlagenverzeichnisses auf die Karte.

Listing 6

 

$ sudo apiinst -i 2015-05-05-wheezy.zip -t /dev/sdb /Pfad/zum/Vorlagenverzeichnis

Benötigen Sie noch eine Home-Partition, kommt die Option -H Wert ins Spiel. Dabei geben Sie für Wert eine fixe Größe in Mega- oder Gigabyte vor oder tragen einfach rest ein – dann expandiert das Skript die Root-Partition nicht, sondern schlägt den noch freien Platz komplett der Home-Partition zu. Achten Sie bei der Angabe einer numerischen Vorgabe darauf, einen zu großen Wert zu wählen, denn eine Verkleinerung der Root-Partition unterstützt Apiinst (noch) nicht.

Der erste Start

Wie in der Einleitung beschrieben, gibt es Aufgaben, die ein laufendes System voraussetzen – wichtigstes Beispiel wäre etwa die Nachinstallation von Software-Paketen. Dies erledigt wieder ein Skript (/usr/local/sbin/apiinst2). Während das Skript der Offline-Phase recht kompliziert, aber statisch ist, muss jeder Anwender das Phase-2-Skript nach seinen Wünschen selbst zusammenstellen, Listing 7 zeigt ein paar mögliche Zeilen.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben