A continuación voy a explicar como he montado un sistema en mi centro para que los elp que los profesores usan en sus clases sean exportados en la web del centro de forma automática, y lo mejor de todo, para que cuando se hace cualquier cambio en el elp, esas modificaciones se propaguen automáticamente al material público de la web del centro.

Como una imagen vale más que mil palabras, y un vídeo mil veces más que una imagen, a continuación tenéis un vídeo con el funcionamiento en directo del sistema:

Y en esta ilustración un esquema del funcionamiento:

Basicamente, con un servicio (rclone_sync) que llama a rclone cada 10 segundos sincronizo los elp de la unidad compartida de drive a una carpeta del servidor. Otro servicio (observa_materiales) que hace uso de inotify detecta los cambios en los archivos que sincronizo. Cuando se detecta un cambio (nuevo archivo, archivo borrado o archivo modificado) se llama a script_materiales.sh que a su vez llama a exe_do para que exporte el elp como una carpeta web autocontenida. Dicha carpeta se aloja en materiales_web guardando la misma jerarquía de carpetas que nos encontramos en la unidad compartida. Y por último el mismo servicio rclone_sync sincroniza con rclone la carpeta materiales_web con el alojamiento web que tenemos contratado en el centro. En el caso de borrado de un archivo elp, se elimina la carpeta exportada previamente.

Ahora vamos al lio. Para montar el sistema necesitamos los siguientes elementos:

  • Un servidor x86 con conexión a internet encendido 24/7, pongo x86 porque creo que de eXeLearning no hay versiones arm para las raspberrypi, al menos yo no las conozco, pero podéis usar cualquier equipo viejo que tengáis por el centro, o si como yo ya tenéis un servidor, simplemente es cuestión de ampliar su uso.
  • Un alojamiento web propio, nosotros tenemos con ovh un alojamiento de 100Gb por 25€ al año, más que suficiente para todos los profesores del centro, además tiene el certificado para https incluido. Este alojamiento os debe dar un acceso por ftp.

Pues si tenéis eso en vuestro centro es hora de ponernos manos a la obra.

Lo primero que vamos a hacer es instalar eXeLearning en nuestro servidor, no hace falta que el servidor tenga entorno gráfico, ya que no vamos a usar la aplicación como tal, sino el ejecutable exe_do que trae la instalación. De hecho mi servidor no esta conectado a ningún monitor, y todo lo he hecho a través de ssh. A fecha 17 de noviembre de 2021 la última versión es 2.6, si cuando leas esto hay una versión superior busca el enlace del archivo deb en su web.

para ello escribimos en la terminal:

wget https://descargas.intef.es/cedec/exe_learning/2.6/intef-exe_2.6_all.deb

Una vez descargado el paquete lo instalamos con:

sudo dpkg -i intef-exe_2.6_all.deb

Seguramente tendremos dependencias no instaladas y dpkg nos avisará de ello. Asi que tendremos que instalar dichas dependencias y terminar de configurar el paquete de exe con:

sudo dpkg -f install

Ahora vamos a comprobar que eXe se ha instalado correctamente y que exe_do funciona, que es realmente el ejecutable que vamos a necesitar nosotros, ejecutamos lo siguiente que nos dará información de cómo usar exe_do:

exe_do -h

Ahora vamos a instalar inotify, este es el sistema que nos avisará cuando haya cambios en los archivos elp, y avisará a nuestro script.

sudo apt install inotify-tools

Antes de pasar a la siguiente parte del tutorial, debéis tener rclone configurado con la unidad compartida de Google Drive, así como el acceso ftp del alojamiento web que tengáis contratado, en este y este articulo expli como hacer ambas cosas.

En mi caso la configuración de la unidad compartida la tengo con el nombre materiales en rclone y la configuración del alojamiento la tengo con el nombre ovh y dentro del ftp, la carpeta que voy a usar para las exportaciones es www/exe2

También tenéis que tener dos carpetas en vuestro home, una para alojar los archivos de la Unidad Compartida y otro para alojar los archivos de las exportaciones. En mi caso la primera es /home/jamelrom/materiales y la segunda es /home/jamelrom/materiales_web

Ahora vamos con los servicios, necesitamos dos. El primer servicio lo vamos a montar idéntico a como lo explico en este artículo la única diferencia es el apartado ExecStart que en este caso tiene que dar cabida para 2 procesos: el que sincroniza Google Drive con mi carpeta local, y el que sincroniza mi carpeta local de elementos exportados con el alojamiento web. Yo he llamado al servicio rclone_sync.service tal y como se llama en ese artículo. El timer lo he puesto en este caso en 10 segundos (10s) en vez de 1 minuto. El ExecStart debe quedar así:

ExecStart=/bin/bash -c «rclone sync materiales: /home/jamelrom/materiales_web ftp_ovh:www/exe2/ –config /home/jamelrom/.config/rclone/rclone.conf && rclone sync /home/jamelrom/materiales/ –config /home/jamelrom/.config/rclone/rclone.conf «

Delante del config son dos guiones lo que hay que poner, pero WordPress lo cambia a un guión largo y no he visto la forma de cambiarlo.

Ahora vamos con el siguiente servicio, observar_materiales.service, este servicio lanzará un script que tendremos en nuestro home, para ello debemos crear el archivo con:

