O Deterinate Nix Installer é uma maneira rápida, amigável e confiável de instalar e gerenciar o NIX em todos os lugares, incluindo macOS, linux, subsistema Windows para Linux (WSL), Selinux, o deck de vapor de válvulas e muito mais. Ele instala o Nix com flocos ativados por padrão, oferece suporte para desinstalar perfeitamente o NIX, permite que o NIX sobreviva a atualizações do MacOS e muito mais.
Esta liner é a maneira mais rápida de começar em qualquer sistema suportado:
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- installDica
Para instalar o determinado usando o instalador, consulte as instruções abaixo.
O Deterinate Nix Installer concluiu com êxito mais de 7 milhões de instalações em vários ambientes, incluindo ações do GitHub e Gitlab:
| Plataforma | Multi User? | apenas root | Maturidade |
|---|---|---|---|
Linux ( x86_64 e aarch64 ) | ✓ (via Systemd) | ✓ | Estável |
MacOS ( x86_64 e aarch64 ) | ✓ | Estável (veja nota) | |
| Deck a vapor de válvulas (Steamos) | ✓ | Estável | |
Subsistema do Windows para Linux 2 (WSL2) ( x86_64 e aarch64 ) | ✓ (via Systemd) | ✓ | Estável |
| Contêineres de Podman Linux | ✓ (via Systemd) | ✓ | Estável |
| Docker Recipulações | ✓ | Estável |
Você pode instalar o Nix com o planejador padrão e as opções executando este script:
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- installPara baixar um instalador específico da plataforma Binary Yourself:
curl -sL -o nix-installer https://install.determinate.systems/nix/nix-installer-x86_64-linux
chmod +x nix-installer
./nix-installer Isso instalaria o NIX em um sistema x86_64-linux mas você pode substituí-lo pelo sistema de sua escolha.
Se você estiver no macOS (mas não nix-darwin) ou Linux (mas não nixos), pode instalar o determinado usando o determinante instalador do nix adicionando o sinalizador --determinate :
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- install --determinateDica
Se você usar o Nix-Darwin ou o Nixos, recomendamos a instalação de determinados usando os módulos fornecidos pelo floco determinate .
Determinado é:
O Deterinate Nix Installer instala o Nix seguindo um plano feito por um planejador . Para revisar os planejadores disponíveis:
/nix/nix-installer install --helpOs planejadores têm suas próprias opções e padrões, compartilhando a maioria deles em comum. Para ver as opções para o Linux, por exemplo:
/nix/nix-installer install linux --helpVocê pode configurar planejadores usando variáveis de ambiente ou 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 as configurações do instalador abaixo para obter uma lista completa de opções.
Tendo problemas com o instalador? Consulte nosso guia de solução de problemas para ver se o seu problema está coberto.
Você pode atualizar o NIX para a versão atualmente recomendada do NIX, executando:
sudo -i nix upgrade-nixComo alternativa, você pode desinstalar e reinstalar com uma versão diferente do Deterinate Nix Installer.
Você pode remover o NIX instalado pelo Deterinate Nix Installer executando:
/nix/nix-installer uninstall Você pode instalar o NIX em ações do GitHub usando nix-installer-action . Aqui está um exemplo de configuração:
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 . Os corredores do GitLab CI geralmente são baseados no Docker e são executados como usuário root . Isso significa que systemd não está presente, então você precisa passar a opção --init none opção para o Planejador Linux.
Nos corredores do GitLab padrão, você pode instalar o nix usando esta configuração:
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
- helloSe você estiver usando corredores diferentes, o exemplo acima pode precisar ser ajustado.
Aviso
Quando --init none é usado, apenas root ou usuários que podem elevar a privilégios root podem executar o NIX:
sudo -i nix run nixpkgs#hello Se você não usar o Systemd, ainda pode instalar o Nix especificando explicitamente o plano linux e --init none :
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- install linux --init none Nos recipientes do Docker/Podman ou no WSL2, onde um init (como systemd ) não está presente, passe --init none .
Para contêineres (sem init):
Aviso
Quando --init none é usado, apenas root ou usuários que podem elevar a privilégios root podem executar o 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 contêineres com um init systemd:
# 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 Com algumas ferramentas de contêiner, como o Docker, você pode omitir sandbox = false . Omitir isso afetará negativamente a compatibilidade com ferramentas de contêiner como o Podman.
Recomendamos fortemente primeiro habilitar o Systemd e depois instalar o NIX normalmente:
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- installSe o WSLG estiver ativado, você pode fazer coisas como abrir um Firefox Linux do Windows no PowerShell:
wsl nix run nixpkgs # firefox Para usar alguns aplicativos OpenGL, você pode usar nixGL (observe que alguns aplicativos, como blender , podem não funcionar):
wsl nix run -- impure github:guibou / nixGL nix run nixpkgs # obs-studio Se a habilitação do Systemd não for uma opção, passe --init none no final do comando:
Aviso
Quando --init none é usado, apenas root ou usuários que podem elevar a privilégios root podem executar o NIX:
sudo -i nix run nixpkgs#hellocurl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- install linux --init none Se você deseja ignorar a etapa de confirmação, pode aplicar a bandeira --no-confirm :
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix |
sh -s -- install --no-confirmIsso é especialmente útil ao usar o instalador em scripts não interativos.
Os scripts de instalação do Nix existentes fazem um bom trabalho, mas são difíceis de manter.
Diferenças sutis nas implementações e ferramentas do shell usadas nos scripts dificultam as alterações significativas no instalador.
O Deterinate Nix Installer tem inúmeras vantagens sobre essas opções:
useradd ) quando necessárioPATH Foi maravilhoso colaborar com outros participantes do grupo de trabalho do NIX instalador e membros da comunidade em geral. O grupo de trabalho mantém um garfo de propriedade da instalação.
Embora o Deterinate Nix Installer tenta fornecer uma experiência abrangente e ingrata, infelizmente existem alguns problemas que podem exigir opções de intervenção manual ou operador.
Se o NIX foi anteriormente desinstalado sem desinstalar o Nix-Darwin primeiro, você pode experimentar erros semelhantes a isso:
nix shell nixpkgs#curl
error: unable to download ' https://cache.nixos.org/g8bqlgmpa4yg601w561qy2n576i6g0vh.narinfo ' : Problem with the SSL CA cert (path ? access rights ? ) (77) Isso ocorre porque nix-darwin Provisiona um serviço org.nixos.activate-system que permanece após o NIX não é desinstalado. O serviço org.nixos.activate-system nesse estado interage com o recém-instalado Nix e altera os certificados SSL que ele usa para ser um symlink quebrado.
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 O problema é agravado pelo assunto de que o desinstalador nix-darwin não funcionará após a desinstalação do NIX, pois usa o NIX e requer conectividade de rede.
É possível resolver essa situação removendo o serviço org.nixos.activate-system e os 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.crtExecute o instalador novamente e ele deve funcionar.
As versões atualizadas do instalador se recusarão a desinstalar até que o Nix-Darwin seja desinstalado primeiro, ajudando a mitigar esse problema.
Como você usará o instalador para instalar o NIX em sistemas sem Nix, a compilação padrão é um binário estático.
Para construir um binário linux portátil em um sistema com 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 "No 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 " Em seguida, copie result/bin/nix-installer para a máquina em que você deseja executá-lo. Você também pode adicionar o instalador a um sistema sem Nix usando carga, pois não há dependências do sistema para se preocupar:
# 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 tornar isso portátil, passe a opção --target x86_64-unknown-linux-musl .
Observação
Atualmente, exigimos --cfg tokio_unstable À medida que utilizamos os grupos de processos de Tokio, que envolvem APIs estáveis std , mas é instável devido a ele exigindo um aumento no MSRV.
Aviso
O uso do instalador de nix determinado como uma biblioteca de ferrugem ainda é experimental. É provável que esse recurso seja removido no futuro sem um advogado. Se você estiver usando isso, informe -nos e podemos fornecer um caminho para a estabilização.
Adicione a biblioteca nix-installer às suas dependências:
cargo add nix-installer Se você estiver construindo uma CLI, consulte o sinalizador de recursos cli para obter integração clap .
Você também precisará editar seu .cargo/config.toml para usar tokio_unstable enquanto utilizamos os grupos de processos de Tokio, que envolvem APIs estáveis std , mas são instáveis devido a ele exigindo um aumento do MSRV:
# .cargo/config.toml
[ build ]
rustflags =[ " --cfg " , " tokio_unstable " ] Você também precisará definir a variável de ambiente NIX_INSTALLER_TARBALL_PATH para apontar para um tarball de instalação de nix apropriado para o destino, como o nix-2.21.2-aarch64-arwin.tar.xz. O conteúdo é incorporado no binário resultante em vez de baixado no horário de instalação.
Então é possível revisar a documentação:
cargo doc --open -p nix-installer A documentação também está disponível via nix build :
nix build github:DeterminateSystems/nix-installer#nix-installer.doc
firefox result-doc/nix-installer/index.htmlVocê pode definir uma versão específica do Deterinate Nix Installer modificando o URL de download. Aqui está um exemplo:
VERSION= " v0.6.0 "
curl --proto ' =https ' --tlsv1.2 -sSf -L https://install.determinate.systems/nix/tag/ ${VERSION} |
sh -s -- installPara descobrir quais versões estão disponíveis ou baixar os binários para qualquer lançamento, verifique os lançamentos do GitHub.
Você pode baixar e usar esses lançamentos diretamente. Aqui está um exemplo:
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 versão do instalador possui uma versão nix suportada associada - se você fixar a versão do instalador, você também indirta indiretamente a versão nix associada.
Você também pode substituir a versão nix usando --nix-package-url ou NIX_INSTALLER_NIX_PACKAGE_URL= mas isso não é recomendado, pois não testamos essa combinação. Aqui estão algum exemplo de URLs de pacote NIX, incluindo a versão Nix, OS e arquitetura:
Diferindo dos scripts do instalador nix upstream:
nix.conf :nix-command e flakes estão ativadosbash-prompt-prefix está definidoauto-optimise-store está definida como true (somente no Linux)always-allow-substitutes está definido como trueextra-nix-path está definido como nixpkgs=flake:nixpkgsmax-jobs está definido como autoupgrade-nix-store-path-url está definido como https://install.determinate.systems/nix-upgrade/stable/universal , para evitar rebaixamentos não intencionais./nix/receipt.json , bem como uma cópia do binário de instalação em /nix/nix-installernix-channel --update não é executado, ~/.nix-channels não é provisionadossl-cert-file é definido em /etc/nix/nix.conf se o argumento ssl-cert-file for usado. O Deterinate Nix Installer fornece uma variedade de definições de configuração, algumas gerais e outras por comando. Todas as configurações estão disponíveis via sinalizadores ou via NIX_INSTALLER_* variáveis de ambiente.
Essas configurações estão disponíveis para todos os comandos.
| Bandeira (s) | Descrição | Padrão (se houver) | Variável de ambiente |
|---|---|---|---|
--log-directives | Diretivas de rastreamento delimitadas por vírgula | NIX_INSTALLER_LOG_DIRECTIVES | |
--logger | Qual logger usar (as opções são compact , full , pretty e json ) | compact | NIX_INSTALLER_LOGGER |
--verbose | Ativar logs de depuração, ( -vv for rastreio) | false | NIX_INSTALLER_VERBOSITY |
nix-installer install )| Bandeira (s) | Descrição | Padrão (se houver) | Variável de ambiente |
|---|---|---|---|
--determinate | Instala determinado | NIX_INSTALLER_DETERMINATE | |
--diagnostic-attribution | Relacionar o diagnóstico de instalação a um valor específico | NIX_INSTALLER_DIAGNOSTIC_ATTRIBUTION | |
--diagnostic-endpoint | O caminho de URL ou arquivo para um diagnóstico de instalação a ser enviado | https://install.determinate.systems/nix/diagnostic | NIX_INSTALLER_DIAGNOSTIC_ENDPOINT |
--explain | Forneça uma explicação das alterações que o processo de instalação fará no seu sistema | false | NIX_INSTALLER_EXPLAIN |
--extra-conf | Linhas de configuração extras para /etc/nix.conf | NIX_INSTALLER_EXTRA_CONF | |
--force | Se o instalador deve recriar à força os arquivos que encontra | false | NIX_INSTALLER_FORCE |
--init | Qual sistema init para configurar (se --init none nix será somente raiz) | launchd (MacOS), systemd (Linux) | NIX_INSTALLER_INIT |
--nix-build-group-id | O grupo de construção nix gid | 350 (macOS), 30000 (Linux) | NIX_INSTALLER_NIX_BUILD_GROUP_ID |
--nix-build-group-name | O nome do grupo de construção nix | nixbld | NIX_INSTALLER_NIX_BUILD_GROUP_NAME |
--nix-build-user-count | O número de usuários de construção para criar | 32 | NIX_INSTALLER_NIX_BUILD_USER_COUNT |
--nix-build-user-id-base | A base do usuário do nix construir uid (ascendente) (Nota: o primeiro UID será esta base + 1) | 350 (macOS), 30000 (Linux) | NIX_INSTALLER_NIX_BUILD_USER_ID_BASE |
--nix-build-user-prefix | O prefixo do usuário do NIX Build (os números do usuário serão postos) | _nixbld (macOS), nixbld (linux) | NIX_INSTALLER_NIX_BUILD_USER_PREFIX |
--nix-package-url | O url do pacote nix | NIX_INSTALLER_NIX_PACKAGE_URL | |
--no-confirm | Execute a instalação sem exigir confirmação explícita do usuário | false | NIX_INSTALLER_NO_CONFIRM |
--no-modify-profile | Modifique o perfil do usuário para carregar automaticamente o nix. | true | NIX_INSTALLER_MODIFY_PROFILE |
--proxy | O proxy a ser usado (se houver); As bases de proxy válidas são https://$URL , http://$URL e socks5://$URL | NIX_INSTALLER_PROXY | |
--ssl-cert-file | Um certificado SSL para usar (se houver); Usado para buscar o nix e define ssl-cert-file in /etc/nix/nix.conf | NIX_INSTALLER_SSL_CERT_FILE | |
--no-start-daemon | Comece o daemon (se não --init none ) | true | NIX_INSTALLER_START_DAEMON |
Você também pode especificar um planejador com o primeiro argumento:
nix-installer install < plan > Como alternativa, você pode usar a variável de ambiente NIX_INSTALLER_PLAN :
NIX_INSTALLER_PLAN= < plan > nix-installer installnix-installer uninstall )| Bandeira (s) | Descrição | Padrão (se houver) | Variável de ambiente |
|---|---|---|---|
--explain | Forneça uma explicação das alterações que o processo de instalação fará no seu sistema | false | NIX_INSTALLER_EXPLAIN |
--no-confirm | Execute a instalação sem exigir confirmação explícita do usuário | false | NIX_INSTALLER_NO_CONFIRM |
Você também pode especificar um recibo de instalação como o primeiro argumento (o padrão é /nix/receipt.json ):
nix-installer uninstall /path/to/receipt.jsonnix-installer plan )| Bandeira (s) | Descrição | Padrão (se houver) | Variável de ambiente |
|---|---|---|---|
--out-file | Onde escrever o plano gerado (no formato JSON) | /dev/stdout | NIX_INSTALLER_PLAN_OUT_FILE |
nix-installer repair )| Bandeira (s) | Descrição | Padrão (se houver) | Variável de ambiente |
|---|---|---|---|
--no-confirm | Execute a instalação sem exigir confirmação explícita do usuário | false | NIX_INSTALLER_NO_CONFIRM |
nix-installer self-test ) nix-installer self-test leva apenas configurações gerais.
O objetivo do Deterinate Nix Installer é instalar com sucesso e corretamente o NIX. O curl | sh Pipeline e o instalador coleta um pouco de informações de diagnóstico para nos ajudar a tornar isso verdadeiro.
Aqui está uma tabela dos dados de diagnóstico que coletamos:
| Campo | Usar |
|---|---|
version | A versão do instalador determinado do nix. |
planner | O método de instalação do NIX ( linux , macos , steam-deck ) |
configured_settings | Os nomes das configurações do planejador que foram alteradas em seu padrão. Não inclui os valores. |
os_name | O sistema operacional em execução. |
os_version | A versão do sistema operacional. |
triple | O sistema de arquitetura/sistema operacional/formato binário do seu sistema. |
is_ci | Se o instalador está sendo usado no CI (por exemplo, ações do GitHub). |
action | Install ou Uninstall . |
status | Um de Success , Failure , Pending ou Cancelled . |
attribution | Opcionalmente definido pelo usuário, associe os diagnósticos desta execução ao valor fornecido. |
failure_chain | Uma descrição de alto nível de qual foi o fracasso, se houver. Por exemplo: Command("diskutil") se a diskutil list falhou. |
Para desativar os relatórios de diagnóstico, defina o URL de diagnóstico como uma string vazia passando --diagnostic-endpoint="" ou configurando NIX_INSTALLER_DIAGNOSTIC_ENDPOINT="" .
Você pode ler a política de privacidade completa para sistemas determinados, os criadores do instalador determinado do NIX, aqui.