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 problemático:
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 (ejecútelo 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
Y finalmente se recomienda realizar una actualización completa de su sistema:
sudo apt upgrade --purge -y && sudo aptitude safe-upgrade -y && sudo fc-cache && sudo sync && sudo updatedb
Lectura recomendada: ¿Qué son los scripts preinst, postinst, prerm y postrm?
Post a Comment