Comment éviter les tracas «yum lock»?


31

Je rencontre souvent le message "Une autre application détient actuellement le verrou yum; en attendant qu'elle se termine ..." lorsque j'essaie d'installer une application et je dois tuer manuellement yum. Comment puis-je éviter cela? Existe-t-il une méthode simple pour déverrouiller miam?

Il semble qu'une seule instance de yum puisse être exécutée. Est-ce la même chose avec les autres gestionnaires de paquets (apt-get, pacman)?


Dans mon cas, j'étais connecté à un serveur via VPN. Une fois que j'ai couru sudo yum -y update, tous les packages étaient mis à jour, avec open-VPN. Une fois le package open-VPN mis à jour, j'ai été déconnecté du VPN. Je me reconnecte, réessaye la mise à jour miam et ça dit la même chose.
arun

Réponses:


24

Je pense que cela est causé par PackageKit. Vous devez vérifier PackageKit et le désactiver (je suppose que c'est CentOS 7 avec systemctl, sinon vous pouvez utiliser serviceet chkconfig) (comme mentionné dans les commentaires, le nom du service n'est packagekitpas packagekitd):

systemctl stop packagekit
systemctl disable packagekit

Une autre approche (sur CentOS / RHEL 6, Fedora 19 ou version antérieure) consiste à ouvrir /etc/yum/pluginconf.d/refresh-packagekit.confavec un éditeur de texte et à passer enabled=1à enabled=0.

Ou vous pouvez le supprimer complètement:

yum remove PackageKit

3
Il est appelé packagekit.servicesur mon Centos 7
Vadim Kotov

Dans mon cas, j'ai simplement exécuté systemctl stop packagekit , puis le verrou yum a été libéré.
T-Heron

9

procédez comme suit pour résoudre le problème:

cd /var/run
rm -f yum.pid

vous pouvez également mettre à jour votre miam après

yum -y update

1
Cela combat les symptômes et ne fixe pas la véritable cause.
Axel Beckert

4

Vous pouvez déverrouiller miam en suivant deux étapes simples,

1) Exécutez ps aux | grep yumpour voir quel processus bloque miam. 2) kill <process_id>pour tuer le processus.

Exécutez ps aux | grep yumà nouveau pour voir si le processus est tué ou non. Yum sera débloqué après avoir tué le processus.


3
cela "fonctionne" mais est probablement une mauvaise pratique
Dave Cousineau

1
Cela fonctionne dans certaines circonstances. J'ai rencontré une situation où systemd redémarre le processus packagekit avant de pouvoir démarrer ma propre commande yum. Et oui, c'est aussi une mauvaise pratique de tuer le PID au lieu de dire gracieusement à packagekit de ne pas s'exécuter.
0xSheepdog

1

Dans mon cas, j'étais connecté à un serveur via VPN (VPN ouvert). Une fois que j'ai couru sudo yum -y update, tous les packages étaient mis à jour, avec open-VPN. Une fois le package open-VPN mis à jour, j'ai été déconnecté du VPN. Je me suis reconnecté, j'ai essayé à nouveau la mise à jour yum et il a été dit qu'un autre processus maintenait le verrou yum.

J'ai vérifié avec ps ax | grep yumet l'ancien processus était toujours en cours d'exécution. J'ai attendu 5 minutes pour qu'il "se termine", mais le processus a simplement continué. Alors j'ai pensé que je pouvais "tirer sur la gâchette" avec tuer, alors j'ai couru

kill <PID of the yum update process>

Cela n'a pas tué le processus. Je l'ai essayé quelques fois de plus et toujours pas de succès.

Enfin, j'ai dû vraiment débrancher la prise, en exécutant:

kill -9 <PID of the yum update process>

J'ai essayé de nouveau la mise à jour, mais même problème. J'ai ensuite couru:

rm -f /var/run/yum.pid

puis essayé la mise à jour et obtenu cette sortie:

Loaded plugins: fastestmirror
Setting up Update Process
Loading mirror speeds from cached hostfile
 * base: mirror.sigmanet.com
 * epel: mirror.sjc02.svwh.net
 * extras: mirrors.vpsie.com
 * updates: mirror.pac-12.org
No Packages marked for Update

Je crois que tout va bien, mais je n'ai pas aimé débrancher tant de choses!


0

systemctl disable packagekit ne suffit pas . packagekit s'exécutera au redémarrage. Utilisez la maskcommande au lieu de la disablecommande.

[root@localhost yum.repos.d]# systemctl mask packagekit
Created symlink from /etc/systemd/system/packagekit.service to /dev/null.

Ensuite, au redémarrage, vous verrez ...

[sri@localhost ~]$ systemctl status packagekit
● packagekit.service
   Loaded: masked (/dev/null; bad)
   Active: inactive (dead)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.