inkonsistentes „apt-get update“-Verhalten auf offiziellem Ubuntu AWS AMI

inkonsistentes „apt-get update“-Verhalten auf offiziellem Ubuntu AWS AMI

Ich erhalte verschiedene und inkonsistente Fehler bei aptden offiziellen Ubuntu-Images ( ami-83e769fb). Ich verwende Packer zum Erstellen meines AMI und es schlägt in etwa 40 % der Fälle fehl. Das erneute Ausführen des Skripts funktioniert.

Mein Skript läuft:

sudo apt-get clean all
sudo apt-get update

bevor Sie irgendwelche Pakete installieren.

Manchmal erhalte ich diesen Fehler:

amazon-ebs: W: GPG error: http://archive.ubuntu.com/ubuntu artful InRelease: Splitting up /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_artful_InRelease into data and signature failed
amazon-ebs: E: The repository 'http://archive.ubuntu.com/ubuntu artful InRelease' is not signed.

Manchmal apt-get updateklappt es http://us-west-2.ec2.archive.ubuntu.com/ubuntu, manchmal nicht.

Manchmal fehlen Pakete (wie apache2oder python3).

Ich verstehe nicht, warum dieses Verhalten inkonsistent ist.

Wie kann ich erreichen, apt-get updatedass das offizielle Ubuntu-AMI konsistent funktioniert?

Antwort1

Wenn Sie es verwenden, cloud-initkönnen Sie warten, bis es abgeschlossen ist.

while [ ! -f /var/lib/cloud/instance/boot-finished ]; do
   echo 'Waiting for cloud-init...'
   sleep 1
done

zB Packer JSON:

{
  "type": "shell",
  "inline": [
    "while [ ! -f /var/lib/cloud/instance/boot-finished ]; do echo 'Waiting for cloud-init...'; sleep 1; done"
  ]
}

Referenz:

Antwort2

packer.json vor Bereitstellung:

"provisioners": [
    {
       "type": "shell",
       "inline": ["/usr/bin/cloud-init status --wait"]
},

Antwort3

Ich bin gerade selbst auf dieses Problem gestoßen und glaube, es passiert, weil Cloud-Init beim apt-getAusführen noch dabei ist, die EC2-Instanz zu konfigurieren. Ich habe es gelöst, indem ich eine 30-sekündige Verzögerung in mein Skript eingefügt habe, das unmittelbar nach dem Booten der Instanz ausgeführt wird. Ich denke, eine bessere Möglichkeit wäre, Cloud-Init aufzufordern, alle Skripte auszuführen User Dataoder es sogar die Paketinstallation und -aktualisierung für Sie erledigen zu lassen [1]. Für meinen Anwendungsfall, in dem ich Cloud-Init nicht bestätigen möchte, war das Hinzufügen der Verzögerung eine akzeptable Lösung.

  1. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html

verwandte Informationen