Skip to main content

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 desatendido
  • sudo 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.