Betriebssystem und Software beim Raspberry Pi aktualisieren

Linux ist ein schnelllebiges Betriebssystem, dass sich immer mal wieder ändert. Je nach dem, wie aktiv die beteiligten Entwickler sind, gibt es mehr oder wenig Änderungen. Außerdem neigt Software dazu Fehler zu enthalten. Nicht nur Funktionsfehler, sondern auch kritische Sicherheitslücken. In der Regel werden diese Fehler mit der Zeit ausgemerzt. Zu diesem Zweck werden regelmäßig Aktualisierungen bereitgestellt, die man automatisch oder manuell herunterladen und installieren kann.

Allerdings gibt es keinen Grund ständig irgendwelche Sicherheits-Updates oder Bug-Fixes einzuspielen. Vor allem dann, wenn man im Detail gar nicht weiß, welche Veränderungen ein Update mit sich bringt, dann sollte man vorsichtig sein.

Verfügbarkeit vs. Sicherheit

Generell gilt der Leitsatz: "Never touch a running system." Das heißt, hat man ein System installiert, eingerichtet und festgestellt, es läuft wie es soll, dann fasst man es nicht mehr an. Es sei denn, es wird funktional etwas anderes gefordert. Dann ändert man nur das, testet es und lässt anschließend das System wieder in Ruhe.

Es gibt aber noch einen zweiten Leitsatz: "Halte Dein System aktuell und sicher." Das widerspricht im Prinzip dem ersten Leitsatz und das ist richtig so. Denn wer IT-Systeme betreibt, befindet sich immer im Spannungsfeld zwischen Verfügbarkeit und Sicherheit. Wenn 100% Verfügbarkeit verlangt wird, dann bleibt dabei die Sicherheit mit der Zeit auf der Strecke. Wer 100% Sicherheit verlangt, muss auf ein Stück Verfügbarkeit verzichten. Denn jedes Update, das aus Sicherheitsgründen durchgeführt wird, nimmt eine Veränderung am System vor und kann somit negativen Einfluss auf die Verfügbarkeit haben. Im Zweifelsfall bis zum Totalausfall.

Es gibt eine einfache Auflösung dieser schwierigen Gleichung. Beides zusammen geht nicht. Weder 100% Verfügbarkeit noch 100% Sicherheit. Weder gemeinsam, noch einzeln. Ein System, dass auf Verfügbarkeit ausgelegt ist, wird seine Verfügbarkeit in Gefahr bringen, weil es vielleicht Sicherheitslücken aufweist, die durch Updates nicht geschlossen wurden. Dann kann ein Angreifer ein System irgendwann durch eine Sicherheitslücken zum Ausfall bringen, wodurch die Verfügbarkeit leidet.
Und 100% Sicherheit geht auch nicht, weil jedes System, irgendwie immer zugänglich sein muss. Ansonsten arbeitet es nur für sich.

Wann ist ein Update notwendig?

Im Zusammenhang mit "Update" wird häufig die Sicherheit vorangeführt. Viele Computernutzer haben das von Windows her gelernt. Dort werden mindestens einmal im Monat Updates eingespielt, um Fehler und Sicherheitslücken zu beseitigen. Im Prinzip ist das auch bei Linux gültig. Allerdings muss man hier ein wenig differenzieren, für was man seinen Windows-Rechner und für was seinen Raspberry Pi verwendet.
Das heißt, in der Praxis muss man einen Ausgleich finden zwischen Verfügbarkeit und Sicherheit. Dabei stellt sich nur die Frage, wie oft und wann man die Software-Aktualisierung vornimmt und wie viel Zeit man sich danach mit der Prüfung des Systems nimmt.
Wenn Verfügbarkeit wichtig ist, dann macht man Updates weniger oft und überspringt auch mal die eine oder andere neue Version.

