在networking可用之前调用KVM guest虚拟机中的脚本?

通过使用VMware的PowerCLI,您可以使用Invoke-VMScript Cmdlet(需要安装vmtools)甚至在guest虚拟机具有networking连接性之前调用guest虚拟机中的脚本。

在联网可用之前是否有类似的机制可用于在KVM客户机内调用脚本?

我需要进行部署后自定义。

作为一种解决方法,我考虑了挂载磁盘映像和chroot,但是我正在寻找更具“脚本化”和直接的方式。

谢谢。

在networking出现之前,有一种非常标准的方法可以在任何 Linux发行版上运行脚本,也就是在联网开始之前将其放入启动序列。 例如,在我的CentOS 6盒子上,networking是由/etc/rc3.d/S10network启动的。 所以如果我想在networking出现之前运行一些东西,我可以把它放在/etc/rc3.d/S05myscript

对于那些喝醉了upstart或制冷剂的分销来说,还有其他更复杂的方法可以做到这一点。 但这一点仍然适用。

编辑 :这正是你的意思是“networking之前”,这不是你所说的“调用脚本”的意思。 你想从机器本身以外的地方 (这里是从KVM主机)调用脚本,这很好,我自由地承认,我的解决scheme没有帮助 – 但是你应该真的彻底改变你的问题,使你的需求更清晰!

顺便说一句,我知道用KVM无法做到这一点。

所以这里有三个选项:

  1. 使用libvirtd api获取控制台访问权限并执行命令。 我不会build议这是一个肮脏的黑客。 除非你禁用networking默认启动,你将不得不
  2. 使用libguestfs挂载磁盘并在引导之前调整设置。 这就是我devise的系统所做的,其实很容易做,而且pipe理起来也不复杂。 我们使用Perl和Sys :: GuestFS允许我们脚本命令没有太多的问题。
  3. 设置机器启动通过dhcp联网,并运行一个dhcpd服务器,给它一个临时的IP地址,然后通过SSH连接,并调整networkingconfiguration,并重新加载它。 这是最强大的解决scheme,但它需要您编写一个dhcpd服务器的脚本。 希望有所帮助。

我们为每个访客提供一个附属于主机上纯文件的辅助只读块设备。 VM主机可以使用此通道以安全的单向方式将访客特定的信息传递给访客:在我们的安装中,它只是一个带有文件系统定制&init脚本的tar文件。 客户 – >主机攻击面是最小的,我们不必处理由libguestfs施加的重大开销。

以下是我们使用的libvirt guest XML片段:

 <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none' io='native'/> <source file='/vm/hostconf/testhost.hostconf.tar'/> <target dev='vdb' bus='virtio'/> <readonly/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </disk> 

在guest虚拟机上,一个小的初始化脚本解压tar文件,并进行必要的更改。