[Tutorial] Raspberry Pi sauber installieren/aufsetzen

Wie setze ich meinen Raspberry Pi am besten auf?

Natürlich gibt es tausend Möglichkeiten einen Raspberry zu benutzen. Da ich meinen Raspberry als „Headless Server“, also als Server ohne Bildschirm, Maus und Tastatur benutze, gibt es hier eine Schritt-für-Schritt Anleitung, so dass man hinterher ein sauberes System hat, auf dass man aufbauen kann.

Das Tutorial wird von Zeit zu Zeit aktualisiert und ergänzt werden.

Nun geht es los!

 

1. Image

Zuerst das Linux Image laden, macht man HIER.

Ich empfehle das Debian Wheezy Image, läuft laut div. Quellen am schnellsten und saubersten. Außerdem hat man Zugriff auf das Debian Repository und kann somit div. Programme einfach nachinstallieren.

 

[INFO/OFFTOPIC] In den Google-Suchanfragen kam immer wieder die Frage auf, ob man auch Windows auf dem Raspberry installieren könnte. Die Antwort hier ist leider NEIN. Dafür ist der Winzling nicht schnell genug, da ein normales Windows (z.B. XP oder 7) u.a. mehr RAM benötigt und nicht mit ARM-Prozessoren kompatibel ist, da auf die X86-Technologie aufgebaut wird.
Evtl. käme ein Embedded-Windows in Frage, wie es z.B. auf Smartphones läuft, allerdings habe ich bis jetzt noch nichts von einer Portierung für den Raspberry gelesen. Wer anderes gehört hat, darf dies gerne über die Kommentarfunktion kund tun 😀

 

2. Image auf SD Karte kopieren

Unter Windows nutze ich hierfür den Win32DiskImager, bekommt man HIER. Dort die „win32diskimager-binary.zip Version laden und entpacken. Version 0.8 funktioniert bei mir problemlos. Wichtig ist, das Tool mit Rechtsklick „Als Administrator ausführen“ zu öffnen, damit man volle Schreibrechte auf die SD-Karte bekommt.

Nun das zuvor entpackte Debian Image auswählen, die SD-Karte auswählen (!Achtung, besser doppelt checken ob es auch das richtige Laufwerk ist, denn das wird hinterher ohne Warnung komplett überschrieben!), und dann beherzt auf „Write“ klicken und warten bis das Image komplett auf der SD ist. Mit „Read“ kann man übrigens später jederzeit ein Backup der SD auf die Festplatte schreiben! Allerdings wird das Backup auch so groß wie die SD-Karte. Hat diese 16GB, so belegt das Backup auch 16GB – egal wie viele Daten wirklich auf die Karte geschrieben wurden.

 

3. Raspberry booten

Für den ersten Start kann man den Raspberry an einen Monitor und USB Keyboard anschließen, muss man aber nicht. Wenn man eine Möglichkeit hat die IP, z.B. über den Router, herauszufinden, dann kann man sich auch remote per SSH anmelden.

Wird der Raspberry nun zum ersten mal gebootet, so startet automatisch die raspi-config und wir landen auf einem blauen Bildschirm, durch den wir mit den Pfeiltasten navigieren können.

raspi-config

 

