Gravatar de Armonth

Peleándome con el AWFFull

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.

  • Problema nº1: no puedo compilar el AWFFULL directamente en la máquina en Dreamhost (no tiene instalado libpcre3-dev que es dependencia).
  • Problema nº2: si lo compilo en mi máquina luego no coincide la GLIBC y se niega a ejecutarse en Dreamhost.
  • Problema nº3: fijar 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 :/

5 Comentarios (feed)

  1. Gravatar de Samuel Samuel nos comenta:

    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

    Domingo, 20 de Diciembre/2009 @ 23:25

  2. Gravatar de ARL ARL nos comenta:

    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.

    Domingo, 20 de Diciembre/2009 @ 23:46

  3. Gravatar de filex filex nos comenta:

    ¿Intentaste con preguntarle a los de DH?

    Lunes, 21 de Diciembre/2009 @ 2:10

  4. Gravatar de Armonth Armonth nos comenta:

    @Samuel: lo malo es que entonces entraría en otro problema y es que no estoy para VPS (tanto por pasta como por tiempo suficiente para gestionarlo).

    @Filex: por experiencia previa, rara vez instalan bibliotecas de desarrollo (paquetes xx-dev) :/

    @ARL: para el caso es lo mismo que hice (sacar el ejecutable ya compilado para Debian Etch) y nada…

    Lo suyo, supongo, sería alguna manera de compilar sin que el ejecutable “recuerde” que se enlazo a X versión de la glibc pero desconozco si se puede… O eso o alguna forma de descompilar el libpcre3-dev en un directorio del $HOME y usarlo como ruta para la compilación dentro de Dreamhost pero intenté replicar el contenido y no sé porqué pese a usar –with-pcre=/nueva/ruta no funciona… :/

    Lunes, 21 de Diciembre/2009 @ 4:12

  5. Gravatar de maop maop nos comenta:

    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”

    Lunes, 21 de Diciembre/2009 @ 5:15

Comentarios cerrados