Ein Raspberry Pi, der einfach nur eine Aufgabe erfüllen soll und nicht direkt mit dem Internet verbunden ist (hinter einem Router), 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 Raspberry Pi aus, der als Router oder Gateway dient. Hier ist aus Sicherheitsgründen ein Update zeitnah angeraten. Allerdings sollte der Raspberry Pi dann nicht noch weitere Aufgaben haben, weil sonst die Ausfallwahrscheinlichkeit mit jeder Anwendung und Aufgabe steigt.
Nutzt man einen Raspberry Pi als typischen Client, ist das Risiko eines Updates ziemlich gering, weshalb hier nichts gegen ein Update spricht, um dafür ein sicheres System zu haben.

Aktualisieren der installierten Pakete, Bibliotheken und Programme

Linux besteht vereinfacht gesagt aus einem Kernel und Paketen. Pakete beinhalten Programme, Bibliotheken und Treiber. Pakete können aufeinander aufbauen und sind oftmals von anderen Paketen abhängig. Diese Abhängigkeiten werden in den Paketquellen verwaltet. Wenn man also ein Linux und installierte Programme aktualisieren möchte, dann muss man die Aktualisierung der Paketquellen mit einschließen.
Die Paketverwaltung erfolgt unter Raspbian und anderen auf Debian basierenden Linux-Distributionen in der Regel mit "apt-get". Andere Distributionen haben andere Paketverwaltungen.

Jeder Aktualisierung geht das Aktualisieren der Paketlisten voraus:

sudo apt-get update

"apt-get update" aktualisiert die Paketlisten, in denen drin steht, welche Programme in welcher Version verfügbar sind und welches Paket von welchem abhängig ist.

Anschließend lässt man den Upgrade-Prozess laufen, der zuerst aus den Paketlisten ermittelt, für welche Pakete neue Versionen bereitstehen. In der Regel wird man alle neuen Versionen zusammen bestätigen. Anschließend läuft der Upgrade-Prozess automatisch weiter.

sudo apt-get upgrade

"apt-get upgrade" lädt zuerst alle neuen Pakete herunter. Das gelingt aber nur, wenn vorher die Paketlisten mit "apt-get update" aktualisiert wurden. Ein erfolgreiches Upgrade ist von aktuellen Paketlisten abhängig. Deshalb ist vorher immer ein "apt-get update" erforderlich.
In der Regel führt man beide Kommandos gemeinsam oder nacheinander aus.

sudo apt-get update
sudo apt-get upgrade

Gelegentlich kommt es vor, dass Pakete zurückgehalten werden. Es erscheint dann folgende Meldung: "Die folgenden Pakete sind zurückgehalten worden: (Paketnamen)"

sudo apt-get dist-upgrade

Nur ein "dist-upgrade" ist ein vollständiges Upgrade und sollte deshalb bevorzugt verwendet werden, wenn man ein Upgrade machen will. Auf einem Produktivsystem sollte man die Finger von "dist-upgrade" lassen und höchstens "upgrade" ausführen. Wer sichergehen will, der lässt Upgrades ganz bleiben ("Never touch an running System").

Unterschied:"apt-get upgrade" und "apt-get dist-upgrade"

Ein "upgrade" aktualisiert nur bereits installierte Pakete. Ein "dist-upgrade" aktualisiert auch bereits installierte Pakete, aber zusätzlich auch die, für die sich Abhängigkeiten zu anderen Paketen geändert haben. Im Detail bedeutet dass, dass "dist-upgrade" neue Pakete installiert von denen aktualisierte Pakete abhängig sind. Umgekehrt entfernt "dist-upgrade" auch alte Pakete, zu denen keine Abhängigkeiten mehr bestehen.

In der Manpage zu "apt-get upgrade" steht folgendes: Unter "keinen" Umständen werden derzeit installierte Pakete entfernt oder nicht installierte Pakete heruntergeladen und installiert.
Für "apt-get dist-upgrade" gilt dann: Unter Umständen werden derzeit installierte Pakete entfernt oder nicht installierte Pakete heruntergeladen und installiert.

