AA_leaf_atroszko_sxc_739630.jpg

© Atroszko, sxc.hu

Leichtbau

Pakete für Arch Linux im Eigenbau

12.08.2013
Mit dem Build-System von Arch Linux haben Sie im Handumdrehen aktuelle Software nahtlos ins System integriert. Dazu reicht ein wenig Grundwissen über die Shell und ein Editor.

Serie: Pakete im Eigenbau

RPM-Pakete im Eigenbau LU 07/2013, S. 88 http://www.linux-community.de/28508
Debian-Pakete im Eigenbau LU 08/2013, S. 88 http://www.linux-community.de/28514
Arch-Pakete im Eigenbau LU 09/2013, S. XX http://www.linux-community.de/28515

Das einfach zu bedienende System zum Bauen von Paketen (Abbildung 1) gehört zu den Stärken von Arch Linux, die viele Poweruser für die leichtgewichtige Distribution einnimmt: Pakete, die Sie über den Paketmanager Pacman administrieren, entstehen auf der Basis eines einzigen Bash-Skripts mit dem Namen PKGBUILD, dessen Aufbau sich Anwendern mit Shell-Grundwissen schnell erschließt. Arch Linux veröffentlicht diese Dateien für alle offiziellen Pakete über das Build-System: Das Kommandos abs spielt sie in der aktuellen Version nach /var/abs ein.

Abbildung 1: Arch Linux stellt den Großteil der Software als Binärpakete bereit, bringt aber trotzdem ein optimiertes Build System mit, das die offiziellen Pakete – und nicht nur diese – mühelos auf dem eigenen Rechner kompiliert.

Der Paketmanager von Arch Linux installiert ohne Umstände lokal vorliegende Pakete. Es fällt jedoch nicht schwer, ein eigenes Repository zu erzeugen. Bei Bedarf ließe sich dies über einen HTTP- oder FTP-Server im Netz verteilen, sodass mehrere Systeme es bei jedem Upgrade der Rolling-Release-Distribution mit einbeziehen. Zum Erzeugen des Repositories reicht der Aufruf repo-add Reponame.db.tar.gz Paketdatei im Verzeichnis, in dem die Paketdateien liegen (Abbildung 2).

Abbildung 2: Um den Paketmanager Pacman herum haben die Entwickler von Arch Linux ein Ökosystem an Tools gestrickt, mit dem Sie bei Bedarf offizielle Pakete abgewandelt kompilieren oder eigene Pakete und Repositories erzeugen.

Wie bei anderen Distributionen verhindert das Paketmanagementsystem, dass neue Pakete Dateien aus bereits installierten überschreiben und schützen damit das System vor Schaden. Auf das unkontrollierte und oft irreversible Einspielen über make install brauchen Sie sich nicht einzulassen; erzeugen Sie besser gleich ein Paket.

Bauplan

Um ein offizielles Paket aus den Arch-Repositorys selbst zu kompilieren, genügt es, den Ordner /var/abs/Repository/Paketname> zu kopieren und aus diesem Verzeichnis heraus das im Paket pacman enthaltene Tool makepkg aufzurufen. Die Option -s gestattet es makepkg, fehlende Abhängigkeiten nachzuziehen, mit -i installiert die Software das Paket bei Erfolg.

Das selbe Vorgehen kommt auch bei nicht offiziell unterstützen Paketen aus dem Arch User Repository (AUR) (Abbildung 3) zum Einsatz, bis auf den Unterschied, dass die zum Paketbau nötigen Dateien hier zunächst als Tar-Archiv vorliegen.

Abbildung 3: Dank des Community-basierten Arch User Repository (AUR) stehen für Arch Linux ähnlich viele Programme bereit wie unter Debian. Beim Übersetzen der Software hilft das Build-System um makepkg.

Außer dem zentralen Skript liegen im Verzeichnis unter /var/abs oder im AUR manchmal noch Patch-Dateien, Desktop-Dateien für Menüeinträge oder andere Kleinigkeiten, die im ursprünglichen Quellcode des Programms fehlen. Den umfangreichen Quellcode selbst lädt dagegen erst der Aufruf von makepkg herunter.

Die Grundstruktur der Datei PKGBUILD erschließt sich schnell: Bash-Variablen definieren den Namen des Pakets und dessen Version sowie Abhängigkeiten, die Upstream-URL der Quelldateien sowie einige weitere Daten. In den Funktionen build() und package() stehen die Befehle, die Sie auf der Konsole zum Kompilieren und Installieren eintippen würden. Die Befehle, die Root-Rechte brauchen, gehören nach package(), alle anderen nach build(), das vor package() läuft. Weitere Elemente erläutert Tabelle "PKGBUILD im Detail".

<C>PKGBUILD<C> im Detail

Variable Bedeutung
pkgname Paketname
pkgver Version der verpackten Software
pkgrel Signalisiert neue Version der Bauvorschrift bei gleicher Version der Software
pkgdesc Kurzbeschreibung für die verpackte Software
arch Rechnerarchitektur, Standard ('i686' 'x86_64'), eventuell nur eine der beiden
url Upstream-URL
license Lizenz
groups thematische Paketgruppe (PKGBUILD eines ähnlichen Programms konsultieren)
depends Abhängigkeiten, Beispiel: ('gtk3' 'dbus-glib' 'libguess'), Versionen: 'paketname>=2.5.1'
optdepends optionale Abhängigkeiten, Array mit Einträgen der Form cups: printing support
makedepends Array mit nur zum Kompilieren benötigten Abhängigkeiten
provides Abhängigkeiten, die das Paket bedient, Beispiel: ('qt4=4.8.4')
conflicts Pakete, die mit diesem Paket kollidieren
replaces Namen älterer Pakete, die dieses Paket ersetzt
options Einstellungen aus /etc/makepkg.conf für dieses Paket überschreiben
install Install-Skript (vergleiche Listing 2)
changelog ChangeLog-Datei (vergleiche /usr/share/pacman/ChangeLog.proto)
source URLs der zum Kompilieren benötigten Dateien, bekannte Archivtypen packt die Software automatisch aus, Versionrepositories (URL: git://Pfad oder git+http://Pfad, analog hg für Mercurial, bzr für Bazaar und svn für Subversion)
md5sums/sha1sums/sha256sums/sha384sums/sha512sums Checksummen für jeden Eintrag in source, lautet bei Sourcen aus Versionrepositories SKIP, generierbar mit makepkg -g
noextract Archive aus source, die Makepkg nicht auspacken soll
Funktionen
prepare() optional, ab Pacman 4.1, Quellcode vorbereiten, makepkg -e überspringt den Schritt
build() ./configure und make oder entsprechende Befehle
check() optional, zum Beispiel make tests, wenn für die Software definiert
package() make install oder Entsprechung, läuft unter Fakeroot (schreibt Dateien mit Eigentümer root, aber aus Sicherheitsgründen keine echten administrativen Schreibrechte)
version() optional, für Git-, SVN-Pakete, Rückgabewert überschreibt pkgver

Alles weitere, nämlich das Herunterladen und Entpacken des Quellcodes, das Prüfen der Abhängigkeiten sowie das Verpacken in ein Arch-Programmpaket übernimmt Makepkg, ein etwa 3000 Zeilen langes Shell-Skript. Sind die beiden Funktionen fehlerfrei durchgelaufen, landen alle Dateien, die make install nach ${pkgdir} geschaufelt hat, im Paket.

Listing 1

pkgname=audacious
pkgver=3.3.4
pkgrel=1
pkgdesc='Lightweight, advanced audio player focused on audio quality'
url='http://audacious-media-player.org/'
license=('custom:BSD')
arch=('i686' 'x86_64')
depends=('gtk3' 'dbus-glib' 'libguess' 'libsm' 'audacious-plugins'
         'hicolor-icon-theme' 'desktop-file-utils')
optdepends=('unzip: zipped skins support')
source=("http://distfiles.audacious-media-player.org/${pkgname}-${pkgver}.tar.bz2")
sha1sums=('d1050fb88a59b46c0c9bbb1af0e7efc2b02f2b4d')
provides=('audacious-player')
replaces=('audacious-player')
install=install
build() {
     cd "${srcdir}/${pkgname}-${pkgver}"
     ./configure --prefix=/usr --with-buildstamp='Arch Linux'
     make
}
package() {
     cd "${srcdir}/${pkgname}-${pkgver}"
     make DESTDIR="${pkgdir}" install
     install -Dm644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
}

Datenerhebung

Listing 1 zeigt die Datei PKGBUILD für das offizielle Paket des Audio-Players Audacious, das sich nach Installation von abs und dem Abgleich mit einem Aufruf von abs unter /var/abs/extra/audacious findet.

Die Zeilen 1 bis 16 enthalten die Definitionen für elementare Daten, die das spätere Softwarepaket enthält: pkgname, pkgver und pkgdesc nennen Paketnamen, Programmversion und eine Beschreibung, die in Bezug auf die Länge 80 Zeichen nicht überschreiten sollte.

Die Variablen license und url liefern für den Anwender wichtige Informationen, haben aber keine technische Bedeutung beim Paketbau. Das Hochzählen der pkgrel (Paket-Release-Version) dagegen erzeugt Pakete, die der Paketmanager als Updates erkennt, obwohl sich die enthaltene Programmversion nicht geändert hat.

Das Bash-Array depends listet die Abhängigkeiten des Pakets auf. Leerzeichen trennen die einzelnen Einträge, die in einfachen Anführungszeichen stehen. Sie dürfen Zeilenumbrüche und Tabs zwischen den Elementen zum Formatieren verwenden, das stört die Bash nicht. Bei Leerzeichen vor oder nach dem Gleichheitszeichen versteht sie allerdings keinen Spaß.

Das Array makedepends enthält die Abhängigkeiten, die nur zum Kompilieren erforderlich sind, nicht aber zur Laufzeit des Programms. Bei Audacious gibt es keine solchen speziellen Abhängigkeiten, da Arch Linux keine gesonderten Devel-Pakete kennt. Der Eintrag optdepends listet schließlich noch optionale Abhängigkeiten, die zusätzliche Funktionalität bereit stellen. Die Einträge folgen der Form Paketname: Funktionserweiterung.

Die Variable replaces teilt Pacman mit, dass das vorliegende Paket ein älteres mit anderem Namen ersetzt. Das Feld provides kommt dagegen zum Einsatz, wenn mehrere Pakete einen funktional äquivalenten Inhalt bereit stellen. Eine selbstkompilierte Version von Qt4 hieße eventuell qt4-with-xxx. Trotzdem zöge der Paketmanager es als erfüllte Abhängigkeit für Qt4 betracht, wenn PKGBUILD den Eintrag provides=('qt4') enthielte.

In die Kategorie "Paketabhängigkeiten" gehört noch das Array conflicts=('...' ['...']), das das gleichzeitige Installieren bestimmter Pakete verbietet. Im Audacious-Beispiel gibt es keine solchen Kandidaten.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 7 Heftseiten

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

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Einfach Handhabung und volle Flexibilität in einer Distribution vereint
    Die Distribution Arch Linux verbindet Vorteile aus anderen Konzepten zu einem Gesamtsystem. Dieser Artikel zeigt Ihnen, wie Sie das System von der Heft-CD richtig installieren und danach effektiv nutzen.
  • Volle Kontrolle
    Arch Linux gibt Ihnen mehr als nur die Möglichkeit, unter die Motorhaube des Systems zu schauen: Sie sitzen Sie selbst am Steuer und fahren ohne Autopilot.
  • Mein Linux: Arch Linux
    Arch Linux ist auf Basis von LFS (Linux From Scratch) komplett neu entwickelt worden. Die Distribution orientiert sich am Aufbau von Slackware, der Paketverwaltung von Debian, dem Build-System von Gentoo und an BSD.
  • Die Arch-Derivate Antergos und Manjaro in der Praxis
    Arch Linux will eine einfache, anfängertaugliche Linux-Distribution sein. Die Derivate Manjaro und Antergos legen gar noch eine Scheibe drauf.
  • Guten Appetit
    Als Rolling-Release-Distribution steht Arch Linux vor der Herausforderung, täglich neue Anwendungen und Updates verwalten zu müssen. Der Arch-Paketmanager Pacman stemmt die Arbeit ohne Murren und Knurren. Den offiziellen Paketquellen steht das Arch User Repository zur Seite.
Kommentare

Infos zur Publikation

LU 09/2015: Paketverwaltung

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, 2 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

Scanner EPSON Perfection V 300 photo und VueScan
Roland Welcker, 19.08.2015 09:04, 1 Antworten
Verehrte Linux-Freunde, ich habe VueScan in /usr/local/src/vuex_3295/VueScan installiert, dazu d...
Empfehlung gesucht Welche Dist als Wirt für VM ?
Roland Fischer, 31.07.2015 20:53, 2 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, 3 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, 9 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...