Cover Image

Ich arbeite seit einiger Zeit mit Arch Linux und bin damit super zufrieden. Arch kommt mit einem Paketsystem, welches aus verschiedenen Repositories besteht.

Einen guten Überblick erhaltet ihr auf der folgenden Seite:

https://wiki.archlinux.org/index.php/Official_repositories

In diesem Artikel geht es um Pakete die man im sogenannten AUR (Arch User Repository) veröffentlichen kann. Man kann dort keine Binär-Pakete veröffentlichen. Es wird immer Quellcode veröffentlicht, der dann über ein Build-Script zur Anwendung gebaut wird.

Benutzer können für ein Paket stimmen. Sind genügend Stimmen zusammen, dann kann das Paket in das “Community” Repository überführt werden, welches dann auch bereits erstellte Anwendungen beinhalten darf. Das ist sowas wie ein Trusted-Network.

Registrierung im AUR

Um Pakete im AUR zu veröffentlichen, benötigt man einen Zugang. Dazu registriert man sich unter https://aur.archlinux.org/register/

Nach der erfolgreichen Registrierung hinterlegt ihr im Benutzerkonto euren Public-Key der später in Zusammenhang mit GIT verwendet wird.

SSH Public Key

Wir bauen ein Paket

Als erstes kopiert man das Paket Gerüst. Das befindet sich bei jedem Arch Linux bereits auf dem eigenen System. Vorher sollte man sich für sein neues Paket ein Verzeichnis anlegen und im Terminal seiner wahl dort per “cd” hinwechseln. Ja, es geht hier alles über das Terminal. Falls du einen Worflow zum “klicken” suchst…. falscher Artikel.

cp /usr/share/pacman/PKGBUILD.proto PKGBUILD

Die Datei PKGBUILD selbst ist so etwas wie ein Bash-Script mit Metadaten und Funktionen. Die Meta-Daten wie z.B. der Paketname, der Author oder die Lizenz werden im oberen Teil als Variablen definiert. Ich denke das ist relativ selbsterklärend.

# This is an example PKGBUILD file. Use this as a start to creating your own,
# and remove these comments. For more information, see 'man PKGBUILD'.
# NOTE: Please fill out the license field for your package! If it is unknown,
# then please put 'unknown'.

# Maintainer: Your Name <youremail@domain.com>
pkgname=NAME
pkgver=VERSION
pkgrel=1
epoch=
pkgdesc=""
arch=()
url=""
license=('GPL')
groups=()
depends=()
makedepends=()
checkdepends=()
optdepends=()
provides=()
conflicts=()
replaces=()
backup=()
options=()
install=
changelog=
source=("$pkgname-$pkgver.tar.gz"
        "$pkgname-$pkgver.patch")
noextract=()
md5sums=()
validpgpkeys=()

Im unteren Bereich habt ihr verschiedene HOOK Funktionen die an verschiedenen Stellen im Build-Vorgang bzw. bei der Installation aufgerufen werden.

prepare() {
	cd "$pkgname-$pkgver"
	patch -p1 -i "$srcdir/$pkgname-$pkgver.patch"
}

build() {
	cd "$pkgname-$pkgver"
	./configure --prefix=/usr
	make
}

check() {
	cd "$pkgname-$pkgver"
	make -k check
}

package() {
	cd "$pkgname-$pkgver"
	make DESTDIR="$pkgdir/" install
}

Wenn euer Paket Fremddaten wie z.B. ein heruntergeladenen Tarball enthält, kann die URL der Datei in der Variable “src” eintragen. Zur Sicherheit muss immer eine Prüfsumme der heruntergeladenen Datei hinterlegt werden.

Die Prüfsumme geniert man dann wie folgt:

updpkgsums

Ist alles soweit fertig im Paket, dann sollte man zum Testen das Paket einmal bauen lassen.

makepkg

Fügt man die Option -i dahinter, wird auch direkt das Paket installiert.

Paket veröffentlichen

git init git add -a -m “Initial commit” git remote add aur ssh://aur@aur.archlinux.org/.git

Achtung! Vor dem ersten Push muss zwingend die Datei .SRCINFO erstellt werden.

Es muss eine .SRCINFO Datei enthalten sein.

makepkg –printsrcinfo > .SRCINFO

Nach einem git commit ist man hier fertig. Jetzt kann man seine Daten an das AUR senden. Wichtig ist, dass man im ersten Commit alles auf einmal sendet.

git push aur master

Auf dem AUR Server laufen nun ein paar automatische Prüfungen ab. Passt alles, sind wir nun fertig und können unser neues Paket im AUR finden.

Falls nicht, bekommt ihr eine passende Fehlermeldung.

Troubleshooting

Falls aus versehen ohne .SRCINFO gesendet wurde, muss ein Rebase durchgeführt werden da der erste Push per Git-Hook auf der AUR Seite validiert wird.

git rebase -i –root