Szórakoztam a minapában a csomagkezelővel, ugyanis nem akartam elhinni, hogy az Ubuntu standard, csak parancssoros telepítőjének 588Mb-ot kéne foglalnia. Szent meggyőződésem, hogy a sok függőség ennek az oka, amelyet az Ubuntu fejlesztői sem tudnak már nagyon átlátni. Nem is csodálnám: A Debian több, mint tíz éve kezdte el kialakítani a rendszert, az Ubi erre épül, több tízezer csomag van és az ezek közötti függőségeket jobb nem bolygatni.
Mi is a problémám? Tegyük fel, hogy egy alkalmazásnak (nevezzük A-nak) szüksége van egy bizonyos funkcionalitás megvalósításához egy másik csomagra (nevezzük B-nek). A "B" csomag megvalósítja önmaga mindazt, amire "A"-nak szüksége van; de még egyéb dolgokra is képes, amelyekhez szüksége van "C" csomagra. Azokat a funkciókat "A" nem használja, ami miatt "B"-nek szüksége van "C"-re, de mégis, a függőségi fa miatt fel kell rakni "C" csomagot is, amely lényegében parlagon hever (illetve mondjuk úgy, arra vár hogy a felhasználó feltegye "D"-t, amely már közvetlenül használja). Eljutottunk oda, hogy nagy valószínűséggel rengeteg felesleges csomag pihenget a gépünkön. A következtetés hatására az időmet leginkább "E"-ben szeretném eltölteni, mely nem más, mint mindegyik csomagtól legtávolabb eső kiskocsma.
Megjegyzés: Emiatt frankó például a Gentoo, amelynél lehet olyan globális fordítási direktívát alkalmazni, hogy "no gnome"; ilyenkor a csomagok konfigurálásánál és fordításánál körömszakadtáig küzd a rendszer, hogy a felhasználónak ne kelljen Gnome-ot használnia.
A lényeg, hogy azon gondolkodtam, kéne egy programot írni, ami szépen gráfot rajzol a csomagok függőségeiből. Milyen szerencse, hogy erre a Debian/Ubuntu rendszer alapból is alkalmas! :-)
Először is le kell szednünk a graphviz csomagot, amely képes a .dot szöveges gráf leíró fájlból SVG, PostScript, JPG vagy PNG formtumot előállítani:
$ sudo apt-get install graphviz
vagy természetesen a csomagkezelőből is el lehet végezni a telepítést. Ezek után (továbbra is parancssorban):
$ apt-cache dotty <csomagnév>
Ez közvetlenül kiírja nekünk a pötty (dot) formátumú fájl tartalmát, ezért inkább irányítsuk ezt bele egy fájlba (például ha a bash függőségeit szeretnénk megnézni):
$ apt-cache dotty bash > bash.dot
majd az elkészült pötty fájlt a graphviz dot parancsával átalakíthatjuk a kívánt formátumba (ajánlom az SVG-t, mivel a döbbenetes mennyiséfű függőség miatt a pixel-alapú képekből nem sokat látni):
$ dot -o bash.svg -T svg bash.dot
És máris előállt a csodás grafikus ábrázolásunk! Sajnos SVG-t nem tudok feltölteni, de itt egy részlet a gtk+2 függőségeiből. És kezdem megérteni, hogy mitől 588 Mb az az 588 Mb: