dpkg [optie...] actie
Deze handleiding is bedoeld voor gebruikers die de commandoregelopties van dpkg en de pakkettoestanden meer in detail willen begrijpen dan met de info van dpkg --help mogelijk is.
Zij zou niet gebruikt moeten worden door pakketonderhouders die willen begrijpen hoe dpkg hun pakketten installeert. De beschrijving van wat dpkg doet bij het installeren en verwijderen van pakketten is bijzonder inadequaat.
dpkg is a medium-level tool to install, build, remove and manage Debian packages. The primary and more user-friendly front-end for dpkg as a CLI (command-line interface) is apt(8> and as a TUI (terminal user interface) is aptitude(8). dpkg itself is controlled entirely via command line parameters, which consist of exactly one action and zero or more options. The action-parameter tells dpkg what to do and options control the behavior of the action in some way.
dpkg kan ook gebruikt worden als een frontend voor dpkg-deb(1) en dpkg-query(1). De lijst van ondersteunde acties kunt u verderop in het onderdeel ACTIES vinden. Indien dpkg een dergelijke actie tegenkomt, voert het gewoon dpkg-deb of dpkg-query uit met de parameters die het meekreeg. Maar momenteel worden aan hen geen specifieke opties doorgegeven. Indien u een dergelijke optie wenst te gebruiken moet u deze programma's rechtstreeks gebruiken.
dpkg houdt bruikbare informatie bij over beschikbare pakketten. De informatie wordt ingedeeld in drie klassen: states (toestand) , selection states (selectietoestand) en flags (vlaggen). Het is de bedoeling deze waarden hoofdzakelijk met behulp van dselect aan te passen.
Een installatie bestaat uit de volgende stappen:
1. Het extraheren van de controle-bestanden van het nieuwe pakket.
2. Indien voorafgaand aan de nieuwe installatie een andere versie van hetzelfde pakket geïnstalleerd was, het prerm-script van het oude pakket uitvoeren.
3. Indien het pakket een preinst-script meelevert, dat uitvoeren.
4. Het uitpakken van de nieuwe bestanden en tegelijk een reservekopie van de oude bestanden maken, zodat ze hersteld kunnen worden mocht er iets fout lopen.
5. Indien voorafgaand aan de nieuwe installatie een andere versie van hetzelfde pakket geïnstalleerd was, het postrm-script van het oude pakket uitvoeren. Merk op dat dit script uitgevoerd wordt na het preinst-script van het nieuwe pakket, omdat nieuwe bestanden neergeschreven worden tegelijk met het verwijderen van oude bestanden.
6. Het configureren van het pakket. Zie --configure voor gedetailleerde informatie over hoe dit gebeurt.
Om een pakket dat reeds geconfigureerd werd opnieuw te configureren, moet u echter het commando dpkg-reconfigure(8) gebruiken.
Het configureren bestaat uit de volgende stappen:
1. Het uitpakken van de configuratiebestanden en tegelijk een reservekopie maken van de oude configuratiebestanden, zodat ze hersteld kunnen worden mocht er iets fout lopen.
2. Indien het pakket een postinst-script meelevert, dat uitvoeren.
Het verwijderen van een pakket bestaat uit de volgende stappen:
1. Het uitvoeren van het prerm-script
2. Het verwijderen van de geïnstalleerde bestanden
3. Het uitvoeren van het postrm-script
Merk op: sommige configuratiebestanden kunnen onbekend zijn voor dpkg omdat ze via de configuratiescripts gecreëerd en afzonderlijk afgehandeld worden. In dat geval zal dpkg ze niet zelf verwijderen, maar het postrm-script van het pakket (dat door dpkg geactiveerd wordt) moet tijdens een wis-operatie voor hun verwijdering zorgen. Dit is uiteraard enkel van toepassing op bestanden in systeemmappen, niet op configuratiebestanden die neergeschreven werden in de persoonlijke map van gebruikers.
Het wissen van een pakket bestaat uit de volgende stappen:
1. Het verwijderen van het pakket als het nog niet verwijderd was. Zie --remove voor gedetailleerde informatie over hoe dit gebeurt.
2. Het uitvoeren van het postrm-script
Momenteel is de enige functionele toets die uitgevoerd wordt, een verificatie van de md5-controlesom van de inhoud van het bestand tegenover de opgeslagen waarde in de bestandsdatabase. De toets wordt enkel uitgevoerd als de database de md5-controlesom van het bestand bevat. Om na te gaan of er eventueel metadata ontbreken in de database, kan het commando --audit gebruikt worden.
De indeling van de uitvoer kan met de optie --verify-format gekozen worden. Standaard wordt de indeling rpm gebruikt, maar dit kan in de toekomst veranderen en om die reden zouden programma's die de uitvoer van dit commando ontleden, expliciet moeten aangeven welke indeling zij verwachten.
Een eenvoudiger commando om in één keer het bestand available op te halen en bij te werken is dselect update. Merk op dat dit bestand grotendeels nutteloos is als u niet dselect gebruikt, maar een op APT gebaseerd frontend: APT heeft zijn eigen systeem om zicht te houden op de beschikbare pakketten.
Het bestand available moet up-to-date zijn opdat dit commando dienstig zou zijn, anders zullen niet-gekende pakketten genegeerd worden en zal er in dat verband een waarschuwing gegeven worden. Zie de commando's --update-avail en --merge-avail voor meer informatie.
Merk op: dit commando maakt zowel gebruik van het bestand available als van de pakketselectie.
Indien er een dergelijk pakket is, geef het dan weer in de vorm van een item voor het bestand Packages dat passend verder bewerkt kan worden.
Merk op: dit commando maakt zowel gebruik van het bestand available als van de pakketselectie.
Geeft 0 terug als een pakket weergegeven werd, 1 als geen geschikt pakket te vinden is en 2 in geval van een fout.
Wanneer dit gebruikt wordt met --robot, zal de uitvoer het versienummer bevatten in een gespikkeld numeriek formaat, zonder regeleinde.
Alle opties kunnen zowel aan de commandoregel opgegeven worden als in het dpkg configuratiebestand /etc/dpkg/dpkg.cfg of in fragmentbestanden (met namen die overeenkomen met het shellpatroon '[0-9a-zA-Z_-]*') in de configuratiemap /etc/dpkg/dpkg.cfg.d/. Elke regel in het configuratiebestand is ofwel een optie (exact hetzelfde als de commandoregeloptie maar zonder de verbindingstekens aan het begin) of een commentaar (als hij begint met een ‘#’).
Getal Beschrijving
1 Algemene informatieve voortgangsinformatie
2 Activering en status van beheerdersscripts
10 Uitvoer voor elk verwerkt bestand
100 Veel uitvoer voor elk verwerkt bestand
20 Uitvoer voor elk configuratiebestand
200 Veel uitvoer voor elk configuratiebestand
40 Vereisten en tegenstrijdigheden
400 Veel uitvoer i.v.m. vereisten/tegenstrijdigheden
10000 Activatie en verwerking van triggers
20000 Veel uitvoer i.v.m. triggers
40000 Belachelijk veel uitvoer i.v.m. triggers
1000 Veel geleuter over bijv. de map dpkg/info
2000 Belachelijk veel geleuter
Waarschuwing: Deze opties zijn vooral bedoeld om enkel door experts gebruikt te worden. Er gebruik van maken zonder een volkomen begrip van hun effecten kan uw volledig systeem defect maken.
all: Schakelt alle forceer-opties aan (of uit).
downgrade(*): Een pakket installeren, zelfs als reeds een nieuwere versie ervan geïnstalleerd is.
Waarschuwing: Momenteel voert dpkg geen enkele vereistencontrole uit bij degradaties en zal dan ook niet waarschuwen indien een degradatie een vereiste van een ander pakket defect maakt. Dit kan ernstige neveneffecten hebben. Degraderen van essentiële componenten van het systeem kan zelfs uw hele systeem onbruikbaar maken. Te gebruiken met voorzichtigheid.
configure-any: Ook elk uitgepakt maar niet-geconfigureerd pakket waarvan het huidige pakket afhankelijk is, configureren.
hold: Automatische installaties, opwaarderingen en verwijderingen van pakketten toestaan, zelfs al zijn ze als te behouden (on "hold") gemarkeerd. Merk op: Dit voorkomt deze acties niet wanneer er expliciet om gevraagd wordt.
remove-reinstreq: Een pakket verwijderen, zelfs als het defect is en er aangegeven staat dat een herinstallatie nodig is. Dit kan bijvoorbeeld tot gevolg hebben dat delen van het pakket op het systeem achterblijven, maar dpkg zal er dan niet meer van op de hoogte zijn.
remove-protected: Het pakket verwijderen, zelfs al wordt het als beschermd beschouwd (sinds dpkg 1.20.1). Beschermde pakketten bevatten meestal belangrijke infrastructuur voor de systeemopstart. Ze verwijderen kan tot gevolg hebben dat het hele systeem niet langer kan opstarten. Gebruik dit dus met voorzichtigheid.
remove-essential: Het pakket verwijderen, zelfs al wordt het als essentieel beschouwd. Essentiële pakketten bevatten meestal hele basale Unix commando's. Ze verwijderen kan tot gevolg hebben dat het hele systeem stopt met werken. Gebruik dit dus met voorzichtigheid.
depends: Alle vereistenproblemen omzetten in waarschuwingen. Dit heeft invloed op de velden Pre-Depends en Depends.
depends-version: Zich niet om versies bekommeren bij het toetsen van vereisten. Dit heeft invloed op de velden Pre-Depends en Depends.
breaks: Installeren, zelfs als dit een ander pakket defect zou maken (sinds dpkg 1.14.6). Dit heeft invloed op het veld Breaks.
conflicts: Installeren, zelfs als er een tegenstelling is met een ander pakket. Dit is gevaarlijk, want gewoonlijk zal dit het overschrijven van bepaalde bestanden tot gevolg hebben. Dit heeft invloed op het veld Conflicts.
confmiss: Zonder vragen steeds het ontbrekende configuratiebestand installeren. Dit is gevaarlijk, aangezien het betekent dat een verandering die aan een bestand aangebracht werd (het verwijderen ervan), niet behouden wordt.
confnew: Als een configuratiebestand aangepast werd en de versie uit het pakket gewijzigd werd, dan steeds zonder vragen de nieuwe versie installeren, tenzij ook --force-confdef opgegeven werd. In dat geval wordt de voorkeur gegeven aan de standaardactie.
confold: Als een configuratiebestand aangepast werd en de versie uit het pakket gewijzigd werd, dan steeds zonder vragen de oude versie behouden, tenzij ook --force-confdef opgegeven werd. In dat geval wordt de voorkeur gegeven aan de standaardactie.
confdef: Als een configuratiebestand aangepast werd en de versie uit het pakket gewijzigd werd, dan steeds zonder vragen voor de standaardactie kiezen. Indien er geen standaardactie is, zal het programma stoppen en de gebruiker een vraag stellen, tenzij ook --force-confnew of --force-confold opgegeven werd. In dat geval zal het dit gebruiken om over de uiteindelijke actie te beslissen.
confask: Als een configuratiebestand aangepast werd, altijd aanbieden om het te vervangen door de versie uit het pakket, ook al werd de versie uit het pakket niet gewijzigd (sinds dpkg 1.15.8). Indien ook een van de opties --force-confnew, --force-confold of --force-confdef opgegeven werd, zal het die gebruiken om over de uiteindelijke actie te beslissen.
overwrite: Een bestand van een pakket overschrijven met het bestand van een ander pakket.
overwrite-dir: Een map van een pakket overschrijven met het bestand van een ander pakket.
overwrite-diverted: Een omgeleid bestand overschrijven met een niet-omgeleide versie.
statoverride-add: Bij het toevoegen ervan een bestaande statusmodificatie overschrijven (sinds dpkg 1.19.5).
statoverride-remove: Bij het verwijderen ervan een ontbrekende statusmodificatie negeren (sinds dpkg 1.19.5).
security-mac(*): Bij het installeren van bestanden op het bestandssysteem gebruik maken van platformspecifieke beveiliging, gebaseerd op Mandatory Access Controls (MAC) (since dpkg 1.19.5). Op Linux-systemen gebruikt de implementatie SELinux.
unsafe-io: Bij het uitpakken geen veilige I/O-operaties uitvoeren (sinds dpkg 1.15.8.6). Momenteel houdt dit in dat geen bestandssysteemsynchronisatie gebeurt vooraleer bestanden hernoemd worden. Daarvan is geweten dat dit op sommige bestandssystemen tot aanzienlijk slechtere prestaties leidt, en dit jammer genoeg vooral op die bestandssystemen die veilige I/O het meest nodig hebben omwille van hun onbetrouwbaar gedrag, hetgeen bij abrupte systeemcrashes aanleiding kan geven tot bestanden met lengte zero.
Opmerking: Overweeg liever om voor ext4, de belangrijkste betrokkene, gebruik te maken van de aankoppeloptie nodelalloc, waardoor zowel het prestatieverlies als de problemen inzake de betrouwbaarheid van gegevens opgevangen worden. Dit laatste door er voor te zorgen dat het bestandssysteem geen bestanden aanmaakt met lengte zero als er zich een abrupte crash voordoet en software actief is die geen synchronisatie uitvoert voorafgaand aan een atomische hernoeming.
Waarschuwing: Het gebruik van deze optie kan de prestaties verbeteren ten koste van het verlies van gegevens. Gebruik ze behoedzaam.
script-chrootless: De scripts van de pakketonderhouder uitvoeren zonder te chroot(2)en naar instdir, zelfs als het pakket deze werkwijze niet ondersteunt (sinds dpkg 1.18.5).
Waarschuwing: Dit kan uw computersysteem vernietigen, gebruik dit uiterst behoedzaam.
architecture: Pakketten verwerken, zelfs als ze de verkeerde of geen architectuur hebben.
bad-version: Pakketten verwerken, zelfs als ze een verkeerde versie hebben (sinds dpkg 1.16.1).
bad-path: In PATH ontbreken belangrijke programma's, waardoor het waarschijnlijk is dat er zich problemen zullen voordoen.
not-root: Proberen om zaken te (de-)installeren, zelfs in opdracht van een niet-systeembeheerder.
bad-verify: Een pakket installeren, zelfs als de authenticiteitscontrole mislukt.
Zorg ervoor om --no-act voor de actie-parameter op te geven, anders zou u ongewenste resultaten kunnen bekomen. (bijvoorbeeld zal dpkg --purge foo --no-act eerst pakket "foo" wissen en dan proberen pakket "--no-act" te wissen, ook al verwachtte u wellicht dat er niets gedaan zou worden)
Opmerking: Frontends kunnen dpkg meerdere keren per aanroep aanroepen, waardoor de uitbreidingen meer keren dan verwacht uitgevoerd kunnen worden.
Waarschuwing: Houd er rekening mee dat u, afhankelijk van de paden die uitgesloten worden, uw systeem volledig defect kunt maken. Gebruik dit behoedzaam.
The glob patterns use the same wildcards used in the shell, were ‘*’ matches any sequence of characters, including the empty string and also ‘/’. For example, «/usr/*/READ*» matches «/usr/share/doc/package/README». As usual, ‘?’ matches any single character (again, including ‘/’). And ‘[’ starts a character class, which can contain a list of characters, ranges and complementations. See glob(7) for detailed information about globbing. Note: The current implementation might re-include more directories and symlinks than needed, in particular when there is a more specific re-inclusion, to be on the safe side and avoid possible unpack failures; future work might fix this.
Dit kan gebruikt worden om alle paden te verwijderen op enkele specifieke paden na. Een typische casus is:
--path-exclude=/usr/share/doc/*
--path-include=/usr/share/doc/*/copyright
om alle documentatiebestanden op de copyrightbestanden na te verwijderen.
Deze twee opties kunnen meermaals opgegeven en afwisselend ingevoegd worden. Ze worden allebei in de opgegeven volgorde verwerkt, waarbij de laatste regel die een overeenkomst met een bestandsnaam oplevert, de uiteindelijke beslissing geeft.
De filters worden toegepast bij het uitpakken van de binaire pakketten en hebben als zodanig enkel weet van het type object dat op dat ogenblik gefilterd wordt (bijv. een gewoon bestand of een map) en hebben geen zicht op welke objecten nadien zullen komen. Omdat deze filters neveneffecten hebben (in tegenstelling tot find(1)-filters), zal het uitsluiten van een exacte padnaam, die toevallig een map-object, zoals /usr/share/doc, blijkt te zijn, niet het gewenste effect hebben en zal enkel die padnaam uitgesloten worden (die automatisch terug toegevoegd kan worden als de code dit noodzakelijk acht). Van alle erop volgende bestanden die zich in die mappen bevinden, zal het uitpakken mislukken.
Suggestie: zorg ervoor dat de glob-patronen niet weggewerkt worden door uw shell.
The only currently supported output format is rpm, which consists of a line for every path that failed any check. These lines have the following format:
missing [c] pathname
[(error-message)]
??5?????? [c] pathname
The first 9 characters are used to report the checks result, either a literal missing when the file is not present or its metadata cannot be fetched, or one of the following special characters that report the result for each check:
The line is followed by a space and an attribute character. The following attribute character is supported:
Finally followed by another space and the pathname.
In case the entry was of the missing type, and the file was not actually present on the filesystem, then the line is followed by a space and the error message enclosed within parenthesis.
Het enige momenteel ondersteunde commando is --version.
De andere bestanden worden hieronder weergegeven in hun standaardmap. Zie de optie --admindir om te weten hoe u de locatie van deze bestanden kunt wijzigen.
The status file is backed up daily in /var/backups. It can be useful if it's lost or corrupted due to filesystems troubles.
De indeling en de inhoud van een binair pakket worden beschreven in deb(5).
--no-act geeft gewoonlijk minder informatie dan nuttig kan zijn.
Om de geïnstalleerde pakketten op te sommen die verband houden met de editor vi(1) (merk op dat dpkg-query standaard niet langer het bestand available laadt en dat in de plaats daarvan daarvoor de optie dpkg-query --load-avail gebruikt moet worden):
dpkg -l '*vi*'
Om de items uit /var/lib/dpkg/available over twee pakketten te zien:
dpkg --print-avail elvis vim | less
Om zelf in de lijst van pakketten te zoeken:
less /var/lib/dpkg/available
Om een geïnstalleerde pakket elvis te verwijderen:
dpkg -r elvis
Om een pakket te installeren moet u het eerst zoeken in een archief of op een CD. Het bestand available laat zien dat het pakket vim zich in de sectie editors bevindt:
cd /media/cdrom/pool/main/v/vim dpkg -i vim_4.5-3.deb
Om een lokale kopie te maken van de pakketselectietoestand:
dpkg --get-selections> mijnselecties
U zou dit bestand kunnen overbrengen naar een andere computer en nadat u daar het bestand available bijgewerkt hebt met het frontend voor pakketbeheer van uw voorkeur (zie <https://wiki.debian.org/Teams/Dpkg/FAQ> voor meer details), bijvoorbeeld:
apt-cache dumpavail | dpkg --merge-avail
of met dpkg 1.17.6 of vroegere versies:
avail=$(mktemp) apt-cache dumpavail> "$avail" dpkg --merge-avail "$avail" rm "$avail"
kunt u het installeren met:
dpkg --clear-selections dpkg --set-selections <mijnselecties
Merk op dat dit eigenlijk niet echt iets installeert of verwijdert, maar enkel de selectiestatus voor de gevraagde pakketten instelt. U heeft een andere toepassing nodig om de gevraagde pakketten echt te downloaden en te installeren. Voer bijvoorbeeld apt-get dselect-upgrade uit.
U zult ondervinden dat dselect(1) gewoonlijk een meer comfortabele manier biedt om de selectiestatus van pakketten te wijzigen.
U kunt bijkomende functionaliteit verkrijgen door het installeren van elk van de volgende pakketten: apt, aptitude en debsums.
aptitude(8), apt(8), dselect(1), dpkg-deb(1), dpkg-query(1), deb(5), deb-control(5), dpkg.cfg(5), en dpkg-reconfigure(8).
Zie /usr/share/doc/dpkg/THANKS voor een lijst van mensen die bijgedragen hebben aan dpkg.