为什么任何有理智的人都会想将 VM 转换为 ISO?

为什么任何有理智的人都会想将 VM 转换为 ISO?

我想在定制 Ubuntu LiveCD 时添加自定义脚本。

答案1

我对这个问题的标准答案是Turnkeylinux 博客上的文章。这是一个 Ubuntu 衍生发行版,他们的 repo 中有一组可实际使用的脚本,运行良好。此外,您还可以在 Ubuntu 主线上安装他们的脚本。

还有 remastersys 和其他一些,但我发现交钥匙脚本真的可以直接满足我的需求。

文章:
转换虚拟磁盘映像:将 VDI 或 VMDK 转换为可以分发的 ISO 作者:Alon Swartz - 58 条评论 | 最新评论(按单位)

为什么任何有理智的人都会想将 VM 转换为 ISO?

好问题,Conor Fox(他是这篇文章的灵感来源 - 感谢 Conor!)的答案是分发他定制的 TurnKey PostgreSQL 图像,以便其他人可以使用它。

与 VM 映像相反,分发 ISO 允许它安装在任何虚拟化平台以及裸机上,并具有实时运行的额外好处。

我想这个理由已经足够好了,那我们就开始吧。

将 VM 磁盘转换为原始映像并挂载它

首先,我们需要获取 qemu-img,这是与 qemu(KVM 的虚拟化后端)捆绑在一起的工具,用于将 VM 磁盘转换为原始映像,以及 TKLPatch,用于打包 ISO 的 TurnKey 定制机制。

如果您没有使用 TurnKey 安装,请参阅TKLPatch 安装说明

apt-get install qemu
apt-get install tklpatch

我将演示如何将 VMWare VMDK 映像转换为原始磁盘格式。如果您使用的是其他虚拟化平台(例如 Virtualbox),请参阅这个帖子将 VDI 转换为原始图像。

qemu-img convert -f vmdk turnkey-core.vmdk -O raw turnkey-core.raw

接下来,将原始磁盘安装为环回设备。

mkdir turnkey-core.mount mount -o loop turnkey-core.raw turnkey-core.mount

陷阱 1:如果您的虚拟机有分区,那么就比较麻烦了。您需要设置循环设备、分区映射,最后挂载 rootfs 分区。您需要 kpartx 来设置映射。

loopdev=$(losetup -s -f turnkey-core.raw)

apt-get 安装 kpartx
kpartx -a $loopdev

# p1 指的是第一个分区(rootfs)
mkdir turnkey-core.mount
mount /dev/mapper/$(basename $loopdev)p1 turnkey-core.mount

提取根文件系统并调整 ISO 配置

现在,复制根文件系统并卸载回送。

mkdir turnkey-core.rootfs
rsync -a -t -r -S -I turnkey-core.mount/turnkey-core.rootfs

卸载-d turnkey-core.mount

如果您的虚拟机有分区(GOTCHA 1):

kpartx -d $loopdev losetup -d $loopdev

因为 VM 是一个已安装的系统而不是 ISO,所以需要更新文件系统表。

cat>turnkey-core.rootfs/etc/fstab<<EOF
aufs / aufs rw 0 0
tmpfs /tmp tmpfs nosuid,nodev 0 0
末梢血

陷阱 2:如果您的 VM 使用针对虚拟化优化的内核(例如 TurnKey VM 构建中包含的内核),则需要将其替换为通用内核,并删除已安装的 vmware-tools。

tklpatch-chroot turnkey-core.rootfs

# 在 chroot 内部
apt-get 更新
apt-get 安装 linux-image-generic
dpkg --purge $(dpkg-query --showformat='${Package}\n' -W'vmware-tools*')
dpkg --purge $(dpkg-query --showformat='${Package}\n' -W '*-virtual')

出口

生成 ISO

最后,准备 cdroot 并生成 ISO。

tklpatch-准备-cdroot turnkey-core.rootfs/
tklpatch-geniso turnkey-core.cdroot/

就是这样!

额外提示:默认情况下,ISO 将自动启动。如果您想要包含 TurnKey 启动画面和启动菜单,请从 TurnKey ISO 中提取 cdroot 并告诉 tklpatch-prepare-cdroot 将其用作模板。

tklpatch-extractiso turnkey-core.iso
tklpatch-准备-cdroot turnkey-core.rootfs/ turnkey-core.cdroot/
tklpatch-geniso turnkey-core.cdroot/

相关内容