.\" -*- coding: UTF-8 -*- '\" t .\" Title: pkgbuild .\" Author: [see the "Authors" section] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 2024-03-15 .\" Manual: Pacman Manual .\" Source: Pacman 6.1.0 .\" Language: English .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH PKGBUILD 5 "15. März 2024" "Pacman 6\&.1\&.0" Pacman\-Handbuch .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH BEZEICHNUNG PKGBUILD \- Beschreibungsdatei für den Bau von Paketen .SH ÜBERSICHT .sp PKGBUILD .SH BESCHREIBUNG .sp 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\&. .if n \{\ .sp .\} .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBHinweis\fP .ps -1 .br .sp Einen beispielhaften PKGBUILD für Referenzzwecke finden Sie in \fI/usr/share/pacman\fP 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\&. .sp .5v .RE .SH "OPTIONEN UND ANWEISUNGEN" .sp 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 \fBpkgname\fP, \fBpkgver\fP, \fBpkgrel\fP und \fBarch\fP\&. .sp Wenn Sie benutzerdefinierte Variablen erstellen wollen, um diese im Bauprozess zu verwenden, wird empfohlen, deren Namen einen \fI_\fP (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\&. .PP \fBpkgname (Feld)\fP .RS 4 gibt entweder den Namen des Pakets oder ein Feld aus Namen für geteilte Pakete an\&. Für die Elemente des Feldes können Sie alphanumerische Zeichen sowie die folgenden Zeichen verwenden: »@ \&. _ + \-«\&. Außerdem dürfen Namen nicht mit Bindestrichen oder Punkten beginnen\&. .RE .PP \fBpkgver\fP .RS 4 gibt die vom herausgebenden Autor festgelegte Version des Pakets an (beispielsweise \fI2\&.7\&.1\fP)\&. Die Variable darf keine Doppelpunkte, Schrägstriche, Bindestriche oder Leerräume enthalten\&. .sp 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)\&. .RE .PP \fBpkgrel\fP .RS 4 bezeichnet die distributionsbezogene Release\-Nummer\&. Dadurch wird Paketbetreuern beispielsweise ermöglicht, die Configure\-Schalter eines Pakets zu aktualisieren\&. Diese Nummer wird für jede neue Upstream\-Veröffentlichung üblicherweise auf \fI1\fP gesetzt und bei jedem zwischenzeitlich aktualisierten PKGBUILD erhöht\&. Die Variable ist eine positive Ganzzahl, wobei Sie für jede Zwischenveröffentlichungsstufe eine weitere positive Ganzzahl hinzufügen können, durch einen Punkt getrennt (zum Beispiel in der Form x\&.y)\&. .RE .PP \fBepoch\fP .RS 4 erzwingt, dass das Paket als neuer als alle vorherigen Versionen mit einer niedrigeren Epoche betrachtet wird, selbst wenn die Versionsnummer keine Aktualisierung auslösen würde\&. Der Wert muss eine positive Ganzzahl sein, wenn nichts angegeben ist, wird \fI0\fP verwendet\&. Dies ist nützlich, wenn sich das Versionierungsschema eines Pakets ändert (oder alphanumerisch ist) und der normale Vergleich der Versionsmummern scheitern würde\&. Siehe \fBpacman\fP(8) für weitere Informationen zu Versionsvergleichen\&. .RE .PP \fBpkgdesc\fP .RS 4 sollte eine Kurzbeschreibung des Pakets und dessen Funktionalität enthalten\&. Versuchen Sie, diese Beschreibung auf eine Zeile zu beschränken und den Namen des Pakets nicht zu nennen\&. .RE .PP \fBurl\fP .RS 4 enthält eine URL, die mit der paketierten Software korrespondiert\&. Dies ist typischerweise die Webseite des Projekts\&. .RE .PP \fBlicense (Feld)\fP .RS 4 Dieses Feld spezifiziert die für das Paket anzuwendenden Lizenzen\&. Falls mehrere Lizenzen gelten, führen Sie alle auf: license=(\*(AqGPL\*(Aq \*(AqFDL\*(Aq)\&. .RE .PP \fBinstall\fP .RS 4 gibt ein spezielles Installationsskript an, welches in das Paket einbezogen werden soll\&. Diese Datei sollte sich im gleichen Verzeichnis wie die Datei PKGBUILD befinden\&. Sie wird von Makepkg in das Paket kopiert\&. Sie muss nicht in das »source«\-Feld einbezogen werden (zum Beispiel install=$pkgname\&.install)\&. .RE .PP \fBchangelog\fP .RS 4 gibt eine Änderungsprotokolldatei an, welche in das Paket einbezogen werden soll\&. Diese Datei sollte mit einem einzelnen Zeilenvorschub enden und sich im gleichen Verzeichnis wie die Datei PKGBUILD befinden und wird von Makepkg in das Paket kopiert\&. Sie muss nicht in das »source«\-Feld einbezogen werden (zum Beispiel changelog=$pkgname\&.changelog)\&. .RE .PP \fBsource (Feld)\fP .RS 4 gibt ein Feld aus Quelldateien an, die zum Bau des Pakets erforderlich sind\&. Die Quelldateien müssen sich entweder im gleichen Verzeichnis wie die Datei PKGBUILD befinden oder als eine vollständige URL angegeben werden, von wo sie Makepkg herunterladen kann\&. Um die Wartung der PKGBUILDs zu vereinfachen, verwenden Sie bei der Angabe des Orts zum Herunterladen die Variablen $pkgname und $pkgver, sofern möglich\&. Komprimierte Dateien werden automatisch entpackt, es sei denn, sie sind im nachfolgend beschriebenen »noextract«\-Feld aufgelistet\&. .sp Zusätzliche architekturspezifische Quellen können Sie hinzufügen, indem Sie ihnen einen Unterstrich und den Architekturnamen anhängen, zum Beispiel \fIsource_x86_64=()\fP\&. Ein korrespondierendes Integritätsfeld mit Prüfsummen muss vorhanden sein, zum Beispiel \fIcksums_x86_64=()\fP\&. .sp 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=(\*(AqDateiname::URL\*(Aq)\&. .sp 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«\&. .sp 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\&. .RE .PP \fBvalidpgpkeys (Feld)\fP .RS 4 gibt ein Feld aus PGP\-Fingerabdrücken an\&. Wenn dieses Feld nicht leer ist, wird Makepkg nur Signaturen von Schlüsseln akzeptieren, die hier aufgelistet sind und außerdem die Vertrauenswerte im Schlüsselbund ignorieren\&. Falls die Quelldatei mit einem Unterschlüssel signiert wurde, verwendet Makepkg dennoch den primären Schlüssel für den Vergleich\&. .sp Es werden nur vollständige Fingerabdrücke akzeptiert\&. Diese müssen in Großschreibung vorliegen und dürfen keine Leerräume enthalten\&. .RE .PP \fBnoextract (Feld)\fP .RS 4 gibt ein Feld aus Dateinamen an, die denen aus dem »source«\-Feld entsprechen\&. Die hier aufgelisteten Dateien werden nicht zusammen mit dem Rest der Quelldateien entpackt\&. Dies ist für Pakete hilfreich, die komprimierte Daten direkt verwenden\&. .RE .PP \fBcksums (Feld)\fP .RS 4 Dieses Feld enthält CRC\-Prüfsummen für jede im »source«\-Feld angegebene Quelldatei (in der gleichen Reihenfolge)\&. Makepkg verwendet diese zur Überprüfung der Dateiintegrität bei anschließenden Bauvorgängen\&. Wenn anstelle einer normalen Prüfsumme \fISKIP\fP im Feld steht, wird die Integritätsprüfung für die betreffende Quelldatei übersprungen\&. Um cksums (Prüfsummen) einfach zu erzeugen, verwenden Sie den Befehl »makepkg \-g >> PKGBUILD«\&. Falls gewünscht, können Sie die cksums\-Zeile an eine geeignete Stelle verschieben\&. Beachten Sie, dass die mit »makepkg \-g« erzeugten Prüfsummen anhand der von den Software\-Entwicklern bereitgestellten Prüfsummenwerte verifiziert werden sollten. .RE .PP \fBmd5sums, sha1sums, sha224sums, sha256sums, sha384sums, sha512sums, b2sums (Felder)\fP .RS 4 gibt alternative Integritätsprüfungen an, die Makepkg unterstützt\&. Diese verhalten sich alle ähnlich zu der oben beschriebenen cksums\-Option\&. Um die Verwendung und Erzeugung dieser Prüfsummen zu aktivieren, stellen Sie sicher, dass die Option INTEGRITY_CHECK in \fBmakepkg.conf\fP(5) konfiguriert ist\&. .RE .PP \fBgroups (Feld)\fP .RS 4 Ein Feld aus symbolischen Namen, die Paketgruppen repräsentieren\&. Damit können Sie mehrere Pakete durch Angabe eines einzelnen Ziels installieren\&. Zum Beispiel können Sie alle KDE\-Pakete über die Gruppe \fIkde\fP installieren\&. .RE .PP \fBarch (Feld)\fP .RS 4 legt fest, auf welchen Architekturen das angegebene Paket verfügbar ist (zum Beispiel arch=(\*(Aqi686\*(Aq \*(Aqx86_64\*(Aq))\&. Pakete, die keine architekturspezifischen Dateien enthalten, sollten arch=(\*(Aqany\*(Aq) verwenden\&. Sie können für die Angabe alphanumerische Zeichen und den Unterstrich »_« verwenden\&. .RE .PP \fBbackup (Feld)\fP .RS 4 Ein Feld aus Namen der Dateien (ohne vorangestellte Schrägstriche), die gesichert werden sollen, wenn das Paket entfernt oder aktualisiert wird\&. Dies wird häufig für Pakete verwendet, die Konfigurationsdateien in \fI/etc\fP ablegen\&. Siehe »Umgang mit Konfigurationsdateien« in \fBpacman\fP(8) für weitere Informationen\&. .RE .PP \fBdepends (Feld)\fP .RS 4 Ein Feld aus Paketen, von denen dieses Paket für die Ausführung abhängig ist\&. Die Einträge in dieser Liste sollten in einfache Hochkommata eingeschlossen werden und mindestens einen Paketnamen enthalten\&. Die Einträge können außerdem eine Versionsangabe der Form \fIName<>version\fP enthalten, wobei <> einer von fünf Vergleichsoperatoren ist: >= (größer oder gleich), <= (kleiner oder gleich), = (gleich), > (größer als) oder < (kleiner als)\&. .sp 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\&. .sp Zusätzliche architekturspezifische Abhängigkeiten können Sie hinzufügen, indem Sie ihnen einen Unterstrich und den Architekturnamen anhängen, zum Beispiel \fIdepends_x86_64=()\fP\&. .RE .PP \fBmakedepends (Feld)\fP .RS 4 Ein Feld aus Paketen, welche dieses Paket zum Bau benötigt, die aber während der Laufzeit nicht erforderlich sind\&. Die Pakete in dieser Liste folgen dem gleichen Schema wie jene in »depends«\&. .sp Weitere archtekturabhängige Bau\-Abhängigkeiten können Sie angeben, indem Sie einen Unterstrich und den Namen der Architektur anhängen, zum Beispiel \fImakedepends_x86_64=()\fP\&. .RE .PP \fBcheckdepends (Feld)\fP .RS 4 Ein Feld aus Paketen, welche dieses Paket zum Ausführen der Tests benötigt, die aber während der Laufzeit nicht erforderlich sind\&. Die Pakete in dieser Liste folgen dem gleichen Schema wie jene in »depends«\&. Diese Abhängigkeiten werden nur beachtet, wenn die check()\-Funktion vorhanden ist und von Makepkg ausgeführt wird\&. .sp Zusätzliche architekturspezifische »checkdepends«\-Abhängigkeiten können Sie hinzufügen, indem Sie ihnen einen Unterstrich und den Architekturnamen anhängen, zum Beispiel \fIcheckdepends_x86_64=()\fP\&. .RE .PP \fBoptdepends (Feld)\fP .RS 4 Ein Feld aus Paketen (und begleitenden Erklärungen), die für die Basisfunktionalität nicht entscheidend sind, aber für die vollständige Funktionalität des Paketinhalts notwendig sein könnten\&. Die »optdepends« dienen gegenwärtig nur informativen Zwecken und werden von Pacman bei der Abhängigkeitsauflösung nicht berücksichtigt\&. Die Pakete in dieser Liste folgen dem gleichen Format wie »depends«, mit einer optionalen angehängten Beschreibung\&. Die Beschreibungen der »optdepends« müssen in folgendem Format angegeben werden: .sp .if n \{\ .RS 4 .\} .nf optdepends=(\*(Aqpython: for library bindings\*(Aq) .fi .if n \{\ .RE .\} .sp Zusätzliche architekturspezifische »optdepends«\-Abhängigkeiten können Sie hinzufügen, indem Sie ihnen einen Unterstrich und den Architekturnamen anhängen, zum Beispiel \fIoptdepends_x86_64=()\fP\&. .RE .PP \fBconflicts (Feld)\fP .RS 4 Ein Feld aus Paketen, die zu diesem Paket in Konflikt stehen (was bedeutet, dass sie nicht gleichzeitig installiert werden können)\&. Die Anweisung folgt dem gleichen Schema wie jene in »depends«\&. Die Angabe von Versionsnummern ist hier möglich, wenn Sie die in »depends« beschriebenen Operatoren verwenden\&. .sp Zusätzliche architekturspezifische Konflikte können Sie hinzufügen, indem Sie ihnen einen Unterstrich und den Architekturnamen anhängen, zum Beispiel \fIconflicts_x86_64=()\fP\&. .RE .PP \fBprovides (Feld)\fP .RS 4 Ein Feld aus »virtuellen Bereitstellungen« dieses Pakets\&. Dadurch wird es möglich, dass ein Paket Abhängigkeiten für andere Pakete bereitstellt, die über dessen eigenen Namen hinausgehen\&. Beispielsweise kann das Paket »dcron« zusätzlich \fIcron\fP bereitstellen, wodurch Pakete von \fIcron\fP abhängen können und nicht von \fIdcron ODER fcron\fP\&. .sp Die Versionierung der virtuellen Bereitstellung ist im Format \fIName=Version\fP möglich\&. Beispielsweise kann »dcron« außerdem \fIcron=2\&.0\fP bereitstellen, um die Abhängigkeit anderer Pakete zu \fIcron>=2\&.0\fP zu erfüllen\&. Bereitstellungen, welche die Operatoren > und < enthalten, sind unzulässig, weil nur spezifische Versionen eines Pakets bereitgestellt werden\&. .sp 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\&. .sp Zusätzliche architekturspezifische Bereitstellungen können Sie hinzufügen, indem Sie ihnen einen Unterstrich und den Architekturnamen anhängen, zum Beispiel \fIprovides_x86_64=()\fP\&. .RE .PP \fBreplaces (Feld)\fP .RS 4 Ein Feld aus Paketen, welche dieses Paket ersetzt\&. Dies kann dazu dienen, umbenannte oder zusammengefasste Pakete zu verarbeiten\&. Wenn beispielsweise das Paket \fIj2re\fP in \fIjre\fP umbenannt wurde, dann ermöglicht diese Anweisung zukünftige reibungslose Aktualisierungen, obwohl das Paket »umgezogen« ist\&. Die Angabe von Versionsnummern ist hier möglich, wenn Sie die in »depends« beschriebenen Operatoren verwenden\&. .sp Eine Systemaktualisierung ist derzeit der einzige Vorgang, bei dem Pacman dieses Feld berücksichtigt\&. Eine normale Synchronisation oder Aktualisierung verwendet dessen Wert nicht\&. .sp Zusätzliche architekturspezifische Ersetzungen können Sie hinzufügen, indem Sie ihnen einen Unterstrich und den Architekturnamen anhängen, zum Beispiel \fIreplaces_x86_64=()\fP\&. .RE .PP \fBoptions (Feld)\fP .RS 4 Dieses Feld ermöglicht Ihnen, einige Aspekte des voreingestellten Verhaltens von Makepkg außer Kraft zu setzen, wenn Sie Pakete bauen\&. Um eine Option festzulegen, setzen Sie deren Namen einfach in das Optionsfeld\&. Um zum Standardverhalten zurückzukehren, setzen Sie ein Ausrufezeichen vor die Option\&. Geben Sie nur die spezifischen Optionen an, die Sie außer Kraft setzen wollen, der Rest wird aus \fBmakepkg.conf\fP(5) übernommen\&. \fBHINWEIS:\fP Die Option \fIforce\fP wurde entfernt und deren Wirkung durch die Variable \fIepoch\fP auf der obersten Ebene ersetzt\&. .PP \fBstrip\fP .RS 4 Entfernt Symbole aus Programmen und Bibliotheken\&. Wenn Sie häufig einen Debugger bei Programmen oder Bibliotheken verwenden, kann es hilfreich sein, diese Option zu deaktivieren\&. .RE .PP \fBdocs\fP .RS 4 speichert die Dokumentationsverzeichnisse\&. Wenn Sie die Dokumentationsverzeichnisse löschen wollen, geben Sie »!docs« im Feld an\&. .RE .PP \fBlibtool\fP .RS 4 Belässt Libtool\-Dateien (\&.la) in Paketen\&. Geben Sie !libtool an, um diese zu entfernen\&. .RE .PP \fBstaticlibs\fP .RS 4 Belässt statische Bibliotheksdateien (\&.a) in Paketen\& Geben Sie !staticlibs an, um diese zu entfernen (sofern es ein dynamisch gelinktes Gegenstück gibt)\&. .RE .PP \fBemptydirs\fP .RS 4 belässt leere Verzeichnisse in Paketen\&. .RE .PP \fBzipman\fP .RS 4 komprimiert Handbuchseiten (man und info) mit gzip\&. .RE .PP \fBccache\fP .RS 4 ermöglicht die Nutzung von Ccache während des Bauvorgangs mit build()\&. Dies ist in der negierten Form »!ccache« am nützlichsten, wenn bestimmte Pakete Probleme beim Bau mit Ccache haben\&. .RE .PP \fBdistcc\fP .RS 4 ermöglicht die Nutzung von Distcc während des Bauvorgangs mit build()\&. Dies ist in der negierten Form »!distcc« am nützlichsten, wenn bestimmte Pakete Probleme beim Bau mit Distcc haben\&. .RE .PP \fBbuildflags\fP .RS 4 ermöglicht die Nutzung benutzerdefinierter Buildflags (CPPFLAGS, CFLAGS, CXXFLAGS, LDFLAGS) während des Bauvorgangs mit build(), wie in \fBmakepkg.conf\fP(5) angegeben\&. Dies ist in der negierten Form »!buildflags« am nützlichsten, wenn bestimmte Pakete Probleme beim Bau mit benutzerdefinierten Buildflags haben\&. .RE .PP \fBmakeflags\fP .RS 4 ermöglicht die Nutzung benutzerdefinierter Makeflags während des Bauvorgangs mit build(), wie in \fBmakepkg.conf\fP(5) angegeben\&. Dies ist in der negierten Form »!makeflags« am nützlichsten, wenn bestimmte Pakete Probleme beim Bau mit benutzerdefinierten Makeflags haben, wie \-j2 (oder höher)\&. .RE .PP \fBdebug\fP .RS 4 fügt die benutzerdefinierten Debug\-Flags (DEBUG_CFLAGS, DEBUG_CXXFLAGS) zu den korrespondierenden Buildflags hinzu, wie in \fBmakepkg.conf\fP(5) angegeben\&. Wird dies in Verbindung mit der Option »strip« verwendet, wird ein separates Paket erstellt, das die Debug\-Symbole enthält\&. .RE .PP \fBlto\fP .RS 4 aktiviert den Paketbau mittels Linkzeit\-Optimierung\&. Fügt \fI\-flto\fP zu CFLAGS und CXXFLAGS hinzu \&. .RE .RE .SH PAKETIERUNGSFUNKTIONEN .sp 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\&. .sp 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\&. .sp 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\&. .PP \fBpackage()\-Funktion\fP .RS 4 Die package()\-Funktion wird zum Installieren von Dateien in das Verzeichnis verwendet, das zum Wurzelverzeichnis des gebauten Pakets wird\&. Sie wird nach allen nachfolgend beschriebenen optionalen Funktionen ausgeführt\&. Die Paketierungsstufe wird in einer Fakeroot\-Umgebung ausgeführt, um die korrekten Zugriffsrechte des sich ergebenden Pakets sicherzustellen\&. Alle anderen Funktionen laufen unter der Kennung und mit den gleichen Rechten wie der Benutzer, der Makepkg ausführt.\&. Diese Funktion wird innerhalb von $srcdir aufgerufen\&. .RE .PP \fBverify()\-Funktion\fP .RS 4 Es kann eine optionale Funktion verify() spezifiziert werden, um beliebige Quellauthentifizierungen zu implementieren\&. Diese Funktion sollte einen von Null verschiedenen Exit\-Code zurückliefern, wenn die Authentifizierung fehlschlägt\&. Diese Funktion wird vor dem Extrahieren von Quellen ausgeführt\&. Diese Funktion läuft innerhalb von $startdir\&. .RE .PP \fBprepare()\-Funktion\fP .RS 4 Eine optionale prepare()\-Funktion kann angegeben werden, in der die Quellen für den Bau vorbereitet werden, zum Beispiel durch Patchen\&. Diese Funktion wird nach dem Entpacken der Quellen und vor der build()\-Funktion ausgeführt\&. Die prepare()\-Funktion wird übersprungen, wenn das Entpacken der Quellen übersprungen wird\&. Diese Funktion wird innerhalb von $srcdir aufgerufen\&. .RE .PP \fBbuild()\-Funktion\fP .RS 4 Die optionale »build()«\-Funktion wird zum Kompilieren und/oder Anpassen der Quelldateien verwendet, um diese für die Installation durch die »package()«\-Funktion vorzubereiten\&. Diese Funktion wird innerhalb von $srcdir aufgerufen\&. .RE .PP \fBcheck()\-Funktion\fP .RS 4 Eine optionale check()\-Funktion kann angegeben werden, welche die Testsuite eines Pakets ausführt\&. Diese Funktion wird zwischen den Funktionen build() und package() ausgeführt\&. Stellen Sie sicher, dass eventuelle exotische Befehle durch die Abhängigkeiten im »makedepends«\-Feld zur Verfügung gestellt werden\&. Diese Funktion wird innerhalb von $srcdir aufgerufen\&. .RE .sp Alle der oben genannten Variablen wie $pkgname und $pkgver können in den Paketierungsfunktionen verwendet werden\&. Zusätzlich definiert Makepkg die folgenden Variablen: .PP \fBsrcdir\fP .RS 4 gibt das Verzeichnis an, in das Makepkg alle Quelldateien entpackt bzw\&. kopiert\&. .RE .PP \fBpkgdir\fP .RS 4 gibt das Verzeichnis an, in dem Makepkg das installierte Paket zusammenstellt\&. Dieses Verzeichnis wird zum Wurzelverzeichnis Ihres gebauten Pakets\&. Diese Variable sollte ausschließlich in der package()\-Funktion verwendet werden\&. .RE .PP \fBstartdir\fP .RS 4 gibt den absoluten Pfad zu dem Verzeichnis an, in dem sich die Datei PKGBUILD befindet\&. Dies ist typischerweise die Ausgabe des Befehls $(pwd), wenn Makepkg gestartet ist\&. Die Verwendung dieser Variable ist veraltet, wir raten strikt davon ab\&. .RE .SH "TEILEN VON PAKETEN" .sp 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\&. .sp 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\&. .sp 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\&. .sp Eine optionale globale Anweisung ist beim Bau eines geteilten Pakets verfügbar: .PP \fBpkgbase\fP .RS 4 Dies ist der Name, der bei Bezügen in der Ausgabe von Makepkg auf die Paketgruppe und in der Benennung von reinen Quellen\-Tarballs verwendet wird\&. Wenn nichts angegeben ist, wird das erste Element im »pkgname«\-Feld verwendet\&. Für diese Variable sind alphanumerische Zeichen sowie die Zeichen »@«, ».«, »_«, »+« und »\-« zulässig\&. Außerdem darf der Variablenname nicht mit Bindestrichen oder Punkten beginnen\&. .RE .SH "SKRIPTE ZUM INSTALLIEREN/AKTUALISIEREN/ENTFERNEN" .sp 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\&. .sp 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\&. .sp Den Skripten werden entweder eine oder zwei »vollständige Versionszeichenketten« übergeben, wobei eine vollständige Versionszeichenkette entweder \fIpkgver\-pkgrel\fP oder \fIepoch:pkgver\-pkgrel\fP lautet, falls »epoch« nicht Null ist\&. .PP \fBpre_install\fP .RS 4 wird unmittelbar vor dem Entpacken der Dateien ausgeführt\&. Ein Argument wird übergeben: die vollständige Versionszeichenkette des neuen Pakets\&. .RE .PP \fBpost_install\fP .RS 4 wird unmittelbar vor dem Entpacken der Dateien ausgeführt\&. Ein Argument wird übergeben: die vollständige Versionszeichenkette des neuen Pakets\&. .RE .PP \fBpre_upgrade\fP .RS 4 wird unmittelbar vor dem Entpacken der Dateien ausgeführt\&. Zwei Argumente werden in folgender Reihenfolge übergeben: die vollständige Versionszeichenkette des neuen Pakets und die vollständige Versionszeichenkette des alten Pakets\&. .RE .PP \fBpost_upgrade\fP .RS 4 wird nach dem Entpacken der Dateien ausgeführt\&. Zwei Argumente werden in folgender Reihenfolge übergeben: die vollständige Versionszeichenkette des neuen Pakets und die vollständige Versionszeichenkette des alten Pakets\&. .RE .PP \fBpre_remove\fP .RS 4 wird unmittelbar vor dem Entfernen der Dateien ausgeführt\&. Ein Argument wird übergeben: die vollständige Versionszeichenkette des alten Pakets\&. .RE .PP \fBpost_remove\fP .RS 4 wird unmittelbar nach dem Entfernen der Dateien ausgeführt\&. Ein Argument wird übergeben: die vollständige Versionszeichenkette des alten Pakets\&. .RE .sp Um dieses Funktionsmerkmal zu nutzen, legen Sie eine Datei namens \fIPaketname\&.install\fP an und speichern Sie sie im gleichen Verzeichnis wie das PKGBUILD\-Skript\&. Dann verwenden Sie folgende Installationsanweisung: .sp .if n \{\ .RS 4 .\} .nf install=Paketname\&.install .fi .if n \{\ .RE .\} .sp Das Installationsskript muss im »source«\-Feld nicht angegeben werden\&. Eine Vorlage für eine solche Installationsdatei finden Sie in \fI/usr/share/pacman\fP als \fIproto\&.install\fP\&. Sie referenziert alle verfügbaren definierten Funktionen\&. .SH "QUELLEN AUS VERSIONSVERWALTUNGSSYSTEMEN VERWENDEN" .sp Sie können den Bau eines Pakets aus einem Versionsverwaltungssystem (VCS) aktivieren, indem Sie die Quelle in der folgenden Form angeben: .sp .if n \{\ .RS 4 .\} .nf source=(\*(AqVerzeichnis::URL#Fragment?Abfrage\*(Aq) .fi .if n \{\ .RE .\} .sp 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\&. .sp Einige VCS\-Quellen wie Git unterstützen das Festhalten des Checkouts über eine Prüfsumme seines Inhalts mittels deterministischer Exportfunktionalität wie »git archive«\&. .sp Die Quellen\-URL besteht aus vier Komponenten: .PP \fBVerzeichnis\fP .RS 4 (optional) Gibt den Namen eines alternativen Verzeichnisses an, in das Makepkg die VCS\-Quellen herunterladen soll\&. .RE .PP \fBurl\fP .RS 4 gibt die URL des VCS\-Repositoriums an\&. Diese muss das VCS im URL\-Protokoll enthalten, damit Makepkg sie als VCS\-Quelle erkennt\&. Falls das Protokoll den VCS\-Namen nicht enthält, können Sie ihn hinzufügen, indem Sie vcs+ der URL voranstellen\&. Wenn Sie beispielsweise ein Git\-Repositorium über HTTPS verwenden, würde eine Quellen\-URL folgende Form haben: git+https://…\&. .RE .PP \fBFragment\fP .RS 4 (optional) Erlaubt die Angabe einer Revisionsnummer oder eines Zweiges, die oder den Makepkg aus dem VCS auschecken soll\&. Ein Fragment hat die Form Typ=Wert; um beispielsweise eine gegebene Revision auszuchecken, würde die Quellen\-Zeile source=(URL#Revision=123) lauten\&. Die verfügbaren Typen sind vom verwendeten VCS abhängig: .PP \fBbzr\fP .RS 4 revision (siehe \*(Aqbzr help revisionspec\*(Aq für Details) .RE .PP \fBfossil\fP .RS 4 branch, commit, tag .RE .PP \fBgit\fP .RS 4 branch, commit, tag .RE .PP \fBhg\fP .RS 4 branch, revision, tag .RE .PP \fBsvn\fP .RS 4 revision .RE .RE .PP \fBquery\fP .RS 4 (optional) Erlaubt die Angabe, ob ein VCS\-Checkout auf PGP\-signierte Revisionen untersucht werden soll\&. Die Quellen\-Zeile sollte im Format source=(URL#Fragment?signed) oder source=(URL?signed#Fragment) sein\&. Gegenwärtig wird dies nur von Git unterstützt\&. .RE .SH BEISPIEL .sp Nachfolgend sehen Sie ein Beispiel\-PKGBUILD für das Paket \fIpatch\fP\&. Weitere Beispiele finden Sie in den Bauskripten der Pakete Ihrer Distribution\&. .sp .if n \{\ .RS 4 .\} .nf # Maintainer: Joe User pkgname=patch pkgver=2\&.7\&.1 pkgrel=1 pkgdesc="A utility to apply patch files to original sources" arch=(\*(Aqi686\*(Aq \*(Aqx86_64\*(Aq) url="https://www\&.gnu\&.org/software/patch/patch\&.html" license=(\*(AqGPL\*(Aq) groups=(\*(Aqbase\-devel\*(Aq) depends=(\*(Aqglibc\*(Aq) makedepends=(\*(Aqed\*(Aq) optdepends=(\*(Aqed: for "patch \-e" functionality\*(Aq) source=("ftp://ftp\&.gnu\&.org/gnu/$pkgname/$pkgname\-$pkgver\&.tar\&.xz"{,\&.sig}) sha256sums=(\*(Aq9124ba46db0abd873d0995c2ca880e81252676bb6c03e0a37dfc5f608a9b0ceb\*(Aq \*(AqSKIP\*(Aq) build() { cd "$srcdir/$pkgname\-$pkgver" \&./configure \-\-prefix=/usr make } package() { cd "$srcdir/$pkgname\-$pkgver" make DESTDIR="$pkgdir/" install } .fi .if n \{\ .RE .\} .SH "SIEHE AUCH" .sp \fBmakepkg\fP(8), \fBpacman\fP(8), \fBmakepkg.conf\fP(5) .sp Auf der .UR https://archlinux\&.org/pacman/ Pacman\-Website .UE finden Sie aktuelle Informationen zu Pacman und den zugehörigen Werkzeugen\&. .SH FEHLER .sp 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 .UR https://bugs.archlinux.org/ Fehlerdatenbank von Archlinux .UE im Bereich »Pacman«\&. .SH AUTOREN .sp Derzeitige Betreuer: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} .MT allan@archlinux\&.org Allan McRae .ME .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} .MT andrew\&.gregory\&.8@gmail\&.com Andrew Gregory .ME .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} .MT morganamilo@archlinux\&.org Morgan Adamiec .ME .RE .sp Bedeutende frühere Mitwirkende: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} .MT jvinet@zeroflux\&.org Judd Vinet .ME .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} .MT aurelien@archlinux\&.org Aurelien Foret .ME .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} .MT aaron@archlinux\&.org Aaron Griffin .ME .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} .MT dan@archlinux\&.org Dan McGee .ME .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} .MT shiningxc@gmail\&.com Xavier Chantry .ME .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} .MT ngaba@bibl\&.u\-szeged\&.hu Nagy Gábor .ME .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} .MT dreisner@archlinux\&.org Dave Reisner .ME .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} .MT eschwartz@archlinux\&.org Eli Schwartz .ME .RE .sp Informationen zu weiteren Mitwirkenden erhalten Sie, wenn Sie den Befehl \fBgit shortlog \-s\fP im Git\-Repositorium pacman\&.git aufrufen\&. .PP .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Mario Blättermann und Helge Kreutzmann erstellt. .PP Diese Übersetzung ist Freie Dokumentation; lesen Sie die .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. .PP Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die .MT debian-l10n-german@lists.debian.org Mailingliste der Übersetzer .ME .