Próximo: , Anterior: , Acima: Gerenciamento de pacote   [Conteúdo][Índice]


5.8 Invocando 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 do guix 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.


Notas de Rodapé

(12)

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]