Qual é a diferença entre dependências e pré-depende?

12

O que se entende por "depende" e "pré-depende", e a diferença entre esses dois tipos de requisitos de pacote quando estou instalando algo no Ubuntu?

Bruno Pereira
fonte

Respostas:

20

Conforme extraído deste link: https://www.debian.org/doc/debian-policy/#document-ch-relationships

Existem 5 tipos de dependências:

O significado dos cinco campos de dependência é o seguinte:

Depende

  • Isso declara uma dependência absoluta. Um pacote não será configurado, a menos que todos os pacotes listados em seu campo Depends tenham sido configurados corretamente. O campo Depends deve ser usado se o pacote dependente for necessário para que o pacote dependente forneça uma quantidade significativa de funcionalidade. O campo Depends também deve ser usado se os scripts postinst ou prerm exigirem que o pacote dependente seja descompactado ou configurado para ser executado. No caso do postinst configure, os pacotes dependentes serão descompactados e configurados primeiro.

  • No caso de ações prerm ou outras postinst, as dependências do pacote normalmente serão pelo menos descompactadas, mas podem ser "meia-instaladas" apenas se uma atualização anterior da dependência falhar. Finalmente, o campo Depends deve ser usado se o pacote dependente for necessário pelo script postrm para limpar completamente após a remoção do pacote. Não há garantia de que as dependências do pacote estejam disponíveis quando o postrm for executado, mas é mais provável que o pacote dependente esteja disponível se o pacote declarar uma dependência (principalmente no caso do postrm remove). O script postrm deve ignorar ações que requerem dependência, se essa dependência não estiver disponível.

Recomenda

  • Isso declara uma dependência forte, mas não absoluta. O campo Recomendações deve listar os pacotes que seriam encontrados junto com este em todas as instalações, exceto as incomuns.

Sugere

  • Isso é usado para declarar que um pacote pode ser mais útil com um ou mais outros. O uso desse campo informa ao sistema de empacotamento e ao usuário que os pacotes listados estão relacionados a este e podem talvez melhorar sua utilidade, mas que a instalação deste sem eles é perfeitamente razoável.

Melhora

  • Este campo é semelhante ao Suggests, mas funciona na direção oposta. É usado para declarar que um pacote pode aprimorar a funcionalidade de outro pacote.

Pré-Depende

  • Esse campo é como Depends, exceto que ele também força o dpkg a concluir a instalação dos pacotes nomeados antes mesmo de iniciar a instalação do pacote que declara a pré-dependência . Funciona assim, quando um pacote que declara uma pré-dependência está prestes a ser descompactada, a pré-dependência poderá ser satisfeita se o pacote dependente estiver totalmente configurado ou mesmo se o (s) pacote (s) dependente (s) forem descompactados apenas ou no estado "Semi-configurado", desde que tenham sido configurados corretamente em algum momento no passado (e não removido ou parcialmente removido desde então).

  • Nesse caso, as versões configuradas anteriormente e atualmente descompactadas ou "semi-configuradas" devem atender a qualquer cláusula de versão no campo Pré-dependências. Quando o pacote que declara uma pré-dependência está prestes a ser configurado, a pré-dependência será tratada como um Depends normal. Será considerado satisfeito apenas se o pacote dependente tiver sido configurado corretamente. No entanto, diferentemente do Depends, o Pré-Depends não permite que dependências circulares sejam quebradas. Se uma dependência circular for encontrada ao tentar honrar as pré-dependências, a instalação será abortada.

  • As pré-dependências também são necessárias se o script pré-instalação depender do pacote nomeado. É melhor evitar essa situação, se possível. As pré-dependências devem ser usadas com moderação, de preferência apenas por pacotes cuja atualização ou instalação prematura prejudicaria a capacidade do sistema de continuar com qualquer atualização que possa estar em andamento.

Versão menor:

  • Ambos depende e pré-dependemencione as dependências de que um pacote precisa antes da instalação, mas a pré-dependência força a instalação e a configuração dos pacotes de dependência antes mesmo de iniciar o pacote que precisa das dependências. O dpkg nem sequer descompactará o pacote principal até que todos os pacotes de pré-dependência tenham sido resolvidos. Com depende, a ordem dos pacotes de dependência e o principal não são importantes. Com pré-depende, leva em consideração isso e também a verificação se os pacotes pré-dependentes estão configurados e instalados ou não. Sem isso, o pacote principal nem será descompactado, configurado ou instalado. Você deve ter as dependências instaladas antes de iniciar o processo de trabalho com o pacote principal. Caso contrário, eles precisam ser baixados / configurados / instalados antes de continuar.
Luis Alvarado
fonte
2
Observe que também existem anti-dependências , como conflitos e quebras. E crie dependências, como Dependências de compilação.
Alexis Wilke #
3

O termo "dependência" pode ser usado amplamente para abranger os relacionamentos "Depende" e "Pré-Depende" (e às vezes até outros relacionamentos mais fracos), ou pode ser usado estritamente como sinônimo de "Depends".

A diferença entre os relacionamentos de pacotes "Depende" e "Pré-depende" é que, se X depende de Y, Y deve ser totalmente configurado antes que X seja configurado. (A configuração é a etapa de instalação em que um pacote, uma vez que seus arquivos são descompactados nos locais apropriados - ou seja, uma vez "instalados" - realiza as outras alterações necessárias para que seja possível usar o software que ele fornece. Por exemplo , a configuração de um servidor HTTP pode envolver a garantia de que há um wwwusuário com as habilidades adequadas e um /var/wwwdiretório com permissões adequadas.) Por outro lado, se o X depende previamente de Y, ele deve ser instalado e (geralmente) totalmente configurado antes que o X seja executado. instalado .

Veja a Seção 7.2 do Manual de Políticas Debian para mais detalhes. Cito as duas seções mais relevantes aqui, mas há outras informações nessa seção (e no capítulo 7 em geral) que ajudam a esclarecer como as dependências funcionam.


Depends

Isso declara uma dependência absoluta. Um pacote não será configurado a menos que todos os pacotes listados em seu Dependscampo tenham sido configurados corretamente (a menos que exista uma dependência circular conforme descrito acima).

O Dependscampo deve ser usado se o pacote dependente for necessário para que o pacote dependente forneça uma quantidade significativa de funcionalidade.

O Dependscampo também deve ser usado se os scripts postinstou prermexigirem que o pacote dependente seja descompactado ou configurado para ser executado. No caso do postinst configure, os pacotes dependentes serão descompactados e configurados primeiro. (Se os dois pacotes estiverem envolvidos em um loop de dependência, isso pode não funcionar como esperado; veja a explicação alguns parágrafos atrás.) No caso de prermou de outras postinstações, as dependências do pacote normalmente serão pelo menos descompactadas, mas podem ser apenas "Semi-instalado" se uma atualização anterior da dependência falhar.

Por fim, o Dependscampo deve ser usado se o pacote dependente for necessário para o postrmscript limpar completamente após a remoção do pacote. Não há garantia de que as dependências do pacote estejam disponíveis quando postrmexecutadas, mas é mais provável que o pacote dependente esteja disponível se o pacote declarar uma dependência (principalmente no caso de postrm remove). O postrmscript deve ignorar ações que requerem dependência, se essa dependência não estiver disponível.


Pre-Depends

Esse campo é semelhante Depends, exceto que ele também força dpkga conclusão da instalação dos pacotes nomeados antes mesmo de iniciar a instalação do pacote que declara a pré-dependência, da seguinte maneira:

Quando um pacote que declara uma pré-dependência está prestes a ser descompactado, a pré-dependência pode ser satisfeita se o pacote dependente estiver totalmente configurado ou mesmo se o (s) pacote (s) dependente (s) forem descompactados apenas ou no "Meio -Configurado ", desde que tenham sido configurados corretamente em algum momento no passado (e não removidos ou parcialmente removidos desde então). Nesse caso, as versões configuradas anteriormente e atualmente descompactadas ou "semi-configuradas" devem atender a qualquer cláusula de versão no Pre-Dependscampo.

Quando o pacote que declara uma pré-dependência está prestes a ser configurado , a pré-dependência será tratada como normal Depends. Será considerado satisfeito apenas se o pacote dependente tiver sido configurado corretamente. No entanto, ao contrário de Depends, Pre-Dependsnão permite que dependências circulares sejam quebradas. Se uma dependência circular for encontrada ao tentar honrar Pre-Depends, a instalação será abortada.

Pre-Dependstambém serão necessários se o preinstscript depender do pacote nomeado. É melhor evitar essa situação, se possível.

Pre-Depends deve ser usado com moderação, de preferência apenas por pacotes cuja atualização ou instalação prematura prejudicaria a capacidade do sistema de continuar com qualquer atualização que possa estar em andamento.

Você não deve especificar uma Pre-Dependsentrada para um pacote antes que isso seja discutido na debian-devellista de discussão e que um consenso sobre isso seja alcançado. Veja Dependências, Seção 3.5 .

Eliah Kagan
fonte