Nun arbeiten wir uns Punkt für Punkt durch

  • expand_rootfs: Dadurch wird die ganze Größe der SD-Karte verfügbar. Der nächste Bootvorgang dauert allerdings länger, da dann der restliche, bislang unpartitionierte Teil der SD formatiert und somit nutzbar wird.
  • overscan: Dadurch kann man sich schwarze Balken am Bildschirm anzeigen lassen. Macht normalerweise nur Sinn bei alten, analogen TV-Monitoren, aber nicht bei neueren TFT-Displays. Im Normalfall kann der Wert also auf disabled bleiben.
  • configure_keyboard: Hier kann man die verwendete Tastatur auswählen. Sollte man sein Model nicht finden, so reicht es die Voreinstellung Generic 105-key (Intl) PC zu übernehmen. Nun müssen wir die Tastatur noch auf deutsch umstellen. Dies macht man unter dem Punkt other. Hier nun 2x German, dann The default for the keyboard layout und No compose key auswählen. Die Frage, ob man mit STRG+ALT+ENTF (Control+Alt-Backspace) den X-Server beenden möchte, kann man ruhig mit YES beantworten.
  • change_pass: Hier kann und sollte man auch ein neues Passwort für den User „Pi“ setzen.
  • change_locale: Hier wählt man die verwendete Sprache aus. Im Normalfall kann man hier mit Hilfe der Leertaste de_DE.UTF-8 auswählen. Möchte man aber z.B. MRTG benutzen, so sollte man hier de_DE ISO-8859-1 auswählen. Die englische Sprache kann man mit der Leertaste abwählen. Mit TAB kommen wir nun auf OK. Im Anschluss noch einmal die verwendete Sprache auswählen und einen Augenblick warten, bis das System die Einstellungen übernommen hat.
  • change_timezone: Hier stellen wir die lokale Zeitzone ein, indem wir zuerst Europe und dann Berlin auswählen.
  • memory_split: Da wir keinen Monitor anschließen wollen und keinerlei Grafikintensive Prozesse laufen lassen, können wir hier getrost den kleinsten Wert für die GPU auswählen – 16MB. Somit steht mehr RAM für Anwendungen zur Verfügung.
  • overclock: Hier kann man den Raspberry übertakten, ohne dass man seine Garantie verliert. Standard ist 700MHz. Setzt man nun einen höheren Wert, so übertaktet sich der Pi immer nur dann kurzfristig, wenn mehr Leistung benötigt wird. Gibt es nichts zu tun, dann sinkt die Taktrate wieder auf 700MHz ab. Maximaler Wert ist der Turbo-Mode mit 1000MHz.
  • ssh: Hier kann man einstellen, ob der SSH-Server beim Bootvorgang automatisch gestartet werden soll. Da wir keinen Monitor anschließen wollen, muss der Wert auf jeden Fall auf enabled stehen, da wir uns später ausschließlich über SSH auf den Raspberry verbinden! Aber auch mit Monitor macht es durchaus Sinn den SSH-Server aktiviert zu lassen.
  • boot_behaviour: Hier wählen wir NO, schließlich wollen wir nicht, dass der Desktop automatisch geladen wird – wir bekommen ihn ja eh nicht zu Gesicht und er verbraucht nur extra RAM. Nutzt man den Pi generell mit einem eigenen Monitor, kann man den Wert aus Komfortgründen auf YES stellen.
  • update: Hierüber wird das rpi-Tool selbst aktualisiert und die neuste Version geladen und installiert. Es empfiehlt sich dies direkt am Anfang auszuführen um von neueren Updates zu profitieren. Nach der Aktualisierung landet man in der Konsole. Mit sudo raspi-config kann man das Tool jederzeit erneut aufrufen und die Einstellungen ändern. Nachdem wir nun alles abgearbeitet haben navigieren wir mit der TAB Taste auf Finish und werden nun gefragt ob wir rebooten wollen -> NO.Nun landen wir in der Konsole. Mit dem Befehl „ifconfig“ bekommen wir die IP Adresse des Raspberry angezeigt – diese am besten notieren. Wir brauchen sie um uns im nächsten Schritt remote per SSH zu verbinden.

Jetzt können wir in aller Ruhe das Keyboard und den Monitor abstöpseln und uns an unseren PC setzen. Mit einem beliebigen SSH Client (mein Favorit unter Windows ist „Putty„) kann nun eine Verbindung zum Raspberry, auf die zuvor notierte IP, aufgebaut werden.

Dieses kleine hilfreiche Tool kann jederzeit wieder über die Konsole mit folgendem Befehl gestartet werden:

$ sudo raspi-config

Mehr Infos zu raspi-update und eine genaue Erklärung der einzelnen Punkte gibt es HIER auf Englisch.

 

4. Updates installieren

Nun per SSH verbunden, geben wir folgende Befehle ein um alle neu verfügbaren Pakete zu suchen, zu installieren und neu zu starten. Abfragen beantworten wir mit „Y“.

$ sudo aptitude update
$ sudo aptitude safe-upgrade
$ sudo reboot

Das dürfte nun einige Zeit in Anspruch nehmen.

 

5. Firmware updaten

Damit die Firmware auch auf dem neusten Stand ist und jederzeit aktualisiert werden kann, haben Hexxeh und AndrewS ein kleines Script geschrieben, dass man wie folgt installiert und ausführt:

$ sudo aptitude update
$ sudo aptitude install rpi-update
$ sudo rpi-update
$ sudo reboot

Für zukünftige Updates der Firmware reicht dann ein

$ sudo rpi-update
$ sudo reboot

Weitere Infos gibt es HIER.

 

6. root User Passwort setzen für WinSCP Verbindungen

$ sudo passwd root

Eigenes Tutorial mit weiteren Infos gibt es HIER.

 

7. SSH Zertifikate für automatischen SSH Login erstellen und installieren

Kommt bald in einem eigenen kleinen Tutorial!

 

8. Must Have Programs

Hier sollen nur die absolut grundlegenden Programme installiert werden; solche, die man eher optional braucht, sollten separat aufgelistet werden (wie ich es für Samba auch mal gemacht habe).

Für mich ist das eine wichtigste Programm debfoster, denn damit kann man seine installierten Pakete managen. Führt man debfoster zum ersten Mal aus, muss man alle bisher auf dem System installierten Pakete durchgehen und auswählen, welche man davon behalten möchte (wenn man nicht richtig weiß, was man braucht, sollte man besser erstmal alles behalten, ich selbst hab mir so nicht nur einmal ein System zerschossen, also mit dem Gedanken: „Na, das brauch ich doch sicher nicht..“). Es speichert dann eine Liste der so ausgewählten Programme in

/var/lib/debfoster/keepers

Das Tolle ist nun: Wenn man jetzt im täglichen Betrieb irgendwelchen Pakete installiert und man sich dann nach einer gewissen Zeit nicht mehr erinnern kann, welche das waren und v.a. von welchen anderen Paketen sie abhingen usw. usf. dann hat sich das debfoster gemerkt: Man muss es nur erneut ausführen und es fragt nur bei den zwischenzeitlich installierten Paketen (also jenen, die nicht im keepers-File stehen) nach, ob man das nicht löschen will.
Mit Hilfe von debfoster habe ich also auch die folgenden Liste von must-have-Programmen zusammen getragen:

Tools:

debfoster rsync vim ntfs-3g htop

Entwicklung:

build-essential checkinstall subversion git ruby1.9.1

Server:

apache2 mysql-server mysql-client php5 php5-cgi php5-mysql php5-mcrypt x11vnc tightvncserver samba

Immer erst

sudo aptitude update

eingeben, bevor man Pakete installiert, so kriegt man immer die aktuellste Version.

 

9. Don’t Need Programs

Vorinstallierte Programme, wie z.B. die Spiele oder die Pakete für die Desktopumgebung die nicht benötigt werden, können gefahrlos gelöscht werden, da wir den Server ja „headless“ betreiben wollen. Das ganze dient auch der Sicherheit – je weniger Pakete und Services installiert sind, desto weniger läuft man Gefahr offene Sicherheitslücken im System zu haben.

$ sudo aptitude purge python-pygame penguinspuzzle lxappearance lxde lxde-common lxde-core lxde-icon-theme lxinput lxmenu-data lxpanel lxpolkit lxrandr lxsession lxsession-edit lxshortcut lxtask lxterminal xinit xserver-xorg lightdm scratch midori desktop-base gnome-icon-theme gnome-themes-standard leafpad menu-xdg omxplayer xarchiver zenity tk8.5 pcmanfm blt python-tk python3-tk dillo openbox pistore idle idle3

 

10. Must Have Configs
Dies setzt voraus, dass man git installiert hat. Dann kann man sich so unsere Config-Vorlage kopieren:
Um Wechseldatenträger automatisch in /media zu mounten:

cd ~ && git clone https://github.com/kopfkino/raspi-config.git && cd raspi-config
sudo cp etc/udev/rules.d/* /etc/udev/rules.d
sudo mkdir -p /usr/local/sbin && sudo cp usr/local/sbin/* /usr/local/sbin
sudo chown root:root -R /usr/local/sbin/*
sudo chmod +x /usr/local/sbin/*

  • Um samba mit ein paar Beispieleinträgen zu aktivieren:

    sudo aptitude install samba samba-common-bin
    cd ~/raspi-config
    sudo cp etc/samba/smb.conf /etc/samba
    sudo update-rc.d add samba default

    Und noch Benutzer anlegen, die sich über Samba anmelden können (in der hier benutzten smb.conf wird ein Benutzer namens „auser“ vorausgesetzt, diesen legen wir also hier an):

    sudo smbpasswd -a auser

    Und den entsprechenden Benutzer in /etc/samba/smbusers eintragen: Also eine Zeile wie ‚debianusername = „auser“‚ einfügen:

    sudo vim /etc/samba/smbusers

    In der Datei steht dann z.B. bei mir:

    pi = „auser“

    Noch samba neustarten und man sollte die Ordner übers Netzwerk sehen:

    sudo service samba restart

  • Um VNC einzurichten, stelle ich hier zwei Möglichkeiten vor:1. Mit tightvnc:
    Dafür liegt schon eine config-Datei bereit, sie muss noch an die richtige Stelle kopiert werden:

    cd ~/raspi-config && sudo cp etc/init.d/vncserver /etc/init.d/vncserver

    Dann kann dieser Service aktiviert werden mit:

    sudo service vncserver start

    Und damit er auch nach dem Neustarten immer mit gestartet wird, schreibt man:

    sudo rc-update add vncserver default

    2. mit x11vnc:
    Das kann man benutzen, wenn man immer auf den gleichen Desktop zugreifen möchte, es wird also eine Session über alle Clients und auch lokal geteilt, bei tightvnc wird (soweit ich weiß) zumindest immer eine neue Session aufgenommen (man kann sie –shared machen und dann von allen Remote-Clients auf die gleiche Session zugreifen, aber es ist nicht die, mit der man sich lokal verbinden würde). Das heißt natürlich auch, dass es lokal schon eine X-Session geben muss, das ist der Fall, wenn man in raspi-config eingestellt hat, dass der Raspberry beim Booten den Desktop starten soll). Ich starte dies nie als Service, sondern nur wenn ichs mal brauche, deswegen gibt’s da keine Service-Config für (würde aber sehr analog zu der von vncserver aussehen..), man startet das Tool einfach mit:

    x11vnc -forever

    -forever sorgt dafür, dass sich x11vnc nicht beendet, nachdem die erste Verbindung beendet wurde, sondern am Laufen bleibt und für weitere Verbindungen offen steht.

 

11. Lighttpd installieren und CGI, fastCGI & php aktivieren

Die benötigten Pakete installieren und aktivieren

sudo aptitude update
sudo aptitude install lighttpd
sudo aptitude install php5-common php5-cgi php5
sudo lighty-enable-mod fastcgi-php
sudo lighty-enable-mod cgi
sudo lighty-enable-mod fastcgi-php
sudo service lighttpd force-reload

CGI Ordner erstellen, Besitzrechte an /var/www übernehmen, Rechte setzen und den Pi der www-data Gruppe hinzufügen

sudo mkdir /var/www/cgi-bin
sudo chown -R www-data:www-data /var/www
sudo chmod 775 /var/www
sudo usermod -a -G www-data pi

Nun noch einmal lighttpd neustarten:

sudo service lighttpd force-reload

Nun sind cgi-Skripte, die unter /var/www/cgi-bin/ liegen per Browser erreichbar!

 

[ACHTUNG] Nicht den Fehler machen und die Skripte wie von Apache gewohnt unter /usr/lib/cgi-bin/ ablegen, das erzeugt nur eine 404 Error (Seite oder Datei nicht gefunden).

Falls dir das Tutorial gefallen hat, würden wir uns über einen kleinen Kommentar freuen – das gleiche gilt auch für Kritik oder Verbesserungsvorschläge 😀 Natürlich dürft ihr auch gerne euren Adblocker auf Kopfkino deaktivieren und den kleinen Banner am Ende des Posts klicken – ist aber natürlich absolut freiwillig 😉 Die Werbung ist dezent gehalten und es gibt keine nervigen Flashbanner oder ähnliches 🙂 Einnahmen kommen vollständig neuen Projekten zu Gute 😀

Gruß iro

 

[Letzte Änderung: 20.07.2014]

20 Kommentare zu „[Tutorial] Raspberry Pi sauber installieren/aufsetzen

    • Hallo Stefan,

      Danke erstmal für das Lob 🙂

      Und zu deiner Frage: ein paar Rückfragen..
      Diese must-have-configs umfassen ja mehrere Sachen:
      Erstmal das Kopieren aus unserem Github — funktioniert das?
      Dann enthält das Kopierte ja mehrere Teile:
      – Skripte und ne udev-Regel um externe Festplatten automatisch zu mounten,
      – ein vncserver-Startskript,
      – eine exemplarische samba-config
      (eine scheinbar recht willkürliche Auswahl, zugegeben 😉 Vorschläge für weitere must-haves sind natürlich immer gerne willkommen!)
      Was davon funktioniert nicht?

      • Ich habe die neueste Version (2013-02-09-wheezy-raspbian.img) – vermutlich hängt es irgendwie damit zusammen.

        Bei dem automatischen Mounten von Wechseldatenträgern beginnnt es hier mit den Fehlermeldungen:

        pi@raspberrypi ~/raspi-config $ sudo mkdir -p /usr/local/sbin && cp usr/local/sbin/* /usr/local/sbin
        cp: reguläre Datei â/usr/local/sbin/udev-automounter-ntfs.shâ kann nicht angelegt werden: Keine Berechtigung
        cp: reguläre Datei â/usr/local/sbin/udev-auto-mount.shâ kann nicht angelegt werden: Keine Berechtigung

        pi@raspberrypi ~/raspi-config $ sudo chown root:root -R /usr/local/sbin/*
        chown: Zugriff auf â/usr/local/sbin/*â nicht möglich: Datei oder Verzeichnis nicht gefunden

        pi@raspberrypi ~/raspi-config $ sudo chmod +x /usr/local/sbin/*
        chmod: Zugriff auf â/usr/local/sbin/*â nicht möglich: Datei oder Verzeichnis nicht gefunden

        Bei der Aktivierung von Samba mit Beispieleinträgen ab hier:

        pi@raspberrypi ~/raspi-config $ sudo rc-update add samba default
        sudo: rc-update: command not found

        pi@raspberrypi ~/raspi-config $ sudo smbpasswd -a auser
        sudo: smbpasswd: command not found

        Leider bin ich als Linux-Noob damit ziemlich aufgeschmissen. Kommt mir irgendwie so vor, dass das was mit der neuen Wheezy-Version zu tun hat. Ein httpd scheint hier standardmässig ebenfalls schon zu laufen, denn beim Starten von lighthttpd wird ebenfalls eine Fehlermeldung ausgeworfen (die besagt dass da schon was auf Port 80 horcht.)

        • Hallo Stefan,
          Zu dem womöglich schon laufenden Webserver auf Port 80 kann ich nichts sagen. (Mit „sudo lsof -i :80“ kannst du rausfinden, was da horcht..)
          Und die anderen Fehler stammen von hier falsch angegebenen Kommandos: Sorry dafür, und danke für die Fehlermeldung!
          Ich habe die Fehler zwar auch im Post behoben, hier aber noch speziell zu deinen Fehlern:
          cp usr/local/sbin/* /usr/local/sbin schlägt fehl, weil vorher ein „sudo“ fehlt; als normaler Nutzer hast du keine Rechte dorthin zu kopieren, „sudo“ heißt soviel wie: „Mach das als Super-User“.
          Im Anschluss schlägt dann
          sudo chown root:root -R /usr/local/sbin/*
          fehl, weil in /usr/local/sbin nichts drin ist, weil das vorherige Kopieren schief ging.
          Auf dem Pi gibt es auch kein „rc-update“, „update-rc.d“ heißt das da..
          Und „smbpasswd“ ist erst verfügbar, wenn man das Paket „samba-common-bin“ vorher installiert hat..

          • Au man, darauf daß hier lediglich sudo fehlt hätte ich ja auch mal selbst kommen können…

            Jetzt läuft alles wunderbar durch, lediglich hier hat sich noch ein Fehlerchen eingeschlichen:
            sudo update-rd.d add samba default -> sudo update-rc.d add samba default

            Vielen Dank nochmal für das klasse Tutorial und den schnellen und unproblematischen Support!!!

              • Ich habe jetzt noch folgendes Phänomen entdeckt:

                Ein NTFS-formatierter Stick wurde offensichtlich erkannt und auch mit dem Datenträgernamen unter /media/ eingebunden. Die auf dem Stick bereits exisitierenden Files werden unter WinSCP jedoch nicht angezeigt.

                Kopiere ich nun über WinSCP da eine weitere Datei hinein und stöpsel den Stick wieder in einen Windows-PC wird diese dort nicht angezeigt. Unter WinSCP ist weiterhin das Verzeichnis unter /media/ vorhanden und die Datei existiert auch noch – nur wo? Sieht so aus als wäre das irgdenwo auf der SD-Karte gelandet…

                Hast Du hierfür eine Erklärung?

                  • Ad hoc muss ich da leider passen.. Hab auch gerade keinen pi zum nachstellen hier. Sobald ich das kann, kann ich vielleicht hilfreicher sein.
                    Solange zuerst mal wieder Rückfragen:
                    Sind die Dateien denn da, wenn du per SSH auf den pi gehst und dann den Inhalt des Sticks dir anzeigen lässt? Kannst du dann Dateien anlegen, die später auch auf anderen Rechnern sichtbar sind?

  1. Ersteinmal ein sehr schönes Turtorial. 🙂
    Dennoch habe ich leider ein Problem.
    Bei der Installation von lighttpd kam bei mir die Meldung: „can’t bind to port: 80 Address already in use failed!“.
    Hat jemand vielleicht eine Lösung was ich machen könnte?

    MfG
    Kilian

    • Hallo Kilian,

      besser spät als nie 😀
      Mit „fuser -n tcp 80“ kannst du dir anzeigen lassen welche PID (Program ID) Port 80 belegt. Mit „ps auxw | grep PID_ID“ kann man dann anzeigen lassen welches Programm sich hinter der PID versteckt.

      Beispiel:

      iro@Raspy:~# fuser -n tcp 80
      80/tcp: 2667

      iro@Raspy:~# ps auxw | grep 2667
      www-data 2667 0.0 0.8 11932 4376 ? S Sep22 0:15 /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf

      Vermutlich läuft noch ein Apache. Falls ich richtig getippt habe, dann kannst du den über „sudo aptitude purge apache2“ deinstallieren.

      Gruß iro

    • Hey pinewie,
      warum willst du denn nfs nutzen? Nimm doch einfach Samba?! Das einrichten sollte nicht all zu schwer sein und man findet zig Tutorials dazu bei Google 😉
      Gruß iro

  2. danke für die tipps.

    aktuelle, 05/2014, hat sich beim raspi-config manches geändert.
    Trotzdem habe ich mir einiges von dir abgeschaut

  3. Danke für den Artikel. Man jemand der es ohne große Umwege erklärt. Bei mir schnurrt die Installation wie ein Kätzchen.
    Wer noch überlegt, ob er sich ein RaspPi für seine Spielereien kaufen soll, der wird hier beraten:
    [link deleted]

    Ansonsten ein gelungener Post, kann ich weiter Empfehlen.

    • Hallo Sebastian,
      imho klingt das eher nach einem Fehler der Tastatur. Probier mal eine andere aus. So ein Problem hatte ich noch nie. Selbst wenn die Tastatur auf chinesisch gestellt ist sollten die Pfeiltasten noch gehen.
      Was passiert denn wenn du in der CLI die Pfeiltaste nach oben drückst? Wird dann der zuletzt eingegebene Befehl angezeigt?
      Gruß iro

  4. Hallo,

    das ist ein toller Artikel. Ich habe aber ein Problem: CGI funktioniert nicht (404), obgleich cgi Scripte in /var/www/cgi-bin liegen. Installation und Konfiguration habe ich wie oben beschrieben durchgeführt. Wo kann ich noch nachschauen? PHP, HTML funktioniert. Apache ist nicht installiert.

    • Hey Robert,
      ich vermute mal, dass cgi noch nicht aktiviert ist. Machst du mit folgendem Befehl „sudo lighty-enable-mod cgi“. Danach lighttpd neustarten.
      Gruß iro

Schreibe einen Kommentar

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

*

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.