Header Ads

dpkg: error al procesar el paquete

Un error frecuente en Linux durante la instalación de paquetes son los problemas de dependencias, tal y como se muestra en la imagen. Las soluciones más comunes son:
sudo apt-get -y dist-upgrade
sudo apt-get -y install -f
sudo apt -y --fix-broken install
sudo apt --fix-missing update
sudo apt-get autoremove
sudo dpkg --configure -a
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/cache/debconf/*.dat
O eliminar el paquete problematico:
sudo dpkg --remove --force-remove-reinstreq package
sudo apt-get purge package
Pero en ocasiones, estas soluciones no son suficientes, ya que, en el caso de la eliminación del paquete en cuestión, puede que esté vinculado a otros, por lo que si lo elimina, muy probablemente se lleve por delante los demás. Pero hay otra manera muy simple de solucionarlo. Ingresamos a la carpeta:
/var/lib/dpkg/info
Y eliminamos todas las referencias del paquete en conflicto que terminen en  postinst. Para esto podemos utilizar los comandos ls -l o  ls | grep o cualquier otro similar. Ejemplo de Samba/Winbind:
cd /var/lib/dpkg/info
ls -l *samba*.postinst
-rwxr-xr-x 1 root root  269 jul 13 18:24 samba-common-bin.postinst
-rwxr-xr-x 1 root root 2909 jul 13 18:24 samba-common.postinst
-rwxr-xr-x 1 root root 3526 jul 13 18:24 samba.postinst
-rwxr-xr-x 1 root root  197 ene 26  2014 system-config-samba.postinst
ls -l *winbind*.postinst
-rwxr-xr-x 1 root root  47 jul 13 18:24 libpam-winbind:amd64.postinst
-rwxr-xr-x 1 root root 466 jul 13 18:24 winbind.postinst
rm *samba*.postinst *winbind*.postinst
Otro caso podría ser el de sub-process /usr/bin/dpkg returned an error code (1). Ejemplo:
# ENG
dpkg: warning files list file for package
# ESP
dpkg: atención: falta el fichero de lista de ficheros
# ejemplo de salida:
dpkg: atención: falta el fichero de lista de ficheros del paquete `samba-libs:amd64', se supondrá que el paquete no tiene ningún fichero actualmente instalado
En este caso debe reinstalar el paquete:
package="samba-libs:amd64"
sudo apt-get install --reinstall "$package"
O los siguientes comandos publicados en serverfault.com pero no se garantizan o pueden no funcionar en algunos sistemas (ejecutelo en un script .sh con sudo):
# opción 1:
for package in $(apt-get upgrade 2>&1 | grep "warning: files list file for package '" | grep -Po "[^'\n ]+'" | grep -Po "[^']+"); do apt-get install --reinstall "$package"; done
# opción 2:
for package in $(apt-get upgrade 2>&1 | grep "warning: files list file" | sed "s/.*\`//; s/'.*//"); do apt-get install --reinstall "$package"; done
También podría funcionar copiando el error a un archivo y ejecutar:
for package in $("s/.*'\(.*\)'.*/\1/" error.txt); do apt-get install --reinstall "$package"; done
Lectura recomendada:  ¿Qué son los scripts preinst, postinst, prerm y postrm?
Con la tecnología de Blogger.