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
要查看安装过程中将发生的详细列表,请键入y
并按Enter键 。 如果您满意并准备好继续,请键入y
并按Enter键 。
Nix安装摘要
该脚本将根据需要多次调用 。 您需要通过回答y
并按Enter键来允许它使用sudo 。
Nix安装继续
然后,安装程序将运行一些测试并生成Nix配置报告,在用户ID 30001和30032之间创建构建用户,以及组ID为30000的组。 输入y
以在出现提示时继续。 它将为不同的构建用户设置构建组,制作Nix的基本目录结构。
如果它们存在,它将修改文件/ etc / bashrc ,(和/ etc / zshrc为zsh )。 请注意,它首先使用.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安装和系统摘要
如何在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-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 / 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中常用的工具(如YUM , APT和许多其他工具)非常不同。
在本文中,我们展示了如何在多用户模式下安装nix,并讨论了如何使用Nix进行包管理。 与我们分享您的想法或通过下面的评论表提出任何问题。 最后,在即将发表的文章中,我们将解释更多Nix包管理命令。 在此之前,保持联系。