Manche der in der Arch-Linux-Rezeptesammlung AUR lagernden Pakete entsprechen nicht den heute üblichen Anforderungen. Mit einfachen Mitteln verbessern Sie die Qualität solcher unzulänglicher Pakete.
Früher galt Arch Linux aufgrund seiner wenig intuitiven, viel Vorwissen erfordernden Installation als Distribution für Eigenbrötler. Heute sorgen aktiv entwickelte Ableger wie Antergos [1] oder Manjaro [2] dafür, dass auch normale Anwender das System bequem mit einem grafischen Installer auf die Platte bekommen. Angenehmer Nebeneffekt: Aus den Reihen der neuen Benutzer lassen sich auch neue Mitentwickler rekrutieren.
Genial einfach
Damals wie heute lockt Arch Linux mit einem Paketverwaltungssystem, das im Gegensatz zu den Mitbewerbern seine Benutzer nicht immer wieder durch Änderungen der Richtlinien und neue Restriktionen überrascht oder gar verärgert. Pacman [3] will gar nicht alles und jedes bis ins kleinste Detail regeln. Eine einzige, syntaktisch simple Steuerdatei namens PKGBUILD genügt, um aus dem Quellpaket ein installierbares Paket entstehen zu lassen.
Das vereinfacht den Bau von Paketen enorm, führt aber auch zu einer gewissen Lässigkeit beim Umgang mit diesem Werkzeug. Die Fülle an Software im AUR sollte nicht darüber hinwegtäuschen, dass vieles davon mit der heißen Nadel genäht ist und selbst die recht niedrige Schwelle zur Aufnahme in die Community- oder offiziellen Repositories von Arch Linux nicht passieren könnte.
À la carte
Obwohl die meisten Upstream-Entwickler von Anwendungen mit grafischer Oberfläche sowieso schon einen Menüeintrag mitliefern, fehlt dieser im AUR gelegentlich doch. Ihnen bleibt nur der Start über die Befehlszeile oder Sie fügen selbst eine .desktop-Datei hinzu, die den Benutzern das Auffinden des gewünschten Programms erleichtert. In Listing 1 finden Sie eine leicht modifizierte Beispieldatei aus dem AUR, die ohnehin schon einige Dateien explizit installiert, aber die für den Menüeintrag sorgende Datei noch vermissen lässt.
Listing 1
pkgname=clickosquare
pkgver=0.0.1
pkgrel=2
arch=('i686' 'x86_64')
depends=('gtk2')
pkgdesc="mind-developing game written in pure C, Gtk+ 2.0 and some OpenGL."
url="http://clickomatic.sourceforge.net/"
license=('BSD')
source=(http://downloads.sourceforge.net/project/clickomatic/clickosquare-src/0.0.1/clickosquare-0.0.1.src.tar.bz2)
sha256sums=('b95a102917aa9142d132fc51eb2b6cace43aea55907bcbb3e689a5440199f550')
build() {
cd $srcdir/$pkgname-src
make
}
package() {
cd $srcdir/$pkgname-src
install -Dm755 $pkgname $pkgdir/usr/bin/$pkgname
install -Dm644 README $pkgdir/usr/share/licenses/$pkgname/README
Es handelt sich um ein kleines Spiel für zwischendurch, dessen Entwickler recht schnell das Interesse an seinem Projekt verlor und deshalb nie über den Pre-Alpha-Status hinaus kam, was die Versionsnummer eindrucksvoll demonstriert. Den Aufbau einer .desktop-Datei für Clickosquare finden Sie in Listing 2.
Listing 2
[Desktop Entry] Name=Clickosquare Exec=clickosquare Icon=applications-games Type=Application Categories=GTK;Game; Terminal=false
Die ersten beiden Zeilen der Datei dürften sich von selbst erklären, die Deklaration des Icons dagegen ist etwas verzwickter. Da Clickosquare kein Anwendungssymbol mitliefert, müssen Sie entweder ein eigenes Icon in das Paket einbauen oder auf die auf dem System verfügbaren Standardsymbole zurückgreifen. Letzteres fällt wesentlich leichter, weil Sie sich in Ihrer Eigenschaft als Paketbauer nicht auch noch als Designer betätigen müssen.
Ein passendes Symbol finden Sie sicher in /usr/share/icons und dessen Unterordnern. In unserem Fall bietet sich /usr/share/icons/Adwaita/48x48/categories/applications-games.png an. Das Adwaita-Thema wird meist standardmäßig installiert, und wenn nicht, sorgt die Arbeitsumgebung anhand des Namens selbst für passenden Ersatz. Damit das funktioniert, geben Sie den Dateinamen ohne Erweiterung an. Sollten Sie ein eigenes Bildchen einbauen wollen, tragen Sie den vollständigen Pfad zu einer bestimmten Bilddatei ein.
Für die richtige Einordnung sorgt die Angabe der Kategorie. Zulässige Werte dafür finden Sie in den entsprechenden Tabellen des Freedesktop-Projekts [5]. Zu guter Letzt geben Sie in der Datei an, dass das Programm nicht im Terminal starten soll.
Nun müssen Sie die .desktop-Datei nur noch in das Paket einbauen. Sie muss sich dazu im selben Ordner befinden wie die PKGBUILD-Datei. Zunächst speichern Sie sie also unter dem Namen clickosquare.desktop im gewünschten Ordner. Dann fügen Sie die neu hinzugekommene Quelldatei wie in Listing 3 in PKGBUILD ein.
Listing 3
source=("http://downloads.sourceforge.net/project/clickomatic/clickosquare-src/0.0.1/clickosquare-0.0.1.src.tar.bz2"
'clickosquare.desktop')
sha256sums=('b95a102917aa9142d132fc51eb2b6cace43aea55907bcbb3e689a5440199f550'
'10123838e2b6ff3712bd3015f5d764bc371e099bae913157b72b7bba1ae2b571'
Dabei müssen Sie beachten, dass Sie die mit Sha256sum ermittelten Prüfsummen in derselben Reihenfolge wie die Quelldateien angeben, damit Makepkg sie später beim Bauen des Pakets richtig zuordnet. Zuletzt weisen Sie Makepkg nur noch an, wie und mit welchen Zugriffsrechten es die .desktop-Datei installieren soll. Die entsprechende Zeile aus Listing 4 hängen Sie an die bereits vorhandenen Installationsbefehle an. Der Bau läuft nun anstandslos durch, und Clickosquare erscheint nach der Installation des Pakets im Startmenü (Abbildung 1).
Listing 4
install -Dm644 "${srcdir}"/$pkgname.desktop $pkgdir/usr/share/applications/$pkgname.desktop
Bei Appstream-Daten [6] handelt es sich um einen verhältnismäßig neuen Standard, der distributionsübergreifend Paketbeschreibungen für grafische Programme, Schriftenpakete und Ähnliches zur Verfügung stellt. Die Software-Verwaltung von Gnome unterstützt Appstream schon recht lange, aber auch das speziell auf Pacman aufsetzende Gnome-bezogene Pamac [7] kennt das Format (Abbildung 2).

Abbildung 2: Pamac kann bereits Appstream-Daten verarbeiten, muss aber bei Paketen aus dem AUR noch passen.
Die Anzeige funktioniert konzeptbedingt nur bei installierten Paketen oder solchen aus Binärpaketquellen. Das AUR liefert keine entsprechenden Daten, weil dort ja keine vollständigen Pakete lagern, sondern nur Bauanweisungen. Dennoch sollten Sie über eine Appstream-Datei nachdenken. In Listing 5 finden Sie eine passende Minimalkonstruktion, die einen grafischen Software-Manager mit allem Nötigen versorgt. Den Link zur Image-Datei in Zeile 16 haben wir aus Gründen der Lesbarkeit gekappt.
Listing 5
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2017 Mario Blättermann <my@email.com> -->
<component type="desktop">
<id>clickosquare.desktop</id>
<metadata_license>CC0-1.0</metadata_license>
<project_license>BSD</project_license>
<name>Clickosquare</name>
<summary>mind-developing game written in pure C, Gtk+ 2.0 and some OpenGL</summary>
<description>
<p>
Clickosquare is a mind-developing game written in pure C, Gtk+ 2.0 and some OpenGL.
</p>
</description>
<screenshots>
<screenshot type="default">
<image>https://lh3.googleusercontent.com/AI_Yna[...]wWMJbwAjs=w322-h506-no</image>
</screenshot>
</screenshots>
<url type="homepage">https://sourceforge.net/projects/clickomatic/</url>
<update_contact>my@email.com</update_contact>
</component>
Wundern Sie sich aber nicht, wenn Gnome Software oder Pamac nach erfolgter Installation die Appstream-Daten nicht anzeigen: Das funktioniert nur, wenn das Paket aus öffentlichen Software-Beständen installiert wurde, nicht jedoch als Einzelstück lokal.
Was Appdata noch alles kann, samt Beispieldatei und Erläuterungen, finden Sie auf dessen Projektwebseite [8]. Dazu gehören übersetzte Beschreibungen, Schlüsselwörter für die Paketsuche und Ähnliches.
Halb und halb
Der wohl offensichtlichste Unterschied zu beispielsweise DPKG oder RPM ist die fehlende Aufteilung in Laufzeit- und Entwicklungspakete. Einerseits besteht bei einigen wenigen Header-Dateien kaum Anlass dazu, diese in ein separates Paket auszulagern, wie man es von anderen Distributionen von Paketen mit der Erweiterung -dev oder -devel kennt. Andererseits entfällt so beim Selbstkompilieren von Software die Suche nach und Installation von zusätzlichen Paketen.
Aber gelegentlich ist das Zerlegen doch sinnvoll: Wer die Qt-Bibliotheken installiert hat, erhält automatisch vier Einträge im Startmenü: für die Entwicklungsumgebung QtDesigner, für das Dokumentationssystem QtAssistant, für das Hilfswerkzeug QtDbusviewer und für das Übersetzungsprogramm QtLinguist. Bei parallel installiertem Qt4 und Qt5 finden sich sogar gleich acht Menüpunkte, die Sie möglicherweise nie benötigen (Abbildung 3).

Abbildung 3: Das Menü ist mit Einträgen überfrachtet, die womöglich nie einen Klick zu spüren bekommen.
Idealerweise lagert man die entwicklungsbezogenen Werkzeuge in eigene Teilpakete aus. Es empfiehlt sich jedoch, nicht an essenziellen Bestandteilen des Systems herumzuspielen, zumal Sie bei einem Update des Qt-Stacks auch stets für die Aktualisierung Ihrer eigenen Varianten sorgen müssten. Daher nehmen wir zur Veranschaulichung wieder unser Clickosquare und lagern die Dokumentation in Form der README-Datei in ein eigenes Paket aus.
In Listing 6 finden Sie die finale PKGBUILD inklusive der Änderungen zum Splitting. Zuerst erweitern Sie die Namensdeklaration am Anfang des PKGBUILD. Aus pkgname wird pkgbase, und pkgname enthält nun in Klammern und Hochkommas ein Array aus den Namen der gewünschten Teilpakete. Weiter unten legen Sie fest, welche Dateien das System wohin installieren soll. Hinter package_clickosquare() verbleibt in den geschweiften Klammern alles, was bisher dem monolithischen Paket zugeordnet war. Lediglich das README bekommt nun ein eigenes package_clickosquare-doc() sowie eine entsprechende Installationsanweisung.
Listing 6
pkgbase=clickosquare
pkgname=('clickosquare' 'clickosquare-doc')
pkgver=0.0.1
pkgrel=2
arch=('i686' 'x86_64')
pkgdesc="mind-developing game written in pure C, Gtk+ 2.0 and some OpenGL."
url="http://clickomatic.sourceforge.net/"
license=('BSD')
source=("http://downloads.sourceforge.net/project/clickomatic/clickosquare-src/0.0.1/clickosquare-0.0.1.src.tar.bz2"
'clickosquare.desktop'
'clickosquare.appdata.xml')
sha256sums=('b95a102917aa9142d132fc51eb2b6cace43aea55907bcbb3e689a5440199f550'
'd753e289fc980f62dbad087761572b8c51e0bce94f3771a36889ef9734d2dcfb'
'f34b9bd657044df207eba85e82df49e5865b5818380e3aa27753ad7fdfc6df2d')
build() {
cd $srcdir/$pkgname-src
make
}
package_clickosquare() {
pkgdesc="mind-developing game written in pure C, Gtk+ 2.0 and some OpenGL"
depends=('gtk2')
provides=('clickosquare')
cd $srcdir/$pkgname-src
install -Dm755 $pkgname $pkgdir/usr/bin/$pkgname
install -Dm644 "${srcdir}"/$pkgname.desktop $pkgdir/usr/share/applications/$pkgname.desktop
install -Dm644 "${srcdir}"/$pkgname.appdata.xml $pkgdir/usr/share/appdata/$pkgname.appdata.xml
}
package_clickosquare-doc() {
pkgdesc="Documentation for Clickosquare"
depends=('clickosquare')
provides=('clickosquare-doc')
cd $srcdir/clickosquare-src
install -Dm644 README $pkgdir/usr/share/licenses/$pkgname/README
}
Splitting mit Pacman bietet nicht alle Möglichkeiten, die Sie vielleicht schon von DPKG oder RPM kennen, aber es erfüllt seinen Zweck. Die Dokumentation dazu fällt sehr dürftig aus, Splitting kommt lediglich an einigen wenigen Stellen im Web zur Sprache. Ein sehr aufschlussreiches praktisches Beispiel liefert die PKGBUILD von Mesa [9].
Fazit
Paketbau ist kein Hexenwerk, mit Pacman schon gar nicht. Wenn Ihnen DPKG schon immer zu kryptisch und RPM zu restriktiv war, dann könnten Sie sich sicher mit dem AUR-Paketbau anfreunden. Vermeiden Sie es aber, der Einfachheit von Pacman zu erliegen: Jeder Benutzer hat ein ordentliches Paket verdient, das er guten Gewissens aus dem PKGBUILD bauen und komfortabel installieren kann.
Glossar
-
AUR
-
Das Arch Linux User Repository [4] darf jeder Benutzer mit Bauanweisungen für Pakete befüllen. Es beinhaltet nicht nur Software, die Arch Linux offiziell nicht bereitstellt, sondern auch Abwandlungen bestehender Pakete, zum Beispiel aus Git-Checkouts. Die Qualität der Pakete ist breit gefächert, von hervorragend und gut betreut bis liederlich zusammengeflickt und verwaist. Sie sollten bei der Installation aus dem AUR wissen, was Sie tun, und auf jeden Fall vorher einen Blick auf die dort lagernden Quelldateien werfen.
Infos
-
Antergos: https://antergos.com
-
Manjaro: https://manjaro.org
-
Freedesktop-Kategorien: https://standards.freedesktop.org/menu-spec/latest/apa.html
-
Appstream: https://www.freedesktop.org/wiki/Distributions/AppStream/
-
Appstream-Projekt: https://www.freedesktop.org/software/appstream/docs/chap-Quickstart.html#sect-Quickstart-DesktopApps
-
Mesa-
PKGBUILD: https://git.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/mesa






