Actualizando el núcleo y los módulos de Drupal.

Tengo que admitirlo, odio hacer esto. Pero es tan necesario...

Las actualizaciones de seguridad en Drupal consisten en reemplazar archivos por otros con correcciones.

Un equipo de seguridad vela por que el código de Drupal no tenga fallas de seguridad, usted solo debe estar atento a sus avisos.

A decir verdad yo no seguí esta regla, y Cuenco Digital estuvo funcionando por un par de semanas con una versión anterior a la recomendada.

Sin embargo, hubo dos razones válidas para permitirme esto.

La primera, de las tres actualizaciones disponibles, una era solo válida para sitios corriendo sobre servidores con Windows, y este sitio utiliza Linux.

Y las otras dos, permitían ataques de Cross Site Scripting bajo determinados casos muy específicos en donde un usuario utilizara Internet Explorer. Como no uso ese navegador para navegar y controlo todos los nuevos contenidos de este sitio, no era un problema mayor.

Como sea, no es una buena práctica, y no va a volver a repetirse. Espero.

El núcleo de drupal está desactivado

El proceso de Actualización del Núcleo.

Antes que nada debería tener en cuenta que: Nunca debe hacer todo lo que sigue directamente sobre un sitio en producción. Esto es, un sitio que este activo en internet y con visitantes.

El primer paso consiste entonces en conseguir una copia de todo el sitio. En mi casa tengo una modesta Pentium III con un poco más de 300 mb de memoria que utilizo como servidor casero para pruebas.

En él tengo una copia de la estructura del servidor en producción, por lo que sólo tengo que copiar la base de datos y el directorio de archivos. Para asegurarme de que esté todo bien, voy a copiar el directorio del multisitio sites/cuencodigital.com.

mysqldump -u usuario_base_de_datos -p nombre_base_de_datos > dump.sql
tar czf dump.tar.gz dump.sql
cd drupal/sites
tar czf cuenco.tar.gz cuencodigital.com

Y descargo esos archivos utilizando un cliente sFTP.

Luego, el proceso inverso en el servidor local. Primero, borro la base de datos con phpMyAdmin y luego:

mysql -u usuario_base_de_datos -p nombre_base_de_datos < dump.sql
cd drupal/sites
rm -fR cuencodigital.com
tar xzf cuenco.tar.gz

Con esto, ya tengo lista mi copia en un servidor local para hacer las actualizaciones.

Descargando la ultima versión de Drupal.

En la página inicial de http://drupal.org figura la última versión disponible de Drupal. Esta versión es la que debería tener instalado en su sitio para mantenerlo seguro.

Versiones de drupal

Yo utilizo la rama 6 de Drupal, por lo que para este artículo me corresponde la versión 6.12

Para la actualización es necesario eliminar todos los directorios y archivos que se listan a continuación.

cd drupal
rm -fR modules
rm -fR themes
rm -fR scripts
rm -fR includes
rm -fR misc
rm -fR profiles/default
rm *.php
rm *.txt

Notar que no se debe eliminar el directorio sites. Allí se guardan todos los módulos y archivos de sus sitios activos. No toque ese directorio.

Luego, una vez descargado el paquete de Drupal, lo descomprime y copia todos los directorios salvo sites, a su instación de Drupal

tar xzf drupal-6.12.tar.gz
cd drupal-6.12
rm -R sites
cp -R * ../drupal

También debe tener en cuenta que puede cambiar el archivo .htaccess y el archivo robots.txt, en ese caso, debe tener el cuidad de hacer una copia de seguridad antes de borrar nada.

Una vez que hizo esto, debe acceder a la pagina de actualización de su sitio: www.example.com/update.php allí podrá ver si hay que realizar o no procesos de actualización. Simplemente seleccione Continuar...

Con eso ya tiene Drupal en su última versión, felicitaciones!

Puede que usted tenga archivos importantes dentro del directorio misc, generalmente cuando utiliza jquery update o similares, en ese caso recuerde hacer una copia de seguridad de esos archivos.