sudo nano /etc/systemd/system/observa_materiales.service 

con el siguiente contenido:

[Unit]
Description=Observa la carpeta materiales
[Service]
Type=simple
ExecStart=/bin/bash /home/jamelrom/script_materiales.sh
Restart=always
RestartSec=1
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=observa_materiales
User=jamelrom
Group=jamelrom

[Install]
WantedBy=multi-user.target

cambia jamelrom por tu usuario en el archivo

Ahora creamos el script, con:

nano script_materiales.sh con el siguiente  contenido

De nuevo cambia jamelrom por tu usuario en el script

por ultimo nos queda activar el servicio observa_materiales.service para ello ejecutamos:

sudo systemctl enable observa_materiales.service

Algunos comandos útiles que nos permitirán conocer como esta funcionando el servicio:

  • journalctl -fu observa_materiales nos muestra la salida por pantalla del servicio, lo que nos será útil para observar posibles errores de exe_do
  • sudo systemctl restart observa_materiales.service nos permite reiniciar el servicio, si hacemos cambios en el script_materiales.sh es necesario reiniciar el servicio

 

OPCIONAL

Este apartado es opcional, pero muy recomendable.

Si solo usáis los estilos que vienen por defecto en eXeLearning no tenéis que hacer nada, pero si usáis por ejemplos los estilos Educaand de la Junta de Andalucía, o alguno personalizado para vuestro centro tenemos que instalarlo, para que se pueda desplegar bien con exe_do, como en nuestro servidor no tenemos pantalla (si tenéis pantalla y entorno gráfico, podéis simplemente abrir exe e instalar los estilos que necesitéis) navegamos en algún equipo donde tengamos instalados todos los estilos que nos interesan hasta 

C:\Users\tu_usuario\AppData\Roaming\exe\style en Windows

/home/tu_usuario/.exe/style en Linux

Veremos algo asi:

ahora tendremos que copiar las carpetas que ahí nos encontramos en nuestro servidor en la ruta /home/tu_usuario/.exe/style 

Yo, como en el servidor tengo montada con rclone mi unidad de Google Drive lo más cómodo ha sido pegar las carpetas a Google Drive y pasarlas todas a la configuración de exe del servidor con:

cp -r gdrive/gmel/exe .exe/style

teniendo el prompt en la carpeta personal y teniendo montada mi unidad de drive en gdrive/gmel

Con la instalación por defecto, si algún compañero sube un elp con un estilo que no sea uno de los que trae exe por defecto, o uno de los que acabamos de copiar, exe_do usará el estilo INTEF, si queréis que el estilo por defecto sea otro diferente, podéis hacerlo editando el fichero .exe/exe.conf por ejemplo con 

nano .exe/exe.conf

Esta es la parte que a nosotros nos interesa, en mi caso he sustituido INTEF por Educaand_Cordoba que es el estilo Educaand_Adultos con el logo de nuestro centro, vosotros podéis usar el estilo que queráis, pero tiene que llamarse exactamente igual que el estilo, que es la carpeta que antes hemos copiado a .exe/style

OPCIONAL 2

Otro elemento opcional pero de nuevo muy recomendable, con un pequeño cambio en nuestro script y añadiendo una página nueva en nuestros libros de eXeLearning vamos a tener nuestro contenido automáticamente exportado a pdf y en formato zip, listo para ser usado con eXereader o para que otro docente se lo descargue y modifique en eXeLeraning. Y todo esto igual que la versión web, cada vez que cambiemos el archivo elp, se reconstruirá el pdf y el fichero zip.

Tenemos que instalar dos utilidades en nuestro servidor con:

sudo apt install wkhtmltopdf

sudo apt install xvfb

Ahora hay que añadir dos líneas al script, una linea volverá a llamar a exe_do para generar el archivo zip que permite su uso con exereader y la otra linea, de nuevo con exe_do generará en un directorio temporal ~/temp/single el material en un formato de página html única, y luego con wkhtmltopdf convierte el html en pdf, la aplicación xvfb nos permitirá lanzar esta última herramienta de conversión sin entorno gráfico, ya que parece que por un bug da error, aquí tenéis el script completo con esas dos líneas, recordad que después de hacer cualquier cambio en el script hay que reiniciarlo con:

sudo systemctl restart observa_materiales.service

Una vez cambiado el script si añadís este elp como página de vuestros proyectos, tendréis una página al final de vuestros materiales como ésta.

Problemas conocidos

El sistema tiene dos problemas conocidos:

  • Si creas una carpeta en la unidad compartida, creas en su interior uno o varios elp, se deplegaran en el servidor dichos elp. Si ahora borras dichos elp y la carpeta, se borrarán los contenidos desplegados, pero en el servidor se mantendra la carpeta que contenian los elp pero vacía.
  • Si creas un elp y tiene un nombre que es igual al de una carpeta con la que comparte carpeta padre, en el servidor se borraran todos los contenidos que cuelgan de esa carpeta con el nombre del elp, y solo serán regenerados los materiales cuando se actualicen, pero cuando ese elp «problematico» se vuelva a actualizar volverá a borrar los contenidos desplegados de la carpeta homónima. En mi caso le he dicho a mis compañeros que los elp tienen que estar en carpetas que no contengan otras carpetas, así eliminamos el problema. A continuación una imagen con la situación que genera conflicto.