Autobuilder-netwerk

Het autobuilder-netwerk is een door Debian ontwikkeld systeem dat zorg draagt voor het compileren van pakketten voor alle architecturen die Debian op dit moment ondersteunt. Dit netwerk bestaat uit verschillende machines die een specifiek software-pakket gebruiken wat buildd heet, om pakketten uit het Debian-archief op te pikken en ze opnieuw te bouwen voor de doelarchitectuur.

Waarom is het autobuilder-netwerk nodig?

Het autobuilder-netwerk biedt een veilige functionaliteit voor het bouwen van pakketten voor alle ondersteunde architecturen. De Debian-distributie ondersteunt een flink aantal architecturen, en de pakketbeheerders hebben vaak geen toegang tot alle machines met de benodigde architecturen. Anderzijds vereist Debian nu dat gewone binaire pakketten worden gegenereerd vanuit de broncode in een gecontroleerde bouwomgeving (via de eis om alleen broncode te uploaden) om de introductie te voorkomen van kwaadwillig gemaakte binaire pakketten door toedoen van menselijke ontwikkelaars. Het autobuilder-netwerk neemt de broncode van het pakket en bouwt automatisch binaire pakketten, één keer voor elke ondersteunde hardware-architectuur. Fouten worden bijgehouden in de autobuilder-database.

Het autobuilder-netwerk verlicht ook het werk van ontwikkelaars die Debian geschikt maken voor andere architecturen, zogenaamde ports. Toen Debian/m86k (de eerste niet-Intel architectuur) werd opgestart moesten de ontwikkelaars voor deze architectuur, de zogenaamde porters, zelf in de gaten houden of er nieuwe versies van pakketten beschikbaar kwamen en deze opnieuw bouwen om de Intel-distributie bij te houden. Dit werd allemaal handmatig gedaan. De ontwikkelaars keken op de upload-mailinglijst naar nieuwe pakketten en compileerden sommige. De noodzakelijke coördinatie om te voorkomen dat pakketten twee keer gecompileerd werden door verschillende personen werd gedaan via een eigen mailinglijst. Het is duidelijk dat met deze procedure makkelijk fouten gemaakt worden, terwijl ze ook veel tijd vraagt. Toch was dit voor een lange tijd de normale manier om niet-i386 distributies actueel te houden.

Het "build daemon"-systeem automatiseert het grootste gedeelte van dit proces. Het bestaat uit een set scripts (geschreven in Perl en Python) die mettertijd ontwikkeld zijn om porters te helpen met verschillende taken. Ze zijn uiteindelijk geëvolueerd tot een systeem dat in staat is om Debian-distributies bijna volautomatisch up-to-date te houden. De beveiligingsupdates worden op dezelfde machines gecompileerd zodat deze snel beschikbaar zijn.

Hoe werkt buildd?

Buildd is de naam die gewoonlijk gegeven wordt aan de software die gebruikt wordt door het autobuilder-netwerk, maar ze bestaat eigenlijk uit verschillende onderdelen:

wanna-build
Een hulpmiddel dat pakket-(her)compilaties helpt coördineren via een database die een lijst van pakketten en hun status bijhoudt. Er is één centrale database per architectuur die per pakket de status, versie en nog wat informatie bijhoudt. Deze krijgt de Sources- en Packages-bestanden aangeleverd vanaf de verschillende pakketarchieven van Debian (bv. ftp-master en security-master).
buildd
Een achtergronddienst die periodiek de database onderhouden door wanna-build nakijkt en sbuild aanroept om de pakketten te compileren. Nadat het compilatielogboek is goedgekeurd door de buildd-beheerder uploadt hij het pakket naar het juiste archief.
sbuild
Is verantwoordelijk voor de daadwerkelijke compilatie van pakketten in geïsoleerde chroot-omgevingen. Er wordt gezorgd dat alle bron-vereisten in de chroot zijn geïnstalleerd voor de compilatie begint. Vervolgens worden de standaard Debian-gereedschappen aangeroepen voor het compilatieproces. Logbestanden worden naar de buildlog-database gestuurd.

Al deze componenten werken samen om het builder-netwerk te laten werken.

Wat moet een Debian-ontwikkelaar doen?

Eigenlijk hoeft een gemiddelde Debian-ontwikkelaar het buildd-netwerk niet expliciet te gebruiken. Elke keer hij een pakket naar het Debian-archief uploadt (met een binaire versie voor een bepaalde architectuur) zal het toegevoegd worden aan de database voor alle architecturen (in de status Needs-Build). Build-machines zullen de database bevragen voor pakketten in deze status, en zullen routineus pakketten van die lijst oppikken. De lijst wordt geprioriteerd op de vorige compilatiestatus (out-of-date of uncompiled), de prioriteit van het pakket, de sectie en de pakketnaam. Tot slot worden de prioriteiten nog dynamisch bijgesteld op basis van wachttijd, dit om te voorkomen dat sommige pakketten achter in de wachtrij blijven steken.

Als de compilatie succesvol is in alle architecturen, dan hoeft een pakketbeheerder niets te doen. Al deze binaire pakketten worden geüpload naar het desbetreffende archief. Als de compilatie niet succesvol is, dan zal het pakket een speciale status krijgen (Build-Attempted voor compilatiepogingen die nog niet zijn nagekeken, Failed indien nagekeken en als bug gemeld bij het pakket of Dep-Wait als ze bron-vereisten hebben die niet beschikbaar zijn). De autobuilder-beheerders zullen pakketten die niet compileren nakijken en informatie sturen naar de pakketbeheerder, gewoonlijk via het openen van een bug in het Bug Tracking System, het bugvolgsysteem.

Soms duurt het lang om een pakket te compileren voor een gegeven architectuur, en houdt dat de migratie naar testing van dat pakket tegen. Indien een pakket een belangrijke overgang tegenhoudt dan zal de prioriteit meestal op verzoek van het Release-team worden bijgesteld. Andere verzoeken worden niet geaccepteerd omdat de langere wachttijd in de rij automatisch tot een hogere prioriteit leidt.

U kunt de status van de verschillende compilatiepogingen van de pakketten die onder het beheer van een bepaalde pakketbeheerder vallen, bekijken via de buildd-logs. Er is ook een link naar deze logbestanden vanuit het overzicht van de beheerders van pakketten.

Voor meer informatie over de verschillende statussen waarin een pakket zich kan bevinden, kunt u wanna-build-states lezen.

Waar kan ik meer informatie vinden?

Uiteraard zijn zowel de documentatie als de broncode voor deze verschillende hulpmiddelen de beste manier om uit te vinden hoe het buildd-netwerk werkt. Daarnaast bevat de sectie Porting and being ported van de Debian Developers Reference aanvullende informatie over hoe het werkt, terwijl ze ook wat informatie bevat over pakketcompilatie- en porteer-hulpmiddelen die gebruikt worden in het proces van zowel het opzetten als het onderhouden van het buildd-netwerk.

Er zijn een aantal statistieken van het autobuilder-netwerk beschikbaar op de buildd stats pagina.

Hoe kan ik mijn eigen auto-builder node opzetten?

Er kunnen verschillende redenen zijn waarom een ontwikkelaar (of gebruiker) een autobuilder zou willen opzetten:

U kan meer informatie vinden over hoe u een autobuilder kunt opzetten.

Contact opnemen met de buildd-beheerders

Het primaire contactadres van de beheerders van wanna-build is de debian-wb-team@lists.debian.org (mailinglijst)

De beheerders die verantwoordelijk zijn voor de buildd's voor een bepaalde architectuur kunnen bereikt worden via arch@buildd.debian.org, bijvoorbeeld i386@buildd.debian.org.


Deze introductie tot het autobuilder-netwerk werd geschreven op basis van informatie verstrekt door Roman Hodek, Christian T. Steigies, Wouter Verhelst, Andreas Barth, Francesco Paolo Lovergine, Javier Fernández-Sanguino Peña en Philipp Kern.