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 08/2015: Cloud-Speicher

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

Grammatikprüfung in LibreOffice nachrüsten
Grammatikprüfung in LibreOffice nachrüsten
Tim Schürmann, 24.04.2015 19:36, 0 Kommentare

LibreOffice kommt zwar mit einer deutschen Rechtschreibprüfung und einem guten Thesaurus, eine Grammatikprüfung fehlt jedoch. In ältere 32-Bit-Versionen ...

Aktuelle Fragen

Empfehlung gesucht Welche Dist als Wirt für VM ?
Roland Fischer, 31.07.2015 20:53, 0 Antworten
Wer kann mir Empfehlungen geben welche Distribution gut geeignet ist als Wirt für eine VM für Win...
Plugins bei OPERA - Linux Mint 17.1
Christoph-J. Walter, 23.07.2015 08:32, 2 Antworten
Beim Versuch Video-Sequenzen an zu schauen kommt die Meldung -Plug-ins und Shockwave abgestürzt-....
Wird Windows 10 update/upgrade mein Grub zerstören ?
daniel s, 22.07.2015 08:31, 5 Antworten
oder rührt Windows den Bootloader nicht an? das ist auch alles was Google mir nicht beantw...
Z FUER Y UND ANDERE EINGABEFEHLER AUF DER TASTATUR
heide marie voigt, 10.07.2015 13:53, 2 Antworten
BISHER konnte ich fehlerfrei schreiben ... nun ist einiges drucheinander geraten ... ich war bei...
PCLinuxOS lässt sich nicht installieren
Arth Lübkemann, 09.07.2015 18:53, 6 Antworten
Hallo Leute, ich versuche seit geraumer Zeit das aktuelle PCLinuxOS KDE per USB Stick zu insta...