我的 nixos 用的是 nixpkgs-unstable channel, 虽然包比 stable 的更新快一点,但是确实如同它的名字,非常不稳定,基本上我每半个月就遇到一次更新故障,其中 qemu + ceph 更是挂了两次。 下面是我从网上抄来的一些可能有用的修复方法。

Github PR

讲道理因为 nixos 的可复现性,出问题的时候肯定不止你自己的环境有问题,首先肯定是先去 GitHub 看看是不是别人已经提了 issue, 作为一个伸手党,说不定还可以直接找到修复方法。 有时候已经有 PR 修这个问题了,但是还没合并你要的 branch, 可以从下面的链接里看 pr 的状态:

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 被修复了以后得记得再换回去。