Debian Upgrade von Lenny auf Squeeze

Die Debian Entwickler haben vor kurzem an das bevorstehende “End of Life” von Debian 5 (Lenny) erinnert. Ab dem 6. Februar 2012 werden für die Anfang 2009 erschienene Version 5 (Lenny) keine Updates mehr bereitgestellt. Das hat mich dazu veranlasst, meine Linux Debian Server auf die aktuelle Version 6 (Squeeze) zu aktualisieren.

Zu allererst möchte ich auf die Release Notes hinweisen. Vor dem Upgrade sollte man sich Kapitel 4 durchlesen, um Probleme vorzubeugen. Die Release Notes gibt es auch in Deutsch.

Die derzeitige installierte Debian Version kann wie folgt ermittelt werden:

aragon:/# cat /etc/debian_version
5.0.9

1) System aufräumen

1.1) Halb deinstallierte Pakete vollständig löschen (dieser Schritt ist nicht unbedingt notwendig. Ich bevorzuge jedoch ein reines System ohne übrig gebliebene Konfigurationsdateien, etc.). Zwei Möglichkeiten um sie zu finden:

aragon:/# dpkg --get-selections "*" | grep deinstall
aragon:/# dpkg --list | grep ^rc

Mit dem Debian Package Manager (dpkg) lassen sich halb deinstallierte Pakete ermitteln. Beide Kommandos sollten äquivalente Ergebnisse liefern (rc bedeutet removed but config files present).

Und nun zum Entfernen der restlichen Konfigurationsdateien. Auch hier stelle ich zwei Möglichkeiten vor:

aragon:/# apt-get remove --purge <package>
aragon:/# dpkg -P <package>

1.2) Bibliotheken aufräumen, die in der Luft hängen bzw. keine Abhängigkeiten zu keinem anderen Paket haben, können mit deborphan aufgespürt werden. deborphan installiert ihr mit

aragon:/# apt-get install deborphan

Ich bin da immer etwas vorsichtiger und schaue mir zuerst an, was deborphan für Bibliotheken findet. Dadurch, dass ich PHP und andere Software selbst kompiliere, benötige ich einige Bibliotheken ohne Abhängigkeiten.

Wenn Ihr Euch sicher seid, könnt ihr die Bibliotheken elegant wie folgt entfernen lassen:

aragon:/# apt-get remove –purge `deborphan`

Eine gute Erklärung zu deborphan finden Sie im Debian Anwenderhanduch.

1.3) Halb installierte Pakete säubern. Das sind Pakete die nur nur teilweise im System installiert wurden. Es wird auch in den Release Notes empfohlen, halb installierte Pakete zu prüfen.

aragon:/# dpkg --audit

Der Paket Manager zeigt Vorschläge an, wie mit den halb installierten Paketen geschehen soll.

Zitat aus den Release Notes: “It is desirable to remove any holds before upgrading. If any package that is essential for the upgrade is on hold, the upgrade will fail.”

1.4) Das Paket splashy entfernen, da es Konflikte verursacht

aragon:/# apt-get purge splashy

2) Sichern des Systems

Es ist extrem wichtig sein System zu sichern! Ich habe mein eigenes inkrementelles Backup Script geschrieben, auf das ich hier nicht weiter eingehen möchte. Das würde den Rahmen sprengen. Mein Backup umfasst grundsätzlich das komplette System (ausschließlich /proc, /tmp, /sys, /etc/shadow, lost+found, .Spam).

3) Release Notes durchlesen oder zumindest überfliegen

siehe Debian.org Release Notes

4) Vorbereitung auf den Upgrade: Lenny auf den letzten Stand aktualisieren

aragon:/# aptitude update
aragon:/# aptitude upgrade

Laut Release Notes soll man aptitude starten und mit der Taste “g” (go) fortfahren. Wenn die Meldung “No packages are scheduled to be installed, removed, or upgraded” kommt, ist alles in Ordnung.

5) Vorbereitung der Quellen für APT

