Funkenstrahlen Podcasting, Netzpolitik, App-Entwicklung

Einmal Waldfrucht bitte!

Vor zwei Tagen kam mein Raspberry Pi bei mir zu Hause an. Endlich :)

Hier ist er:

Nochmal das Innenleben:

Für diejenigen, die noch nicht von diesem wunderbaren Spielzeug gehört haben: Der Raspberry Pi ist ein kleiner Computer auf ARM Basis, der in etwa 20 EUR kostet (Hinweis für später vielleicht mal: Den Euro gibt es gerade noch). Für den Preis bekommt man LAN, Audio, HDMI, 256MB Ram, 2x USB und einen ordentlichen Grafikchip der es ermöglicht HD-Videomaterial ruckelfrei abzuspielen. Mehr Informationen zur Hardware findet ihr hier.

Der Raspberry Pi bootet dabei nicht von einer Festplatte wie ein “herkömmlicher” Rechner, sondern man bespielt eine SD-Karte mit dem Betriebssystem. Das kann man sich hier herunterladen. Dabei stehen ein Debian-Image und ein Archlinux-Image zur Verfügung, die extra für den Raspberry Pi angepasst worden sind.

Genug der Einleitung und nun zu den schlechten Nachrichten: Die SD-Karte liegt dem Raspberry Pi nicht bei und ich musste noch einmal einen Tag warten bis ich richtig mit Ausprobieren loslegen konnte, weil die Karte später kam. Dafür steckt in meinem Raspberry Pi jetzt eine 32 GB Class 10 Karte.

Image auf die Karte packen

Ich habe mir dann zunächst einmal das Debian “wheezy” Image heruntergeladen, da das für viele Anwendungen einfach die besseren Paketquellen zur Verfügung stellt. Vielleicht probiere ich irgendwann auch nochmal Archlinux aus, da ich das ja auch auf meinen “normalen” Rechnern betreibe.

Checksumme getestet, Image entpackt und dann kommen wir auch schon zum ersten kniffligen Punkt: Das Image muss auf die SD-Karte übertragen werden. Dazu soll man das Toll “dd” benutzen. Das begegnet mir natürlich nicht zum ersten mal in meinem kleinen Unixleben. Auch findet man Anleitungen wie man das denn nun machen soll.

Aber ganz so einfach war es nicht: Karte eingesteckt. Gemountet. Mit “df -h” geschaut auf welches Device das gemappt wird. Unmountet. Datenübertragung mit “dd” gestartet. Gewartet. Gewartet. Gewartet. Gewartet… Gewartet……….. Gewartet……………. Mist? Was war los? Das hat sich einfach nicht beendet. Dann habe ich erst einmal diverse Befehle ausgegraben mit dem man dem dd Prozess Signale schicken kann, damit er seinen Fortschritt ausgibt. Er hatte dann bereits 1,9 GB übertragen. Sollte passen. Gab auch keinen Fortschritt mehr, nachdem ich mehrere Minuten gewartet hatte.

Wunderbar. SD-Karte abgezogen und in den Raspberry Pi eingesetzt. Time to Boot!

Erster Eindruck: Das Teil scheint einwandfrei zu booten. Problem: Mein Bildschirm hat kein HDMI-Anschluss. Nichts zu sehen außer blinkende LEDs also. Gut es soll ja sowas wie SSH geben. Ich habe dann das Netzwerkkabel eingesteckt und auf dem Rechner nach neuen Geräten im Netzwerk gesucht. Da meldete sich dann tatsächlich ein neues Gerät. Nach offenen Ports geschaut: Port 22, wunderbar. SSH sollte also gehen. Also mit den Standard Login-Daten eingeloggt. Es funktioniert! Eine Shell! \o/

Resize Problem

Es wird einem dann vorgeschlagen man solle doch “raspi-config” ausführen, um die ersten Schritte komfortabel über ein kleines grafisches Interface abzuwickeln. Einer der ersten Punkte dort ist die Option das Image auf die komplette SD-Karte auszudehnen. Scheint sinnvoll. Das Image ist nämlich für 2GB SD-Karten ausgelegt und daher auch nur so groß. Gut machen wir das. Es wird dann wohl ein Skript ausgeführt, das einige fsdisk Kommandos absetzt. Danach soll man das System rebooten. Gut.

Also warten. Warten. Versuchen via SSH wieder eine Verbindung aufzubauen. Geht nicht. Ping? Funktioniert. Na gut, man soll ja ein bisschen Geduld haben. Weiter warten also. 10 Minuten. SSH? Nichts. “Connection Refused”. Super.

Also zurück auf Anfang und das Image neu auf die SD-Karte gespielt. Mit allen Problemen, die “dd” auch zuvor schon gemacht hat.

Update Problem

Nachdem das Image neu aufgespielt ist, kann ich mich nach dem Booten wieder vie SSH verbinden. Ich denke mir also: Vielleicht sollte ich zunächst die Pakete auf den neuesten Stand bringen, damit die Partitionsvergrößerung richtig funktioniert. Ich versuche mich also an “sudo apt-get update”. Funktioniert nicht. Was ist denn da los verdammt!

