Von Grund auf
Einfach Handhabung und volle Flexibilität in einer Distribution vereint
Pakete verändern
Angenommen, Sie starten den Textbrowser Links im Grafikmodus und der zuständige Aufruf links -g führt zu Fehlermeldung: Graphics not enabled when compiling. In diesem Fall bauen Sie einfach das Paket mit der entsprechenden Unterstützung neu. Sie erzeugen das Verzeichnis /var/abs/local/links, wechseln nach dort und kopieren aus dem Build Tree die Datei /var/abs/network/links/PKGBUILD.
Wenn Sie sich diese Datei ansehen, finden Sie in der Funktion build() beim Aufruf von configure die Parameter --disable-graphics --without-x. Wenn Sie die Zeile in --enable-graphics --with-x abändern, lädt makepkg -c das Quelltextpaket herunter, erzeugt ein binäres Paket mit der Endung .pkg.tar.gz, das Sie mit pacman -U links-2.1pre17-1.pkg.tar.gz als root installieren. Der Schalter -c erledigt die Aufräumarbeiten nach der Installation. Jetzt funktioniert links -g, wie Abbildung 1 zeigt.
Pakete erzeugen
Wer lieber mit schlanken Fenstermanagern wie Windowmaker, Fluxbox, Blackbox oder ähnlichen arbeitet, lernt sicher schnell die sogenannten Dockapps schätzen (bei Dockapps.org [6] finden Sie diese gleich serienweise). Die kleine Progrämmchen heften sich am Desktop-Rand an und stehen dann immer zur Verfügung.
Ein schönes Beispiel ist das Programm Mount.app, mit dessen Hilfe Sie grafisch das Mounten und Unmounten von Partitionen bewerkstelligen, sofern diese in /etc/fstab eingetragen sind. Den Quelltext finden Sie unter http://mountapp.sourceforge.net/mountapp-3.0.tar.gz
Mit dieser Information allein kommen Sie schon weiter. Sie legen also – wieder nicht als root – ein Verzeichnis /var/abs/local/mountapp an, wechseln in dieses hinein und kopieren den Prototyp /var/abs/PKGBUILD.proto nach PKGBUILD. Diese Datei sieht aus wie in Listing 1.
Listing 1
PKGBUILD.proto
pkgname=NAME
pkgver=VERSION
pkgrel=1
pkgdesc=""
url=""
license=""
depends=()
makedepends=()
conflicts=()
replaces=()
backup=()
install=
source=($pkgname-$pkgver.tar.gz)
md5sums=()
build() {
cd $startdir/src/$pkgname-$pkgver
./configure --prefix=/usr
make || return 1
make DESTDIR=$startdir/pkg install
}
Hier könnten Sie pkgname=mountapp, pkgver=3.0, url="http://mountapp.sourceforge.net" und source=($url/$pkgname-$pkgversion.tar.gz) sofort ausfüllen. Mehr brauchen Sie zunächst auch nicht.
Der Aufruf von Makepkg in diesem Verzeichnis würde im vorliegenden Fall funktionieren, ebenso wie bei den meisten mit dem klassischen Dreischritt erzeugten Pakete. Wir wollen aber systematisch vorgehen, kommentieren die gesamte build() Funktion aus und erzeugen mit export STARTDIR=$(pwd) eine externe Kopie der internen startdir Variablen.
Makepkg erzeugt jetzt wegen der fehlenden Funktion build() einen Fehler, trotzdem lädt die Software das Quellpaket herunter und entpackt es an den richtigen Ort. So erhalten Sie eine Möglichkeit sich die Dateien README und INSTALL anzusehen.
Die Idee ist nun, jeden Befehl der Funktion build() von Hand auszutesten und – wenn nötig – abzuändern. Am kritischsten ist dabei der letzte Befehl. Beachten Sie, dass die Variable DESTDIR den Wert des Root-Verzeichnisses übrnimmt. Daher speichert Makepkg die Dateien bei der Installation zunächst unterhalb von DESTDIR ab.
Es sind also eventuell diverse Verzeichnisse zu erstellen, die der Programmautor nicht vorgesehen hat. Manchmal fehlt das Configure-Skript komplett. Dann können Sie das Makefile entweder patchen oder mit Sed ändern. Und schließlich hat das Quellverzeichnis unter $startdir/src/ gelegentlich einen anderen Namen, was aber leicht zu korrigieren wäre.
Im vorliegenden Fall funktioniert jeder einzelne Befehl so wie er soll, was wir nach dem Studium der README-Datei auch erwartet haben. Wir können also zu $STARTDIR zurückspringen, die build() Funktion entkommentieren und unser Paket mit makepkg bauen.
Allerdings sollten wir danach noch ein paar Verbesserungen vornehmen, insbesondere die Felder md5sums und depends ausfüllen. Das scheint schwierig zu sein, es gibt aber ein einfach zu benutzendes Werkzeug, das Ihnen dabei hilft: Namcap. Es vollführt die Rolle rückwärts von Pacman. Das Resultat von namcap PKGBUILD mountapp-3.0-1.pkg.tar.gz sehen Sie in Listing 2.
Listing 2
Namcap-Ausgabe
PKGBUILD (mountapp) E: Missing md5sums PKGBUILD (mountapp) W: Missing Maintainer tag PKGBUILD (mountapp) W: Missing CVS Id tag mountapp E: Dependency detected and not included (libtiff) from files ['usr/bin/mount.conf', 'usr/bin/mount.app'] mountapp E: Dependency detected and not included (gtk) from files ['usr/bin/mount.conf'] mountapp E: Dependency detected and not included (xorg) from files ['usr/bin/mount.conf', 'usr/bin/mount.app']
Zunächst hängen Sie mit makepkg -g >> PKGBUILD die MD5-Summe ans Ende von PKGBUILD an, von wo Sie diese nur noch umzukopieren brauchen. Anschliessend tragen Sie die Abhängigkeiten nach, also depends=(libtiff gtk xorg). Erneutes Bauen – diesmal mit makepkg -fc um aufzuräumen – führt zu einem wesentlich verbesserten Paket, das auch auf anderen Rechnern brauchbar ist.
Hätten Sie x-server statt xorg eingetragen, wäre das Paket auch unter XFree86-Systemen installierbar. Die eigentliche Installation besorgt jetzt pacman -U mountapp-3.0-1.pkg.tar.gz. Ein Aufruf des neu installierten Progrämmchens mount.app zeigt Abbildung 2.



