qemu-guest-agent windows下的监控开发

2023-11-15

        windows下的qemu-guest-agent(简称qga)的名字叫做qemu-guest-agent-win32,目前最新版的版本号是qemu-guest-agent-win32-0.12.1.2-2.355.el6_4.9.x86_64,下载下来是一个rpm包,在centos6上安装后就会出现qemu-ga.exe和一个readme。可以看出windows下的qga是根据el6(rhel6/centos6)上的qemu-guest-agent编译出来的,而qemu-guest-agent的源码是包含在qemu的源码中的,所以我们只需要下载qemu-kvm.el6版本的源码就可以。qemu-kvm-0.12.1.2-2.355.el6_4.9.x86_64是centos6.4上的qemu-kvm版本,为什么不用centos6.5的qemu-kvm呢,那是因为6.4上的src.rpm包里的specfile是直接可以打包出qemu-guest-agent-win32.rpm的,而6.5的src.rpm包里的specfile是没有这一项的,而且6.5对windows版本仅更新了settime和gettime这两个功能,所以如果只是想快速添加自己的功能,可以直接下centos6.4的qemu-kvm。


1、下载源码
        从centos6.4的源下载qemu-kvm-0.12.1.2-2.355.0.1.el6_4.9.x86_64.src.rpm,安装src.rpm包,源码和补丁解压到$HOME/rpmbuild/SOURCES,此时的源码还不是真正的源码,因为qga的代码是作为补丁在patch文件中的,到SPECS文件夹中rpmbuild –bp qemu-kvm.spec将补丁和tar包的代码全部解压到BUILD文件夹中,现在才是真正的源代码,可以找到qga文件夹,其中就是qga的代码了,有win32的就是windows下的代码。


2、创建打包环境
        为了更方便的修改代码和打包,将刚才解压到BUILD中的代码打包成tar.gz包,更换掉SOURCES中的包,删除SOURCES中的所有patch文件,修改SPECS中specfile将文件中的Patch*和%patch* -p格式的全部删掉或者注释掉。现在打包就可以直接打包修改过的源代码了。


3、文件介绍
        与qga-win32有关的文件有qapi-schema-guest.json,qemu-ga.c,qga/*-win32。qagi-schema-guest.json中定义功能名称,输入输出数据类型,新加的功能函数的具体实现如果是加在commands-win32.c中时则也要在commands-posix.c中加入,linux和windows两边功能要一致不然编译会报错,即使linux函数没有实现具体功能,commands.c中是两边通用功能。commands-win32.c中就是windows下具体的功能函数,命名为qmp_*。qemu-ga.c中有windows下服务的创建,有默认virtio路径,可以在这里修改。


4、代码的修改
        举例:现在我们加入windows下的文件创建功能。
qapi-schema-guest.json中添加功能名称:

##
# @guest-file-create:
#
# create a file in the guest and retrieve a sign for it
#
# @filepath: Full path to the file in the guest to create.
#
# Returns: 0 on success,-1 on failure.
#
# Since: 0.0.1
##
{ 'command': 'guest-file-create',
  'data':    { 'path': 'str' },
  'returns': 'int' }
commands-win32.c中添加功能函数:
int64_t qmp_guest_file_create(const char *path, Error **err)
{
	const char *mode;
	mode = "wb";
	FILE *fh;

	slog("guest-file-create called, filepath: %s", path);
	fh = fopen(path, mode);
	if (NULL == fh) {
		slog("error on open %s", path);
		error_set(err, QERR_QGA_COMMAND_FAILED, "fopen() failed");
		return -1;
	}
	fclose(fh);
	return 0;

}
commands-posix.c中添加对应函数,可利用现有error不添加功能。

int64_t qmp_guest_file_create(const char *path, Error **err)
{
	error_set(err, QERR_UNSUPPORTED);
	return -1;
}

5、功能的验证
修改代码后打包替换掉SOURCES中的tar.gz包,会生成新的rpm包或者直接在BUILD中qemu-kvm-win32-build下拷贝qemu-ga.exe。

利用libvirt创建虚拟机win7,在XML文件device中加入

<channel type='unix'>
   <source mode='bind' path='/var/lib/libvirt/qemu/test.org.qemu.ga.0'/>
   <target type='virtio' name='org.qemu.ga.0'/>
 </channel>
path为宿主机上的unix domain socket文件路径,会在虚拟机创建时生成,name为虚拟机内部生成的serial设备名字。qemu-guest-agent默认的名字是org.qemu.guest_agent.0,由于我修改的vdsm上该名字已经被占用,所以自己新加一个serial。
将qemu-ga.exe放入win7中,下载需要的dll放在同一个路径下,使用cmd运行qemu-ga,如果既没有修改服务,也没有使用默认设备,可以使用-p来指定自己的serial设备名:
qemu-ga.exe –p \\.\Global\org.qemu.ga.0
在宿主机端使用socat来快速连接:

socat \var\lib\libvirt\qemu\test.org.qemu.ga.0 –
连上后就可以收发命令了
{“execute”:”guest-file-create”,”arguments”:{“path”:”c:\\test.txt”}}
如果成功会收到return 0的返回,并且c:\test.txt创建成功。qemu-ga由于是c语言写的,linux下实现的很多功能可以直接拷贝到windows下使用,修改起来还是很方便的。


5、参考

exe(rpm)下载路径:http://linuxsoft.cern.ch/cern/slc64/x86_64/yum/updates/repoview/qemu-guest-agent-win32.html
源码下载路径:http://nl.mirror.eurid.eu/centos-vault/6.4/updates/Source/SPackages/

参考文献1:http://wiki.qemu.org/Features/QAPI/GuestAgent
参考文献2:http://blog.csdn.net/hbsong75/article/details/9465683
参考文献3:http://www.cnblogs.com/biangbiang/p/3222458.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qemu-guest-agent windows下的监控开发 的相关文章

随机推荐

  • 初识Jena

    目录 前言 ApacheJena Or Neo4j Jena的安装和简介 从MySql转换数据到RDF RDF加载laod到Fuseki Fuseki的使用 遇到的问题 个人总结 其他 参考文献 前言 一个机器人问答系统的核心我认为包括两大
  • 给虚拟机换背景图片

    首先在桌面右键 选择 change background 在backgroud这里 点击右边的backgroud 因为我已经换好了 所以是这样 然后点击pictures就可以看到自己准备的图片了 直接把图片拖到虚拟机上的文件夹里就可以了 选
  • 【JMeter】 二次开发插件开发 Dubbo 接口测试插件浅析

    概述 在一些企业中 各类业务系统非常丰富 相互之间或对外提供很多的服务或接口 这些服务或接口中 有很多是需要强契约约束的 服务的提供方 服务的使用方必须遵守相同契约 这类服务最典型的就是RPC 其中应用广泛的有Dubbo gRPC等 使用J
  • 利用逆矩阵解线性方程组_经典Jacobi方法用于求解矩阵特征值

    1 引言 求解线性方程组在许多领域中都有重要应用 写成矩阵的形式 求解 可以写成 这里需要求解矩阵 的逆 线性代数 中给出的方法主要有两类 1 设置增广矩阵 利用高斯消元法 通过初等行列变换可以求 但这种方法不利于使用计算机计算 2 利用矩
  • Bootstarp入门教程(2) 概述

    概述 深入了解Bootstrap底层结构的关键部分 包括我们让web开发变得更好 更快 更强壮的最佳实践 1 HTML5文档类型 Bootstrap使用到的某些HTML元素和CSS属性需要将页面设置为HTML5文档类型
  • 【git】git compare with branch 一样的代码 但是却标识不一样 成块显示 Git 比较 不准确

    文章目录 1 概述 本文地址 https blog csdn net qq 21383435 article details 119483593 1 概述 我一个flink项目做git比较 用flink 1 9版本的对比1 13版本的 发现
  • Go_配置系统环境MacOS(M1)

    在MacOS下和JDK一样 配不配环境其实MacOS都是可以检测的到的 安装好以后直接输入go version是一样可以的 因为都是使用开发工具的 在开发工具里配置的话是样的 如果有习惯的话就配置一下吧 下载安装及配置环境 1 官网下载 h
  • 基于QT开发的跨平台文件校验工具

    QtFileHash QtFileHash是一款基于Qt开发的跨平台文件校验工具 支持Windows Linux MacOS平台 支持MD4 MD5 SHA1 SHA256 SHA512算法 项目地址 https github com zd
  • Linux下共享文件夹的位置在哪

    大家都知道vm这个虚拟机有个共享文件夹的功能 怎么设置这个共享文件夹在图示位置 但问题是在虚拟机里面这个文件夹的位置在哪里呢 我上网找了半天也没有解决方案 这里直接告诉大家 应该是被隐藏了但是我用 ls al看也没有 直接在用户 unbun
  • python 图片的读取、显示、处理与保存(PIL和OpenCV)

    目录 0 前言 1 图片读取 显示和保存 2 PIL与cv2相互转换 3 处理与保存 3 1 裁剪 3 2 绘制矩形 参考链接 0 前言 先撇开matplotlib不谈 在python江湖用于读取图片的主要为两个门派 分别是PIL家族 fr
  • Object.is()

    ES5 比较两个值是否相等 只有两个运算符 相等运算符 两个 和严格相等运算符 三个 它们都有缺点 前者会自动转换数据类型 后者的NaN不等于自身 以及 0等于 0 JavaScript 缺乏一种运算 在所有环境中 只要两个值是一样的 它们
  • 社区版VS2019下配置Opencv4.5.3

    1 下载Opencv 我下的是4 5 3 下载地址 https sourceforge net projects opencvlibrary 解压安装 没记错的话是 exe 文件 双击安装 没啥要注意的 选好路径就行 安装完成 安装完成后是
  • STM32——OLED调试工具与显示屏

    文章目录 一 调试工具 二 OLED简介 三 硬件电路接线图 四 OLED驱动函数 五 源码 OLED c OLED h OLED Font h 一 调试工具 调试方式 串口调试 通过串口通信 将调试信息发送到电脑端 电脑使用串口助手显示调
  • 外盘国际期货

    什么是交易 有人说交易就是买卖 从字面看这没啥毛病 概括性也很强 但我们不妨再细细掰扯下 交易 的深层含义 我们可以先将 交易 二字拆开来逐字理解与分析其意 交 象形字 一个人 最早出现在甲骨文 本义 动词 反叉两腿站立 说文解字 里泛指交
  • Docker修改已有镜像,并打包生成新的镜像tar文件

    文章目录 一 加载镜像 二 运行镜像 三 对镜像进行修改 四 将容器打包成新的镜像 五 将新的镜像保存为tar包 一 加载镜像 在镜像目录下打开linux终端 输入如下命令 docker load i 镜像文件名 tar 二 运行镜像 镜像
  • shineblink HC-SR505人体红外感应传感器

    HC SR505人体红外感应传感器 一 本例程实现功能 二 HC SR505传感器介绍 三 接线图 四 完整代码 五 代码运行结果 一 本例程实现功能 通过HC SR505人体红外感应传感器模块感应人体的出现 当感应到人体时 Core电路板
  • 支持二级汉字的 php 汉字助记码生成

    gbk2312 编码范围共94区 0 55区为一级汉字 是按照拼音顺序排列的 可以按照编码区间确定汉字的拼音 但是 56 区以后是按笔画顺序排列的 所以只能用对照表来确定拼音 鉴于目前我找不到现成的代码 固整理了一份 测试可用 PHP 汉字
  • 【操作系统】王道考研 p11 线程概念、多线程模型

    视频 知识总览 是什么 为什么 进程是程序的一次执行 但有些功能不是由一个程序顺序处理就能实现的 有的进程可能需要 同时 做很多事情 而传统的进程只能串行地执行一系列程序 因此 引入 线程 来增加并发度 引入线程后 线程成为了程序执行流的最
  • esp8266连接mqtt时client.publish出现的小问题

    client publish发送变化数据的问题 温湿度为例 先是获取数据 加入我们获取的湿度为humidity 温度为temp 下一步就是我们的发送环节啦 client publish 主题 内容 我们字节将内容替换是会报错的 我们需要对数
  • qemu-guest-agent windows下的监控开发

    windows下的qemu guest agent 简称qga 的名字叫做qemu guest agent win32 目前最新版的版本号是qemu guest agent win32 0 12 1 2 2 355 el6 4 9 x86