Amazon Best VPN GoSearch

OnWorks 网站图标

guestfs-hacking - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 guestfs-hacking

这是命令 guestfs-hacking,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


guestfs-hacking - 扩展和贡献 libguestfs

商品描述


本手册页适用于想要扩展 libguestfs 本身的黑客。

产品详情 OF 守则
Libguestfs 源码位于 github 仓库
https://github.com/libguestfs/libguestfs

libguestfs 中的大量样板代码(RPC、绑定、文档)是
生成。 这意味着许多源文件似乎从一个
简单的 git checkout。 你必须运行生成器 ("./autogen.sh && make -C
生成器”)以创建这些文件。

Libguestfs 使用基于自动工具的构建系统,主要文件为 配置文件
生成文件。 该 发电机 子目录包含生成器,以及描述
API。 这 SRC 子目录包含库的源代码。 这 器具守护
子目录包含构建组件的代码源,以及代码
分别在设备中运行。 其他目录在本节中介绍
“源代码子目录”如下。

除了所有 API 入口点都通过一些生成的代码这一事实之外,该库是
直截了当。 (事实上​​,即使是生成的代码也被设计成可读的,并且应该
读作普通代码)。 一些动作完全在库中运行,并被编写为 C
下文件中的函数 SRC. 其他人被转发到守护进程(经过一些
生成的 RPC 编组)它们在下面的文件中显示为 C 函数 守护.

要从源代码构建,首先阅读“README”文件。

当地的* FILES
顶级源目录中以前缀开头的文件 当地的* 被 git 忽略。
这些文件可以包含构建 libguestfs 所需的本地配置或脚本。

按照惯例,我有一个名为 本地配置 这是一个简单的包装
自动生成文件 包含我需要的本地配置自定义:

. 本地环境
./autogen.sh \
--with-default-backend=libvirt \
--启用-gcc-警告\
--启用-gtk-doc \
-C \
“$@”

所以我可以用它来构建 libguestfs:

./localconfigure && make

如果顶层构建目录中有一个文件叫做 本地环境,那么它将来自
“制作”。 该文件可以包含所需的任何本地环境变量,例如。 跳过
测试:

# 使用替代的 python 二进制文件。
导出 Python=python3
# 跳过这个测试,它坏了。
导出 SKIP_TEST_BTRFS_FSCK=1

需要注意的是 本地环境 包含在顶部 Makefile 中(因此它是一个 Makefile 片段)。 但是如果
它也来自您的 本地配置 脚本然后它被用作shell脚本。

ADDING A 新品 API 活动正式启动
因为在 libguestfs 中生成了大量样板代码,这使得它很容易
扩展 libguestfs API。

要添加新的 API 操作,有两个更改:

1. 您需要添加调用的描述(名称、参数、返回类型、测试、
文件)到 生成器/actions.ml.

有两种 API 动作,取决于调用是否经过
设备中的守护进程,或者完全由库提供服务(请参阅“架构”
来宾内部(3))。 “guestfs_sync”中 来宾(3) 是前者的一个例子,
因为同步是在设备中完成的。 “guestfs_set_trace”中 来宾(3) 是一个
后者的示例,因为在句柄和所有跟踪中维护了跟踪标志
是在图书馆一侧完成的。

大多数新操作属于第一种类型,并被添加到“daemon_functions”列表中。
每个函数都有一个在 RPC 协议中使用的唯一过程号,它被分配
当我们发布 libguestfs 并且不能重用时,到那个动作。 拿最新的
程序编号并增加它。

对于第二种类型的仅限库的操作,添加到“non_daemon_functions”列表中。
由于这些函数由库提供服务并且不通过 RPC
守护进程的机制,这些函数不需要过程号,所以
程序编号设置为“-1”。

2. 执行操作(在 C 中):

对于守护进程,实现函数“do_ “在“守护进程/”目录中。

对于库操作,实现函数“guestfs_impl_ “在“src/”
目录。

在任何一种情况下,使用另一个函数作为执行操作的示例。

进行这些更改后,使用“make”进行编译。

请注意,您不需要实现 RPC、语言绑定、手册页或任何东西
别的。 它都是从 OCaml 描述自动生成的。

ADDING 试验 用于 AN API 活动正式启动
您可以为每个 API 调用提供零个或任意多个测试。 测试可以是
作为 API 描述的一部分添加(生成器/actions.ml),或者在一些罕见的情况下你
可能想要将脚本放入“tests/*/”。 请注意,将脚本添加到“tests/*/”是
速度较慢,因此如果可能,请使用第一种方法。

