確定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上,以及/nix/nix-installer 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安裝程序的創建者。