Problema
En entornos con Proxmox VE es habitual crear contenedores LXC a partir de plantillas de Debian bookworm y, posteriormente, ejecutar scripts de ayuda que automatizan tareas de mantenimiento. Cuando el host se actualiza o cuando el propio script se vuelve dependiente de una versión distinta (por ejemplo, Debian trixie), el contenedor sigue reportando su codename original. El script detecta “unsupported version 12” y aborta, dejando al contenedor inoperativo después de un intento de “apt full‑upgrade”. El resultado típico es un contenedor que no arranca, pérdida de la URL de acceso y la necesidad de restaurar una copia de seguridad.
Causa
- Desfase entre la versión del contenedor y la esperada por el script – Los scripts suelen comprobar
$(lsb_release -cs)y detenerse si no coincide con el codename codificado. - Fuentes APT todavía apuntan a la versión antigua – Cambiar
bookwormportrixieen/etc/apt/sources.listsin actualizar los repositorios de seguridad o backports genera dependencias rotas. - Plantilla LXC bloqueada – Algunos contenedores se crean con la opción
--features=nesting=1y una imagen “frozen”, lo que impide queaptrealice una migración mayor sin intervención manual. - Cambios de paquetes críticos – Entre bookworm y trixie se sustituyen paquetes como
systemd,glibcylibc6. Si el contenedor no ejecuta una actualización completa, el arranque falla por incompatibilidades de biblioteca.
Solución
1. Preparar una copia de seguridad fiable
Antes de tocar el sistema de archivos, crea una snapshot o exporta el contenedor:
pct snapshot <CTID> pre-upgrade
# o bien
pct backup <CTID> --mode stop
2. Cambiar el codename en sources.list y en los archivos de sources.list.d
Reemplaza todas las ocurrencias de bookworm por trixie. Un solo sed suele ser suficiente, pero verifica los archivos adicionales:
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list.d/*.list 2>/dev/null || true
3. Actualizar la lista de paquetes y realizar una migración mayor
Ejecuta los comandos en el orden recomendado por Debian para una actualización de versión:
apt update
apt upgrade -y # actualiza paquetes menores
apt full-upgrade -y # permite cambios de dependencias mayores
apt -f install -y # repara paquetes rotos si aparecen
Durante la ejecución, presta atención a los mensajes que soliciten la eliminación o sustitución de paquetes críticos (por ejemplo, systemd). Acepta las propuestas siempre que no impliquen la eliminación de servicios esenciales del contenedor.
4. Revisar y adaptar los scripts helper
Abre el script y localiza la sección de verificación de versión. Cambia la condición para que acepte tanto bookworm como trixie, o comenta la línea si el contenedor ya está actualizado:
# ejemplo de verificación original
if [ "$(lsb_release -cs)" != "bookworm" ]; then
echo "Unsupported version"
exit 1
fi
Modifícalo a:
if ! grep -qE "bookworm|trixie" <<< "$(lsb_release -cs)"; then
echo "Unsupported version"
exit 1
fi
5. Reiniciar y validar el contenedor
Una vez completada la actualización, reinicia el contenedor desde la UI de Proxmox o con:
pct restart <CTID>
Si el contenedor arranca sin errores, ejecuta nuevamente el script helper para confirmar que la advertencia desapareció.
6. Alternativa: recrear el contenedor con una plantilla más reciente
Si la migración falla repetidamente, exporta los datos críticos (bases de datos, configuraciones) y crea un nuevo contenedor usando la plantilla debian-12-standard. Copia los volúmenes y restaura los servicios. Esta vía elimina problemas de paquetes huérfanos y garantiza compatibilidad total con los scripts.
Cuándo aplicar esta solución
- Sí: el script muestra “unsupported version” y el contenedor sigue en Debian bookworm mientras el host ya ejecuta Debian trixie.
- Sí: necesitas versiones más recientes de paquetes internos (por ejemplo,
peanut6.0.0) que solo están en trixie. - No: el contenedor aloja una aplicación que no ha sido certificada para trixie y no puedes tolerar tiempo de inactividad. En ese caso, mantén la versión actual y parchea el script para que ignore la comprobación.
Código
# 1. Snapshot
pct snapshot 101 pre-upgrade
# 2. Cambiar codename
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list.d/*.list 2>/dev/null || true
# 3. Actualizar
apt update
apt upgrade -y
apt full-upgrade -y
apt -f install -y
# 4. Ajustar script (ejemplo)
sed -i 's/\(if \[ "\$(lsb_release -cs)" != "\)bookworm\("\] ; then\)/\1bookworm\|trixie\2/' /usr/local/bin/helper.sh
# 5. Reiniciar contenedor
pct restart 101
Verificación
-
Comprobar la versión del OS
lsb_release -aLa salida debe indicar
Codename: trixie. -
Ejecutar el script helper
/usr/local/bin/helper.shNo debe aparecer el mensaje de versión no soportada.
-
Validar servicios críticos
- Verifica que el servicio de monitorización (por ejemplo,
peanut) se inicia:systemctl status peanut. - Comprueba que la URL de la aplicación responde con
curl -I http://<IP>:<PUERTO>.
- Verifica que el servicio de monitorización (por ejemplo,
-
Revisar logs de arranque
journalctl -b -u systemdNo deben existir errores de librerías faltantes.
Notas adicionales
- Snapshots vs backups: las snapshots son rápidas pero dependen del mismo storage; para migraciones entre nodos, usa
pct backup. - Paquetes de seguridad: después de la migración, habilita el repositorio
securityde trixie para recibir actualizaciones críticas. - Configuraciones personalizadas: algunos scripts modifican archivos bajo
/etc/apt/apt.conf.d/. Revísalos antes de la actualización para evitar queaptignore firmas o cambie la política deallow-downgrades. - Rollback rápido: si el contenedor no arranca, restaura la snapshot con
pct rollback <CTID> pre-upgrade.
Con este enfoque puedes alinear tus contenedores LXC a la versión de Debian que exigen los scripts helper, evitar el temido “unsupported version” y mantener tus servicios de homelab o producción operativos sin perder datos.