J'ai rencontré ce problème hier après que quelqu'un a redémarré pendant une mise à niveau de la version du système d'exploitation. Aucune des approches ci-dessus n'a fonctionné en raison de l'ampleur des erreurs (~1500 paquets).
Pour récupérer, je suis allé à /var/log/apt/history.log
et j'ai regardé la dernière entrée qui contient trois listes très longues décrivant ce qui était tenté lors de l'échec de la mise à niveau du système d'exploitation. Il se compose de trois listes "Upgrade:", "Install:", "Remove:" de la forme :
Upgrade: package1:arch (ancien, nouveau), package2:arch (ancien, nouveau),
...
Prennez ces trois listes dans votre éditeur favori compatible avec les expressions régulières, et remplacez les parenthèses jusqu'à la virgule par un retour à la ligne. Pour la section "Remove:", ajoutez un "-" afin d'obtenir des listes comme :
Install:
speech-dispatcher-espeak-ng:amd64
fdisk:amd64
libgoa-backend-1.0-1:amd64
...
Upgrade:
speech-dispatcher-audio-plugins:amd64
ubuntu-settings:amd64
libmpc3:amd64
...
Remove:
qtdeclarative5-ubuntu-ui-toolkit-plugin:amd64-
python-sip:amd64-
gstreamer1.0-plugins-ugly-amr:amd64-
...
Le "-" a été une découverte clé car à moins de lui indiquer d'installer et de supprimer, vous ne pourrez pas contourner bon nombre des cycles de dépendances.
Gardez une copie de ce fichier pour pouvoir y revenir plus tard, mais créez une nouvelle copie où vous nettoyez le tout : supprimez toutes les lignes supplémentaires du fichier, ne laissant que les lignes package:arch
.
Exécutez apt en utilisant le fichier résultant packages.txt comme suit
xargs -a packages.txt sudo apt install
Cette commande représentera l'ensemble des ajouts/suppressions que le système avait l'intention d'effectuer avant qu'il ne soit brisé, et devrait représenter un ensemble cohérent.
En supposant que cela se termine, vous pouvez compléter tout ce qui a été manqué avec sudo apt install -f
et sudo apt dist-upgrade
.
Terminez en créant une nouvelle liste avec seulement la liste "Install:" des paquets, passez-les à apt-mark auto
pour marquer les paquets comme installés automatiquement (l'amélioration les a sélectionnés, pas vous).
xargs -a installed.txt sudo apt-mark auto
J'espère que cela aidera quelqu'un d'autre qui pensait que son système entier était corrompu.