Vous êtes sur la page 1sur 7

LINUX BSICO PRELINK

HEINER MEJA DIAZ LUIS GARCIA SOTO

PROFESOR ADAN GOMEZ

ING DE SISTEMAS

UNIVERSIDAD DE CORDOBA

MONTERIA CORDOBA

2011

PRELICK

Qu es Prelink y en qu me puede ayudar?


La mayora de aplicaciones comunes hacen uso de libreras compartidas. Estas libreras compartidas necesitan ser cargadas en memoria en tiempo de ejecucin y las distintas referencias simblicas deben ser resueltas. Para la mayora de los pequeos programas, este tiempo de carga es muy rpido. Pero para los programas escritos en C++ y que utilicen muchas libreras, el tiempo de carga puede llevar bastante tiempo. En la mayora de sistemas, las libreras no se cambian muy a menudo y cuando se ejecuta un programa, las operaciones para cargarlo son siempre las mismas. Prelink se aprovecha de esto para llevar el linkado a cabo y almacenarlo en el ejecutable, prelinkndolo en realidad. El prelinkado puede reducir los tiempos de inicializacin de las aplicaciones. Por ejemplo, el tiempo de carga de un programa tpico de KDE puede ser reducido hasta un 50%. El nico mantenimiento requerido es ejecutar prelink cada vez que se actualice una librera para un ejecutable prelinkado. Aviso: Prelink no funciona en Gentoo Hardened. Esto es debido a que ambos proyectos tratan de cambiar el espacio de mapeo de direcciones de las libreras compartidas. De todos modos, prelink con la opcin -R utiliza direcciones aleatorias, proporcionando as mayor grado de proteccin.

Resumen

El prelinkado se hace con un programa llamado, sorprendentemente, prelink. Cambia el binario para hacerlo ms rpido en su inicializacin. Si las libreras dependientes de una aplicacin cambian despus de que la haya prelinkado, necesitar prelinkar de nuevo la aplicacin; de no ser as, perder la ganancia de velocidad. Esto es para decir que cada vez que actualice un paquete con portage que actualice libreras, stas necesitarn ser prelinkadas de nuevo. El cambio del binario es completamente reversible. prelink tiene una funcin para deshacer dicho cambio. Las actuales versiones de Portage pueden manejar, va prelink, los cambios de las sumas MD5 y los mtimes de los binarios.

No necesita poner FEATURES="prelink" en su fichero make.conf; Portage soportar prelink automticamente si puede encontrar el binario prelink.

2. Configurar Prelink
Instalar los programas
Lo primero que necesita es instalar la herramienta prelink. El proceso de emerge comprueba automticamente que su sistema pueda hacer prelink sin peligro. Listado de Cdigo 2.1: Instalando Prelink # emerge prelink Algunas personas obtienen errores emergiendo prelink a causa de las pruebas fallidas. Estas pruebas se pusieron por razones de seguridad; si las desactiva, el comportamiento de prelink puede ser impreciso. Normalmente los errores de emerge dependen nicamente de los paquetes base: binutils, gcc, y glibc. Intente re-emerger estos paquetes en ese orden. Nota: Sugerencia: Si obtiene un error, pruebe a compilar y probar prelink usted mismo (./configure ; make ; make check ). Ante un fallo, puede ver los ficheros *.log en el directorio testsuite. Le pueden proporcionar algunas pistas de utilidad. Si obtiene una serie de pasos que reproducen el error de emerge en otro sistema, por favor compruebe Bugzilla y realice un nuevo informe de error si ste todava no ha sido reportado.

Preparar su sistema
Asegrese tambin de que no tiene el parmetro -fPIC puesto en sus CFLAGS/CXXFLAGS. Si lo tiene, necesitar reconstruir todo su sistema sin l.

Configuracin
Ejecutando env-update se crear el fichero /etc/prelink.conf que le dice a prelink qu ficheros prelinkar. Listado de Cdigo 2.2: Ejecutando env-update # env-update Desafortunadamente, no puede prelinkar ficheros que hayan sido compilados con antiguas versiones de binutils. La mayora de estas aplicaciones vienen de paquetes

binarios precompilados instalados en/opt. Creando el siguiente fichero, le diremos a prelink que no intente prelinkarlos. Listado de Cdigo 2.3: /etc/env.d/60prelink PRELINK_PATH_MASK="/opt" Nota: Puede aadir ms o menos directorios a la lista, separados por dos puntos (:).

3. Prelinkado
Uso de Prelink
Utilizo el siguiente comando para prelinkar todos los binarios de los directorios dados por /etc/prelink.conf. Listado de Cdigo 3.1: Prelinkando los ficheros listados # prelink -amR Aviso: Se ha observado que si tiene poco espacio en disco y prelinka por completo su sistema, hay una posibilidad de que sus binarios queden truncados. El resultado es un sistema destrozado. Utilice el comando file o readelf para comprobar el estado de un fichero binario. De modo alternativo, compruebe la cantidad de espacio libre de su disco duro con df -h.
Las opciones explicadas: -a
"All": prelinka todos los binarios Conserva el espacio de la memoria virtual. Esta opcin es necesaria si tiene muchas libreras que tengan que ser prelinkadas. Al azar - hace aleatoria la asignacin de la direccin. Esta opcin aumenta la seguridad frente a desbordamientos de bfer.

-m

-R

