J'utilise Packer pour créer une AWS AMI basée sur une image Ubuntu 16.04. Au début, je fais une mise à niveau:
sudo apt-get update
sudo apt-get upgrade -y
Voici la partie pertinente de ma section Provisioners:
"provisioners": [
{
"type": "shell",
"inline": [
"sudo apt-get update",
"sudo apt-get upgrade -y"
]
}
]
Cependant, cela rompt l'automatisation lorsqu'une boîte de dialogue interactive apparaît:
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
J'ai également essayé de définir export DEBIAN_FRONTEND=noninteractive
avant (comme recommandé dans cette réponse ). Malheureusement, cela ne fait aucune différence.
Des questions:
- Existe-t-il un moyen de dépasser la boîte de dialogue itérative (sélectionner l'option 1 serait bien)?
- Est-il préférable d'éviter les mises à niveau et de croire plutôt que les AMI sont à jour et contiennent les correctifs de sécurité critiques?
Contexte: C'est la partie pertinente de ma section "constructeurs", où je l'ai configurée pour utiliser la dernière 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
},
...
}]
Remarque : Il s'avère que le noniteractive
mode fonctionne si vous exécutez la mise à jour apt-get avec à la fois -y
l' -q
indicateur et.
la source
apt-get update ; DEBIAN_FRONTEND=noninteractive apt-get upgrade -yq
. Je ne pense pas que celaapt-get update
demande quoi que ce soit, donc cela n'a probablement pas besoinDEBIAN_FRONTEND
, et donc vous n'avez pas vraiment à le faireexport
DEBIAN_FRONTEND
et à le faire continuer d'exister dans le reste de votre environnement. Dans la mesure où cela vous importe.Votre problème est que le changement de fichier grub respecte
ucf
et non debconf, selon cet incident sur la liste apt, vous n'êtes pas seul.Pour contourner ce problème, j'ai trouvé cette réponse sur askunbuntu. La suppression du
menu.lst
système de configuration UCF devrait être suffisante, dans votre cas:Cela devrait éviter la question grub. Soyez averti que tout autre paquet utilisant ucf utilisera également la version du paquet mainteneur, pour une création à partir d'un ami de base, cela ne devrait pas être un problème, mais cela vaut la peine d'être noté.
la source
ucf
correctif devrait être inclus dans une solution complète avec les commandes dans la réponse de @ PhilippClaßenPour ajouter à la réponse de Philipp, si vous utilisez,
sudo
vous devez vous assurer de définir laDEBIAN_FRONTEND
variable par la suite, comme suit:la source
Je n'ai remarqué aucune différence en utilisant -y ou -q. Peut-être parce que la question concerne l'utilisation de "packer"? (J'utilise des scripts nus)
Quoi qu'il en soit, dans mon cas, je me suis débarrassé des boîtes de dialogue pour
apt upgrade
utiliser les commandes sed suivantes autour de lui:Ma modification est limitée au moment de la mise à niveau.
Techniquement, il désactive les questions sur la conservation ou non d'une configuration existante lors de la mise à niveau de grub, mais uniquement pendant la durée de la mise à niveau, pour éviter les effets secondaires.
Système d'exploitation: Ubuntu 16.04 LTS
J'espère que cela t'aides
la source
apt upgrade
seul extrêmement dangereux dans ce cas? À moins d'avoir un instantané ou un autre moyen efficace de reconstruire mon environnement en quelques minutes, je ne l'essayerais pas.Vous omettez le
-y
paramètre de votreapt-get update
commande. Si vous l'incluez, l'invite devrait disparaître.J'ai également construit une image Ubuntu avec Packer. Voici le script shell que j'utilise pour effectuer la mise à jour:
https://github.com/devopskatas/learningvm/blob/master/script/update.sh
Ceci est dérivé d'une grande bibliothèque bien entretenue de builds Ubuntu Packer:
https://github.com/boxcutter/ubuntu
la source
apt-get update
ne met à jour que la liste des packages du référentiel distant, il n'y a aucune raison de définir un -y là ...