[HOWTO] Upgrade einer SuSE Version 9.1 auf 9.2 mit apt

Alles rund um die Installation Eures Linuxsystems, sowie die Updatefunktionen des Systems und das Paketmanagement

Moderator: Moderatoren

Gesperrt
Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

[HOWTO] Upgrade einer SuSE Version 9.1 auf 9.2 mit apt

Beitrag von oc2pus » 11. Jan 2005, 16:25

Diese Anleitung beschreibt das Upgrade einer SuSE 9.1 auf eine SuSE 9.2 mit apt

###########################################################
VORBEMERKUNGEN:
###########################################################
Diese Anleitung ist nach bestem Wissen und Gewissen erstellt worden - bei mir hat es funktioniert.
Ich übernehme keinerlei Garantie dafür das es bei euch genauso reibungslos klappt.

Ich empfehle zuerst den GESAMTEN Text durchzulesen --BEVOR-- man anfängt ;)

Wenn etwas schief geht, Ruhe bewahren, Fehlermeldung genau lesen und die man-pages lesen. Die Stelle des point-of-no-return ist mit einem Kommentar gekennzeichnet.
Alles was vor dem point-of-no-return passiert, hat NICHTS am System geändert.
Selbst wenn rpm neue Pakete installiert, alle gestarteten Programme sind noch die alte Version. Erst wenn man sie beendet und neustartet, wird die neue Version gestartet. D.h. man sollte sich seinen Lieblingseditor, Dateimanager etc schon mal starten vor dem Upgrade. Dann hat man evtl. mehr Möglichkeiten einzugreifen. Shell-Künstler schliessen natürlich alle Anwendungen und arbeiten in runlevel 3 ;)

Die neuen Pakete werden in ein eigenes Cache-Verzeichnis geschrieben. Damit können die alten RPMs jederzeit wieder aus dem 9.1er Cache mit
rpm -Uhv --force *.rpm
installiert werden. Das gilt natürlich nur für die im Cache vorhandenen Pakete.
Um an die original Pakete der DVD/CD wider dran zu kommen, muß man die DVD/CD mounten und kann dann von dort RPMs installieren. Das ist alles problemlos möglich solange man NICHT bootet im Falle eines Problems. Keep Cool.

Um ein Linux System am laufen zu halten, sollte man die Pakete, welche in der Datei /etc/apt/rpmpriorities stehen irgendwo greifbar haben. Ohne rpm und zugehörige wird es schwierig Pakete zu ersetzen ;)

Ein Besuch im IRC-Channel (irc.freenode.net #linux-club.de oder http://gimpel.funpic.de/irc) kann eventuell auch hilfreich sein ;)

###########################################################
VORRAUSSETZUNGEN:
###########################################################
Wer das upgrade ausprobieren will, sollte mindestens einen Editor in der shell bedienen können, die grundlegenden Befehle wie mkdir, cd, tar, etc kennen UND wissen wie er im schlimmsten Fall mit einer Rescue CD wieder an sein System dran kommt!

Eine funktionierende apt Installation setze ich natürlich ebenfalls voraus ;)

Ein Backup sollte auch greifbar sein, man weiß ja nie....
Ein kurzer Blick in die man-pages von apt und apt-get kann auch nicht schaden.

apt speichert seine Downloads normalerweise in einem lokalen Cache (/var/cache/apt).
Dort sollten ca 700-900 MB Platz vorhanden sein, damit die 9.2er Pakete dort Platz haben.
Wenn man dort nicht soviel Platz hat, kann man das Repository von apt auch auf eine andere Partion verschieben, dazu ist eine Anpassung in /etc/apt/apt.conf.d/apt.conf erforderlich.

###########################################################
Immer noch der Meinung "das will ich auch?" ... dann los.
###########################################################

