Récemment, j'essayais d'installer une application à l'aide de la commande apt sur Ubuntu lorsque j'ai rencontré l'erreur suivante :
E :Impossible d'obtenir le verrou /var/lib/dpkg/lock - ouvert (11 : Ressource temporairement indisponible)
E :Impossible de verrouiller le répertoire d'administration (/var/lib/dpkg/), est-ce qu'un autre processus l'utilise ?
En fait, une erreur similaire peut s'afficher :
E :Impossible d'obtenir le verrou /var/lib/apt/lists/lock - ouvert (11 : Ressource temporairement indisponible)
E :Impossible de verrouiller le répertoire /var/lib/apt/lists/
E :Impossible d'obtenir le verrou /var/lib/dpkg/lock - ouvert (11 : Ressource temporairement indisponible)
E :Impossible de verrouiller le répertoire d'administration (/var/lib/dpkg/), est-ce qu'un autre processus l'utilise ?
Dans certains cas, vous pouvez le voir lors de l'utilisation du Centre logiciel :
Ces erreurs sont très similaires à une autre erreur courante d'Ubuntu, Impossible de verrouiller le répertoire /var/cache/apt/archives/, et ce qui est intéressant, c'est que les correctifs sont également similaires.
Correction de l'erreur "Impossible de verrouiller le répertoire d'administration (/var/lib/dpkg/)"
Vous voyez cette erreur car un autre programme essaie de mettre à jour Ubuntu. Lorsqu'une commande ou une application met à jour le système ou installe un nouveau logiciel, elle verrouille le fichier dpkg (gestionnaire de paquets Debian).
Ce verrouillage est fait pour que deux processus ne modifient pas le contenu en même temps car cela peut conduire à une situation injustifiée et à un éventuel système cassé.
Voyons quelles mesures pouvez-vous prendre pour résoudre ce problème "Impossible de verrouiller le répertoire d'administration".
Méthode 0 :
La première chose à faire est de vérifier si un autre programme pourrait exécuter une mise à jour du système ou installer un programme.
Si vous utilisez la ligne de commande, vérifiez si une application comme Software Center, Software Updater, Synaptic package manager, Gdebi exécute une mise à jour/installation. Si tel est le cas, veuillez attendre que le programme termine le processus d'exécution.
Si aucune application de ce type n'est en cours d'exécution, veuillez vérifier toutes les fenêtres de terminal ouvertes et voir si vous exécutez une mise à jour ou installez un programme. Si oui, attendez qu'il se termine.
Si rien de ce qui précède ne se produit, vérifiez quel autre processus exécute la commande apt (gestionnaire de packages pour le logiciel de gestion). Utilisez cette commande :
ps aux | grep -i apt
Pour moi, il a montré cette sortie :
[email protected]:~$ ps aux | grep -i apt
root 1464 0.0 0.0 4624 772 ? Ss 19:08 0:00 /bin/sh /usr/lib/apt/apt.systemd.daily update
root 1484 0.0 0.0 4624 1676 ? S 19:08 0:00 /bin/sh /usr/lib/apt/apt.systemd.daily lock_is_held update
_apt 2836 0.8 0.1 96912 9432 ? S 19:09 0:03 /usr/lib/apt/methods/http
abhishek 6172 0.0 0.0 21532 1152 pts/1 S+ 19:16 0:00 grep --color=auto -i apt
Si vous voyez qu'apt est utilisé par un programme comme apt.systemd.daily update , vous avez de la chance, cher lecteur.
Il s'agit d'un démon qui s'exécute en arrière-plan et vérifie automatiquement les mises à jour du système lorsque vous démarrez votre système.
Dans Ubuntu 18.04 et les versions supérieures, il peut même essayer de télécharger et d'installer lui-même les mises à jour de sécurité importantes. C'est du moins ce que je vois dans les paramètres par défaut de l'outil Logiciels et mises à jour sur le bureau Ubuntu.
Si vous êtes sur le serveur Ubuntu, vous pouvez vérifier si vous avez activé les mises à niveau sans surveillance en vérifiant le contenu du fichier /etc/apt/apt.conf.d/20auto-upgrades .
Donc, si vous voyez qu'apt.systemd.daily utilise le processus apt, tout ce que vous avez à faire est d'attendre quelques minutes. Une fois la mise à jour automatique terminée, vous devriez pouvoir installer votre logiciel comme d'habitude.
En tant que solution permanente, vous pouvez désactiver la vérification des mises à jour automatiques et des mises à niveau sans surveillance, mais je ne le conseillerai pas pour des raisons de sécurité.
Maintenant, c'était le scénario simple et il pouvait être géré facilement. Mais ce n'est peut-être pas toujours le cas. Si un autre programme utilise apt, vous devez le gérer différemment.
Méthode 1 :
Utilisez la ligne de commande Linux pour rechercher et arrêter le processus en cours d'exécution. Pour cela, utilisez la commande ci-dessous :
ps aux | grep -i apt
Cela vous montrera l'identifiant du processus exécutant apt ou apt-get. Dans l'exemple ci-dessous, l'identifiant du processus est 7343. Vous pouvez ignorer la dernière ligne contenant 'grep –color=auto'.
Vous pouvez utiliser l'identifiant du processus pour le terminer en envoyant le signal SIGTERM. Remplacez le
sudo kill <process_id>
Vérifiez si le processus a été tué en exécutant le 'ps aux | commande grep -i apt'. S'il est toujours en cours d'exécution, forcez-le à le tuer avec le signal SIGKILL :
sudo kill -9 <process_id>
Un autre moyen plus simple serait d'utiliser la commande killall. Cela tuera toutes les instances d'un programme en cours d'exécution :
sudo killall apt apt-get
Méthode 2
La méthode ci-dessus résoudrait le problème pour vous dans la plupart des cas. Mais mon cas était un peu différent. J'étais en train de mettre à jour mon système et j'ai accidentellement fermé le terminal. Pour cette raison, aucun processus n'exécutait apt, mais il m'a quand même montré l'erreur.
Je vous conseille d'essayer les deux méthodes ci-dessus ou simplement de redémarrer votre système en premier. Si rien de tout cela ne fonctionne, vous seul optez pour cette option de suppression des fichiers de verrouillage.
Dans ce cas, la cause principale est le fichier de verrouillage. Comme mentionné précédemment, les fichiers de verrouillage sont utilisés pour empêcher deux ou plusieurs processus d'utiliser les mêmes données. Lorsque les commandes apt ou apt-get sont exécutées, elles créent des fichiers de verrouillage à quelques endroits. Si la commande apt précédente ne s'est pas terminée correctement, les fichiers de verrouillage ne sont pas supprimés et empêchent donc toute nouvelle instance des commandes apt-get ou apt.
Pour résoudre le problème, il vous suffit de supprimer les fichiers de verrouillage. Mais avant cela, il serait judicieux d'arrêter tout processus utilisant les fichiers de verrouillage.
Utilisez la commande lsof pour obtenir l'ID de processus du processus contenant les fichiers de verrouillage. Vérifiez l'erreur et voyez de quels fichiers de verrouillage il s'agit et obtenez l'identifiant des processus contenant ces fichiers de verrouillage.
Exécutez ces commandes une par une.
sudo lsof /var/lib/dpkg/lock
sudo lsof /var/lib/apt/lists/lock
sudo lsof /var/cache/apt/archives/lock
Il est possible que les commandes ne renvoient rien ou ne renvoient qu'un seul nombre. S'ils renvoient au moins un numéro, utilisez le ou les numéros et tuez les processus comme celui-ci (remplacez le
sudo kill -9 <process_id>
Vous pouvez maintenant supprimer en toute sécurité les fichiers de verrouillage à l'aide des commandes ci-dessous :
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
Après cela, reconfigurez les packages :
sudo dpkg --configure -a
Maintenant, si vous exécutez la commande sudo apt update, tout devrait bien se passer.
Dépannage 1 :"Impossible d'acquérir le verrou frontal dpkg"
Si vous voyez une erreur comme celle-ci :
[email protected]:~$ sudo apt install grub-customizer
E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
Vous devriez savoir quel processus détient le lock-frontend à l'aide de la commande lsof comme indiqué dans les sections précédentes :
sudo lsof /var/lib/dpkg/lock-frontend
Voici ce que cela m'a montré :
[email protected]:~$ sudo lsof /var/lib/dpkg/lock-frontend
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
unattende 2823 root 5uW REG 8,2 0 145221 /var/lib/dpkg/lock-frontend
Si vous voyez "unattende ' Colonne COMMAND, cela signifie que des mises à niveau de sécurité sans surveillance sont en cours d'exécution. Vous devez attendre la fin du processus . Fondamentalement, c'est ce dont j'ai discuté dans la méthode 0, mais vous l'avez probablement ignoré.
Si la COMMANDE est autre chose, vous pouvez tuer le processus puis supprimer le fichier de verrouillage. Vous pouvez voir l'identifiant du processus sous la colonne PID. Utilisez ce PID pour tuer le processus. Après cela, supprimez le fichier de verrouillage et exécutez la commande de mise à jour pour voir s'il a été corrigé.
sudo kill -9 PID
sudo rm /var/lib/dpkg/lock-frontend
sudo apt update
Qu'est-ce que c'est que lsof :l'avertissement ne peut pas stat() fuse.gvfsd-fuse système de fichiers ?
Remarque :Si vous voyez « lsof :l'avertissement ne peut pas stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Les informations de sortie peuvent être incomplètes" après avoir exécuté la commande lsof mentionnée précédemment, ne paniquez pas.
Ce n'est pas une erreur. C'est juste que lsof essaie également d'examiner les systèmes de fichiers montés et l'avertissement concerne ces systèmes montés.
Les fichiers sont verrouillés par les processus de votre système de fichiers principal, donc s'il affiche un avertissement et aucune sortie, cela signifie seulement qu'aucun processus n'utilise ces fichiers de verrouillage.
Dépannage 2 :"dpkg :erreur :l'interface dpkg est verrouillée par un autre processus"
Si vous voyez l'erreur "dpkg frontend est verrouillé par un autre processus" lors de l'exécution des étapes de la méthode 2, vous devez effectuer une étape supplémentaire.
Tout d'abord, recherchez l'identifiant du processus qui contient le fichier de verrouillage.
sudo lsof /var/lib/dpkg/lock-frontend
La commande ci-dessus vous donnera les détails des processus utilisant les fichiers de verrouillage. Utilisez l'ID de processus pour tuer ce programme :
sudo kill -9 PID
Vous pouvez maintenant supprimer le verrou et reconfigurer dpkg :
sudo rm /var/lib/dpkg/lock-frontend
sudo dpkg --configure -a
Cela a-t-il fonctionné pour vous ? Quelle méthode a résolu le problème ?
J'espère que cette petite astuce vous a aidé à corriger l'erreur "Impossible d'obtenir le verrou /var/lib/dpkg/lock". Si oui, s'il vous plaît laissez-moi savoir dans les commentaires quelle méthode a fonctionné pour vous.
Si vous rencontrez toujours des problèmes, faites-le moi savoir. Je vais essayer de vous aider.
Toute autre suggestion est également la bienvenue dans les commentaires.