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

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: