Raspbian Jessie mit Systemd und NetworkManager für besseres Netzwerkmanagement

Mittlerweile ist Debian 8 alias Jessie der Standard bei Raspbian, also Zeit endlich mit meinem Pi ebenfalls umzusteigen.

(Ich habe den Artikel wegen des neuen Raspbian Images angepasst, da der Umweg über Wheezy mit Update auf Jessie nicht mehr notwendig ist. Wer trotzdem ein Update von Wheezy auf Jessie machen muss, kann das am Ende des Artikels nachlesen.)

Mit Jessie führen die Debian-Entwickler endlich Systemd ein, was immer mehr Distributionen als Standard beim Init Prozess verwenden. Das ist ein Grund für mich meinen RaspPi mit Jessie zu installieren und Systemd zu verwenden, um in den Genuss einiger Vorteile bei der Administration zu kommen. Weiterhin werde ich die Netzwerkverwaltung auf NetzworkManager umstellen.

Installation des aktuellen Rasbian Images (Lite oder Full)
Download hier: https://www.raspberrypi.org/downloads/raspbian/

Ich gehe hier nicht näher auf die Installation des Images ein, da es im Netz dazu genügend Anleitungen gibt.

Netzwerkverbindungen auf NetworkManager umstellen

Als nächstes sollen die Netzwerkverbindungen vom alten /etc/network/interfaces Script auf den modernen NetworkManager umgestellt werden. Der bietet auch auf der Kommandozeile mit dem Tool nmcli viel größere Flexibilität beim Umgang mit den Netzwerkverbindungen.

Zuerst werden die Programmpakete für den NetworkManager installiert. Dies geschieht mit sudo apt-get install network-manager.

Anschließend kommentiert man in der bisherigen Netzwerkkonfigurationsdatei /etc/network/interfaces bis auf das loopback Interface (lo) alle Einträge aus (danke an Jörg Neumann für den Hinweis). Würde man das nicht tun, würde Debian beim Start weiterhin die Informationen dieser Konfig-Datei verwenden.

So sollte die Datei /etc/network/interfaces dann aussehen:

auto lo
iface lo inet loopback

#auto eth0
#iface eth0 inet dhcp

#auto wlan0
#allow-hotplug wlan0
#iface wlan0 inet dhcp
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

#iface default inet dhcp

 

Mit nmcli eine neue LAN-Verbindung erstellen

Das Tool nmcli bedient sich am besten per sog. „tab completion“. D.h man beginnt einen Befehl und durch Tab wird er vervollständigt, oder er zeigt weitere Optionen an. So kann man sich den kompletten Befehl einfach „zusammenbauen“. Dafür installiert man das Paket bash-completion nach.

Als nächstes prüft man, ob der NetworkManager Daemon beim Booten automatisch gestartet wird (auf die Groß-/Kleinschreibung bei NetworkManager achten):

$ sudo systemctl status NetworkManager

● NetworkManager.service - Network Manager
Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled)
Active: active (running) since Mo 2015-05-04 18:47:14 CEST; 1 day 1h ago
Main PID: 368 (NetworkManager)
CGroup: /system.slice/NetworkManager.service
├─ 368 /usr/sbin/NetworkManager --no-daemon
└─14286 /sbin/dhclient -d -q -sf /usr/lib/NetworkManager/nm-dhcp-helper -pf /var/run/dhclient-wlan0.pid -lf /var/lib/Netw...

Mit systemctl enable/start/stop/restart NetworkManager lässt sich der Daemon steuern.

Das Kommandozeilen Tool nmcli hat schließlich folgende Hauptbereiche:

  • general – Zeigt Informationen zum generellen Status des NetworkManagers und Berechtigungen
  • networking – Zeigt oder setzt globale Netzwerkoptionen, oder aktiviert/deaktiviert das Netzwerk.
  • radio – Zeigt oder setzt globale Wireless Optionen bzw. de-/aktiviert WLAN
  • connection – Hier werden die Netzwerkverbindungen hinzugefügt, konfiguriert und gemanaged
  • device – Dient zum anzeigen und managen der physischen Netzwerk Interfaces

Der Status wird immer durch Ergänzen des Parameters „status“ oder „show“ abgefragt.