下面介绍在添加API测试时使用的测试环境 动作.ml.

测试环境有4个块设备:

/ dev / sda上的 500MB
用于测试的通用块设备。

的/ dev / sdb的 500MB
的/ dev / sdb1 是用于测试文件系统写入操作的 ext2 文件系统。

的/ dev / SDC 10MB
在一些需要两个块设备的测试中使用。

的/ dev / SDD
具有固定内容的 ISO(请参阅 图像/test.iso).

为了能够在合理的时间内运行测试,libguestfs 设备和
块设备在测试之间重用。 所以不要尝试测试“guestfs_kill_subprocess”
来宾(3):-x

每个测试都从一个初始场景开始,使用“Init*”表达式之一进行选择,
描述于 生成器/types.ml. 这些初始化上面提到的磁盘
记录在的特定方式 类型.ml. 你不应该假设任何关于
未初始化的其他磁盘的先前内容。

您可以向任何单个测试添加先决条件子句。 这是一个运行时检查,
如果失败,则会导致跳过测试。 在测试命令时很有用
可能不适用于 libguestfs 构建的所有变体。 一个有先决条件的测试
“始终”意味着无条件地运行。

此外,打包者可以通过在之前设置环境变量来跳过单个测试
运行“检查”。

跳过_测试_ _ =1

例如:“SKIP_TEST_COMMAND_3=1”跳过“guestfs_command”中的测试#3 来宾(3)。

要么:

跳过_测试_ =1

例如:“SKIP_TEST_ZEROFREE=1”跳过所有“guestfs_zerofree” 来宾(3)测试。

打包程序只能通过设置运行某些测试,例如:

TEST_ONLY="vfs_type zerofree"

参见 测试/c-api/tests.c 有关这些环境变量如何工作的更多详细信息。

调试 新品 API 行动
在提交新动作之前测试它们的效果。

您可以使用 guestfish 来尝试新命令。

调试守护进程是一个问题,因为它在最小环境中运行。 然而
您可以将守护进程中的 fprintf 消息发送到 stderr,如果您使用它们,它们将显示
“guestfish -v”。

ADDING A 新品 语言 捆绑
所有语言绑定都必须由生成器生成(请参阅 发电机 子目录)。

目前还没有这方面的文档。 我们建议您查看现有的绑定,例如。
生成器/ocaml.ml or 生成器/perl.ml.

ADDING 试验 用于 语言 绑定
语言绑定应该带有测试。 以前对语言绑定的测试是
相当临时,但我们一直试图将每种语言的测试集正式化
绑定应该使用。

目前只有 OCaml 和 Perl 绑定实际实现了完整的测试集,并且
OCaml 绑定是规范的,因此您应该模拟 OCaml 测试的作用。

这是测试使用的编号方案:

- 000+ 基本测试:

010 加载库
020 创建
030 创建标志
040 创建多个句柄
050 测试设置和获取配置属性
060 明确关闭
065 隐式关闭(在 GC 语言中)
第070话

- 100 次启动、创建分区、LV 和文件系统

- 400 多个事件:

410关闭事件
420 条日志消息
430 条进度消息

- 800 多个回归测试(特定于语言)

- 900 多个针对该语言的任何其他自定义测试

为了在运行测试时节省时间,只有 100、430、800+、900+ 应该启动手柄。

格式化 守则
我们的 C 源代码通常遵循一些基本的代码格式约定。 这
现有的代码库在这方面并不完全一致,但我们更喜欢
贡献的代码格式类似。 简而言之,使用空格而不是制表符来缩进,
每个缩进级别使用 2 个空格,除此之外,请遵循 K&R 样式。

如果您使用 Emacs,请将以下内容添加到您的启动文件之一(例如, 〜/.emacs),
帮助确保您正确缩进:

;;; 在 libguestfs 中,到处都用空格缩进(不是制表符)。
;;; 例外:Makefile 和 ChangeLog 模式。
(添加钩子'查找文件钩子
'(lambda() (if (and buffer-file-name)
(字符串匹配“/libguestfs\\>”
(缓冲区文件名))
(不是(字符串等于模式名称“更改日志”))
(不是(字符串等于模式名称“Makefile”)))
(setq 缩进制表符模式 nil))))

