PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RPM-Pakete selbst bauen



Christian Hartm
21.06.03, 21:42
Linux-User Zeitschrift S. 74 - Nr. 7/2003
(private Paketzentrale - beschrieben wird anhand eines Beispieles, wie man ein RPM-Paket selber herstellt)

Habe alles so gemacht wie Vorgabe.
Nach Kommandozeileneingabe als Root

rpm -bb xpuyopuyo.spec

läuft auch alles durch. Ganz zum Schluß, wo die RPM-Datei erstellt wird, kommt die angehängte Fehlermeldung. Vermute, dass mir eine Kompilierungs-Datei fehlt.
RPM-Build + RPM-devel habe ich auf meinem System, daran kann es nicht liegen.


Hier der Fehler - wird jemand daraus schlau?
Mein System-Mandrake 9.1
Dieses rpmlib finde ich auf meinen 3 CD's nicht.
---------------
Processing files: xpuopuyo-0.9.8-mdk
Warnung: File listed twice: /usr/local/share/xpuyopuyo/xpuyopuyo.txt
Finding Provides: /usr/lib/rpm/find-provides
Finding Requires: /usr/lib/rpm/find-requires i586
Using BuildRoot: i586 to search libs
PreReq: rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
Requires(rpmlib): rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
Requires: ld-linux.so.2 libc.so.6 libdl.so.2 libgdk-1.2.so.0 libglib-1.2.so.0 libgmodule-1.2.so.0 libgtk-1.2.so.0 libm.so.6 libnsl.so.1 libX11.so.6 libXext.so.6 libXi.so.6 libc.so.6(GLIBC_2.0) libc.so.6(GLIBC_2.1)
Checking for unpackaged file(s): /usr/lib/rpm/check-files %{buildroot}
getOutputFrom(): Broken pipe
----------------------

Belkira
21.06.03, 22:21
Checking for unpackaged file(s): /usr/lib/rpm/check-files %{buildroot}
getOutputFrom(): Broken pipe

Hast Du Buildroot: %{_tmppath}/irgendwassinnvolles gesetzt? Ich möchte wetten, nein.

Auch würde ich Dir dringends raten, Pakete nicht als "root" zu bauen. Falls die "Linux-User" Dir das wirklich empfohlen hat, war das ein schlechter Rat.

Im übrigen nimm rpmbuild, nicht "rpm".

obelix
22.06.03, 10:37
Original geschrieben von Belkira
Auch würde ich Dir dringends raten, Pakete nicht als "root" zu bauen. Falls die "Linux-User" Dir das wirklich empfohlen hat, war das ein schlechter Rat.

Zitat aus der Linux-User: "...... denn Sie brauchen während des gesamten Build-Prozesses Superuser-Rechte. Man kann zwar auch normalen Benutzern das Paketbauen erlauben, doch ist eine entsprechende Umgebung recht kompliziert einzurichten."
Naja, ich finde das nicht so toll. Wenn dann sollte man es schon richtig erklären. Der Bericht hat mich echt entäuscht und ich werde noch ne mail an die Redaktion schreiben.
Gruß, Obelix

kth
22.06.03, 13:16
Unter http://www.tuxfan.homeip.net:8080/hack.html gibt's eine praktische Konfigurationsvorlage für eine User-eigene RPM-Build-Umgebung.

DerKlopfer2000
22.06.03, 14:47
Zitat aus der Linux-User: "...... denn Sie brauchen während des gesamten Build-Prozesses Superuser-Rechte. Man kann zwar auch normalen Benutzern das Paketbauen erlauben, doch ist eine entsprechende Umgebung recht kompliziert einzurichten."

LOL. Das ist irgendwie witzig.

Denn wie heisst es so schön in der orginal Anleitung zu rpm:


Don't EVER build any packages as root, use a regular user account instead.

Ausserdem, die entsprechende Umgebung einzurichten, ist relativ einfach: Ausser einer bestimmten Verzeichnisstruktur, einer Konfigurationsdatei im Home-Verzeichnis des Users und ggf noch die Devel Pakete braucht man eigentlich nichts weiter einzurichten. Wenn man eh schon rpm installiert hat, ist das meiste eh schon eingerichtet. Man muss lediglich die Rechte in /urs/src/RPMS (oder wo sich dieses Verzeichnis befindet) an den Benutzer anpassen oder sich den Verzeichnisbaum in seinem Home neu aufbauen und die Konfigdatei anzupassen. Komplizierter ist es da schon, die Specs- Files von Hand zu schreiben ;)

Eine relative gute Lektüre ist nach wie vor Das RPM Buch (http://www.tu-chemnitz.de/linux/Dokumentation/RPM/test.html). Es ist zwar schon etwas in die Jahre gekommen, vermittelt aber immernoch grundlegendes zu rpm und ist leicht verständlich.

Christian Hartm
22.06.03, 19:22
Hallo

Zeit, dass ich mich nochmal melde.
Ich bleibe wohl lieber bei "checkinstall".
Damit habe ich es ohne Probleme hinbekommen.

Warum eigentlich genau - das wollte ich noch wissen- soll man eine RPM nicht als root kompilieren?
(Finde ich von Linux User nicht gut - ebendieses in dem Artikel als richtig darzustellen)

BuildRoot - Nee, hatte ich im Specfile gar nicht. (Auch Linux-User nicht in dem Beispiel zum selberkompilieren)
Lag der Fehler wohl daran.


mfg

Christian

Otten
22.06.03, 20:49
Original geschrieben von DerKlopfer2000
LOL. Das ist irgendwie witzig.

Denn wie heisst es so schön in der orginal Anleitung zu rpm:



Ausserdem, die entsprechende Umgebung einzurichten, ist relativ einfach: Ausser einer bestimmten Verzeichnisstruktur, einer Konfigurationsdatei im Home-Verzeichnis des Users und ggf noch die Devel Pakete braucht man eigentlich nichts weiter einzurichten. Wenn man eh schon rpm installiert hat, ist das meiste eh schon eingerichtet. Man muss lediglich die Rechte in /urs/src/RPMS (oder wo sich dieses Verzeichnis befindet) an den Benutzer anpassen oder sich den Verzeichnisbaum in seinem Home neu aufbauen und die Konfigdatei anzupassen. Komplizierter ist es da schon, die Specs- Files von Hand zu schreiben ;)

Eine relative gute Lektüre ist nach wie vor Das RPM Buch (http://www.tu-chemnitz.de/linux/Dokumentation/RPM/test.html). Es ist zwar schon etwas in die Jahre gekommen, vermittelt aber immernoch grundlegendes zu rpm und ist leicht verständlich.

Besser

cp -aR /usr/src/redhat /home/username
vi ~/.rpmmacros

%_topdir /home/username/redhat

DerKlopfer2000
22.06.03, 21:22
@Christian Hartm:


Warum eigentlich genau - das wollte ich noch wissen- soll man eine RPM nicht als root kompilieren?

Weil rpmbuild letztendlich nichts weiter macht, als ./configure && make && make install auszuführen, genauso als ob Du die Software von Hand installieren würdest.
Als root würdest Du Dir (un)gewollt alles installieren, was Du als RPM baust, auch die Sachen, die evebtuell nicht für Dich sind, sondern z.B. für einen Kumpel von Dir, der Dich freundlich gebeten hat, mal Software XY als RPM zu packen. Das kann bei systemkritischen Komponenten böse ins Auge gehen. Ausserdem werden diese "Installationen" nicht in der RPM Datenbank geschrieben.

Da vieles allerdings root-Rechte benötigt um überhaupt make install sauber ausführen zu könne, kommt jetzt $RPM_BUILD_ROOT zum Einsatz. Damit wird ein Pfad in ein "fake"-root-Verzeichnis definiert. In diesem Verzeichniss kann man dann (muss man aber nicht) seine eigentliche root-Verzeichnisstruktur nachbilden. In dieser "sicheren" root-Struktur leitet rpmbuild jetzt make install um und man kann gefahrlos die Software auch als nicht-root installieren und sein RPM fertigbauen ohne sein eigentliches System zu beschädigen.

Belkira
23.06.03, 14:49
cp -aR /usr/src/redhat /home/username
vi ~/.rpmmacros

%_topdir /home/username/redhat
Ja, sowas in der Art als Basis, plus:

echo "include: /usr/lib/rpm/redhat/rpmrc" > ~/.rpmrc


Nun gut, rpms als root zu bauen, ist nicht weniger gefährlich, als den User "root" zum manuellen Compilieren zu verwenden. Jedoch automatisiert RPM den Ablauf bei der Compilierung durch die skriptartige "spec"-Datei. Ein Tippfehler, eine ungünstig nichtdefinierte Variable oder eine fehlschlagende Auswertung von Ausdrücken dort kann verheerende Folgen haben und unkontrolliert ins System schreiben. Ein Extrembeispiel wäre:

rm -rf $RPM_BUILDROOT/

(Tippfehler ist Absicht!)