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


5.8 guix time-machine aufrufen

Der 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 der guix 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.


Fußnoten

(12)

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]