Nota: Para ms opciones y detalles vea man prelink.

Prelink como tarea programada


sys-devel/prelink-20060213 y posteriores instalan una tarea programada en /etc/cron.daily/prelink. Para activarla, edite el fichero de configuracin /etc/conf.d/prelink. Esto ejecutar prelink en segundo plano a diario, como es necesario, ahorrndole lanzar el comando manualmente.

Acelerar KDE despus del Prelinkado

El tiempo de carga de KDE puede reducirse muchsimo despus del prelinkado. Si informa a KDE de que ha sido prelinkado l desactivar la carga de kdeinit (ya que no se requiere ms) por lo que acelerar KDE an ms. Ponga KDE_IS_PRELINKED=1 en /etc/env.d/*kdepaths* para informar del prelinkado a KDE.

Borrar prelink
Si ha cambiado de de opinin acerca del prelinkado, antes de desinstalar el paquete prelink necesitar eliminar su correspondiente tarea programada en /etc/cron.daily y /etc/conf.d/prelink. A continuacin, tendr que eliminar el prelinkado de todos los binarios: Listado de Cdigo 3.2: Eliminar el prelinkado de todos los binarios # prelink -au Finalmente, desinstale el paquete prelink: Listado de Cdigo 3.3: Desinstalar prelink # emerge -aC prelink

4. Problemas conocidos y soluciones


"No puedo prelinkar contra libreras compartidas non-PIC"
La causa de este problema est en la errnea compilacin de las libreras compartidas que fueron compiladas sin la opcin -fPIC de gcc para todos sus ficheros objeto. Aqu estn las libreras que no han sido o no pueden ser arregladas:

Las libreras en el paquete wine, incluyendo winex. De todos modos, el prelinkado no acelerara los ejecutables de MS Windows. La librera en media-video/mjpegtools, /usr/lib/liblavfile-1.6.so.0. Las libreras OpenGL de NVIDIA, /usr/lib/opengl/nvidia/lib/libGL.so.*. Debido a razones de rendimiento fueron compiladas sin soporte PIC.

Si su problema de librera no est listado, por favor publquelo con, preferiblemente, un parche para aadir la opcin -fPIC al CFLAGS pertinente.

Cuando prelinko mi sistema algunos binarios estticos dejan de funcionar

Por lo que a glibc concierne, el binario 100% esttico no existe. Si compila estticamente un binario con glibc, ste puede depender de otros ficheros del sistema. A continuacin tiene una explicacin de Dick Howell, "Supongo que la idea es que todo estuviera en el fichero descargado, de modo que nada dependa de las libreras locales del sistema al que va dirigido. Desafortunadamente con Linux, y creo que con todo lo que use GLIBC, esto todava no es del todo cierto. Ah est "libnss" (servicio de nombres (name service switch), algunas personas parece que lo llaman sistema de seguridad de red (network security system)) que proporciona funciones para acceder a varias bases de datos de autenticacin, informacin de red y otras cosas. Se supone que hace programas independientes del entorno de red real configurado de la mquina. Una buena idea, pero los cambios a GLIBC pueden llevar a problemas cargndolo. Adems, no puede linkar "libnss" estticamente ya que est configurado individualmente para cada mquina. El problema viene, pienso, principalmente de linkar estticamente otras libreras de GLIBC, en particular "libpthread", "libm" y "libc" de donde vienen llamadas incompatibles a funciones de "libnss"."

Prelink se para con "prelink: dso.c:306: fdopen_dso: Assertion `j == k' failed."


Es un problema conocido, amablemente diagnosticado aqu. Prelink no puede arreglrselas con los ejecutables UPX-comprimidos. En cuanto a prelink-20021213 no hay solucin excepto esconder los ejecutables mientras est realizando el prelinkado. Vea la seccin de Configuracin para tener un modo sencillo de hacer sto.

Uso grsecurity y parece que el prelinkado no funciona.


Para usar prelink en un sistema con grsecurity que use una base mmap() aleatoria, es necesario quitar "randomized mmap() base" del fichero /lib/ld-2.3.*.so. Esto puede hacerse con la utilidadchpax, pero debe hacerse cuando el fichero no est en uso (p.e. iniciando desde un disco de rescate)

Prelink falla con el error "prelink: Can't walk directory tree XXXX: Too many levels of symbolic links"
Sus enlaces simblicos estn demasiado anidados. Esto ocurre cuando un enlace simblico se apunta a s mismo. Por ejemplo, /usr/lib/lib -> lib es el ms comn. Para solucionarlo, puede buscar el enlace manualmente o emplear la herramienta proporcionada por el paquete symlinks: Listado de Cdigo 4.1: Arreglar enlaces simblicos

# emerge symlinks # symlinks -drv / Puede encontrar ms detalles en Bugzilla y en este hilo del foro.

5. Conclusin
El prelinkado puede acelerar drsticamente los tiempos de inicializacin de un gran nmero de aplicaciones. Su soporte est incorporado en Portage. El prelinkado tambin es fiable ya que siempre puede deshacer los cambios para cualquier binario si se encuentra con algn problema. Slo recuerde que cuando actualice glibc u otras libreras con las que haya prelinkado, necesitar ejecutar prelink de nuevo! Resumiendo Buena suerte!

http://www.gentoo.org/doc/es/prelink-howto.xml

Vous aimerez peut-être aussi