====== Update Debian Lenny to Debian Squeeze ====== Es gibt einige [[http://www.sysadminslife.com/linux/howto-upgrade-debian-5-lenny-zu-debian-6-squeeze/|Update]] [[http://www.howtoforge.com/upgrade-debian-lenny-to-squeeze-in-a-few-simple-steps|Howtos]] [[http://www.debianroot.de/server/debian-squeeze-was-gibt-es-neues-was-hat-sich-veraendert-1275.html|im]] [[http://www.debianroot.de/allgemein/debian-lenny-auf-squeeze-upgrade-anleitung-1276.html|Netz]]. Nachdem ich aber auch die [[http://www.debian.org/releases/squeeze/amd64/release-notes/ch-upgrading.en.html|offizielle Anleitung]] gelesen habe, die ich allen Updatewilligen ans Herz legen möchte, empfand ich die meisten anderen Howtos nicht mehr ausreichend detailliert. Andererseits war das offizielle Dokument zu umfangreich, um es beim Update mehrere Systeme als eine Art Checkliste zu benutzen. Daher habe ich dieses eigene Howto geschrieben, welches umfangreich die Schritte unter Sicherheitsvorkehrungen beschreibt. ===== Vorbereitung ===== Lauf offiziellem Dokument wird gesagt, dass man dpkg und apt-get nutzen soll anstatt aptitude. Daher wird ab hier davon ausgegangen, dass man diesem folgt. ==== Brauchbare Tools ==== Während des Updates werden neue Konfigurationsdateien installiert. Ich empfehle diese zu nutzen und die eigenen Änderungen zu übertragen. Dafür bietet sich meines Erachtens //vimdiff// an. Wenn man nicht direkt vor dem System sitzt, sondern z.B. ein Update per SSH durchführt, sollte man dieses Update innerhalb von //screen// machen. aptitude install vimdiff screen ==== Backup / Recovery ==== Vor dem Update muss man in jedem Fall ein Backup machen und alles bereit legen, was für ein Recovery benötigt. Doch vor dem Backup müssen einige Dinge beachtet werden. === Check package manager === Bevor wir die Backup-Dateien an einen sicheren Ort kopieren, müssen wir die Paketliste prüfen uns sichern. Sie muss vor dem Update sauber sein. * Prüfe mit ''aptitude'' oder ''apt-get'', dass alle Pakete ordnungsgemäß installiert sind! aptitude * Setze alle Pakete auf //install// mit ''aptitude'' for a in $(aptitude search "~ahold" | sed 's/....//' | sed 's/ .*//'); do aptitude unhold $a;done * Setze alle Pakete auf //install// mit ''dpkg'' dpkg --get-selections | grep hold echo package_name install | dpkg --set-selections * Leere Paketarchiv apt-get clean === Backups erstellen === * Liste der installierten Pakete dpkg --get-selections "*" > ~/squ_update_${HOSTNAME}_curr-pkgs.txt * Die wichtigsten Ordner sind: cd / tar czf squ_update_${HOSTNAME}_$(date +%Y%m%d%H%M%S)_etcplus.tar.gz /etc /var/lib/dpkg /var/lib/apt/extended_states /var/lib/aptitude/pkgstates ~/squ_update_${HOSTNAME}_curr-pkgs.txt cd Nicht vergessen werden dürfen die Nutzerdaten: * WWW * Home * Mysql * /root * und andere Alternativ kann man ein vollständiges Backup des Systems machen, indem man in ein Backupsystem bootet und alle Festplatten als //dd// Image speichert. Dieses ist am Sichersten, dauert aber auch am Längsten. Dennoch sollte die oben aufgeführten Tars machen, um leichter im Problemfall auf diese zurückzugreifen zu können. Als Beispiel sind hier die //netcat// Befehle für eine komplette Kopie * System, dass aktualisiert werden soll dd bs=4M if=/dev/sda | buffer -s 512k -S 100m | netcat target-ip 9000 * Ziel der Sicherungsdateien netcat -l -p 9000 | dd bs=4M of=squ_update_${HOSTNAME}_$(date +%Y%m%d%H%M%S)_sda.ddimg === Problem-Pakete entfernen === Ab hier beginnt offiziell das Update. Das System wird nun verändert! * Wir starten nun die Aufname unserer Shell-Session script -t 2>~/upgrade-squeezestep.time -a ~/upgrade-squeezestep.script :!: Mit ''exit'' beendet man die Aufname! :!: Wenn man zwischendurch sich anschauen möchte, was man gemacht hat, wechselt man in eine andere Shell und führt den folgenden Befehl aus. less -R ~root/upgrade-squeeze.script * Später kann man die Aufname mit dem folgenden Befehl abspielen. scriptreplay ~/upgrade-squeeze.time ~/upgrade-squeeze.script * Löschen von Problempakete apt-get purge splashy === Paketsourcen === Die folgenden Anweisungen betreffen die Datei ''/etc/apt/sources.list'' und alle Dateien innerhalb des Ordners ''/etc/apt/sources.list.d'' * //proposed-updates// muss entfernt werden egrep -R "^[^#]*proposed-updates" /etc/apt/sources.list* * //backports// sollten deaktiviert werden, da die bisher genutzten Versionen in //lenny-backports// höchstwahrscheinlich denen in //squeeze// entsprechen. egrep -R "^[^#]*lenny-backports" /etc/apt/sources.list* :!: Besitzt man //backport// Pakete, kann es zu Problemen beim Update kommen! Wenn man inoffizielle Quellen nutzt, muss man prüfen, ob diese Pakete für //squeeze// anbieten oder //squeeze// oder diese mittlerweile in einer "richtigen" Version in //squeeze// vorhanden sind. * //lenny// durch //squeeze// austauschen sed -i 's/lenny/squeeze/' /etc/apt/sources.list* ===== Update durchführen ===== Um zu erkennen, welche Dateien sich ab jetzt ändern, legten wir eine Datei an, die dann als Referenzzeit gilt. touch ~/squ_update_starttime Wenn man ein XEN0-System aktualisiert, muss man zur Vorsicht die DomUs aus dem Autostart entfernen! rm -vf /etc/xen/auto/* ==== Minimalupdate ==== * Prüfen, ob ausreichend Speicher auf dem System vorhanden ist. Addiere was heruntergeladen werden muss mit dem zusätzlich verbrauchten Speicherplatz. apt-get update apt-get -o APT::Get::Trivial-Only=true dist-upgrade * Minimales system upgrade apt-get upgrade Es kann passieren, dass Konfigurationsdateien überschrieben werden. Das soll nicht passieren, kann aber. Zur Sicherheit schaue lieber alle Dateien in ''/etc'' an, die seit unseren ersten Schritten verändert wurden. Diese Methode ist sicherer als mit less die Aufnahmedatei durch zuschauen. Dennoch empfiehlt es sich auch jene zu prüfen. find /etc/ -type f -newer ~/squ_update_starttime Einige Konfigurationsdateien werden erneuert. man sollte die alte Version behalten und nach dem erfolgreichen Beenden des Befehls diese mit ''vimdiff'' auf Veränderungen prüfen. Man kann diese Dateien mit den folgenden Befehlen finden: find /etc/ -iname "*dpkg-new" find /etc/ -iname "*old" find /etc/ -iname "*dpkg-dist" find /etc/ -iname "*dist" ==== Update Kernel und udev ==== Um zu erkennen, welche Dateien sich ab jetzt ändern, legten wir eine Datei an, die dann als Referenzzeit gilt. touch ~/squ_update_kernel Auf Grund von Veränderungen in den Kerneldefaults funktioniert das alte //udev// nicht mehr mit dem neuen Kernel und das neue //udev// nicht mehr mit dem alten. * Installation des neuen Kernel apt-get install linux-image-2.6-flavor # amd64 oder 686 # für XEN Dom0 apt-get install linux-image-2.6-xen-amd64 xen-hypervisor-4.0-amd64 apt-get remove --purge xen-hypervisor-3.2-1-amd64 xen-utils-3.2-1 # für XEN DomU apt-get install linux-image-2.6.32-5-xen-amd64 //Der Grund für die Umstellung auf die Installation eines ganzen Kernel-Images in einer XenU ist, dass ich im Python Konfigurations-Start-Skript (''xm'') das Mounten der XenU-Rootpartition und Kopieren des aktuellen Kernels daraus implementieren möchte.// * Zur Sicherheit führen wir noch einmal die Grub-Konfiguration aus. update-grub * Installation von //udev// apt-get install udev * Prüfen auf neue Konfigurationsdateien find /etc/ -type f -newer ~/squ_update_kernel find /etc/ -iname "*dpkg-new" find /etc/ -iname "*old" find /etc/ -iname "*dpkg-dist" find /etc/ -iname "*dist" In Squeeze hat sich ''modprobe'' geändert. Es gibt beispielsweise die Option ''-o'' nicht mehr. Wenn man //bonding// bisher in der folgenden Form genutzt hat, um Netzwerkinterfaces zusammen zuführen, dann muss man die Einträge ändern. Vorher: # Multi VLAN interface # bond interface mit kalten fallback auto bond0 iface bond0 inet manual pre-up modprobe -v bonding -o bond0 mode=active-backup primary=eth0 miimon=100 up /sbin/ifconfig bond0 up post-up /sbin/ifenslave bond0 eth0 post-up /sbin/ifenslave bond0 eth1 post-down /sbin/ifconfig bond0 down post-down rmmod bond0 Hinterher: # Multi VLAN interface # bond interface mit kalten fallback auto bond0 iface bond0 inet manual bond-primary eth0 bond-slaves eth0 eth1 bond-mode active-backup bond-miimon 100 :!: Ohne einen Eintrag in dem Verzeichnis //modprobe.d// in der folgenden Art, gibt es beim Booten eine Fehlermeldung, die aber nur unschön ist. cd /etc/modprobe.d cat > aliases-bond.conf alias bond0 bonding options bonding mode=1 arp_interval=2000 arp_ip_target=192.168.3.1 Fehlermeldung, wenn der obrige Eintrag nicht vorhanden ist: bonding: Warning: either miimon or arp_interval and arp_ip_target module parameters must be specified, otherwise bonding will not detect link failures! see bonding.txt for details. Auch muss man sicherstellen, dass das Paket ''ifenslave-2.6'' installiert ist. apt-get install ifenslave-2.6 :!: Jetzt sollte man das System mit dem neuen Kernel neu starten. shutdown -r now # Für XEN DomU poweroff ==== Distributionsupdate ==== * Aufnahme für die Shell script -t 2>~/upgrade-squeezestep1.time -a ~/upgrade-squeezestep1.script Um zu erkennen, welche Dateien sich ab jetzt ändern, legten wir eine Datei an, die dann als Referenzzeit gilt. touch ~/squ_update_dist * Update starten apt-get dist-upgrade * Prüfen auf neue Konfigurationsdateien find /etc/ -type f -newer ~/squ_update_dist find /etc/ -iname "*dpkg-new" find /etc/ -iname "*old" find /etc/ -iname "*dpkg-dist" find /etc/ -iname "*dist" :!: System neu starten shutdown -r now ==== Grub 2 aktivieren ==== * Zur Sicherheit schauen wir uns das bootlog auf Ungereimtheiten an. less /var/log/dmesg * Grub2 in den MBR schreiben upgrade-from-grub-legacy :!: System neu starten shutdown -r now * Alte grub Konfigurationsdateien entfernen rm -f /boot/grub/menu.lst* Wenn man XEN nutzt, dann muss man noch einige weitere Änderungen vornehmen. * XEN-Kernel mit Hypervisor als erstes im Grub-Menü mv -i /etc/grub.d/50_linux /etc/grub.d/20_linux mv -i /etc/grub.d/20_linux_xen /etc/grub.d/10_linux_xen * DomU Systeme nicht im Grub-Menü auftauchen lassen (''/etc/default/grub'') # Disable OS prober to prevent virtual machines on logical volumes from appearing in the boot menu. GRUB_DISABLE_OS_PROBER=true * Grub-Menü neu aufbauen update-grub Ressources: * http://wiki.debian.org/Xen#Installation_on_squeeze * http://www.bertol.de/Xen+4.0+unter+Debian+Squeeze ==== Update abschließen ==== Man kann nun alle Pakete, die obsolet sind entfernen. apt-get clean && apt-get autoremove aptitude Wenn man das automatische starten von XEN DomUs abgeschaltet hat, muss man dieses wieder aktivieren. ===== Problemlösungen ===== Hilfe bei Problemen findet man im Internet und [[http://www.debian.org/releases/squeeze/amd64/release-notes/ch-upgrading.en.html#trouble|hier]].