Packer 如何连接 Debian genericcloud 镜像

问题描述 投票:0回答:1

有什么方法可以让打包机连接到 Debian

genericcloud
镜像吗?我们没有使用 cloud-init,而是使用 packer 为我们的私有云创建我们自己的镜像模板。使用 iso 并构建图像模板可以直接进行。

nocloud
图像允许root登录而无需密码。不幸的是 ssh 端口 22 在
sshd_config
中被注释,因此 ssh 会失败,直到手动注释掉它,这使得自动化过程变得不可能。

有什么方法可以让加壳器将临时 pub 密钥注入到

genericcloud
图像中并连接到它以进行进一步修改吗?

我尝试使用 https://github.com/ivoronin/packer-plugin-sshkey 但我不太确定它应该如何工作,该过程停留在

Waiting for SSH to become available...
并在
ssh_wait_timeout
结束后中断。

谢谢

cloud ssh-keys packer
1个回答
0
投票

是的,有办法,花了几个小时才弄清楚。

使用 qemu 插件时,您可以指定

cd_files
cd_label
在本机内运行
cloud-init
,但有一点很重要。
cd_label
应该与大写字母的
"CIDATA"
完全一样,您还应该传递到 cd_files exactly 两个文件
user-data
meta-data

没有这个

cloud-init
就无法理解你。

有一个包含文件内容的示例目录:

$ ls -1

config.pkr.hcl
meta-data
packer_key
packer_key.pub
user-data

packer_key
是通过
ssh-keygen
新生成的rsa ssh密钥文件,没有密码,
packer_key.pub
它是公共部分

$ cat meta-data

#cloud-config

$ cat user-data

#cloud-config
users:
- name: root
  ssh_authorized_keys:
    - "here_is_content_of_packer_key.pub"

$ cat config.pkr.hcl

packer {
  required_plugins {
    qemu = {
      version = "~> 1"
      source  = "github.com/hashicorp/qemu"
    }
  }
}

source "qemu" "example" {
  accelerator               = "kvm"
  boot_command              = []
  disk_compression          = true
  disk_interface            = "virtio"
  disk_image                = true
  disk_size                 = "10000M"
  boot_wait                 = "2s"
  vm_name                   = "debian-genericcloud-amd64-packer.qcow2"
  format                    = "qcow2"
  headless                  = "false"
  iso_checksum              = "sha512:49cbcfdb3d5401e8c731d33211cff5e1ef884f179a936c7378eeab00c582ace45dd7154ac9e4c059f1bd6c7ae2ce805879cb381a12a1cc493e3a58c847e134c7"
  iso_url                   = "https://cloud.debian.org/images/cloud/bookworm/20240102-1614/debian-12-genericcloud-amd64-20240102-1614.qcow2"
  net_device                = "virtio-net"
  output_directory          = "artifacts_tests"
  cd_files                  = ["./user-data", "./meta-data"]
  cd_label                  = "CIDATA"
  qemuargs                  = [["-m", "16384M"], ["-smp", "8"]]
  communicator              = "ssh"
  host_port_min             = 2222
  host_port_max             = 2299
  shutdown_command          = "sudo shutdown -P now"
  shutdown_timeout          = "10s"
  ssh_private_key_file      = "./packer_key"
  ssh_clear_authorized_keys = true
  ssh_username              = "root"
  ssh_timeout               = "20s"
}

build {
  sources = ["source.qemu.example"]
  provisioner "shell" {
    inline = [
      "apt-get update",
      "apt-get install python3",
      "apt-get autoclean",
      "apt-get clean"
    ]
  }
}

有了这个你应该能够重现构建

© www.soinside.com 2019 - 2024. All rights reserved.