PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RedHat Package Manager (rpm)



micha
06.01.02, 22: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 &ouml;fteren Fragen zum Installieren von Software gestellt. Was f&uuml;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&auml;ren, habe ich mich entschlossen, diese FAQ hier beizusteuern. Damit schlie&szlig;lich jeder etwas damit anfangen
kann, hab ich bewusst alle grafischen und distributions-spezifischen Installations-Tools au&szlig;en vor gelassen, und
benutze ausschlie&szlig;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>--&gt;</td>
<td>&nbsp;Allgemeine Informationen zum Paket (Name, Beschreibung, Distribution)</td>
</tr>
<tr>
<td>--&gt;</td>
<td>&nbsp;Liste aller Dateien, die das Paket beinhaltet</td>
</tr>
<tr>
<td>--&gt;</td>
<td>&nbsp;Abh&auml;ngigkeiten zu anderen Paketen (z.B. Bibliotheken)</td>
</tr>
</table>
<p>
RPM Pakete sind in einem speziellen bin&auml;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 &Uuml;berblick verliert und fehlende Dateien bem&auml;ngelt (sog. <b>Abh&auml;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&ouml;rt es ?</a><br>
<a href=#Q_RPM_03>
Wie bekomme ich heraus, welche &lt;Paket&gt;-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 &lt;Paket-Name&gt;-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 &lt;Paket-Name&gt;-i386.rpm </code></font></td>
</tr>
<tr>
<td>
Mit der Option <i>-U</i> (auch <i>--upgrade</i>) wird eine &auml;ltere Version des gleichen Pakets gel&ouml;scht und
die neuere Version installiert. Der Unterschied zum einfachen Löschen und wieder neu installieren besteht darin, da&szlig;
Konfigurationsdateien, wenn sie seit der Installation ver&auml;ndert wurden, nicht gel&ouml;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&auml;nden die Datenbank nicht richtig aufgebaut wird.
<br><br>
</td>
</tr>
<tr>
<td bgcolor=white height=25><font color=#0000C0><code>
rpm -e &lt;Paket-Name&gt; </code></font></td>
</tr>
<tr>
<td>
Die einfachste Art, ein Paket wieder zu deinstallieren. Hier ist wichtig, da&szlig; 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&uuml;r, dass die Dateiliste sortiert
angeziegt wird. <i>less</i> wird ben&ouml;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&uuml;r einem Paket es geh&ouml;rt
( hier: <i>/bin/bash</i> ), bekommt man mit diesem Befehl ungef&auml;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&uuml;gt ein <i>-q</i>
( <i>--query</i> ) um ungef&auml;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&uuml;tzlich, wenn man wissen will, was f&uuml;r Befehle ein Paket w&auml;hrend einer De-
oder Installation ausf&uuml;hrt. Wenn das Paket noch nicht installiert ist, muss man die Angaben in den eckigen Klammern
noch hinzuf&uuml;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&uuml;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&uuml;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&uuml;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 &lt;Paket-Bezeichnung&gt;:
<br><br>
<table width=100%>
<tr><td bgcolor=white height=25 align=left><font color=#0000C0><code>
&lt;Name&gt;-&lt;Version&gt;-&lt;Release&gt;.&lt;Zusatz&gt;.rpm
</code></font></td></tr>
</table>
<br><br>

<b>Name</b> ist die Bezeichnung des Paketes,<br>
<b>Version</b>&nbsp;zeigt die aktuelle Version des Programmes,<br>
<b>Release</b>&nbsp;sagt aus, wie oft das RPM-Paket schon neu zusammengestellt wurde ( die &Auml;nderungen zu einem
vorhergehenden Release findet man im ChangeLog des Paketes ). <br>
<b>Zusatz</b>&nbsp;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>&lt;Paket-Name&gt;-<b>static</b>.rpm&nbsp;&nbsp;</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&nbsp;</i></b></td>
<td>--&gt;</td>
<td>Es d&uuml;rfte so gut wie keine Abh&auml;ngigkeitsfehler geben</td>
</tr>
<tr>
<td><b><i>Nachteil&nbsp;</i></b></td>
<td>--&gt;</td>
<td> Das Paket ist dem entsprechend meist ziemlich gro&szlig;</td>
</tr>
</table>
</td>
</tr>
<tr>
<td align=left>&lt;Paket-Name&gt;-<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>&lt;Paket-Name&gt;-<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&szlig;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>&nbsp;/usr/src/redhat/</i></td>
</tr>
<tr>
<td align=left><b>SuSE</b></td>
<td><i>&nbsp;/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&uuml;r die originalen Quellen (tar.gz, bz2)
und Patches (.diff, .patch).
</td>
</tr>
<tr><td valign=top><b>SPECS</b></td>
<td>
f&uuml;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&uuml;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&uuml;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>/&lt;Paket-Name&gt;<b>.spec</b></i><br>
<i>/usr/src/redhat/<b>SOURCES</b>/&lt;Paket-Name&gt;<b>.tar.gz</b></i><br>
Um aus diesen Dateien nun ein RPM-Paket zu `schn&uuml;ren`, wechselt man nach <i>/usr/src/redhat/SPECS</i> und
f&uuml;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 &lt;Paket-Name&gt;.spec
</code></font></td></tr>
</table>

<br><br>
Je nach Paketgr&ouml;&szlig;e kann man jetzt einen Kaffe trinken gehn :-) Mittlerweile wird das Programm f&uuml;r einen
i386-Rechner (<i>--target=i386</i>) kompiliert, danach alle tempor&auml;ren Dateien gel&ouml;scht (<i>--clean</i>)
und das Quellpaket entfernt (<i>--rmsource</i>). Das fertige RPM - Paket wird am Schlu&szlig; nach
<i>/usr/src/redhat/RPMS/i386/&lt;Paket-Name&gt;-i386.rpm</i> kopiert.
<br>
Wer allerdings nur das fertige RPM-Paket haben will, und die zus&auml;tzlichen Optionen ( siehe <a href=#RPM-Dokumentation>
Dokumentation</a> ), die man h&auml;tte, wenn man das Quellpaket zuerst installiert, nicht ben&ouml;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 &lt;Paket-Name&gt;.src.rpm
</code></font></td></tr>
</table>

<p>
Hier muss man das Paket nicht zuerst installieren und der Kompiliervorgang wird sofort ausgel&ouml;st. Das fertige RPM-Paket findet
man auch hier unter <i>/usr/src/redhat/RPMS/i[3456]86/&lt;Paket-Name&gt;.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>&nbsp;&lt;= 7.0</td>
<td width=80%><i>&nbsp;/sbin/init.d/</i></td>
</tr>
<tr>
<td></td>
<td>&nbsp;&gt;= 7.1</td>
<td><i>&nbsp;/etc/init.d/</i></td>
</tr>
<tr>
<td><b>RedHat</b></td>
<td>&nbsp;&lt;= 7.0</td>
<td><i>&nbsp;/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 &uuml;berpr&uuml;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&ouml;n alles schiefgehen w&uuml;rde, wenn
man den <i>inetd</i> von SuSE auf RedHat, oder umgekehrt, installieren
w&uuml;rde ;-) Das hei&szlig;t, alle Server/Deamonen fallen demnach
eigentlich schon weg.
Auch von gr&ouml;&szlig;eren (XFree86), Systemnahen (glibc) oder Basis-
(KDE/GNOME) Programmen w&uuml;rd ich Abstand nehmen, da hier innerhalb
der RPM-Pakete noch Skripte ablaufen, die u.U. ein anderes System
zerschie&szlig;en k&ouml;nnen !<br>
Die Skripte, die ein RPM-Paket bei der Installation ausf&uuml;hrt, kann man sich
&uuml;brigens anzeigen lassen, und sehen dann bei unserem Beispiel folgenderma&szlig;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>
&nbsp;&nbsp;bin/fillup -q etc/rc.config var/adm/fillup-templates/rc.config.inetd<br>
else<br>
&nbsp;&nbsp;echo "ERROR: fillup not found. This should not happen. Please compare"<br>
&nbsp;&nbsp;echo "etc/rc.config and var/adm/fillup-templates/rc.config.inetd"<br>
&nbsp;&nbsp;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&uuml;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 &uuml;berpr&uuml;en
und nicht blindlings das Ding zu installieren !

<br><br><hr><br><br>

<!--RPM - Dokumentation-->
<b>
<a name=RPM-Dokumentation>Dokumentation</a>
&nbsp;
</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&szlig; 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&uuml;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&szlig; es das Ding auch auf deutsch gibt ;-)
</td>
</tr>
</table>