Hoofdstuk 7. Grondbeginselen van het pakketbeheersysteem van Debian

Inhoudsopgave

7.1. Wat is een Debian-pakket?
7.2. Wat is de indeling van een binair pakket van Debian?
7.3. Waarom hebben Debian-pakketten dergelijke lange namen?
7.4. Wat is een Debian control-bestand?
7.5. Wat is een Debian conffile?
7.6. Wat is een Debian preinst, postinst, prerm, en postrm script?
7.7. Wat is een Essential (essentieel), Required (vereist), Important (belangrijk), Standard (standaard), Optional (optioneel) en Extra (extra) pakket?
7.8. Wat is een virtueel pakket?
7.9. Wat wordt bedoeld met het feit dat een pakket een ander pakket Depends (vereist), Recommends (aanbeveelt), Suggests (suggereert), Conflicts (ermee in strijd is), Replaces (vervangt), Breaks (maakt onklaar) of Provides (erin voorziet)?
7.10. Wat wordt bedoeld met Pre-Depends (voorvereisten)?
7.11. Wat wordt bedoeld met unknown (onbekend), install (installeren), remove (verwijderen), purge (wissen) en hold (handhaven) in de pakketstatus?
7.12. Hoe plaats ik een pakket in de toestand 'te handhaven' (on hold)?
7.13. Hoe installeer ik een bronpakket?
7.14. Hoe bouw ik binaire pakketten, vertrekkend van een bronpakket?
7.15. Hoe kan ik zelf Debian-pakketten maken?

In dit hoofdstuk worden een aantal basiszaken uit de interne keuken van het pakketbeheersysteem van Debian behandeld. Indien u hoofdzakelijk geïnteresseerd bent in het gebruik van de desbetreffende gereedschappen, ga dan verder naar de hoofdstukken Hoofdstuk 8, De gereedschappen voor het pakketbeheer in Debian en/of Hoofdstuk 9, Uw Debian-systeem up-to-date houden.

7.1. Wat is een Debian-pakket?

Pakketten bevatten over het algemeen alle noodzakelijke bestanden om een aantal gerelateerde commando's of functies te implementeren. Eer bestaan twee types van Debian-pakketten:

  • Binaire pakketten die uitvoerbare bestanden bevatten, configuratiebestanden, man/info-pagina's, copyright-informatie en andere documentatie. Deze pakketten worden verdeeld in een Debian-specifieke archiefindeling (zie Paragraaf 7.2, “Wat is de indeling van een binair pakket van Debian?”). Zij worden gewoonlijk gekenmerkt door het feit dat ze '.deb' als bestandsextensie hebben. Binaire pakketten kunnen uitgepakt worden met het hulpprogramma dpkg van Debian (eventueel via een frontend zoals apt). Meer informatie is beschikbaar in zijn man-pagina.

  • Bron-pakketten, die bestaan uit een .dsc-bestand dat het bronpakket beschrijft (inclusief de namen van de volgende bestanden), een .orig.tar.gz-bestand dat de originele ongewijzigde broncode bevat in een met gzip gecomprimeerd tar-archief en meestal een .debian.tar.xz-bestand dat de Debian-specifieke wijzigingen aan de originele broncode bevat. Het hulpprogramma dpkg-source kan broncodearchieven van Debian verpakken en uitpakken. Informatie is te vinden in zijn man-pagina. (Het programma apt-get kan als frontend gebruikt worden voor dpkg-source.)

Het pakketsysteem maakt bij de installatie van software gebruik van "dependencies" (vereisten, soms ook afhankelijkheden genoemd) die door de pakketonderhouders zorgvuldig ontworpen werden. Deze vereisten worden beschreven in het bestand control dat in elk pakket aanwezig is. Bijvoorbeeld, het pakket dat de GNU C compiler (gcc) bevat, "vereist" het pakket binutils waarin zich de linker en de assembler bevinden. Indien een gebruiker het pakket gcc tracht te installeren zonder dat vooraf binutils geïnstalleerd werd, zal het pakketbeheersysteem (dpkg) de foutmelding geven dat het ook binutils nodig heeft en stoppen met de installatie van gcc. (De veeleisende gebruiker kan deze voorziening echter omzeilen; zie dpkg(8).) Meer hierover in Paragraaf 7.9, “Wat wordt bedoeld met het feit dat een pakket een ander pakket Depends (vereist), Recommends (aanbeveelt), Suggests (suggereert), Conflicts (ermee in strijd is), Replaces (vervangt), Breaks (maakt onklaar) of Provides (erin voorziet)?” hieronder.

Het pakketbeheergereedschap van Debian kan gebruikt worden om:

  • pakketten of delen ervan te hanteren en te beheren,

  • lokale vervangingen van bestanden uit een pakket te beheren,

  • ontwikkelaars te helpen bij de constructie van pakketarchieven, en

  • aid users in the installation of packages which reside on a remote archive site.

7.2. Wat is de indeling van een binair pakket van Debian?

A Debian "package", or a Debian archive file, contains the executable files, libraries, and documentation associated with a particular program or set of related programs. Normally, a Debian archive file has a filename that ends in .deb.

De interne indeling van deze binaire pakketten van Debian wordt beschreven in de man-pagina deb(5). Deze interne indeling kan veranderen (naar aanleiding van een hoofdrelease van Debian GNU/Linux). Gebruik daarom altijd dpkg-deb(1) als u grondbewerkingen moet uitvoeren op .deb-bestanden.

7.3. Waarom hebben Debian-pakketten dergelijke lange namen?

The Debian binary package file names conform to the following convention: <DebianPackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb

Checking the package name associated with a particular Debian archive file (.deb file) can be done in one of these ways:

  • inspect the "Packages" file in the directory where it was stored at a Debian archive site. This file contains a stanza describing each package; the first field in each stanza is the formal package name.

  • use the command dpkg --info PPP_VVV-RRR_AAA.deb (where PPP, VVV, RRR and AAA are the package name, version, revision and architecture of the package in question, respectively). This displays, among other things, the package name corresponding to the archive file being unpacked.

De component VVV is het versienummer dat door de programmaontwikkelaar (de zogenaamde upstream developer) aan het programma gegeven werd. Hier gelden geen standaarden, waardoor dit versienummer heel uiteenlopende vormen kan hebben, zoals "19990513" of "1.3.8pre1".

The RRR component is the Debian revision number, and is specified by the Debian developer (or a user who chooses to rebuild the package locally). This number corresponds to the revision level of the Debian package, thus, a new revision level usually signifies changes in the Debian Makefile (debian/rules), the Debian control file (debian/control), the installation or removal scripts (debian/p*), or in the configuration files used with the package.

The AAA component identifies the processor for which the package was built. This is commonly amd64, which refers to AMD64, Intel 64 or VIA Nano chips. For other possibilities review Debian's archive directory structure at Paragraaf 6.7, “Wat betekenen al die mappen in de archieven van Debian?”. For details, see the description of "Debian architecture" in the manual page dpkg-architecture(1).

7.4. Wat is een Debian control-bestand?

Specificaties over de inhoud van een control-bestand van Debian worden gegeven in het Beleidshandboek van Debian, hoofdstuk 5. Zie Paragraaf 12.1, “Welke andere documentatie bestaat er o en voor een Debian-systeem?”.

Een beknopt voorbeeld van een control-bestand voor het Debian-pakket ziet u hieronder:

Pakket: hello
Versie: 2.9-2+deb8u1
Architectuur: amd64
Onderhouder: Santiago Vila <[email protected]>
Grootte-na-Installatie: 145
Vereist: libc6 (>= 2.14)
Tegenstrijdig met: hello-traditional
Maakt defect: hello-debhelper (<< 2.9)
Vervangt: hello-debhelper (<< 2.9), hello-traditional
Sectie: devel
Prioriteit: optional
Homepage: https://www.gnu.org/software/hello/
Beschrijving: voorbeeldpakket gebaseerd op GNU hello
 Het GNU-programma hello produceert een bekende, vriendelijke
 begroeting. Het laat niet-programmeurs toe een klassiek
 gereedschap uit de computerwetenschappen te gebruiken
 waartoe ze anders geen toegang zouden hebben.
 .
 Ernstig nu: dit is een voorbeeld van hoe u een Debian-pakket maakt.
 Het is de Debian-versie van het programma "hello world"
 van het GNU Project. (dat zelf voor het GNU Project als
 voorbeeld dient).

Het veld Package vermeldt de naam van het pakket. Dat is de naam waarmee het pakket door de pakketgereedschappen gemanipuleerd kan worden. En meestal, maar niet noodzakelijk, is die hetzelfde als de eerste component van de naam van het Debian-archiefbestand.

Het veld Version vermeldt zowel het versienummer dat de toeleverende programmaontwikkelaar eraan geeft als (in de laatste component) het revisieniveau van het Debian-pakket van dit programma, zoals toegelicht werd in Paragraaf 7.3, “Waarom hebben Debian-pakketten dergelijke lange namen?”.

Het veld Architecture vermeldt de chip waarvoor dit specifieke binaire pakket gecompileerd werd.

Het veld Depends vermeldt een lijst van pakketten die geïnstalleerd moeten zijn opdat dit pakket met succes geïnstalleerd zou kunnen worden.

Het veld Installed-Size geeft aan hoeveel schijfruimte het geïnstalleerde pakket zal gebruiken. Het is de bedoeling dat de installatie-frontends daarvan gebruik maken om te tonen of er voldoende schijfruimte beschikbaar is voor de installatie van het programma.

The Section line gives the "section" where this Debian package is stored at the Debian archive sites.

Het veld Priority geeft aan hoe belangrijk het is dat dit pakket geïnstalleerd is, waardoor semi-intelligente software zoals apt en aptitude het pakket kunnen indelen in een categorie, zoals bijvoorbeeld optioneel geïnstalleerde pakketten. Zie Paragraaf 7.7, “Wat is een Essential (essentieel), Required (vereist), Important (belangrijk), Standard (standaard), Optional (optioneel) en Extra (extra) pakket?”.

Het veld Maintainer vermeldt het e-mailadres van de persoon die momenteel verantwoordelijk is voor het onderhoud van dit pakket.

Het veld Description bevat een korte beschrijving van de functionaliteit van het pakket.

Voor meer informatie over alle mogelijke velden welke een pakket kan hebben kunt u hoofdstuk 5 van het Debian beleidshandboek, "Controle-bestanden en hun velden", raadplegen. Zie Paragraaf 12.1, “Welke andere documentatie bestaat er o en voor een Debian-systeem?”.

7.5. Wat is een Debian conffile?

Conffiles is een lijst van configuratiebestanden (die meestal in /etc geplaatst worden) welke het pakketbeheersysteem niet zal overschrijven als het pakket opgewaardeerd wordt. Dit garandeert dat de lokale waarden van de inhoud van die bestanden behouden blijven, hetgeen een cruciale functionaliteit is voor het mogelijk maken van de opwaardering van pakketten op een werkend systeem.

Om exact te weten welke bestanden behouden blijven tijdens een opwaardering, geeft u het commando

dpkg --status pakket

en kijkt u bij "Conffiles:".

7.6. Wat is een Debian preinst, postinst, prerm, en postrm script?

Deze bestanden zijn uitvoerbare scripts die automatisch uitgevoerd worden vooraleer of nadat een pakket geïnstalleerd of verwijderd wordt. Samen met het bestand met de naam control, maken al deze bestanden deel uit van de "controle"-sectie van een Debian archiefbestand.

De verschillende bestanden zijn:

preinst

Dit script wordt uitgevoerd vooraleer het pakket waartoe het behoort, uitgepakt wordt uit zijn Debian-archiefbestand (".deb"). Vele 'preinst'-scripts stoppen diensten voor pakketten die opgewaardeerd worden totdat hun opwaardering of installatie voltooid is (na de succesvolle uitvoering van het 'postinst'-script).

postinst

This script typically completes any required configuration of the package foo once foo has been unpacked from its Debian archive (".deb") file. Many 'postinst' scripts execute any commands necessary to start or restart a service once a new package has been installed or upgraded.

