Am Donnerstag, den 01.03.2012, 22:34 +0100 schrieb Olaf Radicke:
Hi!
Langsam entwickele ich einen richtigen inbrünstigen Hass auf rpm/rpmbuild.
Wenn ihr euch mal mein Beispiel anseht:
https://fedoraproject.org/wiki/How_to_create_a_GNU_Hello_RPM_package/de#M...
Dann fällt euch vielleicht im Makefile diese Zeile auf...
Warum überhaupt ein Makefile? Das hat nichts mit rpmbuild zu tun und
verkompliziert die Sache zusätzlich - was dem Verständnis nicht gerade
dienlich ist. Im Gegenteil: Du automatisierst bestimmte Schritte (z. B.
Source0 nach SOURCES kopieren), also muss man sie nicht mehr
durchführen. Übung macht bekanntlich den Meister, also lass das die
Leute doch selbst machen. Lass am besten das ganze Makefile weg, denn
das ist echt eine ganz andere Baustelle.
Die URL suggeriert zudem, dass es eine Übersetzung des englischen
Artikels ist, aber Du machst was ganz anderes. Und sollte die URL dann
nicht lauten:
https://fedoraproject.org/wiki/Wie_man_ein_GNU_Hello_RPM_Paket_erstellt/de
oder
https://fedoraproject.org/wiki/Ein_GNU_Hello_RPM_Paket_erstellen/de ?
<snip>
dist-rpm: pre-rpm
<snap>
Eigentlich ist das "pre-rpm" zu viel, denn es sollte vom Speck-File
aufgerufen werden...
Mhh, Speck, lecker! ;)
<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", aber offenbar führt er dazu, das "%prep" nicht
ausgeführt wird.
%setup nimmt den source tarball aus SOURCES, entpackt ihn und wechselt
in den neu entstandenen Ordner. Also versuchst Du, den tarball zu
entpacken, bevor Du ihn mit make pre-rpm überhaupt nach SOURCES kopiert
hast. Wie Du richtig sagst ein Henne-Ei-Problem.
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>
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?
Weil 'cd /home/or/rpmbuild/BUILD' teil des %setup Makros ist. Details
dazu unter
http://www.rpm.org/max-rpm-snapshot/s1-rpm-inside-macros.html
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...
Also wenn ich das richtig sehe, gibt es hier ein Henne-Ei-Problem
(
http://de.wikipedia.org/wiki/Henne-Ei-Problem):
Das Makefile brauch Informationen von rpmbuild mit es die nötigen Vorbereitungen
treffen kann, mit rpmbuild funktioniert. rpmbuild braucht wiederum wiederum
Informationen von Makefile.
Jetzt könnte man es sich leicht machen und ein autonomes Spec-File machen. Bei
einem Projekt mit einer Bash-Datei kein Problem. Aber bei einem Großen Projekt
mit hunderten Dateien wird man ja schier wahnsinnig ständig zwei Files anpassen
zu müssen. Zumal 95% identisch und redundant ist.
Und zwar? Was ist hier redundant?
Das Übersetzen der Quellen und das Erstellen eines Paketes sind 2
verschiedene Vorgänge. Das eine wird mit dem Makefile gemacht und das
andere mit der spec. Solange man nicht beides vermischt ist da meiner
Ansicht nach gar nichts redundant.
Also entweder ich hab irgend was Grundsätzliches an rpmbuild noch
nicht
verstanden, oder das Tool ist echt für den Ar***.
Ich vermute ersteres.
Beste Grüße,
Christoph