Ho installato prelink ieri e devo dire che va piuttosto bene. Le applicazioni sembrano effettivamente più reattive all' avvio .
Ecco una guida :
Guida al Prelinking su debian
Prelink è una applicazione che permette di modificare i binari dei nostri applicativi in modo da farli caricare + veloce. Quello che fa in sostanza è indicare all' interno del binario l'indirizzo virtuale della libreria dinamica da caricare senza la necessità di andarlo a pescare ogni volta che l'applicazione deve essere caricata. Oggi giorno le applicazioni + complesse possono essere linkate anche a più di 90 librerie dinamiche contemporaneamente (quelle che sotto windows sono chiamate DLL) e specialmentente i programmi C++ risentono di lentezza a caricare il codice dai files di queste librerie. Con prelink è possibile ridurre effettivamente il tempo di caricamento delle applicazioni (ovviamente ciò si fa più sentire sui computers un po' datati).
Come fare
per installare "prelink" sul proprio sistema bisogna usare apt :
Codice:
apt-get install prelink
dopo l'installazione di prelink dobbiamo configurare il file /etc/ld.so.conf per aggiungere alcuni path a librerie che sono necessarie al prelinking di certi binari , come ad esempio firefox, openoffice, nvu.
Generalmente aprendo questo file l'unica occorrenza è il path :
Noi ora modificheremo il file per farlo diventare :
Codice:
/usr/X11R6/lib
/usr/lib/mozilla-firefox
/usr/lib/openoffice
/usr/lib/openoffice/program
/usr/lib/Adobe/Acrobat7.0/Reader/intellinux/lib
/usr/lib/nvu
Questo dobbiamo farlo perchè alcune applicazioni usano delle librerie che installano loro in path non standard (non /usr/lib) e risulta quindi necessario informare "prelink" di questi path non standard. La maggiorparte delle applicazioni comunque non ha necessità di impostazioni di path specifiche, ma certe le necessitano , o altrimenti durante il prelink ci troveremo difronte a questi errori :
Codice:
/usr/sbin/prelink: /usr/bin/devhelp-bin: Could not find one of the
dependencies
Nel file ld.so.conf ho messo i path alle applicazioni che io possiedo, se voi non possedete o usate qualcuna di queste applicazioni non includete la linea nel file ld.so.conf. A questo punto lanciate "ldconfig" per aggiornare il path delle librerie.
Dopo aver editato si può procedere a lanciare il progamma di prelinking.
Prima di lanciare il comando "prelink" assicuratevi di avere un po' di megabytes liberi sul disco dove tenete gli eseguibili , prelink durante il suo lavoro usa un po' di spazio su disco e tiene anche una cache in modo che, in caso si voglia far tornare tutto allo stato originale , sia possibile togliere il prelink agli eseguibili.
In caso lo spazio su disco si saturasse mentre prelink sta lavorando il risultato sarebbe abbastanza disastroso, perchè gli eseguibili su cui stava lavorando in quel momento rimarrebbero troncati . Per lo stesso motivo se fossi in voi eviterei di interrompere prelink durante il suo lavoro. Personalmente non ho mai provato a terminarlo mentre lavorava , ma io se fossi in voi non rischierei.
Prelink impiega un po' di minuti a seconda della quantità di eseguibili installati sul sistema e la velocità del computer in uso per completare la sua operazione. Durante il suo lavoro vedrete , con molta probabilità , messaggi di errore relativi alla libreria "libGL.so.1" e al fatto che non è stata compilata con -fPIC (questo succede in caso avete installato i drivers NVIDIA) . Ignorate questi errori, ma sappiate che purtroppo gli eseguibili sui quali avete avuto quegli errori non saranno prelinkati. Potreste trovare altri errori relativi a certe dipendenze non trovate . Anche in questo caso i files con gli errori non saranno prelinkati. Questo errore però può essere aggirabile includendo in ld.so.conf il path relativo alle librerie mancanti . Per controllare le librerie di un programma usate il programma "ldd". Ad esempio per trovare le librerie mancanti per "firefox-bin" lanciate :
Codice:
ldd /usr/lib/mozilla-firefox/firefox-bin
e vedrete tutte le librerie da cui firefox dipende. Per certe applicazioni , soprattutto quelle closed, questo truccetto può non funzionare e potrebbero generare altri errori non risolvibili. In tal caso ignorateli.
A questo punto andiamo a lanciare prelink da root con il comando :
Con questo comando "prelink" provvederà a prelinkare tutti gli eseguibili nei path di esecuzione che incontra. In specifico le opzioni significano :
Codice:
-a --all
Prelink all binaries and dependant libraries found in directory
hierarchies specified in /etc/prelink.conf. Normally only bina-
ries specified from command line and their dependant libraries
are prelinked.
-m --conserve-memory
When assigning addresses to libraries, allow overlap of address
space slots provided that the two libraries are not present
together in any of the binaries or libraries. This results in
smaller virtual address space range used for libraries, on the
other side if during incremental prelinking prelink sees a
binary which puts together two libraries which were not present
together in any other binary and were given the same virtual
address space slots, then the binary cannot be prelinked. Nor-
mally each library is assigned a unique virtual address space
-R --random
When assigning addresses to libraries, start with random address
within architecture dependant virtual address space range. This
can make some buffer overflow attacks slightly harder to
exploit, because libraries are not present on the same addresses
accross different machines. Normally, assigning virtual
addresses starts at the bottom of architecture dependant range.
-v --verbose
Verbose mode. Print the virtual address slot assignment to
libraries and print what binary or library is currently being
prelinked.
Se volete potete guardare nelle manpage per ulteriori opzioni.
Lasciate lavorare in pace prelink per i minuti necessari all' operazione.
Quando ha finito riavviate il computer.
In caso aggiornaste certi eseguibili nel computer potete eseguire il prelink dei nuovi eseguibili lanciando lo stesso comando indicato sopra. Prelink è in grado di individuare i nuovi files che non sono prelinkati ed eseguire l'operazione solo su quelli senza dover eseguire di nuovo tutta l'operazione anche sugli altri files. Fatelo perciò dopo aver fatto un "apt-get dist-upgrade".
In caso voleste tornare allo stato originale potete togliere il prelink dai files eseguibili usando il comando:
Buon prelinking a tutti
Ciao