Nix - o gerenciador de pacotes puramente funcional para Linux


Nix é um sistema de gerenciamento de pacotes poderoso e puramente funcional projetado para gerenciamento de pacotes confiável e reproduzível, lançado sob os termos da GNU LGPLv2.1. É o principal sistema de gerenciamento de pacotes no NixOS, uma distribuição Linux menos conhecida.

O Nix oferece atualizações e reversões atômicas, várias versões de instalação de pacote, gerenciamento de pacote multiusuário e configuração fácil de ambientes de construção para um pacote, independentemente de quais linguagens de programação e ferramentas um desenvolvedor está usando.

No Nix, os pacotes são construídos a partir de uma linguagem de pacote funcional chamada “expressões Nix”. Esta abordagem funcional para gerenciamento de pacotes garante que a instalação ou atualização de um pacote não pode quebrar outros pacotes.

Nix também tem suporte multiusuário, o que implica que usuários normais (ou não privilegiados) do sistema podem instalar pacotes com segurança e cada usuário é identificado por um perfil (uma coleção de pacotes na loja Nix que aparece no PATH do usuário).

No caso de um usuário ter instalado um pacote, se outro usuário tentar instalar o mesmo pacote, o pacote não será compilado ou baixado uma segunda vez.

Atualmente, é compatível com Linux (i686, x86_64) e Mac OS X (x86_64). No entanto, é bastante portátil, você pode experimentá-lo na maioria das plataformas que suportam threads POSIX e têm um compilador C ++ 11.

Neste artigo, mostraremos como instalar (no modo multiusuário) e usar o gerenciador de pacotes Nix no Linux. Discutiremos algumas das tarefas básicas de gerenciamento de pacotes em relação às ferramentas comumente usadas.

Como instalar o Nix Package Manager no Linux

Instalaremos a versão mais recente do Nix (v2.1.3 no momento da escrita) no modo multiusuário. Felizmente, existe um script de instalação pronto e preparado que você pode executar em seu shell como um usuário normal usando o seguinte comando curl em seu sistema.

$ sh <(curl https://nixos.org/nix/install) --daemon

Executar o comando acima fará o download do tarball binário nix mais recente e você chegará à tela de instalação multiusuário do nix, conforme mostrado na captura de tela.

Para ver uma lista detalhada do que acontecerá durante o processo de instalação, digite y e pressione Enter. Se você estiver satisfeito e pronto para continuar, digite y e pressione Enter.

O script invocará o comando sudo quantas vezes forem necessárias. Você precisa permitir que ele use o sudo respondendo y e pressionando Enter.

O instalador executará alguns testes e gerará um relatório de configuração Nix, criará usuários de construção entre os IDs de usuário 30001 e 30032 e um grupo com o ID de grupo 30000. Digite y para continuar quando solicitado. Ele irá configurar os grupos de construção para os diferentes usuários de construção, fazer a estrutura de diretório básica do Nix.

Ele modificará o arquivo/etc/bashrc (e/etc/zshrc para o zsh) se eles existirem. Observe que ele primeiro faz backup dos arquivos mencionados com uma extensão .backup-before-nix e o instalador também cria o arquivo /etc/profile.d/nix.sh.

O instalador também configurará o serviço nix-daemon e o serviço de soquete nix-daemon, carregará a unidade systemd para nix-daemon e iniciará os dois serviços mencionados acima.

Assim que a instalação for concluída, você precisa abrir uma nova janela de terminal para começar a usar o Nix. Como alternativa, feche e reabra seu shell para aplicar as alterações recentes. Em seguida, forneça o arquivo /etc/profile.d/nix.sh (porque não é um arquivo de inicialização de shell, abrir um novo shell não irá fornecê-lo).

$ source /etc/profile.d/nix.sh

Em seguida, execute o seguinte comando para baixar alguns caminhos do site oficial do projeto, necessários para o funcionamento do Nix. Depois que todos os caminhos forem baixados e copiados para os locais corretos, você verá um resumo do tipo de instalação do sistema e do nix conforme mostrado na imagem.

$ nix-shell -p nix-info --run "nix-info -m"

Como usar o gerenciador de pacotes Nix no Linux

No Nix, o gerenciamento de pacotes é feito pelo utilitário nix-env. É usado para instalar, atualizar e remover/apagar pacotes e para consultar quais pacotes estão instalados ou estão disponíveis para instalação.

Todos os pacotes estão localizados em um canal Nix, que é uma URL que aponta para um repositório que compreende coleções de expressões Nix e um ponteiro para um cache binário.

O canal padrão é Nixpkgs e a lista de canais assinados é armazenada em ~/.nix-channels, você pode listá-los usando o seguinte comando (sem saída significa sem canais).

$ nix-channel --list

Para adicionar o canal Nix, use o seguinte comando.

$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable

Antes de instalar qualquer pacote, comece atualizando o canal Nix; isso é semelhante a executar o apt update no gerenciador de pacotes APT.

$ nix-channel --update

Você pode consultar quais pacotes estão disponíveis para instalação usando o seguinte comando.

$ nix-env -qa

Neste exemplo, instalaremos o servidor Apache Tomcat usando o comando anterior em conjunto com grep para descobrir se o pacote está disponível para instalação conforme mostrado.

$ nix-env -qa | grep "apache-tomcat"

Para instalar um pacote, use o seguinte comando especificando a versão do pacote, por exemplo apache-tomcat-9.0.2.

$ nix-env -i apache-tomcat-9.0.2

No sistema local, o Nix armazena pacotes no armazenamento Nix, que por padrão é o diretório/nix/store, onde cada pacote tem seu próprio subdiretório exclusivo. Por exemplo, os pacotes apache-tomcat são armazenados em:

/nix/store/95gmgnxlrcpkhlm00fa5ax8kvd6189py-apache-tomcat-9.0.2

Nesse caminho, os caracteres aleatórios 95gmgnxlrcpkhlm00fa5ax8kvd6189py são um identificador exclusivo do pacote que leva em consideração todas as suas dependências.

Você pode listar os pacotes instalados com o seguinte comando.

$ nix-env -q

Para atualizar o pacote apache-tomcat, você pode usar a opção de atualização -u como mostrado.

$ nix-env -u apache-tomcat

Se você deseja remover/apagar o apache-tomcat, use o sinalizador -e . Aqui, um pacote não é apagado do sistema imediatamente, apenas fica sem uso. Isso é útil porque você deseja fazer uma reversão ou pode estar nos perfis de outros usuários.

$ nix-env -e apache-tomcat

Depois de remover um pacote, você pode fazer alguma coleta de lixo com o utilitário nix-collect-garbage.

$ nix-collect-garbage

Como remover o gerenciador de pacotes Nix no Linux

Para desinstalar o Nix, remova todos os arquivos relacionados ao nix de uma vez.

$ sudo rm -rf /etc/profile/nix.sh /etc/nix /nix ~root/.nix-profile ~root/.nix-defexpr ~root/.nix-channels ~/.nix-profile ~/.nix-defexpr ~/.nix-channels

Em sistemas com systemd, execute os seguintes comandos para parar todos os serviços relacionados ao nix e desabilitá-los.

$ sudo systemctl stop nix-daemon.socket
$ sudo systemctl stop nix-daemon.service
$ sudo systemctl disable nix-daemon.socket
$ sudo systemctl disable nix-daemon.service
$ sudo systemctl daemon-reload

Além disso, você precisa remover todas as referências ao Nix nestes arquivos:/etc/profile,/etc/bashrc e/etc/zshrc.

Para obter mais informações, consulte as páginas de manual dos utilitários acima que examinamos.

$ man nix-channel
$ man nix-env

Você pode encontrar a documentação do Nix Package Manager no site do projeto: https://nixos.org/nix/.

Nix é um gerenciador de pacotes puramente funcional projetado para gerenciamento de pacotes confiável e reproduzível. Ele fornece um conceito interessante de gerenciamento de pacotes, muito diferente das ferramentas comumente usadas no Linux, como YUM, APT e muitos outros.

Neste artigo, mostramos como instalar o nix no modo multiusuário e discutimos como fazer o gerenciamento de pacotes com o Nix. Compartilhe suas idéias conosco ou faça perguntas por meio do formulário de comentários abaixo. Por último, em um próximo artigo, explicaremos mais comandos de gerenciamento de pacotes Nix. Até então, fique conectado.