我做了什么

我做了什么

我想在 VMWare 上运行 Ubuntu 云映像。

我只需要知道如何以 VMWare 理解的方式设置 OVF 属性,以便将参数传递给 cloud-init。

我做了什么

安装 VMWare Player 4.0.4,使用vmware Workstation 8.0.2 / Player 4.0.2 修复 Linux 3.2+ 补丁解决虚拟以太网模块编译失败的问题。

下载精确-服务器-cloudimg-amd64.ovf,以及 precise-server-cloudimg-amd64.img 文件(压缩的 QCOW2 格式,220MB)

将图像从 QCOW2 转换为 VMDK:

qemu-img convert -O vmdk precise-server-cloudimg-amd64-disk1.img disk.vmdk

编辑 OVF<File>元素以更改 ovf:href 和 ovf:size 以匹配 qemu-img 的输出:

<File ovf:href="disk.vmdk" ovf:id="file1" ovf:size="689569792"/> 

编辑<Disk>元素以设置稀疏 VMDK 格式和所需容量(以字节为单位)(此处为 8GB):

<Disk ovf:capacity="8589934592" ovf:diskId="vmdisk1" ovf:fileRef="file1" 
ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#sparse"/>

删除所有<Property>元素,因为 vmplayer 无法识别它们。

配置 VirtualHardwareSection 部分以根据需要设置 CPU 和 RAM。

在 vmplayer 中运行 OVF,或者转换为 vmx 并运行 vmx:

ovftools custom.ovf mymachine.vmx
vmplayer mymachine.vmx

不幸的是,我无法在提示符下以“ubuntu”身份登录,因为尚未向 cloud-init 提供 OVF 属性。我该怎么做?

答案1

此答案基于CloudInit 的 NoCloud 自述文件并在 VMWare 播放器上为您提供 cloud-init。

创建文件“meta-data”,使用“localhost”作为保证解析的主机名,以避免 DNS 超时导致 sudo 在本地虚拟机管理程序环境中花费很长时间:

local-hostname: localhost

创建文件“用户数据”文件云初始化信息。这个将密码设置为 ubuntu,并要求我在第一次登录时更改它:

#cloud-config
password: ubuntu

从这些文件生成 seed.iso:

genisoimage -output seed.iso -volid cidata -joliet -rock user-data meta-data

在首次启动之前将“seed.iso”附加到虚拟机(将其设置为在启动时连接),当 grub 出现时,还要为首次启动添加此内核参数:

ds=nocloud-net

机器将自行启动并配置。对于将来的启动,我们需要编辑/etc/default/grub并运行sudo update-grub以告诉它我们不在 EC2 中(没有云元数据服务):

GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0 ds=nocloud"

答案2

我找到了一种让 Ubuntu Cloud Images 可启动的方法,并将我的答案

其要点如下:

mount -o loop cloud-image.img /mnt/image
extlinux --install /mnt/image/
echo "DEFAULT /vmlinuz" > /mnt/image/extlinux.conf
echo "APPEND root=/dev/sda init=/usr/lib/cloud-init/uncloud-init" \
     "ubuntu-pass=ubuntu ds=nocloud" >> /mnt/image/extlinux.conf
umount /mnt/image

结果基本上是一个可启动的硬盘。您可以使用任何可用的工具来转换它以适合您的虚拟化,并且(如您所见APPEND root=/dev/sda)可能需要根据您的虚拟硬件(scsi 或 ide 或 sata)进行调整...

答案3

这个答案与精确的穿山甲有关,并描述了一种解决这个问题的方法,而无需借助于 CD 映像(我无法使用 VMware ESX 来工作)。

Ubuntu Cloud Images 现在似乎包含一个引导扇区(我不记得他们之前做过这个)。如果您使用将映像转换为 vmdkqemu-img并按照说明清理 OVF,您实际上可以将其启动到 grub 中而无需进一步操作。Grub 的默认超时时间为 5 秒,因此您应该能够e在第一次启动时修改启动参数,包括:

init=/usr/lib/cloud-init/uncloud-init ubuntu-pass=ubuntu ds=nocloud-net console=tty0

这会将所有内容打印到 tty0,将 ubuntu 密码设置为已知密码,并强制“uncloud”初始化。并允许您使用提供的凭据登录。请注意,命令行对于登录的任何人都是可见的(cat /proc/cmdline),因此您应该在首次启动后更改 grub 配置(见下文)并重新启动。

我已经成功使用 VMware ESX 实现了这项技术,并且只在本地安装了 vncviewer;除了 ovftool 之外没有使用其他 VMware 工具将 ovf 上传到 ESX。据推测,同样的技术也适用于 VMware Player。

为了使事情更加持久,请/etc/default/grub再次修改并设置将 ds=nocloud-net 添加到命令行,以避免 cloud-init 对您的图像进行任何进一步的更改。运行update-grub然后使其保留并重新启动。

相关内容