• Zu dieser FAQ

  • Allgemein

  • Benutzung

  • Besonderheiten

  • Dokumentation











  • Zu dieser FAQ



    Im Forum wurden des öfteren Fragen zum Installieren von Software gestellt. Was für Verwirrung sorgt, ist u.a.
    das nach dem Installieren meist erfolglose Suchen von RPM-Quell-Paketen (src.rpm). Um diese und andere Fragen zu
    klären, habe ich mich entschlossen, diese FAQ hier beizusteuern. Damit schließlich jeder etwas damit anfangen
    kann, hab ich bewusst alle grafischen und distributions-spezifischen Installations-Tools außen vor gelassen, und
    benutze ausschließlich die Kommandozeile :-)












    Allgemein



    RPM ist eine sogenannte Paketverwaltung, die auf einer Datenbank aufbaut.
    In dieser Datenbank werden alle Informationen zu den installierten Paketen
    gespeichert:















    -->  Allgemeine Informationen zum Paket (Name, Beschreibung, Distribution)
    -->  Liste aller Dateien, die das Paket beinhaltet
    -->  Abhängigkeiten zu anderen Paketen (z.B. Bibliotheken)


    RPM Pakete sind in einem speziellen binären Format gepackt und erlauben eine saubere und vor allem schnelle
    In- bzw. Deinstallation. Damit dies aber funktioniert, sollte jede Software als RPM Paket installiert werden, da der Paket Manager
    sonst den Überblick verliert und fehlende Dateien bemängelt (sog. Abhängigkeitsfehler), obwohl sie
    eigentlich installiert sind !







    Nach der Installation kann ich das Programm nicht finden !



    Wie installiere ich ein Quell-Paket im RPM-Format (.src.rpm) ?



    Ich habe eine Datei auf dem System, zu welchem Paket gehört es ?



    Wie bekomme ich heraus, welche <Paket>-Version ich einsetze ?



    Kann ich Pakete einer anderen Distribution benutzen ?



    Wie bekomme ich mehr Informationen zu einem Paket ?



    Wie erhalte ich eine Dateiliste eines Paketes ?



    Wie kann ich mir die Skripte anzeigen lassen, die in einem Paket ablaufen ?












    Benutzung















































































    rpm -ihv <Paket-Name>-i386.rpm

    Dies ist die einfachste Form, ein Programm zu installieren. Mit -i wird das Paket installiert. Die Optionen -h
    und -v sind optional. Sie erwirken einen Fortschrittsbalken, der anzeigt, wie lange die Installation noch dauert.




    rpm -Uhv <Paket-Name>-i386.rpm

    Mit der Option -U (auch --upgrade) wird eine ältere Version des gleichen Pakets gelöscht und
    die neuere Version installiert. Der Unterschied zum einfachen Löschen und wieder neu installieren besteht darin, daß
    Konfigurationsdateien, wenn sie seit der Installation verändert wurden, nicht gelöscht werden, sondern in .rpmorig
    oder .rpmsave umbenannt werden. Man kann bzw. sollte diese Option auch zum Installieren verwenden, da ansonsten
    unter Umständen die Datenbank nicht richtig aufgebaut wird.




    rpm -e <Paket-Name>

    Die einfachste Art, ein Paket wieder zu deinstallieren. Hier ist wichtig, daß man nicht die komplette Bezeichnung des
    Paketes, sondern nur den Namen ohne Versions- und Releasenummer angibt.




    rpm -qa | sort | less

    Um z.B. herauszufinden, wie das Paket heisst, das man deinstallieren will, kann man sich mit -q (--query) und -a (--all)
    eine Liste der installierten Pakete anzeigen lassen. sort ist optional und sorgt dafür, dass die Dateiliste sortiert
    angeziegt wird. less wird benötigt, da die Dateiliste meist nicht auf den Bildschirm passt und man damit bequem durch
    Liste scrollen kann.




    rpm -qf /bin/bash

    Wenn man im System eine Datei findet, und man wissen will, zu was für einem Paket es gehört
    ( hier: /bin/bash ), bekommt man mit diesem Befehl ungefähr folgende Ausgabe:
    bash-2.04-30




    rpm -q samba

    Um die aktuelle Version eines installierten Paketes herauszufinden
    ( hier: samba ), genügt ein -q
    ( --query ) um ungefähr folgende Ausgabe zu bekommen:

    samba-2.0.7-49




    rpm -q[p] --scripts samba[-2.0.7.-49.rpm]

    Dieses Kommando ist sehr nützlich, wenn man wissen will, was für Befehle ein Paket während einer De-
    oder Installation ausführt. Wenn das Paket noch nicht installiert ist, muss man die Angaben in den eckigen Klammern
    noch hinzufügen, also bei den Optionen das p und den kompletten Pfad + Dateinamen.




    rpm -q[p]i samba[-2.0.7.-49.rpm]

    Will man mehr Informationen über ein Paket, ist dieses Kommando recht nützlich. Es zeigt unter anderem eine
    Beschreibung des Paketes, von welcher Distribution es stammt, etc... Wenn das Paket noch nicht installiert ist, muss
    man die Angaben in den eckigen Klammern noch hinzufügen, also bei den Optionen das p und den
    kompletten Pfad + Dateinamen.




    rpm -q[p]l samba[-2.0.7.-49.rpm] | less

    Dieses Kommando zeigt alle Dateien, die dieses Paket beinhaltet. less ist notwendig, da meist mehr Dateien in
    dem Paket sind, als Platz auf dem Bildschirm ;-) Wenn das Paket noch nicht installiert ist, muss man die Angaben in den
    eckigen Klammern noch hinzufügen, also bei den Optionen das p und den kompletten Pfad + Dateinamen.











    Besonderheiten



    Paket-Bezeichnung



    Viele Informationen stecken schon in der <Paket-Bezeichnung>:






    <Name>-<Version>-<Release>.<Zusatz>.rpm





    Name ist die Bezeichnung des Paketes,

    Version zeigt die aktuelle Version des Programmes,

    Release sagt aus, wie oft das RPM-Paket schon neu zusammengestellt wurde ( die Änderungen zu einem
    vorhergehenden Release findet man im ChangeLog des Paketes ).

    Zusatz setzt sich wie folgt zusammen:






















    <Paket-Name>-static.rpm  
    Diese Erweiterung haben statisch vorkompilierte Pakete. Statisch heisst,
    es sind alle notwendigen Bibliotheken schon mit in dem Paket drin.


















    Vorteil  --> Es dürfte so gut wie keine Abhängigkeitsfehler geben
    Nachteil  --> Das Paket ist dem entsprechend meist ziemlich groß

    <Paket-Name>-src.rpm
    Pakete mit dieser Erweiterung sind Quellpakete im RPM-Format. Sie werden
    nicht in die Datenbank aufgenommen, sondern einfach in ein bestimmetes
    Verzeichnis kopiert. Mehr dazu hier.
    <Paket-Name>-i386.rpm


    Dies bezeichnet die Architektur des Zielrechners, hier ein Intel-386
    kompatibler. Es könnte auch i486, i586, i686 oder
    mittlerweile ebenfalls alpha und sparc heißen.












    Quell-Pakete



















    Pakete mit dem Zusatz src.rpm sind, wie schon beschrieben,
    Quellpakete im RPM-Format. Sie werden nicht in die Datenbank aufgenommen,
    sondern einfach in ein bestimmetes Verzeichnis kopiert und zwar bei:



    RedHat  /usr/src/redhat/
    SuSE  /usr/src/packages/


    Unterhalb dieses Verzeichnisses liegen 4 weitere:























    SOURCES
    für die originalen Quellen (tar.gz, bz2)
    und Patches (.diff, .patch).
    SPECS
    für die .spec Dateien, die u.a. die Anleitung zum Erstellen des
    RPM-Paketes beinhalten.
    SRPMS
    für erstellte Quellpakete im RPM-Format (src.rpm).
    RPMS
    hier werden die fertigen RPM-Pakete abgelegt. Es gibt mehrere
    Unterverzeichnisse hier, je nach Zielsystem des RPM-Paketes
    (i386, i486, ...), die aber nicht unbedingt alle vorhanden sein
    müssen, sondern erst erstellt werden, wenn ein Paket dafür
    vorhanden ist.
    BUILD
    hier werden die Originalen Quellen entpackt,
    gepatcht und kompiliert.






    Wir haben also nach der Installation des Quellpaketes mindestens 2 Dateien:

    /usr/src/redhat/SPECS/<Paket-Name>.spec

    /usr/src/redhat/SOURCES/<Paket-Name>.tar.gz

    Um aus diesen Dateien nun ein RPM-Paket zu `schnüren`, wechselt man nach /usr/src/redhat/SPECS und
    führt folgenden Befehl aus:







    rpm -bb --target=i386 --clean --rmsource <Paket-Name>.spec





    Je nach Paketgröße kann man jetzt einen Kaffe trinken gehn :-) Mittlerweile wird das Programm für einen
    i386-Rechner (--target=i386) kompiliert, danach alle temporären Dateien gelöscht (--clean)
    und das Quellpaket entfernt (--rmsource). Das fertige RPM - Paket wird am Schluß nach
    /usr/src/redhat/RPMS/i386/<Paket-Name>-i386.rpm kopiert.


    Wer allerdings nur das fertige RPM-Paket haben will, und die zusätzlichen Optionen ( siehe
    Dokumentation
    ), die man hätte, wenn man das Quellpaket zuerst installiert, nicht benötigt, der kann auch ne
    schnellere Variante nutzen:







    rpm --rebuild <Paket-Name>.src.rpm



    Hier muss man das Paket nicht zuerst installieren und der Kompiliervorgang wird sofort ausgelöst. Das fertige RPM-Paket findet
    man auch hier unter /usr/src/redhat/RPMS/i[3456]86/<Paket-Name>.rpm.






    Distributionen



    Pakete von anderen Distributionen sind so ne Sache ;-)
    Ein Problem ist die unterschiedliche Verzeichnisstruktur der einzelnen
    Distributionen, z.B. der Startskripte :




















    SuSE  <= 7.0  /sbin/init.d/
     >= 7.1  /etc/init.d/
    RedHat  <= 7.0  /etc/rc.d/init.d/




    Nehmen wir zur Verdeutlichung mal ein kleines Programm, den inetd.
    Als erstes sollte man die Dateiliste überprüfen:

    rpm -qpl /home/micha/downloads/inetd-0.16-17.i386.rpm














    SuSE

    /sbin/init.d/inetd

    /sbin/init.d/rc2.d

    /sbin/init.d/rc2.d/K20inetd

    /sbin/init.d/rc2.d/S20inetd

    /sbin/init.d/rc3.d

    /sbin/init.d/rc3.d/K20inetd

    /sbin/init.d/rc3.d/S20inetd

    /usr/sbin/inetd

    /usr/sbin/rcinetd

    /usr/share/doc/packages/inetd

    /usr/share/doc/packages/inetd/AUTHORS

    /usr/share/doc/packages/inetd/COPYING

    /usr/share/doc/packages/inetd/NEWS

    /usr/share/doc/packages/inetd/README

    /usr/share/doc/packages/inetd/THANKS

    /usr/share/man/man5/inetd.conf.5.gz

    /usr/share/man/man8/inetd.8.gz

    /var/adm/fillup-templates/rc.config.inetd


    RedHat

    /etc/inetd.conf

    /etc/rc.d/init.d/inet

    /usr/man/man5/inetd.conf.5.gz

    /usr/man/man8/inetd.8.gz

    /usr/sbin/inetd







    Hier kann man sehen, wie schön alles schiefgehen würde, wenn
    man den inetd von SuSE auf RedHat, oder umgekehrt, installieren
    würde ;-) Das heißt, alle Server/Deamonen fallen demnach
    eigentlich schon weg.
    Auch von größeren (XFree86), Systemnahen (glibc) oder Basis-
    (KDE/GNOME) Programmen würd ich Abstand nehmen, da hier innerhalb
    der RPM-Pakete noch Skripte ablaufen, die u.U. ein anderes System
    zerschießen können !

    Die Skripte, die ein RPM-Paket bei der Installation ausführt, kann man sich
    übrigens anzeigen lassen, und sehen dann bei unserem Beispiel folgendermaßen
    aus :

    rpm -qp --scripts /home/micha/downloads/inetd-0.16-17.i386.rpm








    SuSE

    postinstall script (through /bin/sh):

    echo "Updating etc/rc.config..."

    if [ -x bin/fillup ] ; then

      bin/fillup -q etc/rc.config var/adm/fillup-templates/rc.config.inetd

    else

      echo "ERROR: fillup not found. This should not happen. Please compare"

      echo "etc/rc.config and var/adm/fillup-templates/rc.config.inetd"

      echo "and update by hand."

    fi

    sbin/insserv etc/init.d/inetd

    postuninstall script (through /bin/sh):

    sbin/insserv etc/init.d






    Es wird hier bei SuSE nach der Installation (postinstall) versucht, die Datei /etc/rc.config upzudaten,
    welche unter Redhat z.B. gar nicht vorhanden ist, genau so wie das Programm /bin/fillup.



    Anders sieht es mit normalen Programmen für Gnome/KDE/X aus, da hier die
    Verzeichnisstruktur so ziemlich einheitlich ist.
    Das wichtigste ist auf jedenfall die Dateiliste des Paketes und die Skripte zu überprüen
    und nicht blindlings das Ding zu installieren !










    Dokumentation
     






















    http://www.rpmfind.net
    Erste Anlaufstelle, wenn man irgendein RPM-Paket sucht, daß es
    in der eigenen Distribution nicht gibt.
    http://www.rpm.org
    Dies ist die offizielle Seite von RPM. Unter anderem findet man hier
    die aktuellste Version zum Downloaden. Wer selber RPM - Pakete schnüren
    will, findet hier für den Anfang gut dokumentierte Information !


    RPM - HOWTO (englisch)

    Nochmal seperat aufgelistet das Howto von
    http://www.rpm.org, das zwar hoffnungslos veraltet ist
    ( November 1999 ), aber immer noch ein guter Einstieg ist, um selber
    SPEC - Files zu basteln


    RPM-HOWTO (deutsch)


    Wusste bis jetzt gar nicht, daß es das Ding auch auf deutsch gibt ;-)