Schritt 1: in einer Konsole root werden
su -
<passwd>
Schritt 2: aktuelle apt-Konfiguration sichern
cd /etc
tar cvzf myApt-conf-9.1.tar.gz apt/*
Schritt 3: ein temporäres Verzeichnis anlegen um diverse Informationen zu sammeln
cd /root
mkdir update
cd update
Schritt 4: aktuelle Paketliste sichern
rpm -qa | sort > myAktRPMs-9.1
Schritt 5: aktuelles apt.log sichern und neues leeres logfile erstellen
mv /var/log/apt.log apt-9.1.log
touch /var/log/apt.log
Schritt 6: Die Dateien /etc/apt/sources.list und /etc/apt/security.list anpassen auf die 9.2er Repositories
VORSICHT: es gibt einige Repositories nicht mehr in 9.2 bzw es gibt andere das kann durch einen Besuch der ftp site http://ftp.gwdg.de/pub/linux/suse/apt/SuSE/9.2-i386/ geprüft werden.
Muster sources.list gibt es hier: http://ftp.gwdg.de/pub/linux/suse/apt/S ... s.list.FTP

Beispiel für die Änderung:
rpm http://ftp.gwdg.de/pub/linux/suse/apt/ SuSE/9.1-i386 base ==>
rpm http://ftp.gwdg.de/pub/linux/suse/apt/ SuSE/9.2-i386 base
Tip: kernel-of-the-day evtl deaktivieren, damit der SuSE-Standard-Kernel für 9.2 installiert wird.
Tip: wer in /etc/sources.list.d weitere Konfigurationen hat, muss diese auch anpassen!

Schritt 7: In der Datei /etc/apt/apt.conf.d/apt.conf die Option Hold für den kernel deaktivieren

Code: Alles auswählen

RPM
{
    Hold { "kernel-default"; };  ändern zu // Hold { "kernel-default"; };
    ...
}
Wer andere Kernel benutzt, muss diese Zeile entsprechend seines Kernels anpassen (z.Bsp: kernel-default-smp)

Schritt 8: In der Datei /etc/apt/preferences folgende Änderungen durchführen:
Alle eventuell vorhandenen Einträge aus der /etc/apt/preferences entfernen. Falls diese Datei nicht existiert, lege sie an. Und diesen Eintrag einfügen:
Package: *
Pin: release v=9.2
Pin-Priority: 1001
Damit zwingen wir apt bei gleicher Versionsnummer von 9.2er Paketen diese zu verwenden.
Manchmal haben die 9.2er Pakete auch kleinere Versionsnummern als die 9.1er, diese würden dann nicht "upgegraded". Dieser kleine Trick erledigt das dann ;)
Leider ist diese Info nicht in allen Paketen enthalten, deshalb sind manchmal nacharbeiten erforderlich.

Schritt 9: Damit die Pakete für den upgrade auf 9.2 nicht im alten Cache-Verzeichnis für Version 9.1 landen, ist folgende Änderung in der /etc/apt/apt.conf.d/apt.conf in der Sektion Dir "/" { } erforderlich:

Code: Alles auswählen

// Directory layout
Dir "/"
{
  // Location of the state dir
  State "local/state/apt/"
  {
    lists "lists-9.2/";
    status "/local/status";
    ...
 };

 // Location of the cache dir
 Cache "local/cache/apt/" {
    archives "archives-9.2/";
    srcpkgcache "srcpkgcache-9.2.bin";
    pkgcache "pkgcache-9.2.bin";
 };
...
};
Schritt 10: Anlegen der neuen Cache Verzeichnisse in /local. Wer es woanders haben möchte muss sich die Befehle entsprechend anpassen ;)
Der Platzbedarf war bei meinem System ca 800MB.
mkdir -p /local/state/apt/lists-9.2/partial
mkdir -p /local/cache/apt/archives-9.2/partial
touch /local/state/apt/lists-9.2/lock
touch /local/cache/apt/archives-9.2/lock
Damit ist die Konfiguration für apt abgeschlossen.

Schritt 11: die apt-Repositories füllen und updaten für 9.2
apt update
sollten jetzt Fehlermeldungen bezüglich der Konfigurationsdateien kommen, zurück zum Anfang und nochmal sogfältig die Anpassungen vergleichen. Ohne korrekte Konfiguration wird man scheitern!

Schritt 12: Jetzt lassen wir apt den Upgrade berechnen.
Durch den tee Befehl werden die Bilschirmausgaben zusätzlich in die Datei upgrade.txt geschrieben. Das erleichert uns die Arbeit etwas, da die Ausgabe von dist-upgrade sehr lang sein kann und man ggfl nicht so weit zurückscrollen kann in der Konsole.
apt -s dist-upgrade | tee upgrade.txt
die Datei upgrade.txt sollte dann so aussehen

Code: Alles auswählen

Reading Package Lists...
Building Dependency Tree...
The following packages will be upgraded
  3ddiag BitTornado CheckHardware DirectFB GTorrentViewer ImageMagick MPlayer
  OpenOffice_org OpenOffice_org-de OpenOffice_org-de-templates SDL SDL-devel
  SDL_image SDL_image-devel SDL_mixer SDL_net SDL_sound SDL_ttf SDLmm
  SDLmm-devel a2ps aaa_base aaa_skel aalib aalib-devel acl afio apollon
  apt-file apt-iselect apt-smartclean apt4rpm arc ash aspell at attr audiofile
  autoyast2-installation avifile avifile-qt awesfx bash bc bchunk bin86
  binutils bison bitstream-vera blt bluez-libs bonobo bootsplash
  bootsplash-theme-SuSE bzip2 cabextract ccd2iso cdk cdparanoia cdrdao chaplin
  checkinstall clanlib clanlib-devel colorgcc compat control-center coreutils
  cpdvd cpio cpp cpvts cracklib cron ctags cups-client cups-drivers cups-libs
  curl curl-devel cvs cyrus-imapd cyrus-sasl cyrus-sasl-plain dar db db-devel
  db-utils db1 db41 dbh ddclient ddd ddrescue deb desktop-data-SuSE
  device-mapper devs dhcpcd dialog diffutils dirsync distcc
  docbook-dsssl-stylesheets docbook-toys docbook-utils docbook-xml-website
  docbook-xsl-stylesheets docbook_3 docbook_4 dos2unix dosbootdisk dosfstools
  doxygen e2fsprogs e2fsprogs-devel eazy eject enscript esound esound-devel
  ethtool evms expat faad2 fam fam-devel fbset fetchmail fftw fftw3 file
  filesystem fillup findutils finger flac flac-devel flash-player flex
  fontconfig fontconfig-devel foomatic-filters fping freeglut freeglut-devel
  freetype freetype2 freetype2-devel fribidi ftp fvwm2 gail gail-devel gal gawk
  gcc gcc-c++ gconf gconf2 gdb gdbm gdbm-devel gdk-pixbuf gettext
  ghostscript-fonts-other ghostscript-fonts-std ghostscript-library
  ghostscript-x11 giFT giFT-FastTrack giFT-openft gle glib glib-devel glibc
  glibc-devel glibc-html glibc-locale gnokii gnome-desktop gnome-filesystem
  gnome-icon-theme gnome-keyring gnome-libs gnome-libs-devel gnome-mime-data
  gnome-print gnome-vfs2 gpg gpm graphviz grep groff grub gtk gtk-devel
  gtk-xfce-engine gtkglarea gtkhtml-devel gtkmm gtkmm-devel guile gv gxine
  gxmhtml gzip hdparm heimdal-lib help2man hermes hotplug htdig html-dtd
  html2txt htop hwinfo hwinfo-devel id3lib id3lib-devel ifnteuro imap-lib
  imediff2 imlib imlib-devel imwheel indent info info2html initviocons insserv
  intlfnts iproute2 iptables iptables-devel iputils irssi isapnp iselect
  iso_ent itcl iwidgets jack jack-devel jta-javadoc kaffeine kalbum kbd kbear
  kconfigure kdocker kfile_torrent kim kinternet kio-apt kmenc15 krename
  krpmbuilder ksymoops kwatch kwavencoder kxmleditor ladspa latex2html-pngicons
  ldapcpplib less lha libacl libattr libavc1394 libbonobo libbonoboui libcap
  libdar libdar-devel libdvdread libdvdread-devel libexif libgcc libgcj
  libghttp libgiFT libgimpprint libglade libglade-devel libglade2
  libglade2-devel libgnome libgnomecanvas libgnomeprint libgnomeprintui
  libgnomeui libgpg-error libgphoto2 libgtkhtml libidl libidl-devel libidn
  libidn-devel libieee1284 libjasper libjpeg liblcms liblcms-devel libmal
  libmcal libmcrypt libmcrypt-devel libmikmod libmng libmng-devel libmpeg2
  libmpeg3 libnetpbm libofx libpcap libpng libpng-devel libquicktime libraw1394
  libsamplerate libselinux libsigc++ libsigc++-devel libsndfile
  libsndfile-devel libstdc++ libstdc++-devel libstroke libtiff libunicode
  libusb libwmf libxcrypt libxfce4mcs libxfce4mcs-devel libxfce4util
  libxfce4util-devel libxfcegui4 libxfcegui4-devel libxml libxml-devel
  liby2util libzvt libzvt-devel linc linc-devel linux-atm linux-atm-lib lirc
  listexec logrotate lsof lua lua-devel lvm2 lzo lzo-devel mad mad-devel mailx
  make man man-pages mc mdadm metacity mhash mingetty mjpegtools mkinitrd
  mktemp mkvtoolnix mm module-init-tools mpglen mrtg mtools myspell-german
  mysql-shared nasm ncurses ncurses-devel net-snmp net-tools netcat netcfg
  netpbm newt newt-devel nfs-utils normalize nss_ldap ntfsprogs oaf openjade
  openldap2-client openmotif openmotif-libs openslp opensp openssh
  openssh-askpass openssl openssl-devel orbit orbit-devel orbit2 orbit2-devel
  pam pam-devel pam-modules pam_ldap pango pango-devel parted parted-devel
  patch patchutils pciutils pcre pcre-devel pcsc-lite perl perl-Archive-Tar
  perl-Archive-Zip perl-Bit-Vector perl-Compress-Zlib perl-Config-Crontab
  perl-Config-General perl-Config-IniFiles perl-Convert-TNEF perl-Convert-UUlib
  perl-Curses perl-Cyrus-IMAP perl-Cyrus-SIEVE-managesieve perl-Date-Calc
  perl-Digest-HMAC perl-Digest-SHA1 perl-File-MMagic perl-File-Tail perl-GD
  perl-Gtk-Perl perl-HTML-Parser perl-HTML-Tagset perl-HTML-Template
  perl-IO-stringy perl-Inline perl-MIME-tools perl-MailTools perl-Net-DNS
  perl-Net-Server perl-Net_SSLeay perl-PDA-Pilot perl-Parse-RecDescent
  perl-SGMLS perl-SNMP perl-TermReadKey perl-TimeDate perl-Tk perl-URI
  perl-Unix-Syslog perl-XML-LibXML perl-XML-Parser perl-XML-Writer
  perl-cpan2rpm perl-gettext perl-libapt-pkg perl-libconfigfile
  perl-libwww-perl perl-spamassassin permissions pgmfindclip pilot-link
  pkgconfig popt popt-devel portmap postfix postgresql-libs powertweak ppp pptp
  procinfo procmail procps providers psmisc pvm pvm-devel pwdutils python
  python-curses python-devel python-gtk python-numeric python-pygame python-tk
  python-wxGTK python-xml pyxml qt3 qt3-devel qt3-devel-doc qt3-non-mt qvcd
  qvcdgear raidtools rcs readline readline-devel recode reiserfs release-notes
  resmgr ripmake rpm rpm-devel rpm-python rpmkey-suser-scorot rrdtool rsh rsync
  sablot sash sax2 sax2-ident sax2-tools scpm screen scrollkeeper scsi sed
  sensors setserial sgml-skel shared-mime-info sharutils siga sitar slang
  slang-devel slib smpeg smpppd sox spamassassin sqlite sqlite-devel squid
  src_vipa startup-notification strace submount sudo superkaramba
  suse-build-key suse-release susehelp susehelp_de suselinux-adminguide_de-pdf
  swig synaptic sysconfig syslinux syslogd sysvinit t1lib tarfix tcl tcl-devel
  tcpd tcpdump tcsh telnet telnet-server terminfo texinfo tidy tightvnc
  timezone tix tk tkxcd tleds toolame torrentsniff tovid txt2man txt2regex udev
  unace unarj unclutter unixODBC unixODBC-devel unzip update-desktop-files upx
  usbutils utempter util-linux uudeview vcdgear vim vorbis-tools w3m
  w3m-inline-image wbumount webalizer wget whois wvdial wvstreams wxGTK
  wxGTK-compat wxGTK-devel wxGTK-gl xanim xaw3d xbanner xchat xdg-menu xdmbgrd
  xf86tools xfcalendar xfce-mcs-manager xfce-mcs-manager-devel xfce-mcs-plugins
  xfce-utils xfce4-appfinder xfce4-icon-theme xfce4-iconbox xfce4-mixer
  xfce4-panel xfce4-session xfce4-session-devel xfce4-session-engines
  xfce4-systray xfce4-toys xfce4-trigger-launcher xfdesktop xffm xfprint
  xfsprogs xfwm4 xfwm4-themes xinetd xlockmore xmlcharent xmms xmms-lib xntp
  xorg-x11 xorg-x11-Mesa xorg-x11-Mesa-devel xorg-x11-Xvnc xorg-x11-devel
  xorg-x11-driver-options xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi
  xorg-x11-fonts-scalable xorg-x11-libs xorg-x11-man xorg-x11-server
  xorg-x11-server-glx xscreensaver xtermset yast2 yast2-backup yast2-bootloader
  yast2-control-center yast2-core yast2-country yast2-inetd yast2-installation
  yast2-ldap yast2-ldap-client yast2-mail yast2-mail-aliases yast2-mouse
  yast2-ncurses yast2-network yast2-nfs-client yast2-nfs-server
  yast2-nis-client yast2-nis-server yast2-online-update yast2-packagemanager
  yast2-packager yast2-pam yast2-perl-bindings yast2-powertweak yast2-printer
  yast2-profile-manager yast2-qt yast2-restore yast2-runlevel yast2-scanner
  yast2-security yast2-storage yast2-support yast2-sysconfig
  yast2-theme-SuSELinux yast2-trans-de yast2-transfer yast2-tune yast2-update
  yast2-users yast2-x11 yast2-xml yp-tools ypbind zip ziptool zisofs-tools zlib
  zlib-devel zoo zsh
The following packages will be REPLACED:
  java2 (by java-1_4_2-sun-devel)  java2-jre (by java-1_4_2-sun)  libungif (by
  giflib)  par (by par2cmdline)
The following NEW packages will be installed:
  OpenEXR SuSEfirewall2 boehm-gc compat-readline4 dirmngr ed fonts-config
  giflib gpg2 gpgme jadetex java-1_4_2-sun java-1_4_2-sun-devel latex-ucs
  libexif5 libgcrypt libgnomecups libksba libmspack libnscd libtunepimp libzio
  openct opensc par2cmdline perl-BerkeleyDB pinentry te_etex te_latex te_pdf
  tetex update-alternatives xsu yast2-firewall
The following packages have been kept back
  ImageMagick-devel kernel-default m4
The following packages will be DOWNGRADED
  a52dec acroread ajcore ajcore-gui alsa alsa-devel alsa-tools amavisd-new
  apache2 apt apt-devel apt-libs apt-server atk atk-devel awstats
  bash-completion bind cdrecord cdrecord-devel cutter d4x divx4linux fame
  ffmpeg gd gd-devel gdome2 gdome2-devel glib2 glib2-devel gmp gtk2 gtk2-devel
  guarddog imlib2 imlib2-devel jpackage-utils kdebase3 kdebase3-kdm
  kdebase3-ksysguardd kdegraphics3 kdegraphics3-imaging kdegraphics3-kamera
  kdelibs3 kdemultimedia3-jukebox kdepim3 kdepim3-devel kdepim3-kpilot
  kdepim3-organizer kdepim3-sync kdepim3-time-management kdevelop3 lame libao
  libart_lgpl libart_lgpl-devel libcddb libcddb-devel libcdio libcdio-devel
  libdv libfame libffmpeg0 libffmpeg0-devel libnet libogg libogg-devel
  libsmbclient libtheora libtheora-devel libtool libvcd libvcd-devel libvorbis
  libvorbis-devel libxine1 libxine1-devel libxine1-sdl libxine1-syncfb libxml2
  libxml2-devel libxml2-python libxslt libxslt-devel libxslt-python lve mkisofs
  mpgtx multitail nmap ogmtools perl-XML-GDOME perl-XML-LibXML-Common
  perl-XML-NamespaceSupport perl-XML-SAX php4-bcmath php4-bz2 php4-calendar
  php4-ctype php4-curl php4-dbase php4-domxml php4-exif php4-filepro php4-ftp
  php4-gd php4-gettext php4-gmp php4-iconv php4-imap php4-ldap php4-mbstring
  php4-mcal php4-mcrypt php4-mhash php4-mime_magic php4-mysql php4-pgsql
  php4-qtdom php4-session php4-shmop php4-snmp php4-sockets php4-swf
  php4-sysvsem php4-sysvshm php4-unixODBC php4-wddx php4-xslt php4-yp php4-zlib
  rar rpmkey-packman rpmlint samba-client sarg schafkopf speex subtitleripper
  transcode vcdimager vsftpd w32codec-all xine-skins xine-ui xvid xvid-devel
720 upgraded, 34 newly installed, 148 downgraded, 4 replaced, 0 removed and 3 not upgraded.
<snip der INST und CONF Ausgabe>
Schritt 13: Jetzt müssen wir ein shell-Script erstellen. Mit diesem Script wird der
download und das eigentliche update dann durchgeführt.

myUpgrade erstellen mit folgendem Inhalt
#!/bin/bash
apt --test install \
<alle pakete aus "Die folgenden Pakete werden upgegradet werden">
<alle pakete aus "Die folgenden NEUEN Pakete werden installiert werden:">
<alle pakete aus "Die folgenden Pakete werden DOWNGRADED:">
<alle pakete aus "Die folgenden Pakete sind zurückgehalten worden">
hier einfügen.
Diese Informationen können aus der Datei upgrade.txt einfach hierher kopiert werden. Ein weiterer Grund für den tee-Befehl ;)
Am Ende wird diese Liste noch um die folgenden Einträge erweitert:
kernel-default java-1_4_2-sun-plugin
Wer noch inetd nutzt muss umstellen auf xinetd und mit inetd- das "veraltete" inetd deinstallieren, dieses gibt es nicht mehr.

Schritt 14: Alle Pakete aus der Sektion "werden Ersetzt" fügen wir in myUpgrade ein mit einem angehängten "-": java2- libungif- par- ... Das bedeutet schlicht und einfach, diese Pakete werden vor dem eigentlichen upgrade deinstalliert.

Code: Alles auswählen

The following packages will be REPLACED:
  java2 (by java-1_4_2-sun-devel)  java2-jre (by java-1_4_2-sun)  libungif (by
  giflib)  par (by par2cmdline)
Schritt 15: In 9.2 hat sich das Java-Handling verändert. Damit die Browser Firefox und Mozilla mit Java arbeiten können braucht man zusätzlich das RPM java-1_4_2-sun-plugin. Also im Script myUpgrade am Ende hinzufügen.
Der Installationsort für OpenOffice wurde verschoben von /opt/OpenOffice.org nach /usr/lib/ooo-1.1. Damit unsere aktuelle Installation damit klarkommt legen wir einen symbolischen link in /usr/lib an:

Code: Alles auswählen

cd /usr/lib
ln -s /opt/OpenOffice.org ooo-1.1
Schritt 16: Um Konfig-Dateien einfach vergleichen zu können wird ein Vergleichsprogramm gebraucht (kompare, kdiff3, imediff2, ...)
Deshalb überprüfen wir die Paketliste, ob das Paket kdesdk3 (für kompare) oder imediff2 enthalten ist, wenn nicht einfach am Ende hinzufügen.

WICHTIG: Wenn man aus der Datei upgrade.txt die Zeilen hierher kopiert, muss an jedes Zeilenende ein " \" (ohne die Gänsefüsschen) geschrieben werden. Das sollte dann so aussehen:

Code: Alles auswählen

apt --test install \
 3ddiag CheckHardware DirectFB MPlayer OpenOffice_org OpenOffice_org-de SDL \
 SDL_image SDL_image-devel SDLmm SDLmm-devel a2ps aaa_base aaa_skel aalib \
 aalib-devel acl acroread alsa alsa-devel alsa-tools apache apt apt-libs \
....
Schritt 17: Script speichern und ausführbar machen
chmod +x myUpgrade
Schritt 18: Script aufrufen
./myUpgrade
Wenn hier Fehlermeldungen auftauchen, muss man evtl. ein Paket welches die Abhängigkeiten stört manuell löschen
rpm -e --nodeps <blödes-paket>
und ./myUpgrade nochmal aufrufen. Das passiert selten, aber manchmal gibt es merkwürdige nichtauflösbare "zirkuläre Abhängigkeiten". Meist liegt es an der rpm-Datei, der Paketersteller hat einen Fehler gemacht.
Diesen Vorgang wiederholen wir solange bis myUpgrade fehlerfrei durchläuft!

Hier die Ausgabe meines ersten Durchgangs:

Code: Alles auswählen

        libcurl.so.2 is needed by (installed) php4-curl-4.3.10-0.1
        libcurl.so.2 is needed by (installed) xine-ui-0.99.3-0.pm.0
        liblber.so.199 is needed by (installed) bind-9.3.0-2.1
        liblber.so.199 is needed by (installed) kdebase3-3.3.2-7
        liblber.so.199 is needed by (installed) apache2-2.0.52-5.1
        liblber.so.199 is needed by (installed) libsmbclient-3.0.10-0.1
        liblber.so.199 is needed by (installed) php4-ldap-4.3.10-0.1
        liblber.so.199 is needed by (installed) samba-client-3.0.10-0.1
        libldap.so.199 is needed by (installed) bind-9.3.0-2.1
        libldap.so.199 is needed by (installed) kdebase3-3.3.2-7
        libldap.so.199 is needed by (installed) apache2-2.0.52-5.1
        libldap.so.199 is needed by (installed) libsmbclient-3.0.10-0.1
        libldap.so.199 is needed by (installed) php4-ldap-4.3.10-0.1
        libldap.so.199 is needed by (installed) samba-client-3.0.10-0.1
        m4 = 1.4o is needed by (installed) autoconf-2.59-79
        libmpeg3.so is needed by (installed) transcode-0.6.14-0.pm.0

Und hier die Lösungen:
1.) libcurl.so.2 hält uns die Pakete php4-curl und xine-ui fest, beide Pakete haben in SuSE-9.1 und SuSE-9.2 die gleiche Versionsnummer. xine-ui ist für ein laufendes System nicht wichtig, also deinstalliere ich es mit dem Befehl

Code: Alles auswählen

rpm -e xine-ui xine-skins

Mit dem Paket php4-curl und php4-ldap verfahren wir genauso

Code: Alles auswählen

rpm -e php4-curl php4-ldap

Das Script myUpgrade wird es dann neu installieren.

2.) apt policy libmpeg3 liefert:

Code: Alles auswählen

libmpeg3:
  Installed: 1.5-411
  Candidate: 1.5.4-4
  Version Table:
     1.5.4-4 0
       1001 http://ftp.gwdg.de SuSE/9.2-i386/base pkglist
 *** 1.5-411 0
        100 RPM Database
Aha, die installierte Version ist "neuer" als das Paket in SuSE-9.2. Also in die folgendes anpassen

Code: Alles auswählen

libmpeg3=1.5.4-4
im Script

3.) apt policy autoconf liefert:

Code: Alles auswählen

autoconf:
  Installed: 2.59-79
  Candidate: 2.59-79
  Version Table:
 *** 2.59-79 0
       1001 http://ftp.gwdg.de SuSE/9.2-i386/kde pkglist
        100 RPM Database
     2.59-78 0
       1001 http://ftp.gwdg.de SuSE/9.2-i386/base pkglist
d.h. meine installierte autoconf ist in der Versionsnummer mit der von 9.2 identisch. In dem RPM steht aber nicht drin für welche SuSE-Version sie benutzt wird. Also lasse ich apt die autoconf Version von dem Repository base (2.59-78) installieren, das erreiche ich durch ändern von autoconf=2.59-78 im Script myUpgrade.

4.) Das Paket bind wurde zerlegt in mehrer Einzelpakete. Da die installierte Versionsnummer von bind identisch mit der neuesten SuSE-9.2 Version ist, mache ich dort einen downgrade auf die im base-Repository vorhandene Version 9.2.4-3.2.

Code: Alles auswählen

apt policy bind
bind:
  Installed: 9.3.0-2.1
  Candidate: 9.3.0-2.1
  Version Table:
 *** 9.3.0-2.1 0
        100 RPM Database
     9.3.0-2.1 0
       1001 http://ftp.gwdg.de SuSE/9.2-i386/suse-people pkglist
     9.3.0-0.1 0
       1001 http://ftp.gwdg.de SuSE/9.2-i386/suse-people pkglist
     9.2.4-3.2 0
       1001 http://ftp.gwdg.de SuSE/9.2-i386/base pkglist
In dem Script myUpgrade ändere ich bzw füge ich ein

Code: Alles auswählen

bind=9.2.4-3.2 bind-utils=9.2.4-3.2 bind-libs=9.2.4-3.2
5.) Ändern der beiden Einträge libsmbclient und samba-client (d.h. ich wähle die Pakete aus dem Repository base und nicht aus suse-projects):

Code: Alles auswählen

libsmbclient=3.0.9-2.1 samba-client=3.0.9-2.1
6.) Für apache2 wählen wir: apache2=2.0.50-7.3 und müssen apache2-prefork=2.0.50-7.3 und libapr0=2.0.50-7.3 ergänzen (d.h. auch hier erstmal die Pakete aus base verwenden)

7.) die letzen drei Abhängigkeiten waren wegen der nicht vorhandenen liblber.so.199 und libldap.so.199 nur durch erstellen und installieren eines "Virtuellen RPM" zu lösen.
Wie ein virtuelles RPM erstellt wird könnt ihr hier nachlesen: http://linux-club.de/viewtopic.php?t=13336
Das RPM wird so erstellt

Code: Alles auswählen

./myVirtualRPM libmpeg3.so libldap.so.199 liblber.so.199
und anschliessend mit rpm installiert.

Hier nochmal die Zusammenfassung der Änderungen an dem Script myUpgrade:

Code: Alles auswählen

  autoconf=2.59-78 \
  libsmbclient=3.0.9-2.1 samba-client=3.0.9-2.1 \
  bind=9.2.4-3.2 bind-libs=9.2.4-3.2 bind-utils=9.2.4-3.2 \
  apache2=2.0.50-7.3 apache2-prefork=2.0.50-7.3 libapr0=2.0.50-7.3 \
  libmpeg3=1.5.4-4
Diese Erklärung war jetzt etwas ausführlicher, aber ich hoffe ihr habt verstanden wie man mit den apt-tools (apt search <suchmuster>, apt policy <paket>) umgeht um die Abhängigkeiten zu lösen :)

Wer viele manuelle Änderungen an rpm vorbei an seinem System durchgeführt hat und evtl eigene Pakete mit fehlerhaften Abhängigkeiten eingespielt hat, sollte einfach seine eigenen Pakete löschen und später neu installieren.

In extremen Fällen wo ein Paket ABC unbedingt eine Bibliothek libXXX.so.4 haben will und ein anderes Paket XYZ die gleiche Bibliothek libXXX.so.5 haben will, können wir mit einem fake-Eintrag in der Konfiguration beiden Paketen die korrekte Version der Bibliothek vorgaukeln.
Beispiel für einen fake-Eintrag in der /etc/apt/apt.conf.d/apt.conf

Code: Alles auswählen

RPM {
      ...
      Fake-Provides { 
           "rpmlib(PartialHardlinkSets) 4.0.4-1";  
           "libjasper 1.701"; 
	};
      ...
};
Mit diesen Einträgen lügen wir dem System vor, das das Paket libjasper in
der Version 1.701 und das Programm rpmlib(PartialHardlinkSets) in der Version 4.0.4-1 installiert ist. Computer sind doof ;)
Diese "fakes" sind aber eher die Ausnahme. Ein weiterer Grund für viele Fehler in der Ausgabe ist die sources.list. Wenn dort Repositories auskommentiert wurden, kann apt bestimmte Pakete nicht "sehen". Dann aktiviert man einfach das Repository in der sources.list und ruft apt update auf.
Anschliessend nochmals myUpgrade. Auch der umgekehrte Fall kann eintreten, dann muss man ein Repository deaktivieren. Auch hier gilt für das upgrade der SuSE-Version "weniger ist mehr", also nicht alle experimentellen Repositories in der sources.list aufnehmen. Diese kann man ja nach dem Upgrade auf 9.2 wieder aktivieren. Das klingt jetzt alles schlimmer als es in Wirklichkeit ist. In meinen vielen apt upgrades kam ich im Mittel mit zwei bis drei Aufrufen von myUpgrade aus.

Wenn das Script myUpgrade fehlerfrei durchgelaufen ist, haben wir das schlimmste überstanden.

Die Ausgabe zeigt dann die Größe des downloads an und sollte am Ende so aussehen
....
720 upgraded, 36 newly installed, 144 downgraded, 4 replaced, 2 removed and 0 not upgraded.
Need to get 785MB/785MB of archives.
After unpacking 10.2MB of additional disk space will be used.
Do you want to continue? [Y/n]
diese Frage mit Y beantworten, damit wird der download angestossen und diese Pakete werden geholt ....

Schritt 19: Jetzt kann man sich eine kleine Erfrischung holen und sich mit etwas anderem beschäftigen.... während die Leitung vor sich hin glüht ;)

Schritt 20: Wenn der download fertig ist, das script myUpgrade editieren und die Option --test durch die Option --force ersetzen.
apt --test install \ ==> apt --force install \
Script speichern.

###################################################################################
Hier ist auch der point-of-no-return erreicht, wenn rpm anfängt Pakete zu ersetzen, darf der Rechner nicht abgeschaltet werden oder das Upgrade unterbrochen werden!!!
Das führt zu schlimmen Inkonsistenzen. Es ist dann noch nicht alles verloren, man kann mit apt ja alles wieder richten... Aber es wird schwierig.
Ich habe euch gewarnt....
###################################################################################

Schritt 21: das Script nochmal aufrufen
./myUpgrade
jetzt wirds ernst .... die Pakete werden installiert.....

Mutige wenden sich jetzt wiederum einer anderen Tätigkeit zu, weniger mutige lesen einfach mit, was da so passiert und starren gebannt auf die "#########"-Zeilen.
evtl auftretende (Fehler-)Meldungen kann man sicherheitshalber mal notieren.
Noch clevere beginnen jetzt schon damit die Konfigurationsdatein in einer zweiten Konsole anzupassen (rpm sagt uns ja immer so nett file xxx saved as xxx.rpmsave oder file yyy created as yyy.rpmnew).
Beispiel:

Code: Alles auswählen

warning: /etc/mail/spamassassin/local.cf created as /etc/mail/spamassassin/local.cf.rpmnew
Schritt 21b:Am Schluss lassen wir apt die vorher erzwungenen downgrades ausgleichen.

Code: Alles auswählen

apt -s upgrade
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be upgraded
  apache2 apache2-prefork autoconf bind bind-libs bind-utils coreutils glibc-locale libapr0 libsmbclient samba-client
11 upgraded, 0 newly installed, 0 removed and 0 not upgraded.
Inst coreutils [5.2.1-23.6] (5.2.1-32 SuSE:9.2/stable)
Inst apache2-prefork [2.0.50-7.3] (2.0.52-5.1 SuSE:9.2/stable) []
Inst apache2 [2.0.50-7.3] (2.0.52-5.1 SuSE:9.2/stable) []
Inst libapr0 [2.0.50-7.3] (2.0.52-5.1 SuSE:9.2/stable)
Inst autoconf [2.59-78] (2.59-79 SuSE:9.2/stable)
Inst bind-utils [9.2.4-3.2] (9.3.0-2.1 SuSE:9.2/stable) []
Inst bind [9.2.4-3.2] (9.3.0-2.1 SuSE:9.2/stable) []
Inst bind-libs [9.2.4-3.2] (9.3.0-2.1 SuSE:9.2/stable)
Inst libsmbclient [3.0.9-2.1] (3.0.10-0.1 SuSE:9.2/stable)
Inst samba-client [3.0.9-2.1] (3.0.10-0.1 SuSE:9.2/stable)
Inst glibc-locale [2.3.3-98] (2.3.3-118 SuSE:9.2/stable)
Conf coreutils (5.2.1-32 SuSE:9.2/stable)
Conf libapr0 (2.0.52-5.1 SuSE:9.2/stable)
Conf apache2 (2.0.52-5.1 SuSE:9.2/stable)
Conf apache2-prefork (2.0.52-5.1 SuSE:9.2/stable)
Conf autoconf (2.59-79 SuSE:9.2/stable)
Conf bind-libs (9.3.0-2.1 SuSE:9.2/stable)
Conf bind-utils (9.3.0-2.1 SuSE:9.2/stable)
Conf bind (9.3.0-2.1 SuSE:9.2/stable)
Conf libsmbclient (3.0.10-0.1 SuSE:9.2/stable)
Conf samba-client (3.0.10-0.1 SuSE:9.2/stable)
Conf glibc-locale (2.3.3-118 SuSE:9.2/stable)
... und wie wir mit Freude sehen, werden jetzt die neuesten Versionen problemlos installiert ;)

Schritt 22: Wenn alle Pakete installiert sind, erstellen wir eine neue Liste der aktuell installierten Pakete mit
rpm -qa | sort > myAktRPMs-9.2
Schritt 23: Diese beiden Listen vergleichen wir dann mit
kompare myAktRPMs-9.1 myAktRPMs-9.2
wer noch kein kompare auf seinem System hat, sollte jetzt das Paket kdesdk3 nachinstalliern, oder mit einem anderen Abgleichstool die Dateien vergleichen.
Interessant sind alle Zeilen wo die Versionsnummern 9.1 und 9.2 gleich geblieben sind.

Um zu überprüfen ob diese Pakete wirklich überschrieben worden sind, kann man in dem logfile /var/log/apt.log nachschauen.
Kandidaten für solche RPMs sind diejenigen welche beim Aufruf von myUpgrade durch die folgende Ausgabe angezeigt werden. In diesen RPMs ist das SuSE-Versions Feld nicht befüllt, deshalb greift unser "Trick" aus der /etc/apt/preferences Datei hier nicht.
Beispiel:
toolame is already the newest version.
rar is already the newest version.
rpmkey-packman is already the newest version.
w32codec-all is already the newest version.
xine-skins is already the newest version.
Falls das aus irgendwelchen Gründen nicht passiert sein sollte, entfernen wir die 9.1er Pakete mit dem Befehl
rpm -e --nodeps <paket1> <paket2> ...
und erzwingen die Installation der 9.2er Pakete mit dem Befehl
apt -f install
oder
apt install <paket1> <paket2> ...
Schritt 24: jetzt SuSEconfig aufrufen, damit alles seine Ordnung hat ;)
SuSEconfig
Schritt 25: Durch das update werden einige Konfigurationsdatein anzupassen sein. Welche das sind zeigt uns die Ausgabe des Befehls rcrpmconfigcheck.
rcrpmconfigcheck
Beipiel für so eine Ausgabe:

Code: Alles auswählen

rcrpmconfigcheck
Searching for unresolved configuration files                                       done
Please check the following files (see /var/adm/rpmconfigcheck):
   /etc/X11/qtrc.rpmnew
   /usr/lib/sasl2/smtpd.conf.rpmnew
Schritt 26: jetzt kommt der etwas unangenehme Teil.. ALLE angezeigten Konfigdateien müssen überprüft werden.
Einen schnellen Vergleich kann man mit dem folgenden Befehl erreichen
sdiff -s <config> <config>.rpmnew
Wenn dieser Befehl keine Ausgabe zeigt, sind die Dateien gleich und wir können die Datei <config>.rpmnew einfach löschen.
Falls die Dateien Unterschiede enthalten, können sie einfach mit dem Befehl
kompare <config> <config>.rpmnew
abgeglichen werden. Das Tool kompare ist übrigens in dem Paket kdesdk3 enthalten.
Solltet ihr dieses Paket noch nicht installiert haben, spätestens jetzt sollte man dies tun: apt install kdesdk3
Ein anderes Vergleichstool für die Konsole wäre imediff2. It's your choice ;)

###########################################################
NACHARBEITEN
###########################################################
Schritt 27: Wenn alle Konfigurationsdateien abgeglichen wurden ist das upgrade auf 9.2 beendet. Uff geschafft.
Die alten Cache-Verzeichnisse von 9.1 (normalerweise in /var/cache/apt und /var/state/apt) könnten jetzt gelöscht werden.

Schritt 28: Da wir einen neuen Kernel installiert haben ist jetzt ein reboot fällig.

Schritt 29: Die armen nvidia/ATI Besitzer müssen jetzt noch ihren nVidia Treiber anpassen ;)

###########################################################
Bekannte Fehlertypen und die Lösung
###########################################################
Es gibt hier im Forum einen Thread wo die gängstigen Fehlertypen von apt erklärt sind:
==> [Tip] Abhängigkeiten lösen / Fehlermeldungen von apt
http://www.linux-club.de/viewtopic.php?t=16315

###########################################################
LINKS und weitere Infos
###########################################################
http://www.linux-club.de/viewtopic.php?t=13107

http://www.geocities.com/tanjakostic/li ... 2to90.html
http://linux01.gwdg.de/apt4rpm/upgrade-81to82.html
http://laiskiainen.org/apt/tricks/
Zuletzt geändert von oc2pus am 26. Aug 2005, 12:25, insgesamt 2-mal geändert.
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User

Werbung:
Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus » 10. Feb 2005, 11:27

Kritik, Lob, Fragen, Ergänzungen etc bitte in diesen Thread packen:

[FRAGEN ZU] Upgrade einer SuSE Version 9.1 auf 9.2 mit apt
http://www.linux-club.de/viewtopic.php?t=26046
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste