Wie kann ich von Slackware 10.2 auf Slackware 11.0 updaten?
Inhalt
- Das System in den Single-User-Mode bringen
- Slackware DVD mounten
- Neue »glibc« installieren
- Neue »pkgtools« installieren
- Alle weiteren Pakete aktualisieren bzw. neu installieren
- Überflüssige Pakete deinstallieren
- Anpassen der Start-Skripts und einiger Konfigurationsdateien
- Kernel aktualisieren
Seit dem 2. Oktober 2006 ist sie nun da - die neue Slackware 11.0. Nicht weniger als die beste Slackware, die es je gab, soll es sein. Für unixwerk Grund genug, sich mit dem Upgrade einer vorhandenen Slackware 10.2 auf die neue Version zu beschäftigen.
Wie immer stellt Patrick Volkerding für seine Linux-Distribution eine Upgrade-Prozedur zusammen. Sie bildet die Grundlage für das im Folgenden beschriebene Verfahren.
1. Das System in den Single-User-Mode bringen
Dies ist streng genommen gar nicht nötig, dennoch wollen wir wenigstens die neue glibc im Single-User-Mode installieren.
darkstar# telinit 1 INIT: Switching to runlevel: 1 INIT: Sending processes the TERM signalDanach müssen Sie sich neu anmelden.
2. Slackware DVD mounten
Falls Sie die CD-Version von Slackware benutzen, legen Sie die erste CD ein - sie enthält bereits die wichtigsten Pakete.
darkstar# mount /mnt/cdromStandard bei Slackware ist das Verzeichnis /mnt/cdrom für CDs und DVDs
3. Neue »glibc« installieren
Angenommen die Slackware-CD ist unter /mnt/cdrom in den Verzeichnisbaum eingehängt:
darkstar# installpkg /mnt/cdrom/slackware/a/glibc-solibs-2.3.6-i486-6.tgz
4. Neue »pkgtools« installieren
darkstar# installpkg /mnt/cdrom/slackware/a/pkgtools-11.0.0-i486-4.tgz
5. Alle weiteren Pakete aktualisieren bzw. neu installieren
Sie können alles weitere bequem auch im Multiuser-Mode unter X tun. Ich habe z.B. einen Artikel für unixwerk geschrieben während der Upgrade lief....
Die Installation der restlichen Pakete kann auf mehrere Arten geschehen. Zumindest die Paketserien a, ap, l und n sollten komplet installiert werden. Im Beispiel werden weitere wichtige Paketserien komplett installiert:
darkstar# upgradepkg --install-new /mnt/cdrom/slackware/{a,ap,d,kde,l,n,tcl,x,xap,y}/*.tgz
Ein Wort zu den Paketserien - die folgende Tabelle gibt Ihnen einen Überblick über die Paketserien, die sich auf der DVD unter slackware befinden. Weitere Pakete finden Sie unter extra und testing.
--Paketserie-- | --Beschreibung-- |
a | Die Basispakete |
ap | Grundlegende Applikationen |
d | Entwicklungsumgebungen (Compiler, ...) |
e | GNU Emacs |
f | FAQs und HOWTOs |
k | Der Linux-Kernel 2.4.33 |
kde | K Desktop Environment 3.5.4 |
kdei | Sprachumgebungen für KDE 3.5.4 |
l | Laufzeit-Bibliotheken |
n | Netzwerkumgebung |
t | LaTeX |
tcl | Tcl Scriptsprache |
x | Xserver und Basispakete für X11 |
xap | Graphische Applikationen |
y | Einfache Kommandozeilenspiele |
Ausgewählte Pakete aus den verbleibenden Serien können wie folgt installiert werden, beispielsweise die deutsche Sprachumgebung für KDE:
darkstar# upgradepkg --install-new /mnt/cdrom/slackware/kdei/k*-de-*.tgz
Falls Sie dem Kernel 2.6.18 den Vorzug vor den älteren geben wollen, installieren Sie aus der Rubrik Testing beispielsweise:
darkstar# cd /mnt/cdrom/testing/packages darkstar# upgradepkg --install-new linux-2.6.18/kernel-headers-2.6.18-i486-1.tgz darkstar# upgradepkg --install-new linux-2.6.18/kernel-source-2.6.18-i486-1.tgz
Benutzen Sie keinen selbstgebauten Kernel, dann sind zwei weitere Pakete unabdingbar:
darkstar# cd /mnt/cdrom/testing/packages darkstar# upgradepkg --install-new linux-2.6.18/kernel-generic-2.6.18-i486-1.tgz darkstar# upgradepkg --install-new linux-2.6.18/kernel-modules-2.6.18-i486-1.tgz
Auf die gleiche Weise lassen sich natürlich weitere Pakete aus den Rubriken Testing oder Extra
installieren bzw. aktualisieren.
6. Überflüssige Pakete deinstallieren
Dies ist gar nicht so einfach, wie es Patrick beschreibt. Besonders, wenn man auch mal etwas aus anderen Quellen nachinstalliert hat. Ich habe deshalb das folgende Skript geschrieben, das nur solche Pakete löscht, die tatsächlich mal Bestandteil der Slackware-CD waren, jetzt aber nicht mehr (unter diesem Namen) dabei sind.
Dieses Skript, nennen wir es find_oldpackages, entfernt nichts vom System, sondern schreibt die entsprechenden removepkg-Befehle auf die Standardausgabe, bei mir war's so:#!/bin/bash # find obsolete packages #
PKGDB=/var/log/packages PKGROOT=/mnt/cdrom/slackware CWD=$PWD cd $PKGDB# List of packages older then glibc-solibs
OLDPKGS=$(for pkg in * do find glibc-solibs-2.3.6-i486-6 -newer $pkg -exec echo $pkg \; done)# Sort out packages not updated, but on slack media
PKGDIFFS=$(for opkg in $OLDPKGS do ls $PKGROOT/*/$opkg.tgz > /dev/null 2>&1 [ "$?" = 0 ] || echo $opkg done)# find packages removed from slackware
for fpkg in $PKGDIFFS do grep LOCATION: $PKGDB/$(basename $fpkg .tgz) | grep slackware | awk -F/ '{print $NF}' \ | sed -e 's/^\(.\)/removepkg \1/' -e 's/.tgz$//' done cd $CWD
darkstar# sh /tmp/find_oldpackages removepkg abiword-2.2.9-i486-1 removepkg db3-3.3.11-i486-4 removepkg db31-3.1.17-i486-1 removepkg db4-4.2.52-i486-2 removepkg nail-11.24-i486-1 removepkg python-demo-2.4.1-noarch-1 removepkg python-tools-2.4.1-noarch-1 removepkg sgml-tools-1.0.9-i486-12 removepkg xvim-6.3.086-i486-1
7. Anpassen der Start-Skripts und einiger Konfigurationsdateien
Die alten Start-Skripts im Verzeichnis /etc/rc.d wurden durch diesen Upgrade-Prozess nicht überschrieben. Dies hat den Vorteil, dass beispielsweise die IP-Konfiguration des Systems ebenso erhalten geblieben ist wie die Einträge in /etc/rc.d/rc.local.
Der Nachteil ist, dass Änderungen im Boot-Prozess, die Bestandteil der neuen Slackware-Version sind, nicht nachgezogen wurden. Die zur Version 11.0 passenden Skripts liegen im Verzeichnis /etc/rc.d/ mit der Endung .new. Die meisten können einfach über die alten kopiert werden.
Ausnahmen sind:
- rc.inet1.conf
- rc.local
a) In der Datei rc.inet1.conf sollten die Werte für
- IPADDR[0]=
- NETMASK[0]=
- GATEWAY=
oder
- USE_DHCP=
und/oder die Werte für die WLAN-Konfiguration angepasst werden. Gegebenenfalls ebenfalls die Werte für weitere Netzwerkkarten.
b) Die Datei rc.local muss nicht durch die neue Version ersetzt werden.
Eine ganze Reihe von Konfigurationsdateien im /etc-Verzeichnis werden durch das Upgrade ebenfalls nicht angefasst, sondern mit der Endung .new neben die alten kopiert. Bei mir sah es so aus:
darkstar# cd /etc darkstar# find . -name '*.new' ./DIR_COLORS.new ./csh.login.new ./logrotate.conf.new ./hotplug/blacklist.new ./iproute2/rt_protos.new ./ssl/openssl.cnf.new ./pcmcia/config.opts.new ./sane.d/gt68xx.conf.new ./sane.d/plustek_pp.conf.new ./sane.d/fujitsu.conf.new ./sane.d/mustek.conf.new ./sane.d/epson.conf.new ./sane.d/genesys.conf.new ./sane.d/dll.conf.new ./sane.d/artec_eplus48u.conf.new ./sane.d/snapscan.conf.new ./sane.d/avision.conf.new ./at.deny.new ./ssh/ssh_config.new ./ssh/sshd_config.new ./ppp/firewall-standalone.new ./mail/submit.cf.new ./mail/sendmail.cf.new ./inittab.new ./profile.new ./shadow.new ./services.new ./group.new ./passwd.new ./modprobe.conf.new ./modules.conf.new ./smartd.conf.new ./dnsmasq.conf.new ./irssi.conf.new ./lftp.conf.new ./nail.rc.new ./networks.new ./vsftpd.conf.new
Dateien, die man niemals angepasst hat, wird man durch die neuen ersetzen wollen; für die anderen muss im Einzelfall geprüft werden, ob die alte Konfigurationsdatei beibehalten werden kann oder die neue angepasst werden muss.
Insbesondere bei den Dateien /etc/group, /etc/passwd und /etc/shadow, sollte man überprüfen, ob neue Systembenutzer bzw. -gruppen hinzugekommen sind. Beim Upgrade von 10.2 auf 11.0 ist dies nicht der Fall; die alten Dateien können also beibehalten werden.
Tatsächlich musste ich nur die Datei /etc/rc.inet1.conf anpassen. Wenn Sie Dateien anpassen müssen oder die alte beibehalten wollen, löschen Sie die entsprechende Datei mit der Endunung .new, damit Sie anschließend das Skript von Patrick (vgl. UPGRADE.TXT) verwenden können, um alle anderen Konfigurationsdateien durch die neue Version zu ersetzen:
#!/bin/sh
cd /etc
find . -name "*.new" | while read configfile ; do
if [ ! "$configfile" = "./rc.d/rc.inet1.conf.new" \
-a ! "$configfile" = "./group.new" \
-a ! "$configfile" = "./passwd.new" \
-a ! "$configfile" = "./shadow.new" ]; then
cp -a $(echo $configfile | rev | cut -f 2- -d . | rev) \
$(echo $configfile | rev | cut -f 2- -d . | rev).bak 2> /dev/null
mv $configfile $(echo $configfile | rev | cut -f 2- -d . | rev)
fi
done
Zwei weitere Dateien übrigens musste ich anpassen, sie betreffen den Login-Manager kdm und liegen im Verzeichnis /opt/kde/share/config/kdm. Ein find fördert allerdings nur eine Datei zu Tage:
darkstar# cd /opt/kde darkstar# find . -name '*.new' ./share/config/kdm/kdmrc.newDie andere war die Datei backgroundrc im selben Verzeichnis, die einfach überschrieben wurde - meine Änderung war also verschwunden. Sie betraf das Hintergrundbild des Login-Managers, das durch folgenden Eintrag gesteuert wird:
Wallpaper=default_blue.jpg
8. Kernel aktualisieren
Der Linux-Kernel wird durch die Upgrade-Prozedur gar nicht direkt beeinflusst. Nutzen Sie lilo und einen Installationskernel, reicht das Neuschreiben des Bootmanagers1:
darkstar# lilo Added Linux * Added Windows
Nun müssen wir doch tatsächlich einmal rebooten....