$ sudo nix-env --list-generations --profile /nix/var/nix/profiles/system
...
600 2020-01-25 21:01:11
601 2020-02-03 13:44:19
602 2020-02-09 14:06:20
603 2020-02-09 14:11:11
604 2020-02-11 00:02:43
605 2020-02-13 12:26:22
606 2020-02-16 16:40:02 (current)
Como eu poderia obter a geração de commit/canal (isso é uma coisa?) para uma geração Nixos - e potencialmente reverter o canal para ela?
Ou, em outras palavras, como posso reverter meu 'estado de canal' para o que era na geração 605?
Por que eu quero saber é porque eu fiz um sudo nix-channel --update
, e sudo nixos-rebuild switch
alguns dias atrás - no entanto, quaisquer atualizações de pacotes que ocorreram - resultaram em um sistema instável.
Então, para mitigar isso, inicializei e continuo usando uma geração antiga ( 605
).
Agora quero atualizar um pacote específico na configuração do meu sistema Nixos e basear as alterações em 605
oposição ao último 606
.
Encontrei https://stackoverflow.com/questions/39090387/how-to-undo-nix-channel-update ( nix-channel --rollback..
), no entanto, posso ter atualizado os canais algumas vezes - então o estado 'último' do canal pode não ser o que Eu preciso de.
Percebi que você pode especificar um número de geração de canal como parâmetro para este comando - mas não tenho certeza qual é a relação entre isso e a geração de nixos? Não parece ser a mesma coisa que tentei 605
com os seguintes resultados:
sudo nix-channel --rollback 605
error: generation 605 does not exist
error: program '/nix/store/cs47wjxwiqgyl1nkjnksyf3s2rb93piq-nix-2.3.2/bin/nix-env' failed with exit code 1
Eu suponho que você quer
sudo nix-channel --rollback
? Por exemplo, você também pode inspecionar manualmente/nix/var/nix/profiles/per-user/root/channels-*/manifest.nix
– aqueles que contêm nome, hash de confirmação, etc.TLDR;
/TLDR;
A resposta de Vladimir está perfeitamente correta, mas facilmente descartada devido ao longo caminho assustador ;)
Quando você atualiza um canal:
Você avança a geração de canal do usuário atual em um. Apenas
my-channel-alias
foi afetado, mas isso ainda faz com que toda uma nova geração seja construída e seu ambiente faça referência a ela.Infelizmente,
nix-channel
não tem switch para listar gerações de canais. É aqui que entra o longo caminho. Você pode ver que oschannels
linkschannels-4-link
para o usuáriomy_user_name
. Portanto,my_user_name
a geração de canal atualmente selecionada de 's é 4.Em contraste, as gerações de perfis (ambientes de usuário) são avançadas com as seguintes
nix-env
operações:Conforme mencionado na página man para nix-env.
E as diferentes gerações de perfil para o usuário atual são facilmente consultadas com: