答案1
总结
您在最新频道上吗?
(请参阅下面的如何检查和设置。)sudo nix-channel --update
a. (声明式/NixOS)
sudo nixos-rebuild switch
b. (临时)nix-env -u '*'
c. (家庭经理)home-manager switch
(我认为)
无论是否使用 NixOS,这些步骤都应该有效。
注-1 (薄片): 如果您使用的是薄片,那么可以肯定的是,这些都不会起作用。
笔记2 (NixOS+家庭经理):如果nixos-rebuild switch
失败并出现神秘的错误消息,请查看您的 Home Manager 配置。至少,在过去 5 年里,每当错误不明确时(例如,nix.maxJobs
弃用而支持nix.settings.max-jobs
),总是与 Home Manager 有关。
步骤 0. 检查并设置最新频道
步骤 1.nix-channel --update
只会拉取通道中的更改目前设置! 要检查您当前订阅的版本,请发出
sudo nix-channel --list
最新的 NixOS 手册第 4 章 升级 NixOS将始终显示最新频道的名称和链接。Nix 频道状态页面也是一个非常好的资源。
例如,我订阅了频道,因此我需要通过以下方式20.09
更新它21.11
$ sudo nix-channel --list
nixos https://nixos.org/channels/nixos-20.09
$ sudo nix-channel --remove nixos
$ sudo nix-channel --add https://nixos.org/channels/nixos-21.11 nixos
更多信息:
步骤 1. 更新频道
这对于声明式和“临时”设置都是必需的3:
sudo nix-channel --update
尽管 Nix 手册中有4.1 基本包管理部分,最好在 NixOS 手册中记录(参见第 7 章 软件包管理)。(尽管我发现从这些步骤中找出正确的顺序并不容易;最大的帮助是这个 NixOS 讨论帖。
Home Manager 似乎不会使这个过程变得复杂。(至少,我在 NixOS 上使用它,并且nixos-rebuild switch
总是用它处理所有事情我的设置。
NIXOS 用户提示
将nixos-rebuild switch --upgrade
步骤 1 和步骤 2 合并为“相当于更详细的nix-channel --update nixos; nixos-rebuild switch
“。
第 2 步. 更新软件包
这两个形容词“ad-hoc”和“declarative”是在NixOS 手册区分 Nix 包管理的两种模式3:
“特别指定":使用 管理包
nix-env
。1“声明式“: 在里面NixOS 手册,这指的是在 NixOS 中将包声明为列表'
configuration.nix
,但还有很多其他方法可以实现2。
命令:
a. 要更新 NixOS 中声明的所有软件包configuration.nix
,请使用:
sudo nixos-rebuild switch
b. 要更新所有已安装的软件包nix-env
:
nix-env -u '*'
c. 要使用 Home Manager 更新所有安装的软件包:
home-manager switch
(我想。再说一次,我在 NixOS 中使用 Home Manager,从来没有接触过任何 Home Manager 命令。请参阅家居管理相当于“公寓升级”)
脚注
[1]:据我所知,NixOS 手册是唯一使用术语“临时包管理”且仅表示使用 进行包管理的官方文档nix-env
。
(因此,我发现这个术语具有误导性,因为通过nix-shell -p
命令或自定义shell.nix
命令使用包也是包管理的临时形式。此外,nix-env
可能会很混乱。
[2]:例如,使用 Home Manager,使用shell.nix
-es,flakes。(列出 flakes 可能不正确,因为它是一种可以与 Home Manager 和 nix-shell Nix 表达式一起使用的机制……)
[3]:不确定在 Nix 中,是否存在关于“ad-hoc”、“声明式”和“命令式”包管理的共识;脚注 1 是我对“ad-hoc”的看法,有人说使用渠道始终是包管理的必要形式,因此“声明性”似乎被超载了......