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

19

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

Recentemente, eu encontrei isso:

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

Seria bom quando o aptitude usasse caracteres unicode para as árvores nas listas de dependências, por exemplo, em vez de:

--\ 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 em árvore da arte ASCII, não sabia que aptitudepoderia fazer isso! Então, começo a mexer por uma hora com aptitudeopções de linha de comando - e simplesmente não consigo obter essa saída? Então, minha pergunta inicial foi: de onde vem essa saída?

Depois de um tempo, percebi que no meu sistema, aptitudefinalmente , os links para /usr/bin/aptitude-curses; e finalmente percebi que aptitudetem uma cursesinterface!:/

Então, eu finalmente corro aptitudesem argumentos - e então a cursesinterface é iniciada, e posso ver algo assim:

aptitude-maldições-terminal

... então, obviamente, esses caracteres de árvore ASCII vêm da interface de maldições.

Então, eu estava pensando - existe uma ferramenta Debian / apt que produzirá uma árvore ASCII "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 dependências de um pacote? - Pergunte ao 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ó] debtree, gerados por graphviz's dot).

Eu também vi. Existe algo que mostre 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 necessário; e depois as dependências dos pacotes de dependência de primeiro nível e assim por diante - mas não são visualizadas como uma árvore (e, na verdade, aptitudea cursesinterface do simplesmente mostra as informações instaladas quando você expande o nó de dependência; não se expande para outras dependências).

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

$ 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
        --- ...
...
sdaau
fonte

Respostas:

23

Você pode fazer isso com o script bash

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

https://gist.github.com/damphat/6214499

Corre

# 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 fica 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
damphat
fonte