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