Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
probleme_apt [Le 18/07/2018, 12:34] krodelabestiole [Impossible de verrouiller /var/lib/dpkg/lock] update + détails |
probleme_apt [Le 25/04/2023, 09:20] (Version actuelle) frombenny lien vers la logithèque |
||
---|---|---|---|
Ligne 4: | Ligne 4: | ||
====== Problèmes avec les gestionnaires de paquets ====== | ====== Problèmes avec les gestionnaires de paquets ====== | ||
- | Cette page est destinée à alléger la page principale [[apt]], si vous avez besoin d'informations générales sur apt consultez-la. | + | Cette page est destinée à alléger la page principale [[APT]], si vous avez besoin d'informations générales sur APT consultez-la. |
<note important>Pensez à effectuer une copie de [[:tutoriel:comment_sauver_et_restaurer_un_fichier|sauvegarde]] du ou des fichier(s) que vous allez modifier voire supprimer!</note> | <note important>Pensez à effectuer une copie de [[:tutoriel:comment_sauver_et_restaurer_un_fichier|sauvegarde]] du ou des fichier(s) que vous allez modifier voire supprimer!</note> | ||
Ligne 20: | Ligne 20: | ||
Sur Ubuntu toutes les interfaces de gestion de paquets ou de logiciels telles que [[:gnome-software|GNOME Logiciels]], [[:Synaptic]], [[:gnome-packagekit|GNOME paquets]], [[:apt-cli|apt]], [[:apt-get]], [[:Aptitude]], ou les [[:gestionnaire_de_mises_a_jour|gestionnaires de mises à jour]] reposent sur le même système : [[:APT]]. | Sur Ubuntu toutes les interfaces de gestion de paquets ou de logiciels telles que [[:gnome-software|GNOME Logiciels]], [[:Synaptic]], [[:gnome-packagekit|GNOME paquets]], [[:apt-cli|apt]], [[:apt-get]], [[:Aptitude]], ou les [[:gestionnaire_de_mises_a_jour|gestionnaires de mises à jour]] reposent sur le même système : [[:APT]]. | ||
- | Afin d'éviter des conflits, une seul instance d'APT peut être utilisée en même temps, voilà pourquoi APT utilise un fichier ''/var/lib/dpkg/lock'' : afin de bloquer les autres tentatives d'utilisation simultanées d'APT. | + | Afin d'éviter des conflits, une seule instance d'APT peut être utilisée en même temps, voilà pourquoi APT utilise un fichier ''/var/lib/dpkg/lock'' : afin de bloquer les autres tentatives d'utilisation simultanées d'APT. |
Ce message d'erreur indique donc que ce fichier ''/var/lib/dpkg/lock'' existe et bloque la suite des opérations. Cela peut être le cas pour deux raisons différentes : | Ce message d'erreur indique donc que ce fichier ''/var/lib/dpkg/lock'' existe et bloque la suite des opérations. Cela peut être le cas pour deux raisons différentes : | ||
* Soit un autre [[:gestionnaire de paquets]] (ou de mise à jour) est ouvert. Si c'est le cas, fermez-le proprement puis relancez votre commande. | * Soit un autre [[:gestionnaire de paquets]] (ou de mise à jour) est ouvert. Si c'est le cas, fermez-le proprement puis relancez votre commande. | ||
- | * Soit l'un de ces gestionnaires a "planté", ou l'ordinateur a été éteint sauvagement pendant une opération, et le gestionnaire n'a pas terminé normalement ses opérations en supprimant ce fichier. Dans ce cas (si vous êtes absolument certain·e qu'aucun autre gestionnaire ne tourne), vous pouvez supprimer ce fichier au moyen d'un [[:terminal]] : | + | * Soit l'un de ces gestionnaires a "planté", ou l'ordinateur a été éteint sauvagement pendant une opération, et le gestionnaire n'a pas terminé normalement ses opérations en supprimant ce fichier. (//FIXME : ce point mérite vérification, le verrou devant normalement disparaître même en cas de plantage du processus l’ayant requis en premier lieu//) |
- | <code>cd /var/lib/dpkg/ && sudo rm -v lock</code> | + | |
- | <note warning>Il est **impératif** que tous les gestionnaires de paquets soient fermés au moment d'exécuter la commande ci-dessus ! | + | |
- | Vous pouvez lister la liste des processus utilisant le fichier ''/var/lib/dpkg/lock'' au moyen de la commande suivante : | + | La documentation de dpkg rappelle que la suppression manuelle de ce fichier n’est **jamais** une solution correcte : [[https://wiki.debian.org/Teams/Dpkg/FAQ#Q:_What_can_be_done_when_the_dpkg_lock_is_held.3F|What can be done when the dpkg lock is held?]] (en anglais). |
- | <code>sudo lsof /var/lib/dpkg/lock</code> | + | |
- | </note> | + | Si la présence de ce verrou bloque vos opérations, vous devez tout d’abord fermer les éventuels processus ayant requis ce verrou, avec : <code>sudo fuser -vki -TERM /var/lib/dpkg/lock /var/lib/dpkg/lock-frontend</code> |
- | ===== Dpkg was interrupted ===== | + | Puis la cohérence de la base de données de dpkg doit être rétablie avec : <code>sudo dpkg --configure --pending</code> |
+ | |||
+ | <note warning>Vous croiserez souvent des guides recommandant de supprimer manuellement le fichier ''lock''. Ce conseil n’est pas à suivre, cette opération menant à des corruption de la base de données de dpkg ou même du système de fichiers.</note> | ||
+ | '===== Dpkg was interrupted ===== | ||
Si un [[gestionnaire de paquets]] vous dit quelque chose comme ça : | Si un [[gestionnaire de paquets]] vous dit quelque chose comme ça : | ||
Ligne 41: | Ligne 42: | ||
Enfin en tous cas quelque chose qui dit **dpkg %%--%%configure -a** dans le texte. | Enfin en tous cas quelque chose qui dit **dpkg %%--%%configure -a** dans le texte. | ||
- | * Faites : <code> | + | * Faites :<code> |
sudo dpkg --configure -a </code> | sudo dpkg --configure -a </code> | ||
* Si ça ne marche toujours pas faites : <code> | * Si ça ne marche toujours pas faites : <code> | ||
- | sudo apt-get install -f </code> | + | sudo apt install -f </code> |
* Si ça ne marche toujours pas (encore... cas rare) : <code> | * Si ça ne marche toujours pas (encore... cas rare) : <code> | ||
Ligne 95: | Ligne 96: | ||
===== Dpkg: error processing archive ===== | ===== Dpkg: error processing archive ===== | ||
- | Si vous voyez l'erreur "dpkg : error processing archive" lors d'une mise à jour ou de l'installation d'un paquet, comme le montre l'exemple ci-dessous, cette erreur est provoquée par un paquet "mal fait" (provenant probablement d'un ppa) voulant écraser (dans le sens de l'overwrite) des fichiers appartenant à d'autres paquets. Dpkg se termine alors avec l'erreur mentionnée et l'installation ou la mise à jour s'interrompt. Dans la plupart des cas, une telle erreur arrive quand un fichier est déplacé d'un paquet vers un autre avec une version plus récente. | + | Si vous voyez l'erreur "dpkg : error processing archive" lors d'une mise à jour ou de l'installation d'un paquet, comme le montre l'exemple ci-dessous, cette erreur est provoquée par un paquet "mal fait" (provenant probablement d'un ppa) voulant écraser (dans le sens de l'overwrite) des fichiers appartenant à d'autres paquets. Dpkg se termine alors avec l'erreur mentionnée et l'installation ou la mise à jour s'interrompt. Dans la plupart des cas, une telle erreur arrive quand un fichier est déplacé d'un paquet vers un autre avec une version plus récente. |
- | Exemple: | + | Exemple: |
<code> | <code> | ||
Préparation du décompactage de .../ubuntu-mate-default-settings_0.3.9~trusty2_all.deb ... | Préparation du décompactage de .../ubuntu-mate-default-settings_0.3.9~trusty2_all.deb ... | ||
Ligne 118: | Ligne 119: | ||
Dans la commande ci-dessus, remplacez "/var..." avec le chemin exact du fichier ".deb" qui a causé l'erreur. Si vous avez téléchargé le fichier manuellement, le fichier ".deb" n'est pas localisé dans "/var/cache/apt/archives" mais dans le répertoire où vous l'aviez téléchargé (~/Téléchargements/). Cette commande va permettre à dpkg de forcer l'installation en écrasant les fichiers qui existent dans les 2 paquets. Finalement, pour être sûr que tous les paquets sont bien installés, tapez cette commande : | Dans la commande ci-dessus, remplacez "/var..." avec le chemin exact du fichier ".deb" qui a causé l'erreur. Si vous avez téléchargé le fichier manuellement, le fichier ".deb" n'est pas localisé dans "/var/cache/apt/archives" mais dans le répertoire où vous l'aviez téléchargé (~/Téléchargements/). Cette commande va permettre à dpkg de forcer l'installation en écrasant les fichiers qui existent dans les 2 paquets. Finalement, pour être sûr que tous les paquets sont bien installés, tapez cette commande : | ||
<code> | <code> | ||
- | sudo apt-get install -f | + | sudo apt install -f |
</code> | </code> | ||
Ligne 139: | Ligne 140: | ||
set -e | set -e | ||
exit 0 | exit 0 | ||
- | </file> | + | </file> |
<note> | <note> | ||
Ligne 156: | Ligne 157: | ||
Si cela ne marche toujours pas, essayez de remplacer le fichier **/var/lib/dpkg/status** par **/var/lib/dpkg/status-old** (vérifier la présence de ce fichier avant).\\ | Si cela ne marche toujours pas, essayez de remplacer le fichier **/var/lib/dpkg/status** par **/var/lib/dpkg/status-old** (vérifier la présence de ce fichier avant).\\ | ||
- | Il peut exister également des sauvegardes du fichier status dans **/var/backups** (compressées ou non).\\ | + | Il peut exister également des sauvegardes du fichier status dans **/var/backups** (compressées ou non). |
Si ce n'est pas mieux éditer le fichier **/var/lib/dpkg/status** et retirer chaque section comportant le paquet bloquant suivi des commandes : | Si ce n'est pas mieux éditer le fichier **/var/lib/dpkg/status** et retirer chaque section comportant le paquet bloquant suivi des commandes : | ||
<code> | <code> | ||
sudo dpkg --configure -a | sudo dpkg --configure -a | ||
- | sudo apt-get update | + | sudo apt update |
- | sudo apt-get dist-upgrade | + | sudo apt full-upgrade |
</code> | </code> | ||
Ligne 173: | Ligne 174: | ||
<code>E: Sub-process /usr/bin/dpkg returned an error code (2)</code> | <code>E: Sub-process /usr/bin/dpkg returned an error code (2)</code> | ||
la commande qui va vous sauver est toute simple : | la commande qui va vous sauver est toute simple : | ||
- | <code>sudo apt-get clean </code> | + | <code>sudo apt clean </code> |
Puis réinstaller le ou les paquets qui posaient problème : | Puis réinstaller le ou les paquets qui posaient problème : | ||
- | <code>sudo apt-get install nom_du_paquet </code> | + | <code>sudo apt install nom_du_paquet </code> |
Si cela ne fonctionne pas, forcer la désinstallation du paquet qui pose problème : | Si cela ne fonctionne pas, forcer la désinstallation du paquet qui pose problème : | ||
Ligne 189: | Ligne 190: | ||
Des erreurs ont été rencontrées pendant l'exécution : 'le paquet qui bloque' | Des erreurs ont été rencontrées pendant l'exécution : 'le paquet qui bloque' | ||
</code> | </code> | ||
- | Faites : | + | Faites : |
<code>gksu gedit /var/lib/dpkg/info/lepaquetquibloque.postrm</code> | <code>gksu gedit /var/lib/dpkg/info/lepaquetquibloque.postrm</code> | ||
- | Supprimer tout jusqu'au [[http://fr.wikipedia.org/wiki/Shebang|Shebang]] Bash, et ajouter juste après le [[http://fr.wikipedia.org/wiki/Shebang|Shebang]] Bash ceci : | + | Supprimer tout jusqu'au [[https://fr.wikipedia.org/wiki/Shebang|Shebang]] Bash, et ajouter juste après le [[https://fr.wikipedia.org/wiki/Shebang|Shebang]] Bash ceci : |
<code>/bin/true</code> | <code>/bin/true</code> | ||
Vous devez donc avoir dans votre fichier .postrm ceci et rien de plus : | Vous devez donc avoir dans votre fichier .postrm ceci et rien de plus : | ||
Ligne 214: | Ligne 215: | ||
===== Erreur du busistes de paquets ===== | ===== Erreur du busistes de paquets ===== | ||
- | Si //apt-get update// vous renvoie : | + | Si //apt update// vous renvoie : |
<code>Erreur du busistes de paquets... 0% </code> ou <code>Erreur du bus (core dumped)</code> | <code>Erreur du busistes de paquets... 0% </code> ou <code>Erreur du bus (core dumped)</code> | ||
supprimez les fichiers **/var/cache/apt/pkgcache.bin** et **/var/cache/apt/srcpkgcache.bin** : | supprimez les fichiers **/var/cache/apt/pkgcache.bin** et **/var/cache/apt/srcpkgcache.bin** : | ||
Ligne 222: | Ligne 223: | ||
</code> | </code> | ||
Puis refaites : | Puis refaites : | ||
- | <code>sudo apt-get update</code> | + | <code>sudo apt update</code> |
===== Le paquet installé n’apparaît pas dans la liste de Synaptic ===== | ===== Le paquet installé n’apparaît pas dans la liste de Synaptic ===== | ||
__Problème rencontré :__\\ | __Problème rencontré :__\\ | ||
- | L'installation de paquets .deb avec //**[[:gdebi]]**// se passe sans souci mais ces paquets n'apparaissent pas dans [[:Synaptic]] et [[:apt-get]] ne les trouve pas non plus (par exemple pour les supprimer).\\ | + | L'installation de paquets .deb avec //**[[:gdebi]]**// se passe sans souci mais ces paquets n'apparaissent pas dans [[:Synaptic]] et [[:apt-cli|apt]] ne les trouve pas non plus (par exemple pour les supprimer).\\ |
Ils sont pourtant installés car lorsqu'on appelle les programmes correspondants, ils se lancent sans problème. | Ils sont pourtant installés car lorsqu'on appelle les programmes correspondants, ils se lancent sans problème. | ||
Ligne 242: | Ligne 243: | ||
===== Erreurs dans le fichier /etc/apt/sources.list ===== | ===== Erreurs dans le fichier /etc/apt/sources.list ===== | ||
- | Les erreurs de type : | + | Les erreurs de type : |
<code> | <code> | ||
Ligne 254: | Ligne 255: | ||
Une fois la modification effectuée, il faut sauver puis quitter, et faire : | Une fois la modification effectuée, il faut sauver puis quitter, et faire : | ||
- | <code>sudo apt-get update</code> | + | <code>sudo apt update</code> |
En cas de doute, on peut également régénérer complètement son sources.list, par exemple à partir de [[http://sources-list.ubuntu-fr-secours.org/|ce site]]. | En cas de doute, on peut également régénérer complètement son sources.list, par exemple à partir de [[http://sources-list.ubuntu-fr-secours.org/|ce site]]. | ||
Ligne 260: | Ligne 261: | ||
===== E: Encountered a section with no Package: header ===== | ===== E: Encountered a section with no Package: header ===== | ||
- | Un bug semble parfois empêcher l'accès aux applications de la [[:software-center|logithèque]] (idem avec [[:Synaptic]]), lors d'une mise à jour de la liste des paquets (via apt-get update), la console retourne une erreur de ce type : | + | Un bug semble parfois empêcher l'accès aux applications de la [[:gnome-software|logithèque]] (idem avec [[:Synaptic]]), lors d'une mise à jour de la liste des paquets (via ''apt update''), la console retourne une erreur de ce type : |
<code> | <code> | ||
E: Encountered a section with no Package: header | E: Encountered a section with no Package: header | ||
Ligne 268: | Ligne 269: | ||
<code> | <code> | ||
sudo rm /var/lib/apt/lists/* -vf | sudo rm /var/lib/apt/lists/* -vf | ||
- | sudo apt-get update | + | sudo apt update |
</code> | </code> | ||
- | [[http://forum.ubuntu-fr.org/viewtopic.php?id=481901|Discussion à propos de ce problème sur le forum ubuntu-fr]]. | + | [[https://forum.ubuntu-fr.org/viewtopic.php?id=481901|Discussion à propos de ce problème sur le forum ubuntu-fr]]. |
===== Erreur de Signature ===== | ===== Erreur de Signature ===== | ||
Ligne 300: | Ligne 301: | ||
<code>sudo rm -r /var/lib/apt/lists | <code>sudo rm -r /var/lib/apt/lists | ||
sudo mkdir -p /var/lib/apt/lists/partial | sudo mkdir -p /var/lib/apt/lists/partial | ||
- | sudo apt-get update</code> | + | sudo apt update</code> |
==== Signature non vérifiée ==== | ==== Signature non vérifiée ==== | ||
Ligne 323: | Ligne 324: | ||
Si ça ne marche pas avec keyserver.ubuntu.com remplacer par : | Si ça ne marche pas avec keyserver.ubuntu.com remplacer par : | ||
[[hkp://subkeys.pgp.net]] ou | [[hkp://subkeys.pgp.net]] ou | ||
- | [[hkp://pgp.mit.edu]] ou | + | [[hkp://pgp.mit.edu]] ou |
[[hkp://pool.sks-keyservers.net]] (serveurs aléatoires) | [[hkp://pool.sks-keyservers.net]] (serveurs aléatoires) | ||
[[hkp://keys.nayr.net]] ou encore | [[hkp://keys.nayr.net]] ou encore | ||
Ligne 337: | Ligne 338: | ||
* Solution simple, utiliser le fichier status.old généré automatiquement par le système et le renommer en status :<code> | * Solution simple, utiliser le fichier status.old généré automatiquement par le système et le renommer en status :<code> | ||
- | cp /var/lib/dpkg/status.old /var/lib/dpkg/status</code>Attention, si il y a trop de différence entre le fichier status et le old, la solution devient aléatoire.\\ Processus complet à suivre dans tous les cas, au delà de la récupération du fichier status.old :<code> | + | cp /var/lib/dpkg/status.old /var/lib/dpkg/status</code>Attention, si il y a trop de différence entre le fichier status et le old, la solution devient aléatoire.\\ Processus complet à suivre dans tous les cas, au delà de la récupération du fichier status.old : <code> |
- | ## au cas ou un gestionnaire de paquets est encore lancé | + | |
- | sudo rm /var/lib/apt/lists/lock | + | |
## un petit backup au cas ou, prudence | ## un petit backup au cas ou, prudence | ||
sudo cp -arf /var/lib/dpkg /var/lib/dpkg.backup | sudo cp -arf /var/lib/dpkg /var/lib/dpkg.backup | ||
Ligne 346: | Ligne 345: | ||
sudo cp /var/lib/dpkg/available-old /var/lib/dpkg/available | sudo cp /var/lib/dpkg/available-old /var/lib/dpkg/available | ||
## on purge | ## on purge | ||
- | sudo rm -rf /var/lib/dpkg/updates/* | ||
sudo rm -rf /var/lib/apt/lists | sudo rm -rf /var/lib/apt/lists | ||
sudo mkdir /var/lib/apt/lists | sudo mkdir /var/lib/apt/lists | ||
Ligne 352: | Ligne 350: | ||
sudo rm /var/cache/apt/*.bin | sudo rm /var/cache/apt/*.bin | ||
## et on relance | ## et on relance | ||
- | sudo apt-get clean | + | sudo apt clean |
- | sudo apt-get autoclean | + | sudo apt autoclean |
- | sudo apt-get update | + | sudo apt update |
sudo dpkg --clear-avail | sudo dpkg --clear-avail | ||
sudo dpkg --configure -a | sudo dpkg --configure -a | ||
- | sudo apt-get install -f | + | sudo apt install -f |
- | sudo apt-get update | + | sudo apt update |
- | sudo apt-get upgrade | + | sudo apt upgrade |
- | </code> | + | </code> //FIXME : La suppression manuelle de /var/lib/apt/lists n’est certainement pas une bonne idée, ça vaudrait le coup de demander conseil aux développeurs/mainteneurs d’APT pour connaître la marche à suivre recommandée.// |
- | * Si le fichier status.old(ou status-old) n'est plus disponible, le plus sûr, hélas, va consister à réinstaller votre système (ou a le laisser en l'état, sans mise à jour possible ni aucune installation de nouveau paquets possible. | + | * Si le fichier status.old(ou status-old) n'est plus disponible, le plus sûr, hélas, va consister à réinstaller votre système (ou a le laisser en l'état, sans mise à jour possible ni aucune installation de nouveau paquets possible. |
+ | <note warning> | ||
+ | Si une de ces opérations échoue à cause d’un verrou (//lock//) dpkg encore en place, suivez ces instructions : [[probleme_apt#impossible_de_verrouillervarlibdpkglock|Impossible de verrouiller /var/lib/dpkg/lock]] | ||
+ | </note> | ||
===== "W: Failed to fetch gzip:/var/lib/apt/lists/partial/..." lors d'une mise à jour ===== | ===== "W: Failed to fetch gzip:/var/lib/apt/lists/partial/..." lors d'une mise à jour ===== | ||
Ligne 368: | Ligne 369: | ||
<code> | <code> | ||
- | sudo apt-get clean | ||
cd /var/lib/apt | cd /var/lib/apt | ||
sudo mv lists lists.old | sudo mv lists lists.old | ||
sudo mkdir -p lists/partial | sudo mkdir -p lists/partial | ||
- | sudo apt-get clean | + | sudo apt clean |
- | sudo apt-get update | + | sudo apt update |
</code> | </code> | ||
- | ===== Autres erreurs ===== | ||
- | |||
- | En cas d'autres erreurs, pour tenter de débloquer apt sans devoir redémarrer : | ||
- | |||
- | <code> | ||
- | sudo rm /var/lib/apt/lists/lock /var/lib/dpkg/lock /var/cache/apt/archives/lock | ||
- | sudo killall apt-get | ||
- | </code> | ||
- | |||
- | Autre solution possible : | ||
- | |||
- | Supprimer tous les fichiers d'installation du paquet par exemple : | ||
- | <code> | ||
- | sudo rm /usr/bin/[nom du PAQUET] /usr/share/doc/[nom du PAQUET] | ||
- | sudo rm /usr/share/man/man1/[nom du PAQUET].1.gz | ||
- | sudo rm /var/crash/[nom du PAQUET].0.crash | ||
- | sudo rm /var/lib/dpkg/info/[nom du PAQUET].list | ||
- | sudo rm /var/lib/dpkg/info/[nom du PAQUET].md5sums | ||
- | sudo rm /var/lib/dpkg/info/[nom du PAQUET].postinst | ||
- | sudo rm /var/lib/dpkg/info/[nom du PAQUET].prerm | ||
- | </code> | ||
- | (Pour les localiser utiliser ''# locate [nom du PAQUET]'' par exemple.) | ||
- | |||
- | Normalement à partir de là l'erreur a disparu. | ||
- | |||
- | Vous pouvez désinstaller le paquet proprement puis le réinstaller : | ||
- | <code>sudo apt-get remove [nom du PAQUET]; sudo apt-get install [nom du PAQUET]</code> | ||
---- | ---- | ||
- | //Contributeurs: [[utilisateurs:Fabien26]], [[utilisateurs:на_краю]], [[utilisateurs:sheep]], [[utilisateurs:BeAvEr]].// | + | //Contributeurs: [[:utilisateurs:Fabien26]], [[:utilisateurs:на_краю]], [[:utilisateurs:sheep]], [[:utilisateurs:BeAvEr]], [[:utilisateurs:krodelabestiole]]// |