Nächste: Paketrichtlinien, Vorige: Alternativ eingerichtet, Nach oben: Mitwirken [Inhalt][Index]
Wenn Sie zu Guix etwas anderes als Pakete beitragen möchten oder um sich besser auszukennen, wie alles zusammenhält, führt Sie dieser Abschnitt im Quellcode herum, was Ihnen helfen kann.
Allgemein enthält Guix’ Quellbaum fast ausschließlich Guile-Module, von denen jedes für sich als eine Bibliothek aufgefasst werden kann (siehe Modules in Referenzhandbuch zu GNU Guile).
Die folgende Tabelle bietet einen Überblick über die wichtigsten
Verzeichnisse und was jeweils dort untergebracht ist. Denken Sie daran, dass
sich in Guile der Modulname aus dem Dateinamen ableitet. Zum Beispiel heißt
das Modul in der Datei guix/packages.scm folglich (guix
packages)
.
An diesem Ort liegen die Mechanismen im Kern von Guix. Um klarzumachen, was wir mit Kern meinen, sind hier ein paar Beispiele, angefangen mit grundlegenden Werkzeugen bis hin zu abstrahierenden, hochsprachlichen Werkzeugen:
(guix store)
Verbinden und kommunizieren mit dem Erstellungs-Daemon (siehe Der Store).
(guix derivations)
Ableitungen erzeugen (siehe Ableitungen).
(guix gexps)
G-Ausdrücke schreiben (siehe G-Ausdrücke).
(guix packages)
Pakete und Paketursprünge (origin
) definieren (siehe package
-Referenz).
(guix download)
(guix git-download)
Die Methoden url-fetch
und git-fetch
, mit denen für
Paketursprünge etwas heruntergeladen wird (siehe origin
-Referenz).
(guix swh)
Quellcode aus dem Software-Heritage-Archiv herunterladen.
(guix search-paths)
Suchpfade implementieren (siehe Suchpfade).
(guix build-system)
Die Schnittstelle für Erstellungssysteme (siehe Erstellungssysteme).
(guix profiles)
Profile implementieren.
Dieses Verzeichnis enthält die einzelnen Implementierungen jedes Erstellungssystems (siehe Erstellungssysteme), etwa:
(guix build-system gnu)
das GNU-Erstellungssystem,
(guix build-system cmake)
das CMake-Erstellungssystem,
(guix build-system pyproject)
für Python das „pyproject“-Erstellungssystem.
Hier ist Code zu finden, der allgemein auf der „Erstellungsseite“ verwendet wird (siehe Schichten von Code). Dazu gehört Code zum Erstellen von Paketen oder anderen Bestandteilen von Betriebssystemen sowie Werkzeuge:
(guix build utils)
Werkzeuge, die in Paketdefinitionen und mehr helfen können (siehe Werkzeuge zur Erstellung).
(guix build gnu-build-system)
(guix build cmake-build-system)
(guix build pyproject-build-system)
Implementierungen von Erstellungssystemen, insbesondere die Definition der Erstellungsphasen (siehe Erstellungsphasen).
(guix build syscalls)
Schnittstelle zur C-Bibliothek und zu Linux-Betriebssystemaufrufen.
Hierin sind Module enthalten, die Unterbefehlen des guix
-Befehls
entsprechen. Zum Beispiel exportiert das Modul (guix scripts shell)
die Prozedur guix-shell
, die direkt dem Befehl guix shell
entspricht (siehe guix shell
aufrufen).
Hierin ist unterstützender Code für die Importer und
Aktualisierungsprogramme enthalten (siehe guix import
aufrufen und
guix refresh
aufrufen). Zum Beispiel definiert (guix import
pypi)
die Schnittstelle zu PyPI, die der Befehl guix import pypi
benutzt.
Die bisher vorgestellten Verzeichnisse befinden sich allesamt in
guix/. Der andere wichtige Platz ist das Verzeichnis gnu/, an
dem in erster Linie Paketdefinitionen sowie Bibliotheken und Werkzeuge für
Guix System (siehe Systemkonfiguration) und Guix Home (siehe
Persönliche Konfiguration) liegen, die alle auf von (guix …)
-Modulen
verfügbar gemachten Funktionalitäten aufbauen46.
In diesem Verzeichnis kommen bei weitem die meisten Module zusammen, nämlich sind hier Paketmodule, die Paketdefinitionen exportieren (siehe Paketmodule). Einige Beispiele:
(gnu packages base)
Module, die grundlegende Pakete bereitstellen: glibc
,
coreutils
, grep
, etc.
(gnu packages guile)
Guile und zentrale Guile-Pakete.
(gnu packages linux)
Der Linux-libre-Kernel und damit zusammenhängende Pakete.
(gnu packages python)
Python und zentrale Python-Pakete.
(gnu packages python-xyz)
Sonstige Python-Pakete (wir waren wenig einfallsreich).
Jedenfalls können Sie direkt zu beliebigen Paketdefinitionen navigieren,
indem Sie guix edit
benutzen (siehe guix edit
aufrufen), und
Sie können die Stelle mit einem Paket finden, indem Sie guix show
aufrufen (siehe guix package
aufrufen).
In diesem Verzeichnis befinden sich Patches, die auf Pakete angewandt
werden. Auf sie wird mit der Prozedur search-patches
Bezug genommen.
In diesem sind Dienstdefinitionen, vor allem für Guix System (siehe Dienste), wobei manche auch für Guix Home angepasst und wiederverwendet werden, wie wir weiter unten sehen werden. Beispiele:
(gnu services)
Der eigentliche Rahmen für Dienste. Dazu werden die Datentypen für Dienst und Diensttyp definiert (siehe Dienstkompositionen).
(gnu services base)
Grundlegende Dienste (siehe Basisdienste).
(gnu services desktop)
„Desktop“-Dienste (siehe Desktop-Dienste).
(gnu services shepherd)
Unterstützung für Shepherd-Dienste (siehe Shepherd-Dienste).
Sie können direkt zu Dienstdefinitionen navigieren, indem Sie guix
system edit
benutzen, und Sie können die Stelle mit einem Dienst finden,
indem Sie guix system search
aufrufen (siehe guix system
aufrufen).
Dort sind für Guix System zentrale Module wie:
(gnu system)
Definiert operating-system
(siehe operating-system
-Referenz).
(gnu system file-systems)
Definiert file-system
(siehe Dateisysteme).
(gnu system mapped-devices)
Definiert mapped-device
(siehe Zugeordnete Geräte).
Diese Module werden entweder auf „Erstellungsseite“ beim Erstellen von Betriebssystemen oder Paketen benutzt oder zur Laufzeit durch Betriebssysteme.
(gnu build accounts)
Erzeugen von /etc/passwd, /etc/shadow, etc. (siehe Benutzerkonten).
(gnu build activation)
Ein Betriebssystem aktivieren, wenn der Rechner gestartet oder rekonfiguriert wird.
(gnu build file-systems)
Dateisysteme suchen, prüfen und einbinden.
(gnu build linux-boot)
(gnu build hurd-boot)
Booten von GNU/Linux- und GNU/Hurd-Betriebssystemen.
(gnu build linux-initrd)
Erzeugen einer initialen RAM-Disk für Linux (siehe Initiale RAM-Disk).
Hier ist alles, was mit Guix Home zu tun hat (siehe Persönliche Konfiguration). Beispiele:
(gnu home services)
Dienste im Kern von Guix Home wie home-files-service-type
.
(gnu home services ssh)
Mit SSH zu tun habende Dienste (siehe Secure Shell).
Dies enthält das textuelle grafische Systeminstallationsprogramm (siehe Geführte grafische Installation).
Dies sind die Maschinenabstraktionen, die von guix deploy
benutzt werden (siehe guix deploy
aufrufen).
Hier sind Systemtests enthalten, also Tests, die virtuelle Maschinen anlegen, mit denen Sie prüfen, dass sich Systemdienste wie erwartet verhalten (siehe Den Testkatalog laufen lassen).
Zu guter Letzt gibt es noch ein paar Verzeichnisse, in denen Dateien zu finden sind, die keine Guile-Module sind:
Dies ist die in C++ geschriebene Implementierung des guix-daemon
,
die wir von Nix geerbt haben (siehe Aufruf von guix-daemon
).
Hier sind Modultests („Unit Tests“), wobei jede Datei ungefähr einem Modul
entspricht, insbesondere bei (guix …)
-Modulen (siehe Den Testkatalog laufen lassen).
Dort befindet sich die Dokumentation in Form von Texinfo-Dateien, d.h. dieses Handbuch hier und das Kochbuch. Siehe Writing a Texinfo File in GNU Texinfo für Informationen zur Texinfo-Auszeichnungssprache.
An diesem Ort sind die Übersetzungen von Guix selbst, von Zusammenfassungen und Beschreibungen der Pakete, vom Handbuch und vom Kochbuch. Beachten Sie, dass die .po-Dateien hier direkt von Weblate heruntergeladen werden (siehe Guix übersetzen).
Verschiedene Dateien: Shell-Komplettierungen, Dateien zur Unterstützung von systemd und anderen init-Systemen, Git-Hooks usw.
Mit diesem Wissen sind Sie in der Lage, ein beachtliches Stück Ihres
Betriebssystems anzupassen! Siehe neben grep
und git
grep
auch den Abschnitt Perfekt eingerichtet, um zu lernen, wie Sie mit
Ihrem Editor den Code anpassen, und siehe Interaktiv mit Guix arbeiten, um
zu erfahren, wie Sie mit Scheme-Modulen interaktiv umgehen. Ein Genuss!
Aus diesem Grund
dürfen (guix …)
-Module allgemein nicht von (gnu
…)
-Modulen abhängen, mit nennenswerten Ausnahmen: (guix build-system
…)
-Module dürfen Pakete zur Laufzeit auflösen, z.B. benötigt (guix
build-system cmake)
zur Laufzeit Zugriff auf die Variable cmake
, und
(guix scripts …)
brauchen oft (gnu …)
-Module, genau wie manche
(guix import …)
-Module.
Nächste: Paketrichtlinien, Vorige: Alternativ eingerichtet, Nach oben: Mitwirken [Inhalt][Index]