Próximo: Inferiores, Anterior: Invocando guix pull
, Acima: Gerenciamento de pacote [Conteúdo][Índice]
guix time-machine
O comando guix time-machine
fornece acesso a outras revisões do
Guix, por exemplo, para instalar versões mais antigas de pacotes ou para
reproduzir uma computação em um ambiente idêntico. A revisão do Guix a ser
usada é definida por um commit ou por um arquivo de descrição de canal
criado por guix describe
(veja Invocando guix describe
).
Vamos supor que você queira viajar para aqueles dias de novembro de 2020,
quando a versão 1.2.0 do Guix foi lançada e, uma vez lá, executar o
guile
daquela época:
guix time-machine --commit=v1.2.0 -- \ environment -C --ad-hoc guile -- guile
O comando acima busca Guix 1.2.0 (e possivelmente outros canais
especificados pelos seus arquivos de configuração channels.scm —
veja abaixo) e executa seu comando guix environment
para gerar um
ambiente em um contêiner executando guile
(guix
environment
foi desde então subsumido por guix shell
;
veja Invocando guix shell
). É como dirigir um DeLorean12! A primeira invocação de guix time-machine
pode ser
cara: pode ser necessário baixar ou até mesmo construir um grande número de
pacotes; o resultado é armazenado em cache e os comandos subsequentes
direcionados ao mesmo commit são quase instantâneos.
Quanto ao guix pull
, na ausência de quaisquer opções, o
time-machine
busca os últimos commits dos canais especificados em
~/.config/guix/channels.scm, /etc/guix/channels.scm, ou os
canais padrão; a opção -q permite que você ignore esses arquivos de
configuração. O comando:
guix time-machine -q -- build hello
construirá então o pacote hello
conforme definido no branch principal
do Guix, sem nenhum canal adicional, que é em geral uma revisão mais nova do
Guix do que a que você instalou. A viagem no tempo funciona em ambas as
direções!
Nota: O histórico do Guix é imutável e
guix time-machine
fornece exatamente o mesmo software que eles estão em uma revisão específica do Guix. Naturalmente, nenhuma correção de segurança é fornecida para versões antigas do Guix ou seus canais. Um uso descuidado doguix time-machine
abre a porta para vulnerabilidades de segurança. Veja --allow-downgrades.
guix time-machine
gera um erro ao tentar viajar para commits mais
antigos que "v0.16.0" (commit ‘4a0b87f0’), datados de Dez. 2018. Este
é um dos commits mais antigos que oferecem suporte ao mecanismo de canal que
torna a "viagem no tempo" possível.
Nota: Embora seja tecnicamente possível viajar para um commit tão antigo, a facilidade para fazê-lo dependerá em grande parte da disponibilidade de substitutos binários. Ao viajar para um passado distante, alguns pacotes podem não ser mais facilmente construídos a partir da fonte. Um exemplo são as versões antigas do OpenSSL cujos testes falhavam após uma certa data. Esse problema em particular pode ser contornado executando uma máquina de construção virtual com seu relógio ajustado para a hora certa (veja Máquinas de Construção Virtual).
A sintaxe geral é:
guix time-machine opções… -- comando arg…
onde comando e arg… são passados sem modificações para o
comando guix
da revisão especificada. As opções que definem
esta revisão são as mesmas que para guix pull
(veja Invocando guix pull
):
--url=url
--commit=commit
--branch=ramo
Use o canal guix
do url especificado, no commit fornecido
(um ID de commit Git válido representado como uma string hexadecimal ou o
nome de uma tag) ou ramo.
--channels=arquivo
-C arquivo
Leia a lista de canais de arquivo. arquivo deve conter código Scheme que avalia uma lista de objetos de canal. Veja Canais para mais informações.
--no-channel-files
-q
Inibir o carregamento dos arquivos de canal do usuário e do sistema, ~/.config/guix/channels.scm e /etc/guix/channels.scm.
Portanto, guix time-machine -q
é equivalente ao seguinte comando
Bash, usando a sintaxe "substituição de processo" (veja Process
Substitution em Manual de referência do GNU Bash):
guix time-machine -C <(echo %default-channels) …
Observe que guix time-machine
pode acionar compilações de canais e
suas dependências, e elas são controladas pelas opções de compilação padrão
(veja Opções de compilação comuns).
Se guix time-machine
for executado sem nenhum comando, ele imprime
o nome do arquivo do perfil que seria usado para executar o comando. Isso às
vezes é útil se você precisa obter o nome do arquivo de armazém do perfil
— por exemplo, quando você quer guix copy
ele.
Se você não sabe o que é um DeLorean, considere viajar de volta para a década de 1980. (De Volta para o Futuro (1985))
Próximo: Inferiores, Anterior: Invocando guix pull
, Acima: Gerenciamento de pacote [Conteúdo][Índice]