Por que os gerenciadores de pacotes precisam de arquivos de bloqueio?

8

dpkg usa um arquivo de bloqueio ( /var/lib/dpkg/lock ), quando em uso.

  • Por que esses arquivos de bloqueio são necessários?
  • Por que várias instâncias não são possíveis?
por acisoal 10.07.2014 / 08:05

3 respostas

14

Este não é um problema específico de dpkg (como o título da minha edição sugeriu). Pelo contrário, isso é algo que todo gerenciador de pacotes (do qual estou ciente) faz; e por um bom motivo. No entanto, eu entendo porque isso pode ser confuso.

Os gerenciadores de pacotes contam com bancos de dados para rastrear as informações dos pacotes instalados. Se vários usuários tentarem gravar em um banco de dados ao mesmo tempo, ele terá uma grande chance de corromper os dados (o que realmente estragaria o sistema).

Como resultado, muitos (todos?) gerenciadores de pacotes confiam em um arquivo de bloqueio para sinalizar que o banco de dados está sendo gravado para que outro cliente não possa fazer isso.

Observe que os gerenciadores de pacotes inteligentes podem determinar quando uma solicitação é somente leitura e pode não precisar bloquear o banco de dados. Como um resultado; é possível que algumas ações possam ser executadas simultaneamente onde outras não serão.

    
por 10.07.2014 / 08:31
8

O arquivo de bloqueio é usado para impedir a execução paralela de várias instâncias.

Por que isso é importante para os gerentes de pacotes?

Um gerenciador de pacotes - de uma visualização de alto nível - é um programa que aplica alterações complexas ao disco rígido.

As alterações não podem ser feitas em uma única etapa ("atômica"), portanto, há várias etapas; muitas das etapas dependem do resultado das etapas anteriores.

Assim, o gerenciador de pacotes precisa analisar o disco rígido antes de executar cada etapa ou simplesmente analisá-lo uma vez e acompanhar as alterações que ele próprio aplica. A primeira opção é extremamente lenta. O segundo requer que nenhuma outra instância faça alterações.

Existem muitos outros problemas que podem aparecer.

Não é impossível implementar um gerenciador de pacotes que possa funcionar em paralelo, mas é muito complicado para valer a pena . Como em, você não pode imaginar o quão complicado. Realmente.

    
por 10.07.2014 / 15:40
2

dkpg (e rpm e a maioria dos outros gerenciadores de pacotes tradicionais) trabalham instalando pacotes em um espaço global, o que significa que os pacotes podem entrar em conflito uns com os outros (por exemplo, A e B não podem ser instalados ao mesmo tempo, porque ambos instalam /usr/lib/libfoo.so ). Os gerenciadores de pacotes devem detectar esses conflitos e rejeitar essas solicitações de instalação para manter o sistema em um estado consistente. Ter várias instâncias do gerenciador de pacotes em execução ao mesmo tempo seria muito complicado e propenso a erros.

Gerentes de pacotes livres de conflitos (por exemplo, link ) podem e permitem que vários pacotes sejam instalados em paralelo¹ e não precisam de arquivos de bloqueio ( A/libfoo.so e B/libfoo.so irão para diferentes diretórios).

1 Paralela no sentido de estar presente e disponível no sistema ao mesmo tempo, e no sentido de ser baixado e adicionado ao sistema simultaneamente.

    
por 10.07.2014 / 18:13