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


2.1.2.2 Kanäle

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]