Wer Gentoo einsetzt, weiß vermutlich genau, warum er sich für diese Distribution entschieden hat. Man hat viel Kontrolle über das eigene System und weiß ziemlich genau, was darauf passiert. Diese Freiheit bedeutet aber auch, dass regelmäßige Updates etwas mehr Aufmerksamkeit benötigen. Auf meinem Gentoo-System hat sich deshalb über die Zeit eine feste Update-Routine entwickelt. Repository synchronisieren, @world aktualisieren, Konfigurationsänderungen (und Gentoo-News) prüfen und anschließend die üblichen Wartungsarbeiten durchführen. Dazu kommen bei mir Docker-Compose-Projekte, deren Images ebenfalls aktuell gehalten werden sollen.
Irgendwann stellte ich mir daher die Frage: Warum eigentlich jedes Mal dieselben Befehle und Kontrollen von Hand abarbeiten?
Aus dieser Überlegung ist mein Gentoo Update Skript gentoo-update entstanden.
Warum ich gentoo-update entwickelt habe
Mein Ziel war von Anfang an nicht, Gentoo möglichst unbeaufsichtigt zu aktualisieren. ABER, gerade bei Gentoo möchte ich wichtige Entscheidungen weiterhin selbst treffen. Stattdessen soll mir gentoo-update die immer wiederkehrenden Arbeitsschritte möglichst abnehmen. Das Skript bringt sie in eine sinnvolle Reihenfolge und zeigt mir anschließend übersichtlich, was passiert ist.
Ein vollständiger Durchlauf kümmert sich unter anderem um:
- die Synchronisierung der Gentoo-Repositories,
- das Update von
@world, - ausstehende Konfigurationsänderungen,
- ungelesene Gentoo-News,
@preserved-rebuild,depclean,- die Prüfung auf defekte Reverse Dependencies,
- das Aufräumen der Distfiles,
- die Kontrolle der Portage-Konfiguration mit
eix-test-obsolete, - sowie die Wartung erkannter Docker-Compose-Projekte.
Damit ersetzt das Skript nicht die einzelnen Gentoo-Werkzeuge. Es verbindet sie vielmehr zu einem reproduzierbaren Arbeitsablauf.
Automatisieren, ohne die Kontrolle abzugeben
Ein wichtiger Grundsatz bei der Entwicklung war für mich: gentoo-update soll kritische Entscheidungen nicht einfach selbst treffen. Stehen beispielsweise Änderungen an Konfigurationsdateien an, bleibt etc-update interaktiv. Auch Gentoo-News werden nicht stillschweigend als gelesen markiert. Ähnlich verhält sich das Skript bei Docker. Container, die nicht von Docker Compose verwaltet werden, werden nicht einfach automatisch neu erstellt. Das Gentoo Update Skript automatisiert also den Ablauf, aber nicht die Verantwortung für das System.
Genau diese Trennung ist für mich einer der wichtigsten Vorteile des Tools.
Gentoo Updates zuerst mit Dry-Run prüfen
Bevor ich Änderungen am System durchführe, möchte ich häufig auch erst einmal nur wissen, was überhaupt ansteht. Deshalb besitzt gentoo-update einen Dry-Run-Modus.
Mit
gentoo-update --dry-run
kann ich einen vollständigen Durchlauf in einer möglichst sicheren Vorschau betrachten.
Paketupdates, depclean, preserved-rebuild und die Distfile-Bereinigung verwenden dabei ihre jeweiligen Preview-Möglichkeiten. Auch die Docker-Umgebung wird lediglich untersucht. Das Skript zieht keine Images und erstellt keine Container neu.
Wichtig ist außerdem: Im Dry-Run werden die Repository-Metadaten nicht synchronisiert. Die Paketvorschau basiert bewusst auf dem aktuell lokal vorhandenen Stand. So kann ich mir zunächst einen Überblick verschaffen und anschließend entscheiden, wann ich das eigentliche Update durchführen möchte.
Update und Wartung getrennt ausführen
Nicht immer möchte ich den kompletten Ablauf auf einmal starten. Deshalb kann gentoo-update seine beiden von mir definierten Hauptphasen auch getrennt ausführen. Für Repository-Synchronisation, World-Update und die anschließenden administrativen Prüfungen verwende ich:
gentoo-update --update
Die nachgelagerten Wartungsarbeiten lassen sich separat starten:
gentoo-update --maintenance
Beide Varianten können wiederum mit --dry-run kombiniert werden.
Für mich hat sich diese Aufteilung besonders beim Testen neuer Versionen bewährt. Sie ist aber auch im normalen Betrieb praktisch, wenn ich Update und Wartung bewusst voneinander trennen möchte.
Docker-Compose-Projekte kontrolliert aktualisieren
Ein weiterer wichtiger Bestandteil meiner persönlichen Update-Routine ist Docker. gentoo-update erkennt konfigurierte Docker-Compose-Projekte und kann deren Images aktualisieren. Anschließend kontrolliert das Skript, ob die Container wieder laufen und tatsächlich das erwartete Image verwenden. Dabei war mir die Reihenfolge wichtig. Alte Docker-Images werden nicht einfach vorab gelöscht. Ein Docker-Prune erfolgt erst nach den eigentlichen Wartungsarbeiten und nur, wenn die vorherigen Prüfungen erfolgreich waren. Container ohne Docker-Healthcheck werden ebenfalls entsprechend gekennzeichnet. Das Skript behauptet in diesem Fall also nicht, einen Gesundheitszustand geprüft zu haben, den Docker gar nicht bereitstellt.
Eine Zusammenfassung statt vieler einzelner Befehle
Nach einem Update möchte ich schnell erkennen können, was tatsächlich passiert ist. Deshalb erstellt gentoo-update am Ende eine Zusammenfassung der einzelnen Arbeitsschritte. Dort sehe ich unter anderem, welche Aufgaben erfolgreich waren, welche übersprungen wurden und ob Warnungen oder Fehler aufgetreten sind.
Normale produktive Durchläufe werden zusätzlich protokolliert. Dadurch kann ich später nachvollziehen, was während eines Updates passiert ist.
Das klingt zunächst nach einer Kleinigkeit. Im täglichen Umgang mit einem Server macht eine solche Zusammenfassung die Wartung für mich jedoch deutlich angenehmer!
Für wen ist gentoo-update gedacht?
gentoo-update ist ursprünglich für mein eigenes Gentoo-System entstanden. Entsprechend orientiert sich das Skript an den Werkzeugen und Abläufen, die ich dort tatsächlich verwende. Es ist daher kein Versuch, den einen universellen Update-Manager für jedes Gentoo-System zu bauen.
Viele der einzelnen Schritte dürften anderen Gentoo-Nutzern trotzdem bekannt vorkommen. Wer eine ähnliche Update-Routine verwendet, kann das Skript direkt einsetzen, an die eigene Umgebung anpassen oder einfach als Ausgangspunkt für eine eigene Lösung verwenden.
Gerade darin sehe ich einen weiteren Mehrwert der Veröffentlichung: Der komplette Quellcode ist einsehbar. Man kann also genau nachvollziehen, welche Befehle ausgeführt werden und an welchen Stellen bewusst keine Automatisierung stattfindet.
gentoo-update bleibt ein transparentes Werkzeug
Gentoo lebt für mich auch davon, dass ich verstehe, was auf meinem System passiert. Ein Update-Skript sollte diesen Vorteil nicht zunichtemachen. gentoo-update soll Gentoo deshalb nicht weniger transparent machen. Es soll die regelmäßig notwendigen Arbeiten übersichtlicher und reproduzierbarer machen, ohne mir die Kontrolle über das System aus der Hand zu nehmen. Das war meine ursprüngliche Motivation für das Projekt und ist auch weiterhin der Maßstab für neue Funktionen.
gentoo-update herunterladen und Quellcode ansehen
Den aktuellen Quellcode, die Dokumentation, das Changelog und die veröffentlichten Versionen meines Gentoo Update Skripts findet ihr auf GitLab:
Dort stehen auch die aktuellen Releases sowie die zugehörigen Git-Tags und Source-Code-Archive zum Download bereit. Und wenn ihr einen Bug findet oder Verbesserungsvorschläge habt, dann schreibt mir gerne.