prerm

Dit script stopt meestal eventuele daemons die verband houden met dat pakket. Het wordt uitgevoerd vooraleer de bestanden die verband houden met het pakket, verwijderd worden.

postrm

Dit script wijzigt gewoonlijk koppelingen of andere bestanden die verband houden met foo en/of verwijdert bestanden die door het pakket gecreëerd werden. (Zie ook Paragraaf 7.8, “Wat is een virtueel pakket?”.)

Momenteel zijn alle controle-bestanden te vinden in de map /var/lib/dpkg/info. De bestanden die verband houden met het pakket foo hebben een naam die begint met "foo" en hebben voor zover van toepassing de bestandsextensie "preinst", "postinst", enz. Het bestand foo.list in die map vermeldt alle bestanden die door het pakket foo geïnstalleerd werden. (merk op dat de locatie van die bestanden behoort tot de interne keuken van dpkg; u moet daarop niet vertrouwen.)

7.7. Wat is een Essential (essentieel), Required (vereist), Important (belangrijk), Standard (standaard), Optional (optioneel) en Extra (extra) pakket?

Elk pakket krijgt door de onderhouders van de distributie een prioriteit toegekend als een hulpmiddel voor het pakketbeheersysteem. De prioriteiten zijn:

  • Required (vereist): pakketten die noodzakelijk zijn voor de goede werking van het systeem.

    Dit omvat alle noodzakelijke gereedschappen voor het repareren van een defect systeem. U mag deze pakketten niet verwijderen want uw systeem zou volledig defect kunnen geraken en waarschijnlijk zou u niet eens dpkg kunnen gebruiken om de zaken terug te plaatsen. Systemen met enkel pakketten met prioriteit 'Required' zijn waarschijnlijk onbruikbaar, maar hebben voldoende functionaliteit om de systeembeheerder in staat te stellen het op te starten en bijkomende software te installeren.

  • Important (belangrijke) pakketten zouden op elk Unix-achtig systeem aanwezig moeten zijn.

    Andere pakketten zonder dewelke het systeem niet goed zou functioneren of niet bruikbaar zou zijn, vallen hieronder. Daaronder valllen NIET Emacs of X of TeX of gelijk welke andere omvangrijke toepassing. Deze pakketten voorzien enkel in de basisinfrastructuur.

  • Standard packages are standard on any Linux system, including a reasonably small but not too limited character-mode system. Tools are included to be able to send e-mail (with mutt) and download files from archive servers.

    Dit is wat standaard geïnstalleerd wordt als de gebruiker niets anders selecteert. Veel uitgebreide toepassingen vallen hieronder niet, maar hieronder valt wel de interpreter van Python en bepaalde serversoftware, zoals OpenSSH (om beheer vanop afstand mogelijk te maken) en Exim (voor het afleveren van e-mail, hoewel het ingesteld kan worden om enkel lokaal e-mail af te leveren). Hieronder valt ook bepaalde algemene documentatie die voor de meeste gebruikers nuttig is.

  • Optional (optionele) pakketten zijn al die pakketten die u redelijkerwijs wel wilt installeren als u ze niet goed kent, of pakketten die geen bijzondere vereisten stellen.

    Daaronder vallen X, een complete TeX-distributie en vele toepassingen.

  • Extra: pakketten die ofwel tegenstrijdig zijn met andere pakketten met een hogere prioriteit, meestal enkel nuttig zijn voor wie ze echt kent, of bijzondere vereisten stellen die ze ongeschikt maken voor de categorie "Optional" (optioneel).

Indien u een standaardinstallatie van Debian uitvoert zullen alle pakketten met prioriteit Standard of hoger op uw systeem geïnstalleerd worden. Indien u voorgedefinieerde taken ('tasks') selecteert zullen er ook pakketten met een lagere prioriteit geïnstalleerd worden.

Daarnaast worden sommige pakketten gemarkeerd als Essential (essentieel) omdat ze absoluut noodzakelijk zijn voor het goed functioneren van het systeem. De gereedschappen voor pakketbeheer zullen weigeren om deze te verwijderen.

