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下的监控开发 的相关文章

  • 防止 DLL 文件通过 MS Detours 加载到我的进程中

    我想阻止特定的第三方 DLL 文件在运行时加载到我的应用程序进程中 我最初的尝试是使用 MS Detours 产品 我有一个32位的MFC http en wikipedia org wiki Microsoft Foundation Cl
  • 如何在 Windows 上使用命令行获取 svn 修订信息

    我正在尝试使用此命令行获取头部的修订信息 svn info https myserver branches Code Improvements rHEAD find Revision 然而 这返回修订版 1234 由于我使用 svn inf
  • 如何与 QEMU 映像共享主机的本地主机?

    想知道这样的事情是否可能 我有一个服务器在监听localhost 1889我的本地 PC 和 QEMU 映像能够使用相同的端口和 IP 访问服务器 localhost 1889 确实正在寻找以下解决方案之一 用于启用此功能的 QEMU 标志
  • QWinTaskbarProgress 不会显示

    我使用的是windows7和Qt5 3 0 我在 MainWindow 的构造函数中添加了以下内容 但任务栏上没有显示任何内容 我错过了什么 QWinTaskbarProgress pTaskbarProgress new QWinTask
  • fopen_s 怎么会比 fopen 更安全呢?

    我正在处理遗留代码Windows平台 当我编译代码时VS2013 它给出以下警告 错误 C4996 fopen 该函数或变量可能不安全 考虑使用fopen s反而 要禁用弃用 请使用 CRT SECURE NO WARNINGS 详情请参见
  • 如何告诉 IntelliJ 使用 Java 1.6 JDK 启动 gradle?

    一个简单的问题 即使经过几个小时的尝试和搜索 我也无法弄清楚 我安装了 Java 6 和 7 如何告诉 IntelliJ 使用 JDK 版本 1 6 启动 Gradle 构建 无论我做什么 IntelliJ 都会以以下方式开始我的 grad
  • 当我的进程被终止时到底会发生什么?

    我有一个包含本机代码和托管代码的混合进程 在 Windows Server 2003 上运行 当我从进程资源管理器中终止进程时 它会进入 100 cpu 的状态 并在消失之前保持这种状态一段时间 有时甚至 10 分钟 在此期间我无法 杀死
  • 有什么理由不在Python中混合使用多处理和线程模块

    我正在考虑使用Python来实现一个需要大量多线程的程序 另一个要求是它将在桌面上运行 因此拥有许多进程将使应用程序显得混乱且难以杀死 在任务管理器中 因此 我正在考虑使用线程和多处理模块来减少进程数量 据我了解 GIL 仅适用于单个进程
  • 加载配置文件时发生错误:访问路径 c:\Program Files (x86)\... 被拒绝

    我有一个在 Windows 7 上使用 Visual Studio 2010 中的安装程序部署的应用程序 该程序在 Windows 7 和 XP 上部署并运行良好 但当我在 Windows 8 系统上部署它时 出现有关访问配置文件的错误 该
  • PHP 7.0.5:使用未定义的常量 FTP_BINARY - 假定为“FTP_BINARY”

    在 Windows IIS 上升级到 PHP 7 0 5 终于有了 sqlsrv PDO 驱动程序 我正在使用 Laravel 5 1 当尝试连接到 FTP 驱动器时 出现以下错误https github com thephpleague
  • 检查 Win32 线程是否正在运行或处于挂起状态

    如何检查 Win32 线程是否正在运行或处于挂起状态 我找不到任何提供线程状态的 Win32 API 那么如何获取线程状态呢 我认为 最初 没有提供此信息 因为任何提供此信息的 API 都会产生误导且无用 考虑两种可能的情况 当前线程已挂起
  • 为什么非交互式批处理脚本认为我按下了 Control-C?

    因此 当输出日志中突然出现以下内容时 我的批处理脚本运行得很好 21 27 13 99 c apps w7lab scripting gt some command Error 3221225786 CTerminate batch job
  • 发送/捕获 SIGTERM 的 Win32 API 模拟

    在 POSIX OS 下 有信号 API 允许向进程发送信号以将其关闭 使用kill 您可以使用sigaction捕获它并执行您需要的操作 然而 Win32不是POSIX系统 所以 如何处理可能出现的关闭事件 例如来自 任务管理器 中的 结
  • “composer”在 Windows 服务器中未被识别为内部或外部命令

    我使用的是Windows Server 2008操作系统 我下载作曲家安装程序 exe https getcomposer org download 并安装到我的电脑上 当我尝试时composer install 我收到错误 compose
  • Nodejs 在 Windows 上找不到已安装的模块

    我现在正在Windows上学习nodejs 使用npm cmd全局安装了几个模块 nodejs找不到已安装的模块 以玉石为例 npm install jade g Jade安装在目录中 C Program Files x86 nodejs
  • 对 .NET Windows 安装程序应用程序执行注册表搜索

    我有一个 NET winform 安装程序应用程序 在安装之前 我会进行注册表搜索以检查计算机上是否安装了 MS Access Runtime 搜索目标机器 搜索目标机器的属性 启动条件 启动条件的属性 但是我想避免对路径进行硬编码 例如
  • WMI 不返回 Windows 7 64 上的所有安装程序

    今天 我们尝试使用以下脚本列出每个虚拟机上所有已安装的程序来查询 WMI 我们发现它会列出所有 64 位应用程序 以及一些 32 位应用程序 但并非所有应用程序 32 位 64 位 都会列出 param string ExportPath
  • 我可以在 Emacs 的 shell 模式下使用 PowerShell 吗?

    我可以在 emacs 的 shell 模式下使用 powershell 作为 shell 吗 How 请参阅 Jeffrey Snover 的博客文章在 Emacs 内运行的 PowerShell http blogs msdn com p
  • 使用“for”循环迭代目录中的所有文件

    如何使用 a 迭代目录中的每个文件for loop 我如何判断某个条目是目录还是文件 这会递归地列出当前目录及其子目录中的所有文件 并且仅列出文件 for r i in do echo i 此外 如果您在批处理文件中运行该命令 则需要将 符
  • 无法启动 Windows 快捷方式

    我正在尝试使用 python 启动 Windows 我已经尝试了 os system subprocess call os startfile 等多种方法 但总是收到错误消息 指出路径不存在 我知道路径是正确的 因为我尝试在 CMD EXE

随机推荐

  • 初识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