Die Aktualisierung mit "apt-get dist-upgrade" ist somit vollständiger und normalerweise der richtige Weg. Ein "apt-get upgrade" kann man sich schenken, weil "apt-get dist-upgrade" das bereits einschließt.

Warum braucht es überhaupt "upgrade", wenn "dist-upgrade" das selbe macht? Gibt es möglicherweise einen sinnvollen Grund "dist-upgrade" nicht zu verwenden?

Ein "dist-upgrade" installiert Pakete von denen andere Pakete abhängig sind und entfernt Pakete von denen andere nicht mehr abhängig sind. Das entscheidet der Paketmanager "apt-get" anhand der Paketquellen. Dort sind nicht nur neue Versionen, sondern auch die Abhängigkeiten verzeichnet.
Wenn man nun Software außerhalb von "apt-get install" herunterlädt und/oder compiliert, zum Beispiel von Github, dann weiß "apt-get" davon natürlich nichts. Wenn jetzt diese eine Software von installierten Paketen abhängig ist und ein "dist-upgrade" entfernt oder ersetzt diese Pakete, dann funktioniert die eigene Software unter Umständen nicht mehr. Um das zu vermeiden, sollte man in diesem Fall auf "dist-upgrade" verzichten und höchstens ein "upgrade" ausführen.

Ein weitere Grund, auf "dist-upgrade" zu verzichten, ist bei kritischen Systemen, bei denen es auf Verfügbarkeit ankommt. Hier will man Änderungen an den Abhängigkeiten eigentlich vermeiden. Mit einem "upgrade" bekommt man trotzdem alle wichtigen Fixes. Ausgenommen bei Paketen, die von geänderten Abhängigkeiten betroffen sind.
Das heißt, dass ein einfaches "upgrade" ein System unter Umständen nicht auf den aktuellen Stand bringt, weil eben keine Pakete installiert oder entfernt werden. Ein System ist also nur dann aktualisiert, möglichst fehlerfrei und sicher, wenn man ein "dist-upgrade" durchgeführt wurde.

Gibt es einen Grund, weshalb man auch kein "upgrade" machen sollte?

Die Frage ist, ob man grundsätzlich auf Aktualisierungen verzichten sollte? Die Antwort ergibt sich daraus, was man mit dem System macht.
Die Erfahrung eines typischen Computernutzers ist die, dass Updates, Upgrades und Software-Aktualisierungen generell ein gute und oft eine zwingende Sache sind. Schließlich müssen regelmäßig Sicherheitslücken beseitigt werden. Und ab und zu wäre eine Fehlerbeseitigung und neue Funktionen auch nicht schlecht.
Für einen typischen Desktop-PC ist das soweit korrekt. Wer mit und an seinem System arbeitet, sollte es aktuell halten. Insbesondere dann, wenn man mit ihm im Internet unterwegs ist.

Wie sieht es nun mit Systemen aus, die eigentlich nur eine Aufgabe erledigen, im Hintergrund oder sogar autark arbeiten?
Wenn auf diese Systeme keine direkten Verbindungen "aus" dem Internet erfolgen kann, weil sie nur innerhalb eines Netzwerks einen Dienst bereitstellen oder gar keine Netzwerk-Verbindung haben, dann wird man auf Software-Aktualisierungen verzichten können. Im Regelfall wird hier die Stabilität, Funktionalität und Verfügbarkeit dieser Systeme im Vordergrund stehen. Gerade im Sinne der Verfügbarkeit wird man die Aktualisierung der Software vermeiden, weil eine Veränderung am System immer auch die Verfügbarkeit in Gefahr bringt. Jeder verantwortliche Systemadministrator wird das zu vermeiden wissen und nur dann aktualisieren, wenn es dafür einen wichtigen und dringenden Grund gibt. Selbst Sicherheitslücken, für die ein Patch verfügbar ist, müssen nicht zwangsläufig eine Aktualisierung veranlassen.

Wiederum anders sieht es bei Systemen aus, die direkt "aus" dem Internet erreichbar sind. Dazu zählen zum Beispiel Webserver, VPN-Server und Steuerungssysteme mit Fernwartungsfunktion. Auch hier spielt die Verfügbarkeit eine wichtige Rolle. Aber hier kann die Verfügbarkeit durch Sicherheitslücken in Gefahr geraten. Allein nur dadurch, weil das System für Angreifer direkt aus dem Internet erreichbar ist. Das Internet ist generell als feindlich anzusehen. Deshalb sind Systeme, die mit dem Internet verbunden sind regelmäßig zu aktualisieren.
Betreibt man einen Webserver mit PHP dann sollte man sich über Sicherheitslücken und Patches regelmäßig informieren und die dann auch einspielen, um die Verfügbarkeit durch das Ausnutzen von Sicherheitslücken nicht zu gefährden. Dasselbe gilt für Mail-Server und VPN-Server.

Nach dem Aktualisieren: Reboot tut gut

Wer Windows als Betriebssystem auf einem seiner Computer hat, der wird sich mit Sicherheit daran erinnern, was passiert, nach dem der automatische Update-Mechanismus das Windows auf den neusten Stand gebracht hat. Richtig, ein Neustart ist erforderlich. Und das ist auch richtig so. Ein Update bringt nur dann etwas, wenn die aktualisierte Version eines Pakets, einer Bibliothek oder eines Programms zur Anwendung kommt. Windows erzwingt diese Entscheidung regelrecht. Der Anwender kann das gar nicht vermeiden.

Unter einem Linux-Betriebssystem, dass auf der Kommandozeile aktualisiert wird, sieht das aber anders aus. Hier geht die Bedienerführung davon aus, dass der Anwender weiß was er tut. Das ist aber nicht immer so.
Es gibt tatsächlich Leute, die fleißig "apt-get update" und "apt-get upgrade" verwenden, aber vergessen, dass ein Neustart erforderlich ist. Wenn der Raspberry Pi als Gateway oder Server dient und dauerhaft läuft, dann bekommen die laufenden Dienste von der Aktualisierung nichts mit.

Und deshalb gilt, Reboot tut gut.

sudo reboot

Aktualisieren ohne Neustart

Jetzt ist es aber so, dass bei einem Gateway oder Server ein Neustart des Raspberry Pi nicht immer gewünscht ist. Während des Neustarts sind die Dienste nicht verfügbar, was man eigentlich vermeiden möchte.
Eine Alternative zum System-Neustart ist, alle vom Upgrade betroffenen Dienste einzeln neu zu starten. Nur, welche sind das?

Unter Debian (auch Raspbian) gibt es das Paket "debian-goodies" mit dem Kommando "checkrestart". Dieser Befehl ermittelt welche Prozesse noch Bibliotheken verwenden, die bei einem Update ersetzt wurden.

sudo apt-get install debian-goodies

Folgendes Kommando zeigt die Prozesse an, die mit veralteten, aber aktualisierten Paketen arbeiten.

sudo checkrestart

Was sicherheitsrelevant ist, sollte neu gestartet werden. In der Regel werden die dafür notwendigen Restart-Befehle angezeigt.

sudo service {PAKET} restart

Wenn beim letzten Upgrade Pakete dabei waren, die viele laufende Dienste nutzen, dann ist die Liste unter Umständen sehr lang. In so einem Fall empfiehlt sich dann ein Reboot, weil ein Restart vieler einzelner Dienste unter Umständen aufwändiger ist und länger dauert.

Hinweis: Der Neustart des SSH-Daemons beendet eine aktuelle SSH-Verbindung NICHT.

Manchmal gibt es Prozesse, die Bibliotheken verwenden, für die es keine Restart-Befehle gibt: "These processes do not seem to have an associated init script to restart them". Hier hilft nur ein Neustart. Unter Umständen kann man den Neustart in die Zukunft verlegen, wenn es sich um keine sicherheitsrelevanten Dienste handelt.