Wir ersetzen in /etc/apt/sources.list “lenny” durch “squeeze”. Ich bevorzuge die Codenamen. Nur mit den Codenamen ist man auf der sicheren Seite und führt den Upgrade auf “squeeze” bewusst durch. Mit “stable” kann unbeabsichtigt schon mal ein Teilupgrade auf squeeze passieren!

aragon:/# sed -i 's!lenny!squeeze!' /etc/apt/sources.list

Meine sources.list:

aragon:/# cat /etc/apt/sources.list
# Hetzner default-sources
deb  ftp://mirror.hetzner.de/debian/packages  squeeze  main contrib non-free
deb  ftp://mirror.hetzner.de/debian/security  squeeze/updates  main contrib non-free

deb  http://ftp.de.debian.org/debian  squeeze  main non-free contrib
deb-src  http://ftp.de.debian.org/debian  squeeze  main non-free contrib

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

6) Vorbereitung für den Upgrade über eine Secure Shell (z.B. Terminalemulator Putty), Telnet oder Rlogin

6.1) Screen

Wenn man die Verbindung zum Server verliert (sei es blöderweise der 24h Disconnect der DSL Verbindung, WLAN oder DSL-RAM mit älterem Router), dann hat man ein Problem, denn man kann sich nicht mehr in den laufenden Upgrade-Vorgang dazu schalten.

Die Benutzung ist leicht erklärt und man startet eine neue Sitzung ganz einfach mit:

aragon:/# screen

Anschließend erscheint eine Textnachricht, die man bestätigt. Ihr befindet Euch jetzt in einer eigenen Sitzung, die man nach einem Verbindungsabbruch wiederaufnehmen kann. Da ich meinen 24h Disconnect im Auge behalte, hatte ich schon lange keinen Verbindungsabbruch mehr. Falls es doch mal passieren sollte, könnt Ihr Euch wie folgt wieder in die Sitzung dazu schalten:

aragon:/# screen -ls
There is a screen on:
        3257.pts-0.aragon       (05.01.2012 18:09:41)   (Detached)
1 Socket in /var/run/screen/S-root.

aragon:/# screen -r 3257.pts-0.aragon

6.2) Sitzung aufzeichnen

Man sollte das Upgrade aufzeichnen. Oft läuft der Upgrade-Vorgang so schnell über das Terminal, dass man auftretende Fehler gar nicht mitbekommt.

aragon:/# script -t 2>~/upgrade-squeeze.time -a ~/upgrade-squeeze.script

Um die aufgezeichnete Sitzung anzusehen:

aragon:/# scriptreplay ~/upgrade-squeeze.time ~/upgrade-squeeze.script

7) Upgrade auf Squeeze

7.1) Paketliste aktualisieren mit anschließender Überprüfung des Plattenplatzes

Als erstes holen wir uns die Liste aller verfügbaren Pakete für das neue Release:

aragon:/# apt-get update

Anschließend wird empfohlen, dass wir den verfügbaren Speicherplatz überprüfen:

aragon:/# apt-get -o APT::Get::Trivial-Only=true dist-upgrade

Wenn man nicht genügend Speicherplatz hat, warnt apt-get mit einer Meldung:
E: You don’t have enough free space in /var/cache/apt/archives/.
Ein paar Lösungsvorschläge werden in den Release Notes unter 4.4.3 beschrieben.

7.2) Minimale Systemaktualisierung

Ich aktualisiere immer gerne zuerst die Packet-Management Software, bevor ich mit APT den Upgrade ausführe:

aragon:/# apt-get install apt dpkg aptitude

Der minimale System-Upgrade:

aragon:/# apt-get upgrade
7.3) Kernel und udev aktualisieren

Wenn Ihr nicht wisst, welche Kernelarchitektur Ihr habt, könnt Ihr dies mit

aragon:/# uname -r2.6.26-2-amd64

herausfinden: in meinem Fall die Architektur amd64.

aragon:/# apt-get install linux-image-2.6-amd64
aragon:/# apt-get install udev

Fragen wie “Update disk device IDs in system configuration?” bestätigen. Hier handelt es sich um die neu eingeführten UUID’s. Das Einbinden von Laufwerken wird mit den neuen UUID’s anstatt /dev/sda1 gemacht (siehe neue /etc/fstab) und das Kommando blkid.

ACHTUNG: bei mir gab es an dieser Stelle ein Problem mit meinem RT8169 Netzwerkkarten-Chipsatz!

W: Possible missing firmware /lib/firmware/rtl_nic/rtl8105e-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168e-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168e-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168d-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168d-1.fw for module r8169

Die Lösung des Problems ist das Installieren der Realtek Firmware (die Firmware ist nicht mehr im Kernel enthalten, da non-free Pakete aus dem Kernel heraus genommen wurden. Siehe fehlende Firmware nachladen):

aragon:/# apt-get install firmware-realtek

Sind die vorherigen Schritte durchgelaufen, heißt es Daumen drück und einen Neustart wagen.

aragon:/# reboot

Beim Bootvorgang habe ich kleinere Probleme über eine Remote Konsole (LARA) gesehen, die ich am Ende des Artikels löse.

Nach dem Neustart nicht vergessen, die Sitzung wieder aufzuzeichnen (siehe Schritt 6.1 Screen).

7.4) Auf Squeeze aktualisieren

Jetzt kommen wir zum eigentlichen Upgrade von Lenny auf Squeeze. Ich führe zuerst einen Download und anschließend das Upgrade aus:

aragon:/# apt-get -d dist-upgrade
aragon:/# apt-get dist-upgrade

Es verlief nicht alles wie gewünscht. Der MySQL-Server und Proftpd wurden entfernt! Der Apache wurde durch die neue Bootreihenfolge vor dem MySQL Server gestartet (was bei meiner Umgebung mit virtuellen Benutzern nicht funktioniert). Der Webstatistik “webalizer” fehlte die GeoIP Datenbank, etc.

7.5) Upgrade von GRUB (Legacy) nach GRUB 2

Mit der neuen Distribution Squeeze wird GRUB 2 eingeführt. Nach dem Squeeze-Upgrade wird weiterhin GRUB (Legacy) verwendet. Squeeze installiert neben GRUB (Legacy) GRUB 2 (verantwortlich hierfür ist das Paket grub-pc) und fügt dem normalen Bootmenü einen neuen Eintrag “Chainload into GRUB 2” hinzu. Über diesen Menüpunkt könnt Ihr GRUB 2 testen. Bei mir war der Test erfolgreich! Anfangs hatte ich etwas sorgen bezüglich meines Software-RAID’s. Es gab mit GRUB 2 gar keine Probleme.

Der Upgrade auf GRUB 2 erfolgt mit dem Befehl:

aragon:/# upgrade-from-grub-legacy

Anschließend wird man gefragt auf welche Laufwerke GRUB 2 installiert werden soll. Beim Software-RAID-1 (Mirroring/Spiegelung) wählt man beide physischen Festplatten (Vorsicht: beim Software-RAID nicht die vorgeschlagenen /dev/md0, md1 etc. wählen!!):

[ * ] /dev/sda
[ * ] /dev/sdb
[    ] /dev/md0
[    ] /dev/md1

Die Installation war erfolgreich?

aragon:/# reboot

Und die alten nicht mehr benötigten Konfigurationsdateien von GRUB (Legacy) löschen:

aragon:/# rm -f /boot/grub/menu.lst*

7.6) Aufräumarbeiten

Viele Lenny Pakete werden nicht mehr benötigt. Eigentlich können die gleichen Schritte wie zu Beginn des Tutorials verwendet werden (siehe Schritt 1).

aragon:/# apt-get autoremove

Der Squeeze-Upgrade ist vollendet!

aragon:/# cat /etc/debian_version
6.0.3

8) Probleme, die ich nachträglich gelöst habe

Nach einem Neustart kann man die Datei syslog nach Fehlern überprüfen:

aragon:/# cat /var/log/syslog

8.1) insserv: warning: script ‘X’ missing LSB tags and overrides

insserv: warning: script ‘S25libdevmapper1.02’ missing LSB tags and overrides, insserv: warning: script ‘libdevmapper1.02’ missing LSB tags and overrides, package libdevmapper1.02 removed but not purged

Zur Problemlösung:

aragon:/# apt-get remove --purge libdevmapper1.02

Diese Meldung “Es konnte nicht auf abhängigkeitsbasierte Startreihenfolge umgestellt werden.” trat während des Squeeze-Upgrades auf und bedeutet, dass unter /etc/init.d Start-Scripte ohne LSB-Kopf liegen. Bei mir war an dem Ort zusätzlich ein selbst erstelltes Script für den Apache. Nachdem ich die Datei X gelöscht habe, gab er Ruhe. Wenn Ihr das Start-Script benötigt, müsst Ihr den LSB Kopf ergänzen!

Nach der Korrektur folgendes Kommando erneut aufrufen:

aragon:/# dpkg-reconfigure sysv-rc

Siehe auch LSBInitScripts auf Debian.org.

8.2) Starting web server: apache2apache2: bad user name <user> Action ‘start’ failed.

Meine Benutzer liegen alle in der Datenbank von MySQL. Als Lösung muss die Startreihenfolge des Apaches geändert werden. Der Apache muss bei mir nach MySQL starten.

Im Kopf des Start-Scripts /etc/init.d/apache2 sieht man den LSB-Header:

### BEGIN INIT INFO
# Provides:          apache2
# Required-Start:    $local_fs $remote_fs $network $syslog $named
# Required-Stop:     $local_fs $remote_fs $network $syslog $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: Start/stop apache2 web server
### END INIT INFO

Obigen Block aus dem Start-Script kopieren, mysql als Required-Start am Ende der Zeile ergänzen und in die neue Datei /etc/insserv/overrides/apache2 speichern:

aragon:/var/log# cat /etc/insserv/overrides/apache2
### BEGIN INIT INFO
# Provides:          apache2
# Required-Start:    $local_fs $remote_fs $network $syslog $named mysql
# Required-Stop:     $local_fs $remote_fs $network $syslog $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: Start/stop apache2 web server

Damit die Startreihenfolgen korrekt angepasst werden, sollte man

aragon:/# insserv -d

aufrufen.

8.3) /etc/environment has been deprecated for locale information; use /etc/default/locale for LANG=”de_DE.UTF-8″ instead …

Das ist nichts schlimmes. Die Variable gehört in die Datei /etc/default/locale (wenn nicht schon vorhanden – ich glaube, das wurde schon in Lenny geändert):

aragon:/# cat /etc/default/locale
#  File generated by update-locale
LANG=de_DE.UTF-8

Die Einträge aus der Datei /etc/environment löschen.

8.4) /etc/network/options still exists and it will be IGNORED! Read README.Debian of netbase

Die Datei /etc/network/options ist veraltet und kann gelöscht werden. Sie wird durch /etc/sysctl.conf oder anderen ähnlichen Scripten ersetzt.

8.5) MySQL Server verschwunden

Squeeze deinstalliert den MySQL-Server, weil es einen größeren Versionssprung von MySQL 5.0 auf MySQL 5.1 gibt. Man sollte sich dazu auch die MySQL Seite durchlesen.

aragon:/# apt-get install mysql-server

Und schon haben wir unseren MySQL-Server wieder drauf, doch bei mir kam das nächste Problem… außerdem musste ich manuell die alten Pakete (apt-get remove –purge mysql-server-5.0) entfernen!

8.6) Der MySQL Server 5.1 wollte nach der Installation nicht starten: mysql-server-5.1: [ERROR] Can’t open the mysql.plugin table. Please run mysql_upgrade to create it.

Das Problem lag an meiner alten Konfigurationsdatei /etc/mysql/my.cnf. Ich hatte Logging aktiviert und diverse alte Parameter in der Konfigurationsdatei stehen. Aus

log = /var/log/mysql/mysql.log

wird

general_log_file        = /var/log/mysql/mysql.log
general_log              = 1

und der Parameter für BerkeleyDB darf komplett entfernt werden:

skip-bdb

Nun klappte es mit dem Start!

8.7) Waiting for /dev to be fully populated…[     4.689310] Error: Driver ‘pcspkr’ is already registered, aborting…

“snd-pcsp” in der Datei /etc/modprobe.d/blacklist hinzufügen:

aragon:/# cat /etc/modprobe.d/blacklist.conf
blacklist snd-pcsp

Siehe Debian Bug report #495674

8.8) Verwendung von mod_fcgid im Apache

Die alten Variablen z.B. IPCConnectTimeout sind veraltet und müssen gegen neue Namen ersetzt werden. Eine Tabelle für alle neuen Entsprechungen mit dem Prefix Fcgid findet Ihr auf der Apache Module mod_fcgid Seite.

8.9) Der tägliche Cron für Webalizer meldete: webalizer: Error Opening file /usr/share/GeoIP/GeoIP.dat

Problemlösung:

aragon:/# apt-get install geoip-database

Siehe Debian Bug report #532123

8.10) proftpd

Seltsamerweise wurde auch mein FTP Server deinstalliert. Eine Neuinstallation mit

aragon:/# apt-get install proftpd-basic

löste das Problem.

8.11) mod_fcgid: HTTP request length 138409 (so far) exceeds MaxRequestLen (131072) (Benutzer sehen im Browser den Fehler “500 Internal Server Error”)

Diese Meldung kommt in der Apache Error Log vor, wenn man sich auf den Standardwert der Variable MaxRequestLen in der Konfigurationsdatei /etc/apache2/mods-available/fcgid.conf verlassen hat. Bei Lenny entsprach der Standardwert 1GB bzw. 1073741824 Bytes. Bei Squeeze wurde der Wert auf unglaubliche 131072 Bytes (128 KB) herunter gesetzt! Kein Wunder das Datei-Uploads fehl schlagen! Siehe dazu auf Apache.org mod_fcgid.

Zur Lösung des Problems setzt man den Wert für FcgidMaxRequestLen in der fcgid.conf am besten auf den Wert der Variablen upload_max_filesize und post_max_size aus der php.ini. Der Variablenname MaxRequestLen ist veraltet und sollte nicht mehr verwendet werden.

8.12) Während des Upgrade-Vorgangs bekam ich noch einen Fehler mit dem Paket ia32-libs. Leider habe ich mir den Fehler nicht notiert. Ich glaube er hatte mit unmet dependencies zu tun. Wenn Ihr diesen Fehler bekommt, meldet Euch bei mir.

2 Gedanken zu „Debian Upgrade von Lenny auf Squeeze

  1. Hallo,

    prima Dokumentation. Hat mir sehr geholfen beim Update.

    mysql hatte sich bei mir ebenfalls verabschiedet. Warum auch immer das passiert.

    Wenn man screen benutzt, kann man mit der Tastenkombination Ctrl-a H automatisch einen Log erzeugen.

    Viele Grüße
    Oliver

  2. Gute Arbeit!

    Mein Server läuft auch mit zwei Platten in RAID 1 und das habe ich für die Datensicherung genutzt: eine Platte wird aus dem Array entfernt, z.B. indem man sie einfach abstöpselt. Für den Upgrade-Prozess läuft das Array nur mit einer Platte. Ist alles ok, wird die andere Platte wieder in das Array eingehängt (mit mdadm -re-add) und synchronisiert. Geht etwas schief, kann man wieder von der ersten Platte booten. In dem Fall wird das Array auch als als degraded angezeigt, nur dass jetzt die Platte mit dem Update raus ist. Fügt man diese nun wieder hinzu, hat man den alten Zustand wieder.
    Es ist allerdings viel Umsicht nötig, damit man nichts durcheinander bringt. Es hat etwas Schweiss gekostet (und war ein gewisser Nervenkitzel), /boot/grub/menu.lst entsprechend zu ändern, so dass der neue Kernel von der richtigen Platte geladen wird. Hat aber alles geklappt.

    Viele Grüße
    Hans

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert