Home / LinuxUser / 2013 / 09 / Pakete für Arch Linux im Eigenbau

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.

Leichtbau

Pakete für Arch Linux im Eigenbau

Tagesaktuell

Es gibt Gründe, Pakete aus den offiziellen Repositories leicht abgewandelt auf dem eigenen Rechner neu zu übersetzen. So richtig stellt das Arch Build System seine Leistungsfähigkeit bei Paketen unter Beweis, deren Quellcode aus einem Versionsmanagementsystem stammt. Hier lohnt es sich, den Compiler öfters, vielleicht sogar täglich anzuwerfen. Solche Pakete finden sich naturgemäß nicht in den stabilen Repositorys, aber im AUR stehen viele bereit.

Pacman 4.1 ersetzt dabei das frühere, etwas undurchsichtige Verfahren, bei dem makepkg bei allen Paketen, deren Name auf -git, -svn, -hg, -darcs oder -bzr endete, das aktuelle Datum als Versionsnummer verwendet hat.

Bei diesem neuen Verfahren ist es nicht einmal mehr nötig, die Befehle für den Checkout oder Update des Quellcodes in das Build-Skript zu schreiben. Vielmehr akzeptiert makepkg nun direkt im Array source URLs, die auf ein Repository deuten und automatisiert den Checkout ähnlich dem Auspacken von Archiven mit Quellcode.

Listing 2

pkgname=audacious-git
pkgver=0
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' 'hicolor-icon-theme' 'desktop-file-utils')
makedepends=('git')
optdepends=('unzip: zipped skins support')
provides=('audacious')
conflicts=('audacious' 'audacious-player-hg')
source=('git://github.com/audacious-media-player/audacious.git')
install=$pkgname.install
sha256sums=('SKIP')
pkgver() {
  cd "$srcdir/audacious"
  git describe --always | sed 's|-|.|g'
}
build() {
    cd "$srcdir/audacious"
    autoreconf
    ./configure --prefix=/usr --with-buildstamp="$(date +%x)"
    make
}
package() {
    cd "$srcdir/audacious"
    make DESTDIR="${pkgdir}" install
    install -Dm644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
}

Version für Version

Listing 2 zeigt als Beispiel das PKGBUILD für eine Git-Version von Audacious. Die offensichtlichste Änderung im Vergleich zur auf einem statischen Tar-Archiv basierenden Fassung (Listing 1) besteht in der Git-URL in source (Zeile 14). Anhand des Protokolls erkennt makepkg das Versionskontrollsystem und sorgt dafür, dass der Quellcode vor dem Aufruf von build() in der neuesten Version vorliegt.

Nach wie vor darf source mehrere Quellen bündeln und dabei statische und versionierte Elemente mischen. Da Checksummen bei letzteren keine Sinn ergeben, lautet der zugehörige Eintrag sha256sums schlicht SKIP. Falls Sie statt des Git-eigenen Protokolls lieber Git über HTTP verwenden möchten, beginnt die URL mit git+http.

Hinzugekommen ist außerdem die Funktion pkgver() (Zeile 18). Sie gibt im vorliegenden Fall den Hash des aktuellen Checkins zurück [2]. makepkg verwendet den Rückgabewert als Paketversion. Das erlaubt es, jedes neu übersetzte Paket einzuordnen. Aus diesem Grund darf die Variable pkgver mit einem beliebigen Wert starten.

Über makepkg --holdver stoßen Sie ein Neukompilieren ohne Update des Quellcodes an. Dies ist aber nur beim Testen während des Schreiben von PKGBUILD-Dateien erforderlich, da ein Neubau des Pakets andere, bereits erzeugte Versionen nicht überschreibt. Solange Sie diese nicht löschen, bleibt daher immer die Option auf ein Downgrade zu einer Versionen aus einem früheren Aufruf.

Eine kleine Änderung ergibt sich beim Wechsel in das Quellcode-Verzeichnis am Anfang der drei Funktionen: Während makepkg den Ordner explizit nach dem Paketnamen und der Versionsnummer benennt, wenn es ein Tar auspackt, ergibt sich der Verzeichnisnahme hier beim Checkout, den Namen audacious gibt das Versionsrepository vor.

Vor dem Aufruf von Configure in build() muss autoreconf das Skript erst noch erzeugen, da es nicht üblich ist, es ins Rrepository einzuchecken. Darüber hinaus passen Sie das Array conflicts an, das die Deinstallation des offiziellen Audacious-Pakets erzwingt. Es enthält in Konflikt stehende Dateien.

Tip a friend    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 139 Punkte (3 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 05/2014

Aktuelle Ausgabe kaufen:

Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,95 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 60,60) können Sie im Medialinx-Shop bestellen.

Tipp der Woche

Bilder vergleichen mit diffimg
Bilder vergleichen mit diffimg
Tim Schürmann, 01.04.2014 12:40, 1 Kommentare

Das kleine Werkzeug diffimg kann zwei (scheinbar) identische Bilder miteinander vergleichen und die Unterschiede optisch hervorheben. Damit lassen sich nicht nur Rätsel a la „Orignial und Fäls...

Aktuelle Fragen

programm suche
Hans-Joachim Köpke, 13.04.2014 10:43, 8 Antworten
suche noch programme die zu windows gibt, die auch unter linux laufen bzw sich ähneln sozusagen a...
Funknetz (Web-Stick)
Hans-Joachim Köpke, 04.04.2014 07:31, 2 Antworten
Bei Windows7 brauche ich den Stick nur ins USB-Fach schieben dann erkennt Windows7 Automatisch, a...
Ubuntu 13.10 überschreibt immer Windows 8 Bootmanager
Thomas Weiss, 15.03.2014 19:20, 8 Antworten
Hallo Leute, ich hoffe das ich richtig bin. Ich habe einen Dell Insipron 660 Ich möchte gerne Ub...
USB-PTP-Class Kamera wird nicht erkannt (Windows-only)
Wimpy *, 14.03.2014 13:04, 15 Antworten
ich habe meiner Frau eine Digitalkamera, AGFA Optima 103, gekauft und wir sind sehr zufrieden dam...
Treiber
Michael Kristahn, 12.03.2014 08:28, 5 Antworten
Habe mir ein Scanner gebraucht gekauft von Canon CanoScan LiDE 70 kein Treiber wie bekomme ich de...