SAGE es GPL.
La version de SAGE utilizada es la 5.3
El objetivo de SAGE es crear una alternativa viable, libre y de código abierto a: Magma, Maple, Mathematica y Matlab.
En este artículo voy a contar como configurar el servidor notebook de SAGE.
Voy a centrarme solamente en la configuración de SAGE necesaria para poderlo utilizar de forma aceptable en un equipo con pocos recursos.
Se supondrá que SAGE ya esta correctamente instalado.
La mejor documentación para compilar SAGE se encuentra en:
http://www.sagemath.org/doc/installation/source.html
También existe un paquete precompilado para Ubuntu.
1-Recursos y rendimiento:
En la actualidad el servidor esta montado sobre una máquina con:
- S.O: Debian 6.0 con kernel 2.6.32-5-amd64
- CPU: Intel Xeon 1.6 Ghz 64 bits
- RAM: 2 GB
- Disco duro disponible: 18GB
- Nº de usuarios simultáneos tranbajando con SAGE: 20 usuarios.
2-Sobre usuarios de sistema y usuarios de la aplicación web notebook:
Es importante comprender que una cosa es el usuario del sistema que lanza el proceso "sage notebook" y otra los usuarios de la aplicación web de notebook.
Puesto que SAGE puede trabajar en linea de comandos desde el shell o mediante el servidor web, es posible tener varios usuarios de sistema que arranquen su propio servidor web notebook en la misma máquina (usando diferentes puertos).
Para nuestro escenario de servidor de prácticas, necesitamos un solo usuario del sistema que arranque el servidor web. Los distintos usuarios de la aplicación web notebook se darán de alta desde la propia aplicación web (también es posible hacerlo desde la shell, ver manual).
3-Configurando correctamente el SO:
3.1- Configurar usuario del sistema:
Puesto que nosotros unicamente utilizamos SAGE desde el servidor web Notebook, tan solo necesitaremos un usuario de sistema que lance el servidor web.
Este usuario debe poder acceder mediante ssh sin password. Al arrancar el servidor, se le comunica que usuario de sistema se usa (mediante el parametro server_pool, ver mas adelante), y las restricciones a aplicar a sus trabajos o worksheet (mediante ulimit, ver mas adelante).
Crear usuario, en nuestro caso sageuser:
mimaquina:~$adduser sageuser (creara el home /home/sageuser/)
Crear claves ssh:
mimaquina:~$su sageuser
sageuser@mimaquina:~$ssh-keygen (Ojo dejar la passphrase en empty).
Este comando genera las claves rsa y las almacena en /home/sageuser/.ssh/
sageuser@mimaquina:~$cp /home/sageuser/.ssh/id_rsa.pub /home/sageuser/.ssh/authorized_keys
Comprobar acceso funciona correctamente:
mimaquina:~$su sageuser
sageuser@mimaquina:~$ssh localhost
Si da error investigar el problema lanzando el servidor sshd en modo debug y el cliente ssh en modo verbose:
Cliente: sageuser@mimaquina:~$ssh -vvv localhost
Servidor: mimaquina:~$sshd -d
3.2-Configurar el servidor sshd:
Puesto que la aplicación web notebook realiza una conexión ssh por cada usuario de aplicación conectado, será necesario configurar el servidor para:
- Permitir mas de 20 conexiónes simultaneas (queremos dar soporte a 20 usuarios).
- Terminar las conexiones ssh una vez que han abandonado la aplicación (si no lo hacen correctamente y simplemente cierran el navegador, las sesiones quedan abiertas.)
Para ello en el fichero /etc/ssh/sshd_config necesitamos los siguientes parámetros:
MaxSessions 40 (nº maximo de conexiones simultaneas)
MaxStartups 40 (nº maximo de autenticaciones simultaneas)
ClientAliveInterval 1800 (tiempo en segundos de inactividad antes de petición de respuesta)
CleintAliveCountMax 0 (nº de intentos fallidos de obtener respuesta antes de cerrar conexion).
4-Arrancar el servidor web notebook:
4.1-Primer arranque:
En el primer arranque del servidor se debe configurar la cuenta del usuario "admin" de la aplicación web notebook.
Para ello es necesario acceder a sage como el usuario del sistema (en nuestro caso sageuser) y hacer lo siguiente:
sageuser@mimaquina:~$sage (entramos en sage)
sage: notebook(reset=True) (arrancara servidor notebook y nos pedirá contraseña para admin).
sage: exit
4.2-Arranque normal:
La aplicación web notebook cuando intenta conectarse mediante ssh busca las claves ssh en la carpeta .ssh/ del home del usario que lo ha lanzado, por ejemplo:
Lanzo el servidor como:
Usuario: root => Directorio: /root/.ssh
Usuario: sageuser => Directorio: /home/sageuser/.ssh
Por tanto la aplicación deberá lanzarse con el usuario de sistema pasado en el parámetro server_pool.
En mi caso, el comando utilizado para lanzar el servidor SAGE es:
sageuser@mimaquina:~$sage -c "notebook(interface="practicas.miservidor.com", port=8000, accounts=True, timeout=7200, server_pool=['sageuser@localhost'], ulimit='-v 90000')"
Para conseguir que 20 usuarios puedan trabajar con solo 2GB de RAM se han utilizado los siguientes parámetros:
- timeout: Cantidad de segundos hasta que una sesión de trabajo (worksheet) inactiva es terminada.
- ulimit: mediante la opción -v, limita la cantidad máxima de RAM utilizada por cada trabajo (worksheet).
El parámetro ulimit (¿user limit?) funcionara solamente si va asociado a uno o mas usuarios del sistema. Estos usuarios se indican mediante el parámetro server_pool.
IMPORTANTE: El usuario de sistema incluido en la lista server_pool, deberá poder acceder mediante ssh al servidor sin contraseña. De no ser así cuando el usuario web realice una operación no se mostraran los resultados.
NOTA: no confundir los usuarios de la aplicación web notebook (proceso que se puede realizar una vez conectados a la web) con el usuario de sistema que lanzara el servidor web.
5- Parada del servidor sage notebook:
Para parar el servidor es necesario matar el proceso cuyo PID se almacena en el fichero twistd.pid del directorio home del usuario. En nuestro caso:
sageuser@mimaquina:~$kill -9 $(cat /home/sageuser/.sage/sage_notebook.sagenb/twistd.pid)