Upgrade auf Debian 13 (Trixie)
Am 9. August 2025 wurde Debian 13.0 (Codename "Trixie") veröffentlicht. Im folgenden Artikel findet man eine kurze Anleitung zur Durchführung des Upgrades vom vorherigen Stable-Release (Debian 12 "Bookworm").
Ein direktes Upgrade von Debian 11 (Bullseye) und älter wird offiziell nicht unterstützt! Es muss erst ein Upgrade auf Debian 12 (Bookworm) vorgenommen werden.
Das Upgrade muss jeder zuständige Administrator selbstständig durchführen. Bei Problemen oder Rückfragen wenden Sie sich bitte an den LRZ-Servicedesk.
Debian 12 "Bookworm" wird nach dem Release von Debian 13.0 "Trixie" noch ein Jahr vollständig gepflegt (oldstable). Nach diesem Zeitpunkt geht die Pflege zum LTS-Projekt über, welches die Distribution noch etwa zwei weitere Jahre mit Sicherheitsupdates versieht. Darin werden allerdings nicht mehr alle Pakete unterstützt. Da auch die LRZ-Anpassungen über die Laufzeit des Systems gepflegt werden müssen besteht aktuell nur eingeschränkte Unterstützung bei Nutzung des LTS-Supports.
Änderungen
LRZ-Repository
Signing Key
Das vom LRZ verwaltete Repository für die lokalen Managementpakete (http://debian.mirror.lrz.de/debian-lrz) muss mit einem neuen GPG-Schlüssel signiert werden. Dieser lautet
pub rsa3072 2025-08-12 [SC]
A0D98AE0F9140A82D8E1D209ECB9C1905AD42837
uid [ultimate] LRZ Debian Repository 2025 <debian-admin@lists.lrz.de>
sub rsa3072 2025-08-12 [E]
Der alte (bis Bookworm verwendete) und neue (ab Trixie) Key kann auch unter http://debian.mirror.lrz.de/special/lrz.asc heruntergeladen werden. Diese Datei wird auch seit Anfang August 2025 durch aktualisierte Versionen von lrz-base
in /usr/share/keyrings
hinterlegt (auch auf Bookworm/Bullseye).
Verschieben des TSM-Clients
Der TSM-Client befindet sich jetzt nicht mehr in der Component non-free
, sondern in tsm
.
Debian
Die Release-Notes von Trixie sind unter https://www.debian.org/releases/stable/release-notes/index.en.html zu finden, insbesondere die Kapitel 4 und 5 sollten vor einem Upgrade durchgelesen werden.
Die wichtigsten Änderungen sind:
Das Verzeichnis für temporäre Dateien
/tmp
wird nun in einem tmpfs gespeichert
Seit Trixie wird das Verzeichnis/tmp
standardmäßig mithilfe eines tmpfs(5)-Dateisystems im Arbeitsspeicher gespeichert. Dies sollte Anwendungen, die temporäre Dateien verwenden, schneller machen, aber wenn Sie dort große Dateien ablegen, kann es zu einem Speicherengpass kommen.Bei Systemen, die von Bookworm aktualisiert wurden, tritt das neue Verhalten erst nach einem Neustart in Kraft. Dateien, die in
/tmp
verbleiben, werden nach dem Mounten des neuen tmpfs ausgeblendet, was zu Warnungen im Systemjournal oder Syslog führt. Auf solche Dateien kann über einen Bind-Mount zugegriffen werden (siehe mount(1)): Durch Ausführen vonmount --bind / /mnt
wird das zugrunde liegende Verzeichnis unter/mnt/tmp
zugänglich (führen Sieumount /mnt
aus, sobald Sie die alten Dateien bereinigt haben).Standardmäßig werden bis zu 50 % des Speichers für
/tmp
zugewiesen (dies ist ein Maximum: Der Speicher wird nur verwendet, wenn tatsächlich Dateien in/tmp
erstellt werden). Sie können die Größe ändern, indem Siesystemctl edit tmp.mount
als root ausführen und beispielsweise Folgendes festlegen:[Mount] Options=mode=1777,nosuid,nodev,size=2G
(siehe systemd.mount(5)).
Sie können zu
/tmp
als regulärem Verzeichnis zurückkehren, indem Siesystemctl mask tmp.mount
als root ausführen und neu starten.Die neuen Dateisystem-Standardeinstellungen können auch in
/etc/fstab
überschrieben werden, sodass Systeme, die bereits eine separate/tmp
-Partition definieren, davon nicht betroffen sind.- OpenSSH unterstützt keine DSA-Schlüssel mehr
Netzwerkschnittstellennamen können sich ändern (Hinweis: Bei VMs in der LRZ-vSphere bleiben die Namen stabil!)
Benutzern von Systemen ohne einfache Out-of-Band-Verwaltung wird empfohlen, mit Vorsicht vorzugehen, da uns zwei Fälle bekannt sind, in denen die von Trixie-Systemen zugewiesenen Netzwerkschnittstellennamen von denen von Bookworm abweichen können. Dies kann zu einer Unterbrechung der Netzwerkverbindung führen, wenn das System neu gestartet wird, um das Upgrade abzuschließen.Benutzern, die möchten, dass die Namen während des Upgrades stabil bleiben, wird empfohlen,
systemd.link
-Dateien zu erstellen, um den aktuellen Namen vor dem Upgrade zu „fixieren”.Ohne eine detaillierte technische Analyse ist es schwierig, im Voraus festzustellen, ob ein bestimmtes System betroffen ist. Bekannte problematische Konfigurationen sind folgende:Systeme, die den Linux-i40e-NIC-Treiber verwenden, siehe Bug #1107187.
Systeme, bei denen die Firmware das
_SUN
-ACPI-Tabellenobjekt offenlegt, das zuvor in Bookworm standardmäßig ignoriert wurde (systemd.net-naming-scheme v252), aber jetzt von systemd v257 in Trixie verwendet wird. Siehe Bug #1092176.
Mit dem Befehl
udevadm test-builtin net_setup_link
können Sie überprüfen, ob die systemd-Änderung allein zu einem anderen Namen führen würde. Dies muss unmittelbar vor dem Neustart erfolgen, um das Upgrade abzuschließen. Beispiel:Benutzern, die möchten, dass die Namen während des Upgrades stabil bleiben, wird empfohlen,# Nach apt full-upgrade, aber vor dem Neustart $ udevadm test-builtin net_setup_link /sys/class/net/enp1s0 2>/dev/null ID_NET_DRIVER=igb ID_NET_LINK_FILE=/usr/lib/systemd/network/99-default.link ID_NET_NAME=ens1 #< Beachten Sie, dass der endgültige Name ID_NET_NAME nicht „enp1s0” lautet!
systemd.link
-Dateien zu erstellen, um den aktuellen Namen vor dem Upgrade zu „fixieren”.
Durchführen des Upgrades
Vorabaktualisierung
Ein Upgrade sollte nur von einem vollständig aktualisierten System aus erfolgen, da zum Teil Bugs beim Upgrade auf Trixie nur durch die vorherige Installation eines gefixten Pakets in Bookworm gelöst werden können.
apt update apt full-upgrade
Datensicherung
Die Daten auf dem Server müssen vor Beginn der Arbeiten selbstverständlich auf geeignete Weise gesichert werden (TSM und/oder VMware-Snapshot).
Es ist (unabhängig vom Upgrade) empfehlenswert, Änderungen im Verzeichnis /etc
zu dokumentieren. Hierzu bietet sich das Paket "etckeeper
" an, welches das /etc
-Verzeichnis in einem lokalen git-Repository speichert.
Deaktivieren von Systemmanagementtools (Puppet etc)
Da während des Upgrades eine Mischung von Versionen auf der Platte ist und Dienste während des Upgrades gestoppt werden, sollten alle Tools, die regelmäßig den Systemstatus checken und unter Umständen Pakete installieren oder Dienste starten, deaktiviert werden. Ein Beispiel dafür ist Puppet, es kann sich aber auch um Ansible oder Cronjobs handeln. Ein Deaktivieren des cron-Daemons ist in solchen Fällen hilfreich.
puppet agent --disable service cron stop
Ändern der Paketquellen
In den Konfigurationsdateien für APT muss nun der Codename der Distribution geändert werden.
Anschließend folgt die Anpassung der signed-by
Option für das LRZ-Repository, welche künftig auf die vom Management-Paket lrz-base
bereitgestellte Schlüsseldatei verweist.
sed -i 's:bookworm:trixie:' /etc/apt/sources.list /etc/apt/sources.list.d/*.list sed -i '/.*debian-lrz.*/ s:\[signed-by=[^\]\+\]:\[signed-by=/usr/share/keyrings/lrz.asc\]:' /etc/apt/sources.list /etc/apt/sources.list.d/*.list apt update
Sollten hier Fehler auftreten, sind meistens Third-Party-Repositories eingebunden (z.B. Percona), von denen noch keine Trixie-Version existiert. Diese sollten vor dem Upgrade zurückgestellt und ein besonderes Augenmerk auf die Ausgabe im nächsten Schritt gelegt werden, da solche Pakete für eine veraltete Distributionsversion gerne aufgrund von Konflikten deinstalliert werden. Im Zweifelsfall sollte das Upgrade abgebrochen und auf eine aktualisierte Version gewartet werden.
Durchführen des Upgrades
Das tatsächliche Upgrade wird durch den Befehl "apt full-upgrade
" durchgeführt (bei einer SSH-Session ist die Verwendung von "screen
" förderlich, sollte die Verbindung zwischendurch abbrechen). Die Liste der zu entfernenden Pakete sollte man kurz überfliegen, ob für den Betrieb wichtige Pakete entfernt werden. Debian empfiehlt ein zweistufiges Upgradeverfahren:
apt upgrade --without-new-pkgs apt full-upgrade
Nach Bestätigung werden nun die Pakete heruntergeladen und installiert. Es werden einige Fragen gestellt, die in den meisten Fällen mit dem Standardwert beantwortet werden können.
Die Rückfragen bei geänderten Konfigurationsdateien sollten auf Plausibilität geprüft werden. In den meisten Fällen kann aber die alte Version übernommen werden. Leichte Änderungen können auch nachträglich noch beim Aufräumen nachgezogen werden.
Nach Abschluss der Installation muss das System neu gebootet werden.
reboot
Überprüfen und aufräumen
Nach Abschluss des Reboots sollte das System korrekt aktualisiert sein. Zwei einfache Prüfungen dafür sind die Version des laufenden Kernels sowie die Version von Debian
debian:~# uname -a Linux debian 6.12.41+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.41-1 (2025-08-12) x86_64 GNU/Linux debian:~# cat /etc/debian_version 13.0
Wenn die Systemdienste den Erwartungen entsprechen, sollte das System noch aufgeräumt werden. Wurde Puppet vor dem Upgrade deaktiviert, muss es nach dem Reboot wieder aktiviert werden.
puppet agent --enable
Umstellung der Paketquellen auf das neue deb822-Format (empfohlen)
Ab Debian 13 (Trixie) wird bei einer Neuinstallation standardmäßig das deb822-Format für Paketquellen verwendet (*.sources
). Neu erstellte LRZ-VMs werden bereits mit diesem Format ausgeliefert.
Weitere Informationen hierzu findet man beispielsweise im Debian-Wiki (https://wiki.debian.org/SourcesList).
Die neue apt
Version bietet einen praktischen Parameter modernize-sources
, mit dem die Änderung mühelos erfolgen kann:
debian:~# apt modernize-sources The following files need modernizing: - /etc/apt/sources.list - /etc/apt/sources.list.d/lrz.list Modernizing will replace .list files with the new .sources format, add Signed-By values where they can be determined automatically, and save the old files into .list.bak files. This command supports the 'signed-by' and 'trusted' options. If you have specified other options inside [] brackets, please transfer them manually to the output files; see sources.list(5) for a mapping. For a simulation, respond N in the following prompt. Rewrite 2 sources? [Y/n] Y Modernizing /etc/apt/sources.list... - Writing /etc/apt/sources.list.d/debian.sources Modernizing /etc/apt/sources.list.d/lrz.list... - Writing /etc/apt/sources.list.d/lrz.sources
Um zu überprüfen, ob die Änderungen erfolgreich waren, genügt eine Aktualisierung der Paketquellen:
apt update
Werden keine Fehlermeldungen angezeigt und alle gewünschten Paketquellen aufgelistet, ist die Änderung erfolgreich. Die Originaldateien werden automatisch mit der Dateiendung .bak
im jeweils selben Verzeichnis abgelegt. Diese können entweder zu "Dokumentationszwecken" aufbewahrt oder im Anschluss einfach gelöscht werden:
rm /etc/apt/sources.list.bak /etc/apt/sources.list.d/*.bak
Löschen nicht mehr benötigter Pakete
Beim Aufruf von aptitude
sollten schon einige Dutzend Pakete zur Löschung vorgeschlagen sein. Es handelt sich zum größten Teil um veraltete Library-Versionen. Die Auswahl sollte überprüft und mit zweimal "g" bestätigt werden.
Als nächstes sollte man die Pakete in der Liste "Obsolete and Locally Created Packages" ansehen und nicht mehr benötigte Pakete zur Löschung vorgesehen werden (mit "-"). Abschließend sollten die gelöschten Pakete nicht nur gelöscht, sondern auch deren Konfigurationsdateien entfernt werden (purge). Dazu markiert man die Sektion "Not Installed Packages" und drückt "_".
Es kann sich dabei auch um Pakete handeln, die für den Betrieb notwendig sind und nicht mehr (mit diesem Paketnamen) in Trixie ausgeliefert werden.
Eine nicht vollständige Liste von betroffenen Paketen ist in den Release-Notes (https://www.debian.org/releases/stable/release-notes/issues.en.html#obsolescence-and-deprecation) zu finden.
Übersprungene Änderungen an Konfigurationsdateien
Hat man während der Installation das Ersetzen von veränderten Konfigurationsdateien verneint ("keep your currently-installed version", das Default), werden die geänderten Versionen mit der Endung ".dpkg-dist" im Dateisystem abgelegt. Diese können nun bei Bedarf noch überprüft werden.
debian:/etc# find /etc -name "*.dpkg-dist" ./systemd/system.conf.dpkg-dist debian:/etc# diff -u systemd/system.conf systemd/system.conf.dpkg-dist --- systemd/system.conf 2014-10-29 16:57:53.724353272 +0100 +++ systemd/system.conf.dpkg-dist 2015-04-16 17:52:48.000000000 +0200 @@ -17,14 +17,24 @@ #ShowStatus=yes #CrashChVT=1 #CPUAffinity=1 2 -DefaultControllers=cpu memory -#DefaultStandardOutput=journal -#DefaultStandardError=inherit -#JoinControllers=cpu,cpuacct,cpuset net_cls,net_prio +#JoinControllers=cpu,cpuacct net_cls,net_prio #RuntimeWatchdogSec=0 #ShutdownWatchdogSec=10min #CapabilityBoundingSet= +#SystemCallArchitectures= #TimerSlackNSec= +#DefaultTimerAccuracySec=1min +#DefaultStandardOutput=journal +#DefaultStandardError=inherit +#DefaultTimeoutStartSec=90s +#DefaultTimeoutStopSec=90s +#DefaultRestartSec=100ms +#DefaultStartLimitInterval=10s +#DefaultStartLimitBurst=5 +#DefaultEnvironment= +#DefaultCPUAccounting=no +#DefaultBlockIOAccounting=no +#DefaultMemoryAccounting=no #DefaultLimitCPU= #DefaultLimitFSIZE= #DefaultLimitDATA=
Will man die Änderungen mergen, hat sich die Nutzung des Tools sdiff
für einen side-by-side merge bewährt.
debian:/etc# sdiff -o systemd/system.conf.new systemd/system.conf systemd/system.conf.dpkg-dist # This file is part of systemd. # This file is part of systemd. [...] #CPUAffinity=1 2 #CPUAffinity=1 2 DefaultControllers=cpu memory | #JoinControllers=cpu,cpuacct net_cls,net_prio #DefaultStandardOutput=journal < #DefaultStandardError=inherit < #JoinControllers=cpu,cpuacct,cpuset net_cls,net_prio < %? ed: Edit then use both versions, each decorated with a header. eb: Edit then use both versions. el or e1: Edit then use the left version. er or e2: Edit then use the right version. e: Discard both versions then edit a new one. l or 1: Use the left version. r or 2: Use the right version. s: Silently include common lines. v: Verbosely include common lines. q: Quit. [...] debian:/etc# mv systemd/system.conf.new systemd/system.conf debian:/etc# rm systemd/system.conf.dpkg-dist
Bekannte Probleme
noch keine