Gestió de paquets a Linux

La comanda dpkg a Linux: instal·lar i consultar paquets .deb



La comanda dpkg (Debian package) és l’eina de baix nivell que instal·la, esborra i consulta paquets .deb a Debian, Ubuntu, Raspberry Pi OS, Linux Mint i la resta de derivades. És la base sobre la qual funciona apt: quan fas apt install, és apt qui descarrega els paquets i en resol les dependències, però és dpkg qui els instal·la.

La diferència clau, doncs, és que dpkg no descarrega res ni resol dependències: treballa amb fitxers .deb que ja tens i amb la base de dades de paquets instal·lats (/var/lib/dpkg/). Per instal·lar programes, el dia a dia es fa amb apt; dpkg és molt útil per consultar què hi ha instal·lat i d’on surt cada fitxer.

Sintaxi

dpkg [opcions] acció [paquet o fitxer...]

Les accions que modifiquen el sistema (-i, -r, -P, --configure) necessiten sudo. Les consultes (-l, -s, -L, -S) no.

Accions més útils

AccióQuè fa
-i fitxer.debInstal·la un fitxer .deb
-r paquetEsborra un paquet, però en conserva els fitxers de configuració
-P paquetEsborra un paquet i també la seva configuració (purge)
-l [patró]Llista els paquets (tots, o els que coincideixen amb el patró)
-s paquetEstat i informació d’un paquet instal·lat
-L paquetFitxers que ha instal·lat un paquet
-S fitxerQuin paquet ha instal·lat un fitxer
-I fitxer.debInformació d’un fitxer .deb sense instal·lar-lo
-c fitxer.debContingut d’un fitxer .deb
-x fitxer.deb dirExtreu els fitxers d’un .deb en un directori, sense instal·lar-lo
--configure -aAcaba de configurar els paquets que han quedat a mig instal·lar
--auditBusca paquets que han quedat en un estat incorrecte
--print-architectureArquitectura dels paquets del sistema (amd64, arm64…)

Consultar paquets instal·lats

Llistar paquets. Les dues primeres lletres indiquen l’estat: ii vol dir instal·lat correctament i rc, esborrat però amb la configuració encara al disc:

$ dpkg -l bash coreutils
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
+++-==============-============-============-=================================
ii  bash           5.2.37-2+b9  arm64        GNU Bourne Again SHell
ii  coreutils      9.7-3        arm64        GNU core utilities

Buscar un paquet entre els instal·lats i comptar-los:

dpkg -l | grep apache2
dpkg -l | grep -c '^ii'

Saber si un paquet és instal·lat i quina versió té. dpkg -s torna el codi de sortida 0 si el paquet hi és i 1 si no, cosa útil als scripts:

$ dpkg -s nano
Package: nano
Status: install ok installed
Priority: important
Section: editors
Installed-Size: 2867
Maintainer: Jordi Mallach <jordi@debian.org>
Architecture: arm64
Version: 8.4-1+deb13u1
Depends: libc6 (>= 2.38), libncursesw6 (>= 6), libtinfo6 (>= 6)
...

$ dpkg -s tree
dpkg-query: package 'tree' is not installed and no information is available

Quins fitxers ha instal·lat un paquet:

$ dpkg -L nano | head -5
/.
/etc
/etc/nanorc
/usr
/usr/bin

I al revés, de quin paquet ve un fitxer (molt útil per saber d’on surt una comanda):

$ dpkg -S /usr/bin/ls
coreutils: /usr/bin/ls

Paquets esborrats que encara tenen la configuració al disc (es poden netejar amb sudo apt purge paquet):

dpkg -l | grep '^rc'

Consultar un fitxer .deb abans d’instal·lar-lo

$ dpkg -I tree_2.2.1-1_arm64.deb
 new Debian package, version 2.0.
 ...
 Package: tree
 Version: 2.2.1-1
 Architecture: arm64
 Depends: libc6 (>= 2.38)
 ...

$ dpkg -c tree_2.2.1-1_arm64.deb
drwxr-xr-x root/root         0 2024-11-26 21:06 ./
drwxr-xr-x root/root         0 2024-11-26 21:06 ./usr/
drwxr-xr-x root/root         0 2024-11-26 21:06 ./usr/bin/
-rwxr-xr-x root/root    134784 2024-11-26 21:06 ./usr/bin/tree
...

Si només vols un fitxer del paquet, extreu-lo en un directori qualsevol (no instal·la res ni necessita sudo):

dpkg -x tree_2.2.1-1_arm64.deb /tmp/tree-deb

Per descarregar el .deb d’un paquet dels repositoris sense instal·lar-lo: apt download tree.

Instal·lar i esborrar

Instal·lar un .deb descarregat:

sudo dpkg -i programa_1.0_amd64.deb

Si el paquet necessita altres paquets que no tens, dpkg el deixa a mig configurar i et diu quines dependències falten. Per això, per instal·lar un .deb descarregat és millor fer servir apt, que busca les dependències als repositoris (fixa’t en el ./, que indica que és un fitxer i no un nom de paquet):

sudo apt install ./programa_1.0_amd64.deb

Si ja l’has instal·lat amb dpkg -i i han faltat dependències, sudo apt -f install les instal·la i acaba la feina.

Esborrar un paquet (pel nom del paquet, no del fitxer):

sudo dpkg -r programa     # conserva la configuració de /etc
sudo dpkg -P programa     # l'esborra tot

Igual que abans, és més segur sudo apt remove o sudo apt purge, que també t’avisen de què més s’esborraria.

Reparar una instal·lació interrompuda

Si una actualització es talla (s’ha penjat, s’ha tancat el terminal, s’ha quedat sense corrent), en el pròxim apt veuràs un missatge que et demana executar dpkg --configure -a:

sudo dpkg --configure -a
sudo apt -f install

Reconfigurar un paquet

Alguns paquets fan preguntes en instal·lar-se (la zona horària, el teclat, els idiomes…). Per tornar a respondre-les es fa servir una comanda diferent, dpkg-reconfigure:

sudo dpkg-reconfigure tzdata
sudo dpkg-reconfigure locales

Compte amb…

  • --force-…: opcions com --force-depends o --force-overwrite et deixen saltar les comprovacions, i són la manera més ràpida de deixar el sistema de paquets trencat. Fes-les servir només si saps exactament per què.
  • Paquets .deb de webs de tercers: s’instal·len amb permisos de root i els seus scripts poden fer qualsevol cosa al sistema. Instal·la només els de fonts de confiança.
  • No barregis distribucions: un .deb compilat per a una altra versió de Debian o Ubuntu pot trencar dependències.

Comandes relacionades