Proceso de actualización de los módulos:

Antes que nada debe tener en cuenta que esto no es estrictamente necesario, sólo debería actualizar sus módulos en caso de que sepa que esta haciendo.

La actualización de un módulo consiste en reemplazar todo el módulo por la ultima versión disponible de la rama que esté utilizando.

Esto de las ramas es importante, si usted está utilizando la versión 1.3 de un módulo, debería actualizar a la última de la rama 1.x, por ejemplo 1.4. Puede suceder que exista la versión 2.3 de ese mismo módulo, en ese caso, lea bien la documentación para saber que debe hacer.

Por ejemplo, en esta actualización instale la ultima versión de rules. Especialmente porque estaba utilizando una Release Candidate (Versión candidata) y hace unos días salió al versión estable.

cd sites/all/modules
wget http://ftp.drupal.org/files/projects/rules-6.x-1.0.tar.gz
rm -R rules
tar xzf rules-6.x-1.0.tar.gz

Como rules necesita hacer cambios en la base de datos, en la pantalla de Update.php figura

Actualización de rules

Luego, el asistente le indicará como se están ejecutando los cambios.

Actualizando...

Y finalmente le mostrará los cambios que realizó.

Cambios en la base de datos

A sufrir un poco...

Por supuesto todo esto fue una “simulación”, primero actualicé todo el sitio en mi casa, tomando unos mates, como solemos hacer en Argentina.

La complejidad de las actualizaciones dependerá entre otros factores, de cuantos sitios poseea en su instalación multisitio.

Mientras más sitios poseea, más controles deberá hacer, y por supuesto más cuidado.

Bien, manos a la obra, basta de visitas.

Para actualizar un sitio en producción, debe desactivar el sitio. Esto se logra desde Administración > Configuración de Sitio > Mantenimiento del sitio.

Cambiar a modo Mantenimiento

Desde el momento en que haga eso, sólo los usuarios con el permiso 'Acceder a la páginas de Administración' podrán seguir visitando el sitio.

El proceso luego es lo mismo que en el servidor local. Salvo que ahora no hay mucho margen para errores.

Finalmente, cuando haya terminado todo, debería ver este mensaje en el reporte de estado, en un relajante color verde:

Actualizaciones completadas

Recuerde volver a activar su sitio para que los usuarios puedan volver a acceder a él.

Opciones ante urgencias.

Es claro que actualizar un sitio puede llevar un tiempo considerable si no se tiene práctica.
Más aún puede que usted este muy ocupado para ponerse a actualizar el sitio.

En ese caso, y solo para el core, usted puede instalar un parche.

Los parches sólo corrigen el error pero no le indican a drupal que fue actualizado, por lo que su sitio, aunque esté seguro, seguirá figurando como no actualizado.

Para instalar un parche debe acceder al informe de la vulnerabilidad corregida en esa versión de drupal. Y descargar el parche para la rama indicada.

Parches para actualizar drupal

Luego para aplicar el parche haga lo siguiente.

cd drupal
patch -p0 < SA-CORE-2009-006-6.11.patch

Esta opción le permitirá tener seguro su sitio hasta que tenga tiempo de actualizarlo correctamente.

Te invito a leer también...

Compartir este material en...

Comentarios

Me parece excelente la ayuda que brinda este sitio. Quisiera hacer algunas acotaciones a este documento:

En primer lugar, es mucho mejor comprimir usando bzip2 que gzip, ya que a veces he encontrado resultados de casi la mitad de tamaño que con este último, y la única diferencia está en la sintaxis del comando: "tar cfj archivo.tbz2", y para descomprimir, lógicamente se cambia la z por la j de igual forma: tar xfj (particularmente yo prefiero comprimir con una sola extensión, ya que al hacero con dos el descompresor hace dos tareas distintas y gasta más tiempo, es decir, prefiero "tgz" o "tbz2" antes que "tar.gz" o "tar.bz2").

