APT Upgrade - Modos Desatendido vs Manual
Problema común
Por defecto, apt upgrade -y
se queda colgado esperando input cuando hay conflictos en archivos de configuración modificados, rompiendo la automatización en servidores. En situaciones de mantenimiento desatendido, es necesario obviarlo.
Tipos de preguntas en apt upgrade
1. Confirmación inicial (lista de paquetes)
The following packages will be upgraded:
zabbix-agent2 nginx mysql-server (y otros 25 paquetes)
Do you want to continue? [Y/n]
2. Conflictos de configuración (el problema real)
Configuration file '/etc/zabbix/zabbix_agent2.conf'
==> Modified (by you or by a script) since installation.
==> Package distributor has shipped an updated version.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : start a shell to examine the situation
Soluciones para upgrades desatendidos
Método 1: Opciones en línea de comandos (puntual)
# Mantener siempre la configuración actual (recomendado)
sudo apt -o Dpkg::Options::="--force-confold" upgrade -y
# Usar siempre la nueva configuración del paquete
sudo apt -o Dpkg::Options::="--force-confnew" upgrade -y
# Comando más completo (recomendado para scripts)
sudo DEBIAN_FRONTEND=noninteractive apt \
-o Dpkg::Options::="--force-confold" \
-o Dpkg::Options::="--force-confdef" \
upgrade -y
Cada uno de los métodos tiene su necesidad de entenderlo. La opcion usar la nueva configuración, puede ser muy problemática, pues por norma general, muchos o simplemenet algunos ficheros de configuración pueden estar modificados y su reseteo a la versión nueva, puede dejar el servicio inconsistente e incluso en algunos casos, perder la accesibilidad al servidor (sshd). El desatendido, en el que queremos conservar el fichero atcual, es lo más común, pero puede hacernos olvidar que a veces hay cambios que hay que aplicarlos. Vivimos tiempos de inmediatez, y de pocos recursos para administración de sistemas, y esto puede ser un problema.
Método 2: Configuración global permanente (recomendado)
# Crear archivo de configuración global
sudo tee /etc/apt/apt.conf.d/50unattended-upgrades << 'EOF'
Dpkg::Options {
"--force-confold";
"--force-confdef";
}
EOF
Resultado después de crear el archivo:
sudo apt upgrade -y
→ Totalmente desatendidosudo apt upgrade
→ Solo pregunta confirmación inicial, conflictos automáticos
Método 3: Variable de entorno (temporal)
# Para la sesión actual
export DEBIAN_FRONTEND=noninteractive
sudo -E apt upgrade -y
# Para un comando específico
sudo DEBIAN_FRONTEND=noninteractive apt upgrade -y
Opciones de dpkg explicadas
Opción | Descripción | Equivale a presionar |
---|---|---|
--force-confold |
Mantener configuración actual | N (No) |
--force-confnew |
Usar nueva configuración del paquete | Y (Yes) |
--force-confdef |
Usar respuesta por defecto si existe | Automático |
--force-confask |
Preguntar siempre (modo interactivo) | Pregunta manual |
--force-confmiss |
Instalar archivos de configuración faltantes | Automático |
Sobreescribir configuración global (uso manual)
Cuando tienes configuración global pero quieres control manual
# Desactivar todas las opciones automáticas (preguntará todo)
sudo apt -o Dpkg::Options::="" upgrade
# Forzar modo interactivo completo
sudo apt -o Dpkg::Options::="--force-confask" upgrade
# Usar nuevas configuraciones temporalmente
sudo apt -o Dpkg::Options::="--force-confnew" upgrade
# Modo interactivo con interfaz gráfica
sudo DEBIAN_FRONTEND=dialog apt upgrade
Para casos específicos
# Solo preguntar en conflictos (recomendado para revisión)
sudo apt -o Dpkg::Options::="--force-confask" -o Dpkg::Options::="--force-confdef" upgrade
# Mostrar diferencias antes de decidir
sudo apt -o Dpkg::Options::="--force-confask" upgrade
# (Luego presionar 'D' para ver diferencias)
Verificar configuración actual
# Ver toda la configuración de apt
apt-config dump
# Ver solo opciones de dpkg
apt-config dump | grep -i dpkg
# Ver archivos de configuración de apt
ls -la /etc/apt/apt.conf.d/
# Verificar contenido del archivo personalizado
cat /etc/apt/apt.conf.d/50unattended-upgrades
Casos de uso recomendados
Para servidores de producción
Conservará el fichero original
# Configuración global permanente (Método 2)
sudo tee /etc/apt/apt.conf.d/50unattended-upgrades << 'EOF'
Dpkg::Options {
"--force-confold";
"--force-confdef";
}
EOF
# Uso diario
sudo apt update && sudo apt upgrade -y
Para actualizaciones críticas o manuales
# Revisar manualmente cada conflicto
sudo apt -o Dpkg::Options::="--force-confask" upgrade
# Ver diferencias antes de decidir
# Presionar 'D' cuando aparezca el conflicto
Para scripts automatizados
#!/bin/bash
# Script de actualización desatendida
sudo DEBIAN_FRONTEND=noninteractive apt update
sudo DEBIAN_FRONTEND=noninteractive apt \
-o Dpkg::Options::="--force-confold" \
-o Dpkg::Options::="--force-confdef" \
upgrade -y
# Log de cambios
echo "Upgrade completed at $(date)" >> /var/log/auto-upgrade.log
Para desarrollo/testing
# Aplicar siempre nuevas configuraciones
sudo apt -o Dpkg::Options::="--force-confnew" upgrade -y
# O mantener configuraciones personalizadas
sudo apt -o Dpkg::Options::="--force-confold" upgrade -y
Comandos de emergencia
Si apt se cuelga durante upgrade
# En otra terminal/SSH
sudo killall apt apt-get dpkg
# Reparar estado de paquetes
sudo dpkg --configure -a
sudo apt --fix-broken install
Limpiar locks si es necesario
sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/cache/apt/archives/lock
sudo dpkg --configure -a
Configuración recomendada paso a paso
Instalación inicial (una sola vez)
# 1. Crear configuración global
sudo tee /etc/apt/apt.conf.d/50unattended-upgrades << 'EOF'
Dpkg::Options {
"--force-confold";
"--force-confdef";
}
EOF
# 2. Verificar que funciona
sudo apt update
apt-config dump | grep -i dpkg
Uso diario
# Actualización desatendida completa
sudo apt update && sudo apt upgrade -y
# Actualización con revisión manual ocasional
sudo apt update
sudo apt -o Dpkg::Options::="--force-confask" upgrade
Notas importantes
--force-confold
es la opción más segura para producción (mantiene tus configuraciones)--force-confnew
puede sobreescribir configuraciones importantes- Siempre hacer backup de configuraciones críticas antes de upgrades mayores
- La configuración global se aplica a todos los usuarios del sistema
- Puedes combinar opciones para casos específicos
- Las opciones de línea de comandos siempre sobreescriben la configuración global
Hacer backups regulares de /etc son altamente reomendables (como todos los backups o copias de respaldo)
Troubleshooting común
Problema: "dpkg was interrupted"
sudo dpkg --configure -a
sudo apt --fix-broken install
Problema: "Could not get lock"
sudo lsof /var/lib/dpkg/lock-frontend
sudo killall apt apt-get
sudo rm /var/lib/dpkg/lock-frontend
Problema: Paquetes retenidos (held back)
# Ver paquetes retenidos
apt list --upgradable
# Forzar actualización
sudo apt full-upgrade
Esta configuración te permitirá tener upgrades completamente automatizados por defecto, pero con la flexibilidad de tomar control manual cuando sea necesario.
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.