概述
本特性可以按照用户自定义需求,修改、定制、迭代软件包的构建文件,使构建文件的各版本、包间宏定义差异性管理。
安装与卸载
安装
pip install merge_configs-0.0.6-py3-none-any.whl
卸载
pip uninstall merge-configs
使用方法
命令行
merge-configs --help
-p PACKAGES, --packages PACKAGES: 设置需要merge的软件包,多个软件包用空格隔开。
-c CONFIG_FILE, --config_file CONFIG_FILE: 设置分层根目录文件config.yaml。
-o OUTPUT, --output OUTPUT: 设置输出文件的路径。
-d --debug : 是否需要设置日志模式为debug。
-l LIST_FEATURES, --list-features LIST_FEATURES: 不为空时显示用户配置信息,设置存在于-p参数值中的软件包,多个软件包用逗号隔开。
-a TARGET_ARCH, --arch TARGET_ARCH: 设置merge的目标架构,例如:x86_64,aarch64。
常用命令:merge-configs -p \${package} -c \${config_path}/config.yaml -o \${output_path} -a \${target_arch_name} -l \${package}
常见的yaml结构如下:
经过转换后:
软件包定制
软件包编译信息经过的分层的架构分开保存,分成yaml主要配置、files.yaml文件配置、编译执行脚本、运行时执行脚本和changelog。其各个文件中定制的内容经由merge-configs工具解析转换,会在编译中生效。
参数定制
参数名定制: 参数名可以根据定制需求修改,通常只修改source,patch的编号,随意修改可能导致spec语法不支持。
参数值定制: 参数值定制的范围比较大,根据需求可随意修改内容,但是尽量不要修改值类型,如string类型改为list类型,可能导致转换错误。
修改Patch编号和它的值:
经过转换后:
条件定制
条件定制的方式是在yaml配置层的key中添加when条件。
Source:
0: http://ftp.gnu.org/gnu/libtool/libtool-%{version}.tar.xz
source when arch in aarch64:
100: libtool-aarch-%{version}.tar.xz
有三种方式定制:
架构定制。
buildRequires: - "gcc" buildRequires when arch in x86_64: - "gcc-c++" buildRequires when arch not in x86_64: - "gzip"
标签定制: defineFlags字段将会转换为bcond_with/bcond_without。
defineFlags: +auto_compile: "" patchset when +auto_compile: 1001: libtool-0.0.1-auto_compile.patch
宏定制: %%{rpmGlobal.}表示在包信息中定义的宏,%%%{rpmGlobal.}表示在rpm系统中定义的宏。
rpmGloal: posttest: 0 source when %%{rpmGlobal.posttest}: 1: posttest.sh source when %%%{rpmGlobal._debugsource_packages}: 2: openEuler_setup.py
定制后:
经过定制再转换后:
转换
目前eulermaker仅支持yaml->spec的转换,仅支持rpmbuild编译rpm包的编译方式。