将 cloud-init 与 VirtualBox 一起使用?

Joh*_*nst 13 linux virtualbox

Cloudinit被许多云镜像使用,例如在 EC2 上获取它们的初始配置,如 IP 地址、ssh 密钥等。有没有办法以类似的方式将它与 VirtualBox 一起使用?

我正在寻找一种将 ssh 授权密钥文件放在 VirtualBox 实例上的方法,而无需将其硬编码到图像本身中。

有关于“不云”一节在这里,但我不完全了解如何做到这一点适用于VirtualBox的。我可以用有问题的文件生成一个 /dev/sdb ,并在启动实例之前将它提供给 VirtualBox 作为第二个驱动器,它会以某种方式神奇地获取信息吗?

Joh*_*nst 10

我想通了,并在这里写了博客。从该链接:

#VirtualBox 和 cloud-init

如果其他人想知道:

  • 可以使用 cloud-init 来配置 VirtualBox 虚拟机,不会太麻烦。

  • 这样做的一种方法是使用“配置驱动器”,即安装另一个(仅)具有云初始化配置数据的虚拟硬盘驱动器。

  • 这是一种创建方法:

      # Create empty virtual hard drive file
      dd if=/dev/zero of=config.img bs=1 count=0 seek=2M
      # put correct filesystem and disk label on
      mkfs.vfat -n cidata config.img
      # mount it somewhere so you can put the config data on
      sudo mount config.img /mnt
    
    Run Code Online (Sandbox Code Playgroud)
  • 现在把你的配置数据放入/mnt/user-dataand /mnt/meta-data,

  • 示例:/mnt/user-data.这将创建一个ubos-admin具有 ssh 密钥的用户,以便您无需密码即可通过 ssh 登录。

      #cloud-config
      users:
       - name: ubos-admin
         gecos: UBOS administrative user
         ssh-authorized-keys:
          - insert ssh key here
         sudo: "ALL=(ALL) NOPASSWD: /usr/bin/ubos-admin *, /usr/bin/bash *"
    
    Run Code Online (Sandbox Code Playgroud)
  • 示例/mnt/meta-data

      instance-id: my-instance-1
    
    Run Code Online (Sandbox Code Playgroud)
  • 然后,卸载:

      sudo umount /mnt
    
    Run Code Online (Sandbox Code Playgroud)
  • 并在启动前附加为第二个硬盘驱动器。如果 cloud-init 安装在主映像中,它应该获取配置信息。

  • 如果您使用的是使用以下命令的 Linux 发行版,则可以使用以下命令为第二个硬盘驱动器创建 .vmdk 映像文件apt

     sudo apt-get install qemu-kvm
     qemu-img convert -O vmdk  config.img config.vmdk
    
    Run Code Online (Sandbox Code Playgroud)

  • https://web.archive.org/web/20150119071718/http://indieboxproject.org/blog/2014/10/virtualbox-and-cloud-init/ (2认同)