Points clés
- Les paquets Debian cassés et l’erreur « you have held broken packages » résultent le plus souvent de paquets conflictuels, de dépôts tiers ou de mises à jour interrompues.
- La première étape pour identifier les paquets en cause consiste à utiliser les commandes du gestionnaire de paquets APT sudo apt-get check ou sudo apt-mark showhold.
- Corrigez la plupart des problèmes de paquets cassés et de dépendances non satisfaites avec la commande sudo apt install –fix-broken, après avoir actualisé toutes les listes de paquets avec sudo apt update.
- Pour résoudre les conflits persistants, utilisez la commande sudo apt remove –purge package_name dans le terminal afin de supprimer entièrement le paquet problématique, puis exécutez sudo apt autoremove.
- Assurez la stabilité durable de votre système Linux en supprimant régulièrement les fichiers de dépendances inutiles et les caches de paquets, une opération que la solution de gestion des terminaux Linux de NinjaOne permet de piloter à grande échelle.
Vous cherchez comment réparer des paquets Debian cassés ? Ce guide vous explique la procédure à suivre sur Debian et sur les distributions Linux dérivées de Debian, comme Ubuntu. Vous y découvrirez comment résoudre l’erreur « Unable to correct problems, you have held broken packages » et comprendre l’origine des problèmes de paquets sous Debian.
Vous pouvez également regarder la version vidéo de cet article, Comment réparer des paquets Debian cassés, pour un guide visuel pas à pas.
Comprendre l’erreur « you have held broken packages »
Un paquet « gelé » (held) a été bloqué par le gestionnaire de paquets Debian : il ne sera donc pas mis à niveau, même si une version plus récente est disponible, afin d’éviter d’éventuels problèmes de compatibilité ou de stabilité. Les paquets sont automatiquement gelés lorsque leurs dépendances ne sont pas satisfaites ou sont cassées. Par exemple, un paquet peut dépendre d’une version différente d’un autre paquet déjà installé. Les administrateurs système peuvent aussi geler manuellement les paquets qu’ils ne souhaitent pas voir mis à jour automatiquement.
Pour la plupart des utilisateurs qui ne bricolent pas les réglages en coulisses, l’erreur « Unable to correct problems, you have held broken packages » a le plus souvent l’une de ces deux causes : soit vous avez installé des paquets issus d’un PPA ou d’un dépôt tiers qui entrent en conflit, soit une mise à jour provenant d’un dépôt officiel a été interrompue avant la fin.
Diagnostiquer les erreurs de paquets gelés sous Debian et Ubuntu
Pour diagnostiquer les erreurs de dépendances non satisfaites ou cassées sous Debian et Ubuntu, vous devez identifier les paquets à l’origine du message.
Pour cela, vous pouvez utiliser le gestionnaire de paquets apt afin de rechercher les paquets cassés avec la commande suivante :
sudo apt-get check
Cette commande vérifie la base de données des paquets et dresse la liste des paquets cassés. Si un problème est détecté, la sortie de la commande apt ressemblera à ceci :
Reading package lists… Done
Building dependency tree
Reading state information… Done
The following packages have unmet dependencies :
package_1 : Depends: package_2 (>= 1.0.0) but it is not installed
package_3 : Depends: package_4 but it is not installed
E : Unmet dependencies. Try using -f.
Vous savez ainsi précisément quels paquets sont éventuellement gelés et empêchent les mises à jour suivantes. Vous pouvez rechercher spécifiquement les paquets gelés avec la commande :
sudo apt list –upgradable
Les paquets gelés affichent la mention [held back] à côté de leur entrée :
Listing… Done
package_1/stable 1.2.3-4 amd64 [upgradable from: 1.2.2-3]
package_2/stable 2.3.4-5 amd64 [held back]
package_3/stable 3.4.5-6 amd64 [upgradable from: 3.4.4-5]
Vous pouvez également exécuter apt-mark pour lister tous les paquets gelés :
sudo apt-mark showhold
La commande apt que vous utilisez pour mettre à jour ou installer un logiciel peut elle aussi vous indiquer quels paquets posent problème :
$ sudo apt install package_1
Reading package lists… Done
Building dependency tree
Reading state information… Done
Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming.
The following information may help to resolve the situation :
The following packages have unmet dependencies :
package_1 : Depends: package_2 (>= 2.0) but it is not going to be installed
E : Unable to correct problems, you have held broken packages.
Remarquez la liste des paquets aux dépendances non satisfaites vers la fin de la sortie.
Vous pouvez obtenir des informations plus précises sur un paquet et ses dépendances grâce à la commande apt search suivante :
sudo apt search package_name
Elle renvoie des informations sur les versions du paquet et ses dépendances :
package_name/focal 1.2.3-4 amd64
Ensuite, pour connaître les versions du paquet gelé disponibles dans l’ensemble de vos dépôts, exécutez :
sudo apt list -a package_name
La sortie ressemblera à ceci :
package_name/focal 1.2.3-4 amd64
package_name/focal-updates 1.2.3-5 amd64
package_name/focal-backports 1.2.3-6 amd64
Vous pouvez alors examiner les dépendances du paquet :
sudo apt-cache depends package_name
Une fois que vous avez identifié les paquets qui déclenchent les erreurs de dépendances non satisfaites ou cassées et compris pourquoi ils sont gelés, vous pouvez passer à leur réparation.
Réparer les paquets cassés sous Debian et Ubuntu
Pour corriger les problèmes liés aux paquets gelés sous Debian et Ubuntu, dont l’erreur « You have held broken packages », vous pouvez essayer les méthodes suivantes.
Commencez par mettre à jour vos listes de paquets et vos paquets installés :
sudo apt update
sudo apt upgrade
Relancez ensuite l’installation. Bien souvent, et tout particulièrement lorsque vous utilisez des dépôts logiciels tiers, il suffit de s’assurer que toutes les listes de paquets sont à jour pour résoudre le problème.
Vous pouvez aussi essayer d’installer les dépendances manuellement :
sudo apt install dependency_name
Si vous devez supprimer des dépendances conflictuelles, exécutez :
sudo apt remove package_name
… et si vous souhaitez supprimer complètement un paquet, y compris tous ses fichiers de configuration, exécutez :
sudo apt remove –purge package_name
Il est recommandé de lancer ensuite apt autoremove pour supprimer les dépendances qui auraient pu être installées automatiquement lors de tentatives précédentes, afin de repartir sur une base saine.
Comme toujours, vérifiez ce que fait chaque commande et évaluez son impact potentiel sur votre système avant de l’exécuter. Si l’exécution d’une commande apt vous inquiète, vous pouvez la simuler avec le paramètre –dry-run pour examiner la sortie sans apporter de modification réelle à votre système :
sudo apt install package_name –dry-run
En dernier recours, vous pouvez tenter de dégeler manuellement le paquet, mais ce n’est pas recommandé : les paquets restent généralement gelés pour une bonne raison, et vous devez tout mettre en œuvre pour résoudre les problèmes de dépendances via le gestionnaire de paquets.
Utiliser dpkg en dernier recours
Si les commandes apt échouent totalement à cause d’un état de dépendances gravement cassé, il peut être nécessaire de contourner apt et d’utiliser directement le gestionnaire de paquets de plus bas niveau, dpkg. Exécutez la commande sudo dpkg –configure -a pour traiter les paquets partiellement installés ou configurés. Dès que c’est terminé, lancez immédiatement sudo apt install -f (raccourci de –fix-broken) pour laisser apt nettoyer l’arborescence de dépendances qui en résulte.
Pour dégeler manuellement un paquet gelé, exécutez :
sudo apt-mark unhold package_name
Avant de tenter à nouveau d’installer le paquet, essayez de forcer apt à corriger les dépendances manquantes et les problèmes de dépendances restants :
sudo apts install –fix-broken
Notez que –fix-broken n’installera pas les paquets encore gelés.
Testez soigneusement votre système après toute opération de diagnostic ou de réparation : relancez apt update et apt upgrade et vérifiez que les deux commandes s’exécutent sans erreur. Dans les environnements critiques, testez également le bon fonctionnement de votre système (par exemple, s’il s’agit d’un serveur web, vérifiez que les applications web sont accessibles et opérationnelles). Pensez aussi à surveiller vos journaux système et vos journaux d’erreurs pour vous assurer que tous les problèmes sont entièrement résolus et qu’aucune incompatibilité n’a été introduite.
Mesures préventives contre les dépendances non satisfaites
Plusieurs mesures préventives permettent d’éviter les erreurs de dépendances non satisfaites et les paquets cassés sous Debian et Ubuntu Linux :
- Maintenez vos paquets à jour : mettez régulièrement vos logiciels à jour avec apt update et apt upgrade.
- Maintenez vos sources et listes de paquets à jour : De plus, en complément de apt update pour actualiser vos sources logicielles, vérifiez votre fichier /etc/apt/sources.list et le répertoire /etc/apt/sources.list.d/ afin de repérer toute entrée inattendue ou obsolète.
- Gérez soigneusement vos dépôts logiciels : en plus de sécuriser vos serveurs Linux, n’ajoutez que des dépôts logiciels tiers fiables à votre système (et vérifiez avec soin tous les autres programmes que vous téléchargez) : vous éviterez ainsi d’introduire des problèmes de paquets.
- Attention aux PPA (Personal Package Archives) : n’ajoutez jamais un PPA ou un autre dépôt tiers sans avoir vérifié en profondeur sa fiabilité et sa stabilité. Les sources logicielles non vérifiées sont de loin la cause la plus fréquente de « l’enfer des dépendances » et d’instabilité majeure sur les systèmes dérivés de Debian.
- Mettez en place des outils de gestion automatisée des paquets : si vous avez la responsabilité d’un parc de machines Linux, envisagez de déployer des outils qui vous aident à surveiller, anticiper et résoudre à distance les problèmes potentiels de stabilité et de compatibilité.
- Sauvegarde : effectuez régulièrement des sauvegardes complètes de vos systèmes Linux afin de pouvoir revenir à un état fonctionnel connu si quelque chose tourne très mal.
Veillez également à faire le ménage après votre gestionnaire de paquets en supprimant régulièrement les dépendances laissées par les paquets désinstallés et en vidant le cache des paquets. Ces tâches s’effectuent avec les commandes suivantes :
sudo apt autoremove
sudo apt autoclean
sudo apt clean
La commande apt autoremove supprime les paquets installés automatiquement (par exemple pour satisfaire les dépendances d’autres paquets) qui ne sont plus nécessaires. La commande apt autoclean supprime les fichiers obsolètes, y compris les paquets partiellement installés, et enfin la commande apt clean supprime les autres fichiers de paquets inutiles, y compris ceux des paquets actuellement installés.
Après ce nettoyage, exécutez toujours apt update pour disposer des listes de paquets les plus récentes.
Assurer la stabilité durable de vos déploiements Linux
Résoudre entièrement l’erreur « Unable to correct problems, you have held broken packages » et les autres problèmes de dépendances non satisfaites ou cassées sous Debian et Ubuntu Linux vous remettra sur les rails, mais il vaut la peine de vous interroger sur vos pratiques globales de gestion des systèmes Linux et sur les causes profondes du problème.
Réparer des paquets cassés n’est pas la seule tâche de maintenance à accomplir pour maintenir votre infrastructure Linux en ligne et sécurisée, et ces tâches ne se règlent pas toujours avec quelques commandes dans un terminal. NinjaOne propose une solution éprouvée de gestion des terminaux Linux qui vous permet de gérer, de patcher et de sécuriser vos terminaux Linux à grande échelle.
