Publicado el Domingo 20 de Diciembre del 2009 @ 22:56 por Armonth.
Solucionado: Como bien apunta Maox la solución más óptima (o en realidad más fácil / como “workaround”) al final ha sido tirar de --enable-static para que las bibliotecas se compilen de forma estática junto al binario.
Realmente desde el punto de rendimiento no es lo más óptimo: el binario pasa de 600-700kB a 1.200kB y tiene que cargar bibliotecas en RAM que normalmente ya lo estarían (ventajas de compartirlas en GNU/Linux) pero — ¡que leches! — como si me fuera a doler en un script que se ejecuta dos veces al día durante menos de 3-4 segundos para procesar un log. Al menos me dolerá mucho menos que tener que lidiar con compilaciones cruzadas entre mi tostadora y el servidor.
Se agradecen los consejos, chicos ;)
Pues uno de los efectos del cambio de servidores que me hicieron en octubre es que el AWFFull dejó de funcionar. Y llevo media tarde peleándome y sin conseguir que funcione. El problema es de bibliotecas:
./awffull
./awffull: error while loading shared libraries: libpcre.so.3: cannot open shared object file: No such file or directory
Un ldd awffull me saca todo correcto menos dos bibliotecas:
libpcre.so.3 => not found
libgd.so.2 => not found
La segunda desconozco porque no la coge, la primera sin embargo es sencillo: en Dreamhost la biblioteca está en /usr/lib y la compilación original (y Debian por defecto) la pone en /lib. He intentado compilar en mi máquina enviando como ruta alternativa de bibliotecas a /usr/lib y ha funcionado a medias: primero conseguí que no fallase en libpcre pero fallaba en libgd, ahora no falla en ninguno de los dos pero sin embargo ahora saco otro mensaje nuevo:
./awffull-nuevo: /lib32/libc.so.6: version `GLIBC_2.7' not found (required by ./awffull-nuevo)
El motivo es sencillo: lo he compilado en mi máquina que usa libc6 2.9-27 mientras que la de Dreamhost es 2.3.6.ds1-13etch9. Otra cosa que he intentado es con LD_LIBRARY_PATH por si podía arreglarlo por ahí sin tener que usar compilaciones. También he probado a usar los compilados de AWFFULL disponibles para Debian Etch (extrayendo el binario ya compilado) pero falla al cargar las dos bibliotecas del principio de la entrada.
libpcre3-dev que es dependencia).LD_LIBRARY_PATH a la ruta de las bibliotecas en Dreamhost o copiarlas directamente en el directorio del AWFFULL y usar en la variable .:$LD_LIBRARY_PATH no parece funcionar.¿A alguien se le ocurre una solución?. Cualquiera solución a uno de los 3 problemas los arregla todos de golpe :/
Tengo una solución definitiva e infalible… deja de partirte la cabeza con DreamHost y pillate un VPS como dios manda!! xD
No me podrás negar que es una solución para los 3 problemas :P
Podrías… Podrías arrancar desde una live, o virtualizar una debian en un vbox en local. Instalar las versiones que quieras, copiar incluso a lo bestia las versiones que necesitas y compilar allí un ejecutable.
A lo mejor instalar un so en una máquina virtual es muy bestia, pero arrancar desde una live y compilarlo puede que sea tu opción.
¿Intentaste con preguntarle a los de DH?
solución optima: Compilar estáticamente tu binario, y sólo le das un “strip” para que no quede tan grande (google compling static binaries linux)
solución alterna: Crear un entorno chroot con etch para compilar tu paquete, no necesitas virtualizar nada (virtualizar de hecho es un chroot con esteroides) (google debian debootstrap chroot environment), una vez compilado las bibliotecas que no tengas en DH las subes al mismo directorio del binario para que las encuentre sin problemas.
a aprender!
saludos.
P.D. que $DEITY te bendiga por decir BIBLIOTECAS y no el anglojismo “librerías”