Günther Obermaiers Webseite



Allgemeines zu Debian 12.0 Bookworm

Upgrade von bullseye auf bookworm

Dieser Text basiert auf der Anleitung bei linuxconfig.org und meinem eigenem Upgrade von Stretch auf Buster und Upgrade von Buster auf Bullseye

Veraltete Pakete oder solche ausserhalb der Paketverwaltung suchen (das Zeichen vor "o" ist eine Tilde!):
# aptitude search '~o'
Dies ergab bei mir "zoom", zwei Scanapplikationen von Epson zum ET5800 und einen Haufen Libraries. Muss aber nicht sein, auf dem zweiten Rechner, meinem Laptop sirius fehlten wahrscheinlich zoom und der Scanner, war gar kein Treffer. Aber auf polaris entfernte ich alles mit dem Kommando:
# aptitude purge '~o'
Jetzt das vorhandene Bullseye-System aktualisieren mit
# apt-get update
# apt-get upgrade
# apt-get dist-upgrade
zurückgehaltene Pakete kontrollieren.
# dpkg -C
# apt-mark showhold
Dann in der /etc/apt/sources.list bullseye durch bookworm ersetzen, am einfachsten mit sed. Vorsichtige Admins kontrollieren, ob das bullseye-Repository auch auf der bevorzugten Quelle vorhanden ist. Eigentlich löst das der sed
# cp /etc/apt/sources.list /etc/apt/sources.list_backup
# sed -i 's/bullseye/bookworm/g' /etc/apt/sources.list
# apt-get update
so, jetzt kann man simulieren, was beim Upgrade passiert:
# apt list --upgradable
auf polaris, dem Lenovo T450s, das ich diesmal als Versuchskaninchen wählte, war alles grün! Dann geht der eigentliche Upgrade los, beide Teile dauern in Summe etwa eine halbe Stunde (DSL 100)
# apt-get upgrade
# apt-get dist-upgrade
Beim Upgrade behielt ich immer meine lokal veränderten Konfigurationstateien, antwortete also immer mit "N ". Bei Debian 12 bookworm wurde in der /etc/apt/sources.list der Komponenten Wert non-free in non-free non-free-firmware aufgeteilt. Das sollte anschliessend angepasst werden, so dass /etc/apt/sources.list jetzt etwa so aussieht:
deb http://deb.debian.org/debian/ bookworm main contrib non-free non-free-firmware
deb-src http://deb.debian.org/debian/ bookworm main contrib non-free non-free-firmware

# security-updates
deb http://security.debian.org/debian-security bookworm-security/updates main contrib non-free non-free-firmware
deb-src http://security.debian.org/debian-security bookworm-security/updates main contrib non-free non-free-firmware

# bookworm-updates
deb http://deb.debian.org/debian/ bookworm-updates main contrib non-free non-free-firmware
deb-src http://deb.debian.org/debian/ bookworm-updates main contrib non-free non-free-firmware

# signal desktop
deb [arch=amd64 signed-by=/usr/share/keyrings/signal-desktop-keyring.gpg] https://updates.signal.org/desktop/apt xenial main 
So, neu Booten, alles ok!. Mit
# aptitude purge '~o'
werden die überflüssigen Libraries und nicht mehr benötigten Pakete gelöscht.
Eine Liste aller installierten Pakete erhält man mit
# dpkg --get-selections | grep -v deinstall | awk ' { print $1 } '

Upgrade von bullseye auf bookworm auf firewall und webserver rigel

meine eigene lokale Seite unter https://ulm-goitservice.dyndns.org/index.php https://ulm-goitservice.dyndns.org/index.php warf einen http 503-er Fehler mit
[Tue Dec 26 00:00:00.782878 2023] [proxy:error] [pid 9816] (2)No such file or directory: AH02454: FCGI: attempt to connect to Unix domain socket /run/php/php7.0-fpm.sock (*:80) failed
[Tue Dec 26 00:00:00.782904 2023] [proxy_fcgi:error] [pid 9816] [client 62.156.151.4:15438] AH01079: failed to make connection to backend: httpd-UDS, referer: https://ulm-goitservice.dyndns.org/index.php?pos=/live
Also löschte ich im aptitude alle php7.x (7.3 und 7.4 von buster und bullseye) Referenzen und libapache2-mod-php. Als Ersatz wurde php8.2-fpm vorgeschlagen, was ich akzeptierte. Nach Aktivierung der neuen PHP 8.2 Konfiguration mit
# a2enmod proxy_fcgi setenvif
# a2enconf php8.2-fpm
Lief PHP wieder, aber noch traten Probleme mit dem HTML-Purifier auf, der nur in einer alten, nicht php 8.2 kompatiblen Version installiert war. Schliesslich deinstallierte ich den auch und die lokale Seite war wieder erreichbar.

System klonen / Grub nachträglich installieren

Da schon beim die Kopieraktion mit UEFI und einer gpt partitionierten Platte schon beim Versuch vor zwei Jahren nicht funktionierte und ich immer noch keine modernere Hardware als i7-6700 habe, bin auch diesmal beim klassischen DOS Partitionsschema und BIOS-Boot geblieben fü die Systemplatten geblieben.
die Zielplatte via USB anhängen oder in den 2.Wechselrahmen einstecken.
Da die SSDs der Workstations inzwischen 256 GB bis 1TB haben, verwende ich für das System 120GB und fuer den Swap 20GB.
# fdisk /dev/sdb 
	120,0 GB 	sdb1	83		Bootflag	(ergibt /)
	 20,0 GB 	sdb2	82		swap
	360,0 GB 	sdb3 	83					(/homelocal)
statt dem harten /home verwende ich inzwischen /homeserv und /homelocal, mounte die Serverplatte immer via NFS nach /homeserv und linke /home entweder nach /homeserv oder /homelocal. So kann ich mit einem kleinen Skript jederzeit auf mobilen/lokalen Betrieb umschalten. Bei den Workstations stört das auch nicht. Dateisysteme anlegen
# mkfs.ext4 /dev/sdb1
# mkswap /dev/sdb2
# mkfs.ext4 /dev/sdb3
Platte mounten und das gerade in Betrieb befindliche System kopieren. Ich verwende als Mountpoint meistens das (eventuell anzulegende) Verzeichnis /dest. Dadurch ist mir klar, dass es sich um das Zielverzeichnis handelt:
# mount /dev/sdb1 /dest
Anschliessend kopiert man die Systemplatte, ich verwende dazu mein eigenes Kommando cpHOST / /dest ALL, was im Wesentlichen ein rsync mit diversen excludes (proc ec) ist. Anschliessend werden die kopierten BlockIDs der Installation auf der Zielplatte mit den echten BlockIDs der Zielplatte ueberschrieben. Ich habe dazu ein ebenfalls ein Skript namens mvUUIDforBaseByDev gebaut, welches z.B. mit
# mvUUIDforBaseByDev /dest /dev/sda1 /dev/sdb1
# mvUUIDforBaseByDev /dest /dev/sda2 /dev/sdb2
die UUID der Platte /dev/sda1(Quelle) durch die der /dev/sdb1(Ziel) in den angegebenen Dateien ersetzt, wenn diese Platte nach /dest gemountet ist, passt das. Ohne Verwendung von cpHost und mvUUIDforBaseByDev muss man mehr Hand anlegen, siehe Abschnittsende.
Da auch die UUID des Swapspace in einigen Dateien steckt, ist auch die zweite Zeile (/dev/sda2 => /dev/sdb2) nötig.
Ist die Platte noch am Quellrechner unter /dest gemounten, setzt man anschliessend das Kommando
# update-initramfs -u -k all -t -b /dest/boot
ab. Falls die Platte schon als Bootplatte im Zielrechner ist, reicht:
# update-initramfs -u -k all
BIOS Boot anschalten, (bei Platten mit DOS-Dateilabel setzt man das Boot-Flag vorher beim Partitionieren)
# parted -s /dev/sdb set 1 bios_grub on
Dann kann man den GRUB neu intallieren:
 
# grub-install --root-directory=/dest /dev/sdb
Der Device bezeichnet dabei das Ziel der Grub Installation, also KEINE Partition, sondern die Platte selbst. Allgemein alsogrub-install --root-directory=MOUNTPOINT DEVICE
Falls man update-initramfs -u -k all vergessen hat oder das aus irgendeinem Grund nich korrekt funktionierte, kein Beinbruch, man muss beim Booten der Platte als Systemplatte nur ca 5 Minuten warten, bis der Fehler "Could not stat the resume device file '/dev/disk...'" kommt und das system mit <ENTER> bootet.
Kopieren ohne cpHost
 
# cd /
# rsync -avtHAX --exclude /dest --exclude /proc --exclude /sys --exclude /dev --exclude /home --exclude /homeserv --exclude /homelocal / /dest
Zuhause wird Server:/home nach /homeserv der Rechner gemountet. /home ist nur ein symbolischer Link darauf. Auf den Laptops sind die Userdaten im (verschlüsselten) /homelocal. So kann ich durch einfaches Löschen und umlinken den Rechner vom Betrieb am Server mit dort lagerndem Home-Verzeichnis als Link /home auf /homeserv schnell auf mobilen Betrieb mit /home als Link auf /homelocal umstellen. Kopieren ohne mvUUIDforBaseByDev Die kopierte /boot/grub/grub.cfg und /etc/fstab müssen vor der grub Installation angepasst werden. Notfalls kann man aber auch die UUID der neuen Platte aufschreiben und beim Booten im Grub als "root" bei UUID=... eingeben. Falls man das auch vergessen hat, bekommt man die UUID raus, indem man die Platte in einen anderen Rechner einbaut und
# blkid -o value /dev/PARTITION
aufruft.
Dann die alte UUID in /etc/fstab mit der richtigen UUID ersetzen. Sonst am einfachsten im vi:
# vi /dest/etc/fstab
:
%s/UUIDOLD/UUIDNEW/g
:wq!
so wird das Vorkommen der alten UUID durch die neue ersetzt. Ziel ist dann etwa:
UUID=UUIDNEW / ext4 defaults,errors=remount-ro 0 1
Ebenso muss die UUID in den Dateien /etc/uswsusp.conf und /etc/initramfs-tools/conf.d/resume angepasst werden, wenn man "Suspend to Disk" verwenden will.
Langer Rede, kurzer Sinn, am Zielsystem sind 4 Dateien anzupassen:
/MOUNTPOINT/etc/fstab
/MOUNTPOINT/boot/grub/grub.cfg
/MOUNTPOINT/etc/uswsusp.conf
/MOUNTPOINT/etc/initramfs-tools/conf.d/resume
Achtung #1: Beliebter Fehler vi /etc/fstab statt vi /mnt/etc/fstab, man zerschiesst das Quellsystem!!!
Achtung #2: Auch SWAP oder andere Partitionen in der /mnt/etc/fstab ersetzen.
Ebenso wird jedes Vorkommen der alten UUID in der /mnt/boot/grub/grub.cfg ersetzt.

Eclipse für einen User einrichten

Etwas frei nach geeksforgeeks.org:
www.eclipse.org/downloads/packages/ passende Installationspaket auswählen, war in meinem Fall "Eclipse IDE for PHP Developers" und zwar die "Linux x86_64" Variante. Nach dem Download auspacken (als normaler User!)
$ cd /home/common/software/debian/
$ tar xvfz eclipse-php-2022-12-R-linux-gtk-x86_64.tar.gz
$ mv  /home/common/software/debian/eclipse /home/USERNAME/eclipse
$ cd /home/USERNAME/eclipse
Starter in der Fensterleiste anlegen, fertig!