Output visual (ASCII) Debian dependency tree to terminal?

13,473

You can do it with bash script

Source code: "apt-rdepends-tree"

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

Run

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

Output look like this:

# ./apt-rdepends-tree gcc
├─ gcc
│    ├─ cpp (>= 4:4.7.2-1)
│    └─ gcc-4.7 (>= 4.7.2-1)
└─ package-a
     ├─ package-b
     └─ package-c
Share:
13,473

Related videos on Youtube

sdaau
Author by

sdaau

Updated on September 18, 2022

Comments

  • sdaau
    sdaau over 1 year

    I'm not sure if this is more of a SuperUser or UnixLinux question, but I'll try here...

    Recently, I found this:

    #710689 - aptitude: use unicode character in the trees - Debian Bug report logs

    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
    

    ...

    ... and I thought - wow, I really like that ASCII-art tree output, wasn't aware that aptitude could do that! So, I start messing for an hour with aptitude command line switches - and I simply cannot get that output? So my initial question was - where does that output come from in the first place?!

    After a while, I realized that on my system, aptitude ultimately symlinks to /usr/bin/aptitude-curses; and I finally realized that aptitude has a curses interface! :/

    So, I finally run aptitude without any arguments - and so the curses interface starts, and I can see something like this:

    aptitude-curses-terminal

    ... so quite obviously, those ASCII tree characters come from the curses interface.

    So I was wondering - is there a Debian/apt tool, which will output such a "visual" ASCII tree - but with actual dependencies of packages?

    I know about debtree - Package dependency graphs (also software recommendation - How to visually display dependencies of a package? - Ask Ubuntu); but I'd rather have something in terminal, resembling a directory tree (rather than the "unordered" [in terms of node position] graphs from debtree, generated by graphviz's dot).

    I've also seen Is there anything that will show dependencies visually, like a tree?, which recommends:

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

    ... which is good, because it lists first the immediate dependencies of the required package; and then the dependencies of the first-level dependency packages, and so on - but it's not visualized as a tree (and actually, aptitude's curses interface simply shows installed info when you expand dependency node; it does not expand to further dependencies).

    So, the question is - is there a tool, that would produce a dependency tree graph with terminal characters - like, say, in the following pseudocode:

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