Nächste: Direkt am Checkout hacken, Vorige: Lokale Datei, Nach oben: Herangehensweisen [Inhalt][Index]
Guix und seine Paketsammlung können durch Kanäle (englisch: Channels) erweitert werden. Ein Kanal ist ein Git-Repository, öffentlich oder nicht, das .scm-Dateien enthält, die Pakete (siehe Pakete definieren in Referenzhandbuch zu GNU Guix) oder Dienste (siehe Dienste definieren in Referenzhandbuch zu GNU Guix) bereitstellen.
Wie würden Sie einen Kanal erstellen? Erstellen Sie zunächst ein Verzeichnis, das Ihre .scm-Dateien enthalten wird, beispielsweise ~/my-channel:
mkdir ~/my-channel
Angenommen, Sie möchten das Paket ‘my-hello’, das wir zuvor gesehen haben, hinzufügen; es bedarf zunächst einiger Anpassungen:
(define-module (my-hello) #:use-module (guix licenses) #:use-module (guix packages) #:use-module (guix build-system gnu) #:use-module (guix download)) (define-public my-hello (package (name "my-hello") (version "2.10") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/hello/hello-" version ".tar.gz")) (sha256 (base32 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i")))) (build-system gnu-build-system) (synopsis "Hello, Guix world: An example custom Guix package") (description "GNU Hello prints the message \"Hello, world!\" and then exits. It serves as an example of standard GNU coding practices. As such, it supports command-line arguments, multiple languages, and so on.") (home-page "https://www.gnu.org/software/hello/") (license gpl3+)))
Beachten Sie, dass wir den Paketwert einer exportierten Variablen mit
define-public
zugewiesen haben. Das bedeutet, das Paket wird einer
Variablen my-hello
zugewiesen, damit darauf verwiesen werden
kann. Unter anderem kann es dadurch als Abhängigkeit anderer Pakete
verwendet werden.
Wenn Sie guix package --install-from-file=my-hello.scm
auf der obigen
Datei aufrufen, geht es schief, weil der letzte Ausdruck,
define-public
, kein Paket zurückliefert. Wenn Sie trotzdem
define-public
für jene Herangehensweise verwenden möchten, stellen
Sie sicher, dass am Ende der Datei eine Auswertung von my-hello
steht:
;; … (define-public my-hello ;; … ) my-hello
Meistens tut man das aber nicht.
Wie machen Sie nun dieses Paket für guix
-Befehle sichtbar, damit
Sie Ihre Pakete testen können? Sie müssen das Verzeichnis mit der
Befehlszeilenoption -L zum Suchpfad hinzufügen, wie in diesen
Beispielen:
guix show -L ~/my-channel my-hello guix build -L ~/my-channel my-hello
Der letzte Schritt besteht darin, ~/my-channel in einen echten Kanal
zu verwandeln, so dass Ihre Paketsammlung nahtlos mit jedem
guix
-Befehl zur Verfügung steht. Dazu müssen Sie es zunächst zu
einem Git-Repository machen:
cd ~/my-channel git init git add my-hello.scm git commit -m "Erster Commit meines Kanals."
Und das war’s, Sie haben einen Kanal! Von nun an können Sie diesen Kanal zu Ihrer Kanalkonfiguration in ~/.config/guix/channels.scm hinzufügen (siehe Weitere Kanäle angeben in Referenzhandbuch zu GNU Guix). Unter der Annahme, dass Sie Ihren Kanal vorerst lokal halten, würde die channels.scm etwa so aussehen:
(append (list (channel
(name 'my-channel)
(url (string-append "file://" (getenv "HOME")
"/my-channel"))))
%default-channels)
Wenn Sie das nächste Mal guix pull
ausführen, wird Ihr Kanal
aufgenommen und die darin definierten Pakete stehen allen
guix
-Befehlen zur Verfügung, auch wenn Sie -L nicht
übergeben. Der Befehl guix describe
wird zeigen, dass Guix
tatsächlich sowohl den Kanal my-channel
als auch den
guix
-Kanal benutzt.
Siehe Einen Kanal erstellen in Referenzhandbuch zu GNU Guix für Details.
Nächste: Direkt am Checkout hacken, Vorige: Lokale Datei, Nach oben: Herangehensweisen [Inhalt][Index]