Vorige: guix describe
aufrufen, Nach oben: Paketverwaltung [Inhalt][Index]
guix archive
aufrufenDer Befehl guix archive
ermöglicht es Nutzern, Dateien im Store in
eine einzelne Archivdatei zu exportieren und diese später auf einer
Maschine, auf der Guix läuft, zu importieren. Insbesondere können so
Store-Objekte von einer Maschine in den Store einer anderen Maschine
übertragen werden.
Anmerkung: Wenn Sie nach einer Möglichkeit suchen, Archivdateien für andere Werkzeuge als Guix zu erstellen, finden Sie Informationen dazu im Abschnitt
guix pack
aufrufen.
Führen Sie Folgendes aus, um Store-Dateien als ein Archiv auf die Standardausgabe zu exportieren:
guix archive --export Optionen Spezifikationen…
Spezifikationen sind dabei entweder die Namen von Store-Dateien oder
Paketspezifikationen wie bei guix package
(siehe guix package
aufrufen). Zum Beispiel erzeugt der folgende Befehl ein Archiv der
gui
-Ausgabe des Pakets git
sowie die Hauptausgabe von
emacs
:
guix archive --export git:gui /gnu/store/…-emacs-24.3 > groß.nar
Wenn die angegebenen Pakete noch nicht erstellt worden sind, werden sie
durch guix archive
automatisch erstellt. Der Erstellungsprozess
kann durch die gemeinsamen Erstellungsoptionen gesteuert werden (siehe
Gemeinsame Erstellungsoptionen).
Um das emacs
-Paket auf eine über SSH verbundene Maschine zu
übertragen, würde man dies ausführen:
guix archive --export -r emacs | ssh die-maschine guix archive --import
Auf gleiche Art kann auch ein vollständiges Benutzerprofil von einer Maschine auf eine andere übertragen werden:
guix archive --export -r $(readlink -f ~/.guix-profile) | \ ssh die-maschine guix archive --import
Jedoch sollten Sie in beiden Beispielen beachten, dass alles, was zu
emacs
, dem Profil oder deren Abhängigkeiten (wegen -r)
gehört, übertragen wird, egal ob es schon im Store der Zielmaschine
vorhanden ist oder nicht. Mit der Befehlszeilenoption --missing
lässt sich herausfinden, welche Objekte im Ziel-Store noch fehlen. Der
Befehl guix copy
vereinfacht und optimiert diesen gesamten
Prozess, ist also, was Sie in diesem Fall wahrscheinlich eher benutzen
wollten (siehe guix copy
aufrufen).
Dabei wird jedes Store-Objekt als „normalisiertes Archiv“, kurz „Nar“,
formatiert (was im Folgenden beschrieben wird) und die Ausgabe von
guix archive --export
(bzw. die Eingabe von guix
archive --import
) ist ein Nar-Bündel.
Das Nar-Format folgt einem ähnlichen Gedanken wie beim „tar“-Format, unterscheidet sich aber auf eine für unsere Zwecke geeignetere Weise. Erstens werden im Nar-Format nicht sämtliche Unix-Metadaten aller Dateien aufgenommen, sondern nur der Dateityp (ob es sich um eine reguläre Datei, ein Verzeichnis oder eine symbolische Verknüpfung handelt). Unix-Dateiberechtigungen sowie Besitzer und Gruppe werden nicht gespeichert. Zweitens entspricht die Reihenfolge, in der der Inhalt von Verzeichnissen abgelegt wird, immer der Reihenfolge, in der die Dateinamen gemäß der C-Locale sortiert würden. Dadurch wird die Erstellung von Archivdateien völlig deterministisch.
Das Nar-Bündel-Format setzt sich im Prinzip aus null oder mehr aneinandergehängten Nars zusammen mit Metadaten für jedes enthaltene Store-Objekt, nämlich dessen Dateinamen, Referenzen, der zugehörigen Ableitung sowie einer digitalen Signatur.
Beim Exportieren versieht der Daemon den Inhalt des Archivs mit einer digitalen Signatur, auch Beglaubigung genannt. Diese digitale Signatur wird an das Archiv angehängt. Beim Importieren verifiziert der Daemon die Signatur und lehnt den Import ab, falls die Signatur ungültig oder der Signierschlüssel nicht autorisiert ist.
Die wichtigsten Befehlszeilenoptionen sind:
--export
Exportiert die angegebenen Store-Dateien oder Pakete (siehe unten) und schreibt das resultierende Archiv auf die Standardausgabe.
Abhängigkeiten fehlen in der Ausgabe, außer wenn --recursive angegeben wurde.
-r
--recursive
Zusammen mit --export wird guix archive
hiermit
angewiesen, Abhängigkeiten der angegebenen Objekte auch ins Archiv
aufzunehmen. Das resultierende Archiv ist somit eigenständig; es enthält den
Abschluss der exportierten Store-Objekte.
--import
Ein Archiv von der Standardeingabe lesen und darin enthaltende Dateien in den Store importieren. Der Import bricht ab, wenn das Archiv keine gültige digitale Signatur hat oder wenn es von einem öffentlichen Schlüssel signiert wurde, der keiner der autorisierten Schlüssel ist (siehe --authorize weiter unten).
--missing
Eine Liste der Store-Dateinamen von der Standardeingabe lesen, je ein Name pro Zeile, und auf die Standardausgabe die Teilmenge dieser Dateien schreiben, die noch nicht im Store vorliegt.
--generate-key[=Parameter]
¶Ein neues Schlüsselpaar für den Daemon erzeugen. Dies ist erforderlich,
damit Archive mit --export exportiert werden können. Normalerweise
wird diese Option sofort umgesetzt, jedoch kann sie, wenn erst der
Entropie-Pool neu gefüllt werden muss, einige Zeit in Anspruch nehmen. Auf
Guix System kümmert sich der guix-service-type
darum, dass beim
ersten Systemstart das Schlüsselpaar erzeugt wird.
Das erzeugte Schlüsselpaar wird typischerweise unter /etc/guix
gespeichert, in den Dateien signing-key.pub (für den öffentlichen
Schlüssel) und signing-key.sec (für den privaten Schlüssel, der
geheim gehalten werden muss). Wurden keine Parameters angegeben, wird
ein ECDSA-Schlüssel unter Verwendung der Kurve Ed25519 erzeugt, oder, falls
die Libgcrypt-Version älter als 1.6.0 ist, ein 4096-Bit-RSA-Schlüssel. Sonst
geben die Parameter für Libgcrypt geeignete Parameter für
genkey
an (siehe gcry_pk_genkey
in Referenzhandbuch von Libgcrypt).
--authorize
¶Mit dem auf der Standardeingabe übergebenen öffentlichen Schlüssel signierte Importe autorisieren. Der öffentliche Schlüssel muss als „advanced“-formatierter S-Ausdruck gespeichert sein, d.h. im selben Format wie die Datei signing-key.pub.
Die Liste autorisierter Schlüssel wird in der Datei /etc/guix/acl gespeichert, die auch von Hand bearbeitet werden kann. Die Datei enthält „advanced“-formatierte S-Ausdrücke und ist als eine Access Control List für die Simple Public-Key Infrastructure (SPKI) aufgebaut.
--extract=Verzeichnis
-x Verzeichnis
Ein Archiv mit einem einzelnen Objekt lesen, wie es von Substitutservern geliefert wird (siehe Substitute), und ins Verzeichnis entpacken. Dies ist eine systemnahe Operation, die man nur selten direkt benutzt; siehe unten.
Zum Beispiel entpackt folgender Befehl das Substitut für Emacs, wie es von
bordeaux.guix.gnu.org
geliefert wird, nach /tmp/emacs:
$ wget -O - \ https://bordeaux.guix.gnu.org/nar/gzip/…-emacs-24.5 \ | gunzip | guix archive -x /tmp/emacs
Archive mit nur einem einzelnen Objekt unterscheiden sich von Archiven für
mehrere Dateien, wie sie guix archive --export
erzeugt; sie
enthalten nur ein einzelnes Store-Objekt und keine eingebettete
Signatur. Beim Entpacken findet also keine Signaturprüfung statt und
ihrer Ausgabe sollte so erst einmal nicht vertraut werden.
Der eigentliche Zweck dieser Operation ist, die Inspektion von
Archivinhalten von Substitutservern möglich zu machen, auch wenn diesen
unter Umständen nicht vertraut wird (siehe guix challenge
aufrufen).
--list
-t
Ein Archiv mit einem einzelnen Objekt lesen, wie es von Substitutservern geliefert wird (siehe Substitute), und die Dateien darin ausgeben, wie in diesem Beispiel:
$ wget -O - \ https://bordeaux.guix.gnu.org/nar/lzip/…-emacs-26.3 \ | lzip -d | guix archive -t
Vorige: guix describe
aufrufen, Nach oben: Paketverwaltung [Inhalt][Index]