Nächste: , Nach oben: Programmierschnittstelle   [Inhalt][Index]


9.1 Paketmodule

Aus Programmierersicht werden die Paketdefinitionen der GNU-Distribution als Guile-Module in Namensräumen wie (gnu packages …) sichtbar gemacht19 (siehe Guile-Module in Referenzhandbuch zu GNU Guile). Zum Beispiel exportiert das Modul (gnu packages emacs) eine Variable namens emacs, die an ein <package>-Objekt gebunden ist (siehe Pakete definieren).

Der Modulnamensraum (gnu packages …) wird von Befehlszeilenwerkzeugen automatisch nach Paketen durchsucht. Wenn Sie zum Beispiel guix install emacs ausführen, werden alle (gnu packages …)-Module durchlaufen, bis eines gefunden wird, das ein Paketobjekt mit dem Namen emacs exportiert. Diese Paketsuchfunktion ist im Modul (gnu packages) implementiert.

Benutzer können Paketdefinitionen auch in Modulen mit anderen Namen unterbringen – z.B. (my-packages emacs)20. Es gibt zwei Arten, solche Paketdefinitionen für die Benutzungsschnittstelle sichtbar zu machen:

  1. Eine Möglichkeit ist, das Verzeichnis, in dem Ihre Paketmodule stehen, mit der Befehlszeilenoption -L von guix package und anderen Befehlen (siehe Gemeinsame Erstellungsoptionen) oder durch Setzen der unten beschriebenen Umgebungsvariablen GUIX_PACKAGE_PATH zum Suchpfad hinzuzufügen.
  2. Die andere Möglichkeit ist, einen Kanal zu definieren und guix pull so zu konfigurieren, dass es davon seine Module bezieht. Ein Kanal ist im Kern nur ein Git-Repository, in welchem Paketmodule liegen. Siehe Kanäle für mehr Informationen, wie Kanäle definiert und benutzt werden.

GUIX_PACKAGE_PATH funktioniert ähnlich wie andere Variable mit Suchpfaden:

Umgebungsvariable: GUIX_PACKAGE_PATH

Dies ist eine doppelpunktgetrennte Liste von Verzeichnissen, die nach zusätzlichen Paketmodulen durchsucht werden. In dieser Variablen aufgelistete Verzeichnisse haben Vorrang vor den Modulen, die zur Distribution gehören.

Die Distribution wird komplett von Grund auf initialisiert – man sagt zur Initialisierung auch Bootstrapping – und sie ist eigenständig („self-contained“): Jedes Paket wird nur auf Basis von anderen Paketen in der Distribution erstellt. Die Wurzel dieses Abhängigkeitsgraphen ist ein kleiner Satz von Initialisierungsbinärdateien, den Bootstrap-Binärdateien, die im Modul (gnu packages bootstrap) verfügbar gemacht werden. Für mehr Informationen über Bootstrapping, siehe Bootstrapping.


Fußnoten

(19)

Beachten Sie, dass Pakete unter dem Modulnamensraum (gnu packages …) nicht notwendigerweise auch „GNU-Pakete“ sind. Dieses Schema für die Benennung von Modulen folgt lediglich den üblichen Guile-Konventionen: gnu bedeutet, dass die Module als Teil des GNU-Systems ausgeliefert werden, und packages gruppiert Module mit Paketdefinitionen.

(20)

Beachten Sie, dass Dateiname und Modulname übereinstimmen müssen. Zum Beispiel muss das Modul (my-packages emacs) in einer Datei my-packages/emacs.scm relativ zum mit --load-path oder GUIX_PACKAGE_PATH angegebenen Ladepfad stehen. Siehe Modules and the File System in Referenzhandbuch zu GNU Guile für Details.


Nächste: Pakete definieren, Nach oben: Programmierschnittstelle   [Inhalt][Index]