Nächste: Pakete definieren, Nach oben: Programmierschnittstelle [Inhalt][Index]
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:
-L
von guix package
und anderen
Befehlen (siehe Gemeinsame Erstellungsoptionen) oder durch Setzen der unten
beschriebenen Umgebungsvariablen GUIX_PACKAGE_PATH
zum Suchpfad
hinzuzufügen.
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:
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.
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.
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]