Zum Abfragen des aktuellen Netzwerk Status gibt man z.B. folgenden Befehl ein:

nmcli general status (oder die Kurzform: nmcli g s)

So lange der Befehl eindeutig ist, können die Parameter auch abgekürzt werden, oder mit Tab komplettiert werden.

Die Eingabe von nmcli c s schließlich dürfte noch keinerlei Einträge zu Tage fördern.

Beim nächsten Reboot wird jedoch automatisch die kabelgebundene Netzwerkverbindung (eth0) vom NetworkManager definiert und aktiviert.

Will man zusätzlich noch manuell eine weitere Kabelverbindung hinzufügen, hangelt man sich mit der Tab Completion durch den folgenden Befehl:

nmcli connection add autoconnect yes con-name <frei wählbar> ifname <per Tab auswählbar> type ethernet save yes

Damit wird eine DHCP Connection eingerichtet. Soll dagegen eine statische IP-Adresse verwendet werden ergänzt man den Befehl noch um ip4 <xx.xx.xx.xx/24> gw4 <xx.xx.xx.xx> z.B.:

nmcli connection add autoconnect yes con-name test123 ifname eth0 type ethernet save yes ip4 192.168.2.10/24 gw4 192.168.2.1

Fertig ist die Netzwerkverbindung.

Nmcli c s <den mit con-name definierten Namen der Verbindung> zeigt im Detail alle manuell gesetzten und alle Standard Parameter, z.B.:

nmcli c s test123

Mit nmcli con modify test123 können noch viele weitere Optionen verändert werden. Z.B. kann hier noch explizit für eine Netzwerkverbindung der DNS-Server (ipv4.dns) und die DNS-Search Domain (ipv4.dsn-search) festgelegt werden, oder spezielle Routing-Einträge vorgenommen werden (ipv4.routes).

Den globalen DNS-Server trägt der NetworkManager übrigens automatisch in die Datei /etc/resolv.conf ein (erkennbar an dem Zusatz: #Generated by NetworkManager)

Hinzufügen einer Wi-Fi Verbindung

Zum Anzeigen der verfügbaren Wi-Fi access points, gibt man folgenden Befehl ein:

nmcli dev wifi list

SSID MODE CHAN RATE SIGNAL BARS SECURITY
MyWLAN Infra 11 54 MB/s 39 ▂▄__ WPA2

Das Erstellen eines WLAN Profils mit statischer IP Konfiguration, aber automatischer Ergänzung der DNS Adresse, erledigt folgender Befehl:

nmcli con add con-name MyWLAN ifname wlan0 type wifi ssid MyWLAN \ip4 192.168.100.101/24 gw4 192.168.100.1

Will man stattdessen wieder eine DHCP Adresse für das WLAN Profil, lässt man einfach die Parameter ip4 und gw4 weg.

Zum setzen eines WPA2 Passwortes, zum Beispiel „test123“, führt man folgende Befehle aus:

nmcli con modify MyWLAN 802-11-wireless-security.key-mgmt wpa-psk
nmcli con modify MyWLAN 802-11-wireless-security.psk test123

Im „Red Hat Enterprise Linux 7 Security Guide“ kann man übrigens mehr zur Passwort Sicherheit nachlesen.

Zum Schluss muss man die WLAN Verbindung noch aktivieren mit:

sudo nmcli -p con up 'MyWLAN' ifname wlan0

Folgender Befehl schaltet das WLAN komplett aus und wieder ein:

nmcli radio wifi [on | off ]

Um einen bestimmten Parameter z.B. mtu zu prüfen, verwendet man folgenden Befehl:

nmcli connection show id 'MyWLAN' | grep mtu
802-11-wireless.mtu: auto

Und zum Ändern des Parameters führt man dann folgenden Befehl aus:

nmcli connection modify id 'MyWLAN' 802-11-wireless.mtu 1350

Anschließend kann man die Konfigurationsänderung wie folgt überprüfen:

nmcli connection show id 'MyWLAN' | grep mtu
802-11-wireless.mtu: 1350

Für die evtl. Fehlersuche filtert man einfach im Journal nach NetworkManager:

sudo journalctl --unit NetworkManager

 

Somit hat man die Basis geschaffen für ein modernes Debian System mit dem RaspberryPi.

Viel Spaß damit.

 

Anhang

Für diejenigen, die ein bestehendes Raspbian Wheezy auf Jessie updaten müssen, ist hier der Ablauf beschrieben:

Der Weg führt über Wheezy

Man installiert also Raspbian Wheezy (bei mir ein Raspberry Pi 2) und konfiguriert alle nötigen Optionen mit raspi-config. Wichtig ist hier, dass man die SD-Card vergrößert, weil das Upgrade auf Jessie mindestens 1,5 GB Speicherplatz benötigt. Außerdem muss für Locales UTF-8 als Standard gesetzt sein, da es sonst beim Upgrade auf Jessie Probleme geben kann.

Anschließend aktualisiert man noch mit sudo apt-get update && sudo apt-get upgrade -y das neu installierte System.

Aktualisierung von Debian 7 (Wheezy) auf Debian 8 (Jessie)

Jetzt geht’s ans Upgrade! Vor der eigentlichen Aktualisierung prüft man jedoch noch den Status der installierten Pakete mit: sudo dpkg –audit. Nicht korrekt installierte Pakete müssen nochmals aktualisiert oder notfalls entfernt werden, bis der Befehl keine Meldungen mehr ausspuckt.

Sicherheitshalber erstellt man dann noch ein Backup des Etc-Verzeichnisses mit den Konfigurationsdateien und den Datenbanken der Softwareverwaltung dpkg und apt.

Nun wird die Repository-Datei auf den Jessie Pfad geändert: /etc/apt/sources.list
Dort ersetzt man einfach „wheezy“ durch die Zeichenkette „jessie“. Die weiteren Repositories unter /etc/apt/sources.list.d (collabora.list und raspi.list) bleiben wie sie sind, denn dafür gibt es keinen separaten Jessie-Zweig.

Dann wird mit sudo apt-get update && sudo apt-get upgrade -y die Aktualisierung der Pakete gestartet. Dies kann je nach Umfang sehr lange dauern und zwischendurch wird man immer wieder mal gefragt, wie mit den vorhandenen Konfigurationsdateien umgegangen werden soll. Hier einfach den Standard (N) bestätigen.

Wenn dieser Vorgang ohne Fehler beendet ist, erfolgt die vollständige Systemaktualisierung mit sudo apt-get dist-upgrade. Erst danach wird das System das erste mal neu gestartet.

Aufräumarbeiten

Nach dem Neustart kann man mit sudo apt-get autoremove alle veralteten Pakete entfernen, und mit sudo apt-get purge $(dpkg -l | awk ‚/^rc/ { print $2 }‘) können anschließend noch die nicht mehr benötigten Konfigurationsdateien entfernt werden, die anderenfalls sonst Probleme verursachen können. Damit wird dann auch Sysvinit vollständig entfernt.

15 Kommentare

  1. Ich habe gerade auf meinem Rpi2 ein Update von Wheezy auf Jessie gemacht. Dabei habe ich auch in der raspi.list und collabora.list wheezy durch jessie ersetzt. Bei der collabora kam es dann zu einer Fehlermeldung wie bei dir beschrieben, aber bei der raspi.list mit jessie bekam ich keine Fehlermeldung beim apt-get update.

    Gibt es also inzwischen eine raspi repository für jessie oder sollte ich trotz fehlendere Fehlermeldung die list Datei wieder auf wheezy ändern?

    1. Hallo Jan,
      danke für den Hinweis! Ich habe es gerade selbst nochmal probiert und es scheint tatsächlich so zu sein, dass mittlerweile im Archive Repo der jessie Pfad vorhanden ist.

      Holen: 4 http://archive.raspberrypi.org jessie/main armhf Packages [20 B]
      Ign http://raspberrypi.collabora.com wheezy/rpi Translation-de_DE
      Ign http://raspberrypi.collabora.com wheezy/rpi Translation-de
      Ign http://raspberrypi.collabora.com wheezy/rpi Translation-en
      Ign http://archive.raspberrypi.org jessie/main Translation-de_DE
      Ign http://archive.raspberrypi.org jessie/main Translation-de
      Ign http://archive.raspberrypi.org jessie/main Translation-en

  2. Sehr schönes Tutorial, zudem man die Netzwerkeinrichtung auch für wheezy nutzen kann. In der interfaces sollte auf keinen Fall die loopback (lo) auskommentiert werden, die kann nicht mit dem NetworkManager bearbeitet werden und muss bleiben! Sonst laufen einige Programme, die das loopbackinterface benötigen nicht (z.b. xrdp).

  3. Das Ganze funktioniert wunderbar – vielen Dank für die gute Anleitung. Lediglich ein ’sudo nmcli -p con up „DasWLAN“ ifname wlan0′ war bei mir noch notwendig.

  4. Sehr hilfreicher Artikel!
    Aber wie baut man ein WLAN-Netzwerk mit dem Network Manager auf dem RPi auf, in das man sich dann mit anderen Geräten einloggen kann?
    Ideal wäre es, wenn die IP-Adressen bekannter Geräte immer die gleichen bleiben würden.

    1. Sie meinen also einen WLAN Hotspot? Ja, gute Frage .. Das wäre ein anderer Einsatzzweck. Dazu könnte man einen separaten Artikel verfassen.

  5. Ja, trotz einiger Google-Stunden scheitere ich schon beim Einrichten des WLAN-Netzwerks, vom Internet-Forwarding ganz zu schweigen. Es gibt zwar einzelne Hinweise, aber eine Anleitung, wie das mit nm und dann noch auf dem rpi funktioniert, würde sicher einige User freuen.

  6. Sehr schöne Anleitung!
    Aber wie kann sich der Raspberry nach einem Abbruch der Wifi-Verbindung automatisch wieder verbinden?

    Gruß,
    Stefan

  7. … vielen Dank für das HowTo; jetzt funktioniert mit der aktuellsten Jessie- Version sogar das WLAN…
    Allerdings sind mir noch zwei Fehler aufgefallen:

    1.:
    >>> nmcli connection add autoconnect yes con-name ifname type ethernet save <<>> Nmcli c s eth0 zeigt im Detail alle manuell gesetzten und alle Standard Parameter. <<<
    Nicht ganz richtig, aber falsch 😉 an Stelle der Schnittstelle ethx ist hier der Name zu verwenden, welcher mit "con-name" gesetzt wurde…

    DLzG
    Micha

    1. … huch…
      Da hat was meinen Beitrag geschräddert 🙁

      hier noch mal:

      … vielen Dank für das HowTo; jetzt funktioniert mit der aktuellsten Jessie- Version sogar das WLAN…
      Allerdings sind mir noch zwei Fehler aufgefallen:

      1.:
      > nmcli connection add autoconnect yes con-name ifname type ethernet save
      a: hinter das „save“ gehört ein true|yes|on oder false|no|off
      b: für die statische IP muss dem Schlüsselwort „ip4“ ein Backslash vorangestellt werden

      „nmcli connection add autoconnect yes con-name LAN1 ifname eth0 type ethernet save true \ip4 192.168.1.123/24 gw4 192.168.1.111“
      … dat tut …

      2.:
      > Nmcli c s eth0 zeigt im Detail alle manuell gesetzten und alle Standard Parameter.
      Nicht ganz richtig, aber falsch 😉 an Stelle der Schnittstelle ethx ist hier der Name zu verwenden, welcher mit „con-name“ gesetzt wurde…

      DLzG
      Micha

      1. Hallo Michael, danke für die Hinweise. Ich hab den Beitrag entsprechend geändert .. den Backslash braucht es aber meiner Ansicht nach nicht. Bei mir ging es auch ohne. Gruß Jürgen

    1. Na ja, das ist ja bekanntlich wieder Geschmackssache und mehrere Wege führen nach Rom. Meine beschriebene Variante hat halt den Vorteil, dass man sich nicht mit config files rumschlagen muss und mit der Tab Completion auch immer noch Vorschläge angeboten bekommt … man kann sich die Konfiguration also erarbeiten … Aber wie gesagt, Geschmackssache und auch abhängig von der Anforderung.

Kommentare sind geschlossen.