Ir al contenido

Actualizar Debian 11 a Debian 12 (bookworm)

Christophe TREMBLAY-GUILLOUX
Christophe TREMBLAY-GUILLOUXIngeniero de sistemas Linux

Actualizar Debian 11 a Debian 12 no suele ser complicado si ya tienes una instalación de Debian 11 limpia y totalmente dominada. En esta nota (que yo mismo consulto) vamos a ver las principales etapas de la migración.

Todas las órdenes se lanzan como root, a través de la consola KVM del servidor o por SSH. Nada de sudo inútil, ponte root.

1. ¿Qué novedades de Debian 12 conviene conocer para un VPS?

Sección titulada «1. ¿Qué novedades de Debian 12 conviene conocer para un VPS?»

Aquí tienes la lista de los paquetes importantes para un VPS que se actualizarán si están instalados:

PaqueteDebian 11Debian 12
Apache2.4.542.4.57
Dovecot2.3.132.3.19
Exim4.944.96
GnuPG2.2.272.2.40
libc2.312.36
Linux5.106.1
MariaDB10.510.11
Nginx1.181.22
OpenLDAP2.4.572.5.13
OpenSSH8.4p19.2p1
Perl5.325.36
PHP7.48.2
Postfix3.53.7
PostgreSQL1315
Python 33.9.23.11.2
systemd247252

1.2/ Sustitución del paquete NTP por NTPsec

Sección titulada «1.2/ Sustitución del paquete NTP por NTPsec»

NTP es un protocolo que sirve para sincronizar el reloj del servidor.

Si ya tienes el paquete ntp, será sustituido por ntpsec, una versión reforzada en seguridad del paquete ntp.

Si no tienes ningún demonio ntp o equivalente, se instalará el paquete systemd-timesyncd.

Atención: no actualices los servidores que tengan el agente Puppet en una versión inferior a 7 antes de haber actualizado el servidor que aloja el puppetmaster.

Siempre hay que actualizar el puppetmaster antes que todos los demás servidores.

1.4/ Sustitución (no forzada) de rsyslog por systemd-journald

Sección titulada «1.4/ Sustitución (no forzada) de rsyslog por systemd-journald»

Esta es la parte desagradable para los veteranos.

Es buen momento para plantearse eliminar rsyslog en favor de systemd-journald y sus journals binarios, que muchas de las herramientas que seguramente usas no pueden leer.

Tras la migración a Debian 12, puedes eliminar rsyslog con estas órdenes:

bash
apt-mark auto rsyslog
apt autoremove

Para leer los journals binarios, en lugar de usar la orden tail (una lagrimita), habrá que hacer:

bash
journalctl -ef

Si aun así conservas rsyslog (al menos durante un tiempo), todos los logs se seguirán escribiendo por defecto en un único fichero, /var/log/syslog (los ficheros alternativos se pueden eliminar).

1.5/ Python3: cambio en la instalación de paquetes externos

Sección titulada «1.5/ Python3: cambio en la instalación de paquetes externos»

Por defecto, ya no está permitido instalar paquetes de Python que no estén empaquetados por Debian.

Es posible saltarse esta restricción, pero no es aconsejable.

A partir de ahora, los paquetes externos deben instalarse en entornos de Python aislados, mediante pipx o un entorno virtual (python -m venv).

Antes de actualizar, tu servidor debe estar respaldado en remoto, en otro datacenter. Y te aconsejo tener también una copia en un proveedor independiente y una copia en tu casa.

Una actualización puede salir mal, destruir datos o dejar el servidor sin arrancar: las bases de datos deben volcarse a SQL antes de cualquier copia de ficheros, y haz además un snapshot si es una máquina virtual. Reserva tiempo para reparar en caso de problema, y ten la capacidad de reiniciar en modo rescue.

Normalmente tu servidor ya está al día, porque eres concienzudo. Si no, es imprescindible ponerlo al día antes:

bash
apt update
apt upgrade
reboot # si hace falta

Aparece una nueva sección de repositorio. En un servidor, en teoría no hará falta, pero se puede incluir: non-free-firmware.

En /etc/apt/sources.list o /etc/apt/sources.list.d/*, sustituye bullseye por bookworm:

deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
deb http://security.debian.org bookworm-security main contrib non-free non-free-firmware

IMPORTANTE: el nombre que hay que poner es deb.debian.org, que apunta automáticamente al repositorio más cercano.

O situarse en el directorio y sustituir bullseye por bookworm en una sola orden:

bash
sed -i 's/bullseye/bookworm/g' *.list

2.2/ Actualizar la lista de paquetes disponibles

Sección titulada «2.2/ Actualizar la lista de paquetes disponibles»
bash
apt update

Este proceso actualiza los paquetes del sistema que no añaden nuevas dependencias sobre paquetes nuevos ni las quitan:

bash
apt -o Apt::Get::Assume-Yes=true -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade --without-new-pkgs

2.4/ Comprobación del espacio en disco antes de la actualización completa

Sección titulada «2.4/ Comprobación del espacio en disco antes de la actualización completa»

Te aconsejo limpiar el espacio en disco y comprobar el espacio disponible antes de la actualización completa:

bash
apt clean
apt --purge autoremove
apt -o APT::Get::Trivial-Only=true full-upgrade
[ ... ]
XXX upgraded, XXX newly installed, XXX to remove and XXX not upgraded.
Need to get xx.xMB of archives.
After this operation, AAAMB of additional disk space will be used.

Si no hay sitio suficiente, aparece este mensaje:

E: You don't have enough free space in /var/cache/apt/archives/.
bash
apt -o Apt::Get::Assume-Yes=true -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" full-upgrade
apt --purge autoremove

Si todo ha ido bien:

bash
reboot

En caso de problema, analiza la situación antes de reiniciar. Si prefieres no encargarte tú mismo, pide un presupuesto.