Bagaimana cara menghindari kerumitan "yum lock"?


31

Saya sering menjumpai pesan "Aplikasi lain sedang memegang kunci yum; menunggu untuk keluar ..." ketika mencoba menginstal aplikasi dan saya harus membunuh yum secara manual. Bagaimana saya bisa menghindarinya? Apakah ada metode sederhana untuk membuka kunci yum?

Tampaknya hanya satu instance dari yum yang dapat berjalan. Apakah sama dengan paket manger lainnya (apt-get, pacman)?


Dalam kasus saya, saya terhubung ke server melalui VPN. Setelah saya jalankan sudo yum -y update, semua paket diperbarui, bersama dengan VPN terbuka. Setelah paket VPN terbuka, saya terputus dari VPN. Saya masuk kembali, mencoba pembaruan yum lagi dan mengatakan hal yang sama.
arun

Jawaban:


24

Saya pikir ini disebabkan oleh PackageKit. Anda harus memeriksa PackageKit dan menonaktifkannya (saya menganggap itu adalah CentOS 7 dengan systemctl, kalau tidak Anda dapat menggunakan servicedan chkconfig) (seperti yang disebutkan dalam komentar, nama layanan packagekittidak packagekitd):

systemctl stop packagekit
systemctl disable packagekit

Pendekatan lain (Pada CentOS / RHEL 6, Fedora 19 atau sebelumnya) adalah membuka /etc/yum/pluginconf.d/refresh-packagekit.confdengan editor teks, dan mengubahnya enabled=1menjadi enabled=0.

Atau Anda dapat menghapusnya sepenuhnya:

yum remove PackageKit

3
Itu disebut packagekit.servicepada Centos 7 saya
Vadim Kotov

Dalam kasus saya, saya hanya menjalankan systemctl stop packagekit dan kemudian kunci yum dibebaskan.
T-Heron

9

lakukan hal berikut untuk menyelesaikan masalah:

cd /var/run
rm -f yum.pid

Anda juga dapat memperbarui yum Anda sesudahnya

yum -y update

1
Ini melawan gejala dan tidak memperbaiki penyebab sebenarnya.
Axel Beckert

4

Anda dapat membuka kunci yum dengan mengikuti dua langkah sederhana,

1) Jalankan ps aux | grep yumuntuk melihat proses mana yang mengunci yum. 2) kill <process_id>untuk mematikan proses.

Sekali lagi lari ps aux | grep yumuntuk melihat apakah prosesnya mati atau tidak. Yum akan dibuka setelah membunuh prosesnya.


3
ini "berhasil" tetapi mungkin merupakan praktik yang buruk
Dave Cousineau

1
Ini berfungsi dalam keadaan tertentu. Saya telah menghadapi situasi di mana systemd me-restart proses packagekit sebelum saya dapat memulai perintah yum saya sendiri. Dan ya, mungkin juga merupakan praktik yang buruk untuk membunuh PID alih-alih dengan anggun mengatakan pada packagekit untuk tidak lari.
0xSheepdog

1

Dalam kasus saya, saya terhubung ke server melalui VPN (VPN terbuka). Setelah saya jalankan sudo yum -y update, semua paket diperbarui, bersama dengan VPN terbuka. Setelah paket VPN terbuka, saya terputus dari VPN. Saya login kembali, mencoba pembaruan yum lagi dan dikatakan proses lain memegang kunci yum.

Saya memeriksa ps ax | grep yumdan proses lama masih berjalan. Saya menunggu 5 menit untuk "menyelesaikan", tetapi proses terus berjalan. Lalu saya pikir saya bisa "menarik pelatuknya" dengan membunuh, jadi saya berlari

kill <PID of the yum update process>

Itu tidak mematikan prosesnya. Mencoba itu beberapa kali lagi, dan masih belum berhasil.

Akhirnya saya harus benar-benar menarik stekernya, dengan menjalankan:

kill -9 <PID of the yum update process>

Mencoba memperbarui yum lagi, tetapi masalah yang sama. Saya kemudian berlari:

rm -f /var/run/yum.pid

dan kemudian mencoba memperbarui dan mendapatkan output ini:

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

Percayalah semuanya baik-baik saja, tetapi saya tidak suka mencabut banyak hal!


0

systemctl disable packagekit tidak cukup . packagekit akan berjalan saat reboot. Gunakan maskperintah sebagai ganti disableperintah.

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

Kemudian saat reboot Anda akan melihat ...

[sri@localhost ~]$ systemctl status packagekit
● packagekit.service
   Loaded: masked (/dev/null; bad)
   Active: inactive (dead)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.