Suivant: , Précédent: , Monter: Gestion de paquets   [Table des matières][Index]


5.8 Invoquer guix time-machine

La commande guix time-machine donne accès à d’autres révisions de Guix, par exemple pour installer d’anciennes versions de paquets, ou pour reproduire un calcul dans un environnement identique. La révision de Guix à utiliser est définie par un commit ou par un fichier de description de canal créé par guix describe (voir Invoquer guix describe).

Supposons que vous vouliez voyager en ces jours de novembre 2020 où la version 1.2.0 de Guix a été publiée et que, une fois que vous y êtes, vous lanciez le guile de cette époque :

guix time-machine --commit=v1.2.0 -- \
  environment -C --ad-hoc guile -- guile

La commande ci-dessus récupère Guix 1.2.0 et lance sa commande guix environment pour démarrer un environnement dans un conteneur qui lance guile (guix environment a depuis été remplacé par guix shell ; voir Invoquer guix shell). C’est comme conduire une DeLorean12 ! La première invocation de guix time-machine peut être coûteuse. Elle doit télécharger voire construire un grand nombre de paquets. Heureusement le résultat est mis en cache et les commandes suivantes qui ciblent le même commit sont presque instantanées.

As for guix pull, in the absence of any options, time-machine fetches the latest commits of the channels specified in ~/.config/guix/channels.scm, /etc/guix/channels.scm, or the default channels; the -q option lets you ignore these configuration files. The command:

guix time-machine -q -- build hello

will thus build the package hello as defined in the main branch of Guix, without any additional channel, which is in general a newer revision of Guix than you have installed. Time travel works in both directions!

Remarque : L’histoire de Guix est immuable et guix time-machine fournit exactement les mêmes logiciels que ceux de la révision de Guix spécifique. Naturellement, aucun correctif de sécurité n’est fournit pour les anciennes versions de Guix ou ses canaux. Utiliser guix time-machine sans précaution ouvre la porte à des vulnérabilités de sécurité. Voir --allow-downgrades.

guix time-machine raises an error when attempting to travel to commits older than “v0.16.0” (commit ‘4a0b87f0’), dated Dec. 2018. This is one of the oldest commits supporting the channel mechanism that makes “time travel” possible.

Remarque : Although it should technically be possible to travel to such an old commit, the ease to do so will largely depend on the availability of binary substitutes. When traveling to a distant past, some packages may not easily build from source anymore. One such example are old versions of OpenSSL whose tests would fail after a certain date. This particular problem can be worked around by running a virtual build machine with its clock set to the right time (voir Virtual Build Machines).

La syntaxe générale est :

guix time-machine options… -- commande arg

command et arg… sont passés sans modification à la commande guix de la révision spécifiée. Les options qui définissent cette révision sont les mêmes que pour la commande guix pull (voir Invoquer guix pull) :

--url=url
--commit=commit
--branch=branche

Utiliser le canal guix depuis l’url spécifiée, au commit donné (un commit Git valide représenté par une chaîne hexadécimale ou le nom d’une étiquette) ou à la branche branch.

--channels=file
-C file

Lit la liste des canaux dans file. file doit contenir un code Scheme qui s’évalue en une liste d’objets de canaux. Voir Canaux pour plus d’informations.

--no-channel-files
-q

Inhibit loading of the user and system channel files, ~/.config/guix/channels.scm and /etc/guix/channels.scm.

Thus, guix time-machine -q is equivalent to the following Bash command, using the “process substitution” syntax (voir Process Substitution dans The GNU Bash Reference Manual):

guix time-machine -C <(echo %default-channels) …

Remarquez que guix time-machine peut lancer des constructions de canaux et de leurs dépendances, et qu’elles peuvent être contrôlées avec les options de construction communes (voir Options de construction communes).

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.


Notes de bas de page

(12)

Si vous ne savez pas ce qu’est une DeLorean, envisagez un voyage vers les années 1980. (Retour vers le futur (1985))


Suivant: Inférieurs, Précédent: Invoquer guix pull, Monter: Gestion de paquets   [Table des matières][Index]