Erstellen eines PKGBUILD zum Erstellen von Paketen für Arch Linux

PKGBUILD-Dateien sind die Art und Weise, wie Pakete für Arch Linux und seine Derivate wie Manjaro erstellt und erstellt werden.

Sie sind vielleicht sogar selbst ein wenig auf sie gestoßen, wenn Sie jemals AUR verwendet haben, das von Benutzern kuratierte Repository von PKGBUILDs von Arch Linux.

Aber wie genau geht man von einem PKGBUILD zu einem installierbaren Paket? Was genau passiert zwischen den beiden und wie können Sie sie für Ihre eigenen Pakete erstellen? Sie werden sie in diesem Artikel lernen.

PKGBUILD-Grundlagen

Diejenigen, die mit Bash oder anderen Shells vertraut sind, werden erfreut sein zu erfahren, dass ein PKGBUILD so ziemlich nur ein Shell-Skript mit einigen Variablen ist, falls Sie es noch nicht getan haben.

PKGBUILD-Dateien bestehen aus Variablen und Funktionen, die alle verwendet werden, um das Paket selbst zu definieren und zu erstellen.

Um ein Paket aus einem PKGBUILD zu erstellen, wird das Befehlszeilendienstprogramm makepkg verwendet. Nachdem Sie ein PKGBUILD erhalten haben, führen Sie einfach aus makepkg in dem Verzeichnis, das die PKGBUILD enthält, und voila, Sie haben ein installierbares Paket!

In diesem Tutorial gehen Sie das Paket durch, das ich gerade erstellt habe und das “Hello World!” beim Laufen:

Einrichten

Um diesem Tutorial zu folgen, müssen Sie einige Dateien erstellen.

Zuerst müssen Sie eine Datei namens . erstellen PKGBUILD. Falls nicht bereits klargestellt, dient dies als „Rezept“ für die Zusammenstellung Ihres Pakets.

Die andere Datei, die Sie erstellen müssen, ist eine Datei namens hallo-world.sh. Ich werde seinen Zweck etwas später erklären.

Sie können diese beiden Dateien auch mit einem einzigen Befehl erstellen.

touch PKGBUILD hello-world.sh

Sie können mit dem Befehl ls überprüfen, ob die Dateien erstellt wurden:

Und Sie sind bereit zu gehen!

Einrichten Ihrer PKGBUILD-Datei

Anstatt Sie die gesamte Datei kopieren und einfügen zu lassen, gehe ich mit Ihnen jede Zeile durch, damit Sie den Zweck von allem, was passiert, besser verstehen können. Wenn Sie es nicht vorziehen, auf diese Weise zu lernen, kann ich das wärmstens empfehlen Arch Wiki-Artikel zum Erstellen von Paketen für Arch Linux.

Dieser Artikel geht auch nicht auf jede einzelne Option ein, die Sie in einem PKGBUILD einstellen können, sondern auf einige häufig verwendete, damit Sie so schnell wie möglich loslegen können.

Wenn das erledigt ist, öffnen Sie Ihren Texteditor und lassen Sie uns direkt loslegen!

Paketname

Das Wichtigste zuerst, die Variable pkgname. Dies definiert den Namen Ihres Pakets bei der Installation und wie der Paketmanager pacman von Arch Linux das Paket verfolgt.

Das Format dieser Variablen (und einiger anderer) hat die Form Variable=Wert, mit dem Variablennamen links, dem Wert der Variablen rechts, getrennt durch ein Gleichheitszeichen.

Um den Paketnamen festzulegen, geben Sie Folgendes in die PKGBUILD ein:

pkgname="hello-world"

  • Um einen anderen Paketnamen festzulegen, ersetzen Sie hello-world mit dem Namen des Pakets.
  • Dies legt nicht den Befehl fest, der zum Ausführen des Programms verwendet wird. Das wird etwas weiter unten im behandelt package() Sektion.

pkgver

Wie im Variablennamen selbst angegeben, legt dies die Version Ihres Pakets fest (zB 1.0.0). Dies ist nützlich, wenn ein Benutzer sein System aktualisiert, da das Einstellen einer höheren Version dazu führt, dass der Benutzer zu einem Upgrade aufgefordert wird.

Geben Sie zum Einstellen Folgendes in die PKGBUILD ein (nach der vorherigen Zeile):

