Salida visual (ASCII) ¿Árbol de dependencia de Debian a terminal?


19

No estoy seguro de si se trata más de una pregunta de SuperUser o UnixLinux, pero intentaré aquí ...

Recientemente, encontré esto:

# 710689 - aptitud: usar caracteres unicode en los árboles - registros de informes de errores de Debian

Sería bueno cuando aptitude usaría caracteres unicode para los árboles en las listas de dependencias, por ejemplo, en lugar de:

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

...

... y pensé: wow, me gusta mucho la salida del árbol de arte ASCII, ¡no sabía que aptitudepodía hacer eso! Entonces, empiezo a jugar durante una hora con los aptitudeinterruptores de línea de comandos, ¿y simplemente no puedo obtener esa salida? Entonces mi pregunta inicial fue: ¿de dónde proviene esa salida en primer lugar?

Después de un tiempo, me di cuenta de que en mi sistema, aptitudefinalmente , los enlaces simbólicos a /usr/bin/aptitude-curses; y finalmente me di cuenta de que aptitudetiene una cursesinterfaz!:/

Entonces, finalmente ejecuto aptitudesin ningún argumento, y así se cursesinicia la interfaz, y puedo ver algo como esto:

aptitude-curses-terminal

... así que obviamente, esos caracteres de árbol ASCII provienen de la interfaz de maldiciones.

Así que me preguntaba: ¿existe una herramienta Debian / apt que genere un árbol ASCII tan "visual", pero con dependencias reales de paquetes?

Sé sobre deudas - Gráficos de dependencia de paquetes (también recomendación de software - ¿Cómo mostrar visualmente las dependencias de un paquete? - Pregúntele a Ubuntu ); pero prefiero tener algo en la terminal, parecido a un árbol de directorios (en lugar de los gráficos "desordenados" [en términos de posición del nodo] debtreegenerados por graphviz's dot).

También he visto ¿Hay algo que muestre dependencias visualmente, como un árbol? , que recomienda:

$ 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)
...

... lo cual es bueno, porque enumera primero las dependencias inmediatas del paquete requerido; y luego las dependencias de los paquetes de dependencias de primer nivel, y así sucesivamente, pero no se visualiza como un árbol (y en realidad, aptitudela cursesinterfaz simplemente muestra la información instalada cuando expande el nodo de dependencia; no se expande a otras dependencias).

Entonces, la pregunta es si existe una herramienta que produzca un gráfico de árbol de dependencia con caracteres terminales, como, por ejemplo, en el siguiente 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
        --- ...
...

Respuestas:


23

Puedes hacerlo con bash script

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

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

correr

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

La salida se ve así:

# ./apt-rdepends-tree gcc
├─ gcc
│    ├─ cpp (>= 4:4.7.2-1)
│    └─ gcc-4.7 (>= 4.7.2-1)
└─ package-a
     ├─ package-b
     └─ package-c
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.