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.
Einen Fehler meldet guix time-machine
, wenn Sie eine Zeitreise zu
einem älteren Commit als „v0.16.0“ (Commit ‘4a0b87f0’) vom Dezember
2018 versuchen. Es handelt sich um einen der frühesten Commits, der den
Kanalmechanismus unterstützt hat, durch den „Zeitreisen“ möglich werden.
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 OpenSSL, dessen Tests fehlschlagen, wenn ein bestimmtes Datum vergangen ist. Dieses spezielle Problem lässt sich umgehen, indem Sie eine virtuelle Erstellungsmaschine einrichten, deren Uhr Sie auf einen passenden Zeitpunkt zurückdrehen (siehe Virtuelle Erstellungsmaschinen).
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).
If guix time-machine
is executed without any command, it prints
the file name of the profile that would be used to execute the command.
This is sometimes useful if you need to get store file name of the
profile—e.g., when you want to guix copy
it.
Wenn Sie DeLorean nicht kennen, sollten Sie eine Zeitreise in die 1980er in Betracht ziehen. (Zurück in die Zukunft (1985))
Nächste: Untergeordnete, Vorige: guix pull
aufrufen, Nach oben: Paketverwaltung [Inhalt][Index]