micha
06.01.02, 21:43
<li><a href=#ZuDieserFaq>Zu dieser FAQ</a></li>
<li><a href=#RPM-Allgemein>Allgemein</a></li>
<li><a href=#RPM-Benutzung>Benutzung</a></li>
<li><a href=#RPM-Besonderheiten>Besonderheiten</a></li>
<li><a href=#RPM-Dokumentation>Dokumentation</a></li>
<br><br><hr><br><br>
<!--ZU DIESER FAQ -->
<h2>
<a name=ZuDieserFaq>Zu dieser FAQ</a>
</h2>
<p>
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 :-)
</p>
<br><br><hr><br><br>
<!--RPM - ALLGEMEIN-->
<h2>
<a name=RPM-Allgemein>Allgemein</a>
</h2>
<p>
RPM ist eine sogenannte Paketverwaltung, die auf einer Datenbank aufbaut.
In dieser Datenbank werden alle Informationen zu den installierten Paketen
gespeichert:
</p>
<table>
<tr>
<td>--></td>
<td> Allgemeine Informationen zum Paket (Name, Beschreibung, Distribution)</td>
</tr>
<tr>
<td>--></td>
<td> Liste aller Dateien, die das Paket beinhaltet</td>
</tr>
<tr>
<td>--></td>
<td> Abhängigkeiten zu anderen Paketen (z.B. Bibliotheken)</td>
</tr>
</table>
<p>
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. <b>Abhängigkeitsfehler</b>), obwohl sie
eigentlich installiert sind !
</p>
<br>
<!-- QUESTIONS -->
<a href=#Q_RPM_01>
Nach der Installation kann ich das Programm nicht finden !</a><br>
<a href=#Q_RPM_01>
Wie installiere ich ein Quell-Paket im RPM-Format (.src.rpm) ?</a><br>
<a href=#Q_RPM_02>
Ich habe eine Datei auf dem System, zu welchem Paket gehört es ?</a><br>
<a href=#Q_RPM_03>
Wie bekomme ich heraus, welche <Paket>-Version ich einsetze ?</a><br>
<a href=#Q_RPM_04>
Kann ich Pakete einer anderen Distribution benutzen ?</a><br>
<a href=#Q_RPM_05>
Wie bekomme ich mehr Informationen zu einem Paket ?</a><br>
<a href=#Q_RPM_06>
Wie erhalte ich eine Dateiliste eines Paketes ?</a><br>
<a href=#Q_RPM_07>
Wie kann ich mir die Skripte anzeigen lassen, die in einem Paket ablaufen ?</a><br>
<br><br><hr><br><br>
<!--RPM - BENUTZUNG-->
<h2>
<a name=RPM-Benutzung>Benutzung</a>
</h2>
<br><br>
<table width=100%>
<tr>
<td bgcolor=white height=25><font color=#0000C0><code>
rpm -ihv <Paket-Name>-i386.rpm
</code></font></td>
</tr>
<tr>
<td>
Dies ist die einfachste Form, ein Programm zu installieren. Mit <i>-i</i> wird das Paket installiert. Die Optionen <i>-h</i>
und <i>-v</i> sind optional. Sie erwirken einen Fortschrittsbalken, der anzeigt, wie lange die Installation noch dauert.
<br><br>
</td>
</tr>
<tr>
<td bgcolor=white height=25><font color=#0000C0><code>
rpm -Uhv <Paket-Name>-i386.rpm </code></font></td>
</tr>
<tr>
<td>
Mit der Option <i>-U</i> (auch <i>--upgrade</i>) 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 <i>.rpmorig</i>
oder <i>.rpmsave</i> umbenannt werden. Man kann bzw. sollte diese Option auch zum Installieren verwenden, da ansonsten
unter Umständen die Datenbank nicht richtig aufgebaut wird.
<br><br>
</td>
</tr>
<tr>
<td bgcolor=white height=25><font color=#0000C0><code>
rpm -e <Paket-Name> </code></font></td>
</tr>
<tr>
<td>
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.
<br><br>
</td>
</tr>
<tr>
<td bgcolor=white height=25><font color=#0000C0><code>
rpm -qa | sort | less </code></font></td>
</tr>
<tr>
<td>
Um z.B. herauszufinden, wie das Paket heisst, das man deinstallieren will, kann man sich mit <i>-q (--query)</i> und <i>-a (--all)</i>
eine Liste der installierten Pakete anzeigen lassen. <i>sort</i> ist optional und sorgt dafür, dass die Dateiliste sortiert
angeziegt wird. <i>less</i> wird benötigt, da die Dateiliste meist nicht auf den Bildschirm passt und man damit bequem durch
Liste scrollen kann.
<br><br>
</td>
</tr>
<!--BEGIN
Ich habe eine Datei auf dem System, zu welchem Paket gehört es ?-->
<a name=Q_RPM_02></a>
<!--END-->
<tr>
<td bgcolor=white height=25><font color=#0000C0><code>
rpm -qf /bin/bash </code></font></td>
</tr>
<tr>
<td>
Wenn man im System eine Datei findet, und man wissen will, zu was für einem Paket es gehört
( hier: <i>/bin/bash</i> ), bekommt man mit diesem Befehl ungefähr folgende Ausgabe:<br><b>bash-2.04-30</b>
<br><br>
</td>
</tr>
<!--BEGIN
Wie bekomme ich heraus, welche Paket-Name-Version ich einsetze ?-->
<a name=Q_RPM_03></a>
<!--END-->
<tr>
<td bgcolor=white height=25><font color=#0000C0><code>
rpm -q samba
</code></font></td>
</tr>
<tr>
<td>
Um die aktuelle Version eines installierten Paketes herauszufinden
( hier: <i>samba</i> ), genügt ein <i>-q</i>
( <i>--query</i> ) um ungefähr folgende Ausgabe zu bekommen:<br>
<b>samba-2.0.7-49</b>
<br><br>
</td>
</tr>
<!--BEGIN
Wie die Skripte angezeigt, die in einem Paket ablaufen ?-->
<a name=Q_RPM_07></a>
<!--END-->
<tr>
<td bgcolor=white height=25><font color=#0000C0><code>
rpm -q[p] --scripts samba[-2.0.7.-49.rpm]
</code></font></td>
</tr>
<tr>
<td>
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 <i>p</i> und den kompletten Pfad + Dateinamen.
<br><br>
</td>
</tr>
<!--BEGIN
Wie bekomme ich mehr Informationen zu einem Paket ?-->
<a name=Q_RPM_05></a>
<!--END-->
<tr>
<td bgcolor=white height=25><font color=#0000C0><code>
rpm -q[p]i samba[-2.0.7.-49.rpm]
</code></font></td>
</tr>
<tr>
<td>
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 <i>p</i> und den
kompletten Pfad + Dateinamen.
<br><br>
</td>
</tr>
<tr>
<!--BEGIN
Wie erhalte ich eine Dateiliste eines (installierten) Paketes ?-->
<a name=Q_RPM_06></a>
<!--END-->
<td bgcolor=white height=25><font color=#0000C0><code>
rpm -q[p]l samba[-2.0.7.-49.rpm] | less
</code></font></td>
</tr>
<tr>
<td>
Dieses Kommando zeigt alle Dateien, die dieses Paket beinhaltet. <i>less</i> 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 <i>p</i> und den kompletten Pfad + Dateinamen.
</td>
</tr>
</table>
<br><br><hr><br><br>
<!--RPM - BESONDERHEITEN-->
<h2>
<a name=RPM-Besonderheiten>Besonderheiten</a>
</h2>
<h4><u><i>Paket-Bezeichnung</i></u></h4>
Viele Informationen stecken schon in der <Paket-Bezeichnung>:
<br><br>
<table width=100%>
<tr><td bgcolor=white height=25 align=left><font color=#0000C0><code>
<Name>-<Version>-<Release>.<Zusatz>.rpm
</code></font></td></tr>
</table>
<br><br>
<b>Name</b> ist die Bezeichnung des Paketes,<br>
<b>Version</b> zeigt die aktuelle Version des Programmes,<br>
<b>Release</b> sagt aus, wie oft das RPM-Paket schon neu zusammengestellt wurde ( die Änderungen zu einem
vorhergehenden Release findet man im ChangeLog des Paketes ). <br>
<b>Zusatz</b> setzt sich wie folgt zusammen:
<br><br>
<table cellpadding=4 border=1>
<colgroup>
<col width=40%>
<col width=60%>
</colgroup>
<tr valign=top>
<td align=left><Paket-Name>-<b>static</b>.rpm </td>
<td>
Diese Erweiterung haben statisch vorkompilierte Pakete. Statisch heisst,
es sind alle notwendigen Bibliotheken schon mit in dem Paket drin.<br><br>
<table>
<colgroup>
<col width=20%>
<col width=5%>
<col width=75%>
</colgroup>
<tr valign=top>
<td><b><i>Vorteil </i></b></td>
<td>--></td>
<td>Es dürfte so gut wie keine Abhängigkeitsfehler geben</td>
</tr>
<tr>
<td><b><i>Nachteil </i></b></td>
<td>--></td>
<td> Das Paket ist dem entsprechend meist ziemlich groß</td>
</tr>
</table>
</td>
</tr>
<tr>
<td align=left><Paket-Name>-<b>src</b>.rpm</td>
<td>
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 <a href=#RPM_QUELLPAKETE>hier</a>.
</td>
</tr>
<tr>
<td align=left><Paket-Name>-<b>i386</b>.rpm</td>
<td>
<p>
Dies bezeichnet die Architektur des Zielrechners, hier ein Intel-386
kompatibler. Es könnte auch <b>i486</b>, <b>i586</b>, <b>i686</b> oder
mittlerweile ebenfalls <b>alpha</b> und <b>sparc</b> heißen.
</p>
</td>
</tr>
</table>
<br><br>
<!--BEGIN
Nach der Installation kann ich das Programm nicht finden-->
<a name=Q_RPM_01></a>
<!--END-->
<a name=RPM_QUELLPAKETE></a>
<h4><u><i>Quell-Pakete</i></u></h4>
<table>
<tr>
<td colspan=2>
Pakete mit dem Zusatz <b>src.rpm</b> 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:
<br><br>
</td>
</tr>
<tr>
<td align=left width="22%"><b>RedHat</b></td>
<td><i> /usr/src/redhat/</i></td>
</tr>
<tr>
<td align=left><b>SuSE</b></td>
<td><i> /usr/src/packages/</i><br><br></td>
</tr>
<tr>
<td colspan=2 align=left height=30>
Unterhalb dieses Verzeichnisses liegen 4 weitere:
</td>
</tr>
</table>
<table cellpadding=4 border=1>
<colgroup>
<col width=22%>
<col width=78%>
</colgroup>
<tr>
<td valign=top><b>SOURCES</b></td>
<td>
für die originalen Quellen (tar.gz, bz2)
und Patches (.diff, .patch).
</td>
</tr>
<tr><td valign=top><b>SPECS</b></td>
<td>
für die .spec Dateien, die u.a. die Anleitung zum Erstellen des
RPM-Paketes beinhalten.
</td>
</tr>
<tr><td valign=top><b>SRPMS</b></td>
<td>
für erstellte Quellpakete im RPM-Format (src.rpm).
</td>
</tr>
<tr><td valign=top><b>RPMS</b></td>
<td>
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.
</td>
</tr>
<tr><td valign=top><b>BUILD</b></td>
<td>
hier werden die Originalen Quellen entpackt,
gepatcht und kompiliert.
</td>
</tr>
</table>
<br><br>
Wir haben also nach der Installation des Quellpaketes mindestens 2 Dateien:<br>
<i>/usr/src/redhat/<b>SPECS</b>/<Paket-Name><b>.spec</b></i><br>
<i>/usr/src/redhat/<b>SOURCES</b>/<Paket-Name><b>.tar.gz</b></i><br>
Um aus diesen Dateien nun ein RPM-Paket zu `schnüren`, wechselt man nach <i>/usr/src/redhat/SPECS</i> und
führt folgenden Befehl aus:
<br><br>
<table width=100%>
<tr><td bgcolor=white height=25><font color=#0000C0><code>
rpm -bb --target=i386 --clean --rmsource <Paket-Name>.spec
</code></font></td></tr>
</table>
<br><br>
Je nach Paketgröße kann man jetzt einen Kaffe trinken gehn :-) Mittlerweile wird das Programm für einen
i386-Rechner (<i>--target=i386</i>) kompiliert, danach alle temporären Dateien gelöscht (<i>--clean</i>)
und das Quellpaket entfernt (<i>--rmsource</i>). Das fertige RPM - Paket wird am Schluß nach
<i>/usr/src/redhat/RPMS/i386/<Paket-Name>-i386.rpm</i> kopiert.
<br>
Wer allerdings nur das fertige RPM-Paket haben will, und die zusätzlichen Optionen ( siehe <a href=#RPM-Dokumentation>
Dokumentation</a> ), die man hätte, wenn man das Quellpaket zuerst installiert, nicht benötigt, der kann auch ne
schnellere Variante nutzen:
<br><br>
<table width=100%>
<tr><td bgcolor=white height=25><font color=#0000C0><code>
rpm --rebuild <Paket-Name>.src.rpm
</code></font></td></tr>
</table>
<p>
Hier muss man das Paket nicht zuerst installieren und der Kompiliervorgang wird sofort ausgelöst. Das fertige RPM-Paket findet
man auch hier unter <i>/usr/src/redhat/RPMS/i[3456]86/<Paket-Name>.rpm</i>.
</p>
<!--BEGIN
Kann ich Pakete einer anderen Distribution benutzen ?-->
<a name=Q_RPM_04></a>
<!--END-->
<h4><u><i>Distributionen</i></u></h4>
Pakete von anderen Distributionen sind so ne Sache ;-)
Ein Problem ist die unterschiedliche Verzeichnisstruktur der einzelnen
Distributionen, z.B. der Startskripte :
<br><br>
<table width=100%>
<tr>
<td><b>SuSE</b></td>
<td> <= 7.0</td>
<td width=80%><i> /sbin/init.d/</i></td>
</tr>
<tr>
<td></td>
<td> >= 7.1</td>
<td><i> /etc/init.d/</i></td>
</tr>
<tr>
<td><b>RedHat</b></td>
<td> <= 7.0</td>
<td><i> /etc/rc.d/init.d/</i><br><br></td>
</tr>
</table>
Nehmen wir zur Verdeutlichung mal ein kleines Programm, den <i>inetd</i>.
Als erstes sollte man die Dateiliste überprüfen:<br>
<b>rpm -qpl /home/micha/downloads/inetd-0.16-17.i386.rpm</b>
<br><br>
<table width=100%>
<tr>
<td valign=top width=100><b>SuSE</b></td>
<td valign=top>
<i>
/sbin/init.d/inetd<br>
/sbin/init.d/rc2.d<br>
/sbin/init.d/rc2.d/K20inetd<br>
/sbin/init.d/rc2.d/S20inetd<br>
/sbin/init.d/rc3.d<br>
/sbin/init.d/rc3.d/K20inetd<br>
/sbin/init.d/rc3.d/S20inetd<br>
/usr/sbin/inetd<br>
/usr/sbin/rcinetd<br>
/usr/share/doc/packages/inetd<br>
/usr/share/doc/packages/inetd/AUTHORS<br>
/usr/share/doc/packages/inetd/COPYING<br>
/usr/share/doc/packages/inetd/NEWS<br>
/usr/share/doc/packages/inetd/README<br>
/usr/share/doc/packages/inetd/THANKS<br>
/usr/share/man/man5/inetd.conf.5.gz<br>
/usr/share/man/man8/inetd.8.gz<br>
/var/adm/fillup-templates/rc.config.inetd<br>
</i>
</td>
</tr>
<tr>
<td valign=top width=100><b>RedHat</b></td>
<td valign=top>
<i>
/etc/inetd.conf<br>
/etc/rc.d/init.d/inet<br>
/usr/man/man5/inetd.conf.5.gz<br>
/usr/man/man8/inetd.8.gz<br>
/usr/sbin/inetd<br>
</i>
<br><br>
</td>
</tr>
</table>
Hier kann man sehen, wie schön alles schiefgehen würde, wenn
man den <i>inetd</i> 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 !<br>
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 :<br>
<b>rpm -qp --scripts /home/micha/downloads/inetd-0.16-17.i386.rpm</b>
<br><br>
<table width=100%>
<tr>
<td valign=top width=100><b>SuSE</b></td>
<td valign=top>
<i>
<b>postinstall script</b> (through /bin/sh):<br>
echo "Updating etc/rc.config..."<br>
if [ -x bin/fillup ] ; then<br>
bin/fillup -q etc/rc.config var/adm/fillup-templates/rc.config.inetd<br>
else<br>
echo "ERROR: fillup not found. This should not happen. Please compare"<br>
echo "etc/rc.config and var/adm/fillup-templates/rc.config.inetd"<br>
echo "and update by hand."<br>
fi<br>
sbin/insserv etc/init.d/inetd<br>
<b>postuninstall script</b> (through /bin/sh):<br>
sbin/insserv etc/init.d<br>
</i>
</td>
</tr>
</table>
<br><br>
Es wird hier bei SuSE nach der Installation (postinstall) versucht, die Datei <i>/etc/rc.config</i> upzudaten,
welche unter Redhat z.B. gar nicht vorhanden ist, genau so wie das Programm <i>/bin/fillup</i>.
<br><br>
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 !
<br><br><hr><br><br>
<!--RPM - Dokumentation-->
<b>
<a name=RPM-Dokumentation>Dokumentation</a>
</b>
<br><br>
<table>
<tr>
<td><a href=http://www.rpmfind.net target=_blank><a href="http://www.rpmfind.net" target="_blank">http://www.rpmfind.net</a></a></td>
<td>
Erste Anlaufstelle, wenn man irgendein RPM-Paket sucht, daß es
in der eigenen Distribution nicht gibt.
</td>
</tr>
<tr>
<td><a href=http://www.rpm.org target=_blank><a href="http://www.rpm.org" target="_blank">http://www.rpm.org</a></a></td>
<td>
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 !
</td>
</tr>
<tr>
<td>
<a href=http://www.rpm.org/RPM-HOWTO/index.html target=_blank>
RPM - HOWTO (englisch)</a></td>
<td>
Nochmal seperat aufgelistet das Howto von <a href=http://www.rpm.org>
<a href="http://www.rpm.org" target="_blank">http://www.rpm.org</a></a>, das zwar hoffnungslos veraltet ist
( November 1999 ), aber immer noch ein guter Einstieg ist, um selber
SPEC - Files zu basteln </td>
</tr>
<tr>
<td>
<a href=http://linux.daphnis.com/dlhp/DE-RPM-HOWTO.html target=_blank>
RPM-HOWTO (deutsch)
</a>
</td>
<td>
Wusste bis jetzt gar nicht, daß es das Ding auch auf deutsch gibt ;-)
</td>
</tr>
</table>
<li><a href=#RPM-Allgemein>Allgemein</a></li>
<li><a href=#RPM-Benutzung>Benutzung</a></li>
<li><a href=#RPM-Besonderheiten>Besonderheiten</a></li>
<li><a href=#RPM-Dokumentation>Dokumentation</a></li>
<br><br><hr><br><br>
<!--ZU DIESER FAQ -->
<h2>
<a name=ZuDieserFaq>Zu dieser FAQ</a>
</h2>
<p>
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 :-)
</p>
<br><br><hr><br><br>
<!--RPM - ALLGEMEIN-->
<h2>
<a name=RPM-Allgemein>Allgemein</a>
</h2>
<p>
RPM ist eine sogenannte Paketverwaltung, die auf einer Datenbank aufbaut.
In dieser Datenbank werden alle Informationen zu den installierten Paketen
gespeichert:
</p>
<table>
<tr>
<td>--></td>
<td> Allgemeine Informationen zum Paket (Name, Beschreibung, Distribution)</td>
</tr>
<tr>
<td>--></td>
<td> Liste aller Dateien, die das Paket beinhaltet</td>
</tr>
<tr>
<td>--></td>
<td> Abhängigkeiten zu anderen Paketen (z.B. Bibliotheken)</td>
</tr>
</table>
<p>
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. <b>Abhängigkeitsfehler</b>), obwohl sie
eigentlich installiert sind !
</p>
<br>
<!-- QUESTIONS -->
<a href=#Q_RPM_01>
Nach der Installation kann ich das Programm nicht finden !</a><br>
<a href=#Q_RPM_01>
Wie installiere ich ein Quell-Paket im RPM-Format (.src.rpm) ?</a><br>
<a href=#Q_RPM_02>
Ich habe eine Datei auf dem System, zu welchem Paket gehört es ?</a><br>
<a href=#Q_RPM_03>
Wie bekomme ich heraus, welche <Paket>-Version ich einsetze ?</a><br>
<a href=#Q_RPM_04>
Kann ich Pakete einer anderen Distribution benutzen ?</a><br>
<a href=#Q_RPM_05>
Wie bekomme ich mehr Informationen zu einem Paket ?</a><br>
<a href=#Q_RPM_06>
Wie erhalte ich eine Dateiliste eines Paketes ?</a><br>
<a href=#Q_RPM_07>
Wie kann ich mir die Skripte anzeigen lassen, die in einem Paket ablaufen ?</a><br>
<br><br><hr><br><br>
<!--RPM - BENUTZUNG-->
<h2>
<a name=RPM-Benutzung>Benutzung</a>
</h2>
<br><br>
<table width=100%>
<tr>
<td bgcolor=white height=25><font color=#0000C0><code>
rpm -ihv <Paket-Name>-i386.rpm
</code></font></td>
</tr>
<tr>
<td>
Dies ist die einfachste Form, ein Programm zu installieren. Mit <i>-i</i> wird das Paket installiert. Die Optionen <i>-h</i>
und <i>-v</i> sind optional. Sie erwirken einen Fortschrittsbalken, der anzeigt, wie lange die Installation noch dauert.
<br><br>
</td>
</tr>
<tr>
<td bgcolor=white height=25><font color=#0000C0><code>
rpm -Uhv <Paket-Name>-i386.rpm </code></font></td>
</tr>
<tr>
<td>
Mit der Option <i>-U</i> (auch <i>--upgrade</i>) 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 <i>.rpmorig</i>
oder <i>.rpmsave</i> umbenannt werden. Man kann bzw. sollte diese Option auch zum Installieren verwenden, da ansonsten
unter Umständen die Datenbank nicht richtig aufgebaut wird.
<br><br>
</td>
</tr>
<tr>
<td bgcolor=white height=25><font color=#0000C0><code>
rpm -e <Paket-Name> </code></font></td>
</tr>
<tr>
<td>
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.
<br><br>
</td>
</tr>
<tr>
<td bgcolor=white height=25><font color=#0000C0><code>
rpm -qa | sort | less </code></font></td>
</tr>
<tr>
<td>
Um z.B. herauszufinden, wie das Paket heisst, das man deinstallieren will, kann man sich mit <i>-q (--query)</i> und <i>-a (--all)</i>
eine Liste der installierten Pakete anzeigen lassen. <i>sort</i> ist optional und sorgt dafür, dass die Dateiliste sortiert
angeziegt wird. <i>less</i> wird benötigt, da die Dateiliste meist nicht auf den Bildschirm passt und man damit bequem durch
Liste scrollen kann.
<br><br>
</td>
</tr>
<!--BEGIN
Ich habe eine Datei auf dem System, zu welchem Paket gehört es ?-->
<a name=Q_RPM_02></a>
<!--END-->
<tr>
<td bgcolor=white height=25><font color=#0000C0><code>
rpm -qf /bin/bash </code></font></td>
</tr>
<tr>
<td>
Wenn man im System eine Datei findet, und man wissen will, zu was für einem Paket es gehört
( hier: <i>/bin/bash</i> ), bekommt man mit diesem Befehl ungefähr folgende Ausgabe:<br><b>bash-2.04-30</b>
<br><br>
</td>
</tr>
<!--BEGIN
Wie bekomme ich heraus, welche Paket-Name-Version ich einsetze ?-->
<a name=Q_RPM_03></a>
<!--END-->
<tr>
<td bgcolor=white height=25><font color=#0000C0><code>
rpm -q samba
</code></font></td>
</tr>
<tr>
<td>
Um die aktuelle Version eines installierten Paketes herauszufinden
( hier: <i>samba</i> ), genügt ein <i>-q</i>
( <i>--query</i> ) um ungefähr folgende Ausgabe zu bekommen:<br>
<b>samba-2.0.7-49</b>
<br><br>
</td>
</tr>
<!--BEGIN
Wie die Skripte angezeigt, die in einem Paket ablaufen ?-->
<a name=Q_RPM_07></a>
<!--END-->
<tr>
<td bgcolor=white height=25><font color=#0000C0><code>
rpm -q[p] --scripts samba[-2.0.7.-49.rpm]
</code></font></td>
</tr>
<tr>
<td>
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 <i>p</i> und den kompletten Pfad + Dateinamen.
<br><br>
</td>
</tr>
<!--BEGIN
Wie bekomme ich mehr Informationen zu einem Paket ?-->
<a name=Q_RPM_05></a>
<!--END-->
<tr>
<td bgcolor=white height=25><font color=#0000C0><code>
rpm -q[p]i samba[-2.0.7.-49.rpm]
</code></font></td>
</tr>
<tr>
<td>
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 <i>p</i> und den
kompletten Pfad + Dateinamen.
<br><br>
</td>
</tr>
<tr>
<!--BEGIN
Wie erhalte ich eine Dateiliste eines (installierten) Paketes ?-->
<a name=Q_RPM_06></a>
<!--END-->
<td bgcolor=white height=25><font color=#0000C0><code>
rpm -q[p]l samba[-2.0.7.-49.rpm] | less
</code></font></td>
</tr>
<tr>
<td>
Dieses Kommando zeigt alle Dateien, die dieses Paket beinhaltet. <i>less</i> 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 <i>p</i> und den kompletten Pfad + Dateinamen.
</td>
</tr>
</table>
<br><br><hr><br><br>
<!--RPM - BESONDERHEITEN-->
<h2>
<a name=RPM-Besonderheiten>Besonderheiten</a>
</h2>
<h4><u><i>Paket-Bezeichnung</i></u></h4>
Viele Informationen stecken schon in der <Paket-Bezeichnung>:
<br><br>
<table width=100%>
<tr><td bgcolor=white height=25 align=left><font color=#0000C0><code>
<Name>-<Version>-<Release>.<Zusatz>.rpm
</code></font></td></tr>
</table>
<br><br>
<b>Name</b> ist die Bezeichnung des Paketes,<br>
<b>Version</b> zeigt die aktuelle Version des Programmes,<br>
<b>Release</b> sagt aus, wie oft das RPM-Paket schon neu zusammengestellt wurde ( die Änderungen zu einem
vorhergehenden Release findet man im ChangeLog des Paketes ). <br>
<b>Zusatz</b> setzt sich wie folgt zusammen:
<br><br>
<table cellpadding=4 border=1>
<colgroup>
<col width=40%>
<col width=60%>
</colgroup>
<tr valign=top>
<td align=left><Paket-Name>-<b>static</b>.rpm </td>
<td>
Diese Erweiterung haben statisch vorkompilierte Pakete. Statisch heisst,
es sind alle notwendigen Bibliotheken schon mit in dem Paket drin.<br><br>
<table>
<colgroup>
<col width=20%>
<col width=5%>
<col width=75%>
</colgroup>
<tr valign=top>
<td><b><i>Vorteil </i></b></td>
<td>--></td>
<td>Es dürfte so gut wie keine Abhängigkeitsfehler geben</td>
</tr>
<tr>
<td><b><i>Nachteil </i></b></td>
<td>--></td>
<td> Das Paket ist dem entsprechend meist ziemlich groß</td>
</tr>
</table>
</td>
</tr>
<tr>
<td align=left><Paket-Name>-<b>src</b>.rpm</td>
<td>
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 <a href=#RPM_QUELLPAKETE>hier</a>.
</td>
</tr>
<tr>
<td align=left><Paket-Name>-<b>i386</b>.rpm</td>
<td>
<p>
Dies bezeichnet die Architektur des Zielrechners, hier ein Intel-386
kompatibler. Es könnte auch <b>i486</b>, <b>i586</b>, <b>i686</b> oder
mittlerweile ebenfalls <b>alpha</b> und <b>sparc</b> heißen.
</p>
</td>
</tr>
</table>
<br><br>
<!--BEGIN
Nach der Installation kann ich das Programm nicht finden-->
<a name=Q_RPM_01></a>
<!--END-->
<a name=RPM_QUELLPAKETE></a>
<h4><u><i>Quell-Pakete</i></u></h4>
<table>
<tr>
<td colspan=2>
Pakete mit dem Zusatz <b>src.rpm</b> 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:
<br><br>
</td>
</tr>
<tr>
<td align=left width="22%"><b>RedHat</b></td>
<td><i> /usr/src/redhat/</i></td>
</tr>
<tr>
<td align=left><b>SuSE</b></td>
<td><i> /usr/src/packages/</i><br><br></td>
</tr>
<tr>
<td colspan=2 align=left height=30>
Unterhalb dieses Verzeichnisses liegen 4 weitere:
</td>
</tr>
</table>
<table cellpadding=4 border=1>
<colgroup>
<col width=22%>
<col width=78%>
</colgroup>
<tr>
<td valign=top><b>SOURCES</b></td>
<td>
für die originalen Quellen (tar.gz, bz2)
und Patches (.diff, .patch).
</td>
</tr>
<tr><td valign=top><b>SPECS</b></td>
<td>
für die .spec Dateien, die u.a. die Anleitung zum Erstellen des
RPM-Paketes beinhalten.
</td>
</tr>
<tr><td valign=top><b>SRPMS</b></td>
<td>
für erstellte Quellpakete im RPM-Format (src.rpm).
</td>
</tr>
<tr><td valign=top><b>RPMS</b></td>
<td>
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.
</td>
</tr>
<tr><td valign=top><b>BUILD</b></td>
<td>
hier werden die Originalen Quellen entpackt,
gepatcht und kompiliert.
</td>
</tr>
</table>
<br><br>
Wir haben also nach der Installation des Quellpaketes mindestens 2 Dateien:<br>
<i>/usr/src/redhat/<b>SPECS</b>/<Paket-Name><b>.spec</b></i><br>
<i>/usr/src/redhat/<b>SOURCES</b>/<Paket-Name><b>.tar.gz</b></i><br>
Um aus diesen Dateien nun ein RPM-Paket zu `schnüren`, wechselt man nach <i>/usr/src/redhat/SPECS</i> und
führt folgenden Befehl aus:
<br><br>
<table width=100%>
<tr><td bgcolor=white height=25><font color=#0000C0><code>
rpm -bb --target=i386 --clean --rmsource <Paket-Name>.spec
</code></font></td></tr>
</table>
<br><br>
Je nach Paketgröße kann man jetzt einen Kaffe trinken gehn :-) Mittlerweile wird das Programm für einen
i386-Rechner (<i>--target=i386</i>) kompiliert, danach alle temporären Dateien gelöscht (<i>--clean</i>)
und das Quellpaket entfernt (<i>--rmsource</i>). Das fertige RPM - Paket wird am Schluß nach
<i>/usr/src/redhat/RPMS/i386/<Paket-Name>-i386.rpm</i> kopiert.
<br>
Wer allerdings nur das fertige RPM-Paket haben will, und die zusätzlichen Optionen ( siehe <a href=#RPM-Dokumentation>
Dokumentation</a> ), die man hätte, wenn man das Quellpaket zuerst installiert, nicht benötigt, der kann auch ne
schnellere Variante nutzen:
<br><br>
<table width=100%>
<tr><td bgcolor=white height=25><font color=#0000C0><code>
rpm --rebuild <Paket-Name>.src.rpm
</code></font></td></tr>
</table>
<p>
Hier muss man das Paket nicht zuerst installieren und der Kompiliervorgang wird sofort ausgelöst. Das fertige RPM-Paket findet
man auch hier unter <i>/usr/src/redhat/RPMS/i[3456]86/<Paket-Name>.rpm</i>.
</p>
<!--BEGIN
Kann ich Pakete einer anderen Distribution benutzen ?-->
<a name=Q_RPM_04></a>
<!--END-->
<h4><u><i>Distributionen</i></u></h4>
Pakete von anderen Distributionen sind so ne Sache ;-)
Ein Problem ist die unterschiedliche Verzeichnisstruktur der einzelnen
Distributionen, z.B. der Startskripte :
<br><br>
<table width=100%>
<tr>
<td><b>SuSE</b></td>
<td> <= 7.0</td>
<td width=80%><i> /sbin/init.d/</i></td>
</tr>
<tr>
<td></td>
<td> >= 7.1</td>
<td><i> /etc/init.d/</i></td>
</tr>
<tr>
<td><b>RedHat</b></td>
<td> <= 7.0</td>
<td><i> /etc/rc.d/init.d/</i><br><br></td>
</tr>
</table>
Nehmen wir zur Verdeutlichung mal ein kleines Programm, den <i>inetd</i>.
Als erstes sollte man die Dateiliste überprüfen:<br>
<b>rpm -qpl /home/micha/downloads/inetd-0.16-17.i386.rpm</b>
<br><br>
<table width=100%>
<tr>
<td valign=top width=100><b>SuSE</b></td>
<td valign=top>
<i>
/sbin/init.d/inetd<br>
/sbin/init.d/rc2.d<br>
/sbin/init.d/rc2.d/K20inetd<br>
/sbin/init.d/rc2.d/S20inetd<br>
/sbin/init.d/rc3.d<br>
/sbin/init.d/rc3.d/K20inetd<br>
/sbin/init.d/rc3.d/S20inetd<br>
/usr/sbin/inetd<br>
/usr/sbin/rcinetd<br>
/usr/share/doc/packages/inetd<br>
/usr/share/doc/packages/inetd/AUTHORS<br>
/usr/share/doc/packages/inetd/COPYING<br>
/usr/share/doc/packages/inetd/NEWS<br>
/usr/share/doc/packages/inetd/README<br>
/usr/share/doc/packages/inetd/THANKS<br>
/usr/share/man/man5/inetd.conf.5.gz<br>
/usr/share/man/man8/inetd.8.gz<br>
/var/adm/fillup-templates/rc.config.inetd<br>
</i>
</td>
</tr>
<tr>
<td valign=top width=100><b>RedHat</b></td>
<td valign=top>
<i>
/etc/inetd.conf<br>
/etc/rc.d/init.d/inet<br>
/usr/man/man5/inetd.conf.5.gz<br>
/usr/man/man8/inetd.8.gz<br>
/usr/sbin/inetd<br>
</i>
<br><br>
</td>
</tr>
</table>
Hier kann man sehen, wie schön alles schiefgehen würde, wenn
man den <i>inetd</i> 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 !<br>
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 :<br>
<b>rpm -qp --scripts /home/micha/downloads/inetd-0.16-17.i386.rpm</b>
<br><br>
<table width=100%>
<tr>
<td valign=top width=100><b>SuSE</b></td>
<td valign=top>
<i>
<b>postinstall script</b> (through /bin/sh):<br>
echo "Updating etc/rc.config..."<br>
if [ -x bin/fillup ] ; then<br>
bin/fillup -q etc/rc.config var/adm/fillup-templates/rc.config.inetd<br>
else<br>
echo "ERROR: fillup not found. This should not happen. Please compare"<br>
echo "etc/rc.config and var/adm/fillup-templates/rc.config.inetd"<br>
echo "and update by hand."<br>
fi<br>
sbin/insserv etc/init.d/inetd<br>
<b>postuninstall script</b> (through /bin/sh):<br>
sbin/insserv etc/init.d<br>
</i>
</td>
</tr>
</table>
<br><br>
Es wird hier bei SuSE nach der Installation (postinstall) versucht, die Datei <i>/etc/rc.config</i> upzudaten,
welche unter Redhat z.B. gar nicht vorhanden ist, genau so wie das Programm <i>/bin/fillup</i>.
<br><br>
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 !
<br><br><hr><br><br>
<!--RPM - Dokumentation-->
<b>
<a name=RPM-Dokumentation>Dokumentation</a>
</b>
<br><br>
<table>
<tr>
<td><a href=http://www.rpmfind.net target=_blank><a href="http://www.rpmfind.net" target="_blank">http://www.rpmfind.net</a></a></td>
<td>
Erste Anlaufstelle, wenn man irgendein RPM-Paket sucht, daß es
in der eigenen Distribution nicht gibt.
</td>
</tr>
<tr>
<td><a href=http://www.rpm.org target=_blank><a href="http://www.rpm.org" target="_blank">http://www.rpm.org</a></a></td>
<td>
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 !
</td>
</tr>
<tr>
<td>
<a href=http://www.rpm.org/RPM-HOWTO/index.html target=_blank>
RPM - HOWTO (englisch)</a></td>
<td>
Nochmal seperat aufgelistet das Howto von <a href=http://www.rpm.org>
<a href="http://www.rpm.org" target="_blank">http://www.rpm.org</a></a>, das zwar hoffnungslos veraltet ist
( November 1999 ), aber immer noch ein guter Einstieg ist, um selber
SPEC - Files zu basteln </td>
</tr>
<tr>
<td>
<a href=http://linux.daphnis.com/dlhp/DE-RPM-HOWTO.html target=_blank>
RPM-HOWTO (deutsch)
</a>
</td>
<td>
Wusste bis jetzt gar nicht, daß es das Ding auch auf deutsch gibt ;-)
</td>
</tr>
</table>