pi@raspberrypi ~ $ sudo apt-get update
Get:1 http://archive.raspberrypi.org wheezy InRelease [7,701 B]
Get:2 http://mirrordirector.raspbian.org wheezy InRelease [12.5 kB]
Get:3 http://archive.raspberrypi.org wheezy/main armhf Packages [5,744 B]
Get:4 http://mirrordirector.raspbian.org wheezy/main armhf Packages [7,333 kB]
Ign http://archive.raspberrypi.org wheezy/main Translation-en_GB
Ign http://archive.raspberrypi.org wheezy/main Translation-en
Get:5 http://mirrordirector.raspbian.org wheezy/contrib armhf Packages [23.3 kB]
Get:6 http://mirrordirector.raspbian.org wheezy/non-free armhf Packages [46.5 kB]
Get:7 http://mirrordirector.raspbian.org wheezy/rpi armhf Packages [14 B]
Ign http://mirrordirector.raspbian.org wheezy/contrib Translation-en_GB
Ign http://mirrordirector.raspbian.org wheezy/contrib Translation-en
Ign http://mirrordirector.raspbian.org wheezy/main Translation-en_GB
Ign http://mirrordirector.raspbian.org wheezy/main Translation-en
Ign http://mirrordirector.raspbian.org wheezy/non-free Translation-en_GB
Ign http://mirrordirector.raspbian.org wheezy/non-free Translation-en
Ign http://mirrordirector.raspbian.org wheezy/rpi Translation-en_GB
Ign http://mirrordirector.raspbian.org wheezy/rpi Translation-en
Fetched 7,428 kB in 57s (130 kB/s)
Reading package lists... Error!
E: Encountered a section with no Package: header
E: Problem with MergeList /var/lib/dpkg/status
E: The package lists or status file could not be parsed or opened.
pi@raspberrypi ~ $

Ich suche also in Foren, frage im IRC. Viele Anregungen, keine funktioniert. Bis ich dann einen Tipp bekomme, dass das Verhalten von “dd” wie ich es hatte kein gutes Zeichen ist und ich das vielleicht nochmal genauer anschauen sollte, was da schief läuft.

Ich versuche es also mit weiteren SD-Karten. Gleiches Problem. Anderer Kartenleser: Aha! Plötzlich läuft “dd” problemlos durch.

Und dann endlich nach dem Booten des Raspberry Pi: Ein Update der Paketquellen funktioniert!

Firmware Update

Ich halte mich dann erst einmal zurück mit dem Vergrößern der Partitionen auf die gesamte SD-Karte. Eine aktuelle Firmware soll ja die Unterstützung für neuere SD-Karten verbessern. Also erst einmal nachgeschaut wie man das mit der Firmware denn macht. Wunderbar - es gibt ein kleines Skript dafür, das man bequem auf Github finden kann. Ich lasse es laufen und es vermeldet Vollzug: Alles hat wohl wunderbar geklappt. Nur ein Reboot ist noch nötig. Ist ja fast wie auf Windows! Aber gut, bei einer Firmware mache ich mal eine Ausnahme ;)

Wie ja fast zu erwarten war: Der Raspberry Pi bootet nicht mehr. Kein Ping, kein SSH. Was bleibt ist die OK Lampe, die in regelmäßigem Muster immer 6x blinkt. Immerhin ein Muster, das auf Leben hindeutet.

Nicht, dass ich schon genügen Probleme gehabt hätte, suche ich also in einem weiteren Anlauf erst einmal nach der Bedeutung dieses Blinkmusters. Und siehe da: “start.elf” sei defekt. Behauptet das Internet. Und nun? Oh man solle arm240_start.elf einfach über start.elf kopieren. Klingt logisch, aber wie denn bitte? Die Firmware bootet gar nicht!

Ich habe dann herausfinden müssen, dass die Firmware auf der Boot-Partition des Raspberry Pi liegt. Das ist eine etwa 50MB große Partition. Dort findet man auch die arm240_start.elf und weitere Firmware Images. Je nachdem wie viel Speicher man dem ARM im Vergleich zum Grafikchip zuweisen möchte, wählt man dort das entsprechende Image aus. Die Images habe ich dann erst einmal nochmal frisch heruntergeladen: Dazu gibt es auf Github auch ein Repository, das die Firmwaredaten enthält.

Danach hat das Teil wieder gebootet. Super. Wo waren wir nochmal stehen geblieben, bevor das nicht mehr funktionierte?

Richtig: Vergrößern der Partition auf die komplette SD-Karte. Ich starte also wieder “raspi-config” und wähle die Vergrößerung aus. Reboot nötig. War ja zu erwarten. Jetzt fällt mir ein: Womöglich wir die Partition beim nächsten Bootvorgang vergrößert und es dauert deshalb einfach nur sehr lange, bis der Raspberry Pi wieder per SSH erreichbar ist. Ich mache mir also zwei Kaffee und siehe da: Nach über eine Stunde kann ich die ganze SD-Karte nutzen. \o/

Backup

Endlich habe ich ein laufendes System, auf der kompletten SD-Karte. Auch Updates und das Installieren neuer Pakete funktionieren. Es scheint vollbracht. Was also als nächstes ansteht: Backup! Dringend.

Das macht man natürlich auch via “dd” nur eben genau umgekehrt. Empfehlung hier: Komprimieren! Denn mit “dd” bekommt man ein Bitgenaues Abbild des SD-Karte: Das ist dann aber auch 32GB groß. Komprimiert war das dann bei mir aber nur noch etwa 1GB groß - Viele Nullen lassen sich wohl relativ gut verpacken ;)

Ausblick

Wie ihr seht hat es eine ganze Weile gedauert, bis ich nun endlich anfangen kann all die tollen Dinge auszuprobieren für die der Raspberry Pi so bekannt ist. Ich hoffe ihr müsst nicht über alle Steine stolpern, wenn ihr das hier gelesen habt und könnt die ersten Stunden etwas entspannter genießen.

Demnächst gibt es dann wohl noch einen kleinen Artikel darüber wie man Shairport auf dem Raspberry Pi zum Laufen bekommt…