Nächste: Untergeordnete, Vorige: guix pull
aufrufen, Nach oben: Paketverwaltung [Inhalt][Index]
guix time-machine
aufrufenDer Befehl guix time-machine
erleichtert den Zugang zu anderen
Versionen von Guix. Damit können ältere Versionen von Paketen installiert
werden oder eine Berechnung in einer identischen Umgebung reproduziert
werden. Die zu benutzende Guix-Version wird über eine Commit-Angabe oder
eine Kanalbeschreibungsdatei, wie sie durch guix describe
erzeugt
werden kann, festgelegt (siehe guix describe
aufrufen).
Sagen wir, Sie würden gerne in der Zeit zurückreisen zu den Tagen um
November 2020, als die Version 1.2.0 von Guix veröffentlicht worden ist, und
außerdem möchten Sie nach Ihrer Ankunft den damaligen guile
-Befehl
ausführen:
guix time-machine --commit=v1.2.0 -- \ environment -C --ad-hoc guile -- guile
Mit obigem Befehl wird Guix 1.2.0 geladen (möglicherweise auch andere
Kanäle, die in Ihren channels.scm genannten Konfigurationsdateien
festgelegt sind – siehe unten) und daraufhin dessen Befehl
guix environment
ausgeführt, um eine Umgebung, in einen Container
verpackt, zu betreten, wo dann guile
gestartet wird (guix
environment
ist mittlerweile Teil von guix shell
, siehe
guix shell
aufrufen). Es ist so, als würden Sie einen DeLorean
fahren12! Der erste Aufruf von guix
time-machine
kann lange dauern, weil vielleicht viele Pakete
heruntergeladen oder sogar erstellt werden müssen, aber das Ergebnis bleibt
in einem Zwischenspeicher und danach geschehen Befehle für denselben Commit
fast sofort.
Wie auch bei guix pull
werden, wenn keine abweichenden
Befehlszeilenoptionen angegeben wurden, mit time-machine
die
neuesten Commits derjenigen Kanäle geladen, die in
~/.config/guix/channels.scm, /etc/guix/channels.scm oder den
vorgegebenen Kanälen festgelegt sind. Die Konfigurationsdateien können Sie
mit der Befehlszeilenoption -q ignorieren lassen. Mit dem Befehl:
guix time-machine -q -- build hello
wird dementsprechend das Paket hello
erstellt, so wie es auf Guix’
Haupt-Branch ohne zusätzliche Kanäle definiert ist, was in der Regel einer
neueren Guix-Version entspricht als der, die Sie installiert
haben. Zeitreisen funktionieren also in beide Richtungen!
Anmerkung: Vergangene Commits zu Guix sind unveränderlich und
guix time-machine
bietet genau dieselbe Software, wie sie in einer damaligen Guix-Version bestanden hat. Demzufolge werden auch keine Sicherheitspatches für alte Versionen von Guix oder dessen Kanäle nachgeliefert. Unbedachter Gebrauch derguix time-machine
lässt Sicherheitsschwachstellen freien Raum. Siehe --allow-downgrades.
Weil guix time-machine
auf dem „Untergeordneten“-Mechanismus
aufgebaut ist (siehe Untergeordnete), ist der älteste Commit, zu dem
Zeitreisen möglich sind, der Commit ‘6298c3ff’ („v1.0.0“) vom 1. Mai
2019, denn es ist die früheste Veröffentlichung von Guix, die Untergeordnete
unterstützt hat. Ein Fehler wird gemeldet, wenn Sie es mit früheren Commits
versuchen.
Anmerkung: Technisch gesehen sollte es zwar möglich sein, so einen alten Commit von Guix zu besuchen, aber Sie müssen unter Umständen einige Hürden überwinden, falls keine Substitute der Binärdateien mehr angeboten werden. Wenn Sie in die ferne Vergangenheit reisen, können manche Pakete vielleicht nicht mehr so einfach aus ihrem Quellcode erstellt werden. Ein Beispiel dafür sind alte Versionen von Python 2, in deren Testkatalog Zeitbomben in Form auslaufender SSL-Zertifikate eingebaut worden sind. Dieses spezielle Problem lässt sich umgehen, indem Sie die Uhr in Ihrem Rechner auf einen vergangenen Zeitpunkt zurückdrehen, bevor Sie die Erstellung versuchen.
Die allgemeine Syntax lautet:
guix time-machine Optionen… -- Befehl Argument…
Dabei werden der Befehl und jedes Argument… unverändert an den
guix
-Befehl der angegebenen Version übergeben. Die Optionen,
die die Version definieren, sind dieselben wie bei guix pull
(siehe guix pull
aufrufen):
--url=URL
--commit=Commit
--branch=Branch
Den guix
-Kanal von der angegebenen URL benutzen, für den
angegebenen Commit (eine gültige Commit-ID, dargestellt als
hexadezimale Zeichenkette oder Namen eines Git-Tags) oder Branch.
--channels=Datei
-C Datei
Die Liste der Kanäle aus der angegebenen Datei auslesen. Die Datei muss Scheme-Code enthalten, der zu einer Liste von Kanalobjekten ausgewertet wird. Siehe Kanäle für nähere Informationen.
--no-channel-files
-q
Unterdrückt das Laden der Kanaldatei des Benutzers ~/.config/guix/channels.scm und der systemweiten Kanaldatei /etc/guix/channels.scm.
Anstelle von guix time-machine -q
können Sie daher auch den
folgenden Bash-Befehl verwenden, der die Syntax für „Prozesssubstitutionen“
verwendet (siehe Process Substitution in Referenzhandbuch zu GNU
Bash):
guix time-machine -C <(echo %default-channels) …
Beachten Sie, dass durch guix time-machine
Erstellungen von
Kanälen und deren Abhängigkeiten ausgelöst werden können, welche durch die
gemeinsamen Erstellungsoptionen gesteuert werden können (siehe Gemeinsame Erstellungsoptionen).
Wenn Sie DeLorean nicht kennen, sollten Sie eine Zeitreise in die 1980er in Betracht ziehen.
Nächste: Untergeordnete, Vorige: guix pull
aufrufen, Nach oben: Paketverwaltung [Inhalt][Index]