Actualización de versión

En esta entrada vamos a explicar cómo cambiar la IP de un servidor Zentyal.

Consideraciones

La actualización a Zentyal 8.0 se debe realizar desde un Zentyal 7.1 totalmente actualizado. Las versiones anteriores a 7.1 se deberán actualizar progresivamente. La sucesión completa de actualizaciones desde la versión Zentyal 3.2 es la siguiente:

3.2 -> 4.x -> 5.x -> 6.0 -> 6.1 -> 6.2 -> 7.0 -> 7.1 -> 8.0

Advertencia

Estas instrucciones son válidas para actualizar la versión 7.1 de la Edición Development a la version 8.0 de la Edición Development. Para ediciones comerciales, debemos ponernos en contacto con el Equipo de Soporte. Si no tenemos acceso al Portal de Soporte [1] debemos contactar al Equipo de Zentyal [2] para solicitar acceso.

[1]Portal de soporte: https://zentyal.atlassian.net/servicedesk/customer/portal/4/
[2]Contacto: https://zentyal.com/es/contactanos/

Antes de comenzar con la actualización, recomendamos encarecidamente realizar una serie de comprobaciones previas para tratar de minimizar posibles incidencias. Dichas comprobaciones se detallan en la siguiente sección.

Adicionalmente, es de vital importancia disponer de un backup del servidor antes de proceder con la actualización. La actualización es un proceso complejo y puede fallar dejando el sistema dañado o, incluso, irrecuperable.

Advertencia

Recordad que una backup de configuración no es una copia de seguridad completa tal y como se detalla aquí [3].

[3]Backup de configuración: https://doc.zentyal.org/es/backup-conf.html

Comprobaciones previas

A continuación se indican las acciones a comprobar previas a la actualización.

Versión del paquete zentyal-core

Para poder actualizar el servidor Zentyal a la versión 8.0 necesitaremos tener instalada la versión 7.1.1 o superior del paquete zentyal-core:

dpkg -l zentyal-core

Errores en los logs

Una de las tareas más importantes es confirmar que en los archivos de log más críticos del sistema no haya errores. Los archivos que deberemos revisar como mínimo serán:

  • /var/log/zentyal/zentyal.log
  • /var/log/syslog

Espacio en disco

Al ser una actualizar major, el tamaño en disco necesario mínimo es de 3 GB para la partición / y 250 MB para la partición /boot

df -h

Acceso a Internet

Para poder descargar los paquetes necesarios para realizar la actualización es necesario que el servidor tenga acceso a Internet:

ping -c5 google.com

Acceso a los repositorios

Otra de las tareas críticas a revisar es el acceso a los repositorios de Ubuntu y Zentyal. Para ello, bastará con ejecutar el siguiente comando para confirmar que no hay errores:

sudo apt update

Paquetes disponibles

Para revisar si el sistema operativo está actualizado, tendremos que ejecutar los siguientes comandos:

sudo apt update
sudo apt list --upgradable

Paquetes rotos

Es imperativo que revisemos que no haya ningún paquete roto, de lo contrario, la actualización nos fallará.

dpkg -l | egrep -v '^(ii|rc)'

En caso de haber paquetes en mal estado, en la sección de Troubleshooting [4] se explica como tratar de repararlos.

[4]Troubleshooting: https://doc.zentyal.org/es/upgrade.html#id15

Errores en las bases de datos

Otra tarea importante a revisar si hay algún error en las bases de datos alojadas en MySQL que usa Zentyal para sus módulos:

mysqlcheck -u root -p$(sudo cat /var/lib/zentyal/conf/zentyal-mysql.passwd) --all-databases 2> /dev/null

En caso de usar el módulo controlador de dominio [5], también es altamente recomendable confirmar su estado:

sudo samba-tool dbcheck --cross-ncs

En caso de detectar un error en esta última base de datos, tendremos que seguir [6] este enlace.

[5]Controlador de dominio: https://doc.zentyal.org/es/directory.html
[6]Documentación sobre la base de datos de Samba: https://wiki.samba.org/index.php/Dbcheck

Intefaces virtuales

La funcionalidad de interfaces virtuales está deprecated en Zentyal 8.0, por lo que antes de proceder con la actualización es importante revisar que no haya ninguna interfaz de red configurada con dicha funcionalidad.

Reporte del sistema

Podemos obtener los resultados de las comprobaciones mencionadas en este apartado y muchas más información generando un reporte del sistema [7] y analizándolo antes de programar la actualización del servidor.

[7]Reporte del sistema: https://doc.zentyal.org/es/smart-admin.html#informe-del-estado-del-sistema

Actualización

Una vez que hayamos revisado el sistema y confirmado su estabilidad, podremos proceder a su actualización. Tenemos dos formas de hacerlo:

1. Desde el botón disponible en el Dashboard de la Interfaz de Administración de Zentyal.

Botón de la actualización

Botón de la actualización

Advertencia

Si el servidor no tiene conexión a Internet, no se mostrará el botón.

Una vez iniciado el upgrade, podremos ver el proceso en una ventana modal y en el archivo de log /var/log/zentyal/upgrade.log.

Actualización en progreso

Actualización en progreso

Cuando la actualización haya terminado, deberíamos de ver un mensaje de éxito o fracaso.

Actualización terminada con éxito

Actualización terminada con éxito

Advertencia

Si no obtenemos ninguno de esos mensajes, es posible que la sesión del navegador web haya expirado, por lo que tendremos que revisar el archivo de log /var/log/zentyal/zentyal.log. Si la actualización ha terminado, simplemente tendremos que refrescar la página.

2. Desde la línea de comandos (opción recomendable):

sudo bash /usr/share/zentyal/release-upgrade

