AA_grundriss_14789983_123rf_Golkin_Oleg.jpg

© Golkin Oleg, 123rf.com

Baumeister

RPM-Pakete ohne Vorlage selbst erstellen

21.06.2013
Der Prozess, mit dem Distributoren bestehende Pakete auf eine neue Software-Version heben, erlaubt auch dem Normalanwender den unkomplizierten Bau eigener Pakete.

Ist das neue Programm erst einmal kompiliert, kann man es meist kaum noch erwarten, make install auszuführen und die Anwendung endlich zu starten. Doch dieser Aufruf als Root ist gefährlich: Er überschreibt ohne Vorwarnung Dateien. Der Aufruf make uninstall ist oft gar nicht implementiert – und wenn doch, löscht er die installierten Dateien, ohne eventuell vorher überschriebene Versionen wiederherzustellen.

Sicherer ist es, auch für selbst kompilierte Software Pakete zu erstellen und diese über das systemweite Paketmanagement zu installieren. Viele Anwender schrecken vor dem zusätzlichen Aufwand zurück. Doch ein Blick auf die Arbeitsweise der Distributoren, die für jedes Release Tausende Pakete neu bauen, zeigt, dass in vielen Fällen viel weniger Arbeit dahinter steckt als erwartet.

Baumaschine

Gentoo, bei dem der Paketmanager Portage jedes Softwarepaket vollautomatisch auf dem Rechner des Anwenders kompiliert, besitzt genau genommen kein Alleinstellungsmerkmal: Sowohl in der RPM- als auch in der Debian-Welt gehört ein leistungsfähiges Build-System zur Standardausstattung, die das Kompilieren und Verpacken von Programmen in ein Paket automatisiert (Abbildung 1).

Abbildung 1: Für die meisten Anwender ist RPM ein Synonym für Binär-RPMs, die Anwendungen und andere Systemkomponenten installationsfertig verpacken. Das ausgeklügelte System aus SRC-RPMs und Rpmbuild kennen dagegen selbst viele Power-User nicht.

SRC-RPMs (Dateiendung .src.rpm) bilden die Basis für das RPM-Build-System. Anders als Binär-RPMs enthalten sie keine ausführbaren Dateien, sondern den Quellcode eines Programms samt dem "Rezept" zum kompilieren. Um ein SRC-RPM in ein normales RPM umzuwandeln, genügt daher der Aufruf:

$ rpm --rebuild Paket.src.rpm

Dieser Befehl stößt das Kompilieren aus den Quellen an und verpackt die entstanden Programmdateien in ein Binär-RPM. Das dazu erforderliche Rpmbuild-Programm finden Sie unter OpenSuse im Paket rpm-build. Unter Fedora installieren Sie die Gruppe @development-tools sowie das Paket fedora-packager.

TIPP

Das Debian-Pendant zu SRC-RPMs bietet einen ähnlichen Leistungsumfang, die Bedienung fällt jedoch grundlegend anders aus. Ihr widmet sich der zweite Teil dieser Artikelserie im nächsten Heft.

Transportabler Container

Schon der GPL wegen stellen die Distributionen jedem Binär-Repository dessen Quellcode-Pendant zur Seite. Wenn Sie dieses im Paketmanager aktivieren, lädt yumdownloader --source Paket unter Fedora ein Quellcode-RPM für das genannte Programm herunter. Für OpenSuse finden Sie die SRC-RPMs in der Online-Paketsuche [1] des Build-Service nach einem Klick auf Show other Versions.

Der Aufruf rpm --rebuild Paket.src.rpm erzeugt aus dem SRC-RPM ein zum offiziellen Distributionspaket identisches Binär-RPM. Liegt Ihnen lediglich ein SRC-RPM für eine andere Version der von Ihnen genutzten Distribution vor, lohnt sich der Rpmbuild-Durchlauf ganz besonders: Quelltext-RPMs sind deutlich weniger an eine bestimmte Distributionsversion gebunden als Binärpakete (siehe Kasten "Programmpakete und Abhängigkeiten").

Beim ersten Aufruf fehlen meist noch einige Devel-Pakete (Abbildung 2). Nach deren Einrichten erzeugt ein erneuter Aufruf des Befehls ein auf Ihr System zugeschnittenes Binary. Dabei laufen neben wenigen zum Paketbau gehörigen Meldungen auch solche über den Bildschirm, die Sie beim Aufruf von make zu sehen bekämen.

Abbildung 2: Bevor rpm --rebuild den Quellcode kompiliert und in ein installationsfertiges Binär-RPM verpackt, prüft das Tool, ob alle zum Kompilieren nötigen Devel-Pakete vorliegen.

Programmpakete und Abhängigkeiten

Jede der unüberschaubar vielen Linux-Distributionen enthält andere Versionen der gängigen Bibliotheken. Kompilierte Programme – also auch Binär-RPMs – funktionieren oft nur mit einer bestimmten Version dieser Hilfsprogramme, während beim Kompilieren eine neuere Version der Bibliothek meist keine Probleme bereitet.

Ein Blick in die Verzeichnisse /usr/lib/ oder /usr/lib64/ hilft zu verstehen, warum das so ist. Die meisten Dateien darin tragen einen Namen der Form libName.so.1.23. Wenn die Entwickler aus einer Bibliothek Funktionen entfernen oder deren Aufrufparameter verändern, stürzen Programme ab, die noch mit der alten Schnittstelle der Library rechnen. Das passiert oft nicht gleich beim Start, sondern erst beim Aufruf eines bestimmten Menüpunkts. Um solche unangenehmen Überraschungen zu verhindern, signalisieren die Entwickler nicht rückwärtskompatible Änderungen durch Erhöhen der zwei- oder dreistelligen Versionsnummer im Namen der Bibliothek.

Manchmal geht es dabei lediglich um kleine Anpassungen, die längst nicht alle Anwendungen betreffen. Ob ein Programm mit der neuen Bibliotheksversion zusammenarbeitet, zeigt aber erst das Kompilieren. RPMs speichern die Bibliotheksversionen (Soname, von "shared object name"), gegen die die enthaltenen Programme übersetzt sind, als Abhängigkeit. Die Distributionen übersetzen daher jedes Paket beim Update der Distribution neu aus dem Quellcode.

Auch als Anwender müssen Sie den Compiler bemühen, wenn kein passendes Paket vorliegt. Dafür bleibt ihnen die DLL-Hölle früherer Windows-Versionen erspart. Dass alle Programme gegen eine bestimmte Version der Hilfsprogramme kompiliert sind, spart unter Linux auch Plattenplatz und Arbeitsspeicher ein.

Ein eigenes Binär-RPM aus einen SRC-RPM zu kompilieren ist viel sicherer, als wegen der aktuellen Version eines Programms ein instabiles Repository einzubinden. Dabei zieht die Installation nämlich oft so viele Abhängigkeiten nach, dass dies unter Umständen einem Upgrade auf eine instabile Distributionsversion nahe kommt.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 8 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

Kommentare

Infos zur Publikation

LU 12/2014: ANONYM & SICHER

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Ubuntu 14.10 und VirtualBox
Ubuntu 14.10 und VirtualBox
Tim Schürmann, 08.11.2014 18:45, 0 Kommentare

Wer Ubuntu 14.10 in einer virtuellen Maschine unter VirtualBox startet, der landet unter Umständen in einem Fenster mit Grafikmüll. Zu einem korrekt ...

Aktuelle Fragen

Nach Ubdates alles weg ...
Maria Hänel, 15.11.2014 17:23, 4 Antworten
Ich brauche dringen eure Hilfe . Ich habe am wochenende ein paar Ubdates durch mein Notebook von...
Brother Drucker MFC-7420
helmut berger, 11.11.2014 12:40, 1 Antworten
Hallo, ich habe einen Drucker, brother MFC-7420. Bin erst seit einigen Tagen ubuntu 14.04-Nutzer...
Treiber für Drucker brother MFC-7420
helmut berger, 10.11.2014 16:05, 2 Antworten
Hallo, ich habe einen Drucker, brother MFC-7420. Bin erst seit einigen Tagen ubuntu12.14-Nutzer u...
Can't find X includes.
Roland Welcker, 05.11.2014 14:39, 1 Antworten
Diese Meldung erhalte ich beim Versuch, kdar zu installieren. OpenSuse 12.3. Gruß an alle Linuxf...
DVDs über einen geeigneten DLNA-Server schauen
GoaSkin , 03.11.2014 17:19, 0 Antworten
Mein DVD-Player wird fast nie genutzt. Darum möchte ich ihn eigentlich gerne abbauen. Dennoch wür...