;;; 在 libguestfs 中编辑 C 源代码时,请使用此样式。
(defun libguestfs-c-mode()
“具有调整默认值的 C 模式与 libguestfs 一起使用。”
(交互的)
(c-set 风格的“K&R”)
(setq c-缩进级别 2)
(setq c-基本偏移 2))
(添加钩子 'c-mode-hook
'(lambda() (if (string-match "/libguestfs\\>"
(缓冲区文件名))
(libguestfs-c-模式))))

测试 你的 变化
编译时启用警告(并修复发现的任何问题):

./configure --enable-gcc-警告

有用的目标是:

“做检查”
运行常规测试套件。

这是使用常规 automake "TESTS" 目标实现的。 看到汽车制造商
有关详细信息的文档。

“进行检查-valgrind”
在 valgrind 下运行测试套件的子集。

任何 生成文件 在具有“check-valgrind:”目标的树中,将由此运行
规则。

“检查valgrind-local-guests”
使用本地安装的 libvirt 来宾在 valgrind 下运行测试套件的子集
(只读)。

“直接检查”
使用默认设备后端运行所有测试。 这仅在非
使用“./configure --with-default-backend=...”选择默认后端

“进行检查-valgrind-direct”
使用默认设备后端在 valgrind 下运行测试套件的子集。

“检查-uml”
使用用户模式 ​​Linux 后端运行所有测试。

由于用户模式 ​​Linux 内核没有标准位置,因此您 它们在许多情况下都能提供类似的结果。 设置
“LIBGUESTFS_HV”指向内核映像,例如:

检查 uml LIBGUESTFS_HV=〜/ d / linux-um / vmlinux

“进行检查-valgrind-uml”
在 valgrind 下使用用户模式 ​​Linux 后端运行所有测试。

如上所述,您必须将“LIBGUESTFS_HV”设置为指向内核。

“使用上游 qemu 进行检查”
使用本地 qemu 二进制文件运行所有测试。 它在 QEMUDIR 中查找 qemu 二进制文件
(默认为 $HOME/d/qemu),但您可以在命令中将其设置为另一个目录
行,例如:

使用上游 qemu 进行检查 QEMUDIR=/usr/src/qemu

“使用上游 libvirt 进行检查”
使用本地 libvirt 运行所有测试。 这仅在 libvirt 后端有任何影响
使用“./configure --with-default-backend=libvirt”选择

它在 LIBVIRTDIR 中查找 libvirt(默认为 $HOME/d/libvirt),但你可以设置这个
到命令行上的另一个目录,例如:

使用上游 libvirt 检查 LIBVIRTDIR=/usr/src/libvirt

“让检查变慢”
运行一些默认情况下不运行的缓慢/长时间运行的测试。

任何 生成文件 在具有“check-slow:”目标的树中,将按此规则运行。

“全部检查”
相当于运行所有“make check*”规则。

“做检查释放”
运行一个“make check*”规则的子集,这些规则在 tarball 可以被通过之前
释放。 目前这是:

· 查看

·检查valgrind

·直接检查

·检查valgrind直接

·检查缓慢

“进行安装检查”
在安装的 libguestfs 副本上运行“make check”。

正在测试的已安装 libguestfs 的版本,以及 libguestfs 的版本
源树必须相同。

这样做:

./autogen.sh
清洁||:
使
进行安装检查

达蒙 定制 打印 格式化程序
在守护程序代码中,我们创建了自定义 printf 格式化程序 %Q 和 %R,它们用于
做外壳引用。

%Q 简单的 shell 引用字符串。 任何空格或其他 shell 字符都会为您转义。

%R 与 %Q 相同,但字符串被视为以 sysroot 为前缀的路径。

例如:

asprintf (&cmd, "cat %R", 路径);

会产生“cat /sysroot/some\path\with\spaces”

请注意: Do 而不去 当您将参数传递给“command{,r,v,rv}()”时使用这些
职能。 这些参数不需要被引用,因为它们不是通过
shell(而是直接执行)。 您可能想使用“sysroot_path()”函数
然而。

提交 你的 新品 API 行动
将补丁提交到邮件列表: http://www.redhat.com/mailman/listinfo/libguestfs
抄送 [电子邮件保护].

国际化 (国际化) 客户服务
我们在库中支持 i18n(无论如何都是 gettext)。

然而,许多消息来自守护进程,我们目前不翻译这些消息。
原因之一是设备通常会从中删除所有区域设置文件,因为
它们占用了大量空间。 所以我们必须阅读其中一些,以及复制我们的
PO 文件导入设备。

调试消息永远不会被翻译,因为它们是为程序员准备的。

