Raspberry Pi – das Spielzeug für Nerds – „Installation“ und erste Eindrücke


Was man sich noch vor wenigen Jahren nicht hat vorstellen können: Ein (eigentlich) kompletter und vollwertiger Computer in der Größe einer Kreditkarte bzw. Zigarettenschachtel.
Nun schreiben wir das Jahr 2012. Und dieser Traum hat nun auch bei mir Einzug gehalten…
Vor einigen Wochen (eigentlich schon Monaten…) konnte man einen Pre-Order durchführen. Und nach langer Wartezeit auch endlich die offizielle Order. Dann wieder einige Tage warten und der knapp 40 Euro teure Rechner wurde geliefert.
Der RaspberryPi ist das, was man als Nerd lange hat erträumen müssen. Ein winziger Rechner mit einer ARMv6 CPU, RAM onboard, 2x USB, 1 LAN. Für die Stromversorgung noch ein MicroUSB Port und der wichtige SD Kartenanschluss. Für die Videoausgabe gibt es analoges Video über RCA sowie ein HDMI Port. Ein 3,5mm Klinkenanschluss für Sound und das war’s. Alles in Größe einer Zigarettenschachtel.


Lieferumfang

Spartanisch in einer kleiner Pappschachtel, verpackt in einem Luftpolsterumschlag mit Royal Air Mail aus Großbritannien geliefert kommt der Mini-Rechner an. Ein kleiner Beipackzettel, ein Aufkleber auf der Pappschachtel. Fertig. Mehr nicht. Keine Blisterverpackung, kein Hochglanzdruck. Alles unnötige Kosten und völlig überflüssig…


Voraussetzungen

Für die Installation und Erstinbetriebnahme wird benötigt:

  • Ein SD Kartenleser
  • eine SD Karte mit mind. 2GB (lieber nicht den billigen Scheiß kaufen, der RPI stellt sich hier wohl manchmal etwas an)
  • Ein Linux (oder Mac, zur Not aber auch ein Windoof)
  • HDMI Kabel und Monitor
  • USB Tastatur
  • ein USB Netzteil mit mind. 1500mA! (USB Ports an anderen Geräten sind nicht ausreichend!)
  • Netzwerkkabel
  • stilecht eine Flasche Club Mate (wer nicht weiß, was das ist sollte hier aufhören zu lesen 😉 )

Ein fertiges Image, welches man binnen weniger Minuten auf die SD Karte schreiben kann steht unter http://www.raspberrypi.org/downloads zur Verfügung. Die derzeit von RPI präferierte Version ist ein Debian 6 (squeeze) Image.
Dieses muss heruntergeladen und anschließend mit unzip entpackt werden. Wir befinden uns im gleichen Verzeichnis wie die heruntergeladene .zip Datei:

unzip debian6-19-04-2012.zip

Dieses erstellt ein Verzeichnis debian6-19-04-2012. In diesem befindet sich das eigentliche Image sowie eine .sha Datei, in der der Kontrollhash steht.

Überprüfen der heruntergeladenen Datei (a.) auf Richtigkeit der Daten und b.) auf Datenintegrität, Checksum steht auf der Seite und in der .sha1 Datei)


cd debian6-19-04-2012
sha1sum debian6-19-04-2012.img
(nun rödelt der Rechner ein wenig...)
e1a6f8695be719c83ac7f2595220c36ecf0a58cf debian6-19-04-2012.img

Vergleich mit der Prüfsumme in der .sha1 Datei:


cat debian6-19-04-2012.img.sha1
e1a6f8695be719c83ac7f2595220c36ecf0a58cf debian6-19-04-2012.img

Die Datei ist also richtig heruntergeladen und korrekt entpackt. Macht Sinn, das vorher zu prüfen. Hat man eine defekte Datei, erzeugt es unter Umständen spannende Phänomene und man sucht sich an anderer Stelle den Wolf…


Erstellung der SD Karte

Da nun das Image auf die SD Karte kopiert werden kann, geht es auch fast gleich los…
ACHTUNG: Ein dummer Vertipper löscht alle Daten auf dem angegebenen Device! Man sollte sich sicher sein, dass es der richtige Devicepfad ist. Gibt man versehentlich nicht die SD Karte sondern seine USB Festplatte, seine eingebaute Festplatte oder so an dann muss man sich mit seinem Backup beschäftigen 😉

