官方 Ubuntu AWS AMI 上的「apt-get update」行為不一致

官方 Ubuntu AWS AMI 上的「apt-get update」行為不一致

apt我在官方 Ubuntu 映像 ( ) 上遇到各種不一致的錯誤ami-83e769fb。我使用 Packer 建立 AMI,大約 40% 的情況下會失敗。重新運行腳本成功。

我的腳本運行:

sudo apt-get clean all
sudo apt-get update

在安裝任何軟體包之前。

有時我會收到此錯誤:

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.

有時apt-get update會擊中http://us-west-2.ec2.archive.ubuntu.com/ubuntu……有時卻不會。

其他時候軟體包遺失(如apache2python3)。

我不明白為什麼這種行為會不一致。

如何讓apt-get update官方 Ubuntu AMI 持續運作?

答案1

如果您正在使用,cloud-init則可以等待它完成。

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

例如打包器json:

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

參考:

答案2

提供之前的 packer.json :

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

答案3

我自己剛剛遇到了這個問題,我相信這是因為 cloud-init 在運行時仍在配置 EC2 執行個體的過程中apt-get。我透過在實例啟動後立即運行的腳本中插入 30 秒的延遲來解決這個問題。我認為更好的方法是要求 cloud-init 運行任何腳本,User Data甚至讓它為您處理套件安裝和更新 [1]。對於我的用例,我不想承認 cloud-init,添加延遲是一個可以接受的解決方案。

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

相關內容