sábado, 15 de diciembre de 2007

nntp: Cliente de consola para newsgroups en Linux

Descargar el software necesario

NZBGet
libxml2
libpar2
libsigc

Instalar la libreria libsigc

$ gunzip libsigc-2.0.a.tar.gz

$ tar -xvf libsigc-2.0.a.tar

$ ./configure --prefix=/home/user/bin/libsigc-2.0.a

$ make
$ make install

Instalar la libreria libpar2

Para obtener todas las opciones disponibles mediante el sistema de configuracion, ejecute:

$ ./configure --help

Luego configure el paquete libpar2 de la siguiente manera, indicando la ubicacion donde instalarlo:

$ ./configure --prefix=/home/user/bin/libpar2-0.2

Durante la configuracion, libpar2 intenta resolver la dependencia que tiene con libsigc, el no poder hacerlo reporta el siguiente error:

checking for SIGC... configure: error: Package requirements (sigc++-2.0 ) were not met:

No package 'sigc++-2.0' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables SIGC_CFLAGS
and SIGC_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.


Entonces realice la configuracion del paquete libpar2 indicando, mediante las variable de entorno apropiadas, la ubicacion de la libreria libsigc compilada y sus fuentes:

$ ./configure --prefix=/home/user/bin/libpar2-0.2
SIGC_CFLAGS=/home/user/bin/libsigc++-2.0.18/include
SIGC_LIBS=/home/user/bin/libsigc++-2.0.18/lib


Ahora es momento de compilar los fuentes. Para esto ejecute make en la forma estandar:

$ make

Aparentemente, aun exiten problemas respecto a la ubicacion de los fuentes y librerias correspondientes a libsigc. El proceso de instalacion de la libreria libpar2 descansa en la herramienta pkg-config para resolver dependencias. Sin la correcta configuracion que la herramienta pkg-config requiere, el proceso de construccion falla:

make all-am
make[1]: Entering directory `/home/user/bin/libpar2-0.2-src'
...
Package sigc++-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `sigc++-2.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'sigc++-2.0' found


Primero es conveniente verificar que la herramienta pkg-config no encuentra la configuracion apropiada para encontrar los fuentes y librerias relacionadas a libsigc:

$ pkg-config --cflags --libs sigc-2.0

Obtendra, en caso de no encontrar la configuracion, el siguiente mensaje:

Package /home/user/bin/libsigc++-2.0.18/lib/libsigc-2.0.a was not found in the pkg-config search path.
Perhaps you should add the directory containing 'sigc-2.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'sigc-2.0' found


Otra forma, aun mas simple, de verificar si la herramienta pkg-config dispone de acceso a la configuracion apropiada es inspeccionando la variable de entorno PKG_CONFIG_PATH, que es empleada por pkg-config para buscar los package configuration files necesarios:

$ echo $PKG_CONFIG_PATH | grep 'sigc'

Si el resultado es vacio, entonces quiere decir que el package configuration file para libsigc no esta disponible en el entorno. Para agregarlo haga lo siguiente:

$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:
/home/user/bin/libsigc++-2.0.18/lib/pkgconfig/sigc++-2.0.pc


Ahora, al efectuar el control para la configuracion de libsigc mediante pkg-config, obtendra resultados positivos:

$ pkg-config --variable=prefix sigc++-2.0

La salida estandar mostrara la ubicacion en la cual libsigc se encuentra instalado:

/home/user/bin/libsigc++-2.0.18

Finalmente es necesario ejecutar el proceso de instalacion, invocando nuevamente a make:

$ make install

Instalar la libreria libxml2

$ gunzip libxml2-2.6.30.tar.gz

$ tar -xvf libxml2-2.6.30.tar

$ ./configure --help

$ make
$ make install

Instalar NZBGet

$ gunzip nzbget-0.3.0.tar.gz

$ tar -xvf nzbget-0.3.0.tar

$ ./configure --disable-curses --enable-parcheck \
--with-libpar2-includes=/home/user/bin/
libpar2-0.2/include/libpar2 \
--with-libpar2-libraries=/home/user/bin/
libpar2-0.2/lib \
--with-libsigc-includes=/home/user/bin/
libsigc++-2.0.18/include/sigc++-2.0 \
--with-libsigc-libraries=/home/user/bin/
libsigc++-2.0.18/lib \
--with-libxml2-includes=/home/user/bin/libxml2-2.6.30/include/libxml2 \
--with-libxml2-libraries=/home/user/bin/libxml2-2.6.30/lib

$ make

$ make install

Publicando las librerias compiladas

Al intentar ejecutar nzbget:

$ ./nzbget -c nzbget.conf archivo.nzb

Ocurre el siguiente error:

$ ./nzbget: error while loading shared libraries: libpar2.so.0: cannot open shared object file: No such file or directory

Primero es conveniente verificar cuales son las librerias compartidas que nzbget no encuentra. Para esto ejecute:

$ ldd nzbget

en la salida estandar podra observar algo similar a lo siguiente, donde en negrita se resaltan los errores:

libxml2.so.2 => /usr/lib/libxml2.so.2 (0x00000000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00000000)
libpar2.so.0 => not found
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00000000)
libm.so.6 => /lib/libm.so.6 (0x00000000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00000000)
libc.so.6 => /lib/libc.so.6 (0x00000000)
libsigc-2.0.so.0 => not found
libdl.so.2 => /lib/libdl.so.2 (0x00000000)
libz.so.1 => /usr/lib/libz.so.1 (0x00000000)
/lib/ld-linux.so.2 (0x00000000)


Lo que sucede es que nzbget busca las librerias compartidas en la ubicacion estandar en Linux, que es /usr/lib. Como las librerias de las cuales nzbget depende fueron construidas en otras ubicaciones, es necesario hacerlas disponibles desde /usr/lib mediante vinculos simbolicos:

$ ln -s /home/user/bin/libpar2-0.2/lib/libpar2.so.0 /usr/lib/libpar2.so.0
$ ln -s /home/user/bin/libsigc++-2.0.18/lib/libsigc-2.0.so.0 /usr/lib/libsigc-2.0.so.0


Claro esta que este ultimo paso no es necesario si las librerias fueron instaladas en la ubicacion estandar.

Vinculos:

No hay comentarios.: