Nix - Linux的纯功能包管理器

Nix是一个功能强大,功能齐全的软件包管理系统,专为Linux系统的可靠和可重复的软件包管理而设计。

Nix是一个功能强大,功能纯粹的包管理系统,专为可靠且可重复的包管理而设计,根据GNU LGPLv2.1的条款发布。 它是NixOS中的主要包管理系统,这是一个鲜为人知的Linux发行版。

Nix提供原子升级和回滚,多个版本的软件包安装,多用户软件包管理以及为软件包轻松设置构建环境,无论开发人员使用何种编程语言和工具。

Nix下 ,包是从称为“ Nix表达式 ”的功能包语言构建的。 这种包管理功能方法可确保安装或升级一个包不会破坏其他包。

Nix还具有多用户支持,这意味着普通(或非特权)系统用户可以安全地安装软件包,每个用户都由一个配置文件(Nix商店中出现在用户PATH中的软件包集合)标识。

如果一个用户安装了软件包,如果另一个用户尝试安装相同的软件包,则不会再次构建或下载该软件包。

它目前支持Linux(i686,x86_64)和Mac OS X(x86_64)。 但是,它是相当可移植的,您可以在大多数支持POSIX线程并具有C ++ 11编译器的平台上尝试它。

在本文中,我们将展示如何安装(在多用户模式下)并在Linux中使用Nix包管理器。 我们将讨论与常用工具相关的一些基本包管理任务。

如何在Linux中安装Nix Package Manager

我们将在多用户模式下安装最新版本的Nix (在编写本文时为v2.1.3 )。 幸运的是,有一个现成的安装脚本,您可以在系统上使用以下curl命令以普通用户身份从shell运行。

$ sh <(curl https://nixos.org/nix/install) --daemon

运行上面的命令将下载最新的nix二进制tarball,您将进入多用户nix安装屏幕,如屏幕截图所示。

在Linux中安装Nix Package Manager

在Linux中安装Nix Package Manager

要查看安装过程中将发生的详细列表,请键入y并按Enter键 如果您满意并准备好继续,请键入y并按Enter键

Nix安装摘要

Nix安装摘要

该脚本将根据需要多次调用sudo命令 您需要通过回答y并按Enter键来允许它使用sudo

Nix安装继续

Nix安装继续

然后,安装程序将运行一些测试并生成Nix配置报告,在用户ID 3000130032之间创建构建用户,以及组ID为30000的组。 输入y以在出现提示时继续。 它将为不同的构建用户设置构建组,制作Nix的基本目录结构。

如果它们存在,它将修改文件/ etc / bashrc ,(和/ etc / zshrczsh )。 请注意,它首先使用.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"
Nix安装和系统摘要

Nix安装和系统摘要

如何在Linux中使用Nix Package Manager

Nix下 ,包管理由nix-env实用程序完成。 它用于安装,升级和删除/擦除软件包,以及查询已安装或可用于安装的软件包。

所有包都位于Nix通道中,该通道是指向包含Nix表达式集合和指向二进制缓存的指针的存储库的URL。

默认通道为Nixpkgs ,订阅通道列表存储在〜/ .nix-channels中 ,您可以使用以下命令列出它们(没有输出表示没有通道)。

$ nix-channel --list

要添加Nix通道,请使用以下命令。

$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable

在安装任何软件包之前,首先要更新Nix通道; 这类似于在APT包管理器下运行apt update

$ nix-channel --update
更新Nix频道

更新Nix频道

您可以使用以下命令查询可供安装的软件包。

$ 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安装包

在本地系统上,Nix将包存储在Nix存储中 ,默认情况下为/ nix / store目录,其中每个包都有自己唯一的子目录。 例如, apache-tomcat包存储在:

/nix/store/95gmgnxlrcpkhlm00fa5ax8kvd6189py-apache-tomcat-9.0.2

在此路径中,随机字符95gmgnxlrcpkhlm00fa5ax8kvd6189py是包的唯一标识符,它考虑了所有依赖项。

您可以使用以下命令列出已安装的软件包。

$ nix-env -q
列出已安装的包

列出已安装的包

要升级apache-tomcat软件包,可以使用-u upgrade开关,如图所示。

$ 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中常用的工具(如YUMAPT和许多其他工具)非常不同。

在本文中,我们展示了如何在多用户模式下安装nix,并讨论了如何使用Nix进行包管理。 与我们分享您的想法或通过下面的评论表提出任何问题。 最后,在即将发表的文章中,我们将解释更多Nix包管理命令。 在此之前,保持联系。


分享按钮