prima parte
codice:
Autore :
Pierluigi Previtali
Argomento:
Le interdipendenze tra i pacchetti della mia distro
preferita... la Slackware.
Stato:
0.1b delirio incompleto in beta stage
Lamentele:
slack@ERASETHISslack.z00.it
pierluigi.previtali@ERASETHIStiscali.it
Scopo del gioco e' creare una lista in stile "MANIFEST" delle
interdipendenze tra i pacchetti, cioe' sapere da quali pacchetti
dipende un dato pacchetto, argomento affrontato da vari tools di
aggiornamento automatico come swaret e altri in maniera oscura.
Usando io sul mio portatile una current, e utilizzando per tenerla
aggiornata un mio script (sul mio sito) che mi mirrora in locale la
current e mi avvisa se ci sono pacchetti da upgradare ecc. ecc. (
non sto' qui' a parlarne, dovrebbe esserci pure un mio post qui e
comunque come detto e' scaricabile dal mio sito) e utilizzando un
altro mio script (sempre disponibile e postato pure qui') che gia'
e' in grado di controllare le dipendenze e suggerire pacchetti
mancanti, mi mancava un file da consultare per avere un riferimento
veloce su cosa dipendesse da cosa in una release completa della
slackware. Per chi non avesse mai curiosato, preso per riferimento
un punto di mount standard del cdrom come /mnt/cdrom, nella
sotto-directory /mnt/cdrom/slackware e' presente un file chiamato
MANIFEST.bz2 che non e' altro che un file compresso che contiene la
lista di tutti i file presenti nella sotto-directory
/mnt/cdrom/slackware e chiaramente quindi la lista dei pacchetti e
del loro contenuto. Per chi non si fosse mai posta la domanda poi
possiamo aggiungere che al 99% dei casi il problema delle dipendenze
tra i pacchetti riguarda la presenza in altri pacchetti di librerie
dinamiche necessarie al programma che installiamo (quelle che nel
mondo windows sono .dll o altre estensioni di libreria), il comando
che ci permette di conoscere, dato un eseguibile, le librerie dalle
quali dipende (a meno che sia staticamente compilato cioe' include
tutte le funzioni che gli necessitano da altre librerie gia' al suo
interno, spesso a scapito delle dimensioni e della memoria occupata
in esecuzione ...detta alla grezza), e' il comando ldd.
ldd /percorso/del/file/eseguibile ci restituisce una lista delle
librerie collegate, a questo punto si potrebbe pensare di guardare
nel MANIFEST in quali pacchetti sono le eventuali librerie non
trovate. Non e' purtroppo cosi' semplice dato che spesso, quasi
sempre le librerie a cui fa' riferimento l'eseguibile sono dei
collegamenti (link) alle librerie originali, per esempio se
consideriamo il comando:
ls -l /lib/libc.so.6
ci dira' che in realta' al momento dell'installazione e' stato
creato un link di nome libc.so.6 che in realta' punta
a libc-2.3.3.so*
lrwxrwxrwx 1 root root 13 2004-10-18 16:23 /lib/libc.so.6 ->
libc-2.3.3.so*
Nel MANIFEST chiaramente sara' presente solo il file puntato che fa'
parte effettivamente di un pacchetto... e il link dove esce?
I pacchetti standard slackware al loro interno hanno sempre una
cartella /install al cui interno ci sono due file, uno che contiene
la descrizione del pacchetto e uno il file /install/doinst.sh che
contiene i comandi che eseguira' installpkg dopo aver scompresso il
pacchetto slackware che a parte i succitati files non e' altro che
un tgz cioe' un tar.gz, in questo file ci sono i comandi che creano
i link e la libreria cercata potrebbe essere (quasi sempre) uno di
questi link...a questo punto abbiamo bisogno di un altra lista da
consultare oltre il MANIFEST.bz2 che contenga tutti i nomi dei link
creati e quali pacchetti li contengano, sara' la seconda cosa che
faremo dopo aver scompresso per comodita' il file MANIFEST.bz2 sotto
/tmp , per ottenerlo dobbiamo utilizzare uno script che e'
volutamente grezzo e con pochi controlli sull'utente, dato che e'
stato realizzato in un pomeriggio di bash-fu , va' rifinito e
completato ma per adesso funge e lo possiamo usare, andremo a
ottenere cosi' un file MANIFESTLINK che consulteremo insieme al
MANIFEST per scoprire le varie dipendenze tra i pacchetti, la
ricerca sara' svolta da un'altro script che generera' finalmente il
file MANIFESTDEP che conterra' la lista dei pacchetti presenti sulla
distro e i pacchetti necessari al corretto funzionamento dei
primi... ho parlato pure troppo si capisce meglio se procediamo
praticamente... osokaaaaaaaaaa budaaaaaaaaa sooo (invocazione di
bash-fu) assumiamo la posizione del loto fumato...si parte...
segue.....