Dieser Artikel beschreibt die Schritte, die ich durchgeführt habe, um meinen Server arthur.barton.de von Debian 9 „Stretch“ auf Debian 10 „Buster“ zu aktualisieren.
Ausgangslage
Diese Anleitung ist natürlich nicht zwingend universell anzuwenden, da sich das Upgrade je nach installierten Paketen natürlich unterschiedlich verhalten kann und unterschiedliche Nacharbeiten erforderlich macht.
Auf Arthur laufen unter anderem die folgenden Dienste:
- AMaViS
- Apache 2
- AutoFS
- Bind 9
- Dovecot
- Fail2Ban
- Fetchmail
- ISC DHCPd
- Mailman 2
- MariaDB
- NFS
- ngIRCd
- NIS
- Postfix
- rsyncd
- Samba
- Transmission
- Zabbix
Das System ist schon lange so konfiguriert, dass möglichst viel über systemd abgedeckt wird (systemd-journald, systemd-networkd, systemd-resolved, systemd-timesyncd, …) und auch „merged /usr
“ ist aktiv.
Zudem sind durchaus Paketquellen von Drittanbietern (Keybase, Resilio Sync, Zabbix, …) sowie die Debian „Backports-Repository“ aktiviert, und alle Pakete auf die dort verfügbaren Versionen aktualisiert – auch das kann eine große Rolle auf den Verlauf des Updates haben, da auf Arthur eben nicht mehr ein reines Debian 9 System läuft.
Grundlage dieses Artikels ist das Kapitel 4 „Upgrade von Debian 9 (Stretch)“ aus den Debian 10 Release Notes für AMD64.
Vorbereitungen
Nicht mehr unterstützte Pakete entfernen
Im Kapitel 5 „Dinge, die Sie über Buster wissen sollten“ sind einige Punkte gelistet, die in Debian 10 „Buster“ nicht mehr oder anders unterstützt werden. Unbedingt lesen!
Die folgenden Pakete habe ich daher bereits vor dem Upgrade auf Arthur entfernt:
Status der installierten Pakete prüfen
Sind Pakete nur halb installiert? Oder werden gezielt zurückgehalten?
dpkg --audit dpkg --get-selections | grep 'hold$' aptitude search "~ahold"
Wenn hier Pakete genannt werden, sollte deren Status vor dem Upgrade auf jeden Fall geprüft und ggf. bereinigt werden!
Paketquellen für Debian 10 „Buster“ aktualisieren
Zunächst habe ich das Release in allen Paketquellen – siehe sources.list(5) – für APT von „stretch“ auf „buster“ geändert (so in der jeweiligen Datei das Release in dieser Form vorhanden ist):
sudo sed -i'' -e 's/stretch/buster/g' \ /etc/apt/sources.list \ /etc/apt/sources.list.d/*.list
Dann habe ich alle Paketquellen aktualisiert um zu testen, dass diese korrekt heruntergeladen werden können:
sudo apt update
Der eigentliche Download der Paketlisten hat erfolgreich funktioniert, allerdings wurde mir noch folgender Fehler präsentiert:
E: Der Wert »stretch-backports« ist für APT::Default-Release ungültig, da solch eine Veröffentlichung in den Paketquellen nicht verfügbar ist.
APT (Advanced Packaging Tool) anpassen
APT Konfiguration: /etc/apt/apt.conf.d/
prüfen
Obiger Fehler ergibt in sofern Sinn, als dass ich in der Datei /etc/apt/apt.conf.d/99local
bisher als Ziel-Release eben „stretch-backports“ angegeben hatte; das muss für Debian 10 „Buster“ dann natürlich angepasst werden: da ich wieder gleich auch die Pakete aus den Backports verwenden will, konfiguriere ich somit den Wert „buster-backports“ für die Variable APT::Default-Release.
Meine gesamte lokale APT-Konfiguration – die regelt, wie APT und die verwandten Tools arbeiten, siehe apt.conf(5) – sieht wie folgt aus:
// /etc/apt/apt.conf.d/99local // 2019-08-04, alex@barton.de APT::Default-Release "buster-backports"; APT::Install-Recommends "0"; APT::Install-Suggests "0"; APT::Get::Show-Versions "true"; Aptitude::CmdLine::Show-Versions "true"; Aptitude::CmdLine::Show-Deps "true"; // Required for "/tmp is noexec" configurations: APT::ExtractTemplates::TempDir "/var/cache/apt/tmp"; // Apt Periodic APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Download-Upgradeable-Packages "1"; APT::Periodic::Unattended-Upgrade "1"; APT::Periodic::AutocleanInterval "7"; APT::Periodic::Verbose "1"; // Unattended Upgrades Unattended-Upgrade::Mail "logcheck";
APT Preferences: /etc/apt/preferences.d/
prüfen
In den „APT preferences“ – siehe apt_preferences(5) – wird konfiguriert, nach welchen Regeln APT verschiedene Versionen ein und desselben Pakets gegeneinander bevorzugt.
Meine (recht umfangreiche, aber für mich universell einsatzbare) Konfiguration in /etc/apt/preferences.d/pinning
sieht wie folgt aus:
Package: * Pin: release l=Alex-Lenny Pin-Priority: 995 Package: * Pin: release l=zabbix Pin-Priority: 991 Package: * Pin: release a=squeeze-backports Pin-Priority: 606 Package: * Pin: release a=wheezy-backports Pin-Priority: 607 Package: * Pin: release a=jessie-backports Pin-Priority: 608 Package: * Pin: release a=stretch-backports Pin-Priority: 609 Package: * Pin: release a=buster-backports Pin-Priority: 610 Package: * Pin: release a=testing Pin-Priority: 3 Package: * Pin: release a=unstable Pin-Priority: 2 Package: * Pin: release a=experimental Pin-Priority: 1
Partitionen schreibbar (read-write) einbinden
Für das Upgrade müssen alle (System-) Dateisysteme beschreibbar sein! Auf Arthur ist normalerweise /boot
nur zum lesen (read-only) eingebunden. Das ändere ich vor dem Upgrade daher wie folgt:
sudo mount -o remount,rw /boot
Testlauf …
Mit folgendem Befahl kann man das Upgrade ähnlich wie in den Release Notes empfohlen simulieren, und so beispielsweise den Speicherbedarf prüfen:
sudo apt -o APT::Get::Trivial-Only=true full-upgrade 2>&1 | less
Upgrade durchführen
Das Upgrade habe ich – ebenfalls wie in den Release Notes empfohlen – in zwei Schritten durchgeführt. Einem „minimalen Upgrade“ und dem eigentlichen „System-Upgrade“.
Während dem Upgrade wird Apt einige Fragen stellen und dazu auffordern, Konfigurationsdateien zu aktualisieren. Meine Strategie ist in der Regel, so wenig Änderungen an den Konfigurationsdateien durchzuführen, die mit den Paketen kommen, sondern wenn immer möglich sogenannte „Drop-in-Verzeichnisse“ und lokale „Override Files“ zu verwenden: so kann ich hier sehr oft einfach die neue Version des Paketbetreuers installieren, ohne meine lokalen Änderungen zu verlieren.
Leider ist das nicht in allen Fällen möglich, und somit musste ich auch einige Konflikte lösen, wobei vimdiff (Cheat Sheet) ein nützliches Tool ist 🙂
Minimales Upgrade
Das „minimale Upgrade“, bei welchem zunächst keine Pakete entfernt werden, wird mit folgendem Befehl angestoßen:
sudo apt-get upgrade
System-Upgrade auf Debian 10 „Buster“
Debian empfiehlt mit folgendem Befehl das gesamte System auf Debian 10 „Buster“ zu aktualisieren:
sudo apt full-upgrade
Mögliche Probleme, die während dem Upgrade auftreten können, sind ebenfalls in den Release Notes bei Debian beschrieben.
System neu starten
Jetzt noch sicherstellen, dass nach wie vor ein Linux Kernel installiert und die „initial RAM disk“ sowie der GRUB-Bootloader aktuell sind …
sudo apt install linux-image-amd64 sudo update-initramfs -u sudo update-grub
… und den System-Neustart auslösen:
sudo reboot
Jetzt ist ein wenig Daumen-Drücken angesagt! 🙂
Aber wenn alles gut geht – was bei mit mit Arthur und Hurzel der Fall war – sollte spätestens nach ein paar Minuten das System wieder über das Netzwerk erreichbar sein und eine neue SSH-Verbindung zulassen.
Aufräumarbeiten
Im Kapitel 5 der Release Notes, „Dinge, die Sie über Buster wissen sollten„, sind einige Punkte aufgeführt, die nach dem Upgrade geprüft werden sollen:
Da ich auf Arthur voll auf systemd setze, brauche ich beispielsweise SysV-rc und dazugehörige Pakete nun nicht mehr (siehe den Abschnitt 5.1.12) und stelle sicher, dass sie vom System entfernt sind:
sudo apt purge initscripts sysv-rc insserv startpar
Auch ist es eine gute Idee zu prüfen, ob und welche Pakete mit nur eingeschränkter Unterstützung durch das Security Team auf dem System installiert sind (Abschnitt 5.2):
check-support-status
Obsolete Pakete aufräumen
Eine Liste der „obsoleten“ Pakete, also Pakete, die in keiner Paketquelle mehr verfügbar aber auf dem lokalen System installiert sind, listet der folgende Befehl auf:
aptitude search '~o'
Diese Pakete sollte man prüfen und nach Möglichkeit entfernen bzw. passende Paketquellen hinzufügen.
Unnötige Pakete entfernen
Mit folgendem Befehl werden alle Pakete entfernt, die als Abhängigkeit eines anderen Pakets installiert wurden, nun aber nicht mehr benötigt werden:
sudo apt autoremove
Konfigurationsdateien aufräumen
Einige Pakete wurden deinstalliert. Hierbei kann es sein, dass Konfigurationsdateien auf dem System belassen wurden. Solche Pakete können mit folgendem Befehl komplett entfernt werden, inklusive der Konfigurationsdateien:
sudo aptitude purge '~c'
Zudem erzeugen dpkg und andere Tools Backups von erneuerten Konfigurationsdateien oder legen neuere Konfigurationsdateien zusätzlich zu den bestehenden an. Solche Dateien habe ich zunächst mit diesem Befehl auflisten lassen:
sudo find /etc \( \ -name '*.dpkg-*' \ -o -name '*.ucf-*' \ -o -iname '*.old' \ -o -iname '*.orig' \ -o -name '*~' \ \) -print
Um sie einzeln zu prüfen, gegebenenfalls mit meinen aktiven Konfigurationsdateien zusammenzuführen – und dann zu löschen. Letzteres, indem ich an obigen Befehl einfach noch ein -delete
angehängt habe (hinter das -print
).
Logs prüfen
Um auszuschließen, dass irgend etwas im Hintergrund schön schief geht, habe ich mir mit folgendem Befehl alle Warn- und Fehlermeldungen seit dem Systemstart angesehen:
journalctl -b -p warning
Zum Glück war eigentlich nichts Relevantes dabei, das Upgrade hat wirklich hervorragend funktioniert und sehr wenig manuelle Nacharbeit erforderlich gemacht.
Fertig!
Und nun?
Na über das aktuelle System freuen! 🥳
2 Kommentare
Alex · 3. September 2023 um 14:11
Ein Artikel für das Upgrade von Debian 11 „Bullseye“ auf Debian 12 „Bookwork“ habe ich ebenfalls veröffentlicht.
Alex · 7. September 2019 um 23:51
Ich habe mal noch im Abschnitt „Aufräumen“ ein paar Befehle ergänzt, um obsolete und unnötige Pakete zu deinstallieren.