GästebuchIhr Eintrag in unser Gästebuch KontaktNehmen Sie Kontakt mit den Autoren auf ArchivAlle Unixwerk- Artikel seit 2003
8. Oktober 2006

Wie kann ich von Slackware 10.2 auf Slackware 11.0 updaten?

Inhalt

  1. Das System in den Single-User-Mode bringen
  2. Slackware DVD mounten
  3. Neue »glibc« installieren
  4. Neue »pkgtools« installieren
  5. Alle weiteren Pakete aktualisieren bzw. neu installieren
  6. Überflüssige Pakete deinstallieren
  7. Anpassen der Start-Skripts und einiger Konfigurationsdateien
  8. 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 signal

Danach 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/cdrom

Standard 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.

#!/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

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:

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:

a) In der Datei rc.inet1.conf sollten die Werte für

oder

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.new

Die 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....


1Voraussetzung ist eine Referenz "image = /boot/vmlinuz" in der Datei /etc/lilo.conf