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

12/2018
Coole Projekte

Diese Ausgabe als PDF kaufen

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

Stellenmarkt

Neuigkeiten

  • Bytes und Beats

    In Sonic Pi können Sie mit wenigen Codezeilen Klänge manipulieren, Beats zusammenstellen und ganze Songs komponieren.

  • Klein, aber fein

  • Trick or treat

    Das traditionelle RPG-Gruselkabinett glänzt dieses Jahr mit einer innovativen Umsetzung mittels Pneumatik und Elektropneumatik sowie ST-Programmierung.

  • Unter Kontrolle

    Traditionell stellen wir alljährlich ein selbst gebautes Halloween-Gespenst vor. Die pneumatischen und elektronischen Grundlagen erklärt dieser Artikel.

  • Go Pi Go!

    Der Bausatz GoPiGo3 liefert Bauteile und Software für ein kleines Roboterauto. Zusammen mit einem RasPi als Gehirn programmieren Sie den Roboter per Mausklick.

  • Handlicher Helfer

    Während die Folien der Präsentation durchlaufen, liefert ein kleiner Dokumentenserver auf Basis des GL-AR300M-ext zusätzliche Informationen aus.

  • Wiederverwertet

    Mithilfe eines einfachen Python-Programms recyceln Sie ein ausgedientes Smartphone als drahtlos angebundenes RasPi-Display.

  • Herzenssache

    Steigt beim Krimi der Herzschlag bedrohlich an? Mit einem Pulsmesser in Eigenbau ermitteln Sie einfach und kostengünstig, ob der Herzschlag noch in verträglichen Bereichen liegt.

  • Fernbedient

    Mit der Fernbedienung den RasPi steuern. In der Theorie möglich, in der Praxis oft beschwerlich. Die Libcec liefert praktische Tools zur Fehlersuche.

  • Musikwürfel

    Mit Musikcube machen Sie Ihre eigene Sammlung fit fürs Streamen. Der terminalbasierte Audioplayer lässt sich Fernsteuern und bietet eine App für Android-Smartphones.