守则 子目录
对齐
虚拟对齐扫描(1) 命令和文档。

器具
libguestfs 组件、构建脚本等。

打坏
Bash 选项卡完成脚本。

构建辅助
autotools 使用的各种构建脚本。

建设者
虚拟建设者(1) 命令和文档。

- 虚拟猫(1) 虚拟文件系统(1) 虚拟日志(1)和 虚拟机(1) 命令和
文档。

的contrib
外部贡献,实验部分。

定制
虚拟定制(1) 命令和文档。

守护
在 libguestfs 设备内运行并执行操作的守护程序。

df 虚拟机(1) 命令和文档。

迪伯 虚拟机(1) 命令和文档。

差异
虚拟差异(1) 命令和文档。

DOC 各种手册页。

编辑
虚拟编辑(1) 命令和文档。

例子
C API 示例代码。

鱼露
客鱼(1)、命令行shell,以及建立在上面的各种shell脚本如
虚拟拷贝(1) 虚拟拷贝(1) 虚拟机(1) 解压(1)。

格式
虚拟格式(1) 命令和文档。

保险丝
来宾山(1)、FUSE(用户空间文件系统)建立在libguestfs之上。

发电机
至关重要的生成器,用于自动生成大量
用于诸如 RPC 和绑定之类的样板 C 代码。

获取内核
虚拟获取内核(1) 命令和文档。

库库库
Gnulib 用作可移植性库。 此处包含 gnulib 的副本。

检查员
虚拟检查员(1)、虚拟机镜像检查器。

商标
网站上使用的标志。 顺便说一下,这条鱼叫亚瑟。

m4 autoconf 使用的 M4 宏。

制作-fs
virt-make-fs(1) 命令和文档。

毫升库
使用的各种库和通用代码 虚拟调整大小(1) 和其他工具
用 OCaml 编写。

2 虚拟-p2v(1) 用于构建 virt-p2v ISO 或磁盘的命令、文档和脚本
图片。

po 简单 gettext 字符串的翻译。

文档
用于翻译联机帮助页和 POD 文件的构建基础结构和 PO 文件。
最终这将与 po 目录,但那是
复杂。

营救
虚拟救援(1) 命令和文档。

调整
虚拟调整大小(1) 命令和文档。

稀疏化
虚拟化(1) 命令和文档。

SRC C 库的源代码。

系统预备
虚拟系统准备(1) 命令和文档。

测试
测试。

测试数据
测试使用的文件和其他测试数据。

测试工具
供最终用户测试他们的 qemu/内核组合是否适用的测试工具
libguestfs。

TMP 运行测试时用于临时文件(而不是 / tmp目录 等等)。 原因是
这样您就可以在没有一组 libguestfs 的情况下运行多个并行测试
测试覆盖另一个创建的设备。

工具
用 Perl 编写的命令行工具(虚拟双赢注册(1)和许多其他)。

v2v virt-v2v(1) 命令和文档。

官网
- http://libguestfs.org 网站文件。

尖锐的
二郎
对象
golang
哈斯克尔
java的
月亮
卡姆
PHP
perl的
蟒蛇
红宝石
语言绑定。

MAKING A 稳定 RELEASE
当我们发布稳定版本时,这里记录了几个步骤。 见“LIBGUESTFS
版本号”在 来宾(3) 有关稳定分支政策的一般信息。

· 检查“make && make check”至少适用于 Fedora、Debian 和 Ubuntu。

· 检查“./configure --without-libvirt”是否有效。

· 敲定 guestfs-release-notes.pod

·从Zanata推拉。

跑:

扎那塔推

将最新的 POT 文件推送到 Zanata。 然后运行:

./zanata-pull.sh

这是提取最新翻译的包装器 *.po 文件。

· 考虑将 gnulib 更新到最新的上游版本。

· 在下面创建新的稳定和开发目录 http://libguestfs.org/download.

· 编辑 网站/index.html.in.

· 设置版本(在 配置文件) 到新 稳定 版本,即。 1.XX.0,并提交
它:

./本地配置
使 distclean -k
./本地配置
make && make dist
使维护者提交
制作维护者标签

· 在 git 中创建稳定分支:

git 分支 stable-1.XX
git push origin stable-1.XX

· 做一个稳定分支的完整发布。

· 将版本设置为下一个开发版本并提交。 可选地做一个完整的
开发分支的发布。

使用 onworks.net 服务在线使用 guestfs-hacking


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad




×
广告
❤️在这里购物、预订或购买——免费,有助于保持服务免费。