Wiki-Artikel über rpmbuild

Michael Schwendt mschwendt at gmail.com
Fri Mar 2 17:32:29 UTC 2012


On Thu, 1 Mar 2012 22:34:24 +0100 (CET), OR (Olaf) wrote:

> 
> 
> Hi!
> 
> Langsam entwickele ich einen richtigen inbrünstigen Hass auf rpm/rpmbuild.

Keine gute Einleitung. ;)
Bin kurz angebunden, daher nur ein paar Kommentare im folgenden:

> Wenn ihr euch mal mein Beispiel anseht:
> https://fedoraproject.org/wiki/How_to_create_a_GNU_Hello_RPM_package/de#Makefile_erstellen
> 
> Dann fällt euch vielleicht im Makefile diese Zeile auf...

Ich verstehe den Ansatz mit dem Makefile, die Implementation ist aber
noch Murks.
 
> <snip>
> dist-rpm: pre-rpm
> <snap>
> 
> Eigentlich ist das "pre-rpm" zu viel, denn es sollte vom Speck-File aufgerufen
> werden...

Sicherlich kein Tippfehler, also lassen wir es doch bei "spec", okay?
 
> <snip>
> %prep
> %setup -q
> make PREFIX=$RPM_BUILD_ROOT pre-rpm
> <snap>
> 
> Doch dieser Befehl wird nie ausgeführt. Ich habe nie wirklich verstanden was
> "%setup -q", 

Im Gegensatz zu %prep ist %setup ein Kommando mit hinreichend gut
dokumentierten Optionen. Laß für den Anfang -q ("quiet") weg, damit in
der Ausgabe nichts unterdrückt wird. %setup ist für das Anlegen des
"Build" Verzeichnisses und das Entpacken der "Source" Archive zuständig.

> aber offenbar führt er dazu, das "%prep" nicht ausgeführt wird.
> Wenn ich "%setup -q" woanders hin verschiebe, wird "%prep" auf ein mal
> ausgeführt:
> 
> <snip>
> [...]
> + cd /home/or/rpmbuild/BUILD
> + make PREFIX=/home/or/rpmbuild/BUILDROOT/rpm-uebung-1-1.noarch pre-rpm
> make[1]: Entering directory `/home/or/rpmbuild/BUILD'
> make[1]: *** Keine Regel, um >>pre-rpm<< zu erstellen.  Schluss.
> [...]
> 
> <snap>
> 
> Der prefix ist definitiv falsch. Also ersetze ich die Zeile durch...
>
> <snip>
> make PREFIX=%(echo $HOME)/rpmbuild/ pre-rpm
> <snap>

Dieser PREFIX ist auch falsch. Ohne Kommentierung sogar unsinnig.
Üblich wäre PREFIX=/usr bzw. PREFIX=%{_prefix}.

> Nun lautet die Fehlermeldung....
> 
> <snip>
> [...]
> Ausführung(%prep): /bin/sh -e /var/tmp/rpm-tmp.N9C8lB
> + umask 022
> + cd /home/or/rpmbuild/BUILD
> + make PREFIX=/home/or/rpmbuild/ pre-rpm
> make[1]: Entering directory `/home/or/rpmbuild/BUILD'
> make[1]: *** Keine Regel, um >>pre-rpm<< zu erstellen.  Schluss.
> [...]
> <snap>
> 
> ...Ja? Warum sollte jetzt das Makefile auf ein mal in /home/or/rpmbuild/BUILD
> sein? Irgend wie scheint sich auf ein mal rpmbuild nicht mehr zuständig zu
> fühlen, das Tar-Archif dort hin auszupacken, wo es es gerne hin haben will...

rpmbuild erwartet eine bestimmte Verzeichnisstruktur, in dessen Verzeichnissen
die einzelnen Dateien gesucht werden. Befindet sich die spec Datei in $PWD,
werden die "Source" Dateien/Archive dort noch lange nicht gesucht.
Schau Dir als Beispiel mal die Ausgabe von

  rpm --eval %_topdir
  rpm --eval %_sourcedir
  rpm --eval %_specdir
  rpm --eval %_tmppath
  rpm --eval %_buildroot

an. Diese Variablen lassen sich natürlich umdefinieren, was einige Paketierer
machen, weil sie die Voreinstellung nicht mögen. Notfalls mußt Du diese
Variablen beim Aufruf von rpmbuild umbiegen.

  rpmbuild --define _sourcedir $(pwd) -ba datei.spec

Und keine Angabe von --target. Wenn Du "noarch" brauchst, gehört diese
Angabe in die spec.  BuildArch: noarch

> Also entweder ich hab irgend was Grundsätzliches an rpmbuild noch nicht
> verstanden, oder das Tool ist echt für den Ar***.

Ersteres. ;)

Weitere Antworten von mir bitte nicht vor Mitte nächster Woche erwarten.

-- 
Fedora release 16 (Verne) - Linux 3.2.7-1.fc16.x86_64
loadavg: 0.05 0.07 0.10


More information about the de-users mailing list