Automatische Updates unter Debian

Was Windows Benutzer schon lange kennen (und oftmals nerven) ist bei Linux normalerweise nicht vorhanden: Automatische Updates. Mit wenigen Schritten kann man aber auch ein Debian Linux dazu bringen, Updates automatisch herunterzuladen und zu installieren. Auch eventuell benötigte Neustarts des Rechners sind dabei konfigurierbar.



1. Einleitung

Debian wird normalerweise mit dem Befehl apt auf dem laufenden gehalten.Allerdings muss dieser Befehl manuell ausgeführt werden. Unter einigen grafischen Oberflächen bekommt man immerhin einen Hinweis, dass Updates vorliegen. Was bei Desktopsystemen eher störend ist, kann bei Servern sehr von Vorteil sein, denn diese werden gerne vergessen, immer auf den neuesten Stand zu halten. Was besonders bei Sicherheitskritischen Patches zu einem Problem werden kann.

Bei Desktopsystemen würde ich persönlich eher davon absehen. Windows-Nutzer dürften mit einem wehmütigen Ton darüber berichten können. Man startet den Rechner, hat noch nicht sein benötigtes Programm gestartet und schon kommt der Hinweis, dass der Rechner dringend neu gestartet werden muss. Windows hat beim Neustart schon ein Update im Hintergrund geladen, was eben einen Neustart benötigt. Kommt man diesem nicht nach, kann dies zu unangenehmen Nebeneffekten führen.

Heute betreiben viele auch privat einen oder sogar mehrere Server zu Hause, und wenn es sich dabei nur um einen Rapsberry Pi handelt. Und diese werkeln brav im Hintergrund und werden, was die “Pflege” angeht, vernachlässigt. Und in den Zeiten, wo dieser nicht gebraucht wird, wäre ein Neustart normalerweise kein Problem. Und hier sind automatische Updates eine praktische Angelegenheit.


2. Einrichtung

2.1 Paketinstallation

Es werden zwei Pakete benötigt, die über die Paketverwaltung installiert werden:

$ sudo apt-get install unattended-upgrades apt-listchanges

2.2 Konfiguration

Nach der Installation der beiden Pakete befindet sich unterhalb von /etc/apt/apt.conf.d eine neue Beispieldatei mit dem Namen 50unattended-upgrades. Diese zu editieren ist etwas unübersichtlich. Daher empfehle ich diese umzubennen und eine neue anzulegen:

$ sudo mv /etc/apt/apt.conf.d/50unattended-upgrades /etc/apt/apt.conf.d/.50unattended-upgrades.bak
$ sudo vi /etc/apt/apt.conf.d/50unattended-upgrades

2.2.1 Paketquellen angeben

Dort wird nun eingetragen, was alles automatisch von dem Update Mechanismus einbezogen werden soll. Ähnlich der /etc/apt/source.list, werden nun die Paketquellen angegeben. Diese Version ist für Debian Distributionen:

Unattended-Upgrade::Origins-Pattern {
        "origin=Debian,codename=${distro_codename}-updates";
        "origin=Debian,codename=${distro_codename}-proposed-updates";
        "origin=Debian,codename=${distro_codename},label=Debian";
        "origin=Debian,codename=${distro_codename},label=Debian-Security";
        "origin=Debian,codename=${distro_codename}-security,label=Debian-Security"; 
        "o=Debian Backports,a=${distro_codename}-backports,l=Debian Backports";
};
2.2.1.1 Version für Raspberry Pi

Auch wenn Rasbian für den Raspberry Pi eigentlich eine Debian Distribution ist, so gibt es Unterschiede. Einer davon ist, dass es keine getrennten Quellen für Security Updates gibt. Daher muss die Konfiguration bei einem Raspberry Pi etwas angepasst werden:

Unattended-Upgrade::Origins-Pattern {
        "origin=Raspbian,codename=${distro_codename},label=Raspbian";
        "origin=Raspberry Pi Foundation,codename=${distro_codename},label=Raspberry Pi Foundation";
};

2.2.2 eMail senden bei Fehlern

Soll im Fehlerfall eine eMail gesendet werden, dann kommt noch folgender Eintrag hinzu:

Unattended-Upgrade::Mail "root";

Möchte man eMails Adressen im Internet nutzen, dann muss zuvor der SMTP Dienst konfiguriert werden, so dass der Rechner generell in der Lage ist, eMails nach draußen zu versenden.

2.2.3 Aufräumen nach Update

Oftmals passiert es nach einem Update, dass alte Pakete obsolet geworden sind. Diese würde man manuell mit sudo apt autoremove entfernen. Auch dies kann mit folgendem Eintrag automatisiert werden:

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

2.2.4 Automatischer Neustart

Bisher werden die Updates nur herunter geladen und installiert. Aber bei Systemupdates (zum Beispiel neuer Kernal) wird kein Update durchgeführt. Es macht also Sinn, dass der Rechner in einer ungenutzten Zeit dann automatisch neu gestartet wird:

Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";

2.2.5 Komplette Datei

In diesem Beispiel sieht die Datei /etc/apt/apt.conf.d/50unattended-upgrades wie folgt aus:

Unattended-Upgrade::Origins-Pattern {
        "origin=Debian,codename=${distro_codename}-updates";
        "origin=Debian,codename=${distro_codename}-proposed-updates";
        "origin=Debian,codename=${distro_codename},label=Debian";
        "origin=Debian,codename=${distro_codename},label=Debian-Security";
        "origin=Debian,codename=${distro_codename}-security,label=Debian-Security"; 
        "o=Debian Backports,a=${distro_codename}-backports,l=Debian Backports";
};
Unattended-Upgrade::Mail "root";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "05:00";

In der vorher abgespeicherten Konfigurationsdatei stehen noch viele weitere Optionen drin, die auch entsprechend beschrieben sind. Bei Bedarf kann diese Datei den eigenen Bedürfnissen entsprechend angepasst werden.

2.2.5.1 Komplette Datei für Raspian (Raspberry Pi)

Und noch die Version für den Raspberry Pi:

Unattended-Upgrade::Origins-Pattern {
        "origin=Raspbian,codename=${distro_codename},label=Raspbian";
        "origin=Raspberry Pi Foundation,codename=${distro_codename},label=Raspberry Pi Foundation";
};
Unattended-Upgrade::Mail "root";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "05:00";

2.2.6 Verfügbare Origins-Muster abfragen

Wie man sehen kann, gibt es bei den Paketquellen (Origins) Unterschiede bei den Distributionen. Um sich anzuschauen, welche Origins konfiguriert werden können, dient folgender Befehl:

$ sudo apt-cache policy 

2.3 Automatische Updates aktivieren

Es gibt nun zwei Möglichkeiten, wie und wann die Updates abgerufen und installiert werden sollen. Die eine Möglichkeit ist, dass periodisch die Updates abgerufen (sudo apt update) und dann direkt heruntergeladen und installiert werden (sudo apt upgrade). Oder man kann auch regelmäßig auf Updates prüfen, aber nur alle X Tage diese auch herunterladen und installieren, sowie auch das Aufräumen nur alle Y Tage durchführen. So könnte man zum Beispiel nur einmal die Woche den Updater laufen lassen.

2.3.1 Updates periodisch ausführen

Sollen regelmäßig nach Updates geschaut werden und diese dann auch direkt installiert werden, kann dies recht einfach mit folgendem Befehl erledigt werden:

$ sudo dpkg-reconfigure -plow unattended-upgrades

Es kommt eine Abfrage, ob die automatischen Updates aktiviert werden sollen:

Nach der Bestätigung, wird unterhalb von /etc/apt/apt.conf.d die Datei 20auto-upgrades angelegt, bzw. konfiguriert:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

Um zu kontrollieren, ob der Dienst läuft:

$ systemctl status unattended-upgrades.service

Und sollte folgendes Ergebnis bekommen:

● unattended-upgrades.service - Unattended Upgrades Shutdown
   Loaded: loaded (/lib/systemd/system/unattended-upgrades.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-02-11 15:09:40 CET; 38min ago
     Docs: man:unattended-upgrade(8)
 Main PID: 31195 (unattended-upgr)
    Tasks: 2 (limit: 1935)
   CGroup: /system.slice/unattended-upgrades.service
           └─31195 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal

2.3.2 Updates Timer gesteuert

Möchte man aber ein wenig mehr Kontrolle haben und Updates nur alle paar Tage abrufen, so legt man unterhalb von /etc/apt/apt.conf.d eine Datei mit dem Namen 02periodic an. Diese Datei dient zur Steuerung über den cron Mechanismus:

$ sudo vi /etc/apt/apt.conf.d/02periodic

Dort sollten natürlich als erstes das ganze eingeschaltet werden:

APT::Periodic::Enable "1";

In welchem Abstand von X-Tagen soll ein sudo apt update ausgeführt werden. Also wann soll nach neuen Updates gesucht werden. Gibt man die Ziffer “0” an, so wird diese Funktion deaktiviert:

APT::Periodic::Update-Package-Lists "7";

In diesem Beispiel wird alle 7 Tage nach neuen Updates gesucht.

Jetzt die Frage, wann eventuell vorhandene Updates heruntergeladen werden sollen. Da hier ein sudo apt upgrade --download-only ausgeführt wird, werden die neuen Pakete nur heruntergeladen, aber nicht installiert. Dies kann man ggf. jeden Tag laufen lassen, da es hier zu keinen Problemen kommen kann. Da aber im vorherigen Punkt nur alle 7 Tage nach neuen Updates gesucht wird, kann dadurch auch nur alle 7 Tage eventuelle Updates herunter geladen werden. Auch hier kann mit “0” dies deaktiviert werden:

APT::Periodic::Download-Upgradeable-Packages "1";

Und jetzt kommt der eigentliche Update-Vorgang. Auch dies kann als ein Intervall in Tagen angegeben, bzw. durch “0” abgeschaltet werden:

APT::Periodic::Unattended-Upgrade "1";

Auch sollte hier ein sudo apt autoremove und auch ein sudo apt autoclean ausgeführt werden. Dies kann zum Beispiel alle 30 durchlaufen werden:

APT::Periodic::AutoremoveInterval "30";
APT::Periodic::AutocleanInterval "30";

Auch hier kann eine eMail versendet werden, allerdings nur an den Benutzer root:

APT::Periodic::Verbose "2";

Folgende Möglichkeiten stehen hier zur Verfügung:

  • 0 –> Kein Bericht
  • 1 –> Fortschrittsreport
  • 2 –> Erweiterte Ausgabe (Verbose Mode)
  • 3 –> Debug Ausgabe

Komplett sähe die Datei dann wie folgt aus:

APT::Periodic::Enable "1";
APT::Periodic::Update-Package-Lists "7";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutoremoveInterval "30";
APT::Periodic::AutocleanInterval "30";

3. Überprüfen & Test

Um zu überprüfen, ob die unbeaufsichtigten Updates auch funktionieren, kann man einen Trockenlauf (dry run) durchführen. Dabei wird so getan, ob ein Update und Upgrade durchgeführt wird, ohne aber wirklich dies auf dem System auszuführen. Also quasi nur eine Simulation:

$ sudo unattended-upgrades --dry-run --debug

Möchte man real einen Durchlauf machen, dann lässt man einfach den Parameter --dry-run weg:

$ sudo unattended-upgrades --debug

3.1 Logfiles

Unterhalb von /var/log/unattended-upgrades findet man die Logfiles für den Dienst. Hier kann man nachsehen, ob alles Erfolgreich gelaufen ist oder ob es zu Fehlern kam:

$ tail unattended-upgrades.log

Damit bekommt man die letzten Einträge, von dem weiter oben ausgeführten Testlauf:

2021-02-11 16:55:35,710 DEBUG applying set ['libfastjson4']
2021-02-11 16:55:41,248 DEBUG left to upgrade {'libpcre2-posix0'}
2021-02-11 16:55:42,173 DEBUG applying set ['libpcre2-posix0']
2021-02-11 16:55:47,182 DEBUG left to upgrade set()
2021-02-11 16:55:47,184 INFO All upgrades installed
2021-02-11 16:55:49,881 DEBUG InstCount=0 DelCount=0 BrokenCount=0
2021-02-11 16:55:49,998 DEBUG Extracting content from /var/log/unattended-upgrades/unattended-upgrades-dpkg.log since 2021-02-11 16:37:59
2021-02-11 16:55:50,048 ERROR No /usr/bin/mail or /usr/sbin/sendmail,can not send mail. You probably want to install the mailx package.
2021-02-11 16:55:50,052 WARNING Found /var/run/reboot-required, rebooting
2021-02-11 16:55:50,150 WARNING Shutdown msg: b"Shutdown scheduled for Tue 2021-02-12 04:00:00 CET, use 'shutdown -c' to cancel."

In diesem Logfile werden die Pakete, die installiert, bzw. aufgeräumt wurden angezeigt. Ebenso wird angezeigt, wann der nächste Neustart durchgeführt wird. Besonders im Fehlerfall ist diese Datei sehr hilfreich.


4. Fazit

Mit wenigen Konfigurationsschritten kann man sich das Leben wesentlich einfacher machen. So werden die Systeme immer auf den neuesten Stand gehalten, oder zumindest immer die Security Fixes regelmäßig installieren lassen. Dies nimmt doch ein wenig Arbeit ab, bzw. hilft bei den Tätigkeiten, die nicht nur leidig sind, sondern auch oft gerne vergessen werden.

Kleiner Hinweis so nebenbei: Falls versehentlich mal Dateien oder direkt die ganze Partition gelöscht wurde, kann möglicherweise HIER Hilfe finden.


Quellen:

https://wiki.debian.org/UnattendedUpgrades

0 Comments
Älteste
Neueste
Inline-Feedbacks
Alle Kommentare anzeigen
Nach oben scrollen