Wie vermeide ich Ärger mit "yum lock"?


31

Wenn ich versuche, eine App zu installieren, stoße ich oft auf die Meldung "Eine andere App hält gerade die yum-Sperre; wartet darauf, dass sie beendet wird ...", und ich muss yum manuell beenden. Wie kann ich das vermeiden? Gibt es eine einfache Methode, um yum freizuschalten?

Es scheint, dass nur eine Instanz von yum ausgeführt werden kann. Ist es dasselbe mit anderen Paketmanagern (apt-get, pacman)?


In meinem Fall war ich über VPN mit einem Server verbunden. Sobald ich lief sudo yum -y update, wurden alle Pakete zusammen mit Open-VPN aktualisiert. Nachdem das open-VPN-Paket aktualisiert wurde, wurde ich vom VPN getrennt. Ich melde mich wieder an, versuche das YUM-Update erneut und es steht das Gleiche.
16.

Antworten:


24

Ich denke, dass es durch PackageKit verursacht wird. Sie müssen nach PackageKit suchen und es deaktivieren (ich nehme an, es ist CentOS 7 mit systemctl, ansonsten können Sie serviceund verwenden chkconfig) (wie in den Kommentaren erwähnt, ist der Dienstname packagekitnicht packagekitd):

systemctl stop packagekit
systemctl disable packagekit

Ein anderer Ansatz (unter CentOS / RHEL 6, Fedora 19 oder früher) ist das Öffnen /etc/yum/pluginconf.d/refresh-packagekit.confmit einem Texteditor und der Wechsel enabled=1zu enabled=0.

Oder Sie können es komplett entfernen:

yum remove PackageKit

3
Es heißt packagekit.serviceauf meinem Centos 7
Vadim Kotov

In meinem Fall habe ich einfach systemctl stop packagekit ausgeführt und dann wurde die yum-Sperre freigegeben.
T-Heron

9

Gehen Sie wie folgt vor, um das Problem zu lösen:

cd /var/run
rm -f yum.pid

Sie können Ihr yum auch nachträglich aktualisieren

yum -y update

1
Dies bekämpft Symptome und behebt nicht die wahre Ursache.
Axel Beckert

4

Sie können yum entsperren, indem Sie zwei einfache Schritte ausführen:

1) Laufen Sie, um ps aux | grep yumzu sehen, welcher Prozess yum sperrt. 2) kill <process_id>um den Prozess abzubrechen.

Führen ps aux | grep yumSie den Vorgang erneut aus, um festzustellen, ob der Prozess beendet wurde oder nicht. Yum wird nach dem Beenden des Prozesses freigeschaltet.


3
Dies "funktioniert", ist aber wahrscheinlich eine schlechte Übung
Dave Cousineau

1
Dies funktioniert unter bestimmten Umständen. Ich bin auf eine Situation gestoßen, in der systemd den packagekit-Prozess neu startet, bevor ich meinen eigenen yum-Befehl starten kann. Und ja, wahrscheinlich ist es auch eine schlechte Praxis, die PID zu töten, anstatt packagekit anmutig anzuweisen, nicht zu laufen.
0xSheepdog

1

In meinem Fall war ich über VPN (Open VPN) mit einem Server verbunden. Sobald ich lief sudo yum -y update, wurden alle Pakete zusammen mit Open-VPN aktualisiert. Nachdem das open-VPN-Paket aktualisiert wurde, wurde ich vom VPN getrennt. Ich habe mich wieder angemeldet, das YUM-Update erneut versucht und es wurde gemeldet, dass ein anderer Prozess die YUM-Sperre hält.

Ich habe nachgefragt ps ax | grep yumund der alte Prozess lief noch. Ich habe 5 Minuten gewartet, bis es "fertig" war, aber der Prozess lief einfach weiter. Dann dachte ich, ich könnte mit kill den Abzug betätigen, also rannte ich los

kill <PID of the yum update process>

Das hat den Prozess nicht beendet. Versuchte das noch ein paar Mal und immer noch keinen Erfolg.

Schließlich musste ich wirklich den Stecker ziehen, indem ich lief:

kill -9 <PID of the yum update process>

Versucht yum Update erneut, aber das gleiche Problem. Ich lief dann:

rm -f /var/run/yum.pid

und dann versucht Update und bekam diese Ausgabe:

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

Glaube, alles ist gut, aber ich habe nicht gern an so vielen Dingen den Stecker gezogen!


0

systemctl disable packagekit ist nicht genug . Das PackageKit wird beim Neustart ausgeführt. Verwenden Sie den maskBefehl anstelle des disableBefehls.

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

Beim Neustart sehen Sie dann ...

[sri@localhost ~]$ systemctl status packagekit
● packagekit.service
   Loaded: masked (/dev/null; bad)
   Active: inactive (dead)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.