Raspbian-Installation per Skript automatisieren

© macor, 123RF

Automatisch verpackt

Das Installieren und Konfigurieren von Raspbian auf einer SD-Karte braucht nicht viel Zeit. Wer allerdings immer wieder dieselben Schritte ausführen muss, wünscht sich eine bessere Lösung. Mit simplen Shell-Skripten lässt sich die RasPi-Installation automatisieren.

Raspbian verwendet ein einfaches Installationsverfahren: Image herunterladen, auf SD-Karte kopieren, booten und die Erstkonfiguration ausführen – fertig. Anschließend bringen die Befehle sudo apt-get update und sudo apt-get upgrade alle Pakete auf den aktuellen Stand. Die weitere Pflege des Systems, einschließlich eines kompletten Umstiegs auf die nächste Betriebssystemversion, erledigen Sie ebenfalls über die Paketverwaltung.

So einfach das Verfahren in der Praxis üblicherweise von der Hand geht, für aktive RasPi-Hacker bringt es einen Nachteil mit sich: Die eingangs fällige Erstkonfiguration – die Wahl der Sprache, das Ausdehnen des Speichers auf die komplette Speicherkarte oder etwaige Einstellungen zum Übertakten – muss von Hand erfolgen. Wer ein einmal eingerichtetes System weiterpflegt, der hat damit keine Probleme. Wer allerdings immer wieder von vorne anfängt, den nerven die immer gleichen Schritte durch das Menü von Raspi-config gewaltig. Da bei der ersten Inbetriebnahme das System neue Rechnerzertifikate erstellt, funktioniert auch der Fernzugriff von anderen PCs nicht mehr ohne Probleme. Jeder Nutzer muss erst einmal die Spuren des alten Rechners aus der ~/.ssh/known_hosts löschen, bevor der Zugriff über denselben Hostnamen wieder funktioniert.

Warum sollte man aber immer wieder von vorne anfangen? Dafür gibt es verschiedene Gründe: einmal der Spieltrieb – diverse Hardware kommt mit eigenen Images – oder man möchte für ein neues Projekt wieder von einem sauberen Stand starten. Ein weiterer Grund liegt darin, dass die Systempflege über die Paketverwaltung zwar problemlos funktioniert, auf diesem Weg aber ganz neue Pakete nicht automatisch auf den Rechner kommen. Und wer etwa zu Schulungszwecken immer wieder die RasPis neu installieren muss, profitiert auch von einer weitergehenden Automation.

Das eigene Image

Mit einem eigenen RasPi-Image gehen Sie dieses Problem an. Dazu kehren Sie den normalen Installationsprozess von Raspbian quasi um. Nach der Erstinstallation und Konfiguration – oder immer, wenn Sie eine Komplettsicherung des Systems wünschen – fahren Sie den RasPi runter, nehmen die Speicherkarte heraus und lesen Sie mit einem Kartenleser am PC ein. Der von Windows-Anwendern gern zum Schreiben von RasPi-Images genutzte Win32 Disk Imager [1] besitzt nun unter anderem eine Funktion, um aus einem Speichermedium ein Image zu erstellen. Linux- und Mac-User drehen stattdessen einfach den Dd-Befehl um (Listing 1). Dabei ersetzen Sie /dev/sdX durch den entsprechenden Gerätenamen des Kartenlesers. An die richtige Device-ID kommen Sie beispielsweise per lsblk.

Listing 1

 

$ sudo dd if=/dev/sdX of=sdcard.img bs=1M

Auf diesem Weg lässt sich ein Image schnell erstellen und wieder auf die SD-Karte schreiben. Das Verfahren hat jedoch auch Nachteile. Kommt das Image nicht direkt nach der Erstkonfiguration auf die Platte, bildet es naturgemäß keinen sauberen Zustand ab. Das Klonen mehrerer Rechner klappt mithilfe dieses Imagings nur mit Nacharbeit – sonst müssten zum Beispiel sämtliche geklonten Rechner dieselben Zertifikate nutzen. Zudem muss das Image einer 8 GByte großen Karte nicht zwingend auf eine andere 8-GByte-Karte passen: Die tatsächliche Kapazität kann von Hersteller zu Hersteller abweichen.

Bei einem für den Datenträger zu großen Image bricht in der Regel der Schreibprozess ab. Ist das im Image enthaltene Dateisystem nicht zu voll, schafft das Schreibprogramm es oft dennoch, das Image auf den Datenträger zu bannen – allerdings sollten Sie im Nachhinein die Partition und das Dateisystem auf die korrekte Größe verkleinern. Dazu braucht es Fachwissen und oft eine ordentliche Partition Geduld.

Es ergibt daher mehr Sinn, die manuellen Schritte der normalen Installation zu automatisieren. Linux stellt dazu in der Shell eine leistungsfähige Skriptsprache bereit, prinzipiell ließe sich aber auch jede andere Skriptsprache verwenden. Sie müssen das Projekt nicht selbst nachprogrammieren: Auf der Heft-DVD sowie im Git-Repository des Autors [2] finden Sie das komplette Skript apiinst (siehe Kasten "Download und Installation").

Download und Installation

Die in diesem Artikel beschriebenen Skripte klonen Sie aus dem Git-Repository des Autors [2]. Alternativ beziehen Sie sie von dort oder von der Heft-DVD auch in Form eines Zip-Archivs. Das Paket umfasst neben den Skripten für die Offline-Phase (bin/apiinst/) und dem Skript für das Einsammeln der geänderten Dateien (bin/colfiles) noch die Beispieldatei für das Vorlagenverzeichnis unterhalb von files/ (die Datei files/usr/local/sbin/apiinst2). Letztere müssen Sie wie im Text beschrieben an Ihre Bedürfnisse anpassen.

Image vorbereiten

Die Automation zielt auf eine möglichst hohe Flexibilität ab. Daher kopiert das Skript nicht nur das Image auf die SD-Karte, sondern ändert dabei auch alles, was sich ohne Systemstart auf echter Hardware anpassen lässt (Offline-Phase). Andere Konfigurationen funktionieren erst auf dem Ziel-RasPi (Online-Phase), weswegen die Installation in zwei Phasen abläuft (Abbildung 1).

Abbildung 1: Schematischer Ablauf einer per Apiinst automatisierten RasPi-Installation.

Im Offline-Abschnitt kümmert sich das Skript um die Partitionierung und kopiert das Image auf die SD-Karte. Als Nächstes schiebt das Installationsskript Dateien aus einem Vorlagenverzeichnis ins RasPi-System. Danach entnehmen Sie die Speicherkarte aus dem Leser, legen sie in den RasPi ein und starten diesen. Direkt nach dem ersten Booten sorgt ein zweites Skript für das Abarbeiten der restlichen Aufgaben, wie etwa die Installation noch fehlender Pakete.

Damit später alles wie beschrieben automatisch abläuft, müssen Sie einige einmalige Vorarbeiten leisten. Hier geht es im Wesentlichen darum, den RasPi normal zu installieren und zu konfigurieren und anschließend die durch die Erstkonfiguration geänderten Dateien für das Vorlagenverzeichnis abzugreifen. Die "normale" Installation erfolgt dabei aber nicht über Dd, sondern mithilfe des Befehls aus Listing 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

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Den Raspberry Pi als Backup-Server nutzen

    Eine gute Datensicherung bewahrt nicht nur bei Festplattenausfall vor Ärger, sondern hilft auch bei Virenbefall und Erpressungstrojanern. Der RasPi eignet sich perfekt als Backup-Server im Hintergrund.

  • Foto-Backup mit dem RasPi

    Wer gern unterwegs fotografiert, braucht ein mobiles Backup-Medium für die Fotos, um den Digicam-Speicher für neue Schnappschüsse freizumachen. Ein RasPi eignet sich perfekt als Basis für einen solchen Foto-Tank.

  • Raspbian via Netzwerk installieren

    Für manche Projekte erweist sich das Standard-Raspbian als zu sperrig. Mithilfe von Netinstaller richten Sie Ihr Wunschsystem direkt aus dem Netz auf der SD-Karte ein.

  • Raspberry Pi emulieren

    Wer viel am System bastelt, der kennt das Problem: Ein falscher Befehl, und das System startet womöglich nicht mehr. Abhilfe schafft eine virtuelle Umgebung wie Qemu: Hier stellen Sie den Zähler einfach wieder auf null und basteln weiter an Ihrem Raspbian.

  • Distributionen für den Raspberry Pi im Überblick

    Für den Raspberry Pi gibt es inzwischen eine Vielzahl an Betriebssystemen für jeden nur denkbaren Einsatzzweck. Wir stellen Ihnen die zwölf wichtigsten vor.

Aktuelle Ausgabe

10/2018
Weltweiter Empfang

Diese Ausgabe als PDF kaufen

Preis € 7,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Physiklabor

    Der Java-Dialekt Processing zielt auf interaktive Animationen ab und eignet sich auch für Programmiernovizen.

  • Abstand halten

    Der VL53L0X misst präzise Entfernungen bis zu zwei Metern. Das macht ihn zum passenden Kandidaten für RasPi-Projekte.

  • Tux-Funk

    Der SDR-Empfänger RSP2pro von SDRplay bringt Amateurfunk auf den Raspberry Pi.

  • Himbeersieb

    Die aus Österreich stammende Upribox auf Basis des Raspberry Pi schützt wirkungsvoll vor Gefahren aus dem Internet. Jetzt ist das System in der zweiten Version erschienen.

  • Unter Kontrolle

    Das programmierbare Steuermodul Controllino bietet mit seinen zahlreichen Ein- und Ausgängen vielfältige Möglichkeiten.

  • Dehnübungen

    Ein RasPi eignet sich bestens zum Steuern eines Fischertechnik-Roboters. Damit dabei kein Chaos entsteht, gilt es, die Steuerung genau zu programmieren.

  • Klangmaschine

    Der RasPi bringt genügend Performance mit, um als kleine DAW zu dienen. Mit Waveform 9 haben Sie die passende Software zur Hand.

  • Fremdgehen

    Nicht jedes Programm gibt es auch für die ARM-Architektur. Der kommerzielle Emulator Exagear Desktop fungiert als Übersetzer zwischen der ARM- und x86-Welt.

  • Ausfallsicher

    Eine selbst gebaute USV für den RasPi verschafft Ihnen die entscheidenden Sekunden, um bei unerwarteten Stromausfällen einem Datenverlust vorzubeugen.

  • Am laufenden Band

    Die Kombination aus einem Fischertechnik-Bausatz und dem Controllino-Modul bietet eine ideale Basis, um ein funktionierendes Industriemodell zu gestalten.