Upgrade auf Ubuntu 24.04 LTS (Noble)
- Bevor Sie ein Upgrade auf Ubuntu 24.04 LTZ durchführen, ist sicherzustellen, dass das Paket usrmerge installiert wurde. Ist dies nicht der Fall, wird das Upgrade das Filesystem vollständig und unwiederbringlich zerstören; wir haben diese Erfahrung gemacht. Siehe hierzu auch: https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/2058648 .
- Daher: Wenn Sie ein Upgrade planen, kontaktien Sie uns bitte vorher, damit wir einen VMware Snapshot erstellen können. Das Upgrade auf Ubuntu 24.04 LTS ist kritischer als die Upgrades auf vorherige Versionen.
Ende April 2024 wurde Ubuntu 24.04 LTS (Codename "Noble Numbat") veröffentlicht. Im folgenden Artikel findet man eine kurze Anleitung zur Durchführung des Upgrades vom vorherigen Stable-Release (Ubuntu 22.04 LTS "Focal").
Das Upgrade muss jeder zuständige Administrator selbstständig durchführen. Bei Problemen oder Rückfragen wenden Sie sich bitte an den LRZ-Servicedesk.
Die Release-Notes von Ubuntu 24.04 LTS Noble Numbat sind unter https://discourse.ubuntu.com/t/ubuntu-24-04-lts-noble-numbat-release-notes/39890 zu finden, es empfiehlt sich diese vor einem Upgrade durchzulesen.
Upgrade von Ubuntu 20.04 Focal
Wir raten dringlich von einem direkten Upgrade von Ubuntu 20.04 auf Ubuntu 24.04 ab und unterstützen dies auch nicht. Bitte wählen Sie die Zwei-Schritt-Methode: führen Sie zuerst ein Upgrade auf Ubuntu 22.04 LTS (Jammy) durch, danach auf Ubuntu 24.04 (Noble).
Durchführen des Upgrades von Ubuntu 22.04 Jammy
Vorabaktualisierung
Ein Upgrade sollte nur von einem vollständig aktualisierten System aus erfolgen, da zum Teil Bugs beim Upgrade nur durch die vorherige Installation eines gefixten Pakets in der Vorgängerversion gelöst werden können.
apt clean all apt update apt dist-upgrade reboot apt autoremove --purge
Datensicherung
Die Daten auf dem Server müssen vor Beginn der Arbeiten selbstverständlich auf geeignete Weise gesichert werden (TSM und/oder VMware-Snapshot). Für einen VMware-Snapshot wenden Sie sich bitte an den LRZ-Servicedesk.
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 aus Jessie und Stretch 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 von jammy auf focal geändert werden.
Anschließend folgt die Aktivierung der signed-by
Option für das LRZ-Repository, welche die veraltete apt-key
Methode ablöst und die LRZ-Repositories für Ubuntu Distributions liegt ab nun unter http://ubuntu.mirror.lrz.de/ubuntu-lrz.
sed -i 's/jammy/noble/' /etc/apt/sources.list mkdir -p /etc/apt/keyrings sed -i -E -e 's/stretch|buster|bullseye|bookworm/noble/' /etc/apt/sources.list wget -O /etc/apt/keyrings/lrz-ubuntu.asc http://ubuntu.mirror.lrz.de/ubuntu-lrz/lrz-ubuntu.asc sed -i 's/debian-lrz/ubuntu-lrz/' /etc/apt/sources.list sed -i '/.*ubuntu-lrz.*/ s:\(deb[^ ]*\) \(.*\):\1 [signed-by=/etc/apt/keyrings/lrz-ubuntu.asc] \2:' /etc/apt/sources.list apt clean all apt update
Diese sed Kommandos gehen von einer unveränderten Version der Datei /etc/apt/sources.list aus. Sollte hier etwas nicht funktionieren, sprich das apt update Kommando einen Fehler werfen, editieren Sie die Datei von Hand. Es geht prinzipiell um zwei Änderungen:
- Alle Zeilen, in denen der Term bookworm auftaucht muss dieser durch noble ersetzt werden
- Die Zeile, in der das LRZ Repo aufgelistet wird, muss am Ende folgendermaßen aussehen:
deb [signed-by=/etc/apt/keyrings/lrz-ubuntu.asc] [signed-by=/etc/apt/keyrings/lrz.asc] http://ubuntu.mirror.lrz.de/ubuntu-lrz/ noble main non-free
Im Zweifel einfach von Hand korrigieren.
Sollten hier Fehler auftreten, sind meistens Third-Party-Repositories eingebunden (z.B. Percona), von denen noch keine neuere 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.
NTP durch Chrony ersetzten
Siehe Upgrade auf Ubuntu 20.04 LTS (Focal)
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. Ubuntu empfiehlt ein zweistufiges Upgrade Verfahren:
apt update apt install openssh-server 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.
Vor dem Reboot sollte zur Sicherheit
sync
ausgeführt werden. Dies ist vermutlich ein Workaround, um den gelegentlichen Kernelpanic beim Reboot zu vermeiden.
Nach Abschluss der Installation muss das System neu gebootet werden.
Ü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 Ubuntu
root@nobletesttest:~# uname -a Linux v2c-master 6.8.0-41-generic #41-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 2 20:41:06 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux root@nobletest:~# cat /etc/os-release PRETTY_NAME="Ubuntu 24.04.1 LTS" NAME="Ubuntu" VERSION_ID="24.04" VERSION="24.04.1 LTS (Noble Numbat)" VERSION_CODENAME=noble ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" UBUNTU_CODENAME=noble LOGO=ubuntu-logo
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
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) ausgeliefert werden.
Eine nicht vollständige Liste von betroffenen Paketen ist in den Release-Notes 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.
ping:/etc# find . -name "*.dpkg-dist" ./systemd/system.conf.dpkg-dist ping:/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.
ping:/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. [...] ping:/etc# mv systemd/system.conf.new systemd/system.conf ping:/etc# rm systemd/system.conf.dpkg-dist