无需重启即可从“nixos-rebuild test”恢复

无需重启即可从“nixos-rebuild test”恢复

有没有办法在nixos-rebuild test不重新启动的情况下恢复到以前的(或至少是“当前”)配置?

根据nixos-rebuild手册:

   test
       Build and activate the new configuration, but do not
       add it to the GRUB boot menu. Thus, if you reboot
       the system (or if it crashes), you will
       automatically revert to the default configuration
       (i.e. the configuration resulting from the last call
       to nixos-rebuild switch or nixos-rebuild boot).

显然,重新启动应该可以让我恢复到正常工作的系统,但似乎没有必要。

这个--rollback选项看起来很有希望:

   --rollback
       Instead of building a new configuration as specified
       by /etc/nixos/configuration.nix, roll back to the
       previous configuration. (The previous configuration
       is defined as the one before the “current”
       generation of the Nix profile /nix/var/nix/profiles/
       system.)

只是我想激活“当前”一代,而不是老一代。

例如。第 18 代是“当前”版本,略微过时但可以接受。第 17 代更旧。我使用过nixos-rebuild test --upgrade它,它破坏了 Chrome,所以我想在不重启的情况下恢复到第 18 代。(直到我能解决升级问题。)

更新:我试过了nixos-rebuild test --rollback,但文档是准确的:它恢复为 17 而不是 18。

答案1

# List previous generations
sudo nix-env --list-generations -p /nix/var/nix/profiles/system

# Live switch to any generation
sudo nix-env --switch-generation 12345 -p /nix/var/nix/profiles/system
sudo /nix/var/nix/profiles/system/bin/switch-to-configuration switch

来源:https://github.com/NixOS/nixpkgs/issues/24374

答案2

通过阅读源代码,我找到了这个解决方案似乎已经起作用了,但是感觉真的很 hack:

# /nix/var/nix/profiles/system-18-link/bin/switch-to-configuration test
activating the configuration...
setting up /etc...
setting up tmpfiles
reloading the following units: dbus.service

有没有更清洁的方法?

相关内容