我的 nixos 用的是 nixpkgs-unstable channel, 虽然包比 stable 的更新快一点,但是确实如同它的名字,非常不稳定,基本上我每半个月就遇到一次更新故障,其中 qemu + ceph 更是挂了两次。
下面是我从网上抄来的一些可能有用的修复方法。
Github PR
讲道理因为 nixos 的可复现性,出问题的时候肯定不止你自己的环境有问题,首先肯定是先去 GitHub 看看是不是别人已经提了 issue, 作为一个伸手党,说不定还可以直接找到修复方法。
有时候已经有 PR 修这个问题了,但是还没合并你要的 branch, 可以从下面的链接里看 pr 的状态:
- 查看一个 pr 是否被 merge pr-tracker
Override
如果是因为包的可选依赖故障,可以通过 override 直接干掉,这有一个 例子。
通过 override 修改包的依赖,从而避免使用 nixpkgs-unstable 时更新不了。
// In your /etc/nixos/configuration.nix
environment.systemPackages = with pkgs; [
# ... other packages you have ...
# qemu_full // REMOVE OR COMMENT OUT THIS LINE
# And add this instead:
(pkgs.qemu_full.override {
enableDocs = false;
cephSupport = false;
})
# ... other packages ...
];
Patching
nix 也提供了 patch 的方法,但很遗憾因为我起手抄的配置应用这个比较麻烦,而且我遇到的是依赖问题,我还是用了 Override 的方法。
不过这里有两篇文章可以参考一下:
Branch
然后是一个比较粗糙但简单的方案,直接 fork nixpkgs, 然后自己建一个 branch 修或者 apply 没被 merge 的补丁,然后在自己的 nix 配置里指向这个源。
虽然看起来比较粗暴,但是确实简单有效,就是后面关注的 PR 被修复了以后得记得再换回去。