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?
dpkg
lock
concurrency
acisoal
fonte
fonte
Respostas:
Este não é um
dpkg
problema específico (como sugeriu o título da minha edição). Pelo contrário, isso é algo que todo gerenciador de pacotes (do qual eu sei) faz; e por boas razões. No entanto, eu entendo por que pode ser confuso.Os gerenciadores de pacotes confiam nos 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, há uma grande chance de corromper os dados (o que realmente estragaria o sistema).
Como resultado, muitos gerenciadores de pacotes (todos?) Dependem de um arquivo de bloqueio para sinalizar que o banco de dados está sendo gravado; portanto, outro cliente não deve ter permissão para fazê-lo.
Observe que os gerenciadores de pacotes inteligentes podem determinar quando uma solicitação é somente leitura e podem não precisar bloquear o banco de dados. Como um resultado; é possível que algumas ações possam ser executadas simultaneamente, enquanto outras não.
fonte
O arquivo de bloqueio é usado para impedir a execução paralela de várias instâncias.
Por que isso é importante para os gerenciadores de pacotes?
Um gerenciador de pacotes - de uma visão de alto nível - é um programa que aplica mudanças complexas no disco rígido.
As alterações não podem ser feitas em uma etapa ("atômica"), portanto, existem várias etapas; muitas das etapas dependem do resultado das etapas anteriores.
Portanto, 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 em que ele se aplica. A primeira opção é extremamente lenta. A segunda exige 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.
fonte
dkpg
(e arpm
maioria dos outros gerenciadores de pacotes tradicionais) funcionam instalando pacotes em um espaço global, o que significa que os pacotes podem entrar em conflito entre si (por exemplo,A
eB
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.Os gerenciadores de pacotes livres de conflitos (por exemplo, http://0install.net ) podem e permitem a instalação de vários pacotes em paralelo¹, e não precisam de arquivos de bloqueio (
A/libfoo.so
eB/libfoo.so
irão em diretórios diferentes).1 Paralelamente, no sentido de estar presente e disponível no sistema ao mesmo tempo, e no sentido de ser baixado e adicionado ao sistema simultaneamente.
fonte