Arch build system (Português)

From ArchWiki
Status de tradução: Esse artigo é uma tradução de Arch build system. Data da última tradução: 2023-08-11. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

O sistema de compilação do Arch (em inglês, Arch build system – ABS) é um sistema tipo portação para compilar e empacotar software a partir do código-fonte. Enquanto o pacman é a ferramenta especializada do Arch para gerenciamento de pacote binário, o sistema de compilação do Arch é uma coleção de ferramentas para compilar o fonte em pacotes .pkg.tar.zst instaláveis.

Ports é um sistema usado por *BSD para automatizar o processo de compilação de software a partir do código-fonte. O sistema usa um port para baixar, descompactar, patch, compilar e instalar o software dado. Um port é meramente um pequeno diretório no computador do usuário, nomeado pelo software correspondente para ser instalado, que contém uns poucos arquivos com as instruções para compilar e instalar o software a partir dos fontes. Isso torna a instalação de softwares tão simples quanto digitar make ou make install clean dentro de diretório de portação.

O sistema de compilação do Arch é baseado um conceito similar. Ele compreende uma coleção de repositórios git para cada pacote disponível no Arch Linux. Cada repositório contém um arquivo PKGBUILD (e às vezes outros arquivos) e não contém a fonte do software nem o binário. Ao executar o makepkg dentro de um diretório, as fontes do software são baixadas, o software é compilado e empacotado no diretório de compilação. Então, você pode usar pacman para instalar o pacote.

Conjunto de ferramentas

This article or section needs expansion.

Reason: Adicionar pkgctl/devtools à lista. (Discuss in Talk:Arch build system)

O sistema de compilação do Arch inclui e depende de vários outros componentes e ferramentas que são usadas no processo de compilação de pacotes a partir da fonte:

Repositório
A estrutura de diretório contendo arquivos necessários para compilar todos os pacotes oficiais, mas não os pacotes em si nem os arquivos-fonte do software. Ele está disponível na forma de repositórios Git hospedados em gitlab.archlinux.org. Consulte a seção #Estrutura de repositórios para mais informações.
PKGBUILD
Um script Bash que contém a URL do código-fonte junto com as instruções de compilação e empacotamento.
makepkg
Uma ferramenta de comando shell que lê os PKGBUILDs, baixa automaticamente e compila os fontes e cria um .pkg.tar* de acordo com o vetor PKGEXT no makepkg.conf. Você também pode usar makepkg para fazer seus próprios pacotes personalizados do AUR ou fontes de terceiros. Veja Criando pacotes para mais informações.
pacman
pacman é completamente separado, mas é necessariamente invocado pelo makepkg ou manualmente, para instalar e remover os pacotes compilados e para obter dependências.
AUR
O Arch User Repository está separado do repositório oficial de PKGBUILDs, mas os pacotes do AUR podem ser compilados usando as mesmas ferramentas. Ele contém muitos milhares de PKGBUILDs contribuídos por usuários para software que está indisponível como um pacote oficial do Arch. Se você precisar compilar um pacote fora da árvore oficial do Arch, as chances são de que esteja no AUR.
Atenção: PKGBUILDs oficiais presumem que pacotes são compilados em um chroot limpo. Compilação de software em um sistema de compilação sujo pode falhar ou causar comportamentos inesperados em tempo de execução, porque se o sistema de compilação detecta dependências dinamicamente, o resultado depende de quais pacotes estão disponíveis no sistema de compilação.

Estrutura de repositórios

Os repositórios oficiais core, extra, core-testing e extra-testing estão hospedados na instância GitLab do Arch Linux.

Cada pacote tem seu próprio repositório no espaço de nomes archlinux/packaging/packages. Cada repositório contém o PKGBUILD e os arquivos usados nas compilações oficiais. Além disso, alguns arquivos que são usados pelos desenvolvedores para o processo de compilação podem ser encontrados lá.

Por exemplo, a árvore para acl se parece com isso:

acl
├── keys
│   └── pgp
│       ├── 259B3792B3D6D319212CC4DCD5BF9FEB0313653A.asc
│       ├── 600CD204FBCEA418BD2CA74F154343260542DF34.asc
│       └── B902B5271325F892AC251AD441633B9FE837F581.asc
└── PKGBUILD

O código-fonte do pacote não está presente no diretório ABS. Em vez disso, o PKGBUILD contém uma URL que vai baixar o código-fonte quando o pacote é compilado.

Casos de uso

O sistema de compilação do Arch automatiza certas tarefas relacionadas à compilação a partir do código-fonte. Seus casos de uso são:

