Arch Linux – Automatisches Update

Veröffentlicht von cmuench am

Ich betreibe seit einigen Monaten meine Linux Workstation und einen kleinen Intel NUC Server mit Arch Linux. Arch Linux ist ein sogenannte Rolling Release Distribution. Das bedeutet, dass es keine klassische Veröffentlichungen z.B. jedes halbe Jahr gibt. Aktualisierungen werden relativ zeitnah ausgerollt und stehen zur Verfügung. Interessanterweise geht dabei relativ wenig kaputt. In der gesamten Zeit in der ich Arch Linux betreibe ist bei mir einmal das System nicht hochgefahren da es einen kleinen Bug im Paket LVM gab. Das konnte ich mit einem Downgrade des Pakets in einem über USB-Stick hochgefahrenen System leicht wieder beheben. Das zweite Problem war nach dem Update meines Nvidia Treibers. Es gab dann Sound-Probleme, wenn man den Ton über das Display-Port-Kabel übertrug. Alles in allem relativ schmerzfrei. Auf der anderen Seite erhält man aber auch sehr schnell Fehlerkorrekturen und neue Funktionen oder einen neuen Linux-Kernel.

Arch Linux auf dem privaten Server

Einige Leute sagen, dass es keine gute Idee ist einen Server mit Arch zu betreiben. Da geht es aber mehr um Hersteller-Support und andere Themen die eher für den professionellen Bereich des Hostings gelten. Ich selbst betreibe einen Arch Server zuhause in einem kleinen Serverschrank. Das ist also mein privates System. Auch hier möchte ich gerne immer auf dem neuesten Stand sein. Um anstehende Aktualisierungen nicht zu verpassen, überwache ich alles Rechner mit checkmk.

check_mk – Überwachung der zu aktualisierenden Pakete

Aktualisierung über systemd Timer

Da es aber bei Arch sehr häufig (manchmal mehrmals am Tag) neue Pakete gibt, schlägt mein Monitoring sehr häufig an. Bisher habe ich auf dem Server jede Aktualisierung einfach eingespielt und hatte hier bisher keine Probleme. Daher dachte ich, man müsste doch das Aktualisieren irgendwie automatisieren können. Und siehe da in der Arch Community hat jemand so etwas natürlich schon gemacht.

https://www.techrapid.uk/2017/04/automatically-update-arch-linux-with-systemd.html

Die Lösung ist relativ einfach. Man legt einen Service an, der funktionsfähig ist, sobald eine Netzwerkverbindung möglich ist. Der Service kann über den Paket-Manager pac (die sonst manuelle Arbeit) automatisch übernehmen. Ein Timer wird nach dem Hochfahren des Systems gestartet. Dieser Timer starten (wie ein Cronjob) den Service immer alle 60 Minuten.

Um das in euer Arch Linux einzubauen, müsst ihr zwei Dateien anlegen.

Den Service unter /etc/systemd/system/autoupdate.service

[Unit]
Description=Automatic Update
After=network-online.target 

[Service]
Type=simple
ExecStart=/usr/bin/pacman -Syuq --noconfirm
TimeoutStopSec=180
KillMode=process
KillSignal=SIGINT

[Install]
WantedBy=multi-user.target

Den Timer unter /etc/systemd/system/autoupdate.timer

[Unit]
Description=Automatic Update when booted up after 5 minutes then check the system for updates every 60 minutes

[Timer]
OnBootSec=5min
OnUnitActiveSec=60min
Unit=autoupdate.service

[Install]
WantedBy=multi-user.target

Danach muss der systemd Timer aktiviert werden.

systemctl enable --now /etc/systemd/system/autoupdate.timer

Prüfen ob alles funktioniert …

Eine Prüfung ob der Timer gestartet wurde kann man wie folgt durchführen:

journalctl -u autoupdate.timer

Wenn ihr schauen möchtet, welche Timer im System laufen und wann diese wieder gestartet werden, dann ist der folgende Befehl interessant.

systemctl list-timers

Wenn alles korrekt läuft könnt ihr im Protokoll von pacman unter /var/log/pacman.log sehen, dass jede Stunde einen Prüfung ggf. auch eine Aktualisierung gab.

2020-01-25T16:28:40+0000] [PACMAN] synchronizing package lists
[2020-01-25T16:28:41+0000] [PACMAN] starting full system upgrade
[2020-01-25T16:28:43+0000] [ALPM] transaction started
[2020-01-25T16:28:43+0000] [ALPM] upgraded python (3.8.1-3 -> 3.8.1-4)
[2020-01-25T16:28:43+0000] [ALPM] upgraded python-six (1.13.0-2 -> 1.14.0-1)
[2020-01-25T16:28:43+0000] [ALPM] transaction completed
[2020-01-25T16:28:43+0000] [ALPM] running '30-systemd-update.hook'...
[2020-01-25T17:28:40+0000] [PACMAN] Running '/usr/bin/pacman -Syuq --noconfirm'
[2020-01-25T17:28:40+0000] [PACMAN] synchronizing package lists
[2020-01-25T17:28:41+0000] [PACMAN] starting full system upgrade
[2020-01-25T18:28:50+0000] [PACMAN] Running '/usr/bin/pacman -Syuq --noconfirm'
[2020-01-25T18:28:50+0000] [PACMAN] synchronizing package lists
[2020-01-25T18:28:51+0000] [PACMAN] starting full system upgrade
[2020-01-25T19:29:01+0000] [PACMAN] Running '/usr/bin/pacman -Syuq --noconfirm'
[2020-01-25T19:29:01+0000] [PACMAN] synchronizing package lists
[2020-01-25T19:29:02+0000] [PACMAN] starting full system upgrade

Wenn euch das ganze gefällt oder auch nicht, dann hinterlasst einfach einen Kommentar in meinem Blog.

Update 26.01.2020 14.30 Uhr

Ich habe mich entschieden alles als AUR Paket zu erstellen. Das ist mein erster Paket für Arch Linux, welches ich veröffentlicht habe.

https://aur.archlinux.org/packages/pacman-auto-update/

Damit ist die Installation wesentlich einfacher möglich,


0 Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.