Nächste: , Vorige: , Nach oben: Mitwirken   [Inhalt][Index]


22.7 Aufbau des Quellbaums

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).

guix

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.

guix/build-system

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.

guix/build

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.

guix/scripts

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).

guix/import

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 aufbauen44.

gnu/packages

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).

gnu/packages/patches

In diesem Verzeichnis befinden sich Patches, die auf Pakete angewandt werden. Auf sie wird mit der Prozedur search-patches Bezug genommen.

gnu/services

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).

gnu/system

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).

gnu/build

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).

gnu/home

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).

gnu/installer

Dies enthält das textuelle grafische Systeminstallationsprogramm (siehe Geführte grafische Installation).

gnu/machine

Dies sind die Maschinenabstraktionen, die von guix deploy benutzt werden (siehe guix deploy aufrufen).

gnu/tests

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:

nix

Dies ist die in C++ geschriebene Implementierung des guix-daemon, die wir von Nix geerbt haben (siehe Aufruf von guix-daemon).

tests

Hier sind Modultests („Unit Tests“), wobei jede Datei ungefähr einem Modul entspricht, insbesondere bei (guix …)-Modulen (siehe Den Testkatalog laufen lassen).

doc

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.

po

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).

etc

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!


Fußnoten

(44)

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]