7.8. Wat is een virtueel pakket?

Een virtueel pakket is een algemene naam voor een groep pakketten die allemaal eenzelfde functionaliteit bieden. Bijvoorbeeld, de programma's konqueror en firefox-esr zijn allebei webbrowsers en kunnen daarom voldoen aan de vereiste van elk programma dat de aanwezigheid van een webbrowser op het systeem nodig heeft om te kunnen functioneren of van nut te kunnen zijn. Daarom wordt van beide pakketten gezegd dat ze voorzien in het "virtueel pakket" met de naam www-browser.

Evenzo leveren zowel exim4 als sendmail de functionaliteit van e-mailtransporteur. Daarom wordt van beide pakketten gezegd dat ze voorzien in het virtueel pakket "mail-transport-agent". Indien een van beide geïnstalleerd is, zal met de aanwezigheid van dit virtueel pakket voldaan zijn aan de vereiste van elk programma dat afhankelijk is van de installatie van een mail-transport-agent.

Indien op een systeem meer dan een pakket geïnstalleerd is dat voorziet in hetzelfde virtueel pakket, beschikt Debian over een mechanisme waardoor systeembeheerders een ervan kunnen aanduiden als voorkeurspakket. Het betreffende commando is update-alternatives en wordt later behandeld onder Paragraaf 11.11, “Dommige gebruikers houden van mawk, anderen houden van gawk; sommigen houden van vim, anderen houden van elvis; sommigen houden van trn, anderen houden van tin. Hoe ondersteunt Debian diversiteit?”.

7.9. Wat wordt bedoeld met het feit dat een pakket een ander pakket Depends (vereist), Recommends (aanbeveelt), Suggests (suggereert), Conflicts (ermee in strijd is), Replaces (vervangt), Breaks (maakt onklaar) of Provides (erin voorziet)?

Het pakketsysteem van Debian kent een scala van "afhankelijkheden/vereisten" (dependencies) dat ontworpen werd om aan te geven (met een enkele vlag) in welke mate een programma A op een bepaald systeem kan functioneren zonder de aanwezigheid van programma B:

  • Pakket A vereist (depends in het jargon van Debian - in vertalingen wordt soms ook de term 'is afhankelijk van' gebruikt) pakket B als B absoluut geïnstalleerd moet zijn om B te kunnen uitvoeren. In sommige gevallen vereist A niet enkel B, maar een bepaalde versie van B. In dergelijk geval geeft het versienummer meestal een ondergrens aan, in die zin dat A ook om het even welke versie van B kan gebruiken die recenter is dan de opgegeven versie.

  • Pakket A beveelt pakket B aan (recommends in het jargon van Debian) als de pakketbeheerder van oordeel is dat de meeste gebruikers A niet zouden willen hebben zonder ook te beschikken over de functionaliteit die door B geboden wordt.

  • Pakket A suggereert (suggests in het jargon van Debian) pakket B als pakket B bestanden bevat die verband houden met de functionaliteit van A (en deze meestal uitbreiden).

  • Pakket A is in tegenstrijd met (conflicts in het jargon van Debian - in vertalingen wordt soms ook de term 'conflicteert met' gebruikt) pakket B als pakket A niet zal werken als pakket B op het systeem geïnstalleerd is. Meestal doet een conflict zich voor als A bestanden bevat die een verbeterde versie zijn van die van B. De kwalificatie "Conflicts" wordt vaak gebruikt in combinatie met "replaces".

  • Pakket A vervangt (replaces in het jargon van Debian) pakket B als bestanden die door B geïnstalleerd worden, verwijderd en (in sommige gevallen) overschreven worden door bestanden uit A.

  • Pakket A maakt pakket B onklaar (breaks in het jargon van Debian - in vertalingen wordt soms ook de term 'breekt' gebruikt) wanneer beide pakketten niet gelijktijdig geconfigureerd kunnen zijn op een systeem. Het pakketbeheersysteem zal weigeren om het ene pakket te installeren als het andere reeds geïnstalleerd en geconfigureerd is op het systeem.

  • Pakket A voorziet in (provides in het jargon van Debian) pakket B als alle bestanden en alle functionaliteit van B opgenomen zijn in A. Dit mechanisme biedt gebruikers met beperkte opslagruimte de mogelijkheid om enkel dat deel van pakket A te nemen waaraan ze echt behoefte hebben.

Meer uitgebreide informatie over het gebruik van elk van deze termen i s te vinden in het Beleidshandboek van Debian, hoofdstuk 7.2, "Binary Dependencies" (Vereisten van binaire pakketten), zie Paragraaf 12.1, “Welke andere documentatie bestaat er o en voor een Debian-systeem?”.

7.10. Wat wordt bedoeld met Pre-Depends (voorvereisten)?

"Pre-Depends" (een voorvereiste) is een bijzondere vereiste. Bij de meeste pakketten is het zo dat dpkg het archiefbestand van een pakket (d.w.z. zijn .deb-bestand) zal uitpakken ongeacht het feit of de bestanden die het vereist op het systeem aanwezig zijn of niet. Eenvoudig geformuleerd betekent uitpakken dat dpkg de bestanden die geïnstalleerd moeten worden, zal extraheren uit het archiefbestand en ze op hun plaats zal zetten. Indien dit pakket de aanwezigheid op het systeem van bepaalde andere pakketten vereist, zal dpkg weigeren de installatie af te ronden (door te weigeren de actie "configureren" uit te voeren) totdat de andere pakketten geïnstalleerd zijn.

Echter, bij sommige pakketten zal dpkg zelfs weigeren deze uit te pakken totdat voldaan werd aan sommige vereisten. Van dergelijke pakketten wordt gezegd dat ze de aanwezigheid van andere pakketten als "voorvereiste" (Pre-depends) hebben. Het Debian-project ontwikkelde dit mechanisme om de veilige opwaardering mogelijk te maken van systemen op basis van het a.out-formaat naar het ELF-formaat, waarbij de volgorde waarin pakketten uitgepakt werden, cruciaal was. Er doen zich ook andere uitgebreide opwaarderingssituaties voor waarbij deze methode nuttig is, bijvoorbeeld bij de opwaardering van pakketten die als prioriteit 'required' (vereist) hebben en hun LibC-vereiste.

Zoals hiervoor reeds het geval was, kan ook hierover meer informatie gevonden worden in het Beleidshandboek.

7.11. Wat wordt bedoeld met unknown (onbekend), install (installeren), remove (verwijderen), purge (wissen) en hold (handhaven) in de pakketstatus?

Deze "gewenst"-vlaggen geven aan wat de gebruiker met een pakket wilde doen (zoals aangegeven bij de rechtstreekse aanroeping door de gebruiker van dpkg/apt/ aptitude).

Hun betekenis is de volgende:

  • unknown - (onbekend) de gebruiker heeft nooit aangegeven dat hij het pakket wilde.

  • install - (installeren) de gebruiker wil dat het pakket geïnstalleerd of opgewaardeerd wordt.

  • remove - (verwijderen) de gebruiker wil dat het pakket verwijderd wordt, maar wil eventuele bestaande configuratiebestanden niet verwijderen.

  • purge - (wissen) de gebruiker wil dat het pakket volledig verwijderd wordt, met inbegrip van zijn configuratiebestanden.

  • hold - (handhaven) de gebruiker wil niet dat er iets gebeurt met dit pakket, d.w.z. dat hij de huidige versie in de huidige toestand wenst te behouden, wat die ook is.

7.12. Hoe plaats ik een pakket in de toestand 'te handhaven' (on hold)?

Er zijn drie manieren om pakketten vast te houden/zetten, met dpkg, apt of aptitude.

Bij dpkg moet u de lijst met pakketselecties exporteren met:

dpkg --get-selections \* > selections.txt

Dan moet u het gegenereerde bestand selections.txt bewerken en de regel met het pakket dat u wenst te handhaven, bijvoorbeeld libc6, veranderen van:

libc6                                           install

in:

libc6                                           hold

Bewaar het bestand en laad het opnieuw in de databank van dpkg met:

dpkg --set-selections < selections.txt

Bij apt kunt u een pakket als te handhaven instellen met

apt-mark hold pakket_naam

en de 'te handhaven'-status verwijderen met

apt-mark unhold pakket_naam

Bij aptitude kunt u de 'te handhaven'-status van een pakket regelen met

aptitude hold pakket_naam

en de 'te handhaven'-status verwijderen met

aptitude unhold pakket_naam

7.13. Hoe installeer ik een bronpakket?

Bronpakketten van Debian kunnen niet echt "geïnstalleerd" worden. Ze worden enkel uitgepakt in om het even welke map waarin u de binaire pakketten die deze produceren, wilt gaan bouwen.

Bronpakketten worden meestal verspreid door dezelfde spiegelservers waarop u de binaire pakketten vindt. Indien u uw APT's sources.list(5) zo instelt dat het bestand de passende "deb-src"-regels bevat, kunt u eenvoudig een bronpakket downloaden met de opdracht

apt-get source foo

Om u te helpen bij het effectief bouwen van het bronpakket, voorzien Debian-bronpakketten in het zogenaamde bouwvereistenmechanisme (build-dependencies mechanism). Dit betekent dat de onderhouder van het bronpakket een lijst bijhoudt van andere pakketten die vereist zijn voor het bouwen van hun pakket. Om het nut ervan te zien, gebruikt u het commando

apt-get build-dep foo

voor u het bronpakket bouwt.

7.14. Hoe bouw ik binaire pakketten, vertrekkend van een bronpakket?

De aangewezen manier om dit te doen is met behulp van verschillende verpakkingsgereedschappen. We tonen hoe dit gebeurt met de gereedschappen van devscripts. Installeer dit pakket als dat nog niet gebeurd is.

Haal eerst het bronpakket op:

apt-get source foo

en ga naar de broncodeboom:

cd foo-*

Installeer de bouwvereisten die (eventueel) nodig zijn:

sudo apt-get build-dep foo

Creëer nadien een speciaal versienummer voor uw eigen bouw (zodat u later niet in verwarring raakt wanneer Debian zelf een nieuwe versie uitbrengt):

dch -l local 'Bla bla bla'

En bouw tenslotte uw pakket:

debuild -us -uc

Indien alles correct verliep, zou u nu in staat moeten zijn uw pakket te installeren met het commando

sudo dpkg -i ../*.deb

Indien u devscripts niet wilt gebruiken en verkiest om de zaken handmatig te doen, volg dan deze werkwijze:

U heeft alle bestanden nodig van het type foo_*.dsc, foo_*.tar.gz en foo_*.debian.tar.xz om het bronpakket te compileren (opmerking: voor sommige pakketten waarvan de originele broncode van Debian zelf afkomstig is, bestaat geen .debian.tar.xz)

Eens u deze verzameld heeft (Paragraaf 7.13, “Hoe installeer ik een bronpakket?”) en als het pakket dpkg-dev op uw systeem geïnstalleerd is, dan zal het volgende commando:

dpkg-source -x foo_versie-revisie.dsc

het pakket uitpakken in een map met de naam foo-versie.

Indien u enkel het pakket wilt compileren, kunt met het commando cd naar de map foo-versie gaan en het volgende commando geven:

dpkg-buildpackage -rfakeroot -b

om het pakket te bouwen (merk op dat daarvoor ook het pakket fakeroot nodig is) en daarna

dpkg -i ../foo_versie-revisie_arch.deb

om de/het pas gebouwde pakket(ten) te installeren.

7.15. Hoe kan ik zelf Debian-pakketten maken?

Voor een meer gedetailleerde beschrijving hiervan moet u de Handleiding voor nieuwe onderhouders (New Maintainers' Guide) lezen, die u vindt in het pakket maint-guide of op https://www.debian.org/doc/devel-manuals#maint-guide, of de Gids voor onderhouders van Debian, die u vindt in het pakket debmake-doc of op https://www.debian.org/doc/devel-manuals#debmake-doc.