Hoy recibí por correo 8 anuncios de seguridad de Moodle, incluyendo 3 vulnerabilidades graves, por ende llegó el momento de planificar una actualización urgente.
Este artículo describe paso a paso cómo actualizar, casi totalmente desde línea de comandos y siguiendo la documentación oficial, un sitio Moodle instalado mediante una copia con git
.
No hace falta que lo mencione pero voy a hacerlo de todos modos: antes de hacer cualquier modificación hacer un backup fresco, tanto de los archivos del sitio como de la base de datos.
Antes de comenzar, comprobar qué versión se encuentra instalada actualmente, y qué rama se está utilizando:
root@moodle:~# cd /var/www/moodle
root@moodle:/var/www/moodle# grep "\$release" version.php $release = '2.7.3+ (Build: 20141224)'; // Human-friendly version name
root@moodle:/var/www/moodle# git branch MOODLE_26_STABLE * MOODLE_27_STABLE master
Se observa que la versión actual es la 2.7.3+
y se está utilizando la rama MOODLE_27_STABLE
.
¿Olvidé mencionar que es necesario hacer un backup?
Para actualizar Moodle se debe poner el sitio en mantenimiento. Esto significa que, durante la actualización, los usuarios no podrán utilizarlo. Para ello es necesario ejecutar el siguiente script PHP como el usuario con el que corre el servidor Web (en este caso Apache, que en Debian y derivados corre como el usuario "www-data" por defecto):
root@moodle:/var/www/moodle# sudo -u www-data /usr/bin/php admin/cli/maintenance.php --enable == Modo de mantenimiento (https://moodle.linuxito.com/catedras) == Su sitio está actualmente en modo de mantenimiento CLI, no se permiten accesos web .
Inmediatamente es posible comenzar con la actualización de archivos de Moodle, lo cual consiste en actualizar la copia local del repositorio mediante un git pull
:
root@moodle:/var/www/moodle# git pull remote: Counting objects: 19594, done. remote: Compressing objects: 100% (5151/5151), done. remote: Total 15716 (delta 11697), reused 14056 (delta 10167) Receiving objects: 100% (15716/15716), 2.94 MiB | 1.03 MiB/s, done. Resolving deltas: 100% (11697/11697), completed with 1544 local objects. From git://git.moodle.org/moodle ab3effc..c228f82 MOODLE_27_STABLE -> origin/MOODLE_27_STABLE 25b43f7..5c17205 MOODLE_26_STABLE -> origin/MOODLE_26_STABLE 97cf440..79dfb73 MOODLE_28_STABLE -> origin/MOODLE_28_STABLE d87bcfb..06122e4 master -> origin/master * [new tag] v2.6.10 -> v2.6.10 From git://git.moodle.org/moodle * [new tag] v2.6.7 -> v2.6.7 * [new tag] v2.6.8 -> v2.6.8 * [new tag] v2.6.9 -> v2.6.9 * [new tag] v2.7.4 -> v2.7.4 * [new tag] v2.7.5 -> v2.7.5 * [new tag] v2.7.6 -> v2.7.6 * [new tag] v2.7.7 -> v2.7.7 * [new tag] v2.8.2 -> v2.8.2 * [new tag] v2.8.3 -> v2.8.3 * [new tag] v2.8.4 -> v2.8.4 * [new tag] v2.8.5 -> v2.8.5 Updating ab3effc..c228f82 error: Your local changes to the following files would be overwritten by merge: lib/phpmailer/moodle_phpmailer.php Please, commit your changes or stash them before you can merge. Aborting
En caso de conflictos durante el merge, tomar las medidas necesarias (por ejemplo renombrar o eliminar los archivos conflictivos):
root@moodle:/var/www/moodle# mv lib/phpmailer/moodle_phpmailer.php lib/phpmailer/moodle_phpmailer.php.bckp
Notar que al actualizar se detectan los nuevos tags, que identifican a las diferentes versiones de cada release de Moodle.
Luego de resolver los conflictos, el proceso de merge fluirá correctamente. Dependiendo de cuándo hayan actualizado por última vez, y cuántas versiones hayan pasado, la lista de archivos puede ser bastante grande:
root@moodle:/var/www/moodle# git pull Updating ab3effc..c228f82 Fast-forward admin/category.php | 3 +- admin/roles/classes/existing_role_holders.php | 19 +- admin/roles/usersroles.php | 2 +- admin/search.php | 4 +- admin/settings.php | 1 - [...] user/view.php | 28 +- version.php | 4 +- 463 files changed, 13007 insertions(+), 4542 deletions(-) create mode 100644 admin/tool/task/tests/behat/manage_tasks.feature create mode 100644 admin/tool/task/tests/form_test.php create mode 100644 admin/tool/xmldb/styles_bootstrapbase.css [...] create mode 100644 repository/url/tests/lib_test.php create mode 100644 user/tests/behat/view_full_profile.feature
Como se han creado nuevos archivos, será necesario ajustar los permisos adecuadamente. Esto dependerá del esquema de usuarios y permisos que utilicemos en el servidor. Seguramente sea necesario ejecutar chown
(para cambiar owner y group), chmod
(para cambiar permisos) y setfacl
(para configurar o modificar ACLs).
El siguiente paso consiste en ejecutar el script admin/cli/upgrade.php
para proceder con la creación del archivo de configuración y actualización de la base de datos:
root@moodle:/var/www/moodle# sudo -u moodle /usr/bin/php admin/cli/upgrade.php == Actualizando la base de datos de Moodle desde la versión 2.7.3+ (Build: 20141128) (2014051203.03) a 2.7.7+ (Build: 20150313) (2014051207.01) == Sus archivos Moodle han sido modificados, y usted está a punto de actualizar automáticamente su servidor a esta versión: 2.7.7+ (BUILD: 20150313) (2014051207.01) Una vez que haga esto, no podrá volver atrás. Por favor, note que este proceso puede costar bastante tiempo. ¿Está seguro de que quiere actualizar este servidor a esta versión? escriba s (sí) o n (no)
Pero antes de proceder, debe garantizarse que el usuario de base de datos con el que se conecta Moodle tenga privilegios suficientes para crear y/o modificar tablas en la base de Moodle. De nuevo, esto depende mucho de qué motor de bases de datos se utilice. Por ejemplo, si se utiliza Postgres, será necesario dar temporalmente privilegios de superusuario. En el servidor de bases de datos, cambiar al usuario administrador de Postgres y conectarse a la base de datos de Moodle. Luego, suponiendo que el usuario con el que se conecta el sitio Moodle es "umoodle", ejecutar el comando SQL alter user umoodle superuser
:
root@db34:~# su - dba dba@moodle:~$ psql -d dbmoodle psql (9.4.1) Type "help" for help. moodle=# alter user umoodle superuser; ALTER ROLE
Proceder con la actualización:
¿Está seguro de que quiere actualizar este servidor a esta versión? escriba s (sí) o n (no) -->Utilidad de importación de idioma: es ++ El paquete de idioma es está al día ++ -->Sistema ++ Éxito ++ -->mod_assign ++ Éxito ++ -->mod_lesson ++ Éxito ++ -->filter_mathjaxloader ++ Éxito ++ Actualización de comando de línea finalizado con éxito.
Al finalizar la misma, quitar los privilegios de superusuario al usuario con el que se conecta Moodle y cerrar la sesión:
moodle=# alter user umoodle nosuperuser; ALTER ROLE moodle=# \q dba@db34:~$ exit root@db34:~#
Ahora, verificar si la versión que ha quedado instalada es la que se esperaba:
root@moodle:/var/www/moodle# grep "\$release" version.php $release = '2.7.7+ (Build: 20150313)'; // Human-friendly version name
Si todo está bien, es posible desactivar el modo de mantenimiento para volver a activar el sitio:
root@moodle:/var/www/moodle# sudo -u moodle /usr/bin/php admin/cli/maintenance.php --disable == Modo de mantenimiento (https://moodle.linuxito.com/catedras) == El modo de mantenimiento está desactivado y el sitio vuelve a funcionar con normalidad
Verificar el funcionamiento del sitio. En caso de errores, probablemente sean causa de permisos incorrectos en el directorio "moodledata". Corregir los permisos y verificar nuevamente:
root@moodle:/var/www/moodle# cd ..
root@moodle:/var/www# chown -R www-data:www-data moodledata
Como último paso, actualizar todos los plugins desde la página "My home > Site administration > Plugins > Plugins overview", utilizando el botón "Check for available updates":
Referencias: Moodle 2.7 docs - Upgrading | Moodle 2.7 docs - Maintenance mode | Moodle 2.7 docs - Git for Administrators | git-branch
Fuente: linuxito