Ich verwende Packer , um ein AWS AMI basierend auf einem Ubuntu 16.04-Image zu erstellen. Am Anfang mache ich ein Upgrade:
sudo apt-get update
sudo apt-get upgrade -y
Hier ist der relevante Teil meines Provisioner-Abschnitts:
"provisioners": [
{
"type": "shell",
"inline": [
"sudo apt-get update",
"sudo apt-get upgrade -y"
]
}
]
Dies unterbricht jedoch die Automatisierung, da ein interaktives Dialogfeld angezeigt wird:
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
Ich habe auch versucht, export DEBIAN_FRONTEND=noninteractive
vorher einzustellen (wie in dieser Antwort empfohlen ). Leider macht es keinen Unterschied.
Fragen:
- Gibt es eine Möglichkeit, den iterativen Dialog zu umgehen (Auswahl von Option 1 wäre in Ordnung)?
- Ist es stattdessen besser, Upgrades zu vermeiden und stattdessen darauf zu vertrauen, dass die AMIs auf dem neuesten Stand sind und die kritischen Sicherheitspatches enthalten?
Hintergrund: Dies ist der relevante Teil meines Abschnitts "Builder", in dem ich ihn für die Verwendung des neuesten verfügbaren AMI konfiguriert habe:
"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
},
...
}]
Hinweis : Es stellt sich heraus, dass der noniteractive
Modus funktioniert, wenn Sie apt-get update sowohl mit dem -y
als auch mit dem -q
Flag ausführen .
quelle
apt-get update ; DEBIAN_FRONTEND=noninteractive apt-get upgrade -yq
. Ich denkeapt-get update
, es werden keine Eingabeaufforderungen angezeigt, daher ist dies wahrscheinlich nicht erforderlichDEBIAN_FRONTEND
, und Sie müssenexport
DEBIAN_FRONTEND
und müssen es daher auch nicht für den Rest Ihrer Umgebung beibehalten. In welchem Maße auch immer Ihnen das wichtig ist.Ihr Problem ist, dass die Änderungen an der Grub-Datei beibehalten werden
ucf
und nicht debconf, da Sie gemäß diesem Vorfall auf der Apt-Liste nicht alleine sind.Als Workaround habe ich diese Antwort auf askunbuntu gefunden. Das Entfernen von
menu.lst
aus dem UCF-Konfigurationssystem sollte für Ihren Fall ausreichen:Dies sollte die Grub-Frage vermeiden. Seien Sie gewarnt, dass jedes andere Paket, das ucf verwendet, auch die Betreuer-Paketversion verwendet. Für eine Erstellung aus einer Basis-Ami sollte dies kein Problem sein, aber es lohnt sich, darauf hingewiesen zu werden.
quelle
ucf
Update sollte zusammen mit den Befehlen in der Antwort von @ PhilippClaßenUm Philipps Antwort zu ergänzen, müssen Sie bei Verwendung von
sudo
anschließend dieDEBIAN_FRONTEND
Variable wie folgt festlegen :quelle
Ich habe keinen Unterschied festgestellt, wenn ich -y oder -q verwende. Vielleicht, weil es um die Verwendung von "Packer" geht? (Ich benutze bloße Skripte)
Jedenfalls habe ich in meinem Fall die Dialoge für die
apt upgrade
Verwendung der folgenden sed-Befehle entfernt:Meine Änderung ist auf den Zeitpunkt des Upgrades beschränkt.
Technisch gesehen werden die Fragen zum Beibehalten oder Nichtbeibehalten einer vorhandenen Konfiguration beim Upgrade von grub deaktiviert, jedoch nur für die Zeit des Upgrades, um Nebenwirkungen zu vermeiden.
Betriebssystem: Ubuntu 16.04 LTS
Hoffe das hilft
quelle
apt upgrade
in einem solchen Fall nicht allein extrem gefährlich? Ohne einen Schnappschuss oder eine andere effiziente Methode, um meine Umgebung in wenigen Minuten wiederherzustellen, würde ich es nicht versuchen.Sie lassen den
-y
Parameter in Ihremapt-get update
Befehl weg. Wenn Sie es einfügen, sollte die Eingabeaufforderung verschwinden.Ich habe auch ein Ubuntu-Image mit Packer erstellt. Hier ist das Shell-Skript, mit dem ich das Update durchführe:
https://github.com/devopskatas/learningvm/blob/master/script/update.sh
Dies ist aus einer großartigen, gut gepflegten Bibliothek von Ubuntu Packer-Builds abgeleitet:
https://github.com/boxcutter/ubuntu
quelle
apt-get update
aktualisiert nur die Liste der Pakete aus dem Remote-Repository, es gibt keinen Grund, dort ein -y zu setzen ...