GNU Guix, parte 1/3 – Introdução

Last modified date

Comments: 4

Olá! Este é o primeiro de uma série de 3 posts sobre o gerenciador de pacotes GNU Guix. A parte 1 se dedica à introdução teórica, a parte 2 à parte prática e a parte 3 a como definir seus próprios pacotes. Vamos começar falando um pouco sobre o Guix.

O que é o Guix?

GNU Guix é um gerenciador de pacotes (pense como se fosse um APT) funcional e que faz parte do projeto GNU. Ele tem a característica de, além de conter apenas software livre, poder ser utilzado como gerenciador de pacotes auxiliar a uma outra distribuição GNU/Linux, como Debian.

Guix, GuixSD e GuixHPC

O desenvolvimento do Guix se dá em três partes:

  • Guix: o gerenciador de pacotes
  • GuixSD: uma distribuição GNU/Linux baseada no Guix.
  • GuixHPC: Ferramentas para aplicar o Guix em ambientes de computação de alto desempenho

O GuixSD é uma distribuição GNU que segue o padrão FSDG. É utilizada com o kernel Linux, porém existe uma iniciativa para ter uma versão completa com o kernel Hurd. No futuro, o GNU/Hurd será o sistema operacional GNU e GuixSD a distribuição do projeto GNU.

O Guix é independente da distribuição e pode ser instalado em qualquer sistema GNU/Linux, pois não utiliza o espaço global /usr para instalar pacotes, mas sim uma pasta separada localizada em /gnu/store, e a instalação é feita através de ligações dessa pasta para pastas do usuário.

Este post tratará apenas do Guix instalado em uma distribuição estrangeira (como Debian) para a finalidade do "utilizador final", do desenvolvedor de software e do administrador de sistemas.

Principais características

  • Funcional: pacotes são definidos como funções das entradas, sendo assim há a garantia de que o resultado da construção do pacote será sempre o mesmo, dado que as entradas sejam as mesmas. A função corresponde ao processo de construção, por exemplo: make; make install; make test

  • Gerenciamento sem privilégios: não é necessário permissão de administrador para instalar, remover ou alterar pacotes.

  • Atomicidade: as operações ou acontecem ou não acontecem, não há a possibilidade do gerenciador "quebrar" devido a uma queda de energia ou cancelamento da operação.

  • Perfis de usuário: Um perfil é uma pasta que contém [ligações de] pacotes da pasta /gnu/store. Um perfil padrão é criado em ~/.guix-profile/, mas o utilizador pode criar novos perfis independentes do principal contendo uma outra seleção de pacotes.

  • Roll-back: cada operação é registrada em um novo estado, criando uma nova "geração", e o estado de cada perfil pode voltar arbitrariamente a gerações anteriores.

  • Rolling release: pacotes são atualizados constantemente conforme novas versões do upstream são lançadas.

  • Atualizações parciais: pacotes podem ser atualizados individualmente enquanto outros podem ser mantidos em suas versões atuais.

  • Múltiplas versões de pacotes: múltiplas versões do mesmo pacote podem coexistir, desde que não estejam instaladas no mesmo perfil.

  • Canais: são como os repositórios. Há o canal oficial do Guix, mas cada utilizador pode criar seu próprio canal e também compartilhá-lo de forma independente do canal oficial.

  • Ambientes virtuais: pacotes podem ser disponibilizados para uso sem estarem instalados no sistema, apenas ajustando as variáveis de ambiente, e são descartados após o encerramento desse ambiente.

  • Contêineres: são processos que isolam do sistema operacional hospedeiro os recursos desejados (pode ser a rede, a tela, etc). Utiliza o recurso Linux Containers (LXC) do kernel Linux.

  • Substitutos: Guix é baseado em código fonte, mas permite baixar pacotes pré-construídos chamados de "substitutos".

Casos de uso

Versões recentes de software

Um dilema na escolha de uma distribuição GNU/Linux é utilizar distribuições estáveis com pacotes antigos, ou distribuições rolling release, com pacotes recentes mas menor estabilidade. Algumas soluções para obter pacotes recentes em distribuições estáveis ou indisponíveis no repositório oficial são o AppImage, Snap e Flatpak.

Os repositórios do Snap e o Flathub, do Flatpak, permitem a instalação de software não-livre, muitas vezes sem esclarecimento da licença do programa que se instala. Além disso, estas duas ferramentas são limitadas a programas finais, não podendo instalar separadamente outros tipos de programas, como bibliotecas.

Com o Guix é possível obter programas finais, bibliotecas e outros pacotes recentes que não alteram o sistema operacional hospedeiro e coexistem pacificamente com ele, incluindo diferentes versões. O canal oficial do Guix é composto inteiramente de software livre.

Desenvolvimento

Desenvolvedores necessitam da instalação de depêndencias para poder construir os programas que desenvolvem. Estas depêndencias podem vir do repositório oficial, mas o desenvolvedor pode requerer uma versão diferente das que estão disponíveis. Também é possível que a dependência não esteja disponível no repositório oficial.

O Guix permite que o desenvolvedor utilize seus pacotes para dependências e ainda as dispõe nas variáveis de ambiente para que o sistema operacional possa encontrá-las. Isto facilita a vida do desenvolvedor, pois elimina a necessidade de busca por dependências ou de tê-las instaladas na máquina a todo momento.

Hospedagem de servidores seguros

Atualmente, muitos servidores são hospedados como uma imagem Docker. Este é um software de virtualização muito usado pelo seu recurso de criar contêineres isolados do sistema operacional e que funcionam em qualquer máquina. Porém, o Docker possui algumas limitações:

  • Dificuldade de reproduzir o ambiente virtual: imagens Docker possuem reproducibilidade de máquina (uma imagem irá executar da mesma forma em uma máquina ou outra), mas é muito difícil reproduzir o processo que gera a imagem.

  • Segurança: as imagens Docker são criadas para serem geradas e distribuídas uma vez. Para aplicar correções de segurança, a imagem inteira precisa ser baixada novamente após as correções.

Estes dois problemas não existem no Guix. As definições de pacotes incluem instruções claras de todas as etapas da construção e cada dependência pode ser atualizada separadamente do pacote maior.

Algumas considerações

Devido à forma como o Guix funciona, ele utiliza muito espaço em disco. Os pacotes se acumulam conforme operações acontecem e de tempos em tempos é necessário utilizar o coletor de lixo para liberar espaço. Se você tem problemas com espaço em disco, evite utilizar o Guix.

Recomendação: utilize os pacotes do repositório Debian quando possível e os pacotes do Guix quando necessário.

Outra consideração é que atualmente não há um canal stable, e pacotes podem quebrar ocasionalmente (sem interferir no sistema hospedeiro). No entanto, este não é um problema grave como veremos na próxima publicação, onde será mostrado como o Guix pode ser utilizado no dia a dia.

Referências

Guix: Unifying provisioning, deployment, and package management in the age of containers

Functional Package and Configuration Management with GNU Guix

4 Responses

  1. Excelente artigo. Usei o Guix System por muito tempo, como você pode ver no meu blog de tecnologia “unixpablo”, mas um dia uma atualização quebrou o boot e eu quebrei o sistema ainda mais tentando consertar.

    Queria muito continuar usando o sistema até a chegada do Hurd e do shell baseado na linguagem scheme, mas não chegou e agora o sistema sofre apenas atualizações sem a mudança da numeração principal, apesar das mudanças serem grandes (leio sempre o blog do guix).

    O que me empolga é o gnu guile, mas também estava curioso com o sistema de controle de acesso mandatorio que eles iriam usar, se o apparmor, selinux ou um próprio.

    Agora, o Hurd ainda não tem uma versão 64bits e o Linux está com um desempenho muito grande, vencendo o Windows em aplicações importante. Enquanto espera, recomendo o opensuse, pois funciona baseado nas rigorosas leis da União Europeia.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Post comment