Próximo: , Anterior: , Acima: Contribuindo   [Conteúdo][Índice]


22.7 Estrutura da árvore de origem

Se você estiver disposto a contribuir com o Guix além dos pacotes, ou se quiser aprender como tudo se encaixa, esta seção fornece um tour guiado na base de código que pode ser útil.

No geral, a árvore de origem do Guix contém quase exclusivamente Guile módulos, cada um dos quais pode ser visto como uma biblioteca independente (veja Modules em Manual de Referência do GNU Guile).

A tabela a seguir fornece uma visão geral dos principais diretórios e o que eles contêm. Lembre-se de que no Guile, cada nome de módulo é derivado de seu nome de arquivo—por exemplo, o módulo no arquivo guix/packages.scm é chamado (guix packages).

guix

Esta é a localização dos mecanismos principais do Guix. Para ilustrar o que significa “core”, aqui estão alguns exemplos, começando com ferramentas de baixo nível e indo em direção a ferramentas de nível mais alto:

(guix store)

Conectando e interagindo com o daemon de compilação (veja O armazém).

(guix derivations)

Criando derivações (veja Derivações).

(guix gexps)

Escrevendo expressões-G (veja Expressões-G).

(guix packages)

Definindo pacotes e origens (veja package Reference).

(guix download)
(guix git-download)

Os métodos de download de origem url-fetch e git-fetch (veja origin Reference).

(guix swh)

Obtendo código-fonte do arquivo Software Heritage.

(guix search-paths)

Implementando caminhos de pesquisa (veja Caminhos de pesquisa).

(guix build-system)

A interface do sistema de compilação (veja Sistemas de compilação).

(guix profiles)

Implementing profiles.

guix/build-system

Este diretório contém implementações específicas do sistema de compilação (veja Sistemas de compilação), como:

(guix build-system gnu)

the GNU build system;

(guix build-system cmake)

the CMake build system;

(guix build-system pyproject)

The Python “pyproject” build system.

guix/build

Isto contém código geralmente usado no “lado da construção” (veja strata of code). Isto inclui código usado para construir pacotes ou outros componentes do sistema operacional, assim como utilitários:

(guix build utils)

Utilitários para definições de pacotes e muito mais (veja Construir utilitários).

(guix build gnu-build-system)
(guix build cmake-build-system)
(guix build pyproject-build-system)

Implementação de sistemas de construção e, em particular, definição de suas fases de construção (veja Fases de construção).

(guix build syscalls)

Interface para a biblioteca C e para chamadas de sistema Linux.

guix/scripts

Isto contém módulos correspondentes aos subcomandos guix. Por exemplo, o módulo (guix scripts shell) exporta o procedimento guix-shell, que corresponde diretamente ao comando guix shell (veja Invoking guix shell).

guix/import

Isto contém código de suporte para os importadores e atualizadores (veja Invoking guix import e veja Invocando guix refresh). Por exemplo, (guix import pypi) define a interface para PyPI, que é usada pelo comando guix import pypi.

Todos os diretórios que vimos até agora estão em guix/. O outro lugar importante é o diretório gnu/, que contém principalmente definições de pacotes, bem como bibliotecas e ferramentas para Guix System (veja Configuração do sistema) e Guix Home (veja Home Configuration), todos os quais se baseiam na funcionalidade fornecida pelos módulos (guix …)46.

gnu/packages

Este é de longe o diretório mais lotado da árvore de fontes: ele contém package modules que exportam definições de pacotes (veja Módulos de pacote). Alguns exemplos:

(gnu packages base)

Módulo que fornece pacotes “base”: glibc, coreutils, grep, etc.

(gnu packages guile)

Guile e pacotes principais do Guile.

(gnu packages linux)

O kernel Linux-libre e pacotes relacionados.

(gnu packages python)

Python e pacotes principais do Python.

(gnu packages python-xyz)

Pacotes Python diversos (não fomos muito criativos).

Em qualquer caso, você pode pular para uma definição de pacote usando guix edit (veja Invocando guix edit) e visualizar sua localização com guix show (veja Invocando guix package).

gnu/packages/patches

Este diretório contém patches aplicados aos pacotes e obtidos usando o procedimento search-patches.

gnu/services

Isto contém definições de serviço, principalmente para Guix System (veja Serviços), mas algumas delas são adaptadas e reutilizadas para Guix Home, como veremos abaixo. Exemplos:

(gnu services)

A estrutura do serviço em si, que define os tipos de dados do serviço e do tipo de serviço (veja Composição de serviço).

(gnu services base)

Serviços “Básicos” (veja Serviços básicos).

(gnu services desktop)

Serviços “Desktop” (veja Serviços de desktop).

(gnu services shepherd)

Apoio aos serviços Shepherd (veja Serviços de Shepherd).

Você pode pular para uma definição de serviço usando guix system edit e visualizar sua localização com guix system search (veja Invoking guix system).

gnu/system

Estes são os principais módulos do sistema Guix, como:

(gnu system)

Define operating-system (veja operating-system Reference).

(gnu system file-systems)

Define file-system (veja Sistemas de arquivos).

(gnu system mapped-devices)

Define mapped-device (veja Dispositivos mapeados).

gnu/build

Esses são módulos que são usados no “lado da compilação” ao criar sistemas operacionais ou pacotes, ou em tempo de execução pelos sistemas operacionais.

(gnu build accounts)

Criando /etc/passwd, /etc/shadow, etc. (veja Contas de usuário).

(gnu build activation)

Ativar um sistema operacional no momento da inicialização ou da reconfiguração.

(gnu build file-systems)

Pesquisar, verificar e montar sistemas de arquivos.

(gnu build linux-boot)
(gnu build hurd-boot)

Inicializando sistemas operacionais GNU/Linux e GNU/Hurd.

(gnu build linux-initrd)

Criando um disco RAM inicial do Linux (veja Disco de RAM inicial).

gnu/home

Isso contém todas as coisas do Guix Home (veja Home Configuration); exemplos:

(gnu home services)

Serviços principais como home-files-service-type.

(gnu home services ssh)

Serviços relacionados a SSH (veja Secure Shell).

gnu/installer

Isso contém o instalador do sistema gráfico em modo texto (veja Instalação gráfica guiada).

gnu/machine

Estas são as abstrações de máquina usadas por guix deploy (veja Invoking guix deploy).

gnu/tests

Isso contém testes de sistema — testes que geram máquinas virtuais para verificar se os serviços do sistema funcionam conforme o esperado (veja Executando o conjunto de testes).

Por fim, há também alguns diretórios que contêm arquivos que não são módulos Guile:

nix

Esta é a implementação C++ do guix-daemon, herdada do Nix (veja Invocando guix-daemon).

tests

Esses são testes unitários, cada arquivo correspondendo mais ou menos a um módulo, em particular os módulos (guix …) (veja Executando o conjunto de testes).

doc

Esta é a documentação na forma de arquivos Texinfo: este manual e o Livro de receitas. Veja Writing a Texinfo File em GNU Texinfo, para informações sobre a linguagem de marcação Texinfo.

po

Este é o local das traduções do próprio Guix, das sinopses e descrições dos pacotes, do manual e do livro de receitas. Note que os arquivos .po que vivem aqui são retirados diretamente do Weblate (veja Traduzindo o Guix).

etc

Arquivos diversos: conclusões de shell, suporte para systemd e outros sistemas init, ganchos do Git, etc.

Com tudo isso, uma boa parte do seu sistema operacional está na ponta dos seus dedos! Além de grep e git grep, veja A configuração perfeita sobre como navegar no código do seu editor e veja Using Guix Interactively para obter informações sobre como usar módulos Scheme interativamente. Aproveite!


Notas de Rodapé

(46)

Por esse motivo, os módulos (guix …) geralmente não devem depender dos módulos (gnu …), com exceções notáveis: os módulos (guix build-system …) podem procurar pacotes em tempo de execução — por exemplo, (guix build-system cmake) precisa acessar a variável cmake em tempo de execução —, (guix scripts …) geralmente dependem dos módulos (gnu …), e o mesmo vale para alguns dos módulos (guix import …) módulos.


Próximo: Diretrizes de empacotamento, Anterior: Configurações alternativas, Acima: Contribuindo   [Conteúdo][Índice]