Scripted Reality

Ihr volles Potential geben SRC-RPMs (Abbildung 3) erst dann preis, wenn Sie sie auf dem System installieren. Wie bei gewöhnlichen RPMs erledigt dies der Aufruf rpm -i Paket.src.rpm – allerdings als normaler Anwender, nicht als Root. OpenSuse-Anwender installieren SRC-RPMs mit zypper source-install Paket direkt aus dem Online-Repository. Zypper spielt dabei auch gleich alle für das Kompilieren nötigen Devel-Pakete (BuildRequires) ein.

Abbildung 3: Ein SRC-RPM schnürt alle für den Paketbau erforderlichen Komponenten in eine Datei zusammen.

Das SRC-RPM-Paket enthält neben dem Quellcode und andere systemweit zu installierende Dateien. Dazu gehören neben Startmenü-Einträgen auch Patches, die vor dem Kompilieren Fehler im Quellcode bereinigen, sowie Spec-Dateien, die Name, Version, Beschreibung und Abhängigkeiten sowie die Befehle zum Kompilieren des Quellcodes enthalten. Wie Sie Patches selbst bauen, klärt der Kasten "Patches erstellen".

Patches erstellen

Wie Sie Änderungen am Quellcode eines Programms in einen Patch verpacken, zeigt Listing 1. Zunächst benennen Sie zunächst das Basisverzeichnis um (Zeile 1) und entpacken dann das unveränderte Quellcode-Archiv erneut. Im nächsten Schritt erzeugen Sie einen Patch für alle Änderungen (Zeile 2). Möchten Sie die Änderungen einzelner Dateien separat erfassen, dann rufen Sie Diff wie in Zeile 3 gezeigt auf.

Listing 1

$ mv galculator-2.0.1 galculator-2.0.1_changed
$ diff -ur galculator-2.0.1 galculator-2.0.1_changed > my.patch
$ diff -u galculator-2.0.1/fDatei galculator-2.0.1_changed/Datei

Beim ersten Installieren eines SRC-RPMs legt RPM in Ihrem Heimatverzeichnis das Verzeichnis rpmbuild inklusive der Unterverzeichnisse BUILD, BUILDROOT, RPMS, SOURCES, SPECS und SRPMS an. Unter SOURCES finden Sie die Tarballs und Patches mit dem Quellcode für alle installierten SRC-RPMs.

Die Spec-Dateien im Verzeichnis SPECS bündeln beschreibende Daten und Handlungsanweisungen für Rpmbuild, das daraus den Quellcode kompiliert und in ein Binär-RPM verpackt. Wenn Sie SRC-RPMs installieren, anstatt direkt binäre RPMs daraus zu bauen, können Sie die Spec-Dateien vor dem Rpmbuild-Aufruf mit einem Texteditor verändern. Der folgende Aufruf erzeugt schließlich ein Binär-RPM:

$ rpmbuild -bb Name.spec

Alle im Spec referenzierten Quellcode-Archive und Patches müssen dabei unter SOURCES bereitliegen.

Dreh- und Angelpunkt

Als einfaches Beispiel für das Update einer Spec-Datei auf eine neue Version des enthaltenen Programms eignet sich die Taschenrechner-Software Galculator [2] unter OpenSuse 12.2. Auf anderen RPM-basierten Linux-Distributionen fällt die Spec-Datei im Detail anders aus, doch das geschilderte Vorgehen lässt sich übertragen. OpenSuse 12.2 bringt Galculator 1.3.4 mit, doch inzwischen steht schon Version 2.0.1 bereit, die nun GTK3 benutzt und sich so besser in den aktuellen Gnome-Desktop einfügt.

Installieren Sie zuerst das bei OpenSuse mitgelieferte Quellpaket zu Galculator mit dem Aufruf zypper source-install galculator als normaler User. Dies überträgt die Datei gcalculator.spec nach rpmbuild/SPECS/ sowie die beiden Files galculator-1.3.4.tar.bz2 und galculator-ld_fix.diff nach rpmbuild/SOURCES/. Danach öffnen Sie galculator.spec in einem Texteditor (Listing 2).

Listing 2

Name:           galculator
Summary:        A GTK 2 based calculator
Version:        1.3.4
Release:        18.1.2
License:        GPL-2.0
Group:          System/GUI/GNOME
Url:            http://galculator.sourceforge.net/index.html
Source0:        %name-%version.tar.bz2
Patch0:         %name-ld_fix.diff
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
BuildRequires:  autoconf automake fdupes gcc gcc-c++ make
BuildRequires:  doxygen gtk2-devel intltool pkg-config
BuildRequires:  libglade2-devel update-desktop-files
BuildRequires:  libtool
%description
Galculator is a GTK 2 based calculator with ordinary notation/reverse
polish notation, [...]
%prep
%setup -q
%patch0
%build
autoreconf -fi
%configure
%__make %{?jobs:-j%{jobs}}
%install
%makeinstall
%suse_update_desktop_file -r %name GTK Utility Calculator
%find_lang %name
%fdupes -s %{buildroot}
%clean
%__rm -fr %buildroot
%if 0%{?suse_version} >= 1140
%post
%desktop_database_post
%icon_theme_cache_post
%postun
%desktop_database_postun
%icon_theme_cache_postun
%endif
%files -f %name.lang
%defattr(-,root,root)
%_bindir/%name
%_datadir/applications/*
%dir %_datadir/%name
%dir %_datadir/%name/glade
%_datadir/%name/glade/*.glade
%_mandir/man1/%name.1.gz
%_datadir/pixmaps/%name.*
%changelog
* Sat Oct  1 2011 xxxx@suse.com
- add libtool as buildrequire to make the spec file more reliable
* Sat Sep 17 2011 xxxxx@gmx.de
- added Patch0 (gcalculator-ld_fix.diff) to fix the build for factory
  (this patch requires a autoreconf call)
[...]

Die ersten 15 Zeilen von galculator.spec bilden einzeilige Felder in der Form Feldname: Feldinhalt. Die Zeilen 1 bis 7 liefern dem Paketmanagement elementare Daten wie Name, Version und Upstream-URL, Lizenz sowie eine kurze Beschreibung. In den Zeilen darunter folgen Informationen für Rpmbuild bestimmte Informationen.

Source0 nennt den Dateinamen des ersten (und hier einzigen) Quellcode-Archivs. Während des Rpmbuild-Ablaufs stehen eine Reihe von Makros zur Verfügung (%macroname, siehe Tabelle "Gängige RPM-Makros"). Die Anweisung %name-%version.tar.bz2 expandiert Rpmbuild mit Rückgriff auf die Datenfelder Name: und Version:. Bei den vorliegenden Daten ergibt das galculator-1.3.4.tar.bz2, also den Namen des Quellcode-Archivs im Verzeichnis SOURCES.

Gängige RPM-Makros

Makro Funktion
%{_bindir} Installationsverzeichnis für Binaries
%{_datadir} Verzeichnis /share
%{_libdir} Verzeichnis für Shared-Libraries
%{_mandir} Verzeichnis für Manpages

Beim Update auf Version 2.0.1 gilt es daher lediglich später das Feld Version: zu ändern. Dann sucht Rpmbuild nach galculator-2.0.1.tar.bz2, das sich im Verzeichnis SOURCES befinden muss.

In der Zeile darunter folgt noch ein Patch (Patch0:), der ein Problem mit dem Makefile beim Kompilieren unter OpenSuse behebt. Die %prep-Sektion wendet ihn nach dem Auspacken des Quellcodes mit %patch0 an. Beim Lesen von Patch-Dateien hilft die Unified Diff Notation [3].

BuildRoot: zeigt auf ein temporäres mit Anwenderrechten beschreibbares Verzeichnis, das die beim Kompilieren und Installieren mit make und make install erzeugten Dateien aufnimmt. Der Standardwert %{_tmppath}/%{name}-%{version}-build passt praktisch immer. Die folgenden BuildRequires:-Felder listen alle zum erfolgreichen Kompilieren von Galculator erforderlichen Pakete auf.

Etwas verwirrend: Mehrzeilige Datenfelder beginnen genau wie Makros mit dem Prozent-Zeichen. Die Tabelle "Datenfelder in Spec-Dateien" führt alle Fälle auf, in denen das Prozent-Zeichen für ein Datenfeld steht und nicht für ein Makro.

Datenfelder in Spec-Dateien

Datenfeld Beschreibung
%description mehrzeilige Beschreibung, Zeilenlänge <= 80 Zeichen.
%prep Shell-Befehle, die den Quellcode für den Aufruf von configure; make; make install vorbereiten. Dazu gehört zum Beispiel das Auspacken des Quellcode-Archivs. In vielen Fällen genügt das Makro setup -q.
%build Befehl(e) zum Kompilieren, typischerweise configure und make.
%check Tests nach dem Kompilieren ausführen, fehlt häufig.
%install Befehl zum Installieren des kompilierten Programms, allerdings relativ zum Buildroot-Verzeichnis. (~/rpmbuild/BUILDROOT/Paket.Version). Typischerweise make DESTDIR=%{buildroot} install, abkürzbar mit %makeinstall.
%clean Befehl zum Entfernen des Verzeichnisses Paket.Version im BUILDROOT. Geschieht automatisch, wenn das %clean-Feld fehlt.
%files Dateiliste für das Binärpaket.
%changelog Changelog für das Paket beziehungsweise die Spec-Datei.

Außer %description, das eine mehrzeilige Beschreibung für den Paketmanager enthält, sind für unsere Zwecke die Felder %prep, %buildund %install interessant, denn sie steuern das Kompilieren des Quellcodes. Hier stehen prinzipiell die gleichen Befehle, die Sie auch beim manuellen Kompilieren auf der Konsole ausführen würden.

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 11/2014: VIDEOS BEARBEITEN

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

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

WLAN-Signalqualität vom Treiber abhängig
GoaSkin , 29.10.2014 14:16, 0 Antworten
Hallo, für einen WLAN-Stick mit Ralink 2870 Chipsatz gibt es einen Treiber von Ralink sowie (m...
Artikelsuche
Erwin Ruitenberg, 09.10.2014 07:51, 1 Antworten
Ich habe seit einige Jahre ein Dugisub LinuxUser. Dann weiß ich das irgendwann ein bestimmtes Art...
Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 6 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...