Ein Debian Linux System automatisch (“unattended”) aktuell zu halten, ist super einfach. Ich zeige Dir hier, wie das geht.

Diese Anleitung bezieht sich auf die aktuelle Debian Version 11 (Bullseye) und Derivate.

Systeme ohne grafische Benutzeroberfläche

An einem System ohne grafische Benutzeroberfläche, zum Beispiel einem Server, einer VM oder einem (LXC) Container per SSH anmelden und das unattended-upgrades Paket installieren. Dies gilt im Übrigen auch für Raspberries mit Raspberry Pi OS.

Alle Aktionen müssen mit Systemverwalter-Rechten (root) ausgeführt werden. Wenn da sudo notwenig ist, empfielt sich ein sudo su - vor der Installation.

Kommando zur Installation:

apt -y update && apt -y install unattended-upgrades apt-listchanges

Nach der Installation sollte die Konfiguration noch angepasst werden. Dazu die entsprechende Konfigurationsdatei editieren:

vi /etc/apt/apt.conf.d/50unattended-upgrades

Dort trägt man im Abschnitt Unattended-Upgrade::Package-Blacklist die Pakete ein, die man nicht automatisch aktualisiert haben möchte. Das kann der Fall sein, wenn man aufwenig angepasste Software laufen hat und verhindern möchte, dass eine Syntax-Änderung in der Konfigurationsdatei den Start der Software verhindert.

Das war zum Beispiel beim Major Release Wechsel des Squid Proxy Servers ein Problem.

Anders als in der offiziellen Dokumentation angegeben braucht man die Mail-Konfiguration (Unattended-Upgrade::Mail) in der Praxis nicht, da gibts bessere Mechanismen, um bei Problemen zu benachrichtigen.

Aktivieren sollte man das automatisch Ausführen von apt autoremove, in dem man die Kommentarzeichen (//) vor der entsprechenden Zeile entfernt und den Wert auf “true” setzt:

Unattended-Upgrade::Remove-Unused-Dependencies "true";

Dann wird noch der automatische Systemstart (notwendig, wenn zum Beispiel der Kernel aktualisiert wurde) aktiviert, indem der entsprechende Parameter auf “true” gesetzt wird:

Unattended-Upgrade::Automatic-Reboot "true";

Und der Reboot wird in eine betriebsarme Zeit geplant. Meistens passt das zwischen 3:00 und 4:00 Uhr:

Unattended-Upgrade::Automatic-Reboot-Time "03:30";

Anschließend die Datei speichern und den Editor verlassen (:wq). Alle anderen Einstellungen können auf den Standardwerten belassen werden, die sind soweit in Ordnung.

Die Änderungen aktivieren:

dpkg-reconfigure -plow unattended-upgrades

Damit ist die Konfiguration abgeschlossen. Die Überwachung kann man manuell machen mit apt list --upgradable an der Kommandozeile oder man macht das (wenn man mehrere) Systeme zu überwachen mit einer Monitoring Software. Für CheckMK zum Beispiel gibts ein Apt-Plugin, das alarmiert, wenn Updates zur Installation ausstehen.

Der Zeitpunkt für die Installation von Upgrades (apt-daily-upgrade) bzw. den Download der dafür benötigten Pakete (apt-daily) wird über systemd Timer festgelegt.

Diese können mit systemctl status angezeigt werden. Beispiel:

root@wormhole:~# systemctl status apt-daily.timer apt-daily-upgrade.timer
* apt-daily.timer - Daily apt download activities
     Loaded: loaded (/lib/systemd/system/apt-daily.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Tue 2022-10-11 08:09:44 UTC; 1h 44min ago
    Trigger: Tue 2022-10-11 18:20:46 UTC; 8h left
   Triggers: * apt-daily.service

Oct 11 08:09:44 wormhole systemd[1]: Started Daily apt download activities.

* apt-daily-upgrade.timer - Daily apt upgrade and clean activities
     Loaded: loaded (/lib/systemd/system/apt-daily-upgrade.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Tue 2022-10-11 08:09:44 UTC; 1h 44min ago
    Trigger: Wed 2022-10-12 06:48:03 UTC; 20h left
   Triggers: * apt-daily-upgrade.service

Oct 11 08:09:44 wormhole systemd[1]: Started Daily apt upgrade and clean activities.

Die “Trigger”-Zeile zeigt den Zeitpunkt der nächsten Ausführung an. Wie man den Zeitpunkt der Ausführung verändert, steht im Debian Wiki.

Systeme mit grafischer Benutzeroberfläche (Gnome)

Bei allen Debian Systemen seit Stretch (Debian 9) mit Gnome Desktop sollte unattended-upgrades bereits standardmässig installiert sein. Bei diesen Systemen könnte man (wenn man die nicht durchlaufen lässt) die Updates beim Shutdown einspielen. Die entsprechende Option:

Unattended-Upgrade::InstallOnShutdown "true";

Das verlangsamt das Herunterfahren unter Umständen zwar erheblich, wäre aber eine Alternative zum manuell aktualisieren.