Eine Alternative zu "checkrestart" ist "needrestart". Letzteres startet aktualisierte Dienste automatisch nach "apt-get upgrade".

sudo apt-get install needrestart

Folgendes Kommando zeigt die Prozesse an, die mit veralteten, aber aktualisierten Paketen arbeiten.

sudo needrestart

Pakete entfernen (Programme deinstallieren)

Folgende Kommandos entfernen Pakete, die nicht mehr gebraucht werden:

sudo apt-get remove {PAKETNAME}

oder

sudo apt-get autoremove {PAKETNAME}

oder

sudo apt-get purge {PAKETNAME}

Unterschied: "apt-get remove" und "apt-get purge"

Der Unterschied zwischen "apt-get remove" und "apt-get purge" ist der, dass letzteres auch die zu den Paketen zugehörigen Konfigurationsdateien löscht. "remove" belässt diese für eine eventuell erneute Installation. Möchte man Pakete restlos entfernen, dann macht man das mit "purge".
Ein generelles "apt-get remove" sei angeraten, weil das in so einem Fall zumindest die Konfigurationsdateien bestehen lässt. Mit einem "apt-get install" könnte man die versehentlich gelöschten Pakete wieder installieren. Danach wäre dann alles wie vorher.
Erst wenn man sicher ist, dass man von den Überbleibseln nichts mehr braucht, kann man sich ans "Aufräumen und Bereinigen" machen.

Unterschied: "apt-get remove" und "apt-get autoremove"

Die meisten Benutzer kennen "autoremove" als Kommando, um ungenutzte Pakete zu entfernen. Allerdings kann man "autoremove" auch zum regulären Entfernen von Paketen und anstatt "remove" verwenden.
Ein "apt-get autoremove {PAKETNAME}" entfernt nicht nur das jeweilige Paket, sondern auch noch die Pakete, zu denen es dann keine Abhängigkeiten mehr gibt. Ein "apt-get autoremove" geht beim Entfernen von Paketen gründlicher vor.

Hinweis: Beim Benutzen von "remove" und "purge" und insbesondere "autoremove" ist Vorsicht geboten. Man muss grundsätzlich darauf achten, dass beim Entfernen von Paketen, nicht Pakete mitentfernt werden, die man eigentlich behalten wollte. Deshalb sollte man, bevor man das Entfernen von Paketen bestätigt, die angezeigte Liste genau ansehen. Es gab schon so manchen User, der sich mit "apt-get autremove" die grafische Benutzeroberfläche entfernt hat. Und das restlos.

Überflüssige Pakete entfernen

Nach dem Entfernen von Paketen und mehrmaligen Aktualisieren kommt es vor, dass Pakete überflüssig werden. Beispielsweise, weil sie von anderen Paketen nicht mehr gebraucht werden. Das heißt, dass mit der Zeit Paket-Leichen zurück bleiben, die unnötigerweise Speicherplatz belegen.

Wenn man Aktualisierungen durchführt und ab und zu Pakete installiert und mit "apt-get remove" oder "apt-get purge" auch wieder entfernt, bleiben ab und zu Pakete zurück, die nicht mehr gebraucht werden. Diese Paketleichen kann man entfernen.

sudo apt-get autoremove

"apt-get autoremove" kann man auf zwei Arten verwenden. Einmal ohne und einmal mit der Angabe eines Paketnames. Wenn man "apt-get autoremove" wie "remove" oder "purge" verwendet, dann deinstalliert es automatisch auch alle Pakete, von denen das zu entfernende Paket abhängig ist. Dazu zeigt "autoremove" eine Liste mit Paketen an, die es entfernen will. Der Paketmanager macht erst weiter wenn man das bestätigt.
"apt-get autoremove" ist dann hilfreich wenn es darum geht ein Paket zu deinstallieren, welches viele Abhängigkeiten hat, die nur von dem zu deinstallierenden abhängen. Wenn man sich nicht sicher ist, dann verwendet man nur "apt-get remove".

