Flatpaks mit Systemd automatisch aktualisieren

Aus LinuxUser 02/2023

Flatpaks mit Systemd automatisch aktualisieren

© Stanislav Rishnyak / 123RF.com

Update-Automatik

Automatische Flatpak-Updates lassen sich auch ohne den Einsatz von Paketmanagern einrichten. Hier kommen Services und Timer von Systemd zu Hilfe.

Alternative Paketsysteme wie Flatpak, Snap und Appimage erfreuen sich zunehmender Beliebtheit. Sie bieten diverse Vorteile, sowohl für Entwickler als auch für die Nutzer. So lassen sich etwa experimentelle Versionen einer Software testen, ohne in das Paketmanagement der Distribution einzugreifen. Der Betrieb mehrerer Versionen einer Software zum Vergleich lässt sich damit ebenfalls problemlos realisieren. Der Umstand, dass sich Flatpaks agnostisch gegenüber Distributionen verhalten, entlastet Entwickler, die ihre Software deshalb nur einmal in diesem Format erstellen müssen.

Vor- und Nachteile

Aber es gibt auch Nachteile. Ob dazu der stark erhöhte Platzbedarf der Pakete gehört, liegt angesichts der niedrigen Preise für Datenträger in jedermanns eigenem Ermessen. Einen eindeutigen Nachteil gibt es aber im Aktualisierungsverhalten von Flatpaks und Appimages. Unter Gnome Software, Plasma Discover oder MintUpdate lassen sich Flatpaks zwar automatisch aktualisieren, aber nicht jeder mag diese Form des Paketmanagements. Wer seine Software per Kommandozeile aktuell hält, bleibt sogar komplett außen vor und erhält nicht einmal eine Benachrichtigung über zu aktualisierende Flatpaks.

Da die Flatpak-Entwickler keine weiteren Schritte für automatisierte Updates planen, liegt die Verantwortung dafür bei den Desktop-Umgebungen. Deswegen stellen wir in diesem Artikel eine Methode für Nutzer von Systemd vor, die das automatische Aktualisieren der installierten Flatpaks zeitgesteuert über den System- und Sitzungsmanager vornimmt. Dieses Verfahren entlastet Sie nicht nur von der Notwendigkeit der manuellen Aktualisierung, sondern bietet auch eine kleine Lehrstunde darin, wie einfach es gelingt, Systemd-Dienste und entsprechende Timer zu erstellen.

System und User

Flatpaks lassen sich sowohl im User- als auch im Systemkontext installieren. Dementsprechend erstellen Sie getrennte Dienste und Timer für beide Kontexte. Im Verzeichnis /etc/systemd/ liegen dazu unter anderem die beiden Unterverzeichnisse user/ und system/, die die Service-Dateien je nach ihrer Bestimmung enthalten (Abbildung 1).

Abbildung 1: Systemd unterscheidet zwischen Diensten, die systemweit gelten und solchen, die User steuern. Ebenso verhält es sich bei Flatpak.

Abbildung 1: Systemd unterscheidet zwischen Diensten, die systemweit gelten und solchen, die User steuern. Ebenso verhält es sich bei Flatpak.

Die systemweite Instanz von Systemd darf nur der Administrator des Systems steuern. Daneben gibt es pro User eine weitere Instanz. Sie startet und stoppt auf Anforderung, wenn sich Benutzer an- oder abmelden. Es läuft maximal eine User-Instanz pro Benutzer, unabhängig davon, wie oft er angemeldet ist. Nur der entsprechende Benutzer (oder ein Administrator) besitzt die Berechtigung, die eigenen User-Dienste zu steuern. Ausführlicher erklärt dieses Konzept das Arch-Linux-Wiki [1].

In welchem Kontext die Dienste zur Aktualisierung der installierten Flatpaks angelegt werden, richtet sich danach, ob die Flatpaks in User- oder Systemkontext installiert wurden. Das finden Sie mit dem Befehl flatpak list (Abbildung 2) heraus. Er zeigt alle installierten Flatpaks und Runtimes und in der rechten Spalte den Kontext, in dem sie installiert wurden. Sollten bei Ihnen beide Kontexte gegeben sein, erstellen Sie einfach Dienste für User und System.

Abbildung 2: Der Befehl <code>flatpak list</code> zeigt ganz rechts an, in welchem Kontext eine Anwendung als Flatpak installiert wurde.

Abbildung 2: Der Befehl flatpak list zeigt ganz rechts an, in welchem Kontext eine Anwendung als Flatpak installiert wurde.

Schnell aufgesetzt

Listing 1 zeigt einen Systemd-Service für den User, den Sie im User-Kontext von Systemd unter dem Namen update-user-flatpaks.service speichern. Er lässt sich an zwei Stellen ablegen. Verwenden den Rechner mehrere Anwender, die alle den Dienst nutzen sollen, so ist /etc/systemd/user/ der richtige Ort. Bei Einbenutzersystemen legen Sie den Dienst stattdessen unter ~/.config/systemd/user/ ab.

Am einfachsten erstellen Sie die Service-Datei mit dem Befehl aus Listing 2, geben im Editor den Text aus Listing 1 ein und speichern ihn. Analog verfahren Sie für die systemweite Variante aus Listing 3. Dieser Service-Datei geben Sie den Namen update-system-flatpaks.service und legen sie unter /etc/systemd/system ab.

Listing 1

User-bezogener Dienst

# update-user-flatpaks.service
# im Ordner /etc/systemd/user/
[Unit]
Description=Update user Flatpaks
[Service]
Type=oneshot
ExecStart=/usr/bin/flatpak --user update -y
[Install]
WantedBy=default.target

Listing 2

Datei editieren

$ sudo nano /etc/systemd/user/update-user-flatpaks.service

Listing 3

Systemweiter Dienst

# update-systems-flatpaks.service
# im Ordner /etc/systemd/system/
[Unit]
Description=Update system Flatpaks
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/bin/flatpak --system update -y
[Install]
WantedBy=multi-user.target

Für die Steuerung müssen Sie nun noch Timer anlegen, die Sie in Listing 4 (User) und Listing 5 (System) finden. Die beiden Timer erhalten die Bezeichnung update-user-flatpaks.timer und update-system-flatpaks.timer und landen wiederum unter /etc/systemd/user/ respektive /etc/systemd/system/.

Listing 4

User-bezogener Timer

# update-user-flatpaks.timer
# in /etc/systemd/user/
[Unit]
Description=Update user Flatpaks daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target

Listing 5

Systemweiter Timer

# update-system-flatpaks.timer
# in /etc/systemd/system/
[Unit]
Description=Update system Flatpaks daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target

Die Angabe OnCalendar in den beiden Listings ermöglicht das Anpassen an die gewünschten Aktualisierungszeiten (Abbildung 3). Sollte die dort eingetragene tägliche Aktualisierung nicht passen, dann verwenden Sie beispielsweise OnCalendar=weekly für eine wöchentliche Ausführung.

Abbildung 3: In <code>/etc/systemd/user/</code> befinden sich nach dem Einrichten eine Service-Datei sowie ein Timer. In <code>/etc/systemd/system/</code> sollten analog diese beiden Dateien vorhanden sein.

Abbildung 3: In /etc/systemd/user/ befinden sich nach dem Einrichten eine Service-Datei sowie ein Timer. In /etc/systemd/system/ sollten analog diese beiden Dateien vorhanden sein.

Bei Bedarf geht es aber auch wesentlich präziser: Um die Aktualisierung an jedem ersten Samstag eines Monats um 18 Uhr zu starten, nutzen Sie den folgenden Eintrag:

OnCalendar=Sat *-*-1..7:*18:00:00

Details zu den Systemd-Timern können Sie bei Interesse wiederum im Arch-Linux-Wiki [2] nachlesen.

Timer aktivieren

Jetzt gilt es, die Timer zu aktivieren. Für den User erledigt das der erste Befehl aus Listing 6, systemweit übernimmt das der zweite. Zum Abschluss veranlassen Sie Systemd mit dem dritten Aufruf dazu, alle Konfigurationsdateien neu zu laden und alle Units neu zu starten. Diesen Befehl führen Sie auch nach allen Änderungen an den Dateien aus.

Listing 6

Timer und Systemd

$ sudo systemctl --user enable --now update-user-flatpaks.timer
$ sudo systemctl --system enable --now update-system-flatpaks.timer
$ sudo systemctl daemon-reload
$ sudo systemd-analyze calendar weekly
$ sudo journalctl -b | grep flatpak

Um zu ermitteln, wann die nächste Aktualisierung stattfindet, verwenden Sie den Aufruf aus der vierten Zeile (Abbildung 4). Bei korrekter Ausgabe wissen Sie auch gleich, dass der Dienst richtig eingerichtet ist.

Abbildung 4: Wann die n&auml;chste Aktualisierung stattfindet, verr&auml;t Ihnen dieser Befehl.

Abbildung 4: Wann die nächste Aktualisierung stattfindet, verrät Ihnen dieser Befehl.

Möchten Sie nach dem Ausführungstermin erfahren, ob die Einrichtung erfolgreich war, hilft der Befehl aus der letzten Zeile von Listing 6. Hier sehen Sie im Erfolgsfall die Ausgabe, die ansonsten flatpak update liefert (Abbildung 5).

Abbildung 5: Mit <code>journalctl -b | grep flatpak</code> sehen Sie im Log genau, was bei den Aktualisierungen seit dem letzten Neustart des Rechners passiert ist.

Abbildung 5: Mit journalctl -b | grep flatpak sehen Sie im Log genau, was bei den Aktualisierungen seit dem letzten Neustart des Rechners passiert ist.

Fazit

Systemd eignet sich für viele Steuerungsaufgaben eines Linux-Systems. So lässt sich in einer halben Stunde auch eine Steuerung der Flatpak-Aktualisierung umsetzen. Sind die Dienste und Timer einmal eingerichtet, überlassen Sie die Updates der Flatpaks zukünftig dem Rechner.

Als Grundlage dieses Artikels dient eine Anleitung von Jordan Williams. Auf seiner Webseite können Sie die in den Listings aufgeführten Inhalte kopieren, sodass Sie diese nicht abtippen müssen [3]. (tle)

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 02/2023 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben