使用Packer时apt-get随机失败

6
我正在使用Packer构建一个AMI,使用名为ami.json的文件运行两个基于默认Ubuntu Server 20.04 LTS映像构建的供应商。问题是,Packer在apt-get install ansible时随机失败,并显示错误消息E: Unable to locate package ansible。尽管没有任何更改,但相同的ami.json文件会间歇性地构建或不构建。
这似乎与5年前的这个问题有关,该问题获得了解决方法,但并未得到真正的答案:Packer/Amazon EBS/Ubuntu - Inconsistent PPAs
{
"variables" : {
    "region" : "us-west-2"
},
"builders" : [
    {
        "type" : "amazon-ebs",
        "profile" : "default",
        "region" : "{{user `region`}}",
        "instance_type" : "t2.micro",
        "source_ami" : "ami-06e54d05255faf8f6",
        "ssh_username" : "ubuntu",
        "ami_name" : "packer_build_test",
        "ami_description" : "test"
    }
],
"provisioners" : [
  {   "type" : "shell",
        "inline" : [
            "sudo add-apt-repository universe",
            "sudo apt-get update",
            "sudo apt-get install -y ansible"
        ]
    },
    {
        "type" : "ansible-local",
        "playbook_file": "./server.yml"
    }
]
}

我刚刚运行了两次,第一次构建失败了,第二次构建成功了,直接连续完成。
构建失败的输出:
    $ ~/CICDServerSetup$ packer build ami.json
amazon-ebs: output will be in this color.

==> amazon-ebs: Prevalidating any provided VPC information
==> amazon-ebs: Prevalidating AMI Name: packer_build_test_1
    amazon-ebs: Found Image ID: ami-06e54d05255faf8f6
==> amazon-ebs: Creating temporary keypair: packer_5f7a86b8-01b9-aa26-c418-bf95da74e2bd
==> amazon-ebs: Creating temporary security group for this instance: packer_5f7a86ba-5d3b-8196-770f-c2a59e3a9337
==> amazon-ebs: Authorizing access to port 22 from [0.0.0.0/0] in the temporary security groups...
==> amazon-ebs: Launching a source AWS instance...
==> amazon-ebs: Adding tags to source instance
    amazon-ebs: Adding tag: "Name": "Packer Builder"
    amazon-ebs: Instance ID: i-0a0f119d8f4160c43
==> amazon-ebs: Waiting for instance (i-0a0f119d8f4160c43) to become ready...
==> amazon-ebs: Using ssh communicator to connect: 54.190.40.167
==> amazon-ebs: Waiting for SSH to become available...
==> amazon-ebs: Connected to SSH!
==> amazon-ebs: Provisioning with shell script: /tmp/packer-shell305064109
    amazon-ebs: 'universe' distribution component is already enabled for all sources.
    amazon-ebs: Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [107 kB]
    amazon-ebs: Hit:2 http://archive.ubuntu.com/ubuntu focal InRelease
    amazon-ebs: Get:3 http://archive.ubuntu.com/ubuntu focal-updates InRelease [111 kB]
    amazon-ebs: Get:4 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages [294 kB]
    amazon-ebs: Get:5 http://archive.ubuntu.com/ubuntu focal-backports InRelease [98.3 kB]
    amazon-ebs: Get:6 http://archive.ubuntu.com/ubuntu focal/universe amd64 Packages [8628 kB]
    amazon-ebs: Get:7 http://security.ubuntu.com/ubuntu focal-security/main Translation-en [69.3 kB]
    amazon-ebs: Get:8 http://security.ubuntu.com/ubuntu focal-security/main amd64 c-n-f Metadata [4696 B]
    amazon-ebs: Get:9 http://security.ubuntu.com/ubuntu focal-security/restricted amd64 Packages [59.2 kB]
    amazon-ebs: Get:10 http://security.ubuntu.com/ubuntu focal-security/restricted Translation-en [9856 B]
    amazon-ebs: Get:11 http://security.ubuntu.com/ubuntu focal-security/universe amd64 Packages [92.3 kB]
    amazon-ebs: Get:12 http://security.ubuntu.com/ubuntu focal-security/universe Translation-en [35.0 kB]
    amazon-ebs: Get:13 http://security.ubuntu.com/ubuntu focal-security/universe amd64 c-n-f Metadata [2956 B]
    amazon-ebs: Get:14 http://security.ubuntu.com/ubuntu focal-security/multiverse amd64 Packages [1252 B]
    amazon-ebs: Get:15 http://security.ubuntu.com/ubuntu focal-security/multiverse Translation-en [540 B]
    amazon-ebs: Get:16 http://security.ubuntu.com/ubuntu focal-security/multiverse amd64 c-n-f Metadata [116 B]
    amazon-ebs: Get:17 http://archive.ubuntu.com/ubuntu focal/universe Translation-en [5124 kB]
    amazon-ebs: Get:18 http://archive.ubuntu.com/ubuntu focal/universe amd64 c-n-f Metadata [265 kB]
    amazon-ebs: Get:19 http://archive.ubuntu.com/ubuntu focal/multiverse amd64 Packages [144 kB]
    amazon-ebs: Get:20 http://archive.ubuntu.com/ubuntu focal/multiverse Translation-en [104 kB]
    amazon-ebs: Get:21 http://archive.ubuntu.com/ubuntu focal/multiverse amd64 c-n-f Metadata [9136 B]
    amazon-ebs: Get:22 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [555 kB]
    amazon-ebs: Get:23 http://archive.ubuntu.com/ubuntu focal-updates/main Translation-en [143 kB]
    amazon-ebs: Get:24 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 c-n-f Metadata [9924 B]
    amazon-ebs: Get:25 http://archive.ubuntu.com/ubuntu focal-updates/restricted amd64 Packages [67.1 kB]
    amazon-ebs: Get:26 http://archive.ubuntu.com/ubuntu focal-updates/restricted Translation-en [10.8 kB]
    amazon-ebs: Get:27 http://archive.ubuntu.com/ubuntu focal-updates/restricted amd64 c-n-f Metadata [352 B]
    amazon-ebs: Get:28 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [243 kB]
    amazon-ebs: Get:29 http://archive.ubuntu.com/ubuntu focal-updates/universe Translation-en [93.4 kB]
    amazon-ebs: Get:30 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 c-n-f Metadata [6188 B]
    amazon-ebs: Get:31 http://archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 Packages [15.1 kB]
    amazon-ebs: Get:32 http://archive.ubuntu.com/ubuntu focal-updates/multiverse Translation-en [3892 B]
    amazon-ebs: Get:33 http://archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 c-n-f Metadata [480 B]
    amazon-ebs: Get:34 http://archive.ubuntu.com/ubuntu focal-backports/main amd64 c-n-f Metadata [112 B]
    amazon-ebs: Get:35 http://archive.ubuntu.com/ubuntu focal-backports/restricted amd64 c-n-f Metadata [116 B]
    amazon-ebs: Get:36 http://archive.ubuntu.com/ubuntu focal-backports/universe amd64 Packages [4012 B]
    amazon-ebs: Get:37 http://archive.ubuntu.com/ubuntu focal-backports/universe Translation-en [1448 B]
    amazon-ebs: Get:38 http://archive.ubuntu.com/ubuntu focal-backports/universe amd64 c-n-f Metadata [224 B]
    amazon-ebs: Get:39 http://archive.ubuntu.com/ubuntu focal-backports/multiverse amd64 c-n-f Metadata [116 B]
    amazon-ebs: Fetched 16.3 MB in 40s (409 kB/s)
    amazon-ebs: Reading package lists...
    amazon-ebs: Reading package lists...
    amazon-ebs: Building dependency tree...
    amazon-ebs: Reading state information...
==> amazon-ebs: E: Unable to locate package ansible
==> amazon-ebs: Provisioning step had errors: Running the cleanup provisioner, if present...
==> amazon-ebs: Terminating the source AWS instance...
==> amazon-ebs: Cleaning up any extra volumes...
==> amazon-ebs: No volumes to clean up, skipping
==> amazon-ebs: Deleting temporary security group...
==> amazon-ebs: Deleting temporary keypair...
Build 'amazon-ebs' errored after 2 minutes 2 seconds: Script exited with non-zero exit status: 100.Allowed exit codes are: [0]

==> Wait completed after 2 minutes 2 seconds

==> Some builds didn't complete successfully and had errors:
--> amazon-ebs: Script exited with non-zero exit status: 100.Allowed exit codes are: [0]

==> Builds finished but no artifacts were created.

成功构建的输出:

    $ ~/CICDServerSetup$ packer build ami.json
amazon-ebs: output will be in this color.

==> amazon-ebs: Prevalidating any provided VPC information
==> amazon-ebs: Prevalidating AMI Name: packer_build_test_2
    amazon-ebs: Found Image ID: ami-06e54d05255faf8f6
==> amazon-ebs: Creating temporary keypair: packer_5f7a8511-402e-5090-f078-da4b8716230c
==> amazon-ebs: Creating temporary security group for this instance: packer_5f7a8513-ab78-3566-d2cc-6528dbf60f85
==> amazon-ebs: Authorizing access to port 22 from [0.0.0.0/0] in the temporary security groups...
==> amazon-ebs: Launching a source AWS instance...
==> amazon-ebs: Adding tags to source instance
    amazon-ebs: Adding tag: "Name": "Packer Builder"
    amazon-ebs: Instance ID: i-00074f05debcaa1d3
==> amazon-ebs: Waiting for instance (i-00074f05debcaa1d3) to become ready...
==> amazon-ebs: Using ssh communicator to connect: 35.167.183.26
==> amazon-ebs: Waiting for SSH to become available...
==> amazon-ebs: Connected to SSH!
==> amazon-ebs: Provisioning with shell script: /tmp/packer-shell578192723
    amazon-ebs: 'universe' distribution component is already enabled for all sources.
    amazon-ebs: Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [107 kB]
    amazon-ebs: Hit:2 http://archive.ubuntu.com/ubuntu focal InRelease
    amazon-ebs: Get:3 http://archive.ubuntu.com/ubuntu focal-updates InRelease [111 kB]
    amazon-ebs: Get:4 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages [294 kB]
    amazon-ebs: Get:5 http://archive.ubuntu.com/ubuntu focal-backports InRelease [98.3 kB]
    amazon-ebs: Get:6 http://archive.ubuntu.com/ubuntu focal/universe amd64 Packages [8628 kB]
    amazon-ebs: Get:7 http://security.ubuntu.com/ubuntu focal-security/main Translation-en [69.3 kB]
    amazon-ebs: Get:8 http://security.ubuntu.com/ubuntu focal-security/main amd64 c-n-f Metadata [4696 B]
    amazon-ebs: Get:9 http://security.ubuntu.com/ubuntu focal-security/restricted amd64 Packages [59.2 kB]
    amazon-ebs: Get:10 http://security.ubuntu.com/ubuntu focal-security/restricted Translation-en [9856 B]
    amazon-ebs: Get:11 http://security.ubuntu.com/ubuntu focal-security/universe amd64 Packages [92.3 kB]
    amazon-ebs: Get:12 http://security.ubuntu.com/ubuntu focal-security/universe Translation-en [35.0 kB]
    amazon-ebs: Get:13 http://security.ubuntu.com/ubuntu focal-security/universe amd64 c-n-f Metadata [2956 B]
    amazon-ebs: Get:14 http://security.ubuntu.com/ubuntu focal-security/multiverse amd64 Packages [1252 B]
    amazon-ebs: Get:15 http://security.ubuntu.com/ubuntu focal-security/multiverse Translation-en [540 B]
    amazon-ebs: Get:16 http://security.ubuntu.com/ubuntu focal-security/multiverse amd64 c-n-f Metadata [116 B]
amazon-ebs: Get:17 http://archive.ubuntu.com/ubuntu focal/universe Translation-en [5124 kB]
amazon-ebs: Get:18 http://archive.ubuntu.com/ubuntu focal/universe amd64 c-n-f Metadata [265 kB]
amazon-ebs: Get:19 http://archive.ubuntu.com/ubuntu focal/multiverse amd64 Packages [144 kB]
amazon-ebs: Get:20 http://archive.ubuntu.com/ubuntu focal/multiverse Translation-en [104 kB]
amazon-ebs: Get:21 http://archive.ubuntu.com/ubuntu focal/multiverse amd64 c-n-f Metadata [9136 B]
amazon-ebs: Get:22 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [555 kB]
amazon-ebs: Get:23 http://archive.ubuntu.com/ubuntu focal-updates/main Translation-en [143 kB]
amazon-ebs: Get:24 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 c-n-f Metadata [9924 B]
amazon-ebs: Get:25 http://archive.ubuntu.com/ubuntu focal-updates/restricted amd64 Packages [67.1 kB]
amazon-ebs: Get:26 http://archive.ubuntu.com/ubuntu focal-updates/restricted Translation-en [10.8 kB]
amazon-ebs: Get:27 http://archive.ubuntu.com/ubuntu focal-updates/restricted amd64 c-n-f Metadata [352 B]
amazon-ebs: Get:28 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [243 kB]
amazon-ebs: Get:29 http://archive.ubuntu.com/ubuntu focal-updates/universe Translation-en [93.4 kB]
amazon-ebs: Get:30 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 c-n-f Metadata [6188 B]
amazon-ebs: Get:31 http://archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 Packages [15.1 kB]
amazon-ebs: Get:32 http://archive.ubuntu.com/ubuntu focal-updates/multiverse Translation-en [3892 B]
amazon-ebs: Get:33 http://archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 c-n-f Metadata [480 B]
amazon-ebs: Get:34 http://archive.ubuntu.com/ubuntu focal-backports/main amd64 c-n-f Metadata [112 B]
amazon-ebs: Get:35 http://archive.ubuntu.com/ubuntu focal-backports/restricted amd64 c-n-f Metadata [116 B]
amazon-ebs: Get:36 http://archive.ubuntu.com/ubuntu focal-backports/universe amd64 Packages [4012 B]
amazon-ebs: Get:37 http://archive.ubuntu.com/ubuntu focal-backports/universe Translation-en [1448 B]
amazon-ebs: Get:38 http://archive.ubuntu.com/ubuntu focal-backports/universe amd64 c-n-f Metadata [224 B]
amazon-ebs: Get:39 http://archive.ubuntu.com/ubuntu focal-backports/multiverse amd64 c-n-f Metadata [116 B]
amazon-ebs: Fetched 16.3 MB in 7s (2179 kB/s)
amazon-ebs: Reading package lists...
amazon-ebs: Reading package lists...
amazon-ebs: Building dependency tree...
amazon-ebs: Reading state information...
amazon-ebs: The following additional packages will be installed:
amazon-ebs:   ieee-data python3-argcomplete python3-crypto python3-dnspython
amazon-ebs:   python3-jmespath python3-kerberos python3-libcloud python3-lockfile
amazon-ebs:   python3-netaddr python3-ntlm-auth python3-requests-kerberos
amazon-ebs:   python3-requests-ntlm python3-selinux python3-winrm python3-xmltodict
amazon-ebs: Suggested packages:
amazon-ebs:   cowsay sshpass python-lockfile-doc ipython3 python-netaddr-docs
amazon-ebs: The following NEW packages will be installed:
amazon-ebs:   ansible ieee-data python3-argcomplete python3-crypto python3-dnspython
amazon-ebs:   python3-jmespath python3-kerberos python3-libcloud python3-lockfile
amazon-ebs:   python3-netaddr python3-ntlm-auth python3-requests-kerberos
amazon-ebs:   python3-requests-ntlm python3-selinux python3-winrm python3-xmltodict
amazon-ebs: 0 upgraded, 16 newly installed, 0 to remove and 48 not upgraded.
amazon-ebs: Need to get 9643 kB of archives.
amazon-ebs: After this operation, 90.2 MB of additional disk space will be used.
amazon-ebs: Get:1 http://archive.ubuntu.com/ubuntu focal/main amd64 python3-crypto amd64 2.6.1-13ubuntu2 [237 kB]

然后继续执行成功并构建ami。

3个回答

7

Hasicorp/Packer 文档明确指出此问题,并解决方法是添加一个 provisioner 等待启动完成。

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

这是正确的答案,对我起作用了。令人难以置信的是,在2022年12月最新版本的Packer中,这仍然是一个问题。Packer应该在完全引导之前等待,然后允许配置程序在Linux机器上执行代码。 - Maximo Migliari
感谢来自未来的@stephenhouser...这对我也有用。四处点赞! - rimraf
好的回答。让 Hashi 把这个构建进去不是很好吗? - Kevin Buchs
1
Hasicorp/Packer自那以后已经更新了他们的文档。新的代码片段为:{ "type": "shell", "inline": [ "cloud-init status --wait" ]} - stephenhouser

2

我在Azure上使用Ubuntu 20.04 LTS时一直受到这个问题的困扰,但我认为它可能是相同的根本问题。我尝试了各种方法,但只有当我将apt update作为第一个配置步骤添加后,构建过程才变得非常稳定。我的每日构建已经运行了几个星期了。我运行以下命令以获取所有更新。

 apt update
 apt-get update
 apt-get -y install
 unattended-upgrades

1
尝试将10分钟休眠作为第一个供应商添加。Ubuntu AMI自带自动更新功能。因此,每当实例启动时,它将自动更新。

这对于一个短暂的安装过程来说是相当长的延迟。肯定还有其他的方法吧? - stephenhouser
还有另一种方法...请看下面我的答案。 - stephenhouser
使用任意时间从来都不是一个好的解决方案。 - Josh Correia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接