lunes, 31 de enero de 2011

Ejecutar programas sin necesidad de usar chroot

For english version


Advertencia: Lo siguiente puede que no te funcione. Si al hacer lo aquí expuesto tu máquina explota o no funciona como debería es tu única e intransferible responsabilidad. Debiste probar primero en un sistema de pruebas y no en producción. Ojala tengas un respaldo. No es mi culpa (^_^) .

Hace unos días, tuve la necesidad de ejecutar una aplicación en 32 bits en un sistema en 64 bits. El típico caso de uso para usar chroot. El problema era que la aplicación debe ser ejecutada por otra aplicación, la cual se ejecuta sin privilegios de root (ser root es estar sin protección, be safe kid (^_^) ). Esto limita el uso de chroot (sólo puede ser ejecutado por root), además no quería lidiar con conflictos en las versiones de las librerías  (puede ser nocivo para la salud).

Después de un poco de google y man, llegué a la solución ld.so. Todo consistía en indicarle a la aplicación la ruta de las librerías a usar . Para hacer esto, se ponen primero las rutas a las librerías en la variable de entorno LD_LIBRARY_PATH. Posiblemente esto haga servir tu aplicación. En mi caso no funciono (;_;) . Me salieron errores como por ejemplo problemas de símbolos, etc. Seguí leyendo de ld.so y conseguí la solución. Se estaba usando el loader del sistema, no el que la aplicación debería utilizar. La solución que encontré, además de recompilar la aplicación, es invocar directamente al loader especifico. Para hacer esto, hay que revisar con: ldd <ruta completa aplicación> . Buscar la línea ld-linux, grep es tu amigo, y así obtenemos el ld-linux<algo>.so (enlace simbólico al ld-<version>.so) que utiliza la aplicación.

Un ejemplo

Suponiendo un sistema en 64 bits con una aplicación en 32 bits

Con la siguiente estructura de directorios








Ejecutando
$ ldd /home/<usuario>/<carpeta_aplicación>/bin/<aplicación> | grep ld-linux


Obtenemos (este archivo lo sacamos del sistema original donde funcionaba la aplicación)
/lib/ld-linux.so.2


Copiamos ese loader a
/home/<usuario>/<carpeta_aplicación>/lib/ld-linux.so.2

Para ejecutar la aplicación
$ env LD_LIBRARY_PATH=/home/<usuario>/<carpeta_aplicación>/lib/:$LD_LIBRARY_PATH \
/home/<usuario>/<carpeta_aplicación>/lib/ld-linux.so.2 \
/home/<usuario>/<carpeta_aplicación>/bin/<aplicación> <argumentos>*


Algo engorroso, pero se puede hacer un script. Para cualquier duda se vale preguntar.


Alejandro

domingo, 16 de enero de 2011

¿Estás viviendo tu vida?

Hecho por javierkiopo
www.openclipart.org

Ésta pregunta me la hago a veces. Hace poco tuve la oportunidad de repetírmela, era uno de esos días en los que recuerdas que todos tenemos tiempo de expiración. Me encontraba escuchando atentamente cuando esto resonó en mi mente “no dejes que el tiempo te use, utiliza tu el tiempo”.  Me dieron ganas de sonreír, ¿cómo olvidar cosas tan simples? Todas las veces que he caído en la procrastinación pensado que las cosas se pueden hacer otro día. Con la cabeza llena de proyectos por hacer.

Lo mejor que he ideado para evitar la trampa del “no tengo tiempo ahora, sera para más tarde” y evitar que el tiempo te use. Es ponerle fecha a lo que me propongo a hacer, de algo tenía que servir el project management además de hacer diagramas. Sino pasan los días, las semanas, los años. Y al final resulta que no hiciste nada fuera de la rutina y del día día.

Así que a no malgastar el tiempo que tenemos, es un recurso no renovable, y a cumplir nuestras metas. El como vivimos cada instante es lo único que al final importa.

Alejandro

sábado, 8 de enero de 2011

¡Hola mundo!

Nace un blog para hablar de todo y muy directo.

Siendo fiel a mi palabra, este es todo el primer post.

Alejandro