Así, imaginémonos que tenemos un binario que depende de la librería QtCore, una vez hayamos ejecutado prelink sobre el mismo, buscara primero en el espacio designado por prelink, y en el caso de que no la encuentre (una actualización, por ejemplo) la buscara de la manera tradicional.
Prelink funciona en cualquier sistema que cumpla el estándar POSIX, como GNU/linux o los BSD.
Como aplicar prelink
Optimizar el sistema con prelink es bastante sencillo, podemos optimizar un binario mediante (como root) :
prelink binario
Pero para optimizar el sistema entero debemos realizar :
prelink -amvR
Veréis algo así:
Aquí una explicación detallada del significado de los parámetros:
- a : equivale a –all, hace que se aplique a todo el sistema
- m : equivale a –conserve-memory, la explicación de su funcionamiento es compleja, pero ahorra espacio
- v: equivale a –verbose, nos permite saber cuales son las librerías pre-enlazadas
- R : equivale a –random, aumenta la seguridad haciendo un valor sea aleatorio. Desconozco los detalles de su funcionamiento
Para des-pre-enlazar (desprelinkar) un binario
prelink -u
Todo el sistema :
prelink -au
# Skype -b /usr/lib32/skype/skype -b /usr/lib/skype/skype # Flash Player Plugin -b /usr/lib/mozilla/plugins/libflashplayer.so # NVIDIA -b /usr/lib/libGL.so* -b /usr/lib32/libGL.so* -b //usr/lib/libOpenCL.so* -b //usr/lib32/libOpenCL.so* -b /usr/lib32/vdpau/ -b /usr/lib/vdpau/ -b /usr/lib/xorg/modules/drivers/nvidia_drv.so -b /usr/lib/xorg/modules/extensions/libglx.so* -b /usr/lib/libnvidia-* -b /usr/lib32/libnvidia-* # Catalyst -b /usr/lib/libati* -b /usr/lib/fglrx* -b /usr/lib/libAMDXvBA* -b /usr/lib/libGL.so* -b /usr/lib/libfglrx* -b /usr/lib/xorg/modules/dri/fglrx_dri.so -b /usr/lib/xorg/modules/drivers/fglrx_drv.so -b /usr/lib/xorg/modules/extensions/fglrx/ -b /usr/lib/xorg/modules/linux/libfglrxdrm.so -b /usr/lib/xorg/modules/extensions/libglx.so
Optimizar KDE
Lo prometido es deuda. Si ya habías pre-enlazado tu sistema probablemente no notaste ninguna diferencia en los tiempos de carga de KDE. Esto es así porque KDE ser sirve de una utilidad llamada kdeinit para cargar todas las librerías necesarias. Para evitar el uso de esta herramienta debemos hacerle saber a KDE que esta pre-enlazado. Para hacer esto debemos (como root) crear un archivo de variable :
nano /etc/profile.d/kde-prelink.sh
En el que pegamos la siguiente línea
export KDE_IS_PRELINKED=1
Y le damos los permisos adecuados (no queremos que ningún travieso le añada rm -rf /)
chmod 755 /etc/profile.d/kde-prelink.sh
Y por si no me creéis, aquí un vídeo de KDE arrancando en mi sistema :
- HDD a 7200 RPM
- Gentoo
- XFS
- Ksplash desactivado (causa de la pantalla negra del video
Cron y prelink
Si usas un sistema como Archlinux, en el que las actualizaciones son muy frecuentes, puede ser interesante añadir un cron que ejecute prelink todos los días.
Así, abrimos con nano el archivo cron (como root) :
nano /etc/cron.daily/prelink
Y pegamos lo siguiente:
#!/bin/bash [[ -x /usr/bin/prelink ]] && /usr/bin/prelink -amR &>/dev/null
Despues le damos los permisos adecuados (ya he mencionado que nadie quiere que se alguien le añada código malintencionado):
chmod 755 /etc/cron.daily/prelink
Un buen habito a la hora de leer un articulo es investigar que hace exactamente el script. Un buen habito a la hora de escribirlo es explicar para que sirve. Aquí el despiece
- La primera linea sirve para decirle al sistema que es un script en bash y la localización del interprete.
- La segunda hace que bash ejecute un subshell en modo debug, desconozco el porque, pero es lo recomendable, se puede eliminar sin riesgo. El && significa que cuando el comando termine, ejecute el siguiente.
- Ejecuta prelink con unos parámetros ya explicados, el &>/dev/null redirige cualquier salida a /dev/null, esto es, la desecha