333 votes

Incapable de corriger les problèmes, vous avez conservé des paquets brisés.

Après la mise à niveau de 10.04 à 12.04, j'essaie d'installer différents paquets. Par exemple, ia32-libs et skype (4.0).

Lorsque j'essaie de les installer, j'obtiens le message d'erreur "Impossible de corriger les problèmes, vous avez conservé des paquets cassés".

Sortie des commandes :

sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Après avoir exécuté ceci :

sudo dpkg --configure -a
foo@foo:~$ sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

2voto

Someone Points 4602

Comprenons cette erreur à l'aide d'un exemple :

Supposons que ce soit le message d'erreur :

The following packages have unmet dependencies:
 nginx-module-brotli : Depends: nginx (= 1.17.3-2-ppa7~bionic)
E: Unable to correct problems, you have held broken packages.

Décomposons-la en variables :

X=nginx-module-brotli
Y=nginx
Z=1.17.3-2-ppa7~bionic

Ici X est le paquet que vous essayez d'installer. Y est le paquet, ce qui cause des problèmes de dépendance (il peut y avoir de multiples Y ) et Z est la version qui est requise.

Donc, en résumé :

X a besoin du paquet Y avec la version Z pour travailler.

Cependant, apt rencontre des difficultés pour trouver la version Z für Y .

Donc, vérifions si la version Z est disponible pour le paquet Y . Nous pouvons utiliser apt-cache policy <package_name> pour trouver les versions disponibles pour le paquet. Par exemple :

 $ apt-cache policy nginx
libasound2:
  Installed: nginx_1.20.2-1~bionic
  Candidate: 1.2.2-2.1ubuntu2
  Version table:
 *** nginx_1.20.2-1~bionic 100
        100 /var/lib/dpkg/status
     1.17.3-2-ppa7~bionic 500
        500 http://br.archive.ubuntu.com/ubuntu focal/main amd64 Packages

