dpkg
er basiskommandoen for å behandle Debian-pakker for systemet. Hvis du har .deb
-pakker, er det dpkg
som tillater installasjon eller analyse av innholdet deres. Men dette programmet har bare en delvis oversikt over Debian-universet. Det vet hva som er installert på systemet, og hva det er gitt på kommandolinjen, men vet ingenting om andre tilgjengelige pakker. Den vil mislykkes hvis en avhengighet ikke er oppfylt. Verktøy som apt
, vil tvert imot lage en liste over avhengigheter for å kunne installere alt så automatisk som mulig.
dpkg
er fremfor alt verktøyet for å installere en allerede tilgjengelig Debian-pakke (fordi den ikke laster ned noe). For å gjøre det velger vi -i
eller --install
alternativet.
Eksempel 5.2. Installasjon av en pakke med dpkg
#
dpkg -i man-db_2.7.0.2-5_amd64.deb
(Reading database ... 86425 files and directories currently installed.) Preparing to unpack man-db_2.7.0.2-5_amd64.deb ... Unpacking man-db (2.7.0.2-5) over (2.7.0.2-4) ... Setting up man-db (2.7.0.2-5) ... Updating database of manual pages ... Processing triggers for mime-support (3.58) ...
dpkg
, dermed også ved hvilket punkt en eventuell feil har oppstått. Hver pakke installeres i to trinn; først utpakking, deretter oppsett. apt-get
utnytter dette til å begrense antall kall til dpkg
(siden hvert kall er kostbart på grunn av innlasting av databasen i minnet, spesielt listen over allerede installerte filer).
Eksempel 5.3. Separat utpakking og konfigurering
#
dpkg --unpack man-db_2.7.0.2-5_amd64.deb
(Reading database ... 86425 files and directories currently installed.) Preparing to unpack man-db_2.7.0.2-5_amd64.deb ... Unpacking man-db (2.7.0.2-5) over (2.7.0.2-5) ... Processing triggers for mime-support (3.58) ... #
dpkg --configure man-db
Setting up man-db (2.7.0.2-5) ... Updating database of manual pages ...
dpkg
mislykkes med å installere en pakke, og melde om feil: Hvis brukeren beordrer den til å overse dette, vil den bare sende en advarsel. Det er derfor vi har de ulike --force-*
valgmulighetene. dpkg --force-help
-kommandoen, eller dokumentasjon for denne kommandoen, vil gi en fullstendig liste over disse alternativene. Den hyppigste feilen, som du er nødt til å treffe på før eller senere, er en filkollisjon. Når en pakke inneholder en fil som allerede er installert av en annen pakke, vil dpkg
-kommandoen avslå å installere den. Da vil det følgende budskapet vises:
Unpacking libgdm (from .../libgdm_3.8.3-2_amd64.deb) ...
dpkg: error processing /var/cache/apt/archives/libgdm_3.8.3-2_amd64.deb (--unpack):
trying to overwrite '/usr/bin/gdmflexiserver', which is also in package gdm3 3.4.1-9
--force-overwrite
, som ber dpkg
om å ignorere denne feilen og overskive filen.
--force-*
valgmuligheter, er det bare --force-overwrite
som er sannsynlig å bruke jevnlig. Disse valgmulighetene er bare laget for helt spesielle situasjoner, og det er bedre å la dem være i fred så mye som mulig for å respektere reglene som pakkemekanismen pålegger. Glem ikke at disse reglene sikrer konsistens og stabilitet i systemet ditt.
dpkg
med -r
eller --remove
-valget, etterfulgt av navnet på en pakke, fjerner denne pakken. Denne fjerningen er imidlertid ikke komplett: Alle konfigurasjonsfiler, vedlikeholderskript, loggfiler (systemlogger) og andre brukerdata som håndteres av pakken forblir. Denne måten å deaktivere programmet på, gjøres enkelt ved å avinstallere det, og det er fortsatt mulig å raskt installere det på nytt med samme konfigurasjon. For å fjerne alt som er tilknyttet en pakke kan du bruke -P
eller -- purge
-valget, fulgt av pakkenavnet.
Eksempel 5.4. Fjerning og frakobling av debian-cd-pakken
#
dpkg -r debian-cd
(Reading database ... 97747 files and directories currently installed.) Removing debian-cd (3.1.17) ... #
dpkg -P debian-cd
(Reading database ... 97401 files and directories currently installed.) Removing debian-cd (3.1.17) ... Purging configuration files for debian-cd (3.1.17) ...
dpkg
-valgene som søker i den interne database for å få informasjon. Ved først å gi de lange alternativene, og deretter de tilsvarende korte alternativene (som selvsagt vil ha med de samme mulige argumentene) siterer vi --listfiles pakke
(eller -L
), som lister filene installert av denne pakken; --search fil
(eller -S
), som finner pakken(e) som inneholder filen; --status pakke
(eller -s
), som viser topptekstene til en installert pakke; --list
(eller -l
), som viser listen med pakker som systemet kjenner, og installasjonsstatusen deres; --contents file.deb
(eller -c
), som lister filene i den spesifiserte Debian-pakken; --info file.deb
(eller -I
), som viser topptekstene til denne Debian-pakken.
Eksempel 5.5. Forskjellige søk med dpkg
$
dpkg -L base-passwd
/. /usr /usr/sbin /usr/sbin/update-passwd /usr/share /usr/share/lintian /usr/share/lintian/overrides /usr/share/lintian/overrides/base-passwd /usr/share/doc-base /usr/share/doc-base/users-and-groups /usr/share/base-passwd /usr/share/base-passwd/group.master /usr/share/base-passwd/passwd.master /usr/share/man /usr/share/man/pl /usr/share/man/pl/man8 /usr/share/man/pl/man8/update-passwd.8.gz /usr/share/man/ru /usr/share/man/ru/man8 /usr/share/man/ru/man8/update-passwd.8.gz /usr/share/man/ja /usr/share/man/ja/man8 /usr/share/man/ja/man8/update-passwd.8.gz /usr/share/man/fr /usr/share/man/fr/man8 /usr/share/man/fr/man8/update-passwd.8.gz /usr/share/man/es /usr/share/man/es/man8 /usr/share/man/es/man8/update-passwd.8.gz /usr/share/man/de /usr/share/man/de/man8 /usr/share/man/de/man8/update-passwd.8.gz /usr/share/man/man8 /usr/share/man/man8/update-passwd.8.gz /usr/share/doc /usr/share/doc/base-passwd /usr/share/doc/base-passwd/users-and-groups.txt.gz /usr/share/doc/base-passwd/changelog.gz /usr/share/doc/base-passwd/copyright /usr/share/doc/base-passwd/README /usr/share/doc/base-passwd/users-and-groups.html $
dpkg -S /bin/date
coreutils: /bin/date $
dpkg -s coreutils
Package: coreutils Essential: yes Status: install ok installed Priority: required Section: utils Installed-Size: 13855 Maintainer: Michael Stone <mstone@debian.org> Architecture: amd64 Multi-Arch: foreign Version: 8.23-3 Replaces: mktemp, realpath, timeout Pre-Depends: libacl1 (>= 2.2.51-8), libattr1 (>= 1:2.4.46-8), libc6 (>= 2.17), libselinux1 (>= 2.1.13) Conflicts: timeout Description: GNU core utilities This package contains the basic file, shell and text manipulation utilities which are expected to exist on every operating system. . Specifically, this package includes: arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp csplit cut date dd df dir dircolors dirname du echo env expand expr factor false flock fmt fold groups head hostid id install join link ln logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup nproc numfmt od paste pathchk pinky pr printenv printf ptx pwd readlink realpath rm rmdir runcon sha*sum seq shred sleep sort split stat stty sum sync tac tail tee test timeout touch tr true truncate tsort tty uname unexpand uniq unlink users vdir wc who whoami yes Homepage: http://gnu.org/software/coreutils $
dpkg -l 'b*'
Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-=======================-================-================-==================================================== un backupninja <none> <none> (no description available) ii backuppc 3.3.0-2 amd64 high-performance, enterprise-grade system for backin un base <none> <none> (no description available) un base-config <none> <none> (no description available) ii base-files 8 amd64 Debian base system miscellaneous files ii base-passwd 3.5.37 amd64 Debian base system master password and group files [...] $
dpkg -c /var/cache/apt/archives/gnupg_1.4.18-6_amd64.deb
drwxr-xr-x root/root 0 2014-12-04 23:03 ./ drwxr-xr-x root/root 0 2014-12-04 23:03 ./lib/ drwxr-xr-x root/root 0 2014-12-04 23:03 ./lib/udev/ drwxr-xr-x root/root 0 2014-12-04 23:03 ./lib/udev/rules.d/ -rw-r--r-- root/root 2711 2014-12-04 23:03 ./lib/udev/rules.d/60-gnupg.rules drwxr-xr-x root/root 0 2014-12-04 23:03 ./usr/ drwxr-xr-x root/root 0 2014-12-04 23:03 ./usr/lib/ drwxr-xr-x root/root 0 2014-12-04 23:03 ./usr/lib/gnupg/ -rwxr-xr-x root/root 39328 2014-12-04 23:03 ./usr/lib/gnupg/gpgkeys_ldap -rwxr-xr-x root/root 92872 2014-12-04 23:03 ./usr/lib/gnupg/gpgkeys_hkp -rwxr-xr-x root/root 47576 2014-12-04 23:03 ./usr/lib/gnupg/gpgkeys_finger -rwxr-xr-x root/root 84648 2014-12-04 23:03 ./usr/lib/gnupg/gpgkeys_curl -rwxr-xr-x root/root 3499 2014-12-04 23:03 ./usr/lib/gnupg/gpgkeys_mailto drwxr-xr-x root/root 0 2014-12-04 23:03 ./usr/bin/ -rwxr-xr-x root/root 60128 2014-12-04 23:03 ./usr/bin/gpgsplit -rwxr-xr-x root/root 1012688 2014-12-04 23:03 ./usr/bin/gpg [...] $
dpkg -I /var/cache/apt/archives/gnupg_1.4.18-6_amd64.deb
new debian package, version 2.0. size 1148362 bytes: control archive=3422 bytes. 1264 bytes, 26 lines control 4521 bytes, 65 lines md5sums 479 bytes, 13 lines * postinst #!/bin/sh 473 bytes, 13 lines * preinst #!/bin/sh Package: gnupg Version: 1.4.18-6 Architecture: amd64 Maintainer: Debian GnuPG-Maintainers <pkg-gnupg-maint@lists.alioth.debian.org> Installed-Size: 4888 Depends: gpgv, libbz2-1.0, libc6 (>= 2.15), libreadline6 (>= 6.0), libusb-0.1-4 (>= 2:0.1.12), zlib1g (>= 1:1.1.4) Recommends: gnupg-curl, libldap-2.4-2 (>= 2.4.7) Suggests: gnupg-doc, libpcsclite1, parcimonie, xloadimage | imagemagick | eog Section: utils Priority: important Multi-Arch: foreign Homepage: http://www.gnupg.org Description: GNU privacy guard - a free PGP replacement GnuPG is GNU's tool for secure communication and data storage. It can be used to encrypt data and to create digital signatures. It includes an advanced key management facility and is compliant with the proposed OpenPGP Internet standard as described in RFC 4880. [...]
dpkg
tar vare på en logg med alle handlinger i /var/log/dpkg.log
. Denne loggen er ekstremt ordrik, med detaljer for hver og en av de stadier som pakker, håndtert av dpkg
, gjennomgår. I tillegg til å gi en måte å spore dpkgs oppførsel på, hjelper den fremfor alt til med å beholde en historie om utviklingen av systemet: Man kan finne det nøyaktige øyeblikket når hver pakke er installert eller oppdatert, og denne informasjonen kan være svært nyttig i å forstå en nylig endring i oppførselen. I tillegg er alle versjoner tatt vare på, så det er lett å kryssjekke informasjonen med changelog.Debian.gz
for de pakker det gjelder, eller også med online bug-rapporter.
Arkitektur
-felt i kontrollinformasjonen. Dette feltet kan inneholde enten «all
» (eller pakker som er arkitekturuavhengig), eller navnet på den arkitekturen som den er rettet mot (som «AMD64», «armhf», ...). I det sistnevnte tilfellet vil, som standard,dpkg
bare akseptere å installere pakken hvis arkitekturen svarer til vertsmaskinens arkitektur som meldt tilbake fra dpkg --print-architecture
.
dpkg
s multi-ark støtte tillater brukere å definere «fremmed arkitekturer» som kan installeres på det gjeldende systemet. Dette gjøres rett og slett med dpkg --add-architecture
som i eksemplet nedenfor. Det er en tilsvarende dpkg --remove-architecture
til å droppe støtte til en fremmed arkitektur, men den kan bare brukes når ingen pakker med denne arkitekturen er igjen.
#
dpkg --print-architecture
amd64 #
dpkg --print-foreign-architectures
#
dpkg -i gcc-4.9-base_4.9.1-19_armhf.deb
dpkg: error processing archive gcc-4.9-base_4.9.1-19_armhf.deb (--install): package architecture (armhf) does not match system (amd64) Errors were encountered while processing: gcc-4.9-base_4.9.1-19_armhf.deb #
dpkg --add-architecture armhf
#
dpkg --add-architecture armel
#
dpkg --print-foreign-architectures
armhf armel #
dpkg -i gcc-4.9-base_4.9.1-19_armhf.deb
Selecting previously unselected package gcc-4.9-base:armhf. (Reading database ... 86425 files and directories currently installed.) Preparing to unpack gcc-4.9-base_4.9.1-19_armhf.deb ... Unpacking gcc-4.9-base:armhf (4.9.1-19) ... Setting up gcc-4.9-base:armhf (4.9.1-19) ... #
dpkg --remove-architecture armhf
dpkg: error: cannot remove architecture 'armhf' currently in use by the database #
dpkg --remove-architecture armel
#
dpkg --print-foreign-architectures
armhf
Multi-Arch: same
» i topptekstfeltet for å fortelle pakkesystemet at de ulike arkitekturene i pakken trygt kan installeres side ved side (og at disse pakkene bare kan tilfredsstille avhengigheter i pakker med samme arkitektur). Siden multi-ark gjorde sin debut i Debian Wheezy, har ikke alle bibliotekene blitt konvertert ennå.
$
dpkg -s gcc-4.9-base
dpkg-query: error: --status needs a valid package name but 'gcc-4.9-base' is not: ambiguous package name 'gcc-4.9-base' with more than one installed instance Use --help for help about querying packages. $
dpkg -s gcc-4.9-base:amd64 gcc-4.9-base:armhf | grep ^Multi
Multi-Arch: same Multi-Arch: same $
dpkg -L libgcc1:amd64 |grep .so
/lib/x86_64-linux-gnu/libgcc_s.so.1 $
dpkg -S /usr/share/doc/gcc-4.9-base/copyright
gcc-4.9-base:amd64, gcc-4.9-base:armhf: /usr/share/doc/gcc-4.9-base/copyright
Multi-Arch: same
-pakker må kvalifisere sine navn med sin arkitektur for å være entydig identifiserbare. De har også muligheten til å dele filer med andre forekomster med den samme pakken; dpkg
sikrer at alle pakkene har bit-for-bit-identiske filer når de deles. Sist men ikke minst, må alle forekomster av en pakke ha den samme versjonen. De må de oppgraderes sammen.
Multi-Arch: foreign
», eller en pakke hvis arkitektur samsvarer med den ene av pakken som inneholder avhengigheten (i denne prosessen med avhengighetsavklaring er arkitekturuavhengige pakker antatt å ha den samme arkitektur som verten). En avhengighet kan også bli svekket ved å tillate ulike arkitekturer å imøtekomme den, med package:any
-syntaks, men fremmede pakker kan bare tilfredsstille en slik avhengighet hvis de er merket «Multi-Arch: allowed
».