我想在定制 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/