Ob automatische Updates ein Segen oder der Fluch sind, hängt meistens von der Erfahrung ab, die man damit so gemacht hat. Wenn alles hübsch leise und reibungslos im Hintergrund und ohne eigenes Zutun läuft, kurz: automatisch, supi. Dagegen wird sich der ein oder andere an Windows 7 und davor erinnern, wenn einen die Kiste nach der Mittagspause frisch gebootet mit dem Login Screen anfeixt. Selbstredend hat man irgendwas nicht gespeichert gehabt und die ganze schöne Arbeit ist dem Elektro-Äther entfleucht. Und das nur, weil man nicht da war um ‚Nein, verdammte Scheiße, jetzt nicht neu booten!!1!‘ zu klicken. Aber das sind nun alles Opas Geschichten aus dem Krieg, sogar Windows ist diszipliniert worden.

unbeaufsichtigte Upgrades

Weil man(n) sich natürlich nicht ständig aktiv um den eigenen Elektrozoo kümmern kann, bin ich ein großer Freund von dieser Automagie. Auf dem Raspi, der meine Nextcloud beherbergt, sind deswegen „unnattended upgrades“ installiert und aktiviert. Das bewerkstelligt man recht einfach mit einem apt install unattended upgrades und schon wird täglich wenigstens nach Sicherheitsupdates geguckt und der Kram gegebenenfalls installiert.

Nicht!

Gerade ist der Shit mit sudo passiert, was ich zum Anlass genommen habe, mal meiner Cloud-Installation hinterher zu gucken.

Unattended Upgrades hatte ich schon früher mal installert. Ein kurzes sudo apt install unattended-upgrades spült sie auf die Platte SD-Karte. Konfigurieren sollte man es noch: sudo dpkg-reconfigure -plow unattended-upgrades Und? Geht’s? Mit Aptitude kurz nachgeguckt, ob da Updates anstehen: ja. Also ein kleiner Trockenlauf: sudo unattended-upgrades –dry-run. Wie? da soll nichts sein?! Funktioniert also nicht!

Woran liegt’s?

Die Konfiguration sollte zwei Dateien angelegt haben, in der ersten gucken wir nach: sudo nano /etc/apt/apt.conf.d/20auto-upgrades

APT::Periodic::Enable "1";
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "1";
APT::Periodic::Verbose "2";

Soweit scheint alles ok, wichtig sind hier die zweite und dritte Zeile. In der zweiten Zeile, wie oft apt-get update automatisch ausgeführt werden soll. Die „1“ steht in dem Fall für „jeden Tag“, „0“ würde diese Automatik abschalten. Die dritte Zeile bestimmt, wie oft ein „upgrade“ automatisch vorgenommen werden soll.

Werfen wir einen Blick in die andere Datei, da wird festgelegt, was genau aktualisiert werden soll (Auszug): sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

Unattended-Upgrade::Origins-Pattern {
// Codename based matching:
// This will follow the migration of a release through different
// archives (e.g. from testing to stable and later oldstable).
// Software will be the latest available for the named release,
// but the Debian release itself will not be automatically upgraded.
"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";

// Archive or Suite based matching:
// Note that this will silently match a different release after
// migration to the specified archive (e.g. testing becomes the
// new stable).
// "o=Debian,a=stable";
// "o=Debian,a=stable-updates";
// "o=Debian,a=proposed-updates";
// "o=Debian Backports,a=${distro_codename}-backports,l=Debian Backports";
};

Hm „Debian“? Nennt sich das hier nicht „Raspbian“? Genau! In den voreingestellten Repositories ist die Herkunft der Pakete nicht mit Debian bezeichnet. Für „Debian“ gibt es also auch keine Updates oder Upgrades!

Reparieren

Es müssen ein paar Zeilen ergänzt werden, über die Zeit gab es verschiedene Benamsungen. Ich will meine Hand nicht dafür ins Feuer legen, dass folgende schon alle sind:

Unattended-Upgrade::Origins-Pattern {
// Codename based matching:
// This will follow the migration of a release through different
// archives (e.g. from testing to stable and later oldstable).
// Software will be the latest available for the named release,
// but the Debian release itself will not be automatically upgraded.
"origin=Debian,codename=${distro_codename}-updates";
"origin=Raspbian,codename=${distro_codename}-updates";
// "origin=Debian,codename=${distro_codename}-proposed-updates";
"origin=Debian,codename=${distro_codename},label=Debian";
"origin=Raspbian,codename=${distro_codename},label=Raspbian";
"origin=Raspberry Pi Foundation,codename=${distro_codename},label=Raspberry Pi Foundation";
"origin=Debian,codename=${distro_codename},label=Debian-Security";
"origin=Raspbian,codename=${distro_codename},label=Raspbian-Security";

// Archive or Suite based matching:
// Note that this will silently match a different release after
// migration to the specified archive (e.g. testing becomes the
// new stable).
// "o=Debian,a=stable";
// "o=Debian,a=stable-updates";
// "o=Debian,a=proposed-updates";
// "o=Debian Backports,a=${distro_codename}-backports,l=Debian Backports";
};

Glücklich sein

Testet man jetzt den Trockenlauf mit sudo unattended-upgrades –dry-run, kann man im log /var/log/unattended-upgrades/unattended-upgrades.log sehen, dass sich auch was tut.

(swg)