pkgver="1.0.0"

pkgrel

Dies hängt mit der Variablen pkgver zusammen und ist normalerweise nicht wichtig. Wie die Variable pkgver benachrichtigt sie jedoch Benutzer über Upgrades, wenn sie auf eine höhere Nummer verschoben wird.

Es dient für alle Änderungen, die erfordern, dass der pkgver gleich bleibt, wie zum Beispiel alle Änderungen an der PKGBUILD selbst. Dies wäre nützlich, wenn Sie eine PKGBUILD für ein von Ihnen benutztes Programm erstellt haben (und die Version gleich der des Pakets beibehalten möchten) und Sie einen Fehler in der PKGBUILD selbst beheben müssen.

Um die Variable zu setzen, geben Sie Folgendes in die PKGBUILD ein:

pkgver="1"

Diese Variable sollte stets Beginnen Sie bei 1 und gehen Sie dann nacheinander nach oben. Wenn das pkgver selbst nach oben bewegt, kann (und sollte) dies auf 1 zurückgesetzt werden, da der pkgver selbst Benutzer benachrichtigt, dass Upgrades verfügbar sind.

pkgdesc

Dadurch wird die Beschreibung des Pakets festgelegt, die verwendet wird, um das Paket besser zu identifizieren.

Um es einzustellen, setzen Sie einfach die Beschreibung in Anführungszeichen:

pkgdesc="Hello world in your terminal!"

Bogen

Diese Variable setzt die die Architektur das paket ist kompatibel mit. Es ist in Ordnung, wenn Sie nicht verstehen, was eine Architektur ist, da sie in den meisten Fällen ziemlich nutzlos ist.

Unabhängig davon muss makepkg immer noch gesetzt werden, damit es weiß, dass das Paket mit unserem System kompatibel ist.

Diese Variable unterstützt das Festlegen mehrerer Werte, daher erfordert makepkg eine andere Syntax, wie unten gezeigt.

Geben Sie zum Einstellen Folgendes in die PKGBUILD ein:

arch=("x86_64")

Wenn Sie dafür mehrere Werte festlegen würden, würden Sie jeden Wert mit einem Leerzeichen und Anführungszeichen wie folgt trennen: arch=(“x86_x64” “arm”)

hängt davon ab

Dies listet alle Pakete auf, die unser Paket zum Funktionieren benötigt. Mögen Bogen, es kann auch mehrere Werte enthalten und muss daher die Klammersyntax verwenden.

Da unser Paket keine Abhängigkeiten hat, müssen wir dieses Feld in der PKGBUILD nicht eingeben. Wenn unser Paket jedoch Abhängigkeiten hätte, würden wir einfach die gleiche Syntax verwenden wie Bogen.

opt hängt davon ab

Dies listet Pakete auf, die für die Funktion nicht erforderlich sind, die jedoch für zusätzliche Funktionen erforderlich sind.

Dies folgt der gleichen Syntax wie hängt davon ab.

Konflikte

Dies sagt pacman, welche Pakete unser Paket dazu bringen würden, sich auf eine Weise zu verhalten oder zu verhalten, die wir nicht möchten.

Jedes hier aufgeführte Paket wird deinstalliert, bevor unseres installiert wird.

Dies folgt der gleichen Syntax wie hängt davon ab sowie.

Lizenz

Dies definiert die Softwarelizenz dass Ihr Programm lizenziert ist. Der Arch-Wiki hat einige Informationen, wenn Sie Hilfe bei der Auswahl einer Lizenz benötigen. Einstellen auf custom funktioniert, wenn Sie nicht wissen, was Sie hier einstellen sollen.

Dies erfordert die gleiche Syntax wie Bogen und hängt davon ab:

license=("custom")

Quelle

Auf diese Weise weiß makepkg, welche Dateien zum Erstellen unseres Pakets verwendet werden müssen. Dies kann eine Vielzahl unterschiedlicher Arten von Quellen enthalten, einschließlich lokaler Dateien und URLs.

Geben Sie beim Hinzufügen lokaler Dateien den Dateinamen relativ zum PKGBUILD ein, dh beachten Sie das folgende Verzeichnislayout:

PKGBUILD
file.txt
src/file.sh

Wenn du einschließen wolltest Datei.sh in unserem PKGBUILD würden Sie eingeben src/file.sh wie sein Name.

Bei der Eingabe von URLs geben Sie einfach die vollständige URL ein, also https://mirrors.GeneratePresscommons.org/presskit/logos/cc.logo.large.png.

Ihr Paket benötigt nur die Datei hello-world.sh, und da sie sich im selben Verzeichnis wie die PKGBUILD befindet, geben Sie einfach ihren Namen als Wert für . ein Quelle.

Diese Variable verwendet auch die gleiche Syntax wie Bogen und hängt davon ab:

source=("hello-world.sh")

sha512sums

Dies wird verwendet, um zu überprüfen, ob die Dateien in Quelle nicht geändert oder falsch heruntergeladen wurden. Informationen zur Ermittlung der Werte hierfür finden Sie im Arch Wiki-Artikel zu PKGBUILDs.

Wenn Sie dies lieber nicht setzen möchten (oder einfach nicht müssen, z. B. für lokale Dateien), können Sie einfach SKIP für jede Datei im eingeben Quelle Variable:

sha512sums=("SKIP")

Paket()

Dies ist der letzte und wichtigste Teil, um unser Paket tatsächlich zu erstellen. Es ist wichtig, zwei Variablen zu kennen, wenn Sie damit arbeiten:

  • ${srcdir}: Hier legt makepkg die Dateien in den Quelle Variable. Dies ist das Verzeichnis, in dem Sie mit den Dateien interagieren und alle anderen erforderlichen Änderungen an den Dateien vornehmen können.
  • ${pkgdir}: Hier legen wir die Dateien ab, die auf unserem System installiert werden.
    Die Ordnerstruktur für ${pkgdir} ist so eingerichtet, als ob sie auf einem tatsächlichen System wäre (dh ${pkgdir}/usr/bin/hello-world würde bei der Installation mit pacman die Datei /usr/bin/hello-world erstellen.

package() enthält eine Liste von Befehlen, die verwendet werden, um ein Paket zu erstellen.

Wenn Sie also (hypothetisch) eine Datei benötigen würden, die Linux ist Windows überlegen unter /usr/share/motto.txt liest, würden Sie so etwas ausführen:

package() {
mkdir -p "${pkgdir}/usr/share"
echo "Linux is superior to Windows" | tee "${pkgdir}/usr/share/motto.txt"
}

Ein paar Anmerkungen zum obigen Befehl:

  • ${pkgdir} enthält Nein Verzeichnisse darin zuerst. Wenn du das übersprungen hast mkdir-Befehl, würde tee eine Fehlermeldung ausgeben, die besagt, dass das Verzeichnis nicht existiert.
  • Bei der Angabe von Verzeichnissen stets stell ihnen das voran ${pkgdir} oder ${srcdir} Variable. Die Eingabe von etwas wie /usr/share/motto.txt ohne diese würde auf das wörtliche Verzeichnis /usr/share/motto.txt auf Ihrem derzeit laufenden System verweisen.

Für Ihr PKGBUILD legen Sie die Datei hello-world.sh unter /usr/bin/hello-world auf Ihrem Zielsystem ab. Sie werden auch dafür sorgen, dass die Datei “Hallo zu Ihnen!” sagt. wenn gelaufen.

Geben Sie dazu Folgendes in Ihr PKGBUILD ein:

package() {
echo 'Hello to you!' > "${srcdir}/hello-world.sh"
mkdir -p "${pkgdir}/usr/bin"
cp "${srcdir}/hello-world.sh" "${pkgdir}/usr/bin/hello-world"
chmod +x "${pkgdir}/usr/bin/hello-world"
}

Und du bist fertig! Ihre resultierende Datei sollte jetzt ungefähr so ​​​​aussehen:

Erstellen und installieren Sie nun das Paket mit dem makepkg -si Befehl und dann ausführen hello-world in Ihrem Terminal, um die Ausgabe anzuzeigen.

Einpacken

Und schon hast du dein erstes PKGBUILD gemacht! Sie sind auf dem besten Weg, echte Pakete für sich selbst zu erstellen, und vielleicht sogar die AUR.

Haben Sie Fragen oder funktioniert etwas nicht richtig? Fühlen Sie sich frei, es im Kommentarbereich unten zu posten.