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:
… 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
--- ...
...
Best Answer
You can do it with bash script
Source code: "apt-rdepends-tree"
https://gist.github.com/damphat/6214499
Run
Output look like this: