Nix - Linux 的纯功能包管理器
Nix 是一个强大的、纯功能性的包管理系统,专为可靠且可重复的包管理而设计,根据 GNU LGPLv2.1 条款发布。它是 NixOS(一个鲜为人知的 Linux 发行版)中的主要包管理系统。
Nix 提供原子升级和回滚、多个版本的包安装、多用户包管理以及轻松设置包的构建环境,无论开发人员使用什么编程语言和工具。
在 Nix 下,包是由称为“Nix 表达式”的函数式包语言构建的。这种功能性的包管理方法可确保安装或升级一个包不会破坏其他包。
Nix 还具有多用户支持,这意味着普通(或非特权)系统用户可以安全地安装软件包,并且每个用户都由配置文件(Nix 存储中出现在用户路径中的软件包集合)来标识。
如果一个用户已经安装了一个软件包,如果另一个用户尝试安装相同的软件包,则不会再次构建或下载该软件包。
目前支持Linux(i686、x86_64)和Mac OS X(x86_64)。然而,它具有相当的可移植性,您可以在大多数支持 POSIX 线程并具有 C++11 编译器的平台上尝试它。
在本文中,我们将展示如何在 Linux 中安装(在多用户模式下)和使用 Nix 包管理器。我们将讨论与常用工具相关的一些基本包管理任务。
如何在 Linux 中安装 Nix 包管理器
我们将在多用户模式下安装最新版本的 Nix(撰写本文时为v2.1.3)。幸运的是,有一个现成的安装脚本,您可以在系统上使用以下curl 命令作为普通用户从 shell 运行。
sh <(curl https://nixos.org/nix/install) --daemon
运行上述命令将下载最新的 nix 二进制 tarball,您将进入多用户 nix 安装屏幕,如屏幕截图所示。
要查看安装过程中将发生的情况的详细列表,请键入 y
并按 Enter。如果您满意并准备继续,请输入 y
并按 Enter。
该脚本将根据需要多次调用 sudo 命令。您需要通过回答y
并按Enter来允许它使用sudo。
然后,安装程序将运行一些测试并生成 Nix 配置报告,在用户 ID 30001 和 30032 之间创建构建用户,以及具有组 ID 的组30000。出现提示时输入 y
继续。它将为不同的构建用户设置构建组,形成Nix的基本目录结构。
它将修改文件/etc/bashrc(以及zsh的/etc/zshrc)(如果它们存在)。请注意,它首先使用 .backup-before-nix 扩展名备份上述文件,并且安装程序还会创建文件 /etc/profile.d/nix.sh。
安装程序还将设置 nix-daemon 服务和 nix-daemon 套接字服务,加载 nix-daemon 的 systemd 单元并启动上述两个服务。
安装完成后,您需要打开一个新的终端窗口才能开始使用 Nix。或者,关闭并重新打开 shell 以应用最近的更改。然后获取文件 /etc/profile.d/nix.sh (因为它不是 shell 启动文件,所以打开新的 shell 不会获取它)。
source /etc/profile.d/nix.sh
接下来,运行以下命令从项目官方网站下载 Nix 运行所需的一些路径。下载所有路径并将其复制到正确的位置后,您将看到系统和 nix 安装类型摘要,如屏幕截图所示。
nix-shell -p nix-info --run "nix-info -m"
如何在 Linux 中使用 Nix 包管理器
在 Nix 下,包管理是由 nix-env 实用程序完成的。它用于安装、升级和删除/删除软件包,以及查询哪些软件包已安装或可供安装。
所有包都位于 Nix 通道中,该通道是一个指向存储库的 URL,其中包含 Nix 表达式的集合和指向二进制缓存的指针。
默认频道是Nixpkgs,订阅的频道列表存储在~/.nix-channels中,您可以使用以下命令列出它们(没有输出表示没有频道) 。
nix-channel --list
要添加 Nix 通道,请使用以下命令。
nix-channel --add https://nixos.org/channels/nixpkgs-unstable
在安装任何软件包之前,请先更新 Nix 频道;这类似于在 APT 包管理器下运行apt update。
nix-channel --update
您可以使用以下命令查询哪些软件包可供安装。
nix-env -qa
在此示例中,我们将使用前面的命令与 grep 结合使用来安装 Apache Tomcat 服务器,以查找可安装的软件包,如图所示。
nix-env -qa | grep "apache-tomcat"
要安装软件包,请使用以下命令并指定软件包版本,例如 apache-tomcat-9.0.2。
nix-env -i apache-tomcat-9.0.2
在本地系统上,Nix 将包存储在 Nix store 中,默认情况下是 /nix/store 目录,其中每个包都有自己唯一的子目录。例如,apache-tomcat 包存储在:
/nix/store/95gmgnxlrcpkhlm00fa5ax8kvd6189py-apache-tomcat-9.0.2
在此路径中,随机字符 95gmgnxlrcpkhlm00fa5ax8kvd6189py 是考虑到其所有依赖项的包的唯一标识符。
您可以使用以下命令列出已安装的软件包。
nix-env -q
要升级 apache-tomcat 软件包,您可以使用 -u
升级开关,如图所示。
nix-env -u apache-tomcat
如果您想删除/删除 apache-tomcat,请使用 -e
标志。在这里,包不会立即从系统中删除,它只是变得不使用。这很有用,因为您想要进行回滚,或者它可能在其他用户的配置文件中。
nix-env -e apache-tomcat
删除包后,您可以使用nix-collect-garbage实用程序进行一些垃圾收集。
nix-collect-garbage
如何在 Linux 中删除 Nix 包管理器
要卸载 Nix,请一次性删除所有与 nix 相关的文件。
sudo rm -rf /etc/profile/nix.sh /etc/nix /nix ~root/.nix-profile ~root/.nix-defexpr ~root/.nix-channels ~/.nix-profile ~/.nix-defexpr ~/.nix-channels
在具有 systemd 的系统上,运行以下命令来停止并禁用所有 nix 相关服务。
sudo systemctl stop nix-daemon.socket
sudo systemctl stop nix-daemon.service
sudo systemctl disable nix-daemon.socket
sudo systemctl disable nix-daemon.service
sudo systemctl daemon-reload
此外,您需要删除以下文件中对 Nix 的任何引用:/etc/profile、/etc/bashrc 和 /etc/zshrc >。
有关更多信息,请参阅我们查看过的上述实用程序的手册页。
man nix-channel
man nix-env
您可以在项目网站中找到 Nix Package Manager 文档:https://nixos.org/nix/。
概括
Nix 是一个纯功能性的包管理器,专为可靠且可重复的包管理而设计。它提供了一个有趣的包管理概念,与 Linux 中常用的工具(例如 YUM、APT 等)非常不同。
在本文中,我们展示了如何在多用户模式下安装 nix,并讨论了如何使用 Nix 进行包管理。与我们分享您的想法或通过下面的评论表提出任何问题。最后,在即将发布的文章中,我们将解释更多 Nix 包管理命令。在那之前,请保持联系。