Le programme d'installation de NIX déterminé est un moyen rapide, convivial et fiable d'installer et de gérer NIX partout, y compris MacOS, Linux, le sous-système Windows pour Linux (WSL), SELINUX, le pont de vapeur de soupape, etc. Il installe NIX avec des flocons activés par défaut, il offre une prise en charge de Nix sans couture de NIX, il permet à NIX de survivre aux mises à niveau MacOS, et bien plus encore.
Cette seule ligne est le moyen le plus rapide de commencer sur n'importe quel système pris en charge:
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- installConseil
Pour installer déterminé à l'aide du programme d'installation, consultez les instructions ci-dessous.
Le programme d'installation de NIX déterminé a réussi plus de 7 millions d'installations dans un certain nombre d'environnements, y compris les actions GitHub et GitLab:
| Plate-forme | Multi utilisateur? | root uniquement | Maturité |
|---|---|---|---|
Linux ( x86_64 et aarch64 ) | ✓ (via systemd) | ✓ | Écurie |
MacOS ( x86_64 et aarch64 ) | ✓ | Stable (voir note) | |
| Pont de vapeur de soupape (Steamos) | ✓ | Écurie | |
Sous-système Windows pour Linux 2 (WSL2) ( x86_64 et aarch64 ) | ✓ (via systemd) | ✓ | Écurie |
| Conteneurs Podman Linux | ✓ (via systemd) | ✓ | Écurie |
| Conteneurs docker | ✓ | Écurie |
Vous pouvez installer NIX avec le planificateur par défaut et les options en exécutant ce script:
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- installPour télécharger vous-même un installateur spécifique à la plate-forme:
curl -sL -o nix-installer https://install.determinate.systems/nix/nix-installer-x86_64-linux
chmod +x nix-installer
./nix-installer Cela installerait NIX sur un système x86_64-linux mais vous pouvez le remplacer par le système de votre choix.
Si vous êtes sur macOS (mais pas Nix-darwin) ou Linux (mais pas Nixos), vous pouvez installer déterminé à l'aide du programme d'installation NIX déterminé en ajoutant l'indicateur --determinate :
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- install --determinateConseil
Si vous utilisez Nix-Darwin ou Nixos, nous vous recommandons d'installer déterminé à l'aide de modules fournis par le flocon determinate .
Déterminé est:
Déterminer Nix Installateur installe NIX en suivant un plan élaboré par un planificateur . Pour revoir les planificateurs disponibles:
/nix/nix-installer install --helpLes planificateurs ont leurs propres options et valeurs par défaut, partageant la plupart d'entre eux en commun. Pour voir les options pour Linux, par exemple:
/nix/nix-installer install linux --helpVous pouvez configurer des planificateurs à l'aide de variables d'environnement ou d'arguments de commande:
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 4000Voir Paramètres d'installation ci-dessous pour une liste complète des options.
Vous avez des problèmes avec l'installateur? Consultez notre guide de dépannage pour voir si votre problème est couvert.
Vous pouvez mettre à niveau Nix vers notre version actuellement recommandée de Nix en exécutant:
sudo -i nix upgrade-nixAlternativement, vous pouvez désinstaller et réinstaller avec une version différente du programme d'installation NIX déterminé.
Vous pouvez supprimer le NIX installé par déterminer le programme d'installation NIX en exécutant:
/nix/nix-installer uninstall Vous pouvez installer NIX sur les actions GitHub à l'aide de nix-installer-action . Voici un exemple de configuration:
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 . Les coureurs GitLab CI sont généralement basés sur Docker et s'exécutent en tant qu'utilisateur root . Cela signifie que systemd n'est pas présent, vous devez donc passer l'option --init none au planificateur Linux.
Sur les coureurs de Gitlab par défaut, vous pouvez installer NIX en utilisant cette configuration:
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
- helloSi vous utilisez différents coureurs, l'exemple ci-dessus peut devoir être ajusté.
Avertissement
Lorsque --init none est utilisé, seuls root ou les utilisateurs qui peuvent élever aux privilèges root peuvent exécuter NIX:
sudo -i nix run nixpkgs#hello Si vous n'utilisez pas SystemD, vous pouvez toujours installer NIX en spécifiant explicitement le plan linux et --init none :
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- install linux --init none Dans les conteneurs Docker / Podman ou les instances WSL2 où une init (comme systemd ) n'est pas présente, pass --init none .
Pour les conteneurs (sans init):
Avertissement
Lorsque --init none est utilisé, seuls root ou les utilisateurs qui peuvent élever aux privilèges root peuvent exécuter 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-nixPour les conteneurs avec un 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 Avec certains outils de conteneurs, tels que Docker, vous pouvez omettre sandbox = false . L'omission de cela aura un impact négatif sur la compatibilité avec des outils de conteneurs comme Podman.
Nous recommandons fortement d'abord d'activer SystemD, puis d'installer Nix comme d'habitude:
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- installSi WSLG est activé, vous pouvez faire des choses comme ouvrir un Linux Firefox à partir de Windows sur PowerShell:
wsl nix run nixpkgs # firefox Pour utiliser certaines applications OpenGL, vous pouvez utiliser nixGL (notez que certaines applications, telles que blender , peuvent ne pas fonctionner):
wsl nix run -- impure github:guibou / nixGL nix run nixpkgs # obs-studio Si l'activation Systemd n'est pas une option, passez --init none à la fin de la commande:
Avertissement
Lorsque --init none est utilisé, seuls root ou les utilisateurs qui peuvent élever aux privilèges root peuvent exécuter NIX:
sudo -i nix run nixpkgs#hellocurl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- install linux --init none Si vous souhaitez contourner l'étape de confirmation, vous pouvez appliquer l'indicateur --no-confirm :
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- install --no-confirmCeci est particulièrement utile lors de l'utilisation du programme d'installation dans des scripts non interactifs.
Les scripts d'installation NIX existants font du bon travail, mais ils sont difficiles à maintenir.
Des différences subtiles dans les implémentations et l'outil de shell utilisés dans les scripts rendent difficile de modifier des modifications significatives de l'installateur.
Le programme d'installation de NIX déterminé a de nombreux avantages par rapport à ces options:
useradd ) si nécessairePATH Il a été merveilleux de collaborer avec d'autres participants au groupe de travail d'installation de Nix et des membres de la communauté plus large. Le groupe de travail maintient une fourche appartenant à des fondations du programme d'installation.
Bien que déterminer le programme d'installation de NIX essaie de fournir une expérience complète et irréquiche, il existe malheureusement certains problèmes qui peuvent nécessiter des choix d'intervention manuelle ou d'opérateur.
Si Nix était auparavant désinstallé sans désinstaller Nix-Darwin en premier, vous pouvez ressentir des erreurs similaires à ceci:
nix shell nixpkgs#curl
error: unable to download ' https://cache.nixos.org/g8bqlgmpa4yg601w561qy2n576i6g0vh.narinfo ' : Problem with the SSL CA cert (path ? access rights ? ) (77) Cela se produit parce que nix-darwin prévoit un service org.nixos.activate-system qui reste après la désinstallation de Nix. Le service org.nixos.activate-system dans cet état interagit avec le NIX nouvellement installé et modifie les certificats SSL qu'il utilise pour être un lien de symbolique cassé.
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 Le problème est aggravé par la question que le non-staleur nix-darwin ne fonctionnera pas après la désinstallation de Nix, car il utilise NIX et nécessite une connectivité réseau.
Il est possible de résoudre cette situation en supprimant le service org.nixos.activate-system et les 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.crtExécutez à nouveau l'installateur et cela devrait fonctionner.
Les versions à jour de l'installateur refuseront de désinstaller jusqu'à ce que Nix-Darwin soit désinstallé en premier, aidant à atténuer ce problème.
Puisque vous utilisez l'installateur pour installer Nix sur les systèmes sans NIX, la version par défaut est un binaire statique.
Pour construire un binaire Linux portable sur un système avec NIX:
# 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 "Sur 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 " Copiez ensuite result/bin/nix-installer sur la machine sur laquelle vous souhaitez l'exécuter. Vous pouvez également ajouter le programme d'installation à un système sans NIX à l'aide de la cargaison, car il n'y a pas de dépendances du système à craindre:
# 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 Pour rendre cette construction portable, passez l'option --target x86_64-unknown-linux-musl .
Note
Nous avons actuellement besoin --cfg tokio_unstable car nous utilisons les groupes de processus de Tokio, qui enveloppent les API std stables, mais sont instables en raison de celle-ci nécessitant une bosse MSRV.
Avertissement
L'utilisation de déterminer le programme d'installation de NIX comme bibliothèque de rouille est toujours expérimentale. Cette fonctionnalité devrait être supprimée à l'avenir sans défenseur. Si vous utilisez cela, veuillez nous le faire savoir et nous pouvons fournir un chemin de stabilisation.
Ajoutez la bibliothèque nix-installer à vos dépendances:
cargo add nix-installer Si vous construisez une CLI, consultez l'indicateur de fonction cli pour l'intégration clap .
Vous devrez également modifier votre .cargo/config.toml pour utiliser tokio_unstable car nous utilisons les groupes de processus de Tokio, qui enveloppent des API std stables, mais sont instables en raison de ce qui nécessite une bosse de MSRV:
# .cargo/config.toml
[ build ]
rustflags =[ " --cfg " , " tokio_unstable " ] Vous devrez également définir la variable d'environnement NIX_INSTALLER_TARBALL_PATH pour pointer un tarball d'installation NIX adapté à la cible, comme NIX-2.21.2-aarch64-darwin.tar.xz. Le contenu est intégré dans le binaire résultant au lieu de télécharger au moment de l'installation.
Ensuite, il est possible de revoir la documentation:
cargo doc --open -p nix-installer La documentation est également disponible via nix build :
nix build github:DeterminateSystems/nix-installer#nix-installer.doc
firefox result-doc/nix-installer/index.htmlVous pouvez épingler une version spécifique de l'installateur NIX déterminé en modifiant l'URL de téléchargement. Voici un exemple:
VERSION= " v0.6.0 "
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix/tag/ ${VERSION} |
sh -s -- installPour découvrir quelles versions sont disponibles ou télécharger les binaires pour toute version, vérifiez les versions GitHub.
Vous pouvez télécharger et utiliser ces versions directement. Voici un exemple:
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 installChaque version d'installation a une version NIX prise en charge associée - Si vous épinglez la version d'installation, vous vous épinglerez également indirectement à la version NIX associée.
Vous pouvez également remplacer la version NIX à l'aide de --nix-package-url ou NIX_INSTALLER_NIX_PACKAGE_URL= mais cela n'est pas recommandé car nous n'avons pas testé cette combinaison. Voici quelques exemples d'URL du package NIX, y compris la version Nix, le système d'exploitation et l'architecture:
Différent des scripts d'installation NIX en amont:
nix.conf :nix-command et flakes sont activéesbash-prompt-prefix est définiauto-optimise-store est défini sur true (sur Linux uniquement)always-allow-substitutes sont définis sur trueextra-nix-path est défini sur nixpkgs=flake:nixpkgsmax-jobs est défini sur autoupgrade-nix-store-path-url est défini sur https://install.determinate.systems/nix-upgrade/stable/universal , pour éviter les rétrogradations non intentionnelles./nix/receipt.json ainsi qu'une copie de l'installation binaire AT /nix/nix-installernix-channel --update jour n'est pas exécutée, ~/.nix-channels n'est pas provisiblessl-cert-file est défini dans /etc/nix/nix.conf Si l'argument ssl-cert-file est utilisé. Déterminer NIX Installateur fournit une variété de paramètres de configuration, certains généraux et certains par commun. Tous les paramètres sont disponibles via des drapeaux ou via NIX_INSTALLER_* Variables d'environnement.
Ces paramètres sont disponibles pour toutes les commandes.
| Drapeau (s) | Description | Par défaut (le cas échéant) | Variable d'environnement |
|---|---|---|---|
--log-directives | Directives de traçage délimitées par la virgule | NIX_INSTALLER_LOG_DIRECTIVES | |
--logger | Quel enregistreur à utiliser (les options sont compact , full , pretty et json ) | compact | NIX_INSTALLER_LOGGER |
--verbose | Activer les journaux de débogage, ( -vv pour la trace) | false | NIX_INSTALLER_VERBOSITY |
nix-installer install )| Drapeau (s) | Description | Par défaut (le cas échéant) | Variable d'environnement |
|---|---|---|---|
--determinate | Installations déterminées | NIX_INSTALLER_DETERMINATE | |
--diagnostic-attribution | Reliez le diagnostic d'installation à une valeur spécifique | NIX_INSTALLER_DIAGNOSTIC_ATTRIBUTION | |
--diagnostic-endpoint | L'URL ou le chemin du fichier pour un diagnostic d'installation à envoyer | https://install.determinate.systems/nix/diagnostic | NIX_INSTALLER_DIAGNOSTIC_ENDPOINT |
--explain | Fournir une explication des modifications que le processus d'installation apportera à votre système | false | NIX_INSTALLER_EXPLAIN |
--extra-conf | Lignes de configuration supplémentaires pour /etc/nix.conf | NIX_INSTALLER_EXTRA_CONF | |
--force | Si l'installateur doit recréer de force les fichiers, il trouve existant | false | NIX_INSTALLER_FORCE |
--init | Quel système init configurer (si --init none Nix sera uniquement root) | launchd (macOS), systemd (Linux) | NIX_INSTALLER_INIT |
--nix-build-group-id | Le groupe Nix Build Group GID | 350 (macOS), 30000 (Linux) | NIX_INSTALLER_NIX_BUILD_GROUP_ID |
--nix-build-group-name | Le nom du groupe Nix Build | nixbld | NIX_INSTALLER_NIX_BUILD_GROUP_NAME |
--nix-build-user-count | Le nombre d'utilisateurs de construction à créer | 32 | NIX_INSTALLER_NIX_BUILD_USER_COUNT |
--nix-build-user-id-base | La base d'utilisateurs NIX Build UID (ascendant) (Remarque: Le premier UID sera cette base + 1) | 350 (macOS), 30000 (Linux) | NIX_INSTALLER_NIX_BUILD_USER_ID_BASE |
--nix-build-user-prefix | Le préfixe d'utilisateur NIX Build (les numéros d'utilisateur seront postfixés) | _nixbld (macOS), nixbld (Linux) | NIX_INSTALLER_NIX_BUILD_USER_PREFIX |
--nix-package-url | L'URL du package Nix | NIX_INSTALLER_NIX_PACKAGE_URL | |
--no-confirm | Exécuter une installation sans nécessiter une confirmation de l'utilisateur explicite | false | NIX_INSTALLER_NO_CONFIRM |
--no-modify-profile | Modifiez le profil utilisateur pour charger automatiquement Nix. | true | NIX_INSTALLER_MODIFY_PROFILE |
--proxy | Le proxy à utiliser (le cas échéant); Les bases de proxy valides sont https://$URL , http://$URL et socks5://$URL | NIX_INSTALLER_PROXY | |
--ssl-cert-file | Un certificat SSL à utiliser (le cas échéant); Utilisé pour récupérer Nix et définir ssl-cert-file dans /etc/nix/nix.conf | NIX_INSTALLER_SSL_CERT_FILE | |
--no-start-daemon | Démarrez le démon (sinon --init none ) | true | NIX_INSTALLER_START_DAEMON |
Vous pouvez également spécifier un planificateur avec le premier argument:
nix-installer install < plan > Alternativement, vous pouvez utiliser la variable d'environnement NIX_INSTALLER_PLAN :
NIX_INSTALLER_PLAN= < plan > nix-installer installnix-installer uninstall )| Drapeau (s) | Description | Par défaut (le cas échéant) | Variable d'environnement |
|---|---|---|---|
--explain | Fournir une explication des modifications que le processus d'installation apportera à votre système | false | NIX_INSTALLER_EXPLAIN |
--no-confirm | Exécuter une installation sans nécessiter une confirmation de l'utilisateur explicite | false | NIX_INSTALLER_NO_CONFIRM |
Vous pouvez également spécifier un reçu d'installation comme premier argument (la valeur par défaut est /nix/receipt.json ):
nix-installer uninstall /path/to/receipt.jsonnix-installer plan )| Drapeau (s) | Description | Par défaut (le cas échéant) | Variable d'environnement |
|---|---|---|---|
--out-file | Où écrire le plan généré (au format JSON) | /dev/stdout | NIX_INSTALLER_PLAN_OUT_FILE |
nix-installer repair )| Drapeau (s) | Description | Par défaut (le cas échéant) | Variable d'environnement |
|---|---|---|---|
--no-confirm | Exécuter une installation sans nécessiter une confirmation de l'utilisateur explicite | false | NIX_INSTALLER_NO_CONFIRM |
nix-installer self-test ) nix-installer self-test ne prend que des paramètres généraux.
L'objectif de déterminer le programme d'installation NIX est d'installer avec succès et correctement NIX. La curl | sh Pipeline et l'installateur collectionne un peu d'informations de diagnostic pour nous aider à rendre cela vrai.
Voici un tableau des données de diagnostic que nous collectons:
| Champ | Utiliser |
|---|---|
version | La version de déterminer le programme d'installation NIX. |
planner | La méthode d'installation NIX ( linux , macos , steam-deck ) |
configured_settings | Les noms des paramètres du planificateur qui ont été modifiés à partir de leur défaut. N'inclut pas les valeurs. |
os_name | Le système d'exploitation en cours d'exécution. |
os_version | La version du système d'exploitation. |
triple | L'architecture / système d'exploitation / format binaire de votre système. |
is_ci | Si l'installateur est utilisé dans CI (par exemple les actions GitHub). |
action | Install ou Uninstall . |
status | Un de Success , Failure , Pending ou Cancelled . |
attribution | Facultativement défini par l'utilisateur, associez les diagnostics de cette exécution à la valeur fournie. |
failure_chain | Une description de haut niveau de l'échec, le cas échéant. Par exemple: Command("diskutil") si la diskutil list de commande a échoué. |
Pour désactiver les rapports de diagnostic, définissez l'URL de diagnostic sur une chaîne vide en passant --diagnostic-endpoint="" ou en définissant NIX_INSTALLER_DIAGNOSTIC_ENDPOINT="" .
Vous pouvez lire la politique de confidentialité complète pour déterminer les systèmes, les créateurs de déterminer le programme d'installation de NIX, ici.