如何在进行LiveCD自定义时添加自定义脚本

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

关于这个问题的我的股票答案是关于Turnkeylinux博客的这篇文章。 它是一个Ubuntu派生的发行版,它们在repo中有一套物理到实时的脚本,效果非常好。 好的,你可以在Ubuntu主线上安装他们的脚本。

还有remastersys和其他几个,但我发现交钥匙脚本对我的需求非常简单。

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

为什么心智正常的人想要将VM转换为ISO?

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

分发ISO而不是VM映像允许将其安装在任何虚拟化平台以及裸机上,并带来额外的实时运行奖励。

我认为这是一个足够好的理由,所以让我们开始吧。

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

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

如果您未使用TurnKey安装,请参阅TKLPatch安装说明 。

apt-get install qemu
apt-get install tklpatch

我将展示如何将VMWare VMDK映像转换为原始磁盘格式。 如果您使用的是其他虚拟化平台,例如Virtualbox,请参阅有关将VDI转换为原始映像的post 。

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

GOTCHA 1 :如果你的VM有分区,那就有点琐碎了。 您需要设置循环设备,分区映射并最终安装rootfs分区。 您将需要kpartx来设置映射。

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

 apt-get install 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

 umount -d turnkey-core.mount

如果您的VM有分区(GOTCHA 1):

kpartx -d $ loopdev losetup -d $ loopdev

由于VM是安装的系统而不是ISO,因此需要更新文件系统表。

猫>交钥匙core.rootfs / etc / fstab文件<< EOF
 aufs / aufs rw 0 0
 tmpfs / tmp tmpfs nosuid,nodev 0 0
 EOF

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

 tklpatch-chroot turnkey-core.rootfs

 #在chroot里面
 apt-get update
 apt-get install 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-prepare-cdroot turnkey-core.rootfs /
 tklpatch-geniso turnkey-core.cdroot /

而已!

奖励:默认情况下,ISO将自动启动。 如果要包含TurnKey bootsplash和bootmenu,请从TurnKey ISO中提取cdroot并告诉tklpatch-prepare-cdroot将其用作模板。

 tklpatch-extractiso turnkey-core.iso
 tklpatch-prepare-cdroot turnkey-core.rootfs / turnkey-core.cdroot /
 tklpatch-geniso turnkey-core.cdroot /