PKGBUILD(5) | Pacman-Handbuch | PKGBUILD(5) |
BEZEICHNUNG
PKGBUILD - Beschreibungsdatei für den Bau von Paketen
ÜBERSICHT
PKGBUILD
BESCHREIBUNG
Dieses Handbuch beschreibt die allgemeinen Regeln zu den PKGBUILDs. Sobald ein PKGBUILD geschrieben ist, wird das eigentliche Paket mittels »makepkg« gebaut und mit Pacman installiert.
Hinweis
Einen beispielhaften PKGBUILD für Referenzzwecke finden Sie in /usr/share/pacman zusammen mit weiteren Beispieldateien, wie einem Installationsskript. Sie können die dort verfügbare Datei PKGBUILD.proto in ein neues Paketbauverzeichnis kopieren und dort nach Ihren Wünschen anpassen.
OPTIONEN UND ANWEISUNGEN
Nachfolgend finden Sie eine Liste der Standardoptionen und -anweisungen, die in einem PKGBUILD verwendbar sind. Diese werden alle durch Makepkg verstanden und interpretiert. Die meisten davon werden direkt in das erstellte Paket übertragen. Die zwingend erforderlichen Felder für einen minimal funktionalen PKGBUILD sind pkgname, pkgver, pkgrel und arch.
Wenn Sie benutzerdefinierte Variablen erstellen wollen, um diese im Bauprozess zu verwenden, wird empfohlen, deren Namen einen _ (Unterstrich) voranzustellen. Dadurch werden mögliche Namenskonflikte mit den internen Makepkg-Variablen vermieden. Um beispielsweise die Basisversion des Kernels in einer Variable zu speichern, könnten Sie etwas in der Form $_basekernver verwenden.
pkgname (Feld)
pkgver
Die Variable »pkgver« kann automatisch aktualisiert werden, indem Sie eine pkgver()-Funktion im PKGBUILD bereitstellen, welche die neue Paketversion ausgibt. Diese Funktion wird nach dem Herunterladen und Entpacken der Quellen und nachdem die prepare()-Funktion aufgerufen wurde (falls vorhanden) ausgeführt, so dass deren Dateien zur Ermittlung der neuen Paketversion (pkgver) verwendet werden können. Dies ist insbesondere nützlich, wenn Sie Quellen aus Versionsverwaltungssystemen verwenden (siehe unten).
pkgrel
epoch
pkgdesc
url
license (Feld)
install
changelog
source (Feld)
Zusätzliche architekturspezifische Quellen können Sie hinzufügen, indem Sie ihnen einen Unterstrich und den Architekturnamen anhängen, zum Beispiel source_x86_64=(). Ein korrespondierendes Integritätsfeld mit Prüfsummen muss vorhanden sein, zum Beispiel cksums_x86_64=().
Es ist außerdem möglich, den Namen der heruntergeladenen Datei zu ändern, was insbesondere bei seltsamen URLs und für den Umgang mit mehreren Quelldateien gleichen Namens nützlich ist. Die Syntax ist: source=('Dateiname::URL').
Makepkg unterstützt auch den Bau von Paketen für Entwicklerversionen mittels Herunterladen der Quellen aus Versionsverwaltungssystemen (VCS). Weitere Informationen finden Sie im nachfolgenden Abschnitt »Quellen aus Versionsverwaltungssystemen verwenden«.
Dateien im »source«-Feld mit den Endungen .sig, .sign oder .asc werden von Makepkg als PGP-Signaturen erkannt und automatisch zur Überprüfung der Integrität der korrespondierenden Quelldatei verwendet.
validpgpkeys (Feld)
Es werden nur vollständige Fingerabdrücke akzeptiert. Diese müssen in Großschreibung vorliegen und dürfen keine Leerräume enthalten.
noextract (Feld)
cksums (Feld)
md5sums, sha1sums, sha224sums, sha256sums, sha384sums, sha512sums, b2sums (Felder)
groups (Feld)
arch (Feld)
backup (Feld)
depends (Feld)
Falls der Abhängigkeitsname auf eine Bibliothek hindeutet (endet mit .so), versucht Makepkg ein Programm zu finden, das von der Bibliothek im gebauten Paket abhängt und hängt die vom Programm benötigte Version an. Wenn Sie die Version selbst anhängen, wird dadurch die automatische Erkennung übersprungen.
Zusätzliche architekturspezifische Abhängigkeiten können Sie hinzufügen, indem Sie ihnen einen Unterstrich und den Architekturnamen anhängen, zum Beispiel depends_x86_64=().
makedepends (Feld)
Weitere archtekturabhängige Bau-Abhängigkeiten können Sie angeben, indem Sie einen Unterstrich und den Namen der Architektur anhängen, zum Beispiel makedepends_x86_64=().
checkdepends (Feld)
Zusätzliche architekturspezifische »checkdepends«-Abhängigkeiten können Sie hinzufügen, indem Sie ihnen einen Unterstrich und den Architekturnamen anhängen, zum Beispiel checkdepends_x86_64=().
optdepends (Feld)
optdepends=('python: for library bindings')
Zusätzliche architekturspezifische »optdepends«-Abhängigkeiten können Sie hinzufügen, indem Sie ihnen einen Unterstrich und den Architekturnamen anhängen, zum Beispiel optdepends_x86_64=().
conflicts (Feld)
Zusätzliche architekturspezifische Konflikte können Sie hinzufügen, indem Sie ihnen einen Unterstrich und den Architekturnamen anhängen, zum Beispiel conflicts_x86_64=().
provides (Feld)
Die Versionierung der virtuellen Bereitstellung ist im Format Name=Version möglich. Beispielsweise kann »dcron« außerdem cron=2.0 bereitstellen, um die Abhängigkeit anderer Pakete zu cron>=2.0 zu erfüllen. Bereitstellungen, welche die Operatoren > und < enthalten, sind unzulässig, weil nur spezifische Versionen eines Pakets bereitgestellt werden.
Falls der Name einer Bereitstellung eine Bibliothek zu sein scheint (endet auf .so), versucht Makepkg die Bibliothek im Paket zu finden und die korrekte Version anzuhängen. Wenn Sie die Version selbst anhängen, schaltet dies die automatische Erkennung aus.
Zusätzliche architekturspezifische Bereitstellungen können Sie hinzufügen, indem Sie ihnen einen Unterstrich und den Architekturnamen anhängen, zum Beispiel provides_x86_64=().
replaces (Feld)
Eine Systemaktualisierung ist derzeit der einzige Vorgang, bei dem Pacman dieses Feld berücksichtigt. Eine normale Synchronisation oder Aktualisierung verwendet dessen Wert nicht.
Zusätzliche architekturspezifische Ersetzungen können Sie hinzufügen, indem Sie ihnen einen Unterstrich und den Architekturnamen anhängen, zum Beispiel replaces_x86_64=().
options (Feld)
strip
docs
libtool
staticlibs
emptydirs
zipman
ccache
distcc
buildflags
makeflags
debug
lto
PAKETIERUNGSFUNKTIONEN
Außer den oben genannten Anweisungen benötigen PKGBUILDs eine Reihe von Funktionen, die Anweisungen zum Bau und zur Installation des Pakets bereitstellen. Als Minimum muss ein PKGBUILD eine package()-Funktion enthalten, welche alle Dateien des Pakets in das Paketierungsverzeichnis installiert. Hinzu kommen optional die Funktionen prepare(), build() und check(), die zur Erstellung dieser Dateien aus den Quellen dienen.
Dies wird direkt durch Makepkg ausgewertet und ausgeführt, so dass Sie hier alles verwenden können, was die Bash oder das System versteht. Stellen Sie sicher, dass eventuelle exotische Befehle durch die Abhängigkeiten im »makedepends«-Feld zur Verfügung gestellt werden.
Falls Sie in einer dieser Funktionen eigene Variablen definieren, ist es empfehlenswert, diese mit dem Bash-Schlüsselwort »local« auf den Bereich innerhalb der jeweiligen Funktion zu beschränken.
package()-Funktion
verify()-Funktion
prepare()-Funktion
build()-Funktion
check()-Funktion
Alle der oben genannten Variablen wie $pkgname und $pkgver können in den Paketierungsfunktionen verwendet werden. Zusätzlich definiert Makepkg die folgenden Variablen:
srcdir
pkgdir
startdir
TEILEN VON PAKETEN
Makepkg unterstützt den Bau mehrerer Pakete aus einem einzigen PKGBUILD. Dafür wird der »pkgname«-Anweisung ein Feld von Paketnamen zugewiesen. Jedes Teilpaket verwendet eine korrespondierende Paketierungsfunktion mit dem Namen package_foo(), wobei »foo« der Name des Teilpakets ist.
Alle Optionen und Anweisungen für die Teilpakete verwenden in der Voreinstellung die im PKGBUILD angegebenen globalen Werte. Dennoch können Sie die folgenden innerhalb der Paketierungsfunktion jedes Teilpakets außer Kraft setzen: pkgdesc, arch, url, license, groups, depends, optdepends, provides, conflicts, replaces, backup, options, install und changelog.
Beachten Sie, dass Makepkg die Abhängigkeiten der Teilpakete nicht berücksichtigt, wenn die Abhängigkeitsauflösung vor dem Bau des Pakets und mit --syncdeps erfolgt. Alle für den Bau des Pakets benötigten Pakete müssen in den globalen »depends«- und »makedepends«-Feldern angegeben werden.
Eine optionale globale Anweisung ist beim Bau eines geteilten Pakets verfügbar:
pkgbase
SKRIPTE ZUM INSTALLIEREN/AKTUALISIEREN/ENTFERNEN
Pacman kann beim Installieren, Entfernen oder Aktualisieren eines Pakets ein paketspezifisches Skript speichern und ausführen. Dadurch kann sich ein Paket nach der Installation selbst konfigurieren und beim Entfernen den umgekehrten Vorgang ausführen.
Der exakte Zeitpunkt der Ausführung des Skripts ist von der jeweiligen Operation abhängig und sollte selbsterklärend sein. Beachten Sie, dass während einer Aktualisierungsoperation keine der Installations- oder Entfernungsfunktionen aufgerufen wird.
Den Skripten werden entweder eine oder zwei »vollständige Versionszeichenketten« übergeben, wobei eine vollständige Versionszeichenkette entweder pkgver-pkgrel oder epoch:pkgver-pkgrel lautet, falls »epoch« nicht Null ist.
pre_install
post_install
pre_upgrade
post_upgrade
pre_remove
post_remove
Um dieses Funktionsmerkmal zu nutzen, legen Sie eine Datei namens Paketname.install an und speichern Sie sie im gleichen Verzeichnis wie das PKGBUILD-Skript. Dann verwenden Sie folgende Installationsanweisung:
install=Paketname.install
Das Installationsskript muss im »source«-Feld nicht angegeben werden. Eine Vorlage für eine solche Installationsdatei finden Sie in /usr/share/pacman als proto.install. Sie referenziert alle verfügbaren definierten Funktionen.
QUELLEN AUS VERSIONSVERWALTUNGSSYSTEMEN VERWENDEN
Sie können den Bau eines Pakets aus einem Versionsverwaltungssystem (VCS) aktivieren, indem Sie die Quelle in der folgenden Form angeben:
source=('Verzeichnis::URL#Fragment?Abfrage')
Gegenwärtig unterstützt Makepkg die Versionsverwaltungssysteme Bazaar, Git, Subversion, Fossil und Mercurial. Für andere Versionsverwaltungssysteme müssen Sie das Klonen des Upstream-Repositoriums manuell in der prepare()-Funktion ausführen.
Einige VCS-Quellen wie Git unterstützen das Festhalten des Checkouts über eine Prüfsumme seines Inhalts mittels deterministischer Exportfunktionalität wie »git archive«.
Die Quellen-URL besteht aus vier Komponenten:
Verzeichnis
url
Fragment
bzr
fossil
git
hg
svn
query
BEISPIEL
Nachfolgend sehen Sie ein Beispiel-PKGBUILD für das Paket patch. Weitere Beispiele finden Sie in den Bauskripten der Pakete Ihrer Distribution.
# Maintainer: Joe User <joe.user@example.com> pkgname=patch pkgver=2.7.1 pkgrel=1 pkgdesc="A utility to apply patch files to original sources" arch=('i686' 'x86_64') url="https://www.gnu.org/software/patch/patch.html" license=('GPL') groups=('base-devel') depends=('glibc') makedepends=('ed') optdepends=('ed: for "patch -e" functionality') source=("ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz"{,.sig}) sha256sums=('9124ba46db0abd873d0995c2ca880e81252676bb6c03e0a37dfc5f608a9b0ceb' 'SKIP') build() { cd "$srcdir/$pkgname-$pkgver" ./configure --prefix=/usr make } package() { cd "$srcdir/$pkgname-$pkgver" make DESTDIR="$pkgdir/" install }
SIEHE AUCH
makepkg(8), pacman(8), makepkg.conf(5)
Auf der Pacman-Website finden Sie aktuelle Informationen zu Pacman und den zugehörigen Werkzeugen.
FEHLER
Fehler? Sie machen wohl Witze, es gibt keine Fehler in dieser Software. Nun ja, sollte unsere Annahme doch falsch sein, senden Sie uns einen Fehlerbericht (auf Englisch) mit so vielen Details wie möglich in der Fehlerdatenbank von Archlinux im Bereich »Pacman«.
AUTOREN
Derzeitige Betreuer:
Bedeutende frühere Mitwirkende:
Informationen zu weiteren Mitwirkenden erhalten Sie, wenn Sie den Befehl git shortlog -s im Git-Repositorium pacman.git aufrufen.
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Mario Blättermann <mario.blaettermann@gmail.com> und Helge Kreutzmann <debian@helgefjell.de> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer.
15. März 2024 | Pacman 6.1.0 |