En segundo lugar, quisiera acotar que debido a la naturaleza de las actualizaciones, en realidad es muchísimo más simple respaldar el directorio "sites" y la base de datos, luego dejar el sitio Offline, y actualizar nomás.. porque lo peor que podría pasar sería estropear la base de datos, y en último caso bastaría con reinstalar drupal desde cero, con la carpeta sites y la base de datos respaldada. Esto ahorra muchísimo tiempo --y en la práctica tiene los mismos riesgos-- que tener una copia local del sitio y probar las actualizaciones localmente. Especialmente cuando salen dos actualizaciones en menos de una semana (como pasó con el 6.11 y 6.12).

Saludos.

Hola:

Ante todo muchísimas gracias por este comentario. Es bueno ver una crítica constructiva.

Con respecto a la primera parte. Si es verdad, muy acertado el consejo, lo mio es más que nada costumbre, ¡Haganle caso a él, es mejor su forma! :)

Con respecto a la segunda, difiero un poco. Es válida la aclaración siempre y cuando el sitio tenga bajos tráfico web.
Sin embargo para algún sitio con mucho tráfico, como un diario digital o alguna página gubernamental, no probar antes en un servidor local puede ser bastante desastroso.

Las pruebas para ver que todo funcione correctamente me llevaron cerca de una hora. Y eso, porque no ocurrió nada malo. Si hubiese pasado algo más grave, el sitio habría estado fuera de linea durante todo el transcurso de la actualización.

Y una vez que se modificaron los archivos, volver atrás también puede ser complejo, hay que ser cuidadoso en las vueltas atrás.

Creo que el enfoque es válido en sitios con pocas visitas, como este :P, pero en situaciones más críticas, definitivamente hacer todo en vivo no es una buena idea.

Sebastián, nuevamente muchas gracias por tu comentario.
Saludos!

ya hacía falta algo así, ya que muchas páginas lo dan por sentado y no te explican bien que pasos seguir

ahora, no se si puedan poner un tutorial de como exportar los nodos, ya que yo tengo una instalación de drupal muy "sucia", y quiero volver a hacer mi web pero rescatando los nodos.

en fin, espero se pueda, pero mil gracias por tener una web así acerca de Drupal, desde su inicio los vengo siguiendo y se ve un gran futuro para Cuenco Digital.

saludos :D

Bueno el artículo.

Sin embargo me queda una duda.
Antes de copiar la nueva versión del core, debemos eliminar todos los archivos menos el directorio sites. Bueno. Que pasa con el acceso al sitio mientras estemos copiando la nueva versión?

Hice una prueba y me da la página de instalación del Drupal como si fuera una "fresh" instalación... Una vez todos los archivos copiados (puede tardar unos 15 minutos en mi caso), ya me muestra la página de off-line.

Gracias !!!

Hola Karim:

No es necesario estar esperando 15 minutos para subir los archivos.

Supongo que estás utilizando FTP. en ese caso, tal vez sea mejor copiar todos los archivos a un directorio temporal


/nueva_version

Y una vez que hayas subido todos los archivos, recién ahí borrar los otros. Luego copiar archivos desde el FTP es cuestión de segundos.

Espero que sea de ayuda.
Saludos

Yo soy más bruto, machaco la nueva versión directamente encima de la anterior a excepción de sites, eso si, antes hago las pertinentes copias de seguridad. Cuando tengo tiempo hago pruebas en local, pero el tiempo.... es algo escaso.

te felicito por el sitio, muy bueno. Ademas, andaba precisando un empujoncito con drupal mas alla de la documentacion oficial,que aun no la mire por falta de timepo.Al principio estaba media asustada con el tema de picar codigo sobre codigo de drupal, pero bueno de a poco ire viendo como va la cosa , drupal no me va a ganar!(a menos de que sea peor programando de lo que pense :P jejeje)....todavia no arranque, pero tuve q pensarlo para saber si valia la pena usarlo, o hacer algo desde cero.

Saludos, segui asi !