Nächste: Aufruf von guix describe, Vorige: Aufruf von time-machine, Nach oben: Paketverwaltung [Inhalt][Index]
Anmerkung: Die hier beschriebenen Funktionalitäten sind in der Version 6d500ad bloß eine „Technologie-Vorschau“, daher kann sich die Schnittstelle in Zukunft noch ändern.
Manchmal könnten Sie Pakete aus der gerade laufenden Fassung von Guix mit denen mischen wollen, die in einer anderen Guix-Version verfügbar sind. Guix-Untergeordnete ermöglichen dies, indem Sie verschiedene Guix-Versionen beliebig mischen können.
Aus technischer Sicht ist ein „Untergeordneter“ im Kern ein separater
Guix-Prozess, der über eine REPL (siehe Aufruf von guix repl) mit Ihrem
Haupt-Guix-Prozess verbunden ist. Das Modul (guix inferior)
ermöglicht es Ihnen, Untergeordnete zu erstellen und mit ihnen zu
kommunizieren. Dadurch steht Ihnen auch eine hochsprachliche Schnittstelle
zur Verfügung, um die von einem Untergeordneten angebotenen Pakete zu
durchsuchen und zu verändern – untergeordnete Pakete.
In Kombination mit Kanälen (siehe Kanäle) bieten Untergeordnete eine
einfache Möglichkeit, mit einer anderen Version von Guix zu
interagieren. Nehmen wir zum Beispiel an, Sie wollen das aktuelle
guile
-Paket in Ihr Profil installieren, zusammen mit dem
guile-json
, wie es in einer früheren Guix-Version existiert
hat – vielleicht weil das neuere guile-json
eine inkompatible
API hat und Sie daher Ihren Code mit der alten API benutzen möchten. Dazu
könnten Sie ein Manifest für guix package --manifest
schreiben (siehe
Manifeste verfassen); in diesem Manifest würden Sie einen
Untergeordneten für diese alte Guix-Version erzeugen, für die Sie sich
interessieren, und aus diesem Untergeordneten das guile-json
-Paket
holen:
(use-modules (guix inferior) (guix channels) (srfi srfi-1)) ;für die Prozedur 'first' (define channels ;; Dies ist die alte Version, aus der wir ;; guile-json extrahieren möchten. (list (channel (name 'guix) (url "https://git.savannah.gnu.org/git/guix.git") (commit "65956ad3526ba09e1f7a40722c96c6ef7c0936fe")))) (define inferior ;; Ein Untergeordneter, der obige Version repräsentiert. (inferior-for-channels channels)) ;; Daraus erzeugen wir jetzt ein Manifest mit dem aktuellen ;; „guile“-Paket und dem alten „guile-json“-Paket. (packages->manifest (list (first (lookup-inferior-packages inferior "guile-json")) (specification->package "guile")))
Bei seiner ersten Ausführung könnte für guix package --manifest
erst der angegebene Kanal erstellt werden müssen, bevor der Untergeordnete
erstellt werden kann; nachfolgende Durchläufe sind wesentlich schneller,
weil diese Guix-Version bereits zwischengespeichert ist.
Folgende Prozeduren werden im Modul (guix inferior)
angeboten, um
einen Untergeordneten zu öffnen:
Return an inferior for channels, a list of channels. Use the cache at cache-directory, where entries can be reclaimed after ttl seconds. This procedure opens a new connection to the build daemon.
Als Nebenwirkung erstellt oder substituiert diese Prozedur unter Umständen Binärdateien für die Kanäle, was einige Zeit in Anspruch nehmen kann.
Open the inferior Guix in directory, running
directory/command repl
or equivalent. Return #f
if the inferior could not be launched.
Die im Folgenden aufgeführten Prozeduren ermöglichen es Ihnen, untergeordnete Pakete abzurufen und zu verändern.
Liefert die Liste der Pakete in Untergeordneter.
Return the sorted list of inferior packages matching name in inferior, with highest version numbers first. If version is true, return only packages with a version number prefixed by version.
Liefert wahr, wenn das obj ein Untergeordneter ist.
Diese Prozeduren sind das Gegenstück zu den Zugriffsmethoden des Verbunds „package“ für Pakete (siehe „package“-Referenz). Die meisten davon funktionieren durch eine Abfrage auf dem Untergeordneten, von dem das Paket kommt, weshalb der Untergeordnete noch lebendig sein muss, wenn Sie diese Prozeduren aufrufen.
Untergeordnete Pakete können transparent wie jedes andere Paket oder
dateiartige Objekt in G-Ausdrücken verwendet werden (siehe
G-Ausdrücke). Sie werden auch transparent wie reguläre Pakete von
der Prozedur packages->manifest
behandelt, welche oft in Manifesten
benutzt wird (siehe die Befehlszeilenoption
--manifest von guix package
). Somit können Sie ein
untergeordnetes Paket ziemlich überall dort verwenden, wo Sie ein reguläres
Paket einfügen würden: in Manifesten, im Feld packages
Ihrer
operating-system
-Deklaration und so weiter.
Nächste: Aufruf von guix describe, Vorige: Aufruf von time-machine, Nach oben: Paketverwaltung [Inhalt][Index]