Anyterm proporciona desde un explorador web acceso a una terminal vt100. 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 emulacion de terminal tipo linux reducida (no soporta lineas de dibujo, etc) y su desarrollo parece detenido en el tiempo.
Voy a intentar instalar anyterm en Suse linux. No soy mas especifico en que version particular, porque pienso hacerlo en varias que tengo a mi disposicion. 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 ¿? basicos) y al intentar compilar desde fuentes…. La version estable de Anyterm me dió muchos problemas con la libreria ROTE. Con la version de desarrollo me fué igual de bien con las librerias 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 version de desarrollo.
Requisitos (desde la pagina official):
- Apache2 corriendo correctamente.
- Paquete de desarrolo para apache instalado (apache2-threaded-dev o apache2-dev)
- Librerias Boost C++ version 1.33 o posterior
- Compilador GNU C++ (g++) version 3 o superior.
- GNU make (FreeBSD make no funciona)
En Suse encuentro que:
- Corre Apache 2.0.54, pero con configuraciones al estilo de apache1. Por lo pronto se encuentra corriendo otras paginas. Tentativamente lo doy por bueno.
- apache2-threaded-dev no se encuentra en los repositorios, pero esta instalado (no a travez de repositorios) apache-devel 2.0.54.
- 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.
Siguiendo el tutorial para instalar descargo boost_1_34_1.tar.gz con wget. y lo desempaqueto en /usr/local. Creo un enlace simbolico boost apuntando a boost_1_34_1 (una costumbre que tengo para independizarme de las versiones).
Una vez dentro de boost_1_34_1 ejecuto ./configure (verificar permisos sobre /usr/local). 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. - El compilador g++ se puede comprobar con “gcc -v”. A mi me indica la version gcc version 4.0.2 20050901 (prerelease) (SUSE Linux)
- Con make suscede lo mismo: “make -v” devuelve: GNU Make 3.80
Descargo Anyterm desde el repositorio svn
svn co http://svn.anyterm.org/anyterm/tags/releases/1.1/1.1.20/ anyterm-1.1.20
Procedo a instalar el modulo de apache correspondiente, para lo que se necesita el comando apxs o apxs2 (que proporciona apache2-devel). Segun el manual, el proceso de compilacion intenta localizar la hubicacion del comando. Ejecutamos:
sad@Inodoro:~/Anyterm/anyterm-1.1.20$ cd apachemod/
sad@Inodoro:~/Anyterm/anyterm-1.1.20/apachemod$ make
Makefile:37: *** The apxs program was not found. Please see the Makefile for advice.. Alto.
Como no podia ser de otra manera, falla la busqueda y me toca modificar el makefile para que apunte a la hubicacion correcta del comando:
sad@Inodoro:~/Anyterm/anyterm-1.1.20/apachemod$ locate apxs2
/usr/sbin/apxs2
Comento las lineas 33 a 43 del makefile y descomento la 46 como se explica en el propio makefile.
Nuevo intento de make:
Makefile:63: *** The apr-config program was not found. Please see the Makefile for advice.. Alto.
Otra modificacion del makefile comentando entre la 59 y 69, especificando la ruta correcta en la linea 71.
Insistimos con make, y obtenemos repetidos errores del estilo:
In file included from ../boost_shmem/boost/shmem/offset_ptr.hpp:18,
from SharedObject.hh:31,
from Screen.hh:28,
from Terminal.hh:26,
from Terminal.cc:19:
../boost_shmem/boost/shmem/detail/workaround.hpp:23:21: error: missing binary operator before token “(“
Este tipo de errores, segun el foro de anyterm, se debe a un error en las librerias boost. Y al parecer las cabeceras deberian estar en /usr/include/boost en lugar de en /usr/local/include/boost_1_34_1/boost. Vamos con 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)
Un nuevo make, esta vez mas satisfactorio, pero terminando en:
g++ -pthread -MM -MT HttpDaemon.d -MT HttpDaemon.o -I../include -o HttpDaemon.d ../src/HttpDaemon.cc
../src/HttpDaemon.cc:38:2: error: #error “Sorry, there is a problem with your compiler / C++ library. Please ask for assistance”
make[2]: *** [HttpDaemon.d] Error 1
make[2]: Leaving directory `/home/sad/Anyterm/anyterm-1.1.20/libpbe/build’
make[1]: *** [libpbe.a] Error 2
make[1]: Leaving directory `/home/sad/Anyterm/anyterm-1.1.20/libpbe’
make: *** [../libpbe/libpbe.a] Error 2
Y no se genera la libreria libpbe.a. Consulto con el autor en el foro y en menos de 20 minutos me contesta
Realizo las modificaciones que me indica en el archivo libpbe/include/FileDescriptor.hh, linea 470 reempalzando el valor de la fecha 20060309 por 20050901 y ejecuto un nuevo make y efectivamente soluciona el error obteniendo (el extracto final):
[...]
make[2]: Leaving directory `/home/sad/Anyterm/anyterm-1.1.20/libpbe/build’
cp build/libpbe.a libpbe.a
make[1]: Leaving directory `/home/sad/Anyterm/anyterm-1.1.20/libpbe’
/usr/sbin/apxs2 -c -o anyterm.la Activity.lo Globals.lo Session.lo SessionId.lo SharedObject.lo SubProcess.lo Terminal.lo UrlEncodedCgiParams.lo algo.lo anyterm.lo apache.lo auto_CgiParams.lo backend.lo diff.lo editscript.lo html.lo -lstdc++ -lboost_thread-mt -lutil -L../libpbe -lpbe
/usr/share/apache2/build/libtool –silent –mode=link gcc -o anyterm.la -rpath /usr/lib/apache2 -module -avoid-version Activity.lo Globals.lo Session.lo SessionId.lo SharedObject.lo SubProcess.lo Terminal.lo UrlEncodedCgiParams.lo algo.lo anyterm.lo apache.lo auto_CgiParams.lo backend.lo diff.lo editscript.lo html.lo -lstdc++ -lboost_thread-mt -lutil -L../libpbe -lpbe
/usr/lib/gcc/i586-suse-linux/4.0.2/../../../../i586-suse-linux/bin/ld: cannot find -lboost_thread-mt
collect2: ld returned 1 exit status
apxs:Error: Command failed with rc=65536
.
make: *** [compile] Error 1
Busco entonces la ubicacion de boost_thread-mt y corregimos:
sad@Inodoro:~/Anyterm/anyterm-1.1.20/apachemod$ locate boost_thread
[...]
/usr/local/lib/libboost_thread-gcc40-mt.a
/usr/local/lib/libboost_thread-gcc40-mt.so
sad@Inodoro:~/Anyterm/anyterm-1.1.20/apachemod$ sudo ln -s /usr/local/lib/libboost_thread-gcc40-mt.so /usr/local/lib/libboost_thread-mt.so
NOTA: Phill (el autor) me corrige que la forma correcta de indicar la nueva libreria es modificando apachemod/Makefile y modificar la definicion de LINK_FLAGS por el nuevo nombre de la libreria.
Y ahora si, make sin errores y luego make install !!!
———————————————————————-
Libraries have been installed in:
/usr/lib/apache2
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR’
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH’ environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH’ environment variable
during linking
- use the `-Wl,–rpath -Wl,LIBDIR’ linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf’
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
———————————————————————-
chmod 755 /usr/lib/apache2/anyterm.so
A integrar entonces con apache:
Agrego en /etc/apache2/sysconfig.d/loadmodule.conf “LoadModule anyterm /usr/lib/apache2/modules/anyterm.so” justo antes del ultimo comentario y reinicio el servicio. Si en /var/log/apache2/error_log no hay errores continuamos.
Copio toda el directorio browser a un directorio accesible por apache2 (/srv/www/htdocs/Anyterm) y dirijo el explorador a la direccion localhost/Anyterm/anyterm.html
Aparece un mensaje de error: Server respondo 404 Not found. Resulta que la linea agregada para cargar el modulo ya no esta. Lo incluyo desde yast, pero continua el error.
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”,
En el apachemod/Makefile modificar en la linea 100:
install: FORCE
$(APXS) -n anyterm_module -i anyterm.la
Luego en browser/.httaccess debe modificarse (y luego copiarse al directorio publicado):
“<IfModule anyterm>” por “<IfModule anyterm_module>”
“SetHandler anyterm” por ” “SetHandler anyterm_module“
“<IfModule !anyterm>” por “<IfModule !anyterm_module>”
Luego recompilamos desde cero con “make veryclean; make; sudo make install”
Solo quedan algunos detalles acerca de la emulacion de caracteres graficos. El Midnight commander funciona perfecto, pero el yast no dibuja las lineas (es como si las lineas fueran transparentes.)
Pido disculpas a todos por lo desprolijo del post pero se esta armando “on the fly..”