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