Como posso verificar se consigo instalar algo com o apt com segurança durante um script bash? [duplicado]

0

Eu escrevi um script bash para instalar alguns pacotes na primeira inicialização do meu Ubuntu 16.04 VPS. A plataforma VPS que estou usando o executa durante o processo de comissionamento do servidor. Quando é executado, estou recebendo esse tipo de erro:

...
Reading package lists...
E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/
...

Então, minha pergunta é: Como faço para sleep até que tudo esteja bem, vá em frente com a instalação?

Eu fiz um pouco de pesquisando para encontrar uma resposta sólida para isso (sou novo no bash scripting), e encontrei várias soluções propostas, mas há muito barulho. Algumas respostas são específicos de determinados sistemas de provisionamento, e outras abordagens parecem um pouco hacky .

Minha solução no momento é apenas um sleep 30 no topo do meu script, o que definitivamente não é uma solução robusta.

Eu tentei montar algo assim, mas parece que não funciona:

while true
do
  sudo lsof /var/lib/apt/lists/lock &> /dev/null
  [ $? = 0 ] && break
  sleep 1
done

Na minha máquina pessoal, ele dorme para sempre por causa de um erro ( WARNING: can't stat() fuse.gvfsd-fuse... ) e, no VPS, parece que não dorme nem um pouco.

Alguma idéia de por que isso não funciona, ou ideias para uma abordagem melhor?

A propósito, se você estiver interessado, o script que estou tentando executar é simplesmente:

#!/bin/sh
curl -sL https://deb.nodesource.com/setup_8.x | bash -
apt-get install -y nodejs

E a saída completa pode ser vista em este pastebin .

    
por Joe 15.10.2017 / 08:46

1 resposta

1

Coloque isso no seu script e inicie seu script com sudo .

#!/bin/sh

while [ -f /var/lib/apt/lists/lock
do
# The lock file is found, wait for it to be removed.
  sleep 3
done

# The lock file is not found, let's perform our actions.
curl -sL https://deb.nodesource.com/setup_8.x | bash -
apt-get install -y nodejs
    
por user680858 16.10.2017 / 00:47