Estoy usando Packer para crear una AMI de AWS basada en una imagen de Ubuntu 16.04. Al principio, estoy haciendo una actualización:
sudo apt-get update
sudo apt-get upgrade -y
Aquí está la parte relevante de mi sección de aprovisionadores:
"provisioners": [
{
"type": "shell",
"inline": [
"sudo apt-get update",
"sudo apt-get upgrade -y"
]
}
]
Sin embargo, esto interrumpe la automatización cuando aparece un cuadro de diálogo interactivo:
amazon-ebs: Found kernel: /boot/vmlinuz-4.4.0-72-generic
amazon-ebs: A new version of /boot/grub/menu.lst is available, but the version installed
amazon-ebs: currently has been locally modified.
amazon-ebs:
amazon-ebs: 1. install the package maintainer's version
amazon-ebs: 2. keep the local version currently installed
amazon-ebs: 3. show the differences between the versions
amazon-ebs: 4. show a side-by-side difference between the versions
amazon-ebs: 5. show a 3-way difference between available versions
amazon-ebs: 6. do a 3-way merge between available versions (experimental)
amazon-ebs: 7. start a new shell to examine the situation
También intenté configurar export DEBIAN_FRONTEND=noninteractive
antes (como se recomienda en esta respuesta ). Lamentablemente, no hay diferencia.
Preguntas:
- ¿Hay alguna manera de superar el diálogo iterativo (seleccionar la opción 1 estaría bien)?
- ¿Es mejor evitar las actualizaciones y confiar en que las AMI están actualizadas y contienen los parches de seguridad críticos?
Antecedentes: esta es la parte relevante de mi sección de "constructores", donde la configuré para usar la última AMI disponible:
"builders": [{
"type": "amazon-ebs",
"region": "eu-central-1",
...
"source_ami_filter": {
"filters": {
"virtualization-type": "hvm",
"name": "*ubuntu-xenial-16.04-amd64-server-*",
"root-device-type": "ebs"
},
"owners": ["099720109477"],
"most_recent": true
},
...
}]
Nota : Resulta que el noniteractive
modo funciona si ejecuta apt-get update con ambos -y
y el -q
indicador.
fuente
apt-get update ; DEBIAN_FRONTEND=noninteractive apt-get upgrade -yq
. No creo queapt-get update
pida nada, por lo que probablemente no sea necesarioDEBIAN_FRONTEND
y, por lo tanto, realmente no tiene que hacerloexport
DEBIAN_FRONTEND
y continuar existiendo en el resto de su entorno. En cualquier grado que te importe.Su problema es que el cambio de archivo grub se adhiere
ucf
y no debconf, según este incidente en la lista de apt no está solo.Como solución, encontré esta respuesta en askunbuntu. Eliminar el
menu.lst
sistema de configuración de UCF debería ser suficiente, para su caso:Esto debería evitar la cuestión de la comida. Tenga en cuenta que cualquier otro paquete que use ucf también usará la versión del paquete mantenedor, para una creación desde una base ami esto no debería ser un problema, pero vale la pena señalarlo.
fuente
ucf
solución debería incluirse en una solución completa junto con los comandos en la respuesta de @ PhilippClaßenPara agregar a la respuesta de Philipp, si está utilizando
sudo
, debe asegurarse de configurar laDEBIAN_FRONTEND
variable después, de esta manera:fuente
No noté ninguna diferencia usando -y o -q. Tal vez porque la pregunta es sobre el uso de "empacador"? (Yo uso scripts desnudos)
De todos modos, en mi caso, me deshice de los cuadros de diálogo para
apt upgrade
usar los siguientes comandos sed a su alrededor:Mi cambio se limita al momento de la actualización.
Técnicamente, deshabilita las preguntas sobre mantener o no una configuración existente al actualizar grub, pero solo durante el tiempo de la actualización, para evitar efectos secundarios.
SO: Ubuntu 16.04 LTS
Espero que esto ayude
fuente
apt upgrade
extremadamente peligroso en ese caso? A menos que tenga una instantánea u otra forma eficiente de reconstruir mi entorno en cuestión de minutos, no lo intentaría.Estás omitiendo el
-y
parámetro de tuapt-get update
comando. Si lo incluye, el aviso debería desaparecer.También construí una imagen de Ubuntu con Packer. Aquí está el script de shell que uso para realizar la actualización:
https://github.com/devopskatas/learningvm/blob/master/script/update.sh
Esto se deriva de una gran biblioteca bien mantenida de compilaciones de Ubuntu Packer:
https://github.com/boxcutter/ubuntu
fuente
apt-get update
solo actualiza la lista de paquetes desde el repositorio remoto, no hay razón para configurar un -y allí ...