Documentación de la ponencia realizada por http://elurnet.net en la Moodlemoot Euskadi celebrada el 14 de Junio de 2013.
A raíz de nuestra propia experiencia y de un caso real, exponemos el procedimiento a seguir a la hora de abordar una actualización de la plataforma Moodle; desde la planificación, poniendo sobre la mesa posibles problemas y dando una serie de consejos para poder realizar el trabajo con éxito
3. Índice
● Características de un caso práctico
● Pasos iniciales. Determinar si Moodle ha sido modificado
● Cambios en Moodle 2.x que afectan a la actualización
● Limpieza previa de DB y moodledata
● Actualización por fases
● Tareas posteriores
5. Características de la plataforma (I)
● 1.980 cursos
● 28.000 usuarios
● 375.000 archivos en el directorio moodledata (unos 56GB)
● Base de datos de 18GB
6. Características de la plataforma (II)
● Moodle 1.9.1
– Actualización previa desde Moodle 1.7
– Código core de Moodle modificado, no existe documentación al
respecto
– Plugins para versiones posteriores de Moodle
7. Características de la plataforma (II)
● Moodle 1.9.1
– Base de datos no estándar, tipos de datos e índices incorrectos
– Parches puntuales para arreglar compatibilidad con xAMP
Moodle 1.9.1 + PHP 5.3 = formularios NO funcionan
9. Preparar el entorno
● Copia de seguridad completa de la plataforma
● Clonar servidor de producción para actualización de prueba
– Las operaciones de actualización consumen muchos recursos. Si
virtualizas, establece cuotas de CPU, E/S y RAM para evitar la
degradación del servicio
10. ¿Es un Moodle estándar? (I)
● Determinar versión exacta de Moodle
– Editar version.php
– $release = '1.9.1+ (Build: 20080604)'
● Encontrar copia de código fuente sin alterar en el repositorio
de Moodle
– git log –grep='20080604'
● diff entre ambos excluyendo mods, filters y themes
11. ¿Es un Moodle estándar? (II)
● Análisis de código alterado
– ¿Para qué sirve?
– ¿Es necesario?
– ¿Misma funcionalidad alcanzable mediante plugins en versiones 2.x?
● Plugins de matriculación
● Plugins para repositorios
● Planificación de tareas adicionales para estas alteraciones
12. ¿Es un Moodle estándar? (III)
● Análisis de la base de datos
– ¿Tablas personalizadas?
● Cuáles son de mods y cuáles personalizaciones del core
– ¿Son correctos los tipos de datos e índices?
– ¿Juego de caracteres correcto (UTF-8 vs. LATIN-1)?
– ¿Se puede eliminar alguna tabla?
13. ¿Es un Moodle estándar? (IV)
● Análisis de base de
datos
– diff mediante
MySQL Workbench
14. ¿Es un Moodle estándar? (V)
Esquema limpio
Esquema que
teníamos
Delta, diferencia
entre ambos
Delta + Esquema que teníamos = Esquema limpio
16. Análisis de Plugins
● ¿Qué plugins hay instalados?
● ¿Funcionan correctamente?
● ¿Existe versión para Moodle 2.x?
– No hay versión o mecanismo de actualización: Nanogong
● ¿No se utiliza? Mejor desinstalar que actualizar
18. Temas
● Los themes para 1.9 no son compatibles con 2.x
● ¿Realmente los necesitamos?
– Muchos profesores prefieren el theme por defecto de las nuevas
versiones de Moodle
– Actualizar un número X de themes supone más tiempo y dinero
● Es “recomendable” que los themes 2.x sean adaptables y compatibles con
dispositivos móviles
19. Sistema de archivos (I)
● Moodle 1.9
– moodledata/<id-curso>/{archivos curso}
– moodledata/<id-curso>/moddata/<nombre-mod>/{archivos mod}
– No hay sistema de referenciación explícito en la DB
● Archivos borrados de sistema de archivos, movidos a otro directorio y mal
referenciados
● Duplicidad de archivos
● Problemas con rutas demasiado largas
● Dependencia de dominio web
Son problemas del propio Moodle 1.9,
No de migración
20. Sistema de archivos (II)
● Moodle 2.x
– Hash de ruta: sha1(ruta)
– Hash de contenido: sha1_file(“misdatos.txt”)
0b5c8aaa6e3eaa8d6f7cb1da2d221ab1929e8f83
– Renombrar archivo
$hash_contenido = sha1_file($archivo_usuario)
rename($archivo_usuario, $hash_contenido)
21. Sistema de archivos (III)
● Moodle 2.x
– Mover a carpeta indexada (tabla hash de doble nivel)
moodledata/filedir/0b/5c/0b5c8aaa6e3eaa8d6f7cb1da2d221ab1929
e8f83
– Tabla específica para referenciar todos los archivos: mdl_file
● Se evita duplicidad → ahorro de espacio
● Archivos correctamente referenciados en todo momento
● Aislar las operaciones del usuario del sistema de ficheros subyacente (capa de
abstracción)
– Independencia respecto a dominio web
22. Matriculación
● Moodle 1.9
– Muchas veces implicaba hacer cambios en el core
● Moodle 2.x
– Posibilidad de desarrollar plugins para cubrir necesidades
específicas de la institución
23. Transacciones DB
● Moodle 1.9:
– Ideado para Mysql con MyISAM
– No hay transacciones
● Moodle 2.x:
– Se añaden más SGBD: PostgreSQL, MariaDB...
– Opción de transacciones con MySQL + InnoDB
24. HTML estricto
● Moodle 1.9 y anteriores
– Normas de limpieza de input de usuario menos tajantes
● Moodle 2.x
– Limpieza y formateo estricto de código HTML introducido por
usuarios
26. Antes de empezar...
● Activar el Modo Mantenimiento
– Acceso sólo disponible para admins
● Activar el nivel de debugging máximo
27. Desinstalar todo lo que se pueda
● Plugins que no se utlicen
● Filtros rotos o innecesarios
● Roles personalizados que no se vayan a utilizar
● Usuarios inactivos desde hace tiempo
● Cursos que ya no sirven
● ...
28. Limpiar la DB (I)
● Moodle NO dispone de integridad referencial
– Se borra curso con 10 topics, pero no todo lo relacionado:
actividades, recursos ...
● Conviene hacer un modelo entidad/relación esquemático a
mano para saber cómo están relacionadas las tablas
29. Limpiar la DB (II)
● Eliminar todas las instancias de módulos no referenciados en
ningún curso. Por ejemplo, para el módulo forum:
SELECT id, course, name
FROM mdl_forum
WHERE id NOT IN (SELECT instance
FROM mdl_course_modules
WHERE module = (SELECT id FROM mdl_modules WHERE name = 'forum'));
30. Limpiar moodledata (I)
● Eliminar directorios de cursos que ya no existan en la
plataforma
– Por ejemplo, si en la tabla mdl_course no existe ningún curso con
el id=45, eliminaremos el directorio moodledata/45 y todas sus
subcarpetas.
31. Limpiar moodledata (II)
● Caso extremo
– Si en la ruta de un curso tenemos dos carpetas con mismo nombre,
pero distinto case, podemos tener problemas
moodledata/4561/DATOSALUMNO/evaluación.pdf
moodledata/4561/Datosalumno/Evaluación.pdf
– Para Moodle 1.9, para Moodle 2.x iguales
– Solución: crear script para detectar casos problemáticos, buscar
esos casos en DB, renombrar y actualizar DB
32. ¿Cambio de dominio?
● Los enlaces de Moodle 1.9 son absolutos
– Herramienta administrativa replace para búsqueda y reemplazo
masivo: http://dominiomoodle/admin/tool/replace.php
– Caso extremo: Bloque de tipo HTML en Moodle
● ¿El reemplazo masivo no funciona, por qué?
● Contenidos se guardan codificados en BASE64 y serializados
mdl_block_instance
pagetype configdata
course-view Tzo2OiJvYmplY3QiOjY6e3M6MTk6ImRpc3BsYXlfZGVzY3JpcHRpb24iO3M6MT
oiMSI7czoxNDoic2hvd251bWVudHJpZXMiO3M6MToiMyI7czo1OiJyc3NpZCI7YT
oxOntpOjA7czozOiIxMTEiO31zOjU6InRpdGxlIjtzOjA6IiI7czozNDoiYmxvY2tfcnN
zX2NsaWVudF9zaG93X2NoYW5uZWxfbGluayI7czoxOiIwIjtzOjM1OiJibG9ja19y
c3NfY2xpZW50X3Nob3dfY2hhbm5lbF9pbWFnZSI7czoxOiIxIjt9
33. HTML incorrecto (I)
● Todos los campos de input de texto almacenados en DB
pueden contener HTML no-estricto
– En Moodle 2.x puede que estos campos rompan el estilo de los
cursos por completo, incluso pueden romper la funcionalidad del
mismo
● Solución: búsqueda masiva de inputs de texto en DB, filtrado
mediante limpiador HTML, y actualización de campos
37. Moodle 1.9.1 → 1.9.19+
● ¿Moodle no estándar?
– Deshacer cambios sobreescribiendo con versión limpia
● Cambios a tener en cuenta
– Salt para contraseñas
– Políticas de passwords
– Versión más reciente de TinyMCE
● Hasta 1.9.9 no se muestra en Chrome
38. Moodle 1.9 → 2.2
● Conservar sólo config.php
● La fase que más tiempo consumirá
● Utilizar la versión CLI del actualizador
– Evitar timeouts y problemas de conectividad
– <moodle>/admin/cli/upgrade.php
● Tomarse un tiempo para revisar los logs y que los módulos
funcionan correctamente
39. Moodle 2.2 → 2.3 → 2.4
● Se añade el plugin Book al core de Moodle
● Se añade una nueva versión del módulo assignment llamado
assign
– Usar el asistente de conversión
– NOTA: plugins de tipo assignment, intentar actualizarlos antes de
realizar esta fase
41. Tareas posteriores
● Planificar script cron.php y desactivar acceso desde web
– crontab -u apache -e
● Activar soporte reCAPTCHA
– Eliminar SPAM previo usando herr. adm.
http://moodle/admin/tool/spamcleaner.php
● Comprobar el correcto funcionamiento de los cursos
– Reconstruir caché del curso: borrar campo modinfo de mdl_course
– Plugin rebuildcoursecache:
https://moodle.org/plugins/view.php?plugin=tool_rebuildcoursecache
42. Tareas posteriores (II)
● Herramientas
diagnóstico admin
– Diagnóstico de roles
– Conversión a InnoDB
– Profiling de plataforma
– ...
43. Tareas posteriores
● Eliminar directorios vacíos de moodledata
● Hacer pruebas de carga y activar módulos de cacheo
– Memcache, MongoDB ...
● Requerir cambio de password a todos los usuarios
– Políticas de password reforzadas + salt
48. Malas prácticas en Plugins (I)
● Nanogong
– Se publica versión para Moodle 1.9
– Se detiene el desarrollo durante 2-3 años
– Se anuncia nueva y mejorada versión de Nanogong
● Compatible con Moodle 1.9 y con Moodle 2.x
● Múltiples optimizaciones de rendimiento y nuevas opciones
49. Malas prácticas en Plugins (II)
● Nanogong
– ¿Dónde está la pega?
– Tengo ejercicios hechos con la versión vieja de Nanogong
– Instalo la versión nueva de Nanogong
● Instalación → OK
● Ejercicios previos → Mal
50. Malas prácticas en Plugins (III)
● Nanogong
– ¡Función de upgrade.php vacía!
/**
* Execute nanogong upgrade from the given old version
*
* @param int $oldversion
* @return bool
*/
function xmldb_nanogong_upgrade($oldversion) {
return true;
}
51.
52. Referencias
● Fuentes de datos adicionales
– Moodle docs – http://docs.moodle.org
– Wikipedia – http://www.wikipedia.org
53. Licencia
● Todas las fotos e imágenes de esta presentación pertenecen a sus
respectivos dueños. Véase:
Elurnet SL, Moodle, Stéfan (flickr), 20th Century Fox, ...
● El resto de contenidos está sujeto a CC-BY-SA 3.0
– Eres libre de copiar, distribuir y presentar esta obra en público
– Eres libre de crear obras derivadas
– Tienes que reconocer la autoría de la obra, de la manera que te
indica el autor
– Tienes que mantener la misma licencia al distribuir esta obra o sus
derivados