[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

if you want to see Debian (no one have seen it before! ;-)



Hi,

I'm not inscribed to debian-user, so if you want I read your replies then CC me Also, very few of you (no more then 10 of the 2-3 people that will read this eamil) will note that I'm not a very good English writer.

I have seen that Tulip is reentered the Debian repository :-) and I made an exercise.

I used Tulip to visualize Debian packages and their dependencies.
For the impatient you can see the result here (but if you want to install Tulip, make your test or you want to understand more, then continue to read):
https://img.tedomum.net/data/Tulip1-a4ae06.png
https://img.tedomum.net/data/Tulip2-310791.png
https://img.tedomum.net/data/Tulip3-301ad3.png
https://img.tedomum.net/data/Tulip4-1126f4.png
https://img.tedomum.net/data/Tulip5-8a7fcc.png
https://img.tedomum.net/data/Tulip6-e5392f.png

Tulip is now in Debian testing (Bullseye) and unstable (Sid).

If you want to install and use Tulip you must also solve 3 bugs (I have already reported they):
After having installed Tulip
# apt install tulip

you must do the following three steps to correct 3 bugs:

1) wrong font symbolic link
as you can see here:
$ ls -l /usr/share/tulip/bitmaps/font.ttf

for correct the problem:
# rm /usr/share/tulip/bitmaps/font.ttf
# ln -s /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf /usr/share/tulip/bitmaps/font.ttf

2) wrong font symbolic link
as you can see here:
$ ls -l /usr/share/tulip/bitmaps/fontb.ttf

for correct the problem:
# rm /usr/share/tulip/bitmaps/fontb.ttf
# ln -s /usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf /usr/share/tulip/bitmaps/fontb.ttf

3) missing dependency (if you run tulip from xterm you will get some error messages)
# apt install python3-sip

After that you must create nodes (packages) and edges (dependency).

You can download my files in ZIP format: https://catdrop.drycat.fr/r/6wJ12zKJ#CUItP72icXMRZiPPKx7B/R0rvKOlwQlJyqzvJooUjZE=
Note that they will be deleted after 30 days.

Or generate they with one small script

--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--
#!/bin/bash

PackageFile="/var/lib/apt/lists/deb.debian.org_debian_dists_testing_main_binary-amd64_Packages"
FileTmp="FileTemporaneo.txt"
Pacchetti="Pacchetti.txt"
PacchettiDipendenze="PacchettiDipendenze.txt"

grep "^Package: \|^Depends: " "$PackageFile" | sed "s/^Package: \(.*\)/\1__/;s/^Depends: //;s/ |/,/g;s/ ([^(]*)//g;s/:[^,]*,/,/g;s/:[^,]*$//g" > $FileTmp #head -50 "$PackageFile" | grep "^Package: \|^Depends: " | sed "s/^Package: \(.*\)/\1__/;s/^Depends: //;s/ |/,/g;s/ ([^(]*)//g;s/:[^,]*,/,/g" > $FileTmp # | sed -e ':x /__$/ {N;s/__\n__/; /g ; bx}' | sed "s/__//;s/, /,/g" > $FileTmp

Prefisso=""
:>$Pacchetti
:>$PacchettiDipendenze
for i in $(cat $FileTmp); do
#echo "Leggo: <$i>"
 if [[ "$i" =~ __$ ]]; then
   Prefisso=$(echo "$i" | sed "s/__//")
   echo "$Prefisso" >> $Pacchetti
  else
   echo "$Prefisso,$i" | sed "s/,$//" >> $PacchettiDipendenze
 fi
done

sort $PacchettiDipendenze | uniq > $FileTmp
mv $FileTmp $PacchettiDipendenze
--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--

This script take the main Debian repository from a testing machine that use deb.debian.org as repository, if you use Sid or a different repository, then you must modify the content of the $PackageFile variable.

This script generate two file:
1) Pacchetti.txt <- the nodes
2) PacchettiDipendenze.txt <- the edges

The script is very slow.
I have try to generate rows of this type:
pacchettoN;dipendenza1N,dipendenza2N[,...]
and then break they into the following:
pacchettoN,dipendenza1N
pacchettoN,dipendenza2N
[...]
But I was unable to find a quick solution with sed or other command, so I have create the loop that is very slow.

Now you can start Tulip.

You can import first the nodes (Pacchetti.txt) and then the edges (PacchettiDipendenze.txt)... or you can import only the edges (PacchettiDipendenze.txt) and tell Tulip to create the missing nodes (during import), in this manner you don't import nodes without edges and so you have less elements and the program is faster. If you do this you can copy the nodes name from the viewLabel column.

After of the you will have two view:
* nodes/edges table view
* graph view

Here is the graph view:
https://img.tedomum.net/data/Tulip1-a4ae06.png

Some package in the top and lower right have few dependencies and the most of the package are at bottom left.
From this graph you cannot get a lot of information.
Note that each red dot represent a Debian package and packages name are visualized only when there is enough space.

Using the left panel we can get a graph with more information.
For example if you execute the algorithm: Bubble Tree you get the following graph:
https://img.tedomum.net/data/Tulip2-310791.png

from the graph view I have hide the edges, elsewhere I will see a gray background and the program will be slower.

Here you can see that Debian in libc6 dependent.
In the top you can see that there are other packages with strong dependencies and if you enlarge this part you can see this:
https://img.tedomum.net/data/Tulip3-301ad3.png

You can see two big spheres with Perl and Python and other smaller spheres.
Also in the libc6 perimeter there are a lot of small spheres, and with a zoom we can see, for example:
r-base-core:
https://img.tedomum.net/data/Tulip4-1126f4.png

node.js:
https://img.tedomum.net/data/Tulip5-8a7fcc.png

You can use also other possible graph visualizations, you can test your own, but if you use all the nodes/edges most are not very readable.
For example you can use Bubble Pack to get this graph:
https://img.tedomum.net/data/Tulip6-e5392f.png

Note that the main block have the Debian spiral form :-)

Note that the high number of edges/nodes can cause slow down or block you computer with some algorithms (I have a very old PC with few RAM and I notice that a lot).

You can also make more complex analysis fetch other data, for example: DD names, DD nationality; upstream source (es: sourceforge, github, ...); package tags; package dimension, ...

I don't know very well or nothing of the algorithm used to get this graphs, if someone of you are expert in this can extract very useful information with Tulip :-)

Ciao
Davide


Reply to: