Actualizar Debian 12 a Debian 13 (trixie)
Actualizar Debian 12 a Debian 13 no suele ser complicado si ya tienes una instalación de Debian 12 limpia y totalmente dominada. En esta nota (que yo mismo consulto) vamos a ver las principales etapas de la migración.
Si quieres maximizar un poco más la estabilidad, te aconsejo esperar a la versión 13.1, que sale poco después de la 13.0, un sábado.
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.
Por qué migrar a Debian 13 (sin precipitarse)
Sección titulada «Por qué migrar a Debian 13 (sin precipitarse)»Usas un servidor Debian para alojar WordPress, por ejemplo.
WordPress necesita PHP, y está pensado para la versión de PHP más usada del momento. Por eso tienes que seguir las versiones, o un día u otro te quedarás bloqueado en las actualizaciones.
Debian aporta una mejora de rendimiento (nuevo planificador, http/3, etc.).
Verás cada vez más documentación en línea que remite a Debian 13 y cada vez menos a Debian 12. Para poder fiarte de ella y estar al día, tienes que seguir. Lo mismo digo para quienes aún se resisten a usar systemd en lugar de initrd.
Qué (malas) sorpresas te esperan
Sección titulada «Qué (malas) sorpresas te esperan»¡Abracadabra!
-
Desaparecen las órdenes
last,lastbylastlog. Revisa tus scripts si las usas. -
Parada crítica de tu servidor MariaDB y rearranque imposible: comprueba que tu servidor MariaDB arranca correctamente y sin errores antes de actualizar Debian, porque la reparación es imposible si cambia la versión de MariaDB.
-
Si tienes repositorios externos (no oficiales), cuenta con que quedarán desactivados y que tus paquetes específicos pueden ser degradados o desinstalados.
1. Copias de seguridad
Sección titulada «1. Copias de seguridad»Una actualización puede salir mal, destruir datos o dejar el servidor sin arrancar.
Yo respaldo los servidores con BackupPC, RCLONE y snapshot (sí, los 3 sistemas). Las bases de datos deben volcarse a SQL antes de cualquier copia de ficheros.
Comprueba que tu sistema está bien respaldado.
Que las copias están en remoto.
Haz además un snapshot si es una máquina virtual.
Reserva tiempo para reparar en caso de problema.
Ten la capacidad de reiniciar en modo rescue.
2. Actualización simple de tu Debian 12
Sección titulada «2. Actualización simple de tu Debian 12»Normalmente tu servidor ya está al día, porque eres concienzudo. Si no, es imprescindible ponerlo al día antes:
apt updateapt upgradereboot # si hace falta3. Parar Puppet
Sección titulada «3. Parar Puppet»Si usas Puppet, párala. Habrá que revisar las recetas para la nueva versión del sistema.
systemctl stop puppet4. Elimina los paquetes no Debian
Sección titulada «4. Elimina los paquetes no Debian»Si has instalado paquetes no oficiales, hay que quitarlos. Los volverás a poner más tarde, si aún funcionan.
Para encontrar esos paquetes, usa estas órdenes:
apt-get -s purge '?and(?installed,?not(?any-version(?origin(Debian))),?not(?name(puppet-agent)))'Si la lista de paquetes a purgar parece correcta, se aplica:
apt-get purge -y '?and(?installed,?not(?any-version(?origin(Debian))),?not(?name(puppet-agent)))'Se borra el paquete puppet sin purgarlo:
apt remove puppet-agent5. Elimina los paquetes obsoletos
Sección titulada «5. Elimina los paquetes obsoletos»Un paquete obsoleto sigue instalado pero ya no existe en los repositorios. Debian deja de darle soporte de seguridad alrededor de un año después de la salida de trixie.
Primero se mira la lista:
apt list '?obsolete'Léela antes de purgar: un paquete que instalaste tú mismo desde una fuente externa también aparece aquí.
apt purge '?obsolete'6. Elimina los restos de ficheros de configuración
Sección titulada «6. Elimina los restos de ficheros de configuración»Se comprueba qué ficheros de ejemplo de configuración hay que borrar.
find /etc -name '*.dpkg-*' -o -name '*.ucf-*' -o -name '*.merge-error'Luego se borran de verdad si todo está bien:
find /etc \( -name '*.dpkg-*' -o -name '*.ucf-*' -o -name '*.merge-error' \) -type f -delete7. Desactivar el anclaje de APT (pinning)
Sección titulada «7. Desactivar el anclaje de APT (pinning)»Comprueba el fichero o el directorio /etc/apt/preferences o /etc/apt/preferences.d
Sirven para anclar versiones de paquetes. Comprueba qué hay que hacer, pero lo más probable es que haya que desactivar esos ficheros.
8. Comprobación del estado de los paquetes
Sección titulada «8. Comprobación del estado de los paquetes»No debe quedar ningún paquete en un estado de instalación sin terminar ni en ningún otro:
dpkg --audit9. Comprobar los paquetes retenidos
Sección titulada «9. Comprobar los paquetes retenidos»Un paquete retenido (hold) se mantiene en su versión actual y se niega a subir. La lista debe estar vacía antes de la migración; si no, la actualización se detiene en un conflicto de dependencias difícil de leer.
apt-mark showholdQuita la retención de lo que aparezca, salvo que tengas una razón concreta para conservarla:
apt-mark unhold <paquete>10. Actualizar los ficheros sources.list
Sección titulada «10. Actualizar los ficheros sources.list»En /etc/apt/sources.list o /etc/apt/sources.list.d/*, sustituye bookworm por trixie y normalmente obtienes:
deb http://deb.debian.org/debian trixie main contrib non-free non-free-firmwaredeb http://deb.debian.org/debian trixie-updates main contrib non-free non-free-firmwaredeb http://security.debian.org trixie-security main contrib non-free non-free-firmwareIMPORTANTE: 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 bookworm por trixie en una sola orden:
sed -i 's/bookworm/trixie/g' *.listEl nuevo formato deb822
Sección titulada «El nuevo formato deb822»Debian 13 espera sus fuentes en /etc/apt/sources.list.d/debian.sources, en formato deb822: una estrofa por repositorio, un campo por línea. El formato histórico de una sola línea sigue funcionando, pero un fichero .sources no tiene extensión .list, así que la orden sed de arriba no lo toca. Comprueba que el directorio no contenga ninguno antes de dar tus fuentes por actualizadas.
Los mismos repositorios que arriba, en deb822:
/etc/apt/sources.list.d/debian.sources:
Types: debURIs: https://deb.debian.org/debianSuites: trixie trixie-updatesComponents: main contrib non-free non-free-firmwareSigned-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: debURIs: https://security.debian.org/debian-securitySuites: trixie-securityComponents: main contrib non-free non-free-firmwareSigned-By: /usr/share/keyrings/debian-archive-keyring.gpgUn mismo repositorio solo debe declararse una vez. Si creas este fichero, vacía o borra el antiguo /etc/apt/sources.list.
11. Actualizar la lista de paquetes disponibles
Sección titulada «11. Actualizar la lista de paquetes disponibles»apt update12. Control del espacio en disco antes de actualizar
Sección titulada «12. Control del espacio en disco antes de actualizar»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/.13. Limpieza
Sección titulada «13. Limpieza»apt cleanapt --purge autoremove14. Comprobar el metapaquete del núcleo
Sección titulada «14. Comprobar el metapaquete del núcleo»El metapaquete del núcleo (linux-image-amd64 en un servidor de 64 bits clásico) sigue automáticamente las versiones del núcleo. Sin él, la actualización deja el núcleo antiguo en su sitio y el servidor rearranca con ese.
dpkg -l 'linux-image*' | grep ^ii | grep -i metaSi la orden no devuelve nada, instala el metapaquete correspondiente a tu arquitectura antes de la actualización:
apt install linux-image-amd6415. Abrir una sesión desacoplable
Sección titulada «15. Abrir una sesión desacoplable»Las dos órdenes que siguen duran mucho. Lanzadas directamente en una sesión SSH, un corte de red las interrumpe en plena faena y deja el sistema migrado a medias. Una sesión screen o tmux sigue corriendo en el servidor aunque tu conexión se caiga.
apt install tmuxtmux new -s upgradeTras un corte, vuelve a conectarte por SSH y recupera el control:
tmux attach -t upgradeDesde la consola KVM no hace falta.
16. Actualización mínima
Sección titulada «16. Actualización mínima»Este proceso actualiza los paquetes del sistema que no añaden nuevas dependencias sobre paquetes nuevos ni las quitan:
DEBIAN_FRONTEND=noninteractive UCF_FORCE_CONFFOLD=1 NEEDRESTART_MODE=a apt -o Apt::Get::Assume-Yes=true -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade --without-new-pkgs17. Actualización final
Sección titulada «17. Actualización final»DEBIAN_FRONTEND=noninteractive UCF_FORCE_CONFFOLD=1 NEEDRESTART_MODE=a apt -o Apt::Get::Assume-Yes=true -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" full-upgradeapt --purge autoremoveSi todo ha ido bien, hay que reiniciar el sistema.
En caso de problema, analiza la situación antes de reiniciar.
