El instalador NIX determinado es una forma rápida, amigable y confiable de instalar y administrar NIX en todas partes, incluidos MacOS, Linux, Subsistema de Windows para Linux (WSL), Selinux, la cubierta de vapor de la válvula y más. Instala NIX con copos habilitados de forma predeterminada, ofrece soporte para desinstalar a NIX sin problemas, permite que NIX sobrevive a las actualizaciones de macOS y mucho más.
Esta frase es la forma más rápida de comenzar en cualquier sistema compatible:
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- installConsejo
Para instalar determinado con el instalador, consulte las instrucciones a continuación.
El instalador NIX determinado ha completado con éxito más de 7 millones de instalaciones en varios entornos, incluidas las acciones de GitHub y Gitlab:
| Plataforma | ¿Multi usuarios? | solo root | Madurez |
|---|---|---|---|
Linux ( x86_64 y aarch64 ) | ✓ (a través de Systemd) | ✓ | Estable |
MacOS ( x86_64 y aarch64 ) | ✓ | Estable (ver nota) | |
| Cubierta de vapor de válvula (vapor) | ✓ | Estable | |
Subsistema de Windows para Linux 2 (WSL2) ( x86_64 y aarch64 ) | ✓ (a través de Systemd) | ✓ | Estable |
| Contenedores de Podman Linux | ✓ (a través de Systemd) | ✓ | Estable |
| Contenedores Docker | ✓ | Estable |
Puede instalar NIX con el planificador y las opciones predeterminadas ejecutando este script:
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- installPara descargar un instalador de plataforma binario usted mismo:
curl -sL -o nix-installer https://install.determinate.systems/nix/nix-installer-x86_64-linux
chmod +x nix-installer
./nix-installer Esto instalaría NIX en un sistema x86_64-linux , pero puede reemplazarlo con el sistema de su elección.
Si está en MacOS (pero no Nix-Darwin) o Linux (pero no NIXOS), puede instalar determinado usando el instalador NIX determinado agregando el indicador --determinate :
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- install --determinateConsejo
Si usa Nix-Darwin o Nixos, le recomendamos instalar Determinate utilizando módulos proporcionados por la escama determinate .
Determinado es:
El instalador determinado de NIX instala NIX siguiendo un plan hecho por un planificador . Para revisar los planificadores disponibles:
/nix/nix-installer install --helpLos planificadores tienen sus propias opciones y valores predeterminados, compartiendo la mayoría de ellos en común. Para ver las opciones para Linux, por ejemplo:
/nix/nix-installer install linux --helpPuede configurar planificadores utilizando variables de entorno o argumentos de comando:
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 4000Consulte la configuración del instalador a continuación para obtener una lista completa de opciones.
¿Tiene problemas con el instalador? Consulte nuestra guía de solución de problemas para ver si su problema está cubierto.
Puede actualizar NIX a nuestra versión actualmente recomendada de NIX ejecutando:
sudo -i nix upgrade-nixAlternativamente, puede desinstalar y reinstalar con una versión diferente del instalador NIX determinado.
Puede eliminar NIX instalado por el instalador NIX determinado ejecutando:
/nix/nix-installer uninstall Puede instalar NIX en acciones de GitHub utilizando nix-installer-action . Aquí hay una configuración de ejemplo:
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 . Los corredores GITLAB CI suelen estar basados en Docker y se ejecutan como el usuario root . Esto significa que systemd no está presente, por lo que debe pasar la opción --init none al planificador de Linux.
En los corredores GITLAB predeterminados, puede instalar NIX usando esta configuración:
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 está utilizando diferentes corredores, es posible que deba ajustar el ejemplo anterior.
Advertencia
Cuando se usa --init none , solo root o los usuarios que pueden elevar a los privilegios root pueden ejecutar NIX:
sudo -i nix run nixpkgs#hello Si no usa SystemD, aún puede instalar NIX especificando explícitamente el plan linux y --init none :
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- install linux --init none En los contenedores Docker/Podman o las instancias WSL2 donde no está presente un init (como systemd ), no pase --init none .
Para contenedores (sin init):
Advertencia
Cuando se usa --init none , solo root o los usuarios que pueden elevar a los privilegios root pueden ejecutar 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-nixPara contenedores con un sistema 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 Con algunas herramientas de contenedores, como Docker, puede omitir sandbox = false . Omitir esto afectará negativamente la compatibilidad con herramientas de contenedores como Podman.
Recomendamos encarecidamente habilitar primero Systemd y luego instalar NIX como normal:
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- installSi WSLG está habilitado, puede hacer cosas como abrir un Linux Firefox desde Windows en PowerShell:
wsl nix run nixpkgs # firefox Para usar algunas aplicaciones OpenGL, puede usar nixGL (tenga en cuenta que algunas aplicaciones, como blender , pueden no funcionar):
wsl nix run -- impure github:guibou / nixGL nix run nixpkgs # obs-studio Si habilitar SystemD no es una opción, no pase --init none al final del comando:
Advertencia
Cuando se usa --init none , solo root o los usuarios que pueden elevar a los privilegios root pueden ejecutar 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 desea evitar el paso de confirmación, puede aplicar el indicador --no-confirm :
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- install --no-confirmEsto es especialmente útil cuando se usa el instalador en scripts no interactivos.
Los scripts de instalación de NIX existentes hacen un buen trabajo, pero son difíciles de mantener.
Las diferencias sutiles en las implementaciones y la herramienta de shell utilizadas en los scripts hacen que sea difícil hacer cambios significativos en el instalador.
El instalador NIX determinado tiene numerosas ventajas sobre estas opciones:
useradd ) cuando es necesarioPATH Ha sido maravilloso colaborar con otros participantes en el grupo de trabajo de Nix Installer y miembros de la comunidad en general. El grupo de trabajo mantiene una bifurcación fundamental del instalador.
Si bien el instalador NIX determinado intenta proporcionar una experiencia integral e inquebrantable, desafortunadamente hay algunos problemas que pueden requerir la intervención manual u opciones de operador.
Si Nix se desinstaló anteriormente sin desinstalar primero Nix-Darwin, puede experimentar errores similares a esto:
nix shell nixpkgs#curl
error: unable to download ' https://cache.nixos.org/g8bqlgmpa4yg601w561qy2n576i6g0vh.narinfo ' : Problem with the SSL CA cert (path ? access rights ? ) (77) Esto ocurre porque nix-darwin disposiciones un servicio org.nixos.activate-system que permanece después de que NIX no está instalado. El servicio org.nixos.activate-system en este estado interactúa con el NIX recién instalado y cambia los certificados SSL que utiliza para ser un enlace simbólico roto.
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 El problema se ve agravado por el asunto de que el desinstalador nix-darwin no funcionará después de desinstalar NIX, ya que usa NIX y requiere conectividad de red.
Es posible resolver esta situación eliminando el servicio org.nixos.activate-system y los 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.crtEjecute el instalador nuevamente y debería funcionar.
Las versiones actualizadas del instalador se negarán a desinstalar hasta que Nix-Darwin se desinstale primero, ayudando a mitigar este problema.
Dado que usará el instalador para instalar NIX en sistemas sin NIX, la compilación predeterminada es un binario estático.
Para construir un binario de Linux portátil en un sistema con 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 "En 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 " Luego copie result/bin/nix-installer a la máquina en la que desea ejecutarla. También puede agregar el instalador a un sistema sin NIX con carga, ya que no hay dependencias del sistema de las que preocuparse:
# 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 Para que esta compilación sea portátil, pase la opción --target x86_64-unknown-linux-musl .
Nota
Actualmente requerimos --cfg tokio_unstable ya que utilizamos los grupos de procesos de Tokio, que envuelven API std estables, pero son inestables debido a que requiere un golpe MSRV.
Advertencia
El uso del instalador NIX determinado como una biblioteca de óxido sigue siendo experimental. Es probable que esta característica se elimine en el futuro sin un defensor. Si está utilizando esto, háganoslo saber y podemos proporcionar una ruta para la estabilización.
Agregue la biblioteca nix-installer a sus dependencias:
cargo add nix-installer Si está construyendo una CLI, consulte el indicador de características cli para la integración clap .
También necesitará editar su .cargo/config.toml para usar tokio_unstable mientras utilizamos los grupos de procesos de Tokio, que envuelven API std estables, pero son inestables debido a que requiere un bulto MSRV:
# .cargo/config.toml
[ build ]
rustflags =[ " --cfg " , " tokio_unstable " ] También deberá establecer el entorno NIX_INSTALLER_TARBALL_PATH variable para apuntar a un tarball de instalación NIX apropiado para el objetivo, como NIX-2.21.2-AARCH64-DARWIN.TAR.XZ. El contenido está integrado en el binario resultante en lugar de descargarse en el momento de la instalación.
Entonces es posible revisar la documentación:
cargo doc --open -p nix-installer La documentación también está disponible a través de nix build :
nix build github:DeterminateSystems/nix-installer#nix-installer.doc
firefox result-doc/nix-installer/index.htmlPuede fijar una versión específica de Detetinate Nix Installer modificando la URL de descarga. Aquí hay un ejemplo:
VERSION= " v0.6.0 "
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix/tag/ ${VERSION} |
sh -s -- installPara descubrir qué versiones están disponibles, o descargar los binarios para cualquier lanzamiento, consulte los lanzamientos de GitHub.
Puede descargar y usar estos lanzamientos directamente. Aquí hay un ejemplo:
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 installCada versión del instalador tiene una versión NIX compatible asociada: si fija la versión del instalador, también indirectamente fijará a la versión NIX asociada.
También puede anular la versión NIX usando --nix-package-url o NIX_INSTALLER_NIX_PACKAGE_URL= Pero no se recomienda hacer esto ya que no hemos probado esa combinación. Aquí hay algún ejemplo de URL de paquete NIX, incluidas la versión Nix, el sistema operativo y la arquitectura:
Diferir a los scripts de instalador NIX aguas arriba:
nix.conf :nix-command and flakes están habilitadosbash-prompt-prefix está configuradoauto-optimise-store se establece en true (solo en Linux)always-allow-substitutes está configurado en trueextra-nix-path está configurado en nixpkgs=flake:nixpkgsmax-jobs está configurado como autoupgrade-nix-store-path-url se establece en https://install.determinate.systems/nix-upgrade/stable/universal , para evitar rebajas no intencionales./nix/receipt.json , así como una copia del binario de instalación AT /nix/nix-installernix-channel --update no se ejecuta, ~/.nix-channels no está provistossl-cert-file está configurado en /etc/nix/nix.conf si se usa el argumento ssl-cert-file . El instalador NIX determinado proporciona una variedad de configuraciones de configuración, algunas generales y otras por comando. Todas las configuraciones están disponibles a través de FLAGS o a través de variables de entorno NIX_INSTALLER_* .
Estas configuraciones están disponibles para todos los comandos.
| Bandera (s) | Descripción | Predeterminado (si corresponde) | Variable de entorno |
|---|---|---|---|
--log-directives | Directivas de rastreo delimitadas por coma | NIX_INSTALLER_LOG_DIRECTIVES | |
--logger | Qué registrador usar (las opciones son compact , full , pretty y json ) | compact | NIX_INSTALLER_LOGGER |
--verbose | Habilitar registros de depuración, ( -vv para traza) | false | NIX_INSTALLER_VERBOSITY |
nix-installer install )| Bandera (s) | Descripción | Predeterminado (si corresponde) | Variable de entorno |
|---|---|---|---|
--determinate | Instalaciones determinadas | NIX_INSTALLER_DETERMINATE | |
--diagnostic-attribution | Relacionar el diagnóstico de instalación con un valor específico | NIX_INSTALLER_DIAGNOSTIC_ATTRIBUTION | |
--diagnostic-endpoint | La ruta de URL o archivo para que se envíe un diagnóstico de instalación | https://install.determinate.systems/nix/diagnostic | NIX_INSTALLER_DIAGNOSTIC_ENDPOINT |
--explain | Proporcione una explicación de los cambios que el proceso de instalación hará a su sistema | false | NIX_INSTALLER_EXPLAIN |
--extra-conf | Líneas de configuración adicionales para /etc/nix.conf | NIX_INSTALLER_EXTRA_CONF | |
--force | Si el instalador debe recrear por la fuerza los archivos que encuentra existente | false | NIX_INSTALLER_FORCE |
--init | Qué sistema init para configurar (si --init none Nix será solo de raíz) | launchd (MacOS), systemd (Linux) | NIX_INSTALLER_INIT |
--nix-build-group-id | El grupo de construcción de Nix Gid | 350 (macOS), 30000 (Linux) | NIX_INSTALLER_NIX_BUILD_GROUP_ID |
--nix-build-group-name | El nombre del grupo de compilación Nix | nixbld | NIX_INSTALLER_NIX_BUILD_GROUP_NAME |
--nix-build-user-count | El número de usuarios de compilación para crear | 32 | NIX_INSTALLER_NIX_BUILD_USER_COUNT |
--nix-build-user-id-base | La base de usuarios de Nix Build (ascendente) (nota: el primer UID será esta base + 1) | 350 (macOS), 30000 (Linux) | NIX_INSTALLER_NIX_BUILD_USER_ID_BASE |
--nix-build-user-prefix | El prefijo de usuario de la compilación Nix (los números de usuario se postularán) | _nixbld (macOS), nixbld (Linux) | NIX_INSTALLER_NIX_BUILD_USER_PREFIX |
--nix-package-url | La URL del paquete Nix | NIX_INSTALLER_NIX_PACKAGE_URL | |
--no-confirm | Ejecutar la instalación sin requerir una confirmación explícita del usuario | false | NIX_INSTALLER_NO_CONFIRM |
--no-modify-profile | Modifique el perfil de usuario para cargar automáticamente NIX. | true | NIX_INSTALLER_MODIFY_PROFILE |
--proxy | El proxy para usar (si lo hay); Las bases proxy válidas son https://$URL , http://$URL y socks5://$URL | NIX_INSTALLER_PROXY | |
--ssl-cert-file | Un certificado SSL para usar (si lo hay); Usado para obtener NIX y establece ssl-cert-file en /etc/nix/nix.conf | NIX_INSTALLER_SSL_CERT_FILE | |
--no-start-daemon | Comience el demonio (si no --init none ) | true | NIX_INSTALLER_START_DAEMON |
También puede especificar un planificador con el primer argumento:
nix-installer install < plan > Alternativamente, puede usar la variable de entorno NIX_INSTALLER_PLAN :
NIX_INSTALLER_PLAN= < plan > nix-installer installnix-installer uninstall )| Bandera (s) | Descripción | Predeterminado (si corresponde) | Variable de entorno |
|---|---|---|---|
--explain | Proporcione una explicación de los cambios que el proceso de instalación hará a su sistema | false | NIX_INSTALLER_EXPLAIN |
--no-confirm | Ejecutar la instalación sin requerir una confirmación explícita del usuario | false | NIX_INSTALLER_NO_CONFIRM |
También puede especificar un recibo de instalación como el primer argumento (el valor predeterminado es /nix/receipt.json ):
nix-installer uninstall /path/to/receipt.jsonnix-installer plan )| Bandera (s) | Descripción | Predeterminado (si corresponde) | Variable de entorno |
|---|---|---|---|
--out-file | Dónde escribir el plan generado (en formato JSON) | /dev/stdout | NIX_INSTALLER_PLAN_OUT_FILE |
nix-installer repair )| Bandera (s) | Descripción | Predeterminado (si corresponde) | Variable de entorno |
|---|---|---|---|
--no-confirm | Ejecutar la instalación sin requerir una confirmación explícita del usuario | false | NIX_INSTALLER_NO_CONFIRM |
nix-installer self-test ) nix-installer self-test solo toma configuraciones generales.
El objetivo de determinar NIX Installer es instalar NIX de manera exitosa y correcta. El curl | sh Pipeline y el instalador recopilan un poco de información de diagnóstico para ayudarnos a hacer eso verdad.
Aquí hay una tabla de los datos de diagnóstico que recopilamos:
| Campo | Usar |
|---|---|
version | La versión del instalador NIX determinado. |
planner | El método de instalar Nix ( linux , macos , steam-deck ) |
configured_settings | Los nombres de la configuración del planificador que se cambiaron de su valor predeterminado. No incluye los valores. |
os_name | El sistema operativo en ejecución. |
os_version | La versión del sistema operativo. |
triple | La arquitectura/sistema operativo/formato binario de su sistema. |
is_ci | Si el instalador se está utilizando en CI (por ejemplo, acciones de GitHub). |
action | Install o Uninstall . |
status | Uno de Success , Failure , Pending o Cancelled . |
attribution | Opcionalmente definido por el usuario, asocie los diagnósticos de esta ejecución al valor proporcionado. |
failure_chain | Una descripción de alto nivel de cuál fue la falla, si la hubiera. Por ejemplo: Command("diskutil") si la diskutil list de comando falló. |
Para deshabilitar los informes de diagnóstico, establezca la URL de diagnóstico en una cadena vacía pasando --diagnostic-endpoint="" o configurando NIX_INSTALLER_DIAGNOSTIC_ENDPOINT="" .
Puede leer la política de privacidad completa para sistemas determinados, los creadores del instalador NIX determinado, aquí.