官方 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 在apt-get运行时仍在配置 EC2 实例。我通过在实例启动后立即运行的脚本中插入 30 秒延迟来解决这个问题。我认为更好的方法是要求 cloud-init 运行任何脚本,User Data甚至让它为您处理软件包安装和更新 [1]。对于我的用例,我不想确认 cloud-init,添加延迟是一个可接受的解决方案。

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

相关内容