Über Ubuntu 26.04 habe ich hier schon berichtet. Heute habe ich meinen ersten Ubuntu-Server von Version 24.04 auf 26.04 aktualisiert. Es ist eigentlich recht gut gegangen. Dieser Beitrag fasst die wichtigsten Erkenntnisse zusammen.
- MySQL-Passwörter
- Dovecot-Konfiguration (Update 2.3 -> 2.4)
- SSH-Server-Konfiguration
- Externe und obsolete Pakete aufräumen
Grundsätzliche Vorgehensweise
Logischerweise sollten Sie zuerst ein Backup machen. Mein System ist eine virtuelle Maschine (KVM), ich habe also ein Backup des Images gemacht (LVM-Snapshot im laufenden Betrieb). Wäre irgendetwas total schief gegangen, hätte ich den ganzen Server blitzschnell in den alten Zustand zurückversetzen können.
Am Zielsystem habe ich dann ein letztes Update durchgeführt und dann do-release-upgrade gestartet. Der erste Lauf scheiterte an alten MySQL-Passwörtern. Nachdem ich diese umgestellt hatte (Details folgen gleich), lief do-release-upgrade ziemlich problemlos durch.
Bei sämtlichen Rückfragen, ob ich meine geänderten Konfigurationsdateien behalten oder lieber die neuen Konfigurationsdateien verwenden möchte, habe ich mich für meine alten Konfigurationsdateien entschieden. (Die Entscheidung ist nicht ganz einfach: Die neuen Konfigurationsdateien enthalten in der Regel bessere/neuere Einstellungen, die vorzuziehen wären. Umgekehrt will ich aber auch nicht die in der Vergangenheit vorgenommenen Änderungen verlieren.)
Danach ein Reboot, nach 30 Sekunden war ein neuer SSH-Login möglich. Sehr gut!
Jetzt begannen die Aufräumarbeiten. Es gab zwei Hauptprobleme:
- Dovecot funktionierte nicht mehr (das war zu erwarten).
- PHP auch nicht (das kam überraschend).
MySQL
Mit Ubuntu 26.04 kommt MySQL 8.4. Diese Version des Datenbank-Servers unterstützt standardmäßig keine mysql_native_password-Passwörter mehr. Das ist an sich vernünftig, die Passwörter werden nach einem unsicheren Verfahren verschlüsselt. Es gibt zwei Lösungen: Eine besteht darin, das nicht mehr empfohlene Plugin mysql_native_password doch wieder zu aktivieren. (In Version 9 wird das aber nicht mehr gehen.) Die andere besteht darin, für alle betroffenen Benutzer ein neues Passwort mit dem Verfahren caching_sha2_password einzurichten, im Wesentlichen so:
ALTER USER name@localhost IDENTIFIED WITH caching_sha2_password BY 'topsecret';
Ich habe mich für diese Variante entschieden, zumal es ohnedies nur wenige betroffene Accounts gab. Zwei bereiteten mir allerdings Kopfzerbrechen. Welche Passwörter sollte ich für die (in der Vergangenheit) automatisch eingerichteten Accounts 'debian-sys-maint'@localhost und mysql.session@localhost verwenden? Eine kurze Recherche ergab, dass sich das Passwort für ersteren Account (eine Debian/Ubuntu-Spezialität) in /etc/mysql/debian.cnf befindet. Der zweite Account ist MySQL-intern. Es muss existieren, ist aber nicht für einen Login gedacht. Jedes zufällige Passwort ist OK.
Dovecot
Dovecot (ein IMAP-Server) macht mit Ubuntu 26.04 einen Versionssprung von 2.3 auf 2.4. Das klingt unspektakulär, aber tatsächlich hat Dovecot mit der neuen Version die Syntax der Konfigurationsdateien grundlegend geändert. Solange die Dateien nicht angepasst werden und insbesondere die Anweisungen dovecot_config_version = 2.4.0 sowie dovecot_storage_version = 2.4.0 an den Beginn von /etc/dovecot.conf eingebaut werden, startet der Dienst nicht.
Upgrading Dovecot CE from 2.3 to 2.4 enthält eine umfassende Migrationsanleitung. Die simple Übernahme der neuen Konfigurationsdateien ist (in meinem Fall) unmöglich, weil ich diverse eigene Anpassungen vorgenommen habe. Schon vor dem Ubuntu-Update habe ich deswegen sicherheitshalber ein Backup des alten Konfigurationsverzeichnisses /etc/dovecot durchgeführt.
Die manuelle Migration erschien mir recht mühsam. Also habe ich Claude Code SSH-Zugriff auf meinen Server gegeben (für einen normalen Account, nicht für root) und habe den folgenden Prompt formuliert:
you can ssh to example.com (no root); go to /etc/dovecot and look at the config files; these are partially from 2.3 and must be updated to 2.4 (see also https://doc.dovecot.org/main/installation/upgrade/2.3-to-2.4.html); explain me what to change, don’t try to do it yourself; summarize your findings locally (not on example.com) into
dovecot-migration-plan.md
Diesen Plan habe ich anschließend manuell umgesetzt. Anbei eine Kurzfassung:
Dovecot 2.3 -> 2.4: config changes
dovecot.conf
Add these as the very first settings:
dovecot_config_version = 2.4.0
dovecot_storage_version = 2.4.0
Remove the empty "dict { }" block.
conf.d/10-auth.conf
Old: auth_username_format = %Ln
New: auth_username_format = %{user | username | lower}
conf.d/auth-system.conf.ext
passdb and userdb blocks need a name:
passdb pam {
}
userdb passwd {
}
conf.d/10-mail.conf
mail_location is gone:
mail_driver = maildir
mail_path = ~/Maildir
conf.d/10-master.conf
Old: user = $default_internal_user
New: user = $SET:default_internal_user
conf.d/10-ssl.conf
New setting names, no more "<" before file names:
ssl = yes
ssl_server_cert_file = /etc/letsencrypt/live/
example.com/fullchain.pem
ssl_server_key_file = /etc/letsencrypt/live/
example.com/privkey.pem
ssl_server_dh_file = /etc/dovecot/dh.pem
ssl_server_prefer_ciphers = server
(Each path belongs on one line; it is split here only
for readability.)
ssl_server_prefer_ciphers accepts "client" or "server";
"yes" is a fatal error. The DH file is only needed for
non-ECC key exchange and can be omitted.
conf.d/20-lmtp.conf
"mail_plugins = $mail_plugins sieve" no longer works:
protocol lmtp {
postmaster_address = postmaster@example.com
mail_plugins {
sieve = yes
}
}
conf.d/90-sieve.conf
The plugin { } block is gone. Use named script blocks:
sieve_script personal {
driver = file
path = ~/sieve
active_path = ~/.dovecot.sieve
}
sieve_script after {
type = after
driver = file
path = /etc/dovecot/sieve-after
}
Recompile global sieve scripts (as root):
sievec /etc/dovecot/sieve-after/spam-to-folder.sieve
Users' own scripts are recompiled automatically.
Protocols
2.4 enables no protocols by default. On Debian they come
from /usr/share/dovecot/protocols.d, i.e. one file per
installed package (imapd, lmtpd, managesieved, ...).
Testing
doveconf -n # must run without errors
systemctl restart dovecot
journalctl -u dovecot -n 50
Then check IMAP login, LMTP delivery from Postfix, SMTP
auth via the Postfix SASL socket and sieve filtering.
Eine halbe Stunde später konnte ich in Thunderbird meine Mails wieder abrufen.
Update Configuration File (UCF)
Eine Debian/Ubuntu-Pakete verwenden das Verfahren Update Configuration File (UCF). Bei diesen Paketen wird parallel zur unverändert belassenen Konfigurationsdateien die neue Version der Konfigurationsdatei mit der Kennung *.ucf-dist angelegt. Das ist praktisch, weil Sie unkompliziert danach suchen können:
find /etc -name '*.ucf-dist'
Leider wird UCF nur von ausgewählten Paketen verwendet (auf jeden Fall: apt, dovecot und ssh).
SSH-Server
Der SSH-Server (openssh-server 10.2) läuft zwar auf Anhieb (alles andere wäre ja eine Katastrophe), aber journalctl -u ssh liefert diverse Warnungen:
sshd: rexec line 16: Deprecated option UsePrivilegeSeparation
sshd: rexec line 19: Deprecated option KeyRegenerationInterval
sshd: rexec line 20: Deprecated option ServerKeyBits
sshd: rexec line 31: Deprecated option RSAAuthentication
sshd: rexec line 38: Deprecated option RhostsRSAAuthentication
Also habe ich auch diese Datei etwas aufgeräumt, wobei Claude Code einige weitere Verbesserungsvorschläge gemacht hat (ChallengeResponseAuthentication -> KbdInteractiveAuthentication, PermitRootLogin without-password -> PermitRootLogin prohibit-password, HostKey /etc/ssh/ssh_host_dsa_key entfernen).
Docker
In Ubuntu 24.04 hatte ich Docker-Pakete direkt aus dem Docker-Repo installiert. Die alten Pakete wurden unverändert belassen, Docker funktionierte weiter. Allerdings wurde im Rahmen des Updates die Docker-Paketquelle deaktiviert (siehe /etc/apt/sources.list.d/*.disabled), d.h. ich würde keine Updates mehr erhalten. Ich habe daher die folgende Datei docker.sources neu eingerichtet:
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: resolute
Components: stable
Architectures: amd64
Signed-By: /etc/apt/keyrings/docker.asc
apt update und apt list --upgradable zeigt jetzt zu Ubuntu 26.04 passende Docker-Pakete an, die ich mit apt dist-upgrade installierte. Ein kurzer Test mit docker ps zeigt, dass alle Docker-Container wie geplant laufen.
Obsolete Pakete entfernen
Das Kommando
apt list '?obsolete'
liefert eine Liste von Paketen, die aus früheren Ubuntu-Versionen stammen (zu meiner Schande bis zurück nach 14.04) und zu denen es keine aktive Paketquellen mehr gibt (z.T. uralte Kernel-Versionen). Höchste Zeit, auch hier aufzuräumen. Ich habe Claude Code um eine Analyse gebeten.
find obsolete packages and access which can be safely removed
In der Folge habe ich die meisten betreffenden Pakete mit apt purge entfernt.
Quellen/Links
- https://documentation.ubuntu.com/release-notes/26.04/
- https://documentation.ubuntu.com/release-notes/26.04/summary-for-lts-users/#mysql
- https://doc.dovecot.org/main/installation/upgrade/2.3-to-2.4.html
- https://manpages.debian.org/trixie/ucf/ucf.1.en.html
- https://www.debian.org/doc/debian-policy/ch-files.html#configuration-files
- https://kofler.info/ubuntu-26-04