Como você encontra dependências ao instalar o software?

1

Nos tutoriais de instalação de software, eles sempre têm uma longa lista de dependências. Como eles encontram essas dependências?

Por exemplo, estou começando em um novo servidor Ubuntu, seguindo as instruções para instalar o rvm. Eles fornecem algo como:

sudo apt-get install git-core libreadline5 libncurses5-dev libreadline5-dev build-essential zlib1g-dev libssl-dev libpcre3-dev libxml2-dev libxslt-dev;

Eu só quero entender como eles encontram todas essas dependências. Copie e cole trabalhos, mas acho que é mais importante compreendê-lo.

    
por Luke Burns 20.12.2010 / 00:35

2 respostas

1

geralmente apt fará isso por você. se você tentar instalar um pacote binário que tenha dependências não atendidas, o apt informará quais estão faltando e solicitará permissão para instalá-las também.

a maioria das distribuições de fontes informam em um arquivo README quais são as dependências -dev.

    
por 20.12.2010 / 00:52
5

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.

    
por 20.12.2010 / 01:52