我将我的 nixos 频道更改为 unstable,为什么我的软件包仍然没有更新?

I changed my nixos channel to unstable, why are my packages still not updated?

如何将我的包从 nixos-18.09 频道更新到 nixos-unstable 频道?我正在尝试这样做,因为我需要使用某些软件包的更新版本。

按照 nixos manual 中的说明,我添加了 nixos-unstable 频道 https://nixos.org/channels/nixos-unstable,删除了 nixos-18.09 频道 https://nixos.org/channels/nixos-18.09, 和 运行 $ nix-channel --update$ sudo nixos-rebuild switch --upgrade.

然而,我安装的软件包仍然是旧版本。我也试过 $ nix-env -u '*' 并且仍然有旧版本。我还需要做什么才能将我的包更新到 nixos-unstable 版本?

要切换到不稳定的 NixOS 频道:

  1. 成为root;您想要更改 root 用户的 Nix 频道:su
  2. 删除 NixOS 频道:nix-channel --remove nixos
  3. 添加 NixOS 不稳定频道并确保其命名为 nixos: nix-channel --add nixos https://nixos.org/channels/nixos-unstable

然后您就可以像往常一样升级了。例如,nixos-rebuild --upgrade boot 将首先更新 NixOS 频道,然后从更新的频道安装软件包。重新启动后,您将得到更新。

注意: 我建议不要这样做 nixos-rebuild --upgrade switch,尤其是在更改频道时,因为 NixOS 无论如何都不会重新启动所有服务。因此 switch 是不完整的。

I am trying to do this as I need to use updated versions of some packages.

您可以使用来自不同渠道的包。所以可能保持你的默认频道稳定,并且只从不稳定的频道引用特定的包可能是一个更好的解决方案。

我的配置中有以下导入(使用我分配给 unstable 的频道中的 google-chrome):

{ config, pkgs, ... }:


let
  unstable = import <unstable> {
    config = config.nixpkgs.config; 
  };
in
{
   environment.systemPackages = with pkgs; [
     awscli
     google-cloud-sdk
     kubectl
     libreoffice
     # ...
     unstable.google-chrome
   ];
}

至于为什么你的包没有使用不稳定的频道,可能是因为它们引用了你似乎没有修改的 nixos 频道(你似乎只添加了一个名为 nixos-unstable 的频道,但最有可能没有引用此频道名称)。

如果你想把所有的包都改成unstable

{ pkgs, ... }@args:
let
  pkgsUrl = "https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz";
  pkgs = import (builtins.fetchTarball pkgsUrl) {};
in
{...}