qemu-guest-agent---介绍及安装

本秂侑毒 提交于 2020-01-20 16:59:48

qemu guest agent简称qga, 是在虚拟机中运行的守护进程,他可以管理应用程序,执行宿主机发出的命令。例如冻结或解冻文件系统,使系统进入挂起状态等。但是 guest agent(GA)并没有良好的安全保护,恶意的虚拟机可能发送虚假的回复

Setting QEMU GA up

目前QEMU通过串口发布GA。可以尝试的允许应用程序通过qume监视器与 GA进行通讯,但是需要virtio串口提供支持.

使用GA需要创建特别的串口,名为 org.qemu.guest_agent.0. 换句话说,需要在domain xml中的<devices>下添加如下内容:

<channel type='unix'>
   <source mode='bind' path='/var/lib/libvirt/qemu/f16x86_64.agent'/>
   <target type='virtio' name='org.qemu.guest_agent.0'/>
</channel>

如果使用libvirt1.0.6或者更新的的版本,可以省略<source>元素的path=" "属性。libvirt会进行自动配置。

Usage

Libvirt 不提供直接使用guest agent的任何支持,如果您不介意使用libvirt-qemu,则可以使用virDomainQemuAgentCommand API(由virsh qemu-agent-command公开);但需要注意,这是不受支持的,对agent所做的任何改变都会影响libvi,并可能会导致libvirt行为的不确定性。
同时,guest agent可以由几个支持的libvirt API内部使用,通常通过传递标志来发送请求。 例如,virDomainShutdownFlags:

VIR_DOMAIN_SHUTDOWN_DEFAULT        = 0,
VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN = (1 << 0),
VIR_DOMAIN_SHUTDOWN_GUEST_AGENT    = (1 << 1),

同样使用于重启API

VIR_DOMAIN_REBOOT_DEFAULT        = 0,
VIR_DOMAIN_REBOOT_ACPI_POWER_BTN = (1 << 0),
VIR_DOMAIN_REBOOT_GUEST_AGENT    = (1 << 1),

在virsh中,用户可以选择关机或重启的方式通过 -mode acpi|agent:

virsh reboot --mode agent $DOMAIN
virsh shutdown --mode agent $DOMAIN

如果用户正在创建快照,并希望在之前冻结并解冻文件系统,此时可通过为virDomainSnapshotCreate API指定VIR_DOMAIN_SNAPSHOT_CREATE_QUIESCE标志来完成,或者在virsh中设置:

virsh snapshot-create --quiesce $DOMAIN
virsh snapshot-create-as --quiesce $DOMAIN

警告:与任何监视器命令一样,GA命令可以无限期阻塞。Libvirt实现了一些基础性检测,以确定是否有qemu-ga实例在运行。 实际上,在每个有用的命令之前发出guest-sync命令。 如果它返回,则libvirt会认为guest agent已启动并正在运行,这时就会发送实际命令。 但是,guest agent可能会死亡或被终止。 guest-sync命令发出超时,如果命中guest agent则被认为不存在。

Configure guest agent without libvirt interference

在某些情况下,用户可能希望通过domain的XML配置guest agent,而不希望libvirt连接guest agent 的socket。 因为仅当其virtio channel 名为org.qemu.guest_agent.0时libvirt才可以连接到guest agent,

然而,可通过xml改变目标的名字

<channel type='unix'>
   <source mode='bind' path='/var/lib/libvirt/qemu/f16x86_64.agent'/>
   <target type='virtio' name='org.qemu.guest_agent.1'/>
</channel>

如果更改名字,则需要告知qemu GA

 # qemu-ga -p /dev/virtio-ports/$name

Guest requirements

仅需要一件事,之前提到过得,需要在domain 中配置串口,同时,虚拟机必须安装GA,幸运的是其已经封装在rpm中。通过如下指令可以进行安装

yum install qemu-guest-agent
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!