Idealerweise testet man die Speicherkarte einfach aus. In einen Cardreader gesteckt und kurz gewartet zeigt einem in dmesg die Meldungen, die man braucht:

[ 446.440959] sd 5:0:0:2: [sdd] 15523840 512-byte logical blocks: (7.94 GB/7.40 GiB)
[ 446.443061] sd 5:0:0:2: [sdd] No Caching mode page present
[ 446.443067] sd 5:0:0:2: [sdd] Assuming drive cache: write through
[ 446.446826] sd 5:0:0:2: [sdd] No Caching mode page present
[ 446.446833] sd 5:0:0:2: [sdd] Assuming drive cache: write through
[ 446.450801] sdd: sdd1

Um auch wirklich auf der sicheren Seite zu sein kann man dieses Device mounten, ein paar Daten raufkopieren und in einem anderen Gerät auslesen.

Wir wissen nun, dass (in meinem Fall!) die SD Karte als sdd erkannt wird. Der Devicename ist somit /dev/sdd. Wir unmounten die Karte. Nun kann mit dd das Image auf die Karte kopiert werden. Hierbei werden die ersten zwei GB genutzt. Hat man eine größere Karte, muss man das nachträglich noch abändern um auch den Rest der Karte nutzen zu können.

sudo dd bs=1M if=debian6-19-04-2012.img of=/dev/sdd

Das dauert gewöhnlich ein paar Minuten. Ein Cardreader sollte einem durch Blinken den Fortgang signalisieren. DD ist sehr schweigsam und meldet erst etwas, wenn der Vorgang fertig ist. Dann noch ein sync und die Karte kann ge’unmount’et werden.

In den Kartenslot des RPI einstecken. Fertig. Nun sollte alles glatt laufen und der RPI gleich starten. Wenn nicht, ruhig mal eine brauchbare SD Karte suchen 😉


Der erste Bootvorgang – der erste Login

Sofern man nun alles richtig gemacht hat und die SD Karte richtig erkannt wird hat man schon das erste Erfolgserlebnis: Es passieren Dinge auf dem Monitor!
Für Linux Unkundige (die sicher eher nicht zur Anhängerschaft eines RPI gehört) sind die Zeilen eher unsagend. Für andere ein Zeichen, dass alles klappt.
Der Loginprompt erscheint und wartet auf Eingabe.

Benutzername: pi
Passwort: raspberry
(ACHTUNG! Das Tastaturlayout steht bei Auslieferung auf UK. Also nicht wundern, wenn man Z und Y vertauschen muss 😉 )


Benutzer und Passwort ändern

Damit man das System nicht mit den Auslieferungsdaten nutzt empfiehlt es sich, einen neuen Benutzer anzulegen oder den existierenden umzubenennen. Ich ersetze den Benutzer pi durch einen von mir. Hierzu sind die /etc/passwd, die /etc/shadow, die /etc/group und die /etc/sudoers anzupassen.

sudo vipw
(ändert die /etc/passwd ab)
sudo vi /etc/group
(dort alles, was pi war durch den neuen Namen ersetzen)
sudo vi /etc/sudoers
(hier in der Zeile pi ALL=(ALL) ALL wieder pi austauschen)

Ein neues Passwort f. den Benutzer gesetzt und fertig.

    passwd neuerbenutzername

Idealerweise setzt man in diesem Atemzuge mit sudo passwd root auch noch ein Passwort für den root User, den man ja nicht unbedingt braucht.

Sollte man sich den Ast absägen kann man ja immer noch die Karte im Kartenleser mounten und dort korrigieren 😉


SSHd aktivieren

Damit man nun nicht den Monitor angeschlossen und sich mit Tastatur einloggen muss gibt es natürlich auch ein SSHd. Dieser wird wie folgt aktiviert:

sudo cp /boot/boot_enable_ssh.rc /boot/boot.rc

Dann noch einmal rebooten, nun kann man sich per SSH von extern einloggen. Die IP kriegt man ohne Probleme raus. Entweder schon bei den ersten Bootvorgängen oder durch eine Auskunft des DHCP Servers. Braucht man aber wohl nicht erwähnen 😉


Die CPU – ARMv6

