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: 2020-04-08. 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 (Arch build system) é 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 (incluindo pacotes compilados com o ABS), ABS é uma coleção de ferramentas para compilar o fonte em pacotes .pkg.tar.xz 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.

ABS é um conceito similar. Uma parte do ABS é um repositório SVN e um repositório Git equivalente. O repositório contém um diretório correspondente a cada pacote disponível no Arch Linux. Os diretórios do 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 emitir 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.

Visão geral

"ABS" pode ser usado como um termo guarda-chuva já que ele inclui e depende de vários outros componentes; portanto, apesar de tecnicamente impreciso, "ABS" pode ser referir às seguintes ferramentas como um kit de ferramentas completos:

Árvore do 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 fontes do software. Ela está disponível nos repositórios svn e git. Consulte a seção #Árvore de repositório 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
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 é separado do ABS, mas PKGBUILDs do AUR (sem suporte) são compilados usando makepkg para compilar e empacotar software. Em contraste com a árvore do ABS que nada mais é que um repositório bare de git, o AUR existe como uma interface polida do website com vários recursos interativos. 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.

Árvore de repositório

Os repositórios core, extra e testing estão no repositório packages para checkout. Os repositórios community e multilib estão no repositório community.

Cada pacote possui seu próprio subdiretório. Dentro dele há diretórios repos e trunk. repos é expandido por nome de repositório (ex.: core) e arquitetura. PKGBUILDs e arquivos localizados em repos são usados em compilações oficiais. Arquivos localizados no trunk são usados pelos desenvolvedores na preparação antes de serem copiados para repos.

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

acl
acl/repos
acl/repos/core-x86_64
acl/repos/core-x86_64/PKGBUILD
acl/trunk
acl/trunk/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

ABS 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

Para obter o PKGBUILD necessário para compilar um certo pacote a partir do fonte, você pode usar uma abordagem baseada em SVN ou Git usando o pacote asp que é uma interface para os repositórios svntogit. A seguir, o método baseado em svn, bem como o método baseado em git, são descritos.

Obtendo fonte de PKGBUILD

Existem dois métodos para recuperar o PKGBUILD da fonte, o primeiro é usar o Git via svntogit e o segundo é usar o SVN diretamente.

Obtendo fonte de PKGBUILD usando Git

Como pré-condição, instale o pacote asp. Asp é uma ferramenta para gerenciar os arquivos-fontes de compilação usados para criar pacotes do Arch Linux usando a interface git. Consulte também o tópico do fórum do Arch Linux BBS [1].

Para clonar o repositório svntogit para um pacote específico, use:

$ asp checkout nome-pacote

Isso vai clonar o repositório git para o pacote dado em um diretório com o nome do pacote.

Para atualizar o repositório git clonado, execute asp update seguido por git pull dentro do repositório git.

Em seguida, você pode usar todos os comandos git para realizar o checkout de uma versão antiga do pacote ou rastrear alterações personalizadas. Para mais informações sobre o uso de git, veja a página git.

Se você só deseja copiar um snapshot do PKGBUILD para um pacote específico, use:

$ asp export nome-pacote

Obtendo fonte de PKGBUILD usando SVN

Pré-requisitos

Instale o pacote subversion.

Checkout não-recursivo
Atenção: Não baixe todo o repositório; siga apenas as instruções abaixo. O repositório SVN todo é gigantesco. Não apenas vai gastar uma quantidade absurda de espaço em disco, mas também vai ocupar o servidor do archlinux.org para você baixá-lo. Se você abusar desse serviço, seu endereço pode ser bloqueado. Nunca use o SVN público para qualquer tipo de scripting.

Para fazer checkout dos repositórios core, extra e testing:

$ svn checkout --depth=empty svn://svn.archlinux.org/packages

Para fazer checkout dos repositórios community e multilib

$ svn checkout --depth=empty svn://svn.archlinux.org/community

Em ambos casos, ele cria um diretório vazio, mas ele sabe que é um checkout de svn.

Fazer checkout de um pacote

No diretório contendo o repositório svn que você fez checkout (isto é, packages ou community), faça:

$ svn update nome-pacote

Isso vai obter o pacote que você requisitou em seu checkout. Daqui para frente, toda vez que você executar svn update no nível superior, esse também será atualizado.

Se você especifica um pacote que não existe, svn não vai avisar você. Ele só vai mostrar algo como "At revision 115847", sem criar quaisquer arquivos. Se isso acontecer:

  • verifique se o nome do pacote está escrito corretamente
  • verifique se o pacote não foi movido para outro repositório (ex. do repositório community para o repositório principal)
  • acesse https://archlinux.org/packages para ver se o pacote é compilado a partir de outro pacote base (por exemplo, python-tensorflow é compilado no PKGBUILD do tensorflow)
Dica: Para fazer checkout uma versão mais antiga de um pacote, veja #Fazer checkout de uma versão anterior de um pacote.

Você deve atualizar periodicamente todos os pacotes baixados se você deseja realizar recompilações em revisões mais recentes dos repositórios. Para fazer isso, execute:

$ svn update

Fazer checkout de uma versão anterior de um pacote

Dentro do repositório svn que você fez checkout como descrito em #Checkout não-recursivo (isto é, "packages" ou "community"), primeiro examine o log:

$ svn log nome-pacote

Desubra a revisão que você deseja examinando o histórico e especifique a revisão que você deseja fazer checkout. Por exemplo, para fazer checkout da revisão r1729, você faria:

$ svn update -r1729 nome-pacote

Isso vai atualizar uma cópia de trabalho existente de nome-pacote para a revisão escolhida.

Você também pode especificar uma data. Se nenhuma revisão naquele dia existir, svn vai pegar o pacote mais recente antes daquele tempo. O seguinte exemplo faz checkout da revisão de 2009-03-03:

 $ svn update -r'{20090303}' nome-pacote

É possível fazer checkout de pacotes nas versões antes de eles terem sido movidos para um outro repositório; veja os logs pela data que eles foram movidos ou o número da última revisão.

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 pelo ABS 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 a partir do ABS para evitar atualizações parciais.

Outras ferramentas

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