# Con debug:
sudo bash -x /usr/share/zentyal/release-upgrade

Advertencia

La terminal desde donde se esté ejecutando el comando no podrá cerrarse hasta que el proceso haya terminado.

Truco

Una buena práctica es almacenar en un archivo de texto el output generado por el script por si fuera necesario analizarlo con detenimiento.

Comprobaciones posteriores

Una vez que la actualización haya terminado, tendremos que revisar lo siguiente antes de reiniciar el servidor:

1. La versión de Ubuntu es 22.04:

lsb_release -a

2. Los paquetes de Zentyal se han actualizado a 8.0:

dpkg -l | egrep 'zen(tyal|buntu)-'

3. No hay paquetes rotos:

dpkg -l | egrep -v '^(ii|rc)'

4. El servicio networking está deshabilitado:

systemctl is-enabled networking

# En caso de estar habilitado todavía
sudo systemctl disable networking

5. El antiguo archivo de configuración de red /etc/network/interfaces ya no existe:

sudo rm -f /etc/network/interfaces

6. Los siguientes servicios están deshabilitados y parados:

sudo systemctl status resolvconf named-resolvconf

# En caso de estar habilitados o ejecutándose todavía
sudo systemctl disable --now resolvconf named-resolvconf

7. Si todo lo anterior es correcto, podremos proceder a reiniciar el servidor.

8. Una vez que haya iniciado el servidor, debemos analizar los siguientes archivos de logs para confirmar que no se han producido errores:

  • /var/log/zentyal/zentyal.log
  • /var/log/syslog

9 Finalmente comprobaremos el funcionamiento de cada módulo para cerciorarnos de la estabilidad del mismo tras la actualización.

Troubleshooting

En caso de que la actualización haya fallado, deberemos de identificar el punto en el que se encuentra el servidor antes de considerar restaurar la copia de seguridad realizada antes de la actualización.

Estado actual del servidor

Para confirmar el estado del servidor tras el fallo durante la actualización, primero deberemos revisar el archivo de log /var/log/zentyal/upgrade.log. Después, podremos hacernos las siguientes preguntas para determinar si tenemos que restaurar una copia de seguridad.

1. ¿La versión de Ubuntu sigue siendo 20.04 y los paquetes de Zentyal son 7.1?
Si la respuesta es afirmativa y no hay paquetes rotos, no será necesario restaurar la copia de seguridad.
2. ¿Se actualizó la versión de Ubuntu a una diferente de 22.04?
Si la respuesta es afirmativa, habrá que restaurar una copia de seguridad, ya que Zentyal 8.0 se basa en Ubuntu 22.04.
3. ¿Se llegó a actualizar algún paquete de Zentyal?
Si ningún paquete llegó a actualizarse pero Ubuntu se se actualizó a 22.04, podremos analizar el archivo de log /var/log/zentyal/upgrade.log y ejecutar el script de actualización de nuevo para tratar de actualizar Zentyal.
4. ¿Se actualizaron los paquetes de Zentyal a una versión distinta de 8.0?
En caso afirmativo, habrá que restaurar la copia de seguridad.
5. ¿Hay paquetes rotos?
Si Ubuntu y Zentyal se actualizaron pero hay paquetes rotos, podremos tratar de solucionarlos sin necesidad de restaurar una copia de seguridad.

Paquetes rotos

Si tenemos paquetes rotos, podremos tratar de solucionarlos con los siguientes comandos.

Para solucionar todos los paquetes a la vez:

sudo dpkg --configure --force-confdef -a

Advertencia

Posiblemente sea necesario ejecutar el comando varias veces.

En caso de que no haya funcionado, habrá que hacerlo de paquete en paquete:

sudo dpkg --configure --force-confdef nombre_del_paquete

Base de datos MySQL

Si tenemos errores en el archivo de log /var/log/zentyal/zentyal.log con el servicio mysql como el siguiente:

2024/04/26 11:04:02 ERROR> MyDBEngine.pm:200 EBox::MyDBEngine::_connect - Connection DB Error: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
at Connection DB Error: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
at /usr/share/perl5/EBox/MyDBEngine.pm line 200

Y el servicio está parado:

sudo systemctl status mysql

Tendremos que comprobar si el directorio /var/log/mysql/ existe, en caso de que no exista:

sudo mkdir -v -m 0750 /var/log/mysql
sudo chown -R mysql:adm /var/log/mysqll

En caso de que exista, tendremos que ejecutar los siguientes comandos:

sudo chown -R mysql:adm /var/log/mysql
sudo chmod -R 0750 /var/log/mysql

Finalmente, reiniciamos el servicio. En caso de que el error persista, habrá que analizar los archivos de log /var/log/syslog y /var/log/mysql/error.log:

sudo systemctl restart mysql
sudo systemctl status mysql

Módulo de antivirus

Tras actualizar a Zentyal 8.0, si el módulo de Antivirus nos sale como STOPPED y en el log /var/log/clamav/clamav.log vemos el siguiente mensaje:

ERROR: LOCAL: Socket file /var/run/clamav/clamd.ctl could not be bound: Permission denied

Lo que tenemos que hacer es modificar el propietario del directorio /var/run/clamav/ y posteriormente, reconfigurar el paquete, para ello, ejecutaremos los siguientes comandos:

sudo -i
chown clamav:clamav /var/run/clamav/
echo "clamav-daemon     clamav-daemon/debconf boolean false" | debconf-set-selections
DEBIAN_FRONTEND=noninteractive dpkg-reconfigure clamav-daemon

Una vez que tenemos el paquete reconfigurado, ya sólo nos quedará reiniciar el módulo:

sudo zs antivirus restart