Paket-Cache bereinigen/leeren

"apt-get" speichert alle heruntergeladenen Pakete in einem Cache. Dadurch müssen Pakete nicht noch einmal heruntergeladen werden und können direkt installiert werden. Nach mehreren Installationen und Updates wächst der Inhalt dieses Caches schnell an.
Ab und zu macht es Sinn den Cache zu leeren.

sudo apt-get clean
sudo apt-get autoclean

"autoclean" löscht nur Pakete, die veraltet sind. "clean" löscht alle Pakete im Cache.

Danach treiben sich immer noch Konfigurationsdateien im System herum, deren Pakete schon längst deinstalliert sind. Man kann diese Dateien folgendermaßen löschen:

sudo dpkg -P `dpkg -l | grep "^rc" | awk -F" " '{ print $2 }'`

Regeln zum Aktualisieren des Raspberry Pi

  • Nach Bedarf: update und upgrade/dist-upgrade
  • Unnötig: autoremove und autoclean
  • Niemals: rpi-update

Nicht vergessen: Neustart des Raspberry Pi oder der vom Upgrade betroffenen Dienste.

Kernel-Update / Firmware-Update mit rpi-update

"rpi-update" ist eine Update-Funktion, die nur für den Raspberry Pi gilt, und nichts mit den Mechanismen von "apt-get" zu tun hat. "rpi-update" ist ein eigenständiges Script, das den aktuellen "unstable" Kernel, an dem gerade noch entwickelt wird, von Github herunterlädt und einspielt. Generell gibt es keinen Grund "rpi-update" zu verwenden.

Paketquellen prüfen und ändern

Linux besteht vereinfacht gesagt aus einem Kernel und Paketen. Pakete beinhalten Programme, Bibliotheken und Treiber. In Paketquellen befinden sich Listen, in denen die Versionen und Abhängigkeiten der Pakete verzeichnet sind. Jede Linux-Distribution hat unter Umständen andere und mehrere Paketquellen.
Es geht nicht zwangsläufig darum in den Paketquellen etwas zu ändern, sondern nachzusehen, was dort steht und aus welchen Quellen die Pakete bezogen werden und zu prüfen, ob diese Quellen für den Zweck und Anwendung vertrauenswürdig genug sind.

Raspbian Wheezy auf Jessie upgraden

Wenn ein Release-Wechsel stattfindet, führt das dazu, dass ein System mit der Zeit veraltet, weil es keine Aktualisierungen mehr für das alte Release bekommt. Wenn man also weiterhin in den Genuss neuer und aktualisierter Software kommen will, dann muss man auf das neue Release wechseln.

Sicherheitsaktualisierungen automatisch installieren

Das Aktualisieren eines Systems ist eine wichtige Maßnahme, um die Sicherheit des Systems zu erhalten. Standardmäßig müssen Aktualisierungen manuell ausgeführt werde. Alternativ besteht die Möglichkeit das ein System automatisch die Sicherheitsaktualisierungen herunterlädt und installiert.

Update/Upgrade von Raspberry Pi (1) auf Raspberry Pi 2 und 3

Da die Raspberry Pi Modelle 1, 2 und 3 jeweils auf einer anderen ARM-CPU basieren, können die alten Images nicht auf einem neueren Modell verwendet werden. Will man ein älteres Image in einem neueren Raspberry Pi verwenden, muss man es zuvor in einem älteren Raspberry Pi von einer MicroSD-Karte booten und eine Aktualisierung durchführen. Dabei werden automatisch Firmware und Kernel aktualisiert, damit das neue Modell erkannt wird. Anschließend kann man das Image auch in einem neuen Raspberry Pi verwenden.

Weitere verwandte Themen:

Teilen:

Produktempfehlungen