确定NIX安装程序是一种快速,友好且可靠的方式,可以在各处安装和管理NIX,包括MacOS,Linux,Windows子系统的Linux(WSL),SELINUX,SELINUX,Valve Steam Deck等。它默认情况下,它安装了启用薄片的NIX,它为无缝卸载的Nix提供了支持,它使Nix能够在MacOS升级中幸存下来,等等。
这个单线是在任何受支持的系统上入门的最快方法:
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- install提示
要使用安装程序安装确定,请参见下面的说明。
确定NIX安装程序已在许多环境中成功完成了超过700万个安装,包括GitHub Action和Gitlab:
| 平台 | 多用户? | 仅root | 到期 |
|---|---|---|---|
linux( x86_64和aarch64 ) | ✓(通过Systemd) | ✓ | 稳定的 |
macOS( x86_64和aarch64 ) | ✓ | 稳定(请参阅注释) | |
| 气门蒸汽甲板(Steamos) | ✓ | 稳定的 | |
Linux 2(WSL2)的Windows子系统( x86_64和aarch64 ) | ✓(通过Systemd) | ✓ | 稳定的 |
| Podman Linux容器 | ✓(通过Systemd) | ✓ | 稳定的 |
| Docker容器 | ✓ | 稳定的 |
您可以通过运行此脚本来安装默认计划程序和选项的NIX:
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- install要下载特定于平台的安装程序二进制文件:
curl -sL -o nix-installer https://install.determinate.systems/nix/nix-installer-x86_64-linux
chmod +x nix-installer
./nix-installer这将在x86_64-linux系统上安装NIX,但您可以将其替换为您选择的系统。
如果您使用MacOS(但不使用Nix-Darwin)或Linux(而不是Nixos),则可以通过添加--determinate标志:使用确定的NIX安装程序来安装确定:
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- install --determinate提示
如果您使用Nix-darwin或Nixos,建议使用determinate薄片提供的模块安装确定。
确定是:
确定NIX安装程序通过遵循计划者制定的计划来安装NIX。审查可用的计划者:
/nix/nix-installer install --help规划师有自己的选择和默认设置,共同分享其中的大多数。例如,要查看Linux的选项,例如:
/nix/nix-installer install linux --help您可以使用环境变量或命令参数配置计划者:
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
NIX_BUILD_GROUP_NAME=nixbuilder sh -s -- install --nix-build-group-id 4000
# Alternatively:
NIX_BUILD_GROUP_NAME=nixbuilder ./nix-installer install --nix-build-group-id 4000有关选项的完整列表,请参见下面的安装程序设置。
安装程序有问题吗?请咨询我们的故障排除指南,以查看您的问题是否涵盖。
您可以通过运行:
sudo -i nix upgrade-nix另外,您可以使用不同版本的确定NIX安装程序卸载和重新安装。
您可以通过运行来删除确定NIX安装程序安装的NIX:
/nix/nix-installer uninstall您可以使用nix-installer-action在GitHub操作上安装NIX。这是一个示例配置:
on :
pull_request :
push :
branches : [main]
jobs :
build :
name : Build
runs-on : ubuntu-22.04
steps :
- uses : actions/checkout@v4
- name : Install Nix
uses : DeterminateSystems/nix-installer-action@main
- name : Run `nix build`
run : nix build .GitLab CI跑步者通常是基于Docker的,并作为root用户运行。这意味着不存在systemd ,因此您需要将--init none Option传递给Linux计划者。
在默认的gitlab跑步者中,您可以使用此配置安装NIX:
test :
script :
- curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install linux --no-confirm --init none
- . /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
- nix run nixpkgs#hello
- nix profile install nixpkgs#hello
- hello如果您使用的是不同的跑步者,则可能需要调整上述示例。
警告
当--init none使用时,只root或可以提升到root特权的用户可以运行nix:
sudo -i nix run nixpkgs#hello如果您不使用SystemD,则仍然可以通过明确指定linux计划和--init none安装NIX:
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- install linux --init none在docker/podman容器或WSL2实例中,不存在初始化(像systemd ),通过--init none 。
对于容器(无初始化):
警告
当--init none使用时,只root或可以提升到root特权的用户可以运行nix:
sudo -i nix run nixpkgs#hello # Dockerfile
FROM ubuntu:latest
RUN apt update -y
RUN apt install curl -y
RUN curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install linux
--extra-conf "sandbox = false"
--init none
--no-confirm
ENV PATH= "${PATH}:/nix/var/nix/profiles/default/bin"
RUN nix run nixpkgs#hellodocker build -t ubuntu-with-nix .
docker run --rm -ti ubuntu-with-nix
docker rmi ubuntu-with-nix
# or
podman build -t ubuntu-with-nix .
podman run --rm -ti ubuntu-with-nix
podman rmi ubuntu-with-nix对于具有SystemD Init的容器:
# Dockerfile
FROM ubuntu:latest
RUN apt update -y
RUN apt install curl systemd -y
RUN curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install linux
--extra-conf "sandbox = false"
--no-start-daemon
--no-confirm
ENV PATH= "${PATH}:/nix/var/nix/profiles/default/bin"
RUN nix run nixpkgs#hello
CMD [ "/bin/systemd" ]podman build -t ubuntu-systemd-with-nix .
IMAGE= $( podman create ubuntu-systemd-with-nix )
CONTAINER= $( podman start $IMAGE )
podman exec -ti $CONTAINER /bin/bash
podman rm -f $CONTAINER
podman rmi $IMAGE使用一些容器工具(例如Docker),您可以省略sandbox = false 。省略这将对与Podman等容器工具的兼容性产生负面影响。
我们强烈建议首先启用SystemD,然后正常安装NIX:
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- install如果启用了WSLG,则可以执行诸如PowerShell上的Windows打开Linux Firefox之类的事情:
wsl nix run nixpkgs # firefox要使用一些OpenGL应用程序,您可以使用nixGL (请注意,某些应用程序(例如blender )可能无法使用):
wsl nix run -- impure github:guibou / nixGL nix run nixpkgs # obs-studio如果启用SystemD不是一个选项,请通过命令末尾的--init none :
警告
当--init none使用时,只root或可以提升到root特权的用户可以运行nix:
sudo -i nix run nixpkgs#hellocurl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- install linux --init none如果您想绕过确认步骤,则可以应用--no-confirm标志:
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- install --no-confirm在非相互作用脚本中使用安装程序时,这特别有用。
现有的NIX安装脚本做得很好,但是很难维护。
脚本中使用的外壳实现和工具的细微差异使得很难对安装程序进行有意义的更改。
确定NIX安装程序比以下选项具有许多优势:
useradd )PATH上存在NIX 与NIX安装人员工作组和更广泛社区成员的其他参与者合作真是太好了。工作组维护了安装程序的基础叉。
尽管确定NIX安装人员试图提供全面且毫无疑问的体验,但不幸的是,有些问题可能需要手动干预或操作员选择。
如果NIX以前是在没有卸载Nix-Darwin的情况下卸载的,则您可能会遇到与此类似的错误:
nix shell nixpkgs#curl
error: unable to download ' https://cache.nixos.org/g8bqlgmpa4yg601w561qy2n576i6g0vh.narinfo ' : Problem with the SSL CA cert (path ? access rights ? ) (77)之所以发生这种情况,是因为nix-darwin规定是org.nixos.activate-system Service,该服务在NIX被卸载后仍保留。 org.nixos.activate-system服务与新安装的NIX进行交互,并更改其使用的SSL证书是损坏的符号链接。
ls -lah /etc/ssl/certs
total 0
drwxr-xr-x 3 root wheel 96B Oct 17 08:26 .
drwxr-xr-x 6 root wheel 192B Sep 16 06:28 ..
lrwxr-xr-x 1 root wheel 41B Oct 17 08:26 ca-certificates.crt - > /etc/static/ssl/certs/ca-certificates.crt由于使用NIX并需要网络连接性,因此nix-darwin卸载器将无法工作的问题使问题更加复杂。
可以通过删除org.nixos.activate-system服务和ca-certificates来解决这种情况:
sudo rm /Library/LaunchDaemons/org.nixos.activate-system.plist
sudo launchctl bootout system/org.nixos.activate-system
/nix/nix-installer uninstall
sudo rm /etc/ssl/certs/ca-certificates.crt再次运行安装程序,它应该起作用。
安装程序的最新版本将拒绝卸载,直到Nix-Darwin首先卸载,以帮助缓解此问题。
由于您将使用安装程序在没有NIX的系统上安装NIX,因此默认构建是静态二进制文件。
要在具有NIX的系统上构建便携式Linux二进制文件:
# to build a local copy
nix build -L " .#nix-installer-static "
# to build the remote main development branch
nix build -L " github:determinatesystems/nix-installer#nix-installer-static "
# for a specific version of the installer:
export NIX_INSTALLER_TAG= " v0.6.0 "
nix build -L " github:determinatesystems/nix-installer/ $NIX_INSTALLER_TAG #nix-installer-static "在MacOS上:
# to build a local copy
nix build -L " .#nix-installer "
# to build the remote main development branch
nix build -L " github:determinatesystems/nix-installer#nix-installer "
# for a specific version of the installer:
export NIX_INSTALLER_TAG= " v0.6.0 "
nix build -L " github:determinatesystems/nix-installer/ $NIX_INSTALLER_TAG #nix-installer "然后将result/bin/nix-installer复制到要运行的机器。您还可以将安装程序添加到没有NIX使用货物的情况下的系统中,因为没有系统依赖性需要担心:
# to build and run a local copy
RUSTFLAGS= " --cfg tokio_unstable " cargo run -- --help
# to build the remote main development branch
RUSTFLAGS= " --cfg tokio_unstable " cargo install --git https://github.com/DeterminateSystems/nix-installer
nix-installer --help
# for a specific version of the installer:
export NIX_INSTALLER_TAG= " v0.6.0 "
RUSTFLAGS= " --cfg tokio_unstable " cargo install --git https://github.com/DeterminateSystems/nix-installer --tag $NIX_INSTALLER_TAG
nix-installer --help要使此构建便携式设备可通过--target x86_64-unknown-linux-musl选项。
笔记
目前,我们需要--cfg tokio_unstable ,因为我们使用Tokio的流程组(包装稳定的std API),但由于需要MSRV凹凸不稳定。
警告
使用确定的NIX安装程序作为Rust库仍然是实验性的。没有倡导者,将来可能会删除此功能。如果您使用的是,请告诉我们,我们可以提供稳定的途径。
将nix-installer库添加到您的依赖项:
cargo add nix-installer如果您要构建CLI,请查看cli功能标志以clap集成。
当我们使用Tokio的进程组时,您还需要编辑您的.cargo/config.toml以使用tokio_unstable ,这些过程组包裹了稳定的std apis,但由于需要MSRV bump:
# .cargo/config.toml
[ build ]
rustflags =[ " --cfg " , " tokio_unstable " ]您还需要设置NIX_INSTALLER_TARBALL_PATH环境变量,以指向适合目标的NIX安装TARBALL,例如NIX-2.21.2-Aarch64-darwin.tar.xz。内容嵌入到由此产生的二进制中,而不是在安装时下载。
然后可以审查文档:
cargo doc --open -p nix-installer也可以通过nix build获得文档:
nix build github:DeterminateSystems/nix-installer#nix-installer.doc
firefox result-doc/nix-installer/index.html您可以通过修改下载URL来固定确定NIX安装程序的特定版本。这是一个例子:
VERSION= " v0.6.0 "
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix/tag/ ${VERSION} |
sh -s -- install要发现哪些版本可用,或下载任何版本的二进制文件,请检查GitHub版本。
您可以直接下载并使用这些版本。这是一个例子:
VERSION= " v0.6.0 "
ARCH= " aarch64-linux "
curl -sSf -L https://github.com/DeterminateSystems/nix-installer/releases/download/ ${VERSION} /nix-installer- ${ARCH} -o nix-installer
./nix-installer install每个安装程序版本都有一个关联的NIX版本 - 如果您固定安装程序版本,则您还会间接固定在关联的NIX版本上。
您还可以使用--nix-package-url或NIX_INSTALLER_NIX_PACKAGE_URL=覆盖NIX版本,但是不建议这样做,因为我们尚未测试该组合。这是一些示例NIX软件包URL,包括NIX版本,OS和架构:
与上游NIX安装程序脚本不同:
nix.conf中:nix-command和flakes功能bash-prompt-prefix已设置auto-optimise-store设置为true (仅在Linux上)always-allow-substitutes确定为trueextra-nix-path设置为nixpkgs=flake:nixpkgsmax-jobs设置为autoupgrade-nix-store-path-url https://install.determinate.systems/nix-upgrade/stable/universal )设置为https://install.detersanter.determinate.systorn-path-url。/nix/receipt.json上,以及安装二进制的副本,at /nix/nix-installernix-channel --update不运行, ~/.nix-channels未提供ssl-cert-file file参数,则在/etc/nix/nix.conf中设置ssl-cert-file File。 确定NIX安装程序提供了各种配置设置,有些是每个命令,有些是每个命令的。所有设置均可通过标志或NIX_INSTALLER_*环境变量获得。
这些设置可用于所有命令。
| 标志 | 描述 | 默认(如果有) | 环境变量 |
|---|---|---|---|
--log-directives | 跟踪逗号界定的指令 | NIX_INSTALLER_LOG_DIRECTIVES | |
--logger | 要使用哪个记录器(选项是compact , full , pretty和json ) | compact | NIX_INSTALLER_LOGGER |
--verbose | 启用调试日志,( -vv用于跟踪) | false | NIX_INSTALLER_VERBOSITY |
nix-installer install )| 标志 | 描述 | 默认(如果有) | 环境变量 |
|---|---|---|---|
--determinate | 安装确定 | NIX_INSTALLER_DETERMINATE | |
--diagnostic-attribution | 将安装诊断与特定值相关联 | NIX_INSTALLER_DIAGNOSTIC_ATTRIBUTION | |
--diagnostic-endpoint | 要发送安装诊断的URL或文件路径 | https://install.determinate.systems/nix/diagnostic | NIX_INSTALLER_DIAGNOSTIC_ENDPOINT |
--explain | 提供安装过程将对系统进行的更改的说明 | false | NIX_INSTALLER_EXPLAIN |
--extra-conf | 额外的配置行,用于/etc/nix.conf | NIX_INSTALLER_EXTRA_CONF | |
--force | 安装程序是否应强制重新创建现有的文件 | false | NIX_INSTALLER_FORCE |
--init | 要配置哪个初始化系统(如果--init none nix将是根源的) | launchd (MACOS), systemd (Linux) | NIX_INSTALLER_INIT |
--nix-build-group-id | Nix Build Group Gid | 350 (MacOS), 30000 (Linux) | NIX_INSTALLER_NIX_BUILD_GROUP_ID |
--nix-build-group-name | NIX构建组名称 | nixbld | NIX_INSTALLER_NIX_BUILD_GROUP_NAME |
--nix-build-user-count | 创建的构建用户数量 | 32 | NIX_INSTALLER_NIX_BUILD_USER_COUNT |
--nix-build-user-id-base | NIX构建用户群UID(登上)(注意:第一个UID是此基础 + 1) | 350 (MacOS), 30000 (Linux) | NIX_INSTALLER_NIX_BUILD_USER_ID_BASE |
--nix-build-user-prefix | NIX构建用户前缀(将用户编号后缀) | _nixbld (macOS), nixbld (linux) | NIX_INSTALLER_NIX_BUILD_USER_PREFIX |
--nix-package-url | NIX软件包URL | NIX_INSTALLER_NIX_PACKAGE_URL | |
--no-confirm | 运行安装而无需明确的用户确认 | false | NIX_INSTALLER_NO_CONFIRM |
--no-modify-profile | 修改用户配置文件以自动加载NIX。 | true | NIX_INSTALLER_MODIFY_PROFILE |
--proxy | 使用的代理(如果有);有效的代理基础为https://$URL , http://$URL and socks5://$URL | NIX_INSTALLER_PROXY | |
--ssl-cert-file | 使用SSL证书(如果有);用于获取nix并在/etc/nix/nix.conf中设置ssl-cert-file | NIX_INSTALLER_SSL_CERT_FILE | |
--no-start-daemon | 启动守护程序(如果不是--init none ) | true | NIX_INSTALLER_START_DAEMON |
您还可以用第一个参数指定计划者:
nix-installer install < plan >另外,您可以使用NIX_INSTALLER_PLAN环境变量:
NIX_INSTALLER_PLAN= < plan > nix-installer installnix-installer uninstall )| 标志 | 描述 | 默认(如果有) | 环境变量 |
|---|---|---|---|
--explain | 提供安装过程将对系统进行的更改的说明 | false | NIX_INSTALLER_EXPLAIN |
--no-confirm | 运行安装而无需明确的用户确认 | false | NIX_INSTALLER_NO_CONFIRM |
您还可以将安装收据指定为第一个参数(默认为/nix/receipt.json ):
nix-installer uninstall /path/to/receipt.jsonnix-installer plan )| 标志 | 描述 | 默认(如果有) | 环境变量 |
|---|---|---|---|
--out-file | 在哪里编写生成计划(以JSON格式) | /dev/stdout | NIX_INSTALLER_PLAN_OUT_FILE |
nix-installer repair )| 标志 | 描述 | 默认(如果有) | 环境变量 |
|---|---|---|---|
--no-confirm | 运行安装而无需明确的用户确认 | false | NIX_INSTALLER_NO_CONFIRM |
nix-installer self-test ) nix-installer self-test仅采用一般设置。
确定NIX安装程序的目标是成功,正确地安装NIX。 curl | sh Pipeline和安装程序收集了一些诊断信息,以帮助我们实现这一目标。
这是我们收集的诊断数据的表:
| 场地 | 使用 |
|---|---|
version | 确定NIX安装程序的版本。 |
planner | 安装NIX( linux , macos , steam-deck )的方法 |
configured_settings | 规划器设置的名称已从其默认设置更改。不包括值。 |
os_name | 运行的操作系统。 |
os_version | 操作系统的版本。 |
triple | 系统的体系结构/操作系统/二进制格式。 |
is_ci | 是否在CI中使用了安装程序(例如GitHub操作)。 |
action | Install或Uninstall 。 |
status | Success , Failure , Pending或Cancelled之一。 |
attribution | 由用户选择定义,将此运行的诊断设置与提供的值相关联。 |
failure_chain | 关于失败是什么的高级描述,如果有的话。例如: Command("diskutil")如果命令diskutil list失败。 |
要禁用诊断报告,请通过传递--diagnostic-endpoint=""或设置NIX_INSTALLER_DIAGNOSTIC_ENDPOINT="" 。
您可以在此处阅读确定系统的完整隐私策略,即确定的NIX安装程序的创建者。