Arch build system (Portuguê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
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
nomakepkg.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.
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:
- 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
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.