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:
- Para ajudar no desenvolvimento de um porte para uma dada arquitetura (quanto autobuilders são necessários).
- Para avaliar o impacto de uma dada otimização de compilador ou patch pela recompilação de um grande subconjunto de pacotes.
- Para rodar ferramentas que analisam pacotes em busca de erros comuns e precisam rodar em pacotes compilados. Isto é necessário até mesmo na realização de análise de código fonte, por exemplo, como uma forma de contornar pacotes usando dpatch.
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.