Wiki-Artikel über rpmbuild

Christoph Wickert christoph.wickert at googlemail.com
Sun Mar 4 21:20:53 UTC 2012


Am Sonntag, den 04.03.2012, 10:32 +0100 schrieb Olaf Radicke:

> Software fällt nicht vom Himmel. Die wird von Softwareentwicklern gemacht.
> Zu 99,9% wird ein Entwickler(-Team) zuerst ein Buildsstem wie make, cmake,
> qmake, ant oder der gleichen verwenden. rpmbuild ist das letzte Glied in dem
> Erstellungsprozess.

Richtig, deshalb sollte man die anderen Schritte nicht in einem HowTo
über *rpm* behandeln. Dann könnte man gleich noch beschreiben, wie man
die Software überhaupt programmiert. Ist das in diesem Kontext wichtig
oder hilfreich?

> Gute Entwickler hassen es Dinge zweimal tun zu müssen. Wenn du mit rpmbuild
> Entwickler zwingst alle doppelt machen zu müssen, wirst du auf Granit beißen.

Was haben Entwickler überhaupt mit Paketierung zu tun? Und was müssen
sie da doppelt machen?

> make ist steinalt. Die Schnittstellen haben sich in den Jahren kaum geändert.
> In make hast du dich schnell eingearbeitet. Nach ca. 30 Min. hast du dein
> erste funktionierendes Makefile gebaut. Nach einer Woche bist du "make-Guru".
> Die Arbeitsweise von make ist Transparenz und wenig überraschend (im negativen
> Sinne).

Als jemand, der sich beruflich und privat auch mit dem Schreiben von
Makefiles beschäftig, kann ich das nicht bestätigen. 

make hat laut manpage 26 Optionen, rpmbuild nur 14.

> Wie schaut es bei rpm aus?
> Nach einer halben Stunde bist du mit rpm noch nicht viel weiter als am Anfang.
> Nach einer Woche tut es rpmbuild irgend wie, aber nicht so wie du es willst.
> Das Hauptproblem ist - aus meiner Sicht - das zu viel mit "schwarzer Magie"
> gearbeitet
> wird. Es passieren zu viel Dinge im Hintergrund mit überraschendem Resultat.

Es passieren nur dann Dinge im Hintergrund, wenn man Makros nimmt, die
extra dazu geschrieben wurden, wiederkehrende Aufgaben zu vereinfachen.
Du kannst in einem spec file mit shell code arbeiten - genau wie bei
make.

> Das es viel Doku zu rpmbuild gibt, werde ich nicht unbedingt als Plus. Offenbar
> ist rpmbuild ohne umfassende Erläuterung unbedienbar.

$ man rpmbuild | wc 
    172     816    6897
$ man make | wc
    152    1482   10358

Sieh an, für make braucht es eine umfangreichere Dokumentation. ;)

> Erschwerend kommt hinzu, das rpm es nicht geschafft hat ein selbständiges
> Projekt zu werden, was die Entwicklung zentral vorantreibt. Stattdessen
> sieht sich der Entwickler mit einen regelrechten Zoo gepachter RPM-Versionen
> verschiedenster Distributionen konfrontiert. 

Trotz Patches verhalten sich die Versionen eigentlich ziemlich gleich.

> Und zu allem Überfluss, hat
> jede Distribution noch ihre eigenen "ungeschriebenen Gesetze" also Konventionen.



> Egal ob ich die Zeile...
>  make RPM_ROOT=$RPM_BUILD_ROOT set-rpm
> 
> ...nach setup oder pre-rpm schiebe: es geht nicht.

Weil Du anscheinend immer noch %setup mit den falschen Parametern nutzt.
Hast Du den Link gelesen, den ich Dir gegeben habe? Tip: versuch mal
"-a"

Die richtige Herangehensweise wäre:
     1. Quellen müssen ein spec file enthalten, meinetwegen auch ein
        *.spec.in, wenn es in der Datei noch was zu bearbeiten gibt, z.
        B. die Versionsnummer.
     2. Mit dem Target make-dist einen fertigen Tarball erstellen. spec
        file muss im Wurzelverzeichnis liegen und den gleichen Namen
        haben wie das Archiv.
     3. Dann noch ein make-rpm Target machen, das einfach rpmbuild -ta
        <tarball> aufruft.
     4. Bei Bedarf noch ein Target, dass beides kombiniert.

Schreib also erst mal das spec, so dass es von Hand baut. Dann das
Makefile darum herum bauen, sollte für Dich kein Problem sein.

Beste Grüße,
Christoph



More information about the de-users mailing list