Ici, vous pouvez voir deux versions pour le paquet nginx est disponible. La version requise par X es Z . Selon le tableau des versions, la version Z pour le paquet Y est disponible. Mais apt installe toujours la dernière version (je sais que c'est un peu stupide .) Il y a donc deux façons de résoudre ce problème :

  1. Installez la version correcte du paquet.
  2. Augmenter l'aptitude des apt .

Pour installer la version correcte du paquet, utilisez :

sudo apt update
sudo apt install <Y>=<Z>

Où se trouve le paquet qui cause des problèmes de dépendance et où se trouve la version requise par X. Maintenant, l'installation devrait réussir.

Pour augmenter l'aptitude de votre gestionnaire de paquets :

sudo apt update
sudo apt install aptitude
sudo aptitude -f install <Z>

Où se trouve le paquet que vous essayez d'installer. Quelques conseils utiles avec aptitude :

  • -f permet de faire un dépannage anticipé. C'est plutôt utile !

  • en sélectionnant n pour une solution fera que l'aptitude proposera plus de solutions !

  • Running man aptitude montrera un manuel détaillé pour utiliser aptitude. Manuel en ligne .

La version du paquet n'est pas disponible ?

D'abord, essayez d'exécuter sudo apt update pour mettre à jour la liste des référentiels. Essayez ensuite d'installer à nouveau le paquet.

Toujours pas disponible ?

Vous avez deux options :

  1. Recherchez le paquet dans https://packages.ubuntu.com/ et restaurer les référentiels par défaut.

  2. Ajouter des PPAs personnalisés pour satisfaire les dépendances.

Recherche de paquets et restauration des dépôts par défaut:-.

  1. Ir a https://packages.ubuntu.com

  2. Faites défiler la page jusqu'à la section "Recherche".

  3. Dans la colonne Mot-clé, saisissez le nom du paquet.

  4. Dans la colonne Distribution, sélectionnez le nom de code de votre version Ubuntu ( lsb_release -c ).

  5. Cliquez sur la recherche ! Search!

  6. Sélectionnez la touche exacte. Exact

  7. Vérifiez la version et le référentiel du paquet. Carefully check

Vérifiez si la version requise et la version disponible correspondent. Si oui, reportez-vous à Comment restaurer les référentiels par défaut ?

Ajout d'un PPA personnalisé.

Vous devez prendre l'aide de Google pour cela. Il suffit de chercher le paquet et la version sur Google et avec un peu de chance, vous trouverez un PPA.

Quelques commandes utiles :

  • sudo apt -f install <package> pour forcer l'installation du paquet.
  • sudo aptitude -f install <package> Pour forcer l'installation du paquet.
  • sudo add-apt-repository whatever/ppa pour ajouter un PPA.
  • sudo apt purge <package> pour retirer un paquet.

Je pose une nouvelle question Quelles informations dois-je fournir ?

Des informations telles que :

  • Votre version d'Ubuntu (sortie de lsb_release -d .
  • Sortie de sudo apt install <package>
  • Sortie de apt policy <package> y apt policy <package's dependency>

D'autres détails doivent être fournis lorsqu'ils sont demandés.

1voto

rustyx Points 587

Le message d'erreur est trompeur.

Il est écrit " vous avez tenu des paquets ", alors que souvent il n'y aura aucun colis détenu par vous :

$ apt-mark showhold

N'imprimerait rien.

Qué en fait il arrive que les paquets soient détenus par apt pendant l'analyse des dépendances. Ainsi, par exemple, vous pourriez obtenir un résultat comme celui-ci :

$ apt-get install gcc:i386
<...skip...>
The following packages have unmet dependencies:
 gcc:i386 : Depends: cpp:i386 (= 4:9.3.0-1ubuntu2) but it is not going to be installed
            Depends: gcc-9:i386 (>= 9.3.0-3~) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Clairement, ce n'est pas très utile...

Donc, pour déboguer davantage, exécutez apt avec le drapeau -o Debug::pkgProblemResolver=yes

$ apt-get -o Debug::pkgProblemResolver=yes install gcc:i386

Maintenant cela imprimerait un tas de lignes comme

Investigating (0) gcc:amd64 < 4:9.3.0-1ubuntu2 @ii mK Ib >
Broken gcc:amd64 Conflicts on gcc:i386 < none -> 4:9.3.0-1ubuntu2 @un puN Ib >
  Considering gcc:i386 9999 as a solution to gcc:amd64 3
  Removing gcc:amd64 rather than change gcc:i386
Investigating (0) binutils:amd64 < 2.34-6ubuntu1.1 @ii mK Ib >
Broken binutils:amd64 Conflicts on binutils:i386 < none -> 2.34-6ubuntu1.1 @un uN Ib >
  Considering binutils:i386 0 as a solution to binutils:amd64 1
  Added binutils:i386 to the remove list
  Conflicts//Breaks against version 2.34-6ubuntu1 for binutils but that is not InstVer, ignoring
  Fixing binutils:amd64 via keep of binutils:i386
Investigating (0) cpp:amd64 < 4:9.3.0-1ubuntu2 @ii mK Ib >
Broken cpp:amd64 Depends on cpp-9:amd64 < 9.3.0-17ubuntu1~20.04 @ii mR > (>= 9.3.0-3~)
  Considering cpp-9:amd64 -1 as a solution to cpp:amd64 1
  Added cpp-9:amd64 to the remove list
Broken cpp:amd64 Conflicts on cpp:i386 < none -> 4:9.3.0-1ubuntu2 @un uN Ib >
  Considering cpp:i386 0 as a solution to cpp:amd64 1
  Added cpp:i386 to the remove list
  Fixing cpp:amd64 via keep of cpp-9:amd64
  Fixing cpp:amd64 via keep of cpp:i386
. . .

L'essentiel est que gcc:i386 ne peut pas coexister avec gcc:amd64 . C'est tout apt pourrait dire vraiment.

1voto

ubuntu4life Points 151

J'ai eu ce problème en 2021 aussi, avec Ubuntu 20.04 LTS. Peut-être pour certaines personnes à l'avenir : Cela m'a aidé de vérifier le panneau "Application & Update" !

Parce que j'ai changé juste quelques minutes avant la position : "Pour les autres paquets, abonnez-vous à :" Je l'ai changé de "toutes les mises à jour" à "seulement les correctifs de sécurité/mises à jour"- et quand je l'ai remis à "toutes les mises à jour"- j'ai enfin pu tout installer.

0voto

Trect Points 264

J'ai été confronté au même problème lors de la mise à jour de l'application 14.04 LTS a 16.04 LTS . Vous devez retrouver le paquet cassé et essayer récursivement de le réinstaller ou de le mettre à niveau.

Tout d'abord, supprimez toutes les bibliothèques dépendantes ( autoremove ) et installez toutes les bibliothèques manquantes en utilisant sudo apt-get -f install ( -f signifie --fix-missing )

sudo apt-get autoremove
sudo apt-get -f install
sudo apt-get update
sudo apt-get upgrade 

Installer ubuntu toolchain de PPA

sudo add-apt-repository ppa:ubuntu-toolchain-r/test

Ensuite, installez aptitude .

sudo apt install aptitude

aptitude est un installateur beaucoup plus pratique que le gestionnaire de paquets apt-get . Il suggère également de résoudre les conflits de dépendances et les paquets cassés. Les conflits suivants se sont produits dans mon système. Ils peuvent être différents des vôtres mais la méthode de haut niveau pour les résoudre est la même.

$ sudo aptitude -f install build-essential
The following NEW packages will be installed:
  build-essential cpp{a} cpp-5{a} g++{a} g++-5{a} gcc{a} gcc-5{a} libasan2{a} libcc1-0{ab} 
  libcilkrts5{a} libgcc-5-dev{a} liblsan0{ab} libmpx0{a} libstdc++-5-dev{a} 
The following packages will be upgraded:
  gcc-5-base libstdc++6{b} 
2 packages upgraded, 14 newly installed, 0 to remove and 5 not upgraded.
Need to get 29.6 MB of archives. After unpacking 100 MB will be used.
The following packages have unmet dependencies:
 liblsan0 : Depends: gcc-9-base (= 9.3.0-10ubuntu2~16.04) but 9.3.0-11ubuntu0~14.04 is installed.
 libcc1-0 : Depends: gcc-9-base (= 9.3.0-10ubuntu2~16.04) but 9.3.0-11ubuntu0~14.04 is installed.
 libstdc++6 : Depends: gcc-9-base (= 9.3.0-10ubuntu2~16.04) but 9.3.0-11ubuntu0~14.04 is installed.

L'aptitude donne parfois une solution potentielle viable. Par exemple, mettre à niveau ou rétrograder d'autres bibliothèques pour résoudre le conflit. Dans mon cas, il n'y avait pas de solution. Je dois donc poursuivre la recherche des dépendances.

Comme build-essential besoins gcc-5 .

$ sudo apt-get -f install gcc-5

The following packages have unmet dependencies:
 gcc-5 : Depends: cpp-5 (= 5.5.0-12ubuntu1~16.04) but it is not going to be installed
         Depends: gcc-5-base (= 5.5.0-12ubuntu1~16.04) but 5.4.0-6ubuntu1~16.04.12 is to be installed
         Depends libcc1-0 (>= 5.5.0-12ubuntu1~16.04) but it is not going to be installed
         Depends libgcc-5-dev (= 5.5.0-12ubuntu1~16.04) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Mais gcc-5 dépend à son tour de cpp-5

$ sudo apt-get -f install cpp-5

The following packages have unmet dependencies:
 cpp-5 : Depends: gcc-5-base (= 5.5.0-12ubuntu1~16.04) but 5.4.0-6ubuntu1~16.04.12 is to be installed

cpp-5 dépend de gcc-5-base . Ici, vous pouvez voir qu'il y a un conflit spécifique. Aptitude donne plusieurs choix pour résoudre le conflit. Dans mon cas, la mise à niveau du libstdc++6 a résolu le problème.

$sudo aptitude -f install gcc-5-base
The following packages will be REMOVED:  
  gcc-5-base{u} 
0 packages upgraded, 0 newly installed, 1 to remove, and 6 not upgraded.
Need to get 0 B of archives. After unpacking 67.6 kB will be freed.
The following packages have unmet dependencies:
 libstdc++6 : Depends: gcc-5-base (= 5.4.0-6ubuntu1~16.04.12) but it is not going to be installed.
open: 115; closed: 488; defer: 35; conflict: 58                                                          .The following actions will resolve these dependencies:

     Keep the following packages at their current version:                        
1)     gcc-5-base [5.4.0-6ubuntu1~16.04.12 (now, xenial-security, xenial-updates)]

Accept this solution? [Y/n/q/?] n
The following actions will resolve these dependencies:

      Upgrade the following packages:                                                                     
1)      libstdc++6 [5.4.0-6ubuntu1~16.04.12 (now, xenial-security, xenial-updates) -> 9.3.0-10ubuntu2~16.0

Enfin, maintenant que le conflit est résolu, essayez d'installer build-essentials encore.

$ sudo aptitude -f install build-essential

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X