首页 理论教育 QEMUGuestAgent的使用方法与实现

QEMUGuestAgent的使用方法与实现

时间:2023-10-28 理论教育 版权反馈
【摘要】:图4-8qemu-guest-agent实现简图1.使用方法QAPI的使用方法也比较简单,首先需要在启动虚拟机时添加qga设备,形如“-chardev socket,path=/tmp/qga.sock,server,nowait,id=qga0-device virtio-serialdevice virtserialport,chardev=qga0,name=org.qemu.guest_agent.0”。注意qemu-ga的默认服务参数中可能会有命令黑名单),即可在虚拟机中看到如图4-10的状态。图4-10启动QEMU Guest Agent服务下载地址与编译方法如下。

QEMUGuestAgent的使用方法与实现

QAPI是qemu-guest-agent实现的核心,它在QMP的基础上进行拓展,通过虚拟机内的qemu-guest-agent进程和与virtio串口设备(默认为virtio-serial,也可以使用isaserial或者UNIX套接字)共同完成虚拟化服务代理与虚拟机内部的系统级别交互,如图4-8。

图4-8 qemu-guest-agent实现简图

1.使用方法

QAPI的使用方法也比较简单,首先需要在启动虚拟机时添加qga设备,形如“-chardev socket,path=/tmp/qga.sock,server,nowait,id=qga0-device virtio-serialdevice virtserialport,chardev=qga0,name=org.qemu.guest_agent.0”。然后,我们需要虚拟机操作系统内安装并启动qemu-guest-agent服务。服务启动后,通过虚拟化服务组件(比如OpenStack的Nova、oVirt的vdsm、CloudStack的cloudagent等)就可以与虚拟机进行系统文件级别的通信了,包括读写虚拟机内的某个文件、执行命令等,目前社区版提供的所有命令及返回值均可在QEMU源码目录中的qga/qapischem a.json查看。

接下来我们在CentOS 7中启动一台W indows 7虚拟机,介绍qga的具体使用方法。

首先使用VirtManager(将在后面章节具体介绍)创建虚拟机,并添加qga设备,暴露于服务器上的UNIX套接字路径为/var/lib/libvirt/qemu/channel/target/domain-win7/org.qemu.guest_agent.0,添加对应的virtio驱动,如图4-9所示。

图4-9 安装virtio Serial驱动

然后安装提前下载或者编译的qemu-ga.msi,并启动服务(命令等同于“qemu-ga.exe–p\\.\Global\org.qemu.ga.0”。注意qemu-ga的默认服务参数中可能会有命令黑名单),即可在虚拟机中看到如图4-10的状态(QEMU Guest Agent VSSProvider服务可用于某些支持Windows VSS的应用程序进行备份操作)。

图4-10 启动QEMU Guest Agent服务

下载地址与编译方法如下(需要在Fedora发行版中编译Windows版本的qemu-ga,笔者使用的版本为Fedora 23)。

(www.xing528.com)

启动完成之后,可以在服务器上使用socat命令作为客户端与其进行交互。以在C:\a.txt中写入“hello world!”为例。

使用qemu-ga时需要注意的问题

对于Windows虚拟机,qapi-schema.json中列举的命令并非全部可用;如果使用了其他串口设备作为代理设备,注意修改/etc/sysconfig/qemu-ga(Linux)为对应的设备路径;当系统中的qemu-ga服务启动时,有时会出现客户端连接失败的情况,请注意相关权限、启动顺序设置,并做好相应的容错机制(libvirt中已经提供)。

2.扩展开发示例

QAPI的扩展也比较简单,我们只需要修改QEMU源码中的三个文件即可,分别是qga/qapi-schema.json、qga/commands-win32.c、qga/commands-posix.c。另外,习惯Python的读者现在也可以使用Python实现的qemu-guest-agent(可访问https://negotiator.readthedocs.org获取详细信息)。

接下来向qemu-ga中添加Windows下的touch命令,用以作为开发示例。修改qga/qapi-schema.json,添加如下代码。

然后在qga/commands-win32.c中添加如下代码。

添加完成后重新编译qemu-ga.exe拷贝至虚拟机中启动。

然后再使用socat连接,输入“{“execute”:”guest-file-create”,”arguments”:{“path”:”c:\\test.txt”}}”,得到返回值为0,就可以在虚拟机中的C:\看到刚刚创建test.txt文件了。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