通过使用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无法做到这一点。
所以这里有三个选项:
我们为每个访客提供一个附属于主机上纯文件的辅助只读块设备。 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文件,并进行必要的更改。