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 ondersteund. 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 te hercompileren voor de doelarchitectuur.

Waarom is het autobuilder-netwerk nodig?

De Debian-distributie ondersteunt een flink aantal architecturen, maar de pakketbeheerders compileren normaliter de binaire pakketten voor slechts één architectuur (gewoonlijk i386 of amd64). De andere binaire pakketten worden automatisch geproduceerd, waarbij er voor wordt gezorgd dat elk pakket maar eenmaal wordt gemaakt. Mislukte pogingen worden bijgehouden in de database van de autobuilder.

Toen Debian/m86k (de eerste niet-Intel port) werd opgestart moesten de ontwikkelaars voor deze architectuur zelf in de gaten houden of er nieuwe versies van pakketten beschikbaar kwamen en deze hercompileren om de Intel-distributie bij te houden. Dit werd allemaal handmatig gedaan: De ontwikkelaars keken op de upload-mailinglijst naar nieuwe pakketten en compileerden sommigen. De noodzakelijke coordinatie 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 gegroeid zijn om porters te helpen met verschillende taken. Ze zijn uiteindelijk geëvolueerd in 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 het 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. Hij 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-afhankelijkheden in de chroot zijn geïnstalleerd voor de compilatie begint. Vervolgens worden de standaard Debian-gereeedschappen 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 geprioritizeerd op de vorige compilatiestatus (out-of-date of uncompiled), de prioriteit van het pakket, de sectie, en 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 doen. Al deze binaire pakketten worden geüploaded 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-afhankelijkheden kennen 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.

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 "Packages' Maintainer Overview".

Voor meer informatie over de verschillende statussen waarin een pakket zich kan bevinden, gelieve wanna-build-states te 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 het 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 en Javier Fernández-Sanguino Peña en Philipp Kern.