Rede autobuilder

A rede autobuilder (construtores automáticos) é um desenvolvimento Debian que gerencia as compilações de pacotes para todas as arquiteturas que o Debian suporta atualmente. Esta rede é feita de várias máquinas que usam um pacote de software específico chamado buildd para pegar os pacotes de um repositório Debian e reconstruí-los para a arquitetura alvo.

Por que a rede autobuilder é necessária?

A rede do autobuilder fornece uma funcionalidade segura de construção de pacotes para todas as arquiteturas suportadas. A distribuição Debian suporta algumas arquiteturas, e os(as) mantenedores(as) de pacotes muitas vezes não têm acesso a todas as máquinas com as arquiteturas necessárias. Por outro lado, o Debian agora exige que pacotes binários comuns sejam gerados a partir do código fonte em um ambiente de construção controlado (através do requisito de upload somente do fonte) para evitar a introdução de pacotes binários criados com códigos maliciosos por desenvolvedores(as) humanos(as). A rede do autobuilder pega o código-fonte do pacote e constrói pacotes binários automaticamente, uma vez para cada arquitetura de hardware suportada. As falhas são rastreadas no banco de dados do autobuilder.

A rede do autobuilder também facilita o trabalho dos(as) mantenedores(as) dos Portes do Debian. Quando o Debian/m68k (o primeiro porte não Intel) começou, os(as) desenvolvedores(as) tinham que ficar atentos a novas versões de pacotes e recompilá-los se quisessem mantê-los atualizados com a distribuição da Intel. Tudo isso era feito manualmente: desenvolvedores(as) olhavam a lista de discussão upload em busca de novos pacotes e pegavam alguns deles para construção. A coordenação para que nenhum pacote fosse construído duas vezes por diferentes pessoas era feita através de anúncio em uma lista de discussão. É óbvio que este procedimento é suscetível a erros e consome muito tempo. No entanto, essa foi a maneira usual de manter as distribuições não i386 atualizadas por muito tempo.

O sistema de daemon de construção automatiza a maioria deste processo. Ele consiste em um conjunto de scripts (escritos em Perl e Python) que tem evoluído através do tempo para ajudar portadores em várias tarefas. Eles finalmente desenvolveram um sistema que é capaz de manter distribuições Debian atualizadas quase que automaticamente. As atualizações de segurança são criadas no mesmo conjunto de máquinas para garantir sua disponibilidade oportuna.

Como o buildd funciona?

Buildd é o nome usualmente dado ao software usado pela rede autobuilder, mas na verdade ele é feito de diferentes partes:

wanna-build
uma ferramenta que ajuda a coordenar a (re)construção de pacotes através de um banco de dados que mantém uma lista de pacotes e seus estados. Há um banco de dados central por arquitetura que armazena os estados dos pacotes, versões, e algumas outras informações. Ele é abastecido com arquivos de fontes e pacotes recuperados dos vários arquivos de pacotes que o Debian possui (por exemplo, ftp-master e security-master).
buildd
um daemon que, periodicamente, verifica o banco de dados mantido pelo wanna-build e chama o sbuild para construir os pacotes. Após o log de construção ter sido reconhecido pelo(a) administrador(a), o pacote é enviado para o repositório apropriado.
sbuild
é responsável pela compilação real dos pacotes em chroots isoladas. Ele garante que todas as dependências de fontes necessárias sejam instaladas no chroot antes da compilação e depois chama as ferramentas padrão do Debian para iniciar o processo de compilação. Os logs de construção são enviados ao banco de dados de logs de construção.

Todas estas partes operam juntas para fazer a rede de construtores funcionar.

O que um(a) desenvolvedor(a) Debian precisa fazer?

Na verdade, um(a) desenvolvedor(a) Debian mediano(a) não precisa fazer nada explicitamente para usar a rede buildd. Quando ele(a) envia um pacote para o repositório (binário compilado para uma dada arquitetura) ele será adicionado ao banco de dados para todas as arquiteturas (no estado Needs-Build). Máquinas construtoras consultarão o banco de dados de construção em busca de pacotes neste estado e, rotineiramente, pegarão pacotes desta lista. A lista é priorizada pelo estado de compilação anterior (ou out-of-date ou uncompiled), prioridade, seção e nome do pacote. Além disso, para impedir que alguns pacotes passem tempo demais no final da fila, as prioridades são ajustadas dinamicamente com o aumento do tempo de espera na fila.

Se a construção for bem sucedida em todas as arquiteturas, o(a) mantenedor(a) não precisará fazer nada. Todos esses pacotes binários serão enviados para o repositório correspondente. Se o processo de construção falhar, o pacote entrará em um estado especial (Build-Attempted para falhas de construção que não foram revisadas, Failed para erros revisados e relatados no pacote ou Dep-Wait, se ele possui dependências de construção específicas que não estão disponíveis). Os(As) administradores(as) da rede autobuilder revisarão os pacotes cuja construção falhou e entrarão em contato com o(a) mantenedor(a), usualmente, abrindo um bug no sistema de acompanhamento de bug.

Algumas vezes um pacote leva um longo tempo para construir em uma dada arquitetura e isso impede que o pacote entre na testing. Se um pacote segurar uma transição, as prioridades de construção são geralmente ajustadas mediante solicitação da equipe de lançamento. Outras solicitações não serão aceitas, pois o aumento do tempo de espera na fila resultará em uma prioridade de construção mais alta automaticamente.

Você pode verificar esse estado das diferentes tentativas das buildds dos pacotes que pertencem a qualquer mantenedor(a) verificando os logs do buildd. Estes logs também estão linkados a partir da visão geral do(a) mantenedor(a) do pacote.

Para mais informação sobre os diferentes estados nos quais um pacote pode estar, por favor leia wanna-build-states.

Onde eu posso encontrar informações adicionais?

É claro que, tanto a documentação quando o código fonte disponíveis para estas diferentes ferramentas são a melhor forma de entender como a rede buildd funciona. Adicionalmente, a seção portando e sendo portado da referência do(a) desenvolvedor(a) Debian fornece informação complementar sobre como a rede funciona e também fornece alguma informação sobre construtores de pacotes e ferramentas de porte que estão envolvidas no processo tanto de configuração quanto de manutenção da rede buildd.

Há algumas estatísticas disponíveis sobre a rede autobuilder na página de estados do buildd.

Como eu posso configurar meu próprio nó de auto-builder?

Há várias razões pelas quais um(a) desenvolvedor(a) (ou usuário(a)) pode querer configurar e rodar um autobuilder:

Você pode ler mais informação sobre como configurar um autobuilder.

Contatando os(as) administradores(as) das buildds

O endereço principal de contato para o mantenedor de qualquer build é a debian-wb-team@lists.debian.org (lista de discussão)

Os administradores responsáveis pelos buildds de uma arquitetura específica podem ser contatados em arch@buildd.debian.org, por exemplo i386@buildd.debian.org.


Esta introdução à rede autobuilder foi escrita com bits e pedaços fornecidos por Roman Hodek, Christian T. Steigies, Wouter Verhelst, Andreas Barth, Francesco Paolo Lovergine e Javier Fernández-Sanguino.