Se você quer apenas saber a linha de comando para usar, pule para " O comando que você recebe é ".
- Comportamento Apt-get -
Quanto ao 'Por que' o apt-get obtém bloqueio durante o download, o motivo parece ser que ele quer garantir que o bloqueio não seja removido (bloqueado) por algum outro processo durante o download. Agora, o problema é que, quando alguém está disposto a instalar algum pacote, e o bloqueio está definido, apt-get
se recusa a fazer qualquer coisa, mesmo baixando os arquivos.
- Opinião pessoal -
deve ser possível baixar pacotes sem adquirir o bloqueio
Eu definitivamente concordo com você. O APT deve ter uma opção para permitir o download de arquivos enquanto o bloqueio estiver definido. Na verdade, na minha opinião, deve haver um sistema de fila de instalação para permitir o enfileiramento de uma instalação enquanto algum pacote está sendo instalado, e os próximos pacotes estão sendo baixados. Infelizmente, essa opção não foi adicionada para o usuário final. Temos que cortar um pouco o apt-get.
- Como resolvi o problema -
Agora, vamos resolver o problema:
-
man apt-get
, seguido por uma pesquisa de /
usando a palavra-chave download
nos ensina que é possível resolver e fazer o download de dependências de pacote com o comando:
sudo apt-get -d install <package-name>
-
info apt.conf
, em seguida, pesquisar /
lock
nos informa que a opção de configuração Debug::NoLocking=1
desativa o bloqueio.
-
man apt-get
then /
configuration
nos informa que as opções de configuração podem ser definidas por comando usando a opção -o
. Portanto, especificar -o Debug::NoLocking=1
na linha de comando ignorará o uso do bloqueio para esse comando. Tenha cuidado ao usar a substituição de bloqueio. Em particular, certifique-se de que ele não seja usado para instalar pacotes (talvez você queira configurar um alias). Sugere-se que ele possa ser usado para executar execuções a seco ( apt-get -s
) ou atualizações simultâneas ( apt-get update
). Eu suponho que não há problema em usá-lo para fazer o download de pacotes, embora seria muito melhor se uma opção dedicada pudesse ser adicionada pelos desenvolvedores.
O comando que você recebe é:
sudo apt-get -o Debug::NoLocking=1 -y -d install <package-name>
- Alias -
Você pode criar um alias para ele em algum lugar, como em ~/.bashrc
:
alias saptdl="sudo apt-get -o Debug::NoLocking=1 -y -d install"
Eu não sei como dizer ao bash como tab-autocomplete esse comando, mas eu sei que o shell alternativo zsh
gerencia o autocomplemento de alias. Se você decidir usar, sugiro usar oh-my-zsh
para uma experiência maior.
- Função -
É possível elaborar um pouco mais sobre isso e criar uma função que verifique se o bloqueio ( /var/lib/dpkg/lock
) está definido e opte por instalar o pacote ou fazer o download sem bloqueio. Algo como:
function saptdl () {
if [ sudo fuser /var/lib/dpkg/lock ]
then sudo apt-get -o Debug::NoLocking=1 -y -d install "$@"
else sudo apt-get install "$@"
fi
}
Quanto ao preenchimento automático da função, gostaria de poder ajudar. Talvez eu encontre o caminho e adicione depois. Sinta-se à vontade para editar minha resposta.