Raspberry Pi OS: Betriebssystem und Anwendungen aktualisieren

Das Aktualisieren von Betriebssystem und Anwendungen gehört zur Nutzung eines Computersystems dazu. Software neigt dazu Fehler zu enthalten. Nicht nur Funktionsfehler, sondern auch kritische Sicherheitslücken. Das Schließen von Sicherheitslücken und beseitigen fehlerhafter Software ist leider notwendig, weil sich Schadsoftware über Verbindungen ins Internet auf dem eigenen System einpflanzen können, und man so die Kontrolle über System und Daten verliert.
In der Regel werden Software-Fehler mit der Zeit ausgemerzt. Zu diesem Zweck werden regelmäßig Aktualisierungen bereitgestellt, die man automatisch oder manuell herunterladen und installieren kann.

Das automatische Aktualisieren von Betriebssystem und Anwendungen, wie man es von anderen Betriebssystemen kennt, ist von Raspberry Pi OS nicht vorgesehen. Die Aktualisierung muss man selber durchführen und manuell starten. Diese Umständlichkeit ist nur scheinbar ein Problem und macht auf einem Raspberry Pi durchaus Sinn.

Auf einem System, dass man ständig benutzt, macht das automatisierte Aktualisieren Sinn. Bei einem Raspberry Pi, der zum Beispiele eine bestimmte Steuerungsaufgabe erfüllt, wird das nicht notwendig sein. Vor allem dann nicht, wenn man im Detail gar nicht weiß, welche Veränderungen ein Update mit sich bringen. Gerade bei einem umfangreich individualisierten System sollte man vorsichtig sein. Hier können Aktualisierungen schwerwiegende Folgen haben.
Genauso bei Experimentiersystemen. Hier wird die Halbwertszeit des Systems sowieso gering sein, weil man zwangsläufig gezwungen ist die Speicherkarte neu zu beschreiben und bei der Grundkonfiguration für ein aktuelles System gesorgt wird.

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

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.

Weitere verwandte Themen:

Frag Elektronik-Kompendium.de

Elektronik-Set Raspberry Pi Edition
Elektronik-Set Raspberry Pi Edition

Elektronik erleben mit dem Raspberry Pi mit Python und GPIO Zero

  • Leichter Einstieg ins Hardware-nahe Programmieren mit Python und GPIO Zero
  • Experimentieren und Programmieren ohne Vorkenntnisse
  • Sofort Loslegen mit All-in-one-Set

Elektronik-Set jetzt bestellen

Elektronik-Fibel

Elektronik einfach und leicht verständlich

Die Elektronik-Fibel ist ein Buch über die Grundlagen der Elektronik, Bauelemente, Schaltungstechnik und Digitaltechnik.

Das will ich haben!