[ vorige ] [ Inhoud ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ volgende ]


De Debian GNU/Linux FAQ
Hoofdstuk 7 - Grondbeginselen van het pakketbeheersysteem van Debian


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 De gereedschappen voor het pakketbeheer in Debian, Hoofdstuk 8 en/of Uw Debian-systeem up-to-date houden, Hoofdstuk 9.


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:

Installation of software by the package system uses "dependencies" which are carefully designed by the package maintainers. These dependencies are documented in the control file associated with each package. For example, the package containing the GNU C compiler (gcc) "depends" on the package binutils which includes the linker and assembler. If a user attempts to install gcc without having first installed binutils, the package management system (dpkg) will send an error message that it also needs binutils, and stop installing gcc. (However, this facility can be overridden by the insistent user, see dpkg(8).) See more in 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)?, Sectie 7.9 below.

Het pakketbeheergereedschap van Debian kan gebruikt worden om:


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

Een "pakket" van Debian, of een archiefbestand van Debian, bevat de uitvoerbare bestanden, bibliotheken en documentatie die verband houdt met een specifieke programma-suite of groep van verwante programma's. Gewoonlijk heeft een Debian-archief een bestandsnaam die eindigt op .deb.

The internals of this Debian binary packages format are described in the deb(5) manual page. This internal format is subject to change (between major releases of Debian GNU/Linux), therefore please always use dpkg-deb(1) if you need to do lowlevel manipulations on .deb files.


7.3 Waarom hebben Debian-pakketten dergelijke lange namen?

De bestandsnaam van een Debian-pakket beantwoordt aan de volgende conventie: <foo>_<VersieNummer>-<DebianRevisieNummer>_<DebianArchitectuur>.deb

Merk op dat foo hier staat voor de pakketnaam. Nagaan wat de pakketnaam is van een specifiek archiefbestand van Debian (een .deb-bestand), kan op een van de volgende manieren gebeuren:

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".

De component RRR is het revisienummer van Debian en wordt gegeven door de ontwikkelaar van Debian (of een individuele gebruiker die kiest om het pakket zelf te bouwen). Dit nummer komt overeen met het revisieniveau van het Debian-pakket. En dus betekent een nieuw revisienummer meestal dat de Debian Makefile (debian/rules), het Debian control-bestand (debian/control), de scripts voor installatie en verwijdering (debian/p*) of de configuratiebestanden van het pakket gewijzigd werden.

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 FTP directory structure at Wat betekenen al die mappen in de FTP-archieven van Debian?, Sectie 6.7. 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 Welke andere documentatie bestaat er o en voor een Debian-systeem?, Sectie 12.1.

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 <sanvila@debian.org>
     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: http://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 Waarom hebben Debian-pakketten dergelijke lange namen?, Sectie 7.3.

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.

De regel Section geeft de "sectie" aan waar dit Debian-pakket opgeslagen is op de Debian FTP-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 Wat is een Essential (essentieel), Required (vereist), Important (belangrijk), Standard (standaard), Optional (optioneel) en Extra (extra) pakket?, Sectie 7.7.

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 Welke andere documentatie bestaat er o en voor een Debian-systeem?, Sectie 12.1.


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

Dit script werkt meestal een eventuele vereiste configuratie van het pakket foo af nadat foo uitgepakt werd uit zijn Debian-archiefbestand (".deb"). Vaak vragen 'postinst'-scripts de gebruiker om invoer en/of waarschuwen hem dat als hij de standaardwaarden aanvaardt, hij later op de configuratie moet terugkomen om die volgens behoefte te herconfigureren. Vele 'postinst'-scripts voeren dan eventueel commando's uit die nodig zijn om een dienst te starten of te herstarten eens een nieuw pakket opgewaardeerd of geïnstalleerd werd.

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 Wat is een virtueel pakket?, Sectie 7.8.)

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:

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 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?, Sectie 11.11.


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:

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 Welke andere documentatie bestaat er o en voor een Debian-systeem?, Sectie 12.1.


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:


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.

Source packages are distributed on most of the same mirrors where you can obtain the binary packages. If you set up your APT's sources.list(5) to include the appropriate "deb-src" lines, you'll be able to easily download any source package by running

     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_*.diff.gz om het bronpakket te compileren (opmerking: voor sommige pakketten waarvan de originele broncode van Debian zelf afkomstig is, bestaat geen .diff.gz)

Eens u deze verzameld heeft (Hoe installeer ik een bronpakket?, Sectie 7.13) 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 http://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.


[ vorige ] [ Inhoud ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ volgende ]


De Debian GNU/Linux FAQ

versie 9.0, 17 November 2018

De auteurs worden vermeld in Auteurs van de Debian FAQ