Como evitar problemas com o “yum lock”?


31

Muitas vezes encontro a mensagem "Outro aplicativo está retendo o bloqueio do yum; aguarde até que ele saia ..." ao tentar instalar um aplicativo e preciso matá-lo manualmente. Como posso evitar isso? Existe algum método simples para desbloquear o yum?

Parece que apenas uma instância do yum pode estar em execução. É o mesmo com outros gerenciadores de pacotes (apt-get, pacman)?


No meu caso, eu estava conectado a um servidor via VPN. Depois que eu executei sudo yum -y update, todos os pacotes estavam sendo atualizados, juntamente com a VPN aberta. Depois que o pacote VPN aberto foi atualizado, eu fui desconectado da VPN. Faço login novamente, tente a atualização do yum novamente e ela diz a mesma coisa.
arun

Respostas:


24

Eu acho que é causado pelo PackageKit. Você precisa verificar o PackageKit e desativá-lo (presumo que seja o CentOS 7 com systemctl, caso contrário, você pode usá-lo servicee chkconfig) (como mencionado nos comentários, o nome do serviço packagekitnão é packagekitd):

systemctl stop packagekit
systemctl disable packagekit

Outra abordagem (no CentOS / RHEL 6, Fedora 19 ou anterior) é abrir /etc/yum/pluginconf.d/refresh-packagekit.confcom um editor de texto e mudar enabled=1para enabled=0.

Ou você pode removê-lo completamente:

yum remove PackageKit

3
É chamado packagekit.serviceno meu Centos 7
Vadim Kotov

No meu caso, eu simplesmente executei systemctl stop packagekit e o bloqueio do yum foi liberado.
T-Heron

9

faça o seguinte para resolver o problema:

cd /var/run
rm -f yum.pid

você também pode atualizar seu yum depois

yum -y update

1
Isso é combater os sintomas e não corrigir a causa real.
Axel Beckert

4

Você pode desbloquear o yum seguindo duas etapas simples,

1) Execute ps aux | grep yumpara ver qual processo está bloqueando o yum. 2) kill <process_id>para matar o processo.

Novamente, execute ps aux | grep yumpara ver se o processo está morto ou não. Yum será desbloqueado após o término do processo.


3
isso "funciona", mas provavelmente é uma prática ruim #
Dave Cousineau 26/10

1
Isso funciona em circunstâncias selecionadas. Eu encontrei uma situação em que o systemd reinicia o processo packagekit antes que eu possa iniciar meu próprio comando yum. E sim, também é provavelmente uma má prática matar o PID em vez de dizer normalmente ao packagekit para não executar.
precisa saber é o seguinte

1

No meu caso, eu estava conectado a um servidor via VPN (VPN aberta). Depois que eu executei sudo yum -y update, todos os pacotes estavam sendo atualizados, juntamente com a VPN aberta. Depois que o pacote VPN aberto foi atualizado, eu fui desconectado da VPN. Eu entrei novamente, tentei a atualização do yum novamente e dizia que outro processo está retendo o bloqueio do yum.

Eu verifiquei ps ax | grep yume o processo antigo ainda estava em execução. Esperei 5 minutos para que "terminasse", mas o processo continuou em execução. Então eu pensei que poderia "puxar o gatilho" com matar, então eu corri

kill <PID of the yum update process>

Isso não matou o processo. Tentei isso mais algumas vezes, e ainda sem sucesso.

Finalmente, tive que realmente puxar o plugue, executando:

kill -9 <PID of the yum update process>

Tentei atualizar yum novamente, mas o mesmo problema. Eu então corri:

rm -f /var/run/yum.pid

e tentei atualizar e obtive esta saída:

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

Acredite que está tudo bem, mas eu não gostei de puxar o plugue com tantas coisas!


0

systemctl disable packagekit não é suficiente . O packagekit será executado na reinicialização. Use o maskcomando em vez do disablecomando.

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

Então, após a reinicialização, você verá ...

[sri@localhost ~]$ systemctl status packagekit
● packagekit.service
   Loaded: masked (/dev/null; bad)
   Active: inactive (dead)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.