Qual é a diferença entre uma verificação de dependência recursiva e uma verificação de dependência reversa?

6

Meu entendimento das dependências de software é que um pacote de programas pode exigir a instalação de outros pacotes, dependências denominadas. Um resultado semelhante a uma árvore ocorre. Às vezes, os pacotes compartilham dependências comuns, mas o pacote só precisa ser instalado uma vez.

                                        |Package D
                  | Package B --------->|
                  |                     |Package E
Package A ------->|
                  |                     |Package F
                  | Package C --------->|
                                        |Package B

Eu recentemente publiquei uma pergunta no AskUbuntu.com sobre como encontrar as dependências de um pacote, e todas as maneiras de fazer isso me deram resultados diferentes. A razão para isso foi que alguns dos métodos aparentemente listavam mais do que apenas dependências, alguns estavam realizando verificações recursivas, e alguns estavam realizando verificações reversas.

Qual é a diferença entre uma verificação de dependência reversa e uma verificação de dependência recursiva?

EDITAR:

Citações para termos. Eu os ouvi pela primeira vez nos comentários de um tópico que publiquei sobre o APT, mas eles são usados em vários programas que podem ser usados para fazer verificações de dependência, bem como em suas páginas de trabalho.

apt-cache rdepends is looking for Reverse dependencies, my script and apt-rdepends are recursively looking for dependencies.
rdepends pkg(s)
           rdepends shows a listing of each reverse dependency a package has.
apt-rdepends - performs recursive dependency listings similar to
       apt-cache
por please delete me 08.07.2014 / 02:29

1 resposta

12

O inverso depende

Reverse depends significa que você quer uma lista de pacotes que dependem de um determinado pacote.

Exemplo

$ apt-cache rdepends jetty
jetty
Reverse Depends:
  solr-jetty
  libjetty-java
  libjetty-extra-java
  libjetty-extra
  libini4j-java
  guacamole

Recursivo depende

Usar uma ferramenta como apt-rdepends mostra de quais pacotes um determinado pacote depende, além de quais pacotes esses pacotes também dependem. Isso é feito recursivamente até que toda a árvore de dependências esteja esgotada.

Exemplo

$ apt-rdepends jetty | head -10
Reading package lists... Done
Building dependency tree       
Reading state information... Done
jetty
  Depends: adduser
  Depends: apache2-utils
  Depends: default-jre-headless
  Depends: java5-runtime-headless
  Depends: jsvc
  Depends: libjetty-java (>= 6.1.26-1ubuntu1)
adduser
  Depends: debconf
  Depends: debconf-2.0
...

Acima, você pode ver que jetty depende de adduser , que depende de debconf .

Dependente recursivo depende

Este mostra quais pacotes dependem de um pacote que depende de um determinado pacote. Isso é feito novamente de forma recursiva.

Exemplo

$ apt-rdepends --reverse jetty 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
jetty
  Reverse Depends: solr-jetty (>= 3.6.1+dfsg-0ubuntu2)
solr-jetty
  Reverse Depends: chef-solr (>= 10.12.0+dfsg-1)
chef-solr
  Reverse Depends: chef-expander (>= 10.12.0-1)
  Reverse Depends: chef-server-api (>= 10.12.0-1)
chef-expander
chef-server-api
  Reverse Depends: chef-server-webui (>= 10.12.0+dfsg-1)
chef-server-webui

Novamente aqui, enquanto a árvore é explorada, o primeiro pacote que lista jetty como dependência é solr-jetty , que por sua vez é listado como uma dependência para chef-solr , etc.

Tipos de depende

Pode ficar um pouco confuso, mas há uma variedade de depende. Olhando para a página do manual para apt-rdepends :

   -f, --follow=DEPENDS
        A comma-separated list of DEPENDS types to follow recursively. 
        By default, it only follows the Depends and PreDepends types.

        The possible values for DEPENDS are: Depends, PreDepends, Suggests,
        Recommends, Conflicts, Replaces, and Obsoletes.

        In --build-depends mode, the possible values are: Build-Depends, 
        Build-Depends-Indep, Build-Conflicts, Build-Conflicts-Indep.
    
por 08.07.2014 / 08:24