Supprimer manuellement un paquet cassé de dpkg

Twitter Facebook Google Plus Linkedin email
closeCet article a été publié il y a 2 ans 6 mois 27 jours, il est donc possible qu’il ne soit plus à jour. Les informations proposées sont donc peut-être expirées, les commandes ne sont peut-être plus valides.

Il arrive parfois qu’on fasse des trucs bêtes. En l’occurrence, c’est Arowan qui m’a appelé à l’aide après avoir essayé d’utiliser Docker sur son OpenMediaVault basé sur Debian Wheezy, et qui refuse de se désinstaller. Problème, ça bloque aussi les installations de nouveaux paquets. A situation désespérée, méthode de furieux. Voyons donc comment procéder.

Le symptôme

C’est pourtant simple au départ de supprimer un paquet :

Magnifiquement parlant. Ok, c’est pas grave, on tente de réinstaller :

C’est pas beau, mais il y a un peu plus d’informations. Apparemment le problème vient du fait qu’il s’est mal coupé.

Le début d’une investigation longue

J’ai tenté de virer les fichiers/dossiers /var/run/docker*, rien y fait, il continue d’échouer sur l’absence de processus (et ce même s’il n’y a aucun fichier pid). En fait le script tente systématiquement de couper le service, sans même vérifier s’il est déjà présent. C’est pénible, et très con.

Mais pourquoi ça pose problème d’ailleurs ?

Ah, en effet, si ça démarre pas, on est pas rendu. Alors, comment le lance-t-il ? Le mode debug de bash est très utile :

Bien, on récupère donc la ligne de démarrage, et on la lance directement dans le shell :

Ok, cool, mais alors pourquoi tu t’es installé au départ CONNARD ?

Restaurons notre calme. J’aurai pu vous montrer la sortie du fichier /var/log/docker.log, qui contient les mêmes messages, mais ça permet au passage de rappeler l’existence du mode debug de bash, très utile.

Donc, j’ai essayé de contourner en plaçant un fichier pid bidon dans lequel j’ai mis celui d’un vi vide ouvert en parallèle. Nib. J’ai cherché un millions de fois comment utiliser certaines options –force-* de dpkg, sans succès, avec souvent pour seul retour :

Un bon gros RTFM dans ta gueule, merci les barbus intégristes, heureusement que je ne suis pas si susceptible.

Arme nucléaire : nettoyage manuel

Au bout de trois heures de manipulations et d’innombrables recherches infructueuses dans plusieurs langues, j’ai opté pour l’option violente, mais néanmoins efficace : la suppression à la main de tous les fichiers du paquet.

On récupère la liste des fichiers avec dpkg -L docker-engine (extrait) :

Évidemment, je vous recommande d’éviter de supprimer les dossier /usr/bin, /usr/share, /usr/lib, mais j’imagine quand même que vous avez assez du jugeote pour éviter de tout flinguer. Il faut ensuite se pencher sur dpkg.

On supprime tous les fichiers /var/lib/dkpg/info/docker-engine.*. Enfin, on fait une sauvegarde du fichier /var/lib/dpkg/status et on l’édite pour supprimer le paragraphe ayant trait à docker-engine.

Par sécurité, j’ai ensuite faire un apt-get update pour « rafraichir » le tout. Ensuite, j’ai installé vim pour tester le résultat (parce qu’il manquait de toute façon), et paf, ça fait des Chocapic, autrement dit ça fonctionne.

Parfois, une réinstallation suffit

C’est vraiment le cas extrême ici, souvent il suffit de réinstaller le paquet (ou de faire install -f) pour récupérer un gestionnaire de paquets dans un état consistent/stable/fonctionnel, voire de pointer rapidement le problème et le corriger. Raison pour laquelle c’est la première chose qu’ils conseillent, et que j’ai essayé. Mais que voulez-vous, les développeurs sont des grosses buses parfois, et je souhaite bien du courage au prochain qui devra rattraper une telle merde. Au moins vous avez quelques armes en plus.

4
Poster un Commentaire

avatar
2 Fils de commentaires
2 Réponses de fil
1 Abonnés
 
Commentaire avec le plus de réactions
Le plus populaire des commentaires
3 Auteurs du commentaire
SamSeboss666PPmarcel Auteurs de commentaires récents
  S’abonner  
plus récent plus ancien
Notifier de
PPmarcel
Invité
PPmarcel

Le coup du start-stop-daemon c’est tellement pratique avec sysvinit, par contre il est nettement moins loquace avec systemd, c’est regrettable.

En tout cas j’ai beaucoup apprécié le ton « piquant » de cet article. 🙂

Sam
Invité
Sam

Salut,
Nouveau dans le monde de debian même distrib et même problème avec ce satané plugin docker.
c’est vraiment trop technique et tu m’as perdu quand il faut supprimer les fichiers ! je suis vraiment débutant et je ne comprend pas trop ce qu’il faut que je supprime, je préfère demander que tout flinguer !
Merci d’avance