¿Cómo hago apt-get -y dist-upgrade sin un indicador de configuración de grub?

63

Per ¿ Hacer que apt-get (o aptitude) se ejecute con -y pero no solicite el reemplazo de los archivos de configuración?

Hice lo siguiente:

ec2run ami-3c994355 --region us-east-1 -n 1 -t m1.large -z us-east-1d

En la maquina:

sudo apt-get update
sudo apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade

Todavía recibo un mensaje que me pregunta qué archivo de configuración quiero usar. Estas son las líneas que vienen antes de la solicitud:

Setting up grub-pc (1.99-21ubuntu3.1) ...

entonces:

                         ┌───────────────────────────────────────────────────────┤ Configuring grub-pc ├───────────────────────────────────────────────────────┐                              
                         │ A new version of configuration file /etc/default/grub is available, but the version installed currently has been locally modified.  │                              
                         │                                                                                                                                     │                              
                         │ What do you want to do about modified configuration file grub?                                                                      │                              
                         │                                                                                                                                     │                              
                         │                                     install the package maintainer's version                                                        │                              
fratrik
fuente
Solución alternativa insatisfactoria: echo grub-pc hold | sudo dpkg --set-selections antes del primer comando apt-get
fratrik
Tengo el mismo problema y he probado muchas permutaciones / ortografías diferentes de Dpkg :: Options :: =, ninguna de las cuales ha funcionado. También intenté agregar las líneas al archivo /etc/apt/apt.conf.d/local como se indicó, y tampoco funcionaron. Esto parece ser una regresión en Precise.
Scott Ritchie
+1 - gracias por preguntar - fue sorprendentemente fácil encontrar este hilo a este molesto problema
cwd

Respuestas:

95

El /etc/default/grubarchivo se genera en el momento de la instalación del paquete, lo cual es necesario porque se integra con debconf. Esto significa que no puede tratarse como un archivo conf de dpkg, por lo que el manejo del archivo de configuración de dpkg no lo sabe.

En cambio, utiliza ucfuna herramienta Debian más sofisticada para manejar la configuración. Esto, desafortunadamente, no comprende las opciones de dpkg, por lo que la configuración Dpkg::Options::="--force-confdef"no ayudará. Que tiene su propia manera de hacer no-prontas mejoras, sin embargo, a través de las UCF_FORCE_CONFFNEWy UCF_FORCE_CONFFOLDvariables de entorno.

ucfutiliza debconfpara solicitar, por lo que configurar la interfaz de debconf noninteractivetambién silenciará el mensaje. Si realmente desea actualizaciones no interactivas, deberá hacerlo de todos modos: los paquetes arbitrarios pueden hacer preguntas a debconf (aunque generalmente no lo harán durante las actualizaciones).

Puede configurar la interfaz de debconf como única agregando DEBIAN_FRONTEND=noninteractivea su entorno, o puede configurarla permanentemente ejecutando dpkg-reconfigure debconfy seleccionando la interfaz no interactiva. Si está utilizando la interfaz no interactiva, obtendrá la respuesta predeterminada para cualquier pregunta que pueda hacer un paquete.

Para ucf, la respuesta predeterminada es "mantener el archivo existente".

Por lo tanto, el comando completo para hacer una actualización realmente 100% garantizada¹ sin preguntar sería.

sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade

¹: Es técnicamente posible que los paquetes utilicen otro método de solicitud que no sea debconf, pero esto va en contra de la política de Debian. Si se encuentra con dicho paquete, presente un error.

RAOF
fuente
8
Tenga en cuenta que si está probando esto en un shell, el comando sudo parece eliminar la variable DEBIAN_FRONTEND, es decir, necesita sudo DEBIAN_FRONTEND = no interactivo apt-get -y dist-upgrade mientras que DEBIAN_FRONTEND = no interactivo sudo apt-get -y dist-upgrade fallará
Scott Ritchie
funcionó bien para mí, gracias
cwd
También tenga en cuenta que esto se considera un error y están lanzando nuevas imágenes AMI que no deberían tener este problema: bugs.launchpad.net/ubuntu/+bug/1009294
Scott Ritchie
Y ahora se lanzan las nuevas AMI.
Scott Ritchie
@ScottRitchie: su comentario también funciona para ayudar a automatizar la instalación del paquete ganglia-webfrontend. Tiene un mensaje para solicitar un reinicio de apache para procesar el nuevo archivo de configuración, pero esto se rompe cuando se trata de automatizar la instalación de ganglios - agregó su comentario al frente y solucionó el problema
Jeremy Hajek
19

saliendo de la respuesta de RAOF y después de pasar innumerables horas buscando en la web para poder realizar una actualización completamente automática y una actualización dist en Ubuntu 12.04, se me ocurrió esto gracias al hecho de esta publicación ( https: // errores .launchpad.net / ubuntu / + source / grub / + bug / 239674 / comments / 1 ) señala que grub se adhiere a UCF y no a las opciones Dpkg cuando desea utilizar el paquete de mantenimiento grub menu.lst en lugar de cualquier menú local posible .lst ediciones.

Dejé las opciones Dpkg force-confnew para otros paquetes que no son grub.

#!/bin/bash

unset UCF_FORCE_CONFFOLD
export UCF_FORCE_CONFFNEW=YES
ucf --purge /boot/grub/menu.lst

export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get -o Dpkg::Options::="--force-confnew" --force-yes -fuy dist-upgrade
metral
fuente
1
Esto fue lo único que funcionó para mí. ¡Gracias!
wes
1
Entonces, digamos que también está usando unattended-upgradesy ha editado alguna configuración de grub: ¿cómo se configura UCF_FORCE_CONFFNEWen ese contexto? ¿O necesitarías que la lista negra de grub se actualice?
thom_nic
3

Las soluciones anteriores no funcionarían con 16.04. Esto funciona a partir de esta respuesta en el desbordamiento de la pila :

sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold"  install grub-pc
StringsOnFire
fuente
1

He estado discutiendo con el mismo problema en Ubuntu 18.04 los últimos días. Al iniciar una nueva instancia EC2 (específicamente ami-00035f41c82244dab), ejecuto un script de aprovisionamiento automatizado (a través de la configuración de datos de usuario suministrada en el momento de la inicialización), uno de los primeros pasos es ejecutar apt update / upgrade.

El script se bloquea mientras se le pregunta al usuario sobre los archivos GRUB modificados: primero / etc / default / grub, y luego /boot/grub/menu.lst. Dado que esto se ejecuta en modo desatendido cuando se suministra como Datos de usuario, el proceso se detiene y nunca se recupera.

De muchas búsquedas en Google, parece que este ha sido un problema de GRUB de larga duración de una forma u otra, con correcciones aplicadas y luego regresando nuevamente, por lo que puedo decir.

En última instancia, la única solución que he podido aplicar con éxito es el siguiente truco feo en mi script de aprovisionamiento. ¡Espero que pueda sacar a alguien de un apuro!

#!/bin/bash 

apt update

### Workaround: Pre-update /etc/default/grub and remove /boot/grub/menu.lst to avoid 'file changed' prompts from blocking completion of unattended update process
patch /etc/default/grub <<'EOF'
10c10
< GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0"
---
> GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0 nvme.io_timeout=4294967295"
19c19
< GRUB_TERMINAL=console
---
> #GRUB_TERMINAL=console
EOF
rm /boot/grub/menu.lst

apt upgrade -y

### Workaround part 2: re-generate /boot/grub/menu.lst
/usr/sbin/update-grub-legacy-ec2 -y

Solo puedo suponer que el problema que encontré es bastante específico para la versión AMI de Ubuntu 18.04 actualmente disponible, y cualquier versión actualizada que incorpore paquetes GRUB más nuevos puede no estar sujeta al mismo problema. En particular, /etc/default/grubes probable que la naturaleza de los cambios no sea aplicable a las versiones más recientes de AMI. Solo pongo esto de todos modos.

John Rix
fuente
Intenta ejecutar el siguiente one-liner:sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" -qq --force-yes upgrade
DarkNeuron
Además, aquí está el error más reciente (regresión) mencionado anteriormente: bugs.launchpad.net/cloud-images/+bug/1747464
DarkNeuron