Zu dieser FAQ
Allgemein
Benutzung
Besonderheiten
Dokumentation
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 :-)
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 ?
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.
|
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 ;-)
|
Lesezeichen