![]() |
Raspberry Pi: Einrichten und AdministrierenProf. Jürgen Plate |
Bei der ersten Einrichtung des Raspberry Pi sind Monitor und Tastatur hilfreich, insbesondere, wenn bei der verwendeten Distribution SSH standardmäßig abgeschaltet ist.
Hinweise:
Grundsätzlich ist der Raspberry Pi nicht unbedingt etwas für jemanden,
der Linux noch nie verwendet hat - oder es gibt eine anfangs extren steile Lernkurve.
Wer bisher Mikrocontroller programmiert hat, die ohne jedes Betriebssystem auskamen,
wird auch merken, dass durch Linux manche Dinge einfach anders sind. Unter anderem
kann man nicht mehr so einfach mit Timern, Interrupts etc. hantieren, sondern ist
auf System-Calls angewiesen. Besser ist es daher, wenn Sie schon etwas Erfahrung
mit dem Arbeiten auf der Linux-Kommandozeile haben, da alle grundlegenden Dinge
bei Linux über die Kommandozeile erledigt werden können (das geht dann auch
über's Netz per SSH). Extrem wichtig und auch oftmals Grund für Fehlfunktionen sind
die Dateizugriffsrechte. Sie entscheiden, welcher User oder welche Gruppe auf Dateien
lesend/schreibend zugreifen dürfen - oder ob das alle User dürfen. Beachten Sie auch,
dass Programme immer ein Execute-Recht haben müssen, um zu laufen. Der Windows-Quatsch,
das über Datenamen-Endungen zu regeln (".exe") wird von Linux nicht mitgemacht.
Eventuell hilft Ihnen das Skript zur
UNIX/Linux-Vorlesung weiter. |
Anstelle einer Festplatte nutzt der Raspberry Pi eine SD-Karte, wobei das Basis-Betriebssystem etwa 2 GByte auf der Karte belegt. Für vernünftiges Arbeiten empfiehlt sich eine Karte mit 4 GByte oder mehr mit Geschwindigkeitsklasse 4. Bevor es aber losgehen kann, muss erst einmal das Betriebssystem auf die Speicherkarte kommen. Inzwischen gibt es eine Reihe von Betriebssystemvarianten für den Raspberry Pi, darunter:
Zuerst müssen Sie das Betriebssystem (oder NOOBS) auf die SD-Karte kopieren. Dazu laden Sie sich von der offiziellen Raspberry-Pi-Webseite das aktuelle Raspian-Image herunter (http://downloads.raspberrypi.org/raspbian_latest). Das Image kommt als ZIP-Datei und muss erst einmal entpackt werden. Anschließend kann es dann auf die SD-Karte geschrieben werden. Das Image selbst enthält drei Paritionen, von denen unter Windows nur die erste sichtbar ist:
Alternativ kann das HDD Raw Copy Tool verwendet werden ( http://hddguru.com/software/HDD-Raw-Copy-Tool/). Das Tool erlaubt das sektorweise Low-Level-Duplizieren von Festplatten und das Anlegen von Images. Es kann weit mehr, als nur SD-Karten-Images kopieren. Das HDD Raw Copy Tool repliziert IDE-, SAS-, SCSI- oder SSD-Festplatten und kann mit externen USB-Laufwerken arbeiten. Über den Kartenleser werden auch SD-, MMC- oder CF-Karten verarbeitet.
Übrigens bietet die SD Association auch einen "SD Formatter" für Windows an - falls Sie Ihre SD-Karte mal total verkonfiguriert haben. SD Formatter versucht die Kapazität einer SD-, SDHC- und SDXC-Memory-Card optimal zu nutzen und formatiert sie entsprechend. Dabei kann man auswählen, ob die Speicherkarte schnell formatiert werden soll oder die darauf befindlichen Daten zuvor gelöscht werden, was mehr Zeit beansprucht. Zu Finden ist das Tool unter anderem unter www.heise.de/download/product/sd-formatter-74314/download oder bei der SD Association.
dd bs=4M if=2013-09-25-wheezy-raspbian.img of=/dev/sdc"bs" bezeichent die Blockgröße, "if" die Inputdatei und "of" das Ziel-Device. Falls Sie das falsche Ziel-Device erwischt haben sollten, haben Sie hoffentlich ein Backup Ihrer Daten... Sollte das Kopieren Probleme versursachen, können Sie die Blockgröße reduzieren ("bs=1M"). Ist das Kopieren abgeschlossen, geben Sie zur Sicherheit das Kommando sync ein, das alle Platenoperationen abschließt. Nun kann die SD-Karte herausgenommen werden.
Generelle Einstellungen für den SoC, die noch vor dem Starten des Betriebssystems geladen werden, kann man in der Datei /boot/config.txt ändern. Näheres dazu am Ende dieser Einführung.
Wenn Sie Linux verwenden, könnten Sie das Raspberry-Linux an Ihrem Linux-PC vor der Inbetriebnahme beliebig anpassen. Dazu stecken Sie die SD-Karte einfach in den Katenlesers Ihres PCs. Je nach Distribution werden die beiden Partitionen (boot und root) meist automatisch gemountet. Andernfalls bemühen Sie das mount-Kommando. Danach ist die SD-Karte wie eine weitere Platte eingebunden und Sie könen nun beispielsweise Dateien in das Heimatverzeichnis des Users "pi" kopieren (nicht vergessen, die Benutzer- und Zugriffsrechte anzupassen). Oder Sie machen sich über die Konfigurationsdateien im Verzeichnis /etc her. In /etc/network/interfaches könnten Sie z. B. schon eine feste IP-Konfiguration eintragen. Nachdem Sie alles Mögliche angepasst haben, lassen Sie die SD-Karte auswerfen (bei Automount) oder geben die Partitionen mittels umount-Kommando wieder frei. Es kann sinnvoll sein, nach dem Aushängen der SD-Karte das nun individuell angepasste System in einer neuen Image-Datei zu speichern - dann läßt sich jederzeit eine Kopie produzieren. Dazu wird wieder das dd-Kommando verwendet, nur in der anderen Richtung, z.B.:
dd bs=4M if=/dev/sdc of=2014-11-25-wheezy-raspbian.img
Wenn Sie im vorhergehenden Schritt alles richtig gemacht haben, können Sie den Raspberry Pi nun booten. Dazu stecken Sie die SD-Karte in den Kartenleser des Raspberry Pi und schließen USB-Tastatur, Monitor und ggf. Netzwerkkabel an. Nun das Netzteil in die Steckdose stecken. Die "Power"-LED sollte angehen und das Flackern der "Act"-LED (Activity) zeigen, das von der SD-Karte gebootet wird.
Beim erstmaligen Booten von Raspbian startet automatisch das Konfigurationsprogramm raspi-config. Damit können alle grundlegenden Einstellungen sehr einfach per Auswahl gemacht werden. Sie können das Programm natürlich jederzeit auch von Hand starten, um Änderungen vorzunehmen. Solange die Tastatur auf "amerkanisch" steht, finden Sie das Minuszeichen unter der "ß"-Taste:
Der Standard-Benutzer heißt übrigens "pi", das Passwort "raspberry". Wegen des voreingestellten amerikanischen Tastaturlayouts sind die Zeichen "y" und "z" vertauscht. Falls es also mit dem Passwort "raspberry" nicht klappt, geben Sie auf der deutschen Tastatur "raspberrz" ein. Nach dem ersten Anmelden am Raspberry Pi sollten Sie das Passwort mit dem Kommando passwd ändern, was für größere Sicherheit im Betrieb sorgt.
Doch nun einige Erläuterungen zu den Konfigurationsoptionen:
2015-11-11-raspbian-master.img, 8.010.072.064 ByteDann wollte ich auf auf Blanko-Karten kopieren und bekam prompt eine Fehlermeldung, das Ziel habe zu geringe Speicherkapazität, nämlich nur 7.948.206.080 Byte. Daher der Rat: Machen Sie möglichst alles mit der Standardkapazität von 4 GByte und expandieren Sie erst ganz zum Schluss das Dateisystem. Alternativ könnten Sie auch das Root-Dateisystem unberührt lassen und dafür eine separate Homepartition anlegen (und die dann etwas kleiner lassen). Wie das geht, ist weiter unten beschrieben.
sudo date --set="2015-11-29 11:44:00"Das ist einerseits nicht so genau wie eine automatische Einstellung und Sie müssen die Einstellung bei jedem Neustart des Pi vornehmen, was leicht vergessen wird.
Nachdem alle Einstellungen vorgenommen wurden, kann das Programm mit "Finish" beendet und der Raspberry Pi neu gebootet werden. Nun können Sie sich beim Login-Prompt als User "pi" anmelden. Wenn Ihnen die Arbeit als "root"-User geläufig ist und Ihnen das ständige Aufrufen von sudo können Sie nun auch ein Passwort für den Superuser vergeben und sich für administrative Arbeiten als "root" einloggen (bzw. per su-Kommando die Identität wechseln) - aber bitte nur für Administratives!
Bevor Sie nun richtig loslegen, ist es sinnvoll, nach allen Konfigurations- und den weiter unten beschriebenen Einstellungsarbeiten sowie nach dem Installieren eventuell noch weiterer benötigter Software die komplette SD-Karte als neues Image zu sichern. Wenn dann später irgend etwas schief geht, sparen Sie sich viel Arbeit und können schnell auf ein voll funktionierendes Image zurückgreifen. Das Sichern funktioniert im Prinzip wie das Erzeugen der SD-Karte, nur sind Quelle und Ziel nun vertauscht. |
Bei früheren Versionen von Raspbian war der SSH-Server standardmäßig aktiv. Man konnte sich als User "pi" mit dem Passwort "raspberry2 einloggen und hatte dann per sudo-Kommando uneingeschränkte Rechte. Es wurde den Usern natürlich überall nahegelegt, das Default-Passwort sofort zu ändern, aber leider hat sich kaum jemand daran gehalten. Solange der RasPi im Heimnetz ohne Internetverbindung lief, war das auch kein Problem.
Jedoch wurden mit der Zeit immer mehr Raspberries in Netze integriert, in denen sie auch aus dem Internet erreichbar sind. Inzwischen habe sich die Hacker darauf eingeschossen und testen per Programm auf die Kombination "pi" und "raspberry", um den Rechner dann in ihre Botnetze zu integrieren. Deshalb haben die Raspbian-Entwickler etwas mehr Sicherheit per Default implementiert: Bei den aktuellen Raspbian-Images ist der SSH-Dienst zwar installiert, aber standardmäßig nicht aktiv und muss vom User explizit freigeschaltet werden.
Vor allen anderen Aktionen ändern Sie das Passwort für den Benutzer "pi". Erst dann können Sie SSH aktivieren. Wenn Sie SSH aktiviert haben ohne das Passwort zu ändern, erscheint in Zukunft bei jedem Login ein Warndialog. Die folgenden Arbeiten führen Sie als Root-User (sudo su) in einer Shell aus. Sie können das Konfigurationsprogramm raspi-config für die Passwortänderung (Punkt 2: Change Password) und die anschliessende SSH-Freigabe (Punkt 7: Advanced Options, Unterpunkt A4: SSH) verwenden. Wer mit Linux vertraut ist, kann das Passwort natürlich auch mit dem Kommando passwd ändern und den SSH-Server mittels der Kommandos
systemctl enable ssh systemctl start sshfreigeben und dann gleich starten.
Was aber tun bei einer Headless-Installation (RasPi ohne Tastatur und Monitor)? Dazu müssen Sie auf dem Rechner, auf dem Sie die SD-Karte für den Raspberry Pi vorbereiten, in der boot-Partition eine Datei namens ssh anlegen (z. B. unter Linux mit touch /<Mountpoint>/boot/ssh). Beim nächsten Booten des Raspberry Pi wird dadurch der SSH-Server gestartet und auch auf Dauer aktiviert. Die Datei /boot/ssh wird anschließend gelöscht. Somit können Sie sich per SSH auf dem Raspberry Pi einloggen. Danach ändern Sie sofort das Default-Passwort. Auf jeden Fall sollten Sie das Passwort des Benutzers "pi" ändern, bevor Ihr RasPi mit dem Internet verbunden wird.
Falls es Sie interessiert, wie der Trick mit der (leeren) Datei ssh funktioniert, hier die Auflösung. Dazu wird beim Bootvorgang das folgende Shellscript aufgerufen. Das kann man beispielsweise erreichen, indem der Aufruf in die Datei /etc/rc.local eingetragen wird. Es muss auf alle Fälle mit Root-Rechten laufen.
#!/bin/bash # Abbruch, wenn die Datei /boot/ssh nicht vorhanden ist test -f /boot/ssh || return 0 # ssh freigeben /bin/systemctl enable ssh # ssh starten /bin/systemctl start ssh # Datei loeschen /bin/rm -f /boot/sshDas Shellscript, das die Warnung ausgibt kann auch in /etc/rc.local stehen, es ist ewas aufwendiger, weil es erstmal nachsehen muss, ob noch das Default-Passwort verwendet wird:
#!/bin/bash # nur etwas machen, wenn der sshd auch laeuft if service ssh status | grep -q running; then # Wenn Authentisierung mit Passwort gesperrt ist, nichts tun if grep -q "^PasswordAuthentication\s*no" /etc/ssh/sshd_config ; then return 0 fi # Abbruch, wenn das Programm mkpasswd nicht ausführbar ist test -x /usr/bin/mkpasswd || return 0 # Passworteintrag des Users "pi" suchen SHADOW="$(sudo -n grep -E '^pi:' /etc/shadow 2>/dev/null)" # Abbruch, wenn es keinen User "pi" gibt test -n "${SHADOW}" || return 0 # Abbruch, wenn das Passwort gesperrt ist if echo $SHADOW | grep -q "pi:!" ; then return 0 fi # "Salt"-Wert aus dem alten Passwort extrahieren SALT=$(echo "${SHADOW}" | sed -n 's/pi:\$6\$//;s/\$.*//p') # Passwort-Hash fuer "raspberry" erzeugen HASH=$(mkpasswd -msha-512 raspberry "$SALT") # Abbruch, wenn etwas schief ging (HASH leer) test -n "${HASH}" || return 0 # ist das Passwort "raspberry" (HASH in SHADOW enthalten), # Warnmeldung ausgeben if echo "${SHADOW}" | grep -q "${HASH}"; then zenity --warning --text="Passwort fuer den 'pi'-User aendern." fi fiAuf diese Weise könnten Sie auch andere Automatismen implementieren.
Das Raspbian-Image enthält einen Schlüssel, mit dem sich der SSH-Server des Raspberry Pi gegenüber einem Client authentifiziert. Natürlich ist dieser Schlüssel bei allen neu installieren Systemen gleich. Ein Schlüssel (Host-Key) sollte aber einzigartig sein, sonst eignet er sich nicht zur sicheren Authentifizierung. Deshalb sollte man auch gleich diesen Schlüssel bei jeder Pi-Installation ändern. Alle Arbeiten müssen wieder als Root-User durchgeführt werden (sudo su).
Im Verzeichnis /etc/ssh finden Sie mehrere Host-Keys für verschiedene Verschlüsselungsverfahren und weitere Konfigurationsdateien. Wechseln Sie in das Verzeichnis und benennen Sie alle Host-Keys um (dann haben Sie die Chance der Reparatur, wenn etwas schief gehen sollte):
cd /etc/ssh for F in ssh_host_*; do mv $F $F.alt; doneAnschließend führen wir eine Rekonfiguration des SSH-Servers durch, damit neue, individuelle Host-Keys generiert werden:
dpkg-reconfigure openssh-serverDie Ausgabe sollte etwa so aussehen:
Creating SSH2 RSA key; this may take some time ... Creating SSH2 DSA key; this may take some time ... Creating SSH2 ECDSA key; this may take some time ... [ ok ] Restarting OpenBSD Secure Shell server: sshd.Nach einem erneuten Login per SSH erhält man eine Sicherheitswarnung und man muss die Identität des Raspberry Pi neu bestätigen. Wenn soweit alles klappt, kann man die alten Schlüssel löschen (rm *.alt).
Wenn Sie den Raspberry Pi erstmals im Netz ohne Tastatur und Bildschirm betreiben, können Sie ihn ja nur per SSH von einem anderen Rechner aus ansprechen. Normalerweise ist er so eingestellt, dass er seine IP-Adresse automatisch per DHCP vom Router bezieht. Normalerweise hat jeder Router einen DHCP-Server aktiviert (darüber wird jedem Gerät die Netzwerkeinstellungen automatisch zugewiesen). Je nachdem, wie groß der IP-Bereich des DHCP-Servers eingestellt ist, müsste man dann erstmal nach dem Kleinen suchen. Manchmal kann man die vergebenen Adressen über das Webinterface des Routers auslesen. Alternativ ginge das mittels ping-Kommando, ist aber ziemlich nervig.
Wer keinen DHCP-Server hat oder eine feste IP-Adresse vergeben möchte, kann folgenden Trick anwenden:
ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>Zum Beispiel:
ip=10.10.1.200::10.10.1.1:255.255.255.0::eth0:off
Für die einzelnen Felder der Netzwerk-Definition gilt:
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1↵ root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait↵ ip=10.10.1.200::10.10.1.1:255.255.255.0::eth0:offUnter Umständen reicht es, nur die IP-Adresse ("ip=10.10.1.200") einzutragen, aber das klappt leider auch nicht immer.
Mit wenigen Worten: Wenn Sie im /boot-Verzeichnis eine vorbereitete Datei namens "wpa_supplicant.conf" speichern, wird diese beim Boot-Vorgang an die richtige Position /etc/wpa_supplicant/wpa_supplicant.conf verschoben. Auf diese Weise können Sie den Raspberry Pi sofort ans heimische WLAN koppeln, ohne den Rechner mittels Tastatur und Monitor konfigurieren zu müssen. Wenn Sie dann noch SSH freigeben, ist der RasPi per SSH auf der Kommandozeile erreichbar. In der Datei wpa_supplicant.conf tragen Sie die SSID und das Passwort Ihres WLAN ein (im Listing unten kursiv dargestellt):
country=DE ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="MeineSSID" psk="Mein_Passwort" key_mgmt=WPA-PSK }
sudo dd if=/dev/zero of=/var/swapfile bs=1M count=256 sudo mkswap /var/swapfileAnschließend kann die Auslagerungsdatei schon aktiviert werden:
sudo swapon /var/swapfileSinnvoll ist es natürlich, auch die Auslagerungsdatei in die File System Table einztragen. Dazu wird /etc/fstab um eine weitere Zeile ergänzt:
proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults 0 2 /dev/mmcblk0p2 / ext4 defaults,noatime 0 1 UUID=009D-304B /media/usbdisk vfat defaults,rw 0 0 /var/swapfile none swap sw 0 0
Hier ist nicht das Übertakten gemeint, sondern es handelt sich um ganz normale Verbesserungen, die sich nach der gewünschten Anwendung richten.
Im Pseudoverzeichnis /sys gibt es viele interessante (Pseudo-)Dateien, darunter auch zwei zur CPU, die sich per Shell-Skript auslesen lassen:
echo -n "CPU-Frequenz: " ; cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq echo -n "CPU-Temperatur: " ; cat /sys/class/thermal/thermal_zone0/tempDie CPU-Frequenz wird in kHz ausgegeben, die Temperatur in Grad Celsius * 1000. Man kann das Ganze dann noch schön formatieren:
RAWHZ=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq) echo 'CPU-Frequenz: '$(($RAWHZ / 1000))'.'$(($RAWHZ % 1000))' MHz' RAWTEMP=$(cat /sys/class/thermal/thermal_zone0/temp) echo 'CPU-Temperatur: '$(($RAWTEMP / 1000))'.'$(($RAWTEMP % 1000))' °C'
Für das Raspberry-Modell B mit 512 MByte Gesamtspeicher kann nach Einsatzzweck die
Zuteilung des Speichers geändert werden:
RAM | Grafik-VRAM | Anwendungszweck |
---|---|---|
256 MByte | 256 MByte | Betrieb mit GUI, Anwendungen mit Videofunktionen, Abspielen, Streamingetc., notwendig für Full-HD-1920-Wiedergabe. |
384 MByte | 128 MByte | Betrieb mit GUI, Anwendungen wie oben, mit reduzierter Grafikleistung. |
448 MByte | 64 MByte | Betrieb mit GUI höchstens bei niedriger Auflösung, kein Abspielen von Videos, kein Streaming, keine Hardware-Videobeschleunigung etc. |
496 MByte | 16 MByte | Betrieb ohne GUI, kein Video etc. Für Embedded- Anwendungen und Netzwerkservices. |
Die Verwendung des tmpfs-Dateisystems:
Das tmpfs-Dateisystem ist eigentlich kein reines RAM-Dateisystem, sondern
die Daten landen im Festplatten-Swap, sobald der Speicherplatz im RAM knapp wird.
Mit dem folgenden Shell-Befehl wird das Verzeichnis /var/tmp zur RAM-Disk:
sudo mount -t tmpfs none /var/tmpoder, falls die Größe festgelegt werden soll:
sudo mount -t tmpfs -o size=5M none /var/tmpEs werden dynamisch immer so viele Ressourcen abgezweigt, wie gerade benötigt werden, auch wenn eine Größe angegeben wurde. Ist das Laufwerk also leer, belegt es auch keinen Platz im RAM. Es ist möglich, diese Partition standardmäßig beim Systemstart einzubinden, indem man eine Zeile in die Datei /etc/fstab einfügt:
tmpfs /var/tmp tmpfs defaults,size=5M 0 0
Um beispielsweise /var/log und /var/run in den Arbeitsspeicher auszulagern, müssen Sie folgende Einträge in der /etc/fstab hinzufügen:
none /var/run tmpfs size=5M,noatime 0 0 none /var/log tmpfs size=5M,noatime 0 0
Die Verwendung des ramfs-Dateisystems:
Das ramfs-Dateisystem lagert im Gegensatz zum tmpfs keine Daten in den
Swap aus, ist also ein reines RAM-Dateisystem. Die Kommandos sind fast identisch
wie oben:
sudo mount -t ramfs ramfs /var/tmpDamit erhält man eine RAM-Disk, die sich ebenfalls dynamisch der benötigten Größe anpasst. Um die Partition beim Systemstart automatisch einzuhängen, fügt folgende Zeile in der Datei /etc/fstab hinzu:
ramfs /var/tmp ramfs defaults 0 0Das ramfs-Dateisystem hat im Gegensatz zu tmpfs keine Mountoptionen und bietet somit auch keine Möglichkeit, die Größe zu limitieren. Eventuell hat das System dann keinen freien Hauptspeicher mehr zur Verfügung und kann nur noch auf die Festplatte auslagern.
Verlagern Sie Dateien und Verzeichnisse auf diese Weise ins RAM, sollte Ihnen klar sein, dass diese nach einem Neustart nicht mehr verfügbar sind.
Das SoC des Raspberry Pi, der BCM2708 von Broadcom, verfügt standardmäßig über einen Hardware-Watchdog, der das System bei auftretenden Problemen neu starten kann. Um diesen zu nutzen, wird ein Kernelmodul und ein Daemon benötigt, der dem Watchdog in regelmäßigen Zeitabständen mitteilt, dass das System funktioniert. Kommt es nun zu einem Hänger im System, erhält der Watchdog keine Nachrichten mehr vom Daemon und setzt daraufhin das System zurück.
Zu Aktivieren und Einrichten des Watchdog wird zuerst das Kernelmodul geladen und dann der Watchdog-Daemon installiert (beachten Sie unbedingt die beiden ">>" beim echo-Kommando):
sudo modprobe bcm2708_wdog sudo cp /etc/modules /etc/modules.orig sudo echo "bcm2708_wdog" >> /etc/modules sudo apt-get install watchdogDer Watchdog-Daemon bietet etliche Features. Er triggert nicht nur den Watchdog der CPU in regelmäßigen Zeitabständen. Es kann auch diverse Tests durchführen, um die Systemgesundheit zu überprüfen, z. B. das Überwachen von Speicher und Last, Überprüfen der Ping-Ergebnisse, Messen der Temperatur oder Durchführen von benutzerdefinierten Befehlen, um beliebige Tests durchzuführen und einen Neustart auszulösen, wenn sie fehlschlagen.
Anschließend muss noch die Konfigurationsdatei des Watchdog-Daemon, /etc/watchdog.conf, angepasst werden, um die Gerätedatei des Watchdogs und die Bedingungen für einen Reset festzulegen. In der Konfigurationsdatei werden die folgende beiden Zeilen ent-kommentiert (Doppelkreuz am Anfang der Zeile entfernen):
watchdog-device = /dev/watchdog max-load-1 = 24Nun wird ein Reset ausgelöst, wenn die Systemlast über 24 steigt. Zum Abschluss der Konfiguration wird der Watchdog-Daemon neu gestartet:
sudo update-rc.d watchdog enable sudo service watchdog restart
Sie können auch selbst eine Bedingung definieren, bei welcher der Watchdog-Daemon für einen Reset sorgen soll. Am einfachsten kann man das anhand der Zugriffe auf eine Datei erreichen. Verwenden Sie dafür folgende Zeilen in der Datei /etc/watchdog.conf:
file = /</pfad/zu/einer/datei> change = 1900Bei "file" geben Sie den vollständigen Pfad zu der Datei an, auf die von Ihrem zu überwachenden Programm regelmäßig geschrieben wird. "change" legt fest, wieviele Sekunde nach dem letzten Zugriff der Watchdog einen Reset ausführen soll. Wird auf die Datei beispielsweise spätestens alle 30 Minuten geschrieben (1800 Sekunden), dann würde die Angabe "change = 1900" die halbe Stunde (mit einem kleinen zusätzlichen Zeitpuffer) definieren. Die "change"-Angabe bezieht sich dabei immer auf die vorangehende "file"-Angabe. Sie können daher auch mehrere "file"-"change"-Paare in der Konfigurationsdatei festlegen. Nun brauchen Sie den Watchdog-Daemon nur noch mit
sudo service watchdog restartneu zu starten.
Um die Watchdog-Funktion später wieder zu deaktivieren, müssen Sie nur den Watchdog-Daemon deaktivieren oder schlimmstenfalls deinstallieren.
Überall kann man es in irgendwelchen Anleitungen lesen: sudo dies, sudo jenes, sudo irgendwas usw. Wenn man schon weiss, dass jetzt eine Kommandoorgie als Root-User fällig ist, wird man einfach mit sudo bash oder sudo su dauerhaft "root" und führt dann alle Kommandos ohne sudo davor aus.
Beim RasPi ist der Benutzer "pi" für die Verwendung von sudo bereits freigeschaltet und auch ein Passwort ist nicht nötig. Das ist zwar praktiksch, aber nicht besonders sicher. Will man erreichen, dass auch der User "pi" sein Passwort eingeben muss, wenn er "root" werden will, muss die Konfiguration von sudo angepasst werden. Dazu ruft man das Kommmando sudo visudo auf. Dann erscheint die Konfiguration von sudo im Editor (meinst jedoch nicht vi, wie der Kommandoname impliziert, sondern nano oder dergleichen). Da ändern Sie die Zeile
pi ALL=(ALL) NOPASSWD: ALLin
pi ALL=(ALL:ALL) ALLDann kann man gleich noch eine weitere Einstellung vornehmen. Wenn man sich beim Passwort vertippt, darf man es nach einem freundlichen Hinweis noch zwei Mal probieren. Aber sudo kann bei falschen Passworteingaben auch etwas rüde reagieren. Dazu fügen Sie hinter den Zeilen die mit "Defaults" beginnen, eine weitere Zeile Defaults insults ein. Das Ergebnis sieht dann etwa so aus:
Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:$ Defaults insults
Im Text RasPI_Onboard-LEDs wurden zum Test zwei Kernel-Module geladen, die aber beim nächsten Bootvorgang wieder verschwunden sind. Im Zusammenhang mit Schnittstellen (z. B. GPIO) sind jedesmal Kommandos nötig, um die Funktionen der Schnittstelle einzustellen. Diese Kommandos müssen oft auch mit root-Berechtigung ausgeführt werden. All das von Hand nach jedem Einschalten zu wiederholen, ist natürlich nicht sinnvoll. Linux bietet die Möglichkeit, all das automatisch beim Bootvorgang zu erledigen.
Grundsätzlich ist der Linux-Kernel monolithisch aufgebaut, er bietet jedoch die Möglichkeit, zusätzliche Treiber, die sogenannten Kernel-Module, zur Laufzeit zu laden und entladen. Die meisten Linux-Distributionen verwenden etliche Kernel-Module, da die bestmögliche Hardwarekompatibilität beim Booten mit nur einem sehr einfachen, allgemein gehaltenen Kernel erreicht werden kann. Nach den Bootvorgang werden entsprechend der erkannten Hardware alle noch notwendigen Module geladen, so dass der Nutzer sich nicht weiter darum kümmern muss. Bei optionalen Modulen, wie z. B. das bei der Activity-LED verwendete ledtrig_heartbeat muss der Administrator jedoch selbst aktiv werden.
Für die Modulverwaltung gibt es einige Kommandos:
Die wichtigste Optionen von modprobe sind:
Option | Beschreibung |
---|---|
-v | Erzeugt eine ausführliche Ausgabe |
-n | Simuliert das Laden des Moduls, lädt es aber nicht. |
-a | Lade alle in der Kommandozeile angegebenen Module. Nötig, wenn mehrere Module auf einmal geladen werden. |
--show-depends | Zeige alle Abhängigkeiten des Moduls. |
-l | Liste alle verfügbaren Module (geladen oder nicht geladen). |
-r | Entladen der angegebenen Module. |
Manche Module können erst verwendet werden, wenn andere Module geladen sind, von denen sie abhängen. Diese Abhängigkeiten stehen in der Datei /lib/module/<Kernelversion>/modules.dep. Diese Datei wird bei der Installationerzeugt. Installiert man zusätzliche eigene Module, muss die Datei mit depmod neu erstellt werden.
Nach dieser langen Vorrede, endlich die Lösung des eingangs beschriebenen Problems: Möchte man ein nicht standardmäßig vom Kernel geladenes Modul beim Systemstart automatisch laden, so trägt man den Modulnamen einfach in die Datei /etc/modules ein (Editieren mit root-Rechten).Pro Zeile wird nur ein einziger Modulname eingetragen. Ab dem nächsten Bootvorgang werden alle angegebenen Module (zusätzlich) geladen.
Soll ein Modul immer mit bestimmten Option(en) geladen werden, kann dies in der Datei /etc/modprobe.conf eingetragen werden. Diese Datei muss ggf. angelegt werden. Es gibt auch hier nur einen Eintrag pro Zeile. Um eine Option zu setzen, gibt man ein:
options Modulname1 Option1=Wert1 options Modulname2 Option1=Wert Option2=Wert ...
Manchmal kann es sinnvoll sein, das Laden bestimmter Module explizit zu verbieten. Dies geschieht durch den Eintrag des entsprechenden Moduls in eine Blacklist-Datei. Am einfachsten geht das mit zusätzlichen Einträge in der Datei /etc/modprobe.d/blacklist.conf. Auch hier gilt: nur ein Eintrag pro Zeile:
blacklist Modulname1 blacklist Modulname2 ...
Da der Raspberry Pi kein konventionelles BIOS besitzt, gibt es auch kein BIOS-Setup für diverse Harware-Parameter. Stattdessen stehen alle diese Parameter in der Datei /boot/config.txt. Diese Textdatei kann natürlich bei laufenden RasPi ganz normal bearbeitet werden (mit root-Rechten). Aber auch auf der SD-Karte ist sie in der boot-Partition erreichbar und kann auch z. B. mit dem Windows-Notepad geändert werden (Notepad! Nicht irgendeine Frickel-Textverarbeitung wie Word oder Wordpad!). Diese Datei wird noch vor der Initialisierung des ARM-Core verarbeitet.
So ist es u. a. möglich, Parameter für die Video-Ausgabe zu setzen, die Speicher-Aufteilung zwischen CPU und GPU zu ändern oder die CPU zu übertakten. Generell sollte man eher vorsichtig mit dieser Datei umgehen, da sie bei falscher Verwendung auch mal dazu führen können, dass das Betriebssystem nicht mehr bootet oder das System instabil wird. Sie enthält eine Vielzahl von Optionen, die alle genau beschreiben sind unter:
# Force the monitor to HDMI mode so that sound will be sent over HDMI cable hdmi_drive=2 # Set monitor mode to DMT hdmi_group=2 # Set monitor resolution to 1024x768 XGA 60Hz (HDMI_DMT_XGA_60) hdmi_mode=16 # Make display smaller to stop text spilling off the screen overscan_left=20 overscan_right=12 overscan_top=10 overscan_bottom=10Um das Verhalten zu ändern, muss bei einige Parametern das Kommentarzeigen (#) gelöscht oder - falls sie fehlen - die Parameter hinzugefügt werden:
# Always force HDMI output and enable HDMI sound hdmi_safe=1 config_hdmi_boost=4 hdmi_force_hotplug=1 hdmi_drive=2Wenn es dann immer noch nicht klappt, weil beispielsweise das Display nicht ganz HDMI-kompatibel ist, hilft eventuell die "save-mode"-Einstellung aus der RasPi-Dokumentantion:
hdmi_force_hotplug=1 config_hdmi_boost=4 hdmi_ignore_edid=0xa5000080 hdmi_group=2 # 640x480 60Hz hdmi_mode=4 disable_overscan=0 overscan_left=24 overscan_right=24 overscan_top=24 overscan_bottom=24Alle HDMI-Modes sind in der Dokumentation der config.txt aufgeführt. Siehe auch Monitor am RasPi.
Die diversen Video-Modi für DMT (hdmi_group = 2) sind:
HDMI_DMT_640x350_85 = 0x1, /**<640x350 */ HDMI_DMT_640x400_85 = 0x2, /**<640x400 */ HDMI_DMT_IBM_VGA_85 = 0x3, /**<720x400 */ HDMI_DMT_VGA_60 = 0x4, /**<640x480 (60Hz is same as VGA in CEA above) */ HDMI_DMT_VGA_72 = 0x5 HDMI_DMT_VGA_75 = 0x6 HDMI_DMT_VGA_85 = 0x7 HDMI_DMT_SVGA_56 = 0x8, /**<800x600 */ HDMI_DMT_SVGA_60 = 0x9 HDMI_DMT_SVGA_72 = 0xA HDMI_DMT_SVGA_75 = 0xB HDMI_DMT_SVGA_85 = 0xC HDMI_DMT_SVGA_120 = 0xD HDMI_DMT_848x480_60 = 0xE, /**<848x480 */ HDMI_DMT_XGA_43 = 0xF, /**<1024x768 – interlaced, DO NOT USE */ HDMI_DMT_XGA_60 = 0x10, /**<1024x768 */ HDMI_DMT_XGA_70 = 0x11 HDMI_DMT_XGA_75 = 0x12 HDMI_DMT_XGA_85 = 0x13 HDMI_DMT_XGA_120 = 0x14 HDMI_DMT_XGAP_75 = 0x15, /**<1152x864 */ HDMI_DMT_WXGA_RB = 0x16, /**<1280x768 reduced blanking */ HDMI_DMT_WXGA_60 = 0x17 HDMI_DMT_WXGA_75 = 0x18 HDMI_DMT_WXGA_85 = 0x19 HDMI_DMT_WXGA_120 = 0x1A, /**<120Hz with reduced blanking */ HDMI_DMT_1280x800_RB = 0x1B, /**<1280x800 reduced blanking */ HDMI_DMT_1280x800_60 = 0x1C HDMI_DMT_1280x800_75 = 0x1D HDMI_DMT_1280x800_85 = 0x1E HDMI_DMT_1280x800_120 = 0x1F, /** reduced blanking */ HDMI_DMT_1280x960_60 = 0x20, /**<1280x960 */ HDMI_DMT_1280x960_85 = 0x21 HDMI_DMT_1280x960_120 = 0x22, /** reduced blanking */ HDMI_DMT_SXGA_60 = 0x23, /**<1280x1024 */ HDMI_DMT_SXGA_75 = 0x24 HDMI_DMT_SXGA_85 = 0x25 HDMI_DMT_SXGA_120 = 0x26, /** reduced blanking */ HDMI_DMT_1360x768_60 = 0x27, /**<1360x768 */ HDMI_DMT_1360x768_120 = 0x28, /**<120 Hz with reduced blanking */ HDMI_DMT_SXGAP_RB = 0x29, /**<1400x1050 reduced blanking */ HDMI_DMT_SXGAP_60 = 0x2A HDMI_DMT_SXGAP_75 = 0x2B HDMI_DMT_SXGAP_85 = 0x2C HDMI_DMT_SXGAP_120 = 0x2D, /** reduced blanking */ HDMI_DMT_1440x900_RB = 0x2E, /**<1440x900 reduced blanking */ HDMI_DMT_1440x900_60 = 0x2F HDMI_DMT_1440x900_75 = 0x30 HDMI_DMT_1440x900_85 = 0x31 HDMI_DMT_1440x900_120 = 0x32, /** reduced blanking */ HDMI_DMT_UXGA_60 = 0x33, /**<1600x1200 60Hz */ HDMI_DMT_UXGA_65 = 0x34 HDMI_DMT_UXGA_70 = 0x35 HDMI_DMT_UXGA_75 = 0x36 HDMI_DMT_UXGA_85 = 0x37 HDMI_DMT_UXGA_120 = 0x38, /** reduced blanking */ HDMI_DMT_SWXGAP_RB = 0x39, /**<1680x1050 reduced blanking */ HDMI_DMT_SWXGAP_60 = 0x3A, /**<1680x1050 60Hz */ HDMI_DMT_SWXGAP_75 = 0x3B HDMI_DMT_SWXGAP_85 = 0x3C HDMI_DMT_SWXGAP_120 = 0x3D, /** reduced blanking */ HDMI_DMT_1792x1344_60 = 0x3E, /**<1792x1344 60Hz */ HDMI_DMT_1792x1344_75 = 0x3F, /**<1792x1344 75Hz */ HDMI_DMT_1792x1344_120 = 0x40, /** reduced blanking */ HDMI_DMT_1856x1392_60 = 0x41, /**<1856x1392 60Hz */ HDMI_DMT_1856x1392_75 = 0x42, /**<1856x1392 75Hz */ HDMI_DMT_1856x1392_120 = 0x43, /** reduced blanking */ HDMI_DMT_WUXGA_RB = 0x44, /**<1920x1200 reduced blanking */ HDMI_DMT_WUXGA_60 = 0x45, /**<1920x1200 60Hz */ HDMI_DMT_WUXGA_75 = 0x46, /**<1920x1200 75Hz */ HDMI_DMT_WUXGA_85 = 0x47, /**<1920x1200 85Hz */ HDMI_DMT_WUXGA_120 = 0x48, /** reduced blanking */ HDMI_DMT_1920x1440_60 = 0x49, /**<1920x1440 60Hz */ HDMI_DMT_1920x1440_75 = 0x4A, /**<1920x1440 75Hz */ HDMI_DMT_1920x1440_120 = 0x4B, /** reduced blanking */ HDMI_DMT_2560x1600_RB = 0x4C, /**<2560x1600 reduced blanking */ HDMI_DMT_2560x1600_60 = 0x4D, /**<2560x1600 60 Hz */ HDMI_DMT_2560x1600_75 = 0x4E, /**<2560x1600 75 Hz */ HDMI_DMT_2560x1600_85 = 0x4E, /**<2560x1600 85 Hz */ HDMI_DMT_2560x1600_120 = 0x50, /** reduced blanking */ HDMI_DMT_1366x768_60 = 0x51, /**<1366x768 60Hz */ HDMI_DMT_1080p_60 = 0x52, /**<Same as 1080p60 in CEA above */ HDMI_DMT_1600x900_RB = 0x53, /**<1600x900 reduced blanking */ HDMI_DMT_2048x1152_RB = 0x54, /**<2048x1152 reduced blanking */ HDMI_DMT_720p_60 = 0x55, /**<Same as 720p60 in CEA above */ HDMI_DMT_1366x768_RB = 0x56, /**<1366x768 reduced blanking */
Mit der neuen Firmware ab Version #744 vom 30. Januar 2015 und entsprechenden Kernel-Anpassungen ist seit Anfang März beim Raspberry (Kernel 3.18.3) Pi nichts mehr wie vorher. Wird beispielsweise die Firmware per rpi-update aktualisiert oder wird das Raspbian mittels apt-get update und apt-get upgrade auf den neuesten Stand gebracht, werden die Schnittstellen von I2C, SPI, One Wire etc. nicht mehr gefunden.
Schuld daran ist ein Wechsel auf die sogenannten Device Trees. Noch 2013 brachte jede ARM-Plattform eigene Treiber und Module ein und blähte den Kernel-Quellcode entsprechend auf. Während bei einem PC die Schnittstellen immer an festen Adressen liegen, unterscheiden sich bei den ARM-SoC-Rechnern Adressen, Interrupts, Ansteuerlogik etc. Inzwischen gibt es Kernel, die auf mehreren ARM-Plattformen lauffähig sind. Dabei griffen die Entwickler auf einen Kniff des Power-PC-Kernels: Die jeweilige Hardwarekonfiguration war dort nicht in den Kernel einkompiliert (oder als Bootparameter übergeben) worden, sondern stand als im Hauptspeicher abgelegte Datenstruktur bereit. Diese Technik ist unter dem Namen "Device Tree" bekannt.
Die Device-Tree-Beschreibungen der einzelnen ARM-SoCs und ARM-Boards befinden sich im Linux-Quellcodeverzeichnis unter arch/arm/boot/dts . Dateien mit der Datei-Erweiterung ".dtsi" enthalten die Definitionen für einen bestimmten SoC. Falls im Kernel konfiguriert, lässt sich der Device Tree nach dem Booten im Verzeichnis /proc/device-tree auslesen. Die einzelnen Äste sind dabei als Unterverzeichnisse realisiert. Die Device-Tree-Beschreibung eines Boards im Klartext (siehe unten) übersetzt ein Device Tree Compiler (DTC). Das Ergebnis ist ein kompakter Binary-Blob (Device Tree Blob, DTB). Im Kernel gibt es einen Interpreter, der den Blob beim Booten interpretiert, daraus einen Baum aufbaut, die zugehörigen Treiber aktiviert und mit Konfigurationsdaten versorgt.
/include/ "skeleton.dtsi" / { compatible = "brcm,bcm2835"; model = "BCM2835"; interrupt-parent = <&intc>; chosen { bootargs = "earlyprintk ... rootfstype=ext4"; }; soc { compatible = "simple-bus"; #address-cells = <1>; #size-cells = <1>; ranges = <0x7e000000 0x20000000 0x02000000>; ... uart@20201000 { compatible = "brcm,bcm2835-pl011", "arm,pl011"; reg = <0x7e201000 0x1000>; interrupts = <2 25>; clock-frequency = <3000000>; }; gpio: gpio { compatible = "brcm,bcm2835-gpio"; reg = <0x7e200000 0xb4>; ... gpio-controller; #gpio-cells = <2>; interrupt-controller; #interrupt-cells = <2>; }; i2c0: i2c@20205000 { ... };Ausschnitt aus dem Quellcode des Device Tree
Der Kernel kann nun durch einen Gerätebaum (device tree) effektiv ergänzt werden, ohne dabei den Kernel selbst verändern zu müssen. Der Device Tree wird beim Raspberry Pi in der Datei /boot/config.txt angesprochen. Er ist bei Raspbian standardmäßig aktiviert. In den Spezifikationen für Erweiterungen für die "+"-Modelle des Raspberry Pi, etwa für die Austeckplatinen "HAT" (Hardware on Top), ist dazu ein EEPROM vorgesehen, das die entsprechenden Informationen für den Device Tree enthält. Gint es kein EEPROM, kann man Devices auch manuell aktivieren. Detaillierte Informationen zum DT stehen in der README-Datei auf dem Raspberry Pi im Verzeichnis /boot/overlays/README oder in der Raspberry-Pi-Anleitung unter www.raspberrypi.org/documentation/configuration/device-tree.md .
Die Schnittstellen können zwar weiterhin über das klassische Modell (Entfernen des Moduls aus der Blacklist und Eintragen in der Datei /etc/modules) aktiviert werden, das ist aber nicht empfohlen da es durch den DT nun zu Konflikten kommen kann. Wenn Sie also - aus welchen Gründen auch immer - noch mit dem herkömmlichen System weitermachen wollen, genügt es, in der Datei /boot/config.txt eine Zeile "device_tree=" einzufügen und den RasPi zu booten. Damit ist der ganze neumodische Kram deaktiviert. Empfehlenswert ist das aber nicht.
Eleganter ist es, einen schnittstellenspezifischen Parameter in der Datei /boot/config.txt einzutragen. Normalerweise sind die Schnittstellen durch ein Kommentarzeichen (#) deaktiviert:
#dtparam=i2c_arm=on #dtparam=i2s=on #dtparam=spi=onOder es gibt für eine bestimmte Schnittstelle gar keinen Eintrag. Um die Schnittstellen zu aktivieren, muss nur das Kommentarzeichen entfernt werden, z. B.:
dtparam=i2c_arm=on dtparam=i2s=on dtparam=spi=on #Heartbeat LED (default: trigger=mmc) dtparam=act_led_trigger=heartbeatFür die Activity-LED gibt es noch act_led_activelow=<on|off> (default "off") und act_led_gpio=xx für den Port (default "16" bei non-Plus, "47" bei Plus).
Neben dem Laden eines kompletten Device Trees mittels dtparam gibt es noch die "Device Overlays", um beispielsweise bestimmte Parameter einstellen zu können. Unter anderem verhindert das System so eine Doppelbelegung von abhängigen Ressourcen (zum Beispiel GPIO Pins), ermöglicht es aber auch spezifische Konfigurationen vorzunehmen. Nehmen wir das One-Wire-Interface als Beispiel:
dtoverlay=w1-gpio,gpiopin=4Damit wird der Pin 4 des GPIO für One Wire reserviert. Oder, falls noch der interne Pullup-Widerstand geschaltet werden soll:
dtoverlay=w1-gpio-pullup,gpiopin=4,extpullup=onDie Overlays sind gewissermaßen kleine Device-Tree-Fragmente, die dem aktuellen DT für eine Schnittstelle hinzugefügt werden. Beim Aktivieren eines Overlays wird der zugehörige Device Tree geladen, falls dies nicht schon erfolgt ist. Für einige andere Schnittstellen gelten die folgenden Overlays:
I2C Real Time Clock dtoverlay=i2c-rtc,ds1307 LIRC dtoverlay=lirc-rpi LIRC mit Parametern z. B.: dtoverlay=lirc-rpi,gpio_out_pin=17,gpio_in_pin=16,gpio_in_pull=high pps-gpio (Pule per Second) dtoverlay=pps-gpio,gpiopin=xx Audio card (je nach Device) dtoverlay=hifiberry-dac dtoverlay=hifiberry-dacplus dtoverlay=hifiberry-digi dtoverlay=hifiberry-amp dtoverlay=iqaudio-dac dtoverlay=iqaudio-dacplusBei der Echtzeituhr (RTC) kann statt des Chips ds1307 auch einer der Chips ds3231, pcf2127, pcf8523 oder pcf8563 angegeben werden.
Es gibt für die Device Tree Blobs einen Logging- und Debugging-Mechanismus, der ebenfalls über die Datei /boot/config.txt aktiviert werden kann. Dazu tragen Sie folgende Zeile in /boot/config.txt ein:
dtdebug=onNach einem Neustart kann das Protokoll mittels
sudo vcdbg log msgUnd bitte daran denken:
Weitere Infos stehen in der Device Tree Readme-Datei.
Mit dem aktuellen System und den Raspberry Pi-Modellen B+ und der Version 2 zeigen die beiden LEDS auf dem Board den Status bzw. Fehler des Boot-Vorgangs an (die Netzwerk-LED sind ja in den Netzwerk-Stecker gewandert). Auch das Display kann bei der Fehlersuche helfen:
rote LED | grüne LED | Display | Bedeutung | Abhilfe |
---|---|---|---|---|
dunkel | dunkel | dunkel | Gerät stromlos | Verkabelung überprüfen. Anderes Netzteil einsetzen |
ein/aus im Wechsel | dunkel/ein | dunkel | Störung (rote LED flackert nicht) | Netzteil liefert keine stabile Spannung: Netzteil wechseln oder Peripherieverbraucher getrennt versorgen |
ein | flackert nicht | dunkel | kein bootfähiges Image | SD-Karte auf Bootimage überprüfen |
ein | flackert nicht | dunkel | Problem mit einem Peripherie-Gerät | Raspberry ohne Peripherie starten. Wenn die grüne LED etwa 20 s lang flackert, Peripherie nach und nach anschließen und neu booten. |
ein | blinkt 3x | dunkel | start.elf nicht gefunden | Inhalt der SD-Karte überprüfen. |
ein | blinkt 4x | dunkel | start.elf nicht geladen | Start erneut versuchen. Inhalt der SD-Karte überprüfen. Anderes Image ausprobieren. |
ein | blinkt 7x | dunkel | kernel.img nicht gefunden | Inhalt der SD-Karte überprüfen. |
ein | blinkt 8x | dunkel | SDRAM nicht erkannt. | Inhalt der SD-Karte überprüfen. Gegebenenfalls bootcode.bin/start.elf updaten. |
ein | beliebig | ![]() | kernel.img kann nicht geladen werden | Ein buntes Display und Wechsel zur Konsole deutet auf ein inkompatibles System. Verwenden Sie ein anderes Image. Eventuell kann das Problem auch durch den Eintrag "boot_delay=1" in der Datei config.txt behoben werden. |
Unter bestimmten Umständen zeigt die Raspberry-Pi-Firmware auf dem Display ein Warnsymbol an, um auf ein Problem hinzuweisen. Es gibt derzeit drei Symbole, die angezeigt werden können:
![]() |
Die Betriebsspannung des RasPi ist unter 4,63 V (±5%) gefallen. Ein sicherer Betrieb ist gefährdet. |
![]() |
Wenn die Temperatur des SoC zwischen 80 °C und 85 °C liegt, wird dieses Symbol angezeigt. Der ARM-Kern wird gedrosselt, um die Kerntemperatur zu reduzieren. |
![]() |
Wenn die Temperatur des SoC über 85 °C liegt, wird dieses Symbol angezeigt. Der ARM-Kern und die GPU werden gedrosselt, um die Kerntemperatur zu reduzieren. |
Man kann sein Raspbian-System auf die neueste Version updaten, ohne ein komplett neues Image verwenden zu müssen. Das kann in Fällen interessant sein, wo ein System sehr stark für einen individuellen Zweck angepasst wurden und daher unter Umständen sehr viele Pakete nachinstalliert und wieder konfiguriert werden müssen. Beim Upgrade eines bestehenden Image auf das Folgesystem ist ist aber nicht garantiert, dass beim neuen System in jedem Fall alles funktioniert. Das muss man dann einfach ausprobieren. Auf jeden Fall sollte vom bestehenden System ein Backup angefertigt werden.
Für die folgende Beschreibung verwende ich beispielhaft "Jessie" als derzeit installiertes System und "Stretch" als das neue Upgrade-System. Zum Aktualisieren ändern Sie als Root-User zuerst die Dateien /etc/apt/sources.list und /etc/apt/sources.list.d/raspi.list. In beiden Dateien ändern Sie jedes Vorkommen des Wortes 'jessie' zu 'stretch'. Dann öffnen Sie ein Shell-Fenster und führen Sie die beiden folgenden Kommandos aus:
sudo apt-get update sudo apt-get -y dist-upgradeBeantworten Sie alle eventuell noch aufscheinenden Fragen mit 'yes'. Falls im Lauf des Upgrade die Installation pausiert und eine Seite mit Informationen auf dem Bildschirm anzeigt, blättern Sie die Info mit der Leertaste durch und beenden Sie die Anzeige mit 'q'. Anschließend ist ein Reboot nötig.
Bei neueren Versionen von Raspbian (ab "Stretch") wurde das Soundsystem auf alsa umgestellt. Falls Sie PulseAudio für nichts anderes als Bluetooth Audio verwenden, entfernen Sie es durch das Kommando:
sudo apt-get -y purge "pulsaudio"
Wie weiter oben erwähnt, kann es sinnvoll sein, die Root-Partition bei 4 GByte zu belassen und auf einer SD-Karte mit größerer Kapazität eine eigene Partition für /home anzulegen. Die folgende Anleitung zeigt, wie Sie das erreichen können. Die diversen Listings und Protokolle lassen die Angelegenheit komplizierter erscheinen, als sie ist. Alle Kommandos müssen als Root ausgeführt werden (die Kommandos sind fett geschrieben):
sudo su - fdisk -lu Disk /dev/mmcblk0: 7948 MB, 7948206080 bytes 4 heads, 16 sectors/track, 242560 cylinders, total 15523840 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0002c262 Device Boot Start End Blocks Id System /dev/mmcblk0p1 8192 122879 57344 c W95 FAT32 (LBA) /dev/mmcblk0p2 122880 5785599 2831360 83 LinuxDas Listing zeigt die beiden Basis-Partitionen, wie sie nach dem Schreiben des Images auf die Karte existieren. Nun wird eine dritte Partion für /home angelegt. Das kann eine "primary" oder "extended" Partition sein, wobei bei letzterer noch ein logisches Laufwerk nötig ist. Der erste Sektor der 3. Partition (5785600) ergibt sich aus den letzten Sektor der 2. Partition (5785599) + 1. Beim letzten Sektor ziehen wir vom Defaultwert großzügig etwas ab. Dann kann man das Image der SD-Karte auch auf eine Karte kopieren, die etwas kleiner ist. Man glaubt es kaum, aber die SD-Karten verschiedener Hersteller variieren in der Größe, obwohl alle die gleiche Kapazität aufgedruckt haben:
fdisk /dev/mmcblk0 Command (m for help): n Partition type: p primary (2 primary, 0 extended, 2 free) e extended Select (default p): e Partition number (1-4, default 3): 3 Using default value 3 First sector (2048-15523839, default 2048): 5785600 Last sector, +sectors or +size{K,M,G} (5785600-15523839, default 15523839): 14000000 Command (m for help): n Partition type: p primary (2 primary, 1 extended, 1 free) l logical (numbered from 5) Select (default p): l Adding logical partition 5 First sector (5787648-15523839, default 5787648): Using default value 5787648 Last sector, +sectors or +size{K,M,G} (5787648-15523839, default 15523839): 14000000 Command (m for help): p Disk /dev/mmcblk0: 7948 MB, 7948206080 bytes 4 heads, 16 sectors/track, 242560 cylinders, total 15523840 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0002c262 Device Boot Start End Blocks Id System /dev/mmcblk0p1 8192 122879 57344 c W95 FAT32 (LBA) /dev/mmcblk0p2 122880 5785599 2831360 83 Linux /dev/mmcblk0p3 5785600 14000000 4107200 5 Extended /dev/mmcblk0p5 5787648 14000000 4107176 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks.Nun ist ein Reboot nötig, damit das neue Dateisystem eingebunden werden kann. Danach muss die neue Partition noch formatiert werden (auch wieder als Root). Den Output habe ich etwas gekürzt.
mkfs -t ext3 /dev/mmcblk0p5 mke2fs 1.42.5 (29-Jul-2012) .... Writing superblocks and filesystem accounting information: doneNun muss die Partition moch auf das Verzeichnis /home gebunden werden. Das erreicht man durch Erweiterung der Datei /etc/fstab, indem dort eine Zeile hinzugefügt wird (fett gedruckt):
proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults 0 2 /dev/mmcblk0p2 / ext4 defaults,noatime 0 1 /dev/mmcblk0p5 /home ext4 rw,user,auto,exec 0 0 # a swapfile is not a swap partition, so no using swapon|off from here on, # use dphys-swapfile swap[on|off] for thatDer letzte Schritt ist dann das Kopieren der Dateien und Verzeichnisse aus dem existierenden /home-Verzeichnis auf die neue Partition. Dazu hängen wir die neue Partition erst einmal unter /mnt ein und kopieren dann /home:
mount /dev/mmcblk0p5 /mnt ( cd /home; tar cvpf - * ) | (cd /mnt; tar xpf - ) umount /dev/mmcblk0p5Optional kann dann das alte /home-Verzeichnis ausgeleert werden, wobei /home selbst bestehen bleiben muss. Gegebenenfalls werden noch die Zugriffsrechte angepasst:
rm -rf /home/* chmod 755 /homeNach dem nächsten Reboot ist dann alles so, wie es sein soll.
Es gibt nicht immer einen Grund für eine Aktualisierung des Betriebssystems. Generell gilt: "Wenn alles läuft wie gewünscht, lass die Finger davon!" Nur wenn funktional etwas anderes nötig ist, sollte man an ein Update denken. Andererseits gilt, dass man sein System aktuell und sicher halten soll. Jede Änderung oder Aktualisierung kann einen negativen Einfluss auf die Verfügbarkeit und Funktion haben. Ein Raspberry Pi, der nur eine einzige Aufgabe erfüllen soll, und nicht direkt mit dem Internet verbunden ist, braucht im Prinzip kein Update. In so einem Fall wäre ein Update sogar kontraproduktiv, weil eine Fehlfunktion durch ein unüberlegtes Update wahrscheinlicher ist. Anders sieht es bei einem System aus, das von aussen erreichbar ist. Hier sind aus Sicherheitsgründen regelmäßige Updates notwendig. Am einfachste Schützen Sie sich vor Überraschungen, wenn Sie von der aktuell SD-Karte vor dem Update eine Kopie ziehen. Dann können Sie immer zum Status Quo zurückkehren.
Linux besteht im Prinzip aus einem Kernel und Paketen der jeweiligen Distribution. Diese Pakete bestehen aus Programmen, Bibliotheken und Treibern. Sie bauen manchmal aufeinander auf und sind oftmals von anderen Paketen abhängig. Alle Abhängigkeiten eines Pakets werden in seinen Paketquellen verwaltet, die ebenfalls aktuell gehalten werden müssen. Die Paketverwaltung erfolgt unter Raspbian als Debian-Abkömmling in der Regel mit dem Programm apt-get. Jeder Aktualisierung von Paketen geht daher die Aktualisierung der Paketlisten voraus (alle folgenden Kommandos werden als Superuser ausgeführt → erst einmal sudo su eingeben):
apt-get updateHiermit werden die Paketlisten aktualisert. Sie bilden gewissermaßen die Datenbank, in der verzeichnet ist, welche Programme in welcher Version verfügbar sind und welches Paket von welchem abhängig ist.
Anschließend werden die Pakete aktualisert. apt-get ermittelt zuerst aus den Paketlisten, für welche Pakete neue Versionen bereitstehen und erneuert werden müssen. Das Verfahren wird mit dem folgenden Kommando angestoßen:
apt-get upgradeEs werden zuerst alle neuen Pakete heruntergeladen. Ein erfolgreiches Upgrade ist daher von aktuellen Paketlisten abhängig (vorher immer apt-get update ausführen). Das dauert jetzt etwas - eine gute Gelegenheit, einen frischen Kaffee aufzubrühen. Neben apt-get upgrade gibt es noch die Variante apt-get dist-upgrade. Mit apt-get upgrade werden die vorhandenen Pakete nur aktualisiert, wenn keine Veränderungen in den Abhängigkeiten dieser Pakete vorliegen. Mit apt-get dist-upgrade werden auch die Pakete aktualisiert, wenn sich dabei Abhängigkeiten verändern. Eventuell werden dadurch zusätzliche Pakete installiert und nicht mehr benötigte Pakete deinstalliert. Die Änderungen in den Abhängigkeiten können problematisch sein, wenn Sie eigene Programme compiliert oder ohne Paketmanager installiert haben.
Nach dem Aktualisieren ist normalerweise ein Neustart nötig, insbesondere, wenn Bibliotheken, Dienste/Daemons oder der Kernel aktualisiert wurden. Deshalb folgt ein
shutdown -r now
Die beiden folgenden Kommandos der APT-Familie entfernen Pakete, die nicht mehr gebraucht werden:
apt-get remove <Paketname> apt-get purge <Paketname>Der Unterschied zwischen "remove" und "purge" besteht darin, dass "purge" auch die zu den Paketen zugehörigen Konfigurationsdateien löscht. "remove" lässt diese für eine eventuell erneute Installation intakt. Möchten Sie Pakete restlos entfernen, dann verwenden Sie "purge". Beide Kommandos gehen beim Entfernen von Paketen gründlich vor und entfernen ggf. auch Abhängigkeiten. Es kann also vorkommen, dass auch Pakete entfernt werden, die man eigentlich behalten wollte. Deshalb sollten Sie vor der endgültigen Bestätigung die angezeigte Liste der zu entfernenden Pakete genau ansehen. Nach dem Aktualisieren und Entfernen von Paketen kommt es manchmal vor, dass andere abhängige) Pakete überflüssig werden, weil sie einfach nicht mehr gebraucht werden. Solche "Leichen" entfernt das Kommando:
apt-get autoremove
apt-get speichert zudem alle heruntergeladenen Pakete in einem Cache, damit Pakete, die schon einmal geholt wurden, nicht noch einmal heruntergeladen werden müssen und direkt installiert werden können. Um den Cache zu leeren, verwenden Sie:
apt-get clean apt-get autoclean"autoclean" löscht nur Pakete, die veraltet sind. "clean" löscht alle Pakete im Cache.
Natürlich dient das Programm apt-get install ... auch zum Installieren von weiteren Programmpaketen und Bibliotheken. Mittels apt-cache search ... können Sie herausfinden, welche Pakete es gibt und wie sie heissen.
Etwas mehr Arbeit ist es, wenn es nicht um die Aktualisierung der aktuellen Distribution geht, sondern wenn auf eine neue Distribution gewechselt werden soll. Weil im Spätherbst 2015 Debian "Jessie" freigegeben wurde, soll der Wechsel von "Wheezy" auf "Jessie" als Beispiel dienen. Bis auf die Namen, ist der Vorgang aber immer der gleiche. Ein Upgrade des kompletten Systems ist recht einfach und richtet sich im Grunde nach der Anleitung im Kapitel oben, benötigt jedoch etwas Zeit. Und denken Sie daran: Es ist immer gut, wenn man noch ein Backup des alten Systems hat - und sei es nur, um eventuell in alten Konfigurationsdateien nachsehen zu können.
Das Ganze läuft in fünf Schritten ab:
sudo su apt-get update apt-get upgrade apt-get dist-upgrade
sudo su sed -i /deb/s/wheezy/jessie/g /etc/apt/sources.list sed -i /deb/s/wheezy/jessie/g /etc/apt/sources.list.d/*.listFür Nicht-SED-Spezialisten hier eine kleine Erklärung des Kommandos. Es wird nach Zeilen gesucht, die "deb" enthalten (/deb/). In diesem Zeilen wird "wheezy" durch "jessie" ersetzt (s/wheezy/jessie/) und zwar in der ganzen Zeile (g). Kann mam mit einem Editor auch von Hand machen.
sudo apt-get update
sudo su apt-get upgrade apt-get dist-upgrade
sudo su apt-get autoremove apt-get autoclean
Schließlich folgt noch der obligatorische Reboot.
Da der Raspberry Pi keine Echtzeituhr (Real Time Clock, RTC, siehe auch Projekt Realtime-Clock) besitzt, vergisst er die Uhrzeit beim Herunterfahren. Daher sollte die Zeit über einen Zeitserver aktualisiert werden (auch die RTC geht nicht genau). Eigentlich muss man nichts tun, denn der NTP-Dienst (NTP = Network Time Protocol) ist bei Raspbian per default installiert und holt so bei funktionierender Internet-Verbindung die aktuelle Uhrzeit. Nachteilig ist, dass er ständig im Hintergrund läuft und damit Systemressourcen belegt.
Eine Alternative zum NTP-Daemon ist das Programm ntpdate, das nur einmal Uhrzeit und Datum abruft. Meist genügt es, täglich einmal und nach einen Reboot die Zeit zu aktualisieren, was per Cronjob erledigt werden kann. ntpdate wird zwar mittlerweile als "deprecated" geführt, was aber nur bedeutet, dass es nicht mehr weiterentwickelt wird. Wozu auch? Es tut genau, was wir von ihm wollen. Falls noch nicht geschehen, sollte die korrekte Zeitzone festgelegt werden (Berlin). Das kann mit raspi-config erledigt werden.
Nun deinstallieren Sie den NTP-Dienst und installieren ntpdate:
sudo su apt-get purge ntp apt-get install ntpdateAnschließend muss noch ein crontab-Eintrag vorgenommen werden, damit ntpdate regelmäßig automatisch aufgerufen wird. Mit sudo crontab -e richten Sie den neuen Cronjob für den Zeitabgleich ein, wobei der deutsche Zeitserver-Pool verwendet wird. Die Beiden neuen Zeilen in der Cron-Tabelle lauten:
@reboot ntpdate -s 0.de.pool.ntp.org 1 1 * * * ntpdate -s 0.de.pool.ntp.orgSo wird einerseits beim Reboot die Zeit aktualisiert und andererseits jeden Tag um 01:01:00 Uhr - für Systeme, die ständig laufen. Die Option "-s" sorgt dafür, dass ntpdate still sein Werk verrichtet. Zum Testen kann man auch mal direkt bei der Physikalisch-technischen BUndesanstalt in Braunschweig anfragen:
sudo ntpdate ptbtime1.ptb.deEs versteht sich von selbst, dass der Zeitabgleich schief geht, wenn keine INternet-Verbindung vorhanden ist.
Dienste, bei Linux auch "Daemon" genannt, sind Programme, die beim Systemboot (manchmal auch später) gestartet werden und im Hintergrund ihre Arbeit verrichten. Manchmal startet oder stoppt man sie auch von Hand, wenn beispielsweise die Konfiguration eines Dienstes geändert wurde. Bei der Administration des System tritt mitunter der Fall auf, das manche Dinest neu aktiviert oder andere deaktiviert werden müssen. Außerdem gibt es Kommandos, die Auskunft über einen Dienst geben. Gesteuer wird das automatische Starten beim Hochfahren des Rechners und das Stoppen der Dienste beim Herunterfahren vom Init-System.
Bei der Administration der Dienste gab es zwischen Raspbian "Wheezy" und Raspbian "Jessie" einen Wechsel des Init-Systems von "SysV-Init" auf "systemd". Die alten SysV-Kommandos von Raspbian Wheezy funktionieren in der Regel auch noch unter Raspbian Jessie, nicht aber umgekehrt. Unter "systemd" sollte man sich auf alle Fälle an die neuen Kommandos gewöhnen.
Anmerkung: Die meisten (oder sogar fast alle) der folgenden Kommandos muss man mit Administrator-Rechten aufrufen (also als User "root"). Entweder man setzt jeweils das übliche sudo dvor oder man wird mittels sudo su dauerhaft Root.
Nach Altväter-Sitte kann man das jeweilige Start/Stopp-Script im Verzeichnis /etc/init.d mit einem der Parameter start, stop, restart, reload oder status aufrufen, zum Beispiel für den ntp-Daemon:
## Stop the ntp service /etc/init.d/ntp stopDas wird jedoch heute nicht mehr empfohlen (oder ist nur noch den UNIX-Gurus vorbehalten). In der Regel sollte man stattdessen des service_Kommando verwenden, was einem auch die Eingabe des Pfades erspart, beispielsweise:
# Stop the ntp service service ntp stopDen Status des Daemons kann man dann mittels
service ntp statusabfragen. Den Daemon kann man dann mit folgendem Kommando wieder strten:
service ntp start
Viel häufiger als Start und Stopp kommt es vor, dass man an der Konfiguration eines Dienstes, z. B. des Webservers apache2, etwas ändert. Da ein Daemon seine Konfiguration normalerweise nur beim Start einliest, muss man die Änderung durch ein entsprechendes Kommando im laufenden Betrieb durch Neustart oder Neuladen des Dienstes wirksam werden lassen. Beim Neustart eines laufenden Daemons werden bestehende Prozesse und Netzwerkverbindungen getrennt:
sudo service apache2 restartAnders ist es beim Neuladen der Konfiguration, hier werden bestehende Verbindungen nicht getrennt:
sudo service apache2 reload
Das Stoppen eines Dienstes wie oben entfernt einen Daemon nicht dauerhaft. Ein Dienst, der gestoppt, aber nicht entfernt wurde, kann bei der nächsten Aktualisierung des ihn betreffenden Pakets wieder starten (etwa beim automatischen Update). Oder er wird beim nächsten Neustart des RasPi wieder aktiviert.
Um einen Dienst dauerhaft zu deaktivieren, müssen die Links auf das Startscript aus den Runlevel-Verzeichnissen (/etc/rc0.d ... /etc/rc6.d, /etc/rcS.d) getilgt werden. Ganz brutal kann man auch das Startscript in /etc/init.d umbennenen (z. B. ".inaktiv" an den Dateinamen anhängen) oder das entsprechende Paket über apt-get remove entfernen. Es gibt aber eine elegantere Methode.
Unter "Wheezy" verwendet man das Kommando update-rc.d, um Dienste in den einzelnen Runleveln zu aktivieren oder zu deaktivieren. Bei der Installation werden die Start-Links in den richtigen Runlevel eingetragen. Soll ein Daemon zukünftig nicht mehr automatisch starten,entfernt man die Links zum Start-/Stop-Script aus den Runleveln mit dem folgenden Kommando (ntp dient wieder als Beispiel):
update-rc.d -f ntp removeWill man einen derart deaktivierten Dienst wieder beim Booten automatisch gestartet haben, kann man mit dem folgendem Kommando die Links zum Start-/Stop-Script anlegen:
update-rc.d ntp defaultsDas Schlüsselwort "defaults" sorgt für den Eintrag in den Standard-Runleveln. Man kann beim Kommandoaufruf aber auch genau Reihenfolge und Runlevel getrennt für Start und Stopp festlegen, mehr dazu findet man in den Manualpages (man update-rcd).
Beim Wechsel von "Wheezy" auf "Jessie" gab es einen Wechsel des Init-Systems von SysV-Init auf systemd. Die alten SysV-Kommandos funktionieren in der Regel auch unter systemd, aber nicht umgekehrt. Deshalb sollten Sie sich schon an die neuen systemd-Kommandos gewöhnen. Den Kern bildet das Kommando systemctl (System Control). Für Änderungen an der Konfiguration oder den Neustart von Daemons erfordert es Root-Rechte; einige Diagnose-Aufrufe dürfen auch einfache Anwender ausführen. So kann man sich den Status aller systemd-Units durch den Aufruf von systemctl ohne Parameter anzeigen lassen. Systemd-Units können auf ".service", ".socket", ".target", ".timer", ".mount", ".automount", ".device" oder ".path" enden. Wird kein Unit-Typ angehängt, dann wird standardmäßig der Typ ".service" angenommen. Über einen Parameter kann man sich mit systemctl nur Units eines bestimmten Typs auflisten lassen, etwa alle Service-Units:
systemctl --type=serviceDas Kommando übergibt seinen Output automatisch an less, man kann also vertikal und horizontal "blättern", z. B.:
UNIT LOAD ACTIVE SUB DESCRIPTION apache2.service loaded active exited LSB: Start/stop apache2 web server console-kit-daemon.service loaded active running Console Manager console-kit-log-system-start.service loaded active exited Console System Startup Logging console-setup.service loaded active exited LSB: Set console font and keymap cron.service loaded active running Regular background program processing daemon dbus.service loaded active running D-Bus System Message Bus dphys-swapfile.service loaded active exited LSB: Autogenerate and use a swap file fake-hwclock.service loaded active exited Restore / save the current clock getty@tty1.service loaded active running Getty on tty1 ifplugd.service loaded active running LSB: Brings up/down network automatically ifup@wlan0.service loaded active exited ifup for wlan0 ircd-hybrid.service loaded active running LSB: IRCd-Hybrid daemon init.d script kbd.service loaded active exited LSB: Prepare console keyboard-setup.service loaded active exited LSB: Set preliminary keymap kmod-static-nodes.service loaded active exited Create list of required static device nodes * lightdm.service loaded failed failed Light Display Manager lighttpd.service loaded active running Lighttpd Daemon ModemManager.service loaded active running Modem Manager networking.service loaded active running LSB: Raise network interfaces. ntp.service loaded active running LSB: Start NTP daemon ...Bei meinem RasPi werden insgesamt 46 Dienste gelistet.
Inaktive, d. h. installierte, aber nicht zum Start vorgesehene, Units gibt das Programm nur mit dem Schalter "--all" aus; dasselbe gilt für Units, die das Init-System etwa aufgrund irgendeines Fehlers nicht laden konnte. Das status-Kommando von sytemctl liefert Info über den Zustand eines Dienstes, z. B.:
# systemctl status postfix.service * postfix.service - LSB: Postfix Mail Transport Agent Loaded: loaded (/etc/init.d/postfix) Drop-In: /run/systemd/generator/postfix.service.d `-50-postfix-$mail-transport-agent.conf Active: active (running) since Mi 2034-09-06 08:17:11 CEST; 17 years 2 months left Process: 572 ExecStart=/etc/init.d/postfix start (code=exited, status=0/SUCCESS) CGroup: /system.slice/postfix.service |-856 /usr/lib/postfix/master |-858 pickup -l -t fifo -u -c `-859 qmgr -l -t fifo -u Sep 06 08:17:11 raspi systemd[1]: Started LSB: Postfix Mail Transport Agent. Sep 06 08:17:11 raspi postfix[572]: Starting Postfix Mail Transport Agent: postfix. Sep 06 08:17:12 raspi postfix/master[856]: daemon started -- version 2.11.3, configuration /etc/postfix
Das Kommando systemctl show xxx.service liefert den Status der Systemd-Konfiguration für diesen Dienst. Um einen Dienst zu stoppen, verwendet man systemctl stop ..., zum Beispiel:
# systemctl stop lighttpd # systemctl status lighttpd * lighttpd.service - Lighttpd Daemon Loaded: loaded (/lib/systemd/system/lighttpd.service; enabled) Active: inactive (dead) since Fr 2017-06-16 17:56:46 CEST; 10s ago ...Die Zeile "Active" beim Status zeigt die deaktivierung an. Der Neustart geht genauso einfach:
# systemctl start lighttpd # systemctl status lighttpd * lighttpd.service - Lighttpd Daemon Loaded: loaded (/lib/systemd/system/lighttpd.service; enabled) Active: active (running) since Fr 2017-06-16 17:59:15 CEST; 2s ago ...Soll ein Daemon in Zukunft automatisch starten, verwendet man das Kommando:
systemctl enable <Dienst>Für das dauerhalte Deaktivieren des Dienstes dient:
sudo systemctl disable <Dienst>Will man wissen, ob ein Dienst automatisch gestartet wird, genügt das Kommando:
systemctl is-enabled <Dienst>Last but not least kann man sich die Systemd-Unit anzeigen lassen:
# systemctl cat lighttpd # /lib/systemd/system/lighttpd.service [Unit] Description=Lighttpd Daemon After=network.target [Service] ExecStartPre=/usr/sbin/lighttpd -t -f /etc/lighttpd/lighttpd.conf ExecStart=/usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf [Install] WantedBy=multi-user.target
Auf einer frisch installierten Raspbian-Distribution laufen keine unnütze Dienste. Sie sollten Daher nicht unüberlegt irgendwelche Dienste abschalten, die sich später dann doch als wichtig herausstellen könnten. Schlimmstenfalls ver-konfigurieren Sie das System eventuell so weit, dass das System unbenutzbar wird. Vor dem Deaktivieren sollten Sie sich genau informieren, welche Auswirkungen das Deaktivieren des Dienstes haben könnte. Andererseits kann man bei einen System, das sowieso nur per SSH angesprochen wird und das ohne Monitor und Tastatur läuft, die ganzen Dienste für das Desktop Environment deaktivieren, um so Arbeitsspeicher und Rechenpower zu gewinnen.
free | Arbeitsspeicherverwendung |
df | Speicherplatz auf gemounteten Geräten |
uptime | Anzeige der Systemlast und der Uptime, s. o. |
hostname | Anzeige des Hostname |
uname | OS-Namen anzeigen |
ifconfig | Informationen über Netzwerkgeräte (nur als root) |
iwconfig | desgleichen für WLAN-Benutzer |
top | kurze Systeminformationen und Anzeige der Prozesse |
ps | Anzeige der Prozesse |
dmesg | Alle Systemstart-Informationen des Kernels |
lscpu | Infos über CPU, Rechnerkerne etc. auflisten |
lsdev | Devices (Geräte) auflisten |
lsblk | Block-Devices auflisten |
lshw | Alle Daten der Hardware auflisten |
lsof | Offene Dateien und Sockets auflisten |
lsmod | Module auflisten |
lspci | PCI-Bus auflisten |
lsusb | USB-Devices auflisten |
lsscsi | Daten über SCSI-Geräte auflisten (Platte, DVD, usw.) |
lsattr | Dateisystem-Attribute auflisten |