[Mini-Como] Debian y Prelink.
¡Precaución!
El uso de prelink puede desestabilizar el sistema. Ha de usarse con extremo cuidado. No me hago responsable de cualesquiera efectos provocados por seguir éste manual.
¿Qué es prelink?:
Prelink es un programa que se encarga de agilizar la carga dinámica de librerías. A grosso modo rellena las tablas de
símbolos intermedias del binario deduciendo las direcciones de memoria donde supuestamente van a estar los mismos, lo que redunda en una mayor velocidad de carga de las aplicaciones ya que cada vez que necesitemos un símbolo de una librería dinámica no tendremos que hacer una carga de la misma, gracias a prelink ya sabremos donde va estar.
Si quieres saber más sobre prelink, visita el artículo Prelink en la wikipedia.
¿Qué necesito para usar prelink?:
Lo primero es tener un ordenador con una de las siguientes arquitecturas, alpha, amd64, i386 o powerpc. Después, instalar prelink usando el gestor de paquetes de Debian, apt :
root@Hellas:~$ apt-get install prelink
Como paso siguiente es recomendable que leas el manual de prelink para familiarizarte con su sintaxis y su funcionamiento :
tritt@Hellas:~$ info prelink
tritt@Hellas:~$ man prelink
¿Cómo puedo usar prelink?:
Puesto que el manual está ahí, me voy a centrar en lo que nos interesa, optimizar el sistema al completo al máximo.
Las opciones en que fijaremos nuestra atención son:
- -a : Aplica prelink a todos los binarios siguiendo el fichero de configuración prelink.conf.
- -m : Permite un ahorro de memoria.
- -R : Asigna direcciones aleatorias.
Antes de nada es buena idea revisar el fichero /etc/prelink.conf para borrar y/o añadir rutas a la configuración.
Una vez confirmado que prelink no va a romper ningún binario en su búsqueda, deberemos ejecutar:
root@Hellas#~$ prelink -amR
y esperar hasta que termine la ejecución.
Durante la ejecución veremos mensajes de error que nos indicarán que algunas librerías no pueden ser pre-enlazadas. El motivo es que para ser preenlazada, una librería, necesita estar compilada con el flag -fPIC activo y muchas no lo tienen debido a problemas de estabilidad o sencillamente por falta de mantenimiento del paquete.
Debian y prelink:
Prelink en Debian se ejecuta, por omisión, bajo cron, concretamente en cron.daily.
Su configuración se lleva desde el fichero /etc/default/prelink y es importante que lo adecuemos a nuestras necesidades.
Como vemos, el soporte que da Debian a prelink deja mucho que desear. Si instalamos un paquete, éste no se preenlazará hasta que salte el
evento del cron. Algo que sí hace Gentoo automágicamente.
Éste problema se puede solventar con una pequeña modificación al comportamiento de apt.
Simplemente modificando (o creandolo si no existía previamente) el fichero /etc/apt/apt.conf como superusuario:
root@Hellas#~$ nano /etc/apt/apt.conf
Ahora añadimos al fichero lo siguiente:
DPkg::Post-Invoke {"echo Ejecutando prelink, espere...;/etc/cron.daily/prelink";}
Con esto, cada vez que se instale un paquete, todos sus binarios serán pre-enlazados.
Atención:
- Usa prelink con cautela. Es una herramienta peligrosa ya que modifica los binarios y podría dejar inestable un sistema.
- Modifica el fichero de configuración /etc/prelink.conf y elimina rutas en las que haya binarios que no quieras preenlazar.
- Si tras un pre-enlazado algunos binarios dejan de funcionar, prueba a des-pre-enlazarlos usando prelink -u .
