有没有办法在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
答案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
有没有更清洁的方法?