Per chi vuole vedere Debian (perché nessuno l'ha mai vista finora! ;-)
Ciao,
ho visto che hanno rimesso il programma Tulip in Debain e ho fatto un
esperimento :-)
Vi mostro come è possibile creare una visualizzazione di una componente
fondamentele di Debian: i suoi pacchetti e le dipendenze tra pacchetti.
Per fare questo uso Tulip e spiego come ottenere i risultati che possono
essere visti nei file immagine on-line indicati.
Per chi non vuole installare Tulip può saltare le spiegazioni su come
ottenere una propria visualizzazione e leggere di seguito il significato
di ciò che è mostrato e vedere le 6 immagini indicate.
Tulip è presente in Debian testing (Bullseye) e ustable (Sid), è stato
rimesso da poco.
Dopo aver installato Tulip, bisogna sistemare 3 bug, che ho già segnalato:
1) incorretto link al font
come si può vedere il seguente link è rotto (non punta a nulla)
$ ls -l /usr/share/tulip/bitmaps/font.ttf
per correggerlo:
# rm /usr/share/tulip/bitmaps/font.ttf
# ln -s /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf
/usr/share/tulip/bitmaps/font.ttf
2) incorretto link al font
idem come sopra
$ ls -l /usr/share/tulip/bitmaps/fontb.ttf
per correggerlo:
# rm /usr/share/tulip/bitmaps/fontb.ttf
# ln -s /usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf
/usr/share/tulip/bitmaps/fontb.ttf
3) dipendenza mancante
Manca la dipendenza a python3-sip: vengono segnalati degli errori quando
si avvia Tulip da riga di comando.
Per risolvere il problema basta installarlo
# apt install python3-sip
I primi due bug non permettono di vedere delle scritte (es: i nomi dei
nodi sui grafi), mentre il terzo dovrebbe dare problemi con l'esecuzione
di alcuni algoritmi.
Bisogna crearsi i nodi (pacchetti) e i vertici (dipendenze).
Per chi non vuole crearsi i file di testo può scaricarli da qui in
formato .zip:
https://catdrop.drycat.fr/r/6wJ12zKJ#CUItP72icXMRZiPPKx7B/R0rvKOlwQlJyqzvJooUjZE=
Notare però che i file qui caricati saranno cancellati a breve fra 30
giorni (se saltate la scadenza potete richiedermeli).
Per fare questo ho fatto questo piccolo 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<--
Lo script prende l'elenco dei pacchetti del repository ufficiale Debian
main creato con "apt update" di testing, se si usa Sid o un diverso
repository bisogna modificare il contenuto della variabile $PackageFile.
Lo script ha come output due file:
1) Pacchetti.txt, che contiene i pacchetti presenti in main. Questi
saranno i nodi
2) PacchettiDipendenze.txt, che contiene le dipendenze che hanno i
pacchetti presenti in main. Questi saranno i vertici
Lo script è molto lento.
Ho cercato di crearmi un file contenente:
pacchettoN;dipendenza1N,dipendenza2N[,...]
Però poi non sono riuscito a spezzare con sed o altro queste righe in:
pacchettoN,dipendenza1N
pacchettoN,dipendenza2N
E quindi ho fatto il loop che vedete sotto, che però risulta davvero lento
A questo punto si può far partire Tulip.
Si possono importare i nodi (Pacchetti.txt) e i vertici
(PacchettiDipendenze.txt), importandoli come file CSV.
In realtà si può "barare", importando soltanto i vertici, dicendogli di
creare i nodi mancanti e copiando i nomi dei nodi così creati dalla
colonna viewLabel nella vista dei nodi (click sulla colonna viewLabel ->
Copia, selezionare dal combo il campo con il nome dei nodi). Questo
permette di non importare i nodi singoli (che non hanno dipendenze),
alleggerendo così l'esecuzione di Tulip.
Dopo l'importazione vengono create due viste:
* la forma tabellare nodi/vertici
* la vista del grafo
Si può vedere Debian Bullseye dalla vista del grafo, ecco qui l'immagine:
https://img.tedomum.net/data/Tulip1-a4ae06.png
Come si può vedere ci sono pacchetti in alto e a destra che hanno poche
dipendenze (probabilmente per alcuni è sbagliato che non ne abbiano di
ulteriori), mentre nella parte in basso a sinistra si vede un groviglio
di tutti i pacchetti che sono fortemente dipendenti tra di loro, le
spunte che escono sono di quei pacchetti con meno dipendenze.
I nomi dei nodi sono visualizzati quando c'è abbastanza spazio, per
farli apparire bisogna fare uno zoom sull'area interessata.
Però questa vista non permette di avere molte informazioni.
È possibile ricavare informazioni interessante giocando con il pannello
presente a Sinistra.
Per esempio se si esegue l'algorigmo: Bubble Tree (premendo sulla
freccia blu) viene creato il seguente grafo:
https://img.tedomum.net/data/Tulip2-310791.png
dal grafo ho rimosso la visualizzazione dei vertici (usando il menu a
comparsa presente a destra: Layer -> graph -> Edges), altrimenti ho lo
sfondo grigio (ci sono troppi vertici) e il sistema rallenta parecchio.
Come si può vedere Debian Testing è libc6 centrica.
In alto a destra vediamo che ci sono delle altre sfere di pacchetti con
una forte dipendenza, se ingrandiamo possiamo vedere meglio:
https://img.tedomum.net/data/Tulip3-301ad3.png
Come si vede ci sono 2 grosse sfere, una per Perl e l'altra per Python,
poi ci sono sfere più piccole.
Anche intorno al perimetro di libc6 sono presenti altre sfere più
piccole e possono essere visualizzate con lo zoom, ad esempio questa che
permette di vedere le dipendenze di r-base-core:
https://img.tedomum.net/data/Tulip4-1126f4.png
o di node.js:
https://img.tedomum.net/data/Tulip5-8a7fcc.png
Notare che ogni puntino rosso, in alcuni punti sembra una linea, è un
applicativo e come detto sopra i nomi sono visualizzati soltanto quando
c'è abbastanza spazio, quindi per vederli occorre usare lo zoom. Se il
numero dei pacchetti non è troppo elevato si possono usare gli strumenti
per trovare una posizione ottimale che permetta la visualizzazione dei
nomi senza dover ingrandire ulteriormente.
Sono possibili anche altri tipi di visualizzazione, solo che in questo
caso sono presenti talmente tanti nodi e talmente tanti vertici che
risulta, in totale, poco "leggibile".
Ad esempio se si usa Bubble Pack si ottiene questo risultato:
https://img.tedomum.net/data/Tulip6-e5392f.png
Da cui si può vedere in alto a destra che il blocco più importante è
fatto a spirale di Debian :-)
Stare attenti che l'alto numero di elementi potrebbe rendere
l'esecuzione di alcuni algoritmi lunghissima (a seconda anche del PC, io
ne ho uno vecchio con poca RAM) fino a bloccarvi il PC.
Poi è possibile fare anche analisi più complesse o con diversi dati, nel
primo caso caricando tutto nello stesso progetto Tulip, nell'altro
creando più progetti Tulip differenti. Ad esempio mettendo i nomi dei DD
e/o la loro nazionalità; la fonte upstrem (es: sourceforte, github,
...); i tag o parte di questi; la dimensione; ...
Ho iniziato ad usare Tulip circa 2 anni fa perché nell'azienda in cui
lavoro mi era stato chiesto di individuare gli applicativi o piccoli
gruppi di applicativi che non avevano interazioni con null'altro o che
avessero pochissime interazioni. In tale azienda gestiamo/sviluppiamo
circa 1.000 applicativi e gestiamo un catalogo, più o meno aggiornato,
da qui estrarre i dati di partenza.
Ho pensato subito a Tulip e nel giro di un'oretta (ho dovuto anche
prendere Tulip upstream perché in Debian vi era solo una vecchia
versione) sono riuscito ad avere le risposte richieste e fornire anche
una visualizzazione grafica che è stata molto apprezzata (in realtà
quasi tutti gli applicativi che gestiamo sono fortemente collegati tra
loro e quindi le risposte evano molto limitate). Poi Tulip è stato usato
anche per far vedere quali sono gli applicativi centrali o per
visualizzare un applicativo con tutto ciò con cui interagisce.
Questo per dire che non conosco molto di quello che ci sta dietro
all'uso di Tulip (le teorie su cui si basano gli algoritmi) e quindi se
c'è qualcuno qui esperto, in questo settore, potrebbe, grazie a Tulip,
estrarre dei risultati molto interessanti :-)
Ciao
Davide
--
Dizionari: http://linguistico.sourceforge.net/wiki
I didn't use Microsoft machines when I was in my operational phase,
because I couldn't trust them.
Not because I knew that there was a particular back door or anything
like that, but because I couldn't be sure.
Edward Snowden
Reply to: