GNU/Linux >> LINUX-Kenntnisse >  >> Arch Linux

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

Mit PKGBUILD-Dateien werden Pakete für Arch Linux und seine Derivate wie Manjaro gebaut und erstellt.

Vielleicht sind Sie ihnen sogar selbst begegnet, wenn Sie jemals AUR, das von Arch Linux kuratierte Repository von PKGBUILDs, verwendet haben.

Aber wie genau gelangt man von einem PKGBUILD zu einem installierbaren Paket? Was genau läuft zwischen den beiden ab und wie können Sie sie für Ihre eigenen Pakete verwenden? Sie werden sie in diesem Artikel lernen.

PKGBUILD-Grundlagen

Für diejenigen, die mit Bash oder anderen Shells vertraut sind, wird es Sie freuen zu wissen, dass ein PKGBUILD so ziemlich nur ein Shell-Skript mit einigen Variablen ist, falls Sie dies noch nicht getan haben.

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

Um ein Paket aus einem PKGBUILD zu erstellen, wird das Befehlszeilendienstprogramm makepkg verwendet. Nachdem Sie ein PKGBUILD erhalten haben, führen Sie einfach makepkg aus innerhalb des Verzeichnisses, das das 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!“ druckt. wenn ausgeführt:

Einrichtung

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

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

Die andere Datei, die Sie erstellen müssen, ist eine Datei namens hello-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 schon kann es losgehen!

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 dies nicht vorziehen auf diese Weise zu lernen, würde ich 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 festlegen können, sondern auf einige häufig verwendete, damit Sie so schnell wie möglich loslegen können.

Wenn das aus dem Weg geräumt ist, öffnen Sie Ihren Texteditor und legen Sie direkt los!

Paketname

Das Wichtigste zuerst, die pkgname-Variable. 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 und dem Wert der Variablen rechts, getrennt durch ein Gleichheitszeichen.

Um den Paketnamen festzulegen, geben Sie Folgendes in 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 package() gehandhabt Abschnitt.

pkgver

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

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

pkgver="1.0.0"

pkgrel

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

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

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

pkgver="1"

Diese Variable sollte immer sein Beginnen Sie bei 1 und steigen Sie dann nacheinander auf. Wenn die pkgver sich 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 dazu dient, das Paket besser zu identifizieren.

Setzen Sie dazu einfach die Beschreibung in Anführungszeichen:

pkgdesc="Hello world in your terminal!"

Bogen

Diese Variable legt die Architektur fest, mit der das Paket kompatibel ist. 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 noch gesetzt werden, damit es weiß, dass das Paket mit unserem System kompatibel ist.

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

Geben Sie dazu Folgendes in das PKGBUILD ein:

arch=("x86_64")

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

abhängig

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

Da unser Paket keine Abhängigkeiten haben wird, müssen wir dieses Feld nicht in PKGBUILD eingeben. Wenn unser Paket jedoch Abhängigkeiten hätte, würden wir einfach dieselbe Syntax wie arch verwenden .

optabhängig

Dies listet Pakete auf, die nicht funktionieren, aber für zusätzliche Funktionen benötigt werden.

Dies folgt der gleichen Syntax wie abhängig .

Konflikte

Dies teilt Pacman mit, welche Pakete dazu führen würden, dass unser Paket auf eine Weise reagiert oder sich auf eine Weise verhält, die wir nicht möchten.

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

Dies folgt der gleichen Syntax wie abhängig auch.

Lizenz

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

Dies verwendet die gleiche Syntax wie arch und abhängig :

license=("custom")

Quelle

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

Geben Sie beim Hinzufügen lokaler Dateien den Namen der Datei relativ zum PKGBUILD ein, d. h. berücksichtigen Sie das folgende Verzeichnislayout:

PKGBUILD
file.txt
src/file.sh

Wenn Sie file.sh einbinden möchten in unserem PKGBUILD würden Sie src/file.sh eingeben wie sein Name.

Bei der Eingabe von URLs geben Sie einfach die vollständige URL ein, also https://mirrors.creativecommons.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 PKGBUILD befindet, geben Sie einfach ihren Namen als Wert für source ein .

Diese Variable verwendet auch die gleiche Syntax wie arch und abhängig :

source=("hello-world.sh")

sha512summiert

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

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

sha512sums=("SKIP")

Paket()

Dies ist der letzte und wichtigste Teil der eigentlichen Herstellung unseres Pakets. Es ist wichtig, zwei Variablen zu kennen, wenn Sie damit arbeiten:

  • ${srcdir} :Hier legt makepkg die Dateien in der Quelle ab 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 platzieren wir die Dateien, die auf unserem System installiert werden.
    Die Ordnerstruktur für ${pkgdir} ist so eingerichtet, als wäre sie auf einem tatsächlichen System (d. h. ${pkgdir}/usr/bin/hello-world würde die Datei /usr/bin/hello-world bei der Installation mit pacman erstellen.

package() enthält eine Liste von Befehlen, die zum Erstellen eines Pakets verwendet werden.

Wenn Sie also (hypothetisch) eine Datei mit der Aufschrift „Linux ist besser als Windows“ unter /usr/share/motto.txt benötigen, würden Sie etwa Folgendes 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 zunächst. Wenn Sie den mkdir-Befehl übersprungen haben, würde tee einen Fehler ausgeben, der besagt, dass das Verzeichnis nicht existiert.
  • Bei der Angabe von Verzeichnissen immer Stellen Sie ihnen ${pkgdir} voran oder ${srcdir} Variable. Die Eingabe von etwas wie /usr/share/motto.txt ohne solches würde auf das wörtliche Verzeichnis /usr/share/motto.txt auf Ihrem aktuell laufenden System verweisen.

Für Ihr PKGBUILD legen Sie die Datei hello-world.sh unter /usr/bin/hello-world auf Ihrem Zielsystem ab. Sie lassen die Datei auch "Hello to you!" sagen. wann lief.

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 nun etwa so aussehen:

Bauen und installieren Sie nun das Paket mit dem makepkg -si Befehl und führen Sie dann hello-world aus in Ihrem Terminal, um die Ausgabe zu sehen.

Abschluss

Und schon haben Sie Ihren ersten PKGBUILD erstellt! Sie sind auf dem Weg, echte Pakete für sich selbst und vielleicht sogar für die AUR zu erstellen.

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



Arch Linux
  1. So verwenden Sie Pacman unter Arch Linux

  2. So finden Sie anfällige Pakete in Arch Linux

  3. So konvertieren Sie DEB-Pakete in Arch-Linux-Pakete

  4. So führen Sie ein Downgrade aller Pakete auf ein bestimmtes Datum in Arch Linux durch

  5. Die empfohlene Methode zum Bereinigen des Paketcaches in Arch Linux

Apt-cache - Suche nach Softwarepaketen

So finden Sie die installierten proprietären Pakete in Arch Linux

Cylon – Das Arch-Linux-Wartungsprogramm für Neulinge

Pacman Commands Spickzettel für Arch Linux

So installieren Sie Arch Linux auf einem Raspberry Pi 4 [Schritt-für-Schritt-Anleitung für Anfänger]

Machen Sie Python-Skript in Kombination mit Linux-Paketen für Endbenutzer einfach installierbar