Por que o 'apt-get install' adquire / var / cache / apt / archives / lock durante o download

2

Os comandos apt-get upgrade e apt-get install <packagename> adquirem /var/cache/apt/archives/lock durante o download e a instalação.

Acho que deve ser possível baixar pacotes sem adquirir o bloqueio. Precisamos adquirir o bloqueio somente ao atualizar / instalar os pacotes baixados. O que você acha? Por que não podemos baixar mais de um pacote ao mesmo tempo? Ou por que não podemos baixar pacotes durante a instalação de outro?

    
por Bora 13.05.2016 / 15:32

3 respostas

3

UPDATE: desculpe, minha culpa. apt-get download package-name apenas baixa o package-name para o diretório atual. então não é uma resposta à sua pergunta.

apt-get download também não faz o download das dependências do pacote.

uma alternativa para baixar os pacotes e dependências, mas não instalar seria: sudo apt-get -d install package-name

mas também não resolve o problema do bloqueio.

Eu acho que não é possível executar duas instâncias do apt-get de maneira simuntânea

Se o seu objetivo é baixar os pacotes de maneira mais rápida, talvez uma opção seja usar o apt-fast ( link ) em vez do apt-get (no meu caso, eu uso o apt-fast porque eu tenho uma conexão de internet muito instável)

resposta anterior:

uma opção é usar apt-get download package-name para baixar o pacote e executar sudo apt-get install package-name para instalar o pacote baixado.

apt-get download não cria um bloqueio.

você pode executar simultaneamente apt-get download e sudo apt-get install

    
por Fabio C. Barrionuevo da Luz 13.05.2016 / 15:43
2

O bloqueio é usado para garantir que apenas um processo possa alterar o banco de dados apt no momento. Se outro processo estava instalando um pacote e um estava instalando um, eles poderiam ficar muito confusos e corromper o banco de dados. para saber mais sobre esse conceito, google 'database transactions' ou 'atomicity'.

Você pode evitar os bloqueios baixando os pacotes usando os links do /etc/apt/sources.list e navegando no seu navegador. Você pode então instalar os debs que você baixou com gdebi ou dpkg. No entanto, se você fizer isso, você terá que resolver as dependências você mesmo que não é sempre fácil e é muito mais irritante IMHO do que os bloqueios.

Se os bloqueios forem incômodos, considere agrupar suas instalações para incluir vários pacotes, por exemplo. apt-get install pacote1 pacote2 pacote3 e vai fazer um chá.

    
por Amias 13.05.2016 / 15:48
0

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.

    
por loxaxs 21.01.2017 / 01:45