Saída visual (ASCII) Árvore de dependência Debian para terminal?

15

Não tenho certeza se essa é mais uma pergunta do SuperUser ou do UnixLinux, mas vou tentar aqui ...

Recentemente, encontrei isto:

# 710689 - aptitude: use caracteres unicode nas árvores - Registros de relatórios de erros do Debian

It would be nice when aptitude would use unicode characters for the trees in the dependency lists, e.g. instead of:

--\ Depends (3)
   --- libc-dev-bin (= 2.17-3)
   --- libc6 (= 2.17-3)
   --- linux-libc-dev
 --\ Suggests (2)
   --- glibc-doc (UNSATISFIED)
   --\ manpages-dev

...

... e eu pensei - uau, eu realmente gosto da saída da árvore de arte ASCII, não sabia que aptitude poderia fazer isso! Então, começo a mexer por uma hora com as opções de linha de comando aptitude - e simplesmente não consigo obter essa saída? Então, minha pergunta inicial foi: de onde vem essa saída, em primeiro lugar?!

Depois de um tempo, percebi que no meu sistema, aptitude finalmente faz o symlink para /usr/bin/aptitude-curses ; e finalmente percebi que aptitude tem uma interface curses ! :/

Então, eu finalmente corro aptitude sem nenhum argumento - e então a interface curses começa, e eu posso ver algo assim:

...éóbvioqueessescaracteresdeárvoreASCIIvêmdainterfacedecurses.

Entãoeuestavapensando-existeumaferramentaDebian/apt,queproduziráumaárvoreASCII"visual" - mas com dependências reais de pacotes?

Eu sei sobre debtree - Gráficos de dependência de pacotes (também recomendação de software - Como exibir visualmente as dependências de um pacote? - Ask Ubuntu ); mas eu prefiro ter algo no terminal, semelhante a uma árvore de diretórios (em vez dos gráficos "não ordenados" [em termos de posição do nó] de debtree , gerados por graphviz ' dot ).

Eu também vi Há alguma coisa que mostre as dependências visualmente, como uma árvore? , que recomenda :

$ apt-rdepends aptitude
Reading package lists... Done
Building dependency tree       
Reading state information... Done
aptitude
  Depends: libapt-pkg4.10
  Depends: libboost-iostreams1.42.0 (>= 1.42.0-1)
  Depends: libc6 (>= 2.4)
  Depends: libcwidget3
  Depends: libept1
  Depends: libgcc1 (>= 1:4.1.1)
  Depends: libncursesw5 (>= 5.7+20100313)
  Depends: libsigc++-2.0-0c2a (>= 2.0.2)
  Depends: libsqlite3-0 (>= 3.7.3)
  Depends: libstdc++6 (>= 4.5)
  Depends: libxapian22
libapt-pkg4.10
libboost-iostreams1.42.0
  Depends: libbz2-1.0
  Depends: libc6 (>= 2.3.6-6~)
  Depends: libgcc1 (>= 1:4.1.1)
  Depends: libstdc++6 (>= 4.2.1)
  Depends: zlib1g (>= 1:1.1.4)
...

... o que é bom, porque lista primeiro as dependências imediatas do pacote requerido; e, em seguida, as dependências dos pacotes de dependência de primeiro nível, e assim por diante - mas não é visualizado como uma árvore (e, na verdade, aptitude ' curses interface simplesmente mostra informações instaladas quando você expande o nó de dependência; ele não expande para outras dependências).

Então, a questão é - existe uma ferramenta, que produziria um gráfico de árvore de dependência com caracteres de terminal - como, por exemplo, no seguinte pseudocódigo:

$ pseudo-deb-graph --show-package="aptitude"

aptitude
  --- Depends: libapt-pkg4.10
  --\ Depends: libboost-iostreams1.42.0 (>= 1.42.0-1)
     --- Depends: libbz2-1.0
     --- Depends: libc6 (>= 2.4)
  --\ Depends: libc6 (>= 2.3.6-6~)
     --\ Depends: libc-bin (= 2.13-0ubuntu13)
        --- ...
     --\ Depends: libgcc1
        --- ...
     --\ Depends: tzdata
        --- ...
...
    
por sdaau 12.08.2013 / 08:18

1 resposta

12

Você pode fazer isso com o script bash

Código fonte: "apt-rdepends-tree"

link

Executar

# sudo apt-get install apt-rdepends
# save gist, above, as "apt-rdepends-tree"
# chmod +x apt-rdepends-tree
# ./apt-rdepends-tree gcc

A saída é assim:

# ./apt-rdepends-tree gcc
├─ gcc
│    ├─ cpp (>= 4:4.7.2-1)
│    └─ gcc-4.7 (>= 4.7.2-1)
└─ package-a
     ├─ package-b
     └─ package-c
    
por 12.08.2013 / 22:34