1

我正在尝试为同一事物创建一个同时具有 VirtualBox 和 Qemu 构建器的 Packer 模板。VirtualBox 工作正常,但使用 Qemu,我在弄清楚如何正确设置网络时遇到了一些困难。

更具体地说,在 VirtualBox 部分,我有

  "vboxmanage": [
    ...
    ["modifyvm", "{{.Name}}", "--nic2", "nat"],
    ["modifyvm", "{{.Name}}", "--cableconnected2", "on"],
    ["modifyvm", "{{.Name}}", "--nic3", "null"],
    ["modifyvm", "{{.Name}}", "--cableconnected3", "off"]
  ],
  "vboxmanage_post": [
    ["modifyvm", "{{.Name}}", "--nic1", "hostonly"],
    ["modifyvm", "{{.Name}}", "--hostonlyadapter1", "VirtualBox Host-Only Ethernet Adapter"],
    ["modifyvm", "{{.Name}}", "--cableconnected1", "on"]
  ],

我最初尝试只配置至少第二个 NIC

  "qemuargs": [
    [ "-netdev", "user,id=mynet0,net=192.168.56.101/24,host=192.168.56.2,dns=192.168.56.2,dhcpstart=192.168.56.2"],
    ["-m", "128M"]
  ]

但是 Packer 说使用该命令调用 Qemu 时出现错误。我究竟做错了什么?而且,当我稍后运行创建的图像时,我将如何创建一个仅限主机的适配器?

4

1 回答 1

1

好的,我设法解决了我原来的问题。

问题是 -netdev 和 -device 都是必需的,并且(真正让我失望的事情)它们的顺序很重要:首先是“-netdev”,其次是“-device”。

此外,Packer 似乎覆盖了它自己的第一个接口,这反过来又需要它的显式重新定义。该显式重新定义需要两个经过 hostfwd 的端口。我猜 Packer 使用其中一个作为其源端口。所以:

  "ssh_host_port_min": 3213,
  "ssh_host_port_max": 3214,
  "qemuargs": [
    ["-netdev", "user,id=user.0,hostfwd=tcp::3213-:22,hostfwd=tcp::3214-:22,net=10.0.2.0/24"],
    ["-device", "virtio-net,netdev=user.0"],
    ["-netdev", "user,id=user.1"],
    ["-device", "virtio-net,netdev=user.1"],
    ["-netdev", "user,id=user.2"],
    ["-device", "virtio-net,netdev=user.2"],
    ["-m", "128M"]
  ],

这并不等同于上面的 VirtualBox 设置,但至少足以让 Packer 成功创建映像。实际上之后正确运行图像是一个单独的问题。

于 2015-06-20T21:45:59.727 回答