网站搜索

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 3000130032 之间创建构建用户,以及具有组 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 包管理命令。在那之前,请保持联系。