This article or section needs expansion.

Reason: O principal caso de uso é obviamente compilar pacotes binários oficiais para o Arch Linux por desenvolvedores e empacotadores. As personalizações do usuário e as compilações não oficiais são secundárias. (Discuss in Talk:Arch build system)
  • Em qualquer caso que você queria compilar ou recompilar um pacote
  • Make e instalar novos pacotes de fontes de software para os quais nenhum pacote está instalado ainda (veja Criando pacotes)
  • Personalizar pacotes existentes para atender suas necessidades (por exemplo, habilitar ou desabilitar opções, patching)
  • Recompilar todo o seu sistema usando suas flags de compilador, "à la FreeBSD"
  • Compilar e instalar, sem interferências, seu próprio kernel personalizado (veja Compilação de kernel)
  • Fazer com que módulos de kernel funcionem com um kernel personalizado
  • Compilar e instalar facilmente uma versão mais nova, antiga, beta ou de desenvolvimento de um pacote do Arch editando o número de versão no PKGBUILD

O ABS automatiza determinadas tarefas relacionadas à compilação a partir do código-fonte. Como alternativa ao uso do ABS, você pode executar essas tarefas manualmente.

Uso

Obtendo fonte de PKGBUILD

Para obter o arquivo PKGBUILD necessário para compilar um certo pacote a partir do fonte, você pode usar a ferramenta pkgctl ou usar diretamente o Git.

Usando a ferramenta pkgctl

Como pré-condição, instale o pacote devtools. pkgctl é uma ferramenta que trabalha com arquivos-fonte de compilação para pacotes do Arch Linux usando Git.

Para clonar o repositório git com os arquivos de compilação mais recentes usando pkgctl, o seguinte comando é usado:

$ pkgctl repo clone pkgname
Dica: Isso clona por SSH por padrão, portanto, se você não definiu uma chave SSH em sua conta GitLab do Arch, você precisa clonar por HTTPS: pkgctl repo clone --protocol=https pkgname.

Observe que aqui, os arquivos-fonte de compilação referem-se a PKGBUILD, possivelmente com alguns outros arquivos necessários, como chaves. Ou seja, os arquivos essenciais são necessários para o sistema de compilação do Arch Linux. Ele não se refere aos arquivos-fonte do pacote que foram escritos pela equipe que criou o pacote, como arquivos C ou Python.

Isso fornecerá a você não apenas os arquivos de compilação dos fontes atuais, mas também suas versões anteriores. Além disso, você pode usar todos os outros comandos git para verificar uma versão mais antiga do pacote ou rastrear alterações personalizadas.

Se você deseja obter uma versão específica de um pacote, pode usar algo como o seguinte:

$ pkgctl repo clone --switch="2:1.19.5-1" go

Leia pkgctl-repo-clone(1) para mais informações e para os outros comandos disponíveis.

Usando o git diretamente

Use o seguinte comando git para clonar um pacote:

$ git clone https://gitlab.archlinux.org/archlinux/packaging/packages/pkgname.git

Por exemplo, para copiar os arquivos de compilação do Apache:

$ git clone https://gitlab.archlinux.org/archlinux/packaging/packages/apache.git

Compilar pacote

Configure o makepkg para compilar pacotes dos PKGBUILDs que você fez checkout, como explicado em makepkg (Português)#Configuração.

Em seguida, copie o diretório contendo o PKGBUILD que você deseja modificar para uma nova localização. Faça as modificações desejadas lá e use makepkg, como descrito em makepkg (Português)#Uso, para criar e instalar o novo pacote.

Dicas e truques

Preserve pacotes modificados

Atualizar o sistema com o pacman vai substituir um pacote modificado com o pacote de menos nome dos repositórios oficiais. Veja as instruções a seguir para como evitar isso.

Insira um vetor de grupo no PKGBUILD, e adicione o pacote para um grupo chamado modified.

PKGBUILD
groups=('modified')

Adicione esse grupo à seção IgnoreGroup no /etc/pacman.conf.

/etc/pacman.conf
IgnoreGroup = modified

Se novas versões estiverem disponíveis nos repositórios oficiais durante uma atualização de sistema, pacman emite uma nota de que ele está ignorando essa atualização porque ele está na seção IgnoreGroup. Neste ponto, o pacote modificado deve ser recompilado para evitar atualizações parciais.

Outras ferramentas

  • pbget - obtém PKGBUILDs de pacotes individuais diretamente da interface web. Inclui suporte ao AUR.