sábado, 19 de julio de 2008

Instalando Anyterm en Suse

Anyterm proporciona desde un explorador web acceso a una terminal linux. Existen otras alternativas para esto, pero Anyterm (junto con ajaxterm) destaca por no necesitar ningun tipo de plugin o agregado del lado del cliente. Ajaxterm es mas sencillo de poner en funcionamiento, pero provee una emulación de terminal tipo linux reducida (no soporta lineas de dibujo, etc) y su desarrollo parece detenido en el tiempo.

Voy a instalar anyterm en Suse linux. No soy mas especifico en que versión particular, porque pienso hacerlo en varias que tengo a mi disposición. Aclararé cuando amerite según el detalle, pero mayormente va a tratarse de OpenSuse 10. Suse No me gusta, pero eso es tema de otro post.

El paquete de anyterm, no se encuentra disponible en Suse (repositorios ¿? básicos) y al intentar compilar desde fuentes…. La versión estable de Anyterm me dió muchos problemas con la librería ROTE. Con la versión de desarrollo me fue igual de bien con las librerías Boost C++.

Hoy, con mas determinación y mas seguridad acerca de que Anyterm es lo que necesito emprendo, nuevamente, el camino de instalar desde fuentes la versión de desarrollo.

Requisitos

  • Apache2 corriendo correctamente.
  • Paquete de desarrollo para apache (apache2-threaded-dev o apache2-dev). Esto proporciona las herramientas apxs para la generación del módulo.
  • Librerías Boost C++ version 1.33 o posterior
  • Compilador GNU C++ (g++) versión 3 o superior. (gcc -v)
  • GNU make (FreeBSD make no funciona). (make -v)
  • Recode (este no figura en la pagina oficial, pero hace falta)

En Suse encuentro que:

  • Corre Apache 2.0.54, pero con configuraciones al estilo de apache1. 2.0.49 en suse 9
  • apache2-threaded-dev o apache -dev no esta instalado y no se encuentra en los repositorios de suse 10. Si puede instalarse desde los cd en suse 9.
  • Boost C++ no aparece en el yast. Aun asi me gustaría tener la certeza de que no se encuentra instalado, pero no encuentro como.
  • El compilador g++ se puede comprobar con “gcc -v”. A mi me indica la version gcc version 4.0.2 20050901 (prerelease) (SUSE Linux). Version 3.3.3 en el caso de suse 9
  • Con make suscede lo mismo: “make -v” devuelve: GNU Make 3.80
  • Recode no se encuentra instalado (recode --version)

Librerias Boost C++

Siguiendo el tutorial para instalar descargo boost_1_34_1.tar.gz con wget. y lo desempaqueto. Segun el tutorial, la gran parte de la librería no necesita compilarse, ya que esta compuesta por archivos de encabezamiento(headers) y funcione que se compilan al momento de incluirlo en otro programa. Teniendo en cuenta esto, basta con copiar lo desempaquetado a /user/local y crear un link simpbolico para independizarse de la version de boost. Por las dudas, una vez dentro de boost_1_34_1 ejecuto ./configure. En la ejecucion del make install obtengo muchisimos errores relacionados a python.
Mientras compila (que tarda bastante) sigo con otras cosas y atenderemos luego los errores.

Una vez compiladas, debemos asegurarnos de que las cabeceras esten en /usr/include/boost (en lugar de en /usr/local/include/boost-1_34_1/boost). Creamos dos enlaces simbolicos entonces:
ln -s /usr/local/include/boost-1_34_1/boost /usr/include/boost
ln -s /usr/local/include/boost-1_34_1/boost /usr/local/include/boost (por las dudas)

Paquete de desarrollo para apache Apache-dev

Descargado desde RPM search apache-devel-2.0.49-27.45.i586.rpm e instalado con yast -i

Recode

Si bien en muchas instalaciones no es necesario, si no se encuentra el orque no compila es buena practica instalar este paquete. Para hacerlo, descargamos el fuente del sitio de GNU y aplicamos el abc, es decir, tar > ./configure > make install

Descargando e instalando Anyterm

Recomiendo descargar el ultimo release con el cluente svn. Por ejemplo para la version 1.20 el comando sería:
svn co http://svn.anyterm.org/anyterm/tags/releases/1.1/1.1.20/ anyterm-1.1.20

He utilizado Anyterm como modulo de apache, aunque recientemente hay un demonio independiente, por lo tanto la compilacion se realiza dentro del directorio apachemod. Como se explica en este post Suse renombra el modulo de anyterm a anyterm_module sin avisar. y no hay forma de corregir esto, por lo que se tiene que modificar el nombre del modulo en el anyterm (Suse sigue sumando numeros para el sudo rm -rf /):

apache.cc:

54 extern module AP_MODULE_DECLARE_DATA anyterm_module;

153 static int anyterm_handler(request_rec* r)
154 {
155 // If request does not have handler “anyterm”, decline it so that
156 // other handlers get the chance to look at it.
157 if (string(r->handler)!=”anyterm_module“) {
158 return DECLINED;
159 }
160

177 anyterm_dir_config_t* config =
178 (anyterm_dir_config_t*)ap_get_module_config(r->per_dir_config, &anyterm_module);

256 module AP_MODULE_DECLARE_DATA anyterm_module = {

264 -1,
265 “anyterm_module”,

Luego en browser/.htaccess debe modificarse (y luego copiarse al directorio publicado):

” por “_module>”

“SetHandler anyterm” por ” “SetHandler anyterm_module

” por “_module>”

El apachemod/Makefile tambien debe modificarse alrededor de la linea 120
install: FORCE
$(APXS) -n anyterm_module -i anyterm.la

El Makefile intenta encontrar las herramientas apxs2 y apr-config, pero en suse no logra encontrarlas por lo que al ejecutarlo se obtiene:
sad@Inodoro:~/Anyterm/anyterm-1.1.20/apachemod$ make
Makefile:37: *** The apxs program was not found. Please see the Makefile for advice.. Alto.

Debe modificarse el Makefile comentando las lineas 33 a 43 del makefile y descomento la 46 como se explica en el propio makefile indicado la ruta correcta del comando (locate apxs2) y luego en las lineas 59 a 69, especificando la ruta correcta en la linea 71.

Tambien me he encontrado con un problema en el nombre de la libreria boost_thread. Phill, el autor, me recomienda que se debe modificar el makefile para que LINK_FLAGS coincida con la version de compilador que utilicemos. El nombre correcto de la libreria podemos obtener con "locate boost_thread" (por ejemplo -lboost_thread-gcc40-mt o -lboost_thread-gcc33-mt para suse 9).

En suse 9.3 actualcé el gcc al 3.4, compila, pero a querer utilizar el modulo se obtiene en Errorlog de apache:
[Tue Apr 01 15:27:58 2008] [notice] child pid 30621 exit signal Segmentation fault (11)

Todavia estoy investigando el problema.

Realizado todo esto, podemos ejecutar el tan ansiado make install.

No hay comentarios: