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 01/2015: E-Books im Griff

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

ICEauthority
Thomas Mann, 17.12.2014 14:49, 2 Antworten
Fehlermeldung beim Start von Linux Mint: Could not update ICEauthority file / home/user/.ICEauth...
Linux einrichten
Sigrid Bölke, 10.12.2014 10:46, 5 Antworten
Hallo, liebe Community, bin hier ganz neu,also entschuldigt,wenn ich hier falsch bin. Mein Prob...
Externe USB-Festplatte mit Ext4 formatiert, USB-Stick wird nicht mehr eingebunden
Wimpy *, 02.12.2014 16:31, 0 Antworten
Hallo, ich habe die externe USB-FP, die nur für Daten-Backup benutzt wird, mit dem YaST-Partition...
Steuern mit Linux
Siegfried Markner, 01.12.2014 11:56, 2 Antworten
Welches Linux eignet sich am besten für Steuerungen.
Nach Ubdates alles weg ...
Maria Hänel, 15.11.2014 17:23, 5 Antworten
Ich brauche dringen eure Hilfe . Ich habe am wochenende ein paar Ubdates durch mein Notebook von...