Natürlich kann man keine großen Wunder erwarten. Die CPU ist schwachbrüstig und natürlich nicht dazu gedacht, X anständig performant laufen lassen zu können. Ebenfalls ist der Speicher natürlich knapp bemessen. Also sollte man sich nicht wundern, wenn eine X Session mit zwei gestarteten Programmen keine High-End Performance an den Tag legen kann…

pi@raspberrypi:~$ cat /proc/cpuinfo
Processor : ARMv6-compatible processor rev 7 (v6l)
BogoMIPS : 697.95
Features : swp half thumb fastmult vfp edsp java tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xb76
CPU revision : 7

Hardware : BCM2708
Revision : 0002
Serial : 00000000babd1fb4

Der RAM Speicher ist mit 256MB auch knapp. Aber für Projekte, die man zwar noch nicht genau weiß aber sicher bald hat, ist das vollkommen ausreichend 😉


Erstmal ein Update machen…

Seit der Erstellung des Images bis zum aktuellen Zeitpunkt sind ein paar Aktualisierungen der Pakete vorgenommen worden. Also erstmal ein Update durchführen:

blahbenutzername@raspberrypi:~$ sudo apt-get update
(lädt dann ein paar Infos herunter)
blahbenutzername@raspberrypi:~$ sudo apt-get upgrade
Reading package lists… Done
Building dependency tree
Reading state information… Done
The following packages will be upgraded:
base-files file firmware-linux-free initscripts libarchive1 libc-bin libc-dev-bin libc6 libc6-dev libfreetype6 libgnutls26 libicu44 libmagic1 libmozjs2d libpng12-0 libpolkit-agent-1-0
libpolkit-backend-1-0 libpolkit-gobject-1-0 libsmbclient libssl0.9.8 libtasn1-3 libtiff4 libvorbis0a libvorbisfile3 libwbclient0 libxi6 libxml2 linux-libc-dev locales openssh-client openssh-server
policykit-1 procps python python-minimal samba-common samba-common-bin ssh sysv-rc sysvinit sysvinit-utils tzdata
42 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 35.6 MB of archives.
After this operation, 582 kB of additional disk space will be used.
Do you want to continue [Y/n]?

Nun etwas abwarten und die neuen Pakete herunterladen und installieren lassen. Solte ein reboot erforderlich sein (weil beispielsweise ein neues Kernelpaket vorhanden ist) gibt es eine passende Info.


Speicherkarte ist groß aber nur 2GB nutzbar?

Durch das dd’en des Image auf die Speicherkarte wird diese erstmal nur mit 2 GB eingerichtet. Meist hat man größere und möchte ja nun den vorhandenen Speicher auch komplett nutzen.
Eine Möglichkeit, dieses zu ändern ist wie folgt (Achtung! Man kann u.U. seine Daten verlieren. Also immer fleißig Backups machen!):

1. SD Karte in einen Kartenleser an einem anderen Linux einstecken
2. sichergehen, dass diese nicht gemountet ist
3. Filesystemcheck durchführen
4. FS Journal abschalten
5. Partitionstabelle ändern
6. Filesystem resizen
7. Filesystemcheck durchführen
8. FS Journal wieder einschalten
9. Fertig.

In Langform. Die Karte wird (bei mir) als /dev/sdd erkannt, muss also passend verändert werden…

Wir schauen uns mit fdisk an, welche Partitionen auf der SD Karte existieren. Hierbei merken wir uns den Startblock, den die Partition hatte. Dieser wird für die neu anzulegende Partition benötigt (oder wir errechnen diesen). Punkt 1 und 2 erspare ich mir zu erklären…

      3. Filesystemcheck:
      sudo fsck -n /dev/sdd1
      sudo fsck -n /dev/sdd2

      4. Das Journal abschalten
      sudo tune2fs -O ^has_journal /dev/sdd2

      5. Partitionstabelle ansehen und abändern

      Auflistung der derzeit auf der Karte vorhandenen Partitionen:

      sudo fdisk -l /dev/sdd

      Platte /dev/sdd: 7948 MByte, 7948206080 Byte
      4 Köpfe, 32 Sektoren/Spur, 121280 Zylinder, zusammen 15523840 Sektoren
      Einheiten = Sektoren von 1 × 512 = 512 Bytes
      Sector size (logical/physical): 512 bytes / 512 bytes
      I/O size (minimum/optimal): 512 bytes / 512 bytes
      Festplattenidentifikation: 0x000ee283

      Gerät boot. Anfang Ende Blöcke Id System
      /dev/sdd1 2048 155647 76800 c W95 FAT32 (LBA)
      /dev/sdd2 157696 3414015 1628160 83 Linux
      /dev/sdd3 3416064 3807231 195584 82 Linux Swap / Solaris

      sudo fdisk /dev/sdd

      Wir löschen (d) die zweite und dritte Partition (d 2, d 3). Nun legen wir eine neue (n) an.

      Neu angelegt wird eine primäre (p), 2
      Startblock ist der vorhin gemerkte! Letzter Block oder eine gewünschte Größe angeben. Ich will alles nutzen, muss also
      nur die Vorgabe für den Startblock ändern.

      Partitionstabelle speichern mit w

      6. Dateisystem vergrößern (resizen)
      sudo resize2fs /dev/sdd2
      (Unter Umständen wird man aufgefordert, vorher noch ein Filesystemcheck mit sudo e2fsck -f /dev/sdd2 durchlaufen zu lassen.)
      7. Filesystem-Journal wieder aktivieren
      sudo tune2fs -j /dev/sdd2

      8. Filesystemcheck erneut durchführen
      sudo e2fsck -f /dev/sdd2

Die Daten sollten üblicherweise ohne Probleme erhalten bleiben. Man kann diese Prozedur auch „am offenen Herzen“ (soll heißen, auf dem laufenden RPI vornehmen). Da man aber eh einen Kartenleser hat und der Ausbau der Karte kein Problem darstellt würde ich den einfacheren und sicheren Weg bevorzugen.


Karte wieder in den Raspberry Pi einstecken, booten und siehe da:

blahbenutzername@raspberrypi:~$ sudo fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 7948 MB, 7948206080 bytes
4 heads, 32 sectors/track, 121280 cylinders
Units = cylinders of 128 * 512 = 65536 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ee283

Device Boot Start End Blocks Id System
/dev/mmcblk0p1 17 1216 76800 c W95 FAT32 (LBA)
/dev/mmcblk0p2 1233 121280 7683072 83 Linux

blahbenutzername@raspberrypi:~$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 94M 0 94M 0% /lib/init/rw
udev 10M 148K 9.9M 2% /dev
tmpfs 94M 0 94M 0% /dev/shm
rootfs 7.3G 1.5G 5.4G 22% /
/dev/mmcblk0p1 75M 28M 47M 37% /boot

Das Dateisystem ist nun vergrößert und man kann die Karte „voll“ ausnutzen.


Seltsame Abstürze? Kernel Panics? Probleme mit der Tastatur? Mehrfache Buchstaben? USB Port resets? Netzwerk verloren?

  Eine Lösung für genannte Probleme kann das Netzteil sein. Der RPi benötigt mind. 700mAh. Mindestens…
Nun denkt man, dass man nach dieser Anforderung mit einem 1Ah Netzteil ausreichende Versorgung haben sollte, wenn schon nichts an die USB Ports angesteckt ist und nur HDMI Ausgang und Netzwerk genutzt wird. Leider ist dem nicht so. Aus leidiger Erfahrung passieren merkwürdige Dinge mit dem RPi, obwohl die Load bei 0,0x liegt, nichts gemacht wird. In dmesg sieht man, dass der USB Host-Port immer mal wieder weg und direkt danach wieder da ist. Ebenfalls fällt dann die Netzwerkverbindung weg.

Ursache? Der Strombedarf. Einfach mal ein größeres Netzteil (1,5Ah) nutzen. Dann sollten alle Probleme weg sein…


Was soll man nun mit der winzigen Kiste machen?

Tja. Das ist derzeit noch eine gute Frage. Vor einiger Zeit mal angedacht war der RPI für Streaming von Internetradiostationen auf den Klinkenanschluss. Angebunden per WLAN und angeschlossen an einen iTeufel sollte dieser einen kleinen Streamingclient bieten. Mittlerweile habe ich hierfür andere Ideen umgesetzt.
Mir wird aber sicher noch etwas spannendes einfallen 😉


Dieser Beitrag wurde unter RaspberryPI, Technikspielkram abgelegt und mit , , , , , , , , , , , , , , , , , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert