View this page in english

Jul 31 2011

Supprimer manuellement un paquet cassé sous Debian/Ubuntu

Le problème

Il arrive qu'un paquet Debian ou Ubuntu ne s'installe pas correctement et ne puisse plus être désinstallé. Le système de mise à jour du système est alors complètement cassé et aucune commande classique, que ce soit apt-get, aptitude ou dpkg, ne permet de corriger le problème.

Prenons l'exemple du paquet slapd qui était dans ce cas sous Debian il y a quelque temps.
Si l'on tente de supprimer le paquet slapd, le gestionnaire de paquet demande de le réinstaller correctement :

[root@master]$ aptitude remove slapd
The following packages will be REMOVED:
  slapd
Need to get 0 B of archives. After unpacking 4162 kB will be freed.
dpkg: error processing slapd (--remove):
 Package is in a very bad inconsistent state - you should
 reinstall it before attempting a removal.
configured to not write apport reports
Errors were encountered while processing:
 slapd
E: Sub-process /usr/bin/dpkg returned an error code (1)
A package failed to install.  Trying to recover:
  

Il est malheureusement impossible de le réinstaller ou de terminer l'installation :

[root@master]$ apt-get install slapd
[…]
Preparing to replace slapd 2.4.25-1+b1 (using .../slapd_2.4.25-1.1_i386.deb) ...
sed: can't read /etc/ldap/slapd.d/cn=config.ldif: No such file or directory
invoke-rc.d: initscript slapd, action "stop" failed.
dpkg: warning: subprocess old pre-removal script returned error exit status 2
dpkg - trying script from the new package instead ...
sed: can't read /etc/ldap/slapd.d/cn=config.ldif: No such file or directory
invoke-rc.d: initscript slapd, action "stop" failed.
dpkg: error processing /var/cache/apt/archives/slapd_2.4.25-1.1_i386.deb (--unpack):
 subprocess new pre-removal script returned error exit status 2
configured to not write apport reports
Backing up /etc/ldap/slapd.d in /var/backups/slapd-2.4.25-1.1... done.
grep: /etc/ldap/slapd.d/cn=config/olcDatabase*: No such file or directory
sed: can't read /etc/ldap/slapd.d/cn=config.ldif: No such file or directory
invoke-rc.d: initscript slapd, action "start" failed.
dpkg: error while cleaning up:
 subprocess installed post-installation script returned error exit status 2
Errors were encountered while processing:
 /var/cache/apt/archives/slapd_2.4.25-1.1_i386.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
  

La solution : désinstaller manuellement le paquet

Pour désinstaller manuellement le paquet cassé exécuter les deux commandes ci-dessous, en tant que root sous Debian, précédées de sudo sous Ubuntu :

mv /var/lib/dpkg/info/PAQUET.* /tmp/
dpkg --remove --force-remove-reinstreq PAQUET