Cada pacote vem com uma lista de suas próprias dependências. Para debs , que o Ubuntu usa, você pode fazer: -
[andys@daedalus ~]$ apt-cache depends git-core
git-core
Depends: git
As dependências de um pacote são especificadas quando o pacote é construído. Alguns deles são especificados manualmente pelo gerenciador de pacotes (a pessoa responsável pela construção do pacote), e alguns são determinados automaticamente quando o pacote é construído. Se você baixar um pacote fonte Debian e procurar no arquivo debian/control
, você verá um número de linhas como Depends:
, Conflicts:
, Replaces:
, etc.
Então, voltando ao exemplo - git-core
depende de apenas um pacote, que é git
. git
é provavelmente um metapacote de algum tipo, que por sua vez tem uma grande quantidade de dependências, para garantir que todos os pacotes necessários para executar o git sejam instalados - não apenas para satisfazer as dependências de um pacote. Se olharmos para o pacote git
: -
[andys@daedalus ~]$ apt-cache depends git
git
Depends: libc6
Depends: libcurl3-gnutls
<...snip...>
Suggests: git-cvs
Suggests: git-svn
Suggests: git-email
<...snip...>
Recommends: rsync
<...snip...>
Conflicts: git-core
<...snip...>
Breaks: stgit
Breaks: stgit-contrib
Replaces: <cogito>
Replaces: git-core
... você verá que git
tem outras dependências. Para complicar ainda mais, existem diferentes tipos de dependência além de apenas requerer outro pacote para ser instalado ...
-
Conflitos - este pacote está em conflito com outro pacote e você provavelmente não poderá instalar o pacote conflitante sem desinstalar este, e vice-versa. Nesse caso,
git
está em conflito com git-core
. Na minha caixa aqui, o pacote git-core
está marcado como obsoleto , e é provavelmente por isso que ele está listado aqui.
-
Intervalo - este pacote quebra outro pacote e instalá-lo - embora talvez não exija a desinstalação do pacote que será danificado - causará problemas com o software instalado por esse pacote. Novamente, olhando para o nosso exemplo, os pacotes
stgit
e stgit-contrib
serão considerados quebrados quando git
for instalado.
-
Substitui - este pacote substitui outro pacote, o que significa que o outro pacote é obsoleto e provavelmente pode ser desinstalado. O pacote
git-core
aparece novamente aqui.
Também há tipos de dependência "soft", como Recomenda e Sugere , que não são necessários pelo pacote que você está instalar, mas são recomendados ou sugeridos , como o nome sugere. Mais uma vez, olhando para o exemplo, os pacotes sugeridos e recomendados são add-ons para git, ou ferramentas não diretamente relacionadas que facilitarão o uso.
Colocando tudo isso junto, o gerenciador de pacotes que você usa iniciará com o pacote (ou pacotes) que você pediu para instalar, e procurará as dependências para ele, e então quaisquer dependências para esses pacotes, e assim em. Ele também irá verificar se há pacotes que conflitam, quebram ou substituem os pacotes solicitados ou suas dependências. Uma vez que está feliz que tenha encontrado uma forma de satisfazer o seu pedido original, irá em frente com a instalação.
Diferentes gerenciadores de pacotes têm maneiras diferentes de fazer essa resolução de dependência . apt-get
, aptitude
e dselect
, por exemplo, todos essencialmente fazem a mesma coisa, mas a maneira como tomam sua decisão difere. Você pode achar que aptitude
e dselect
apresentarão uma maneira de instalar um pacote, enquanto apt-get
não pode.
Se você estiver interessado em saber mais sobre os pacotes Debian, dê uma olhada no Guia dos Novos Mantenedores Debian , que vai sobre algumas das entranhas dos debs.