From 6790170143aa73373c965cf01ce4d2c0b75f3053 Mon Sep 17 00:00:00 2001 From: ZWJason Date: Fri, 10 Jan 2025 11:46:22 +0800 Subject: [PATCH 1/2] =?UTF-8?q?Add=20oEEP-0020=20openEuler=E8=BD=AF?= =?UTF-8?q?=E4=BB=B6=E5=8C=85=E7=89=88=E6=9C=AC=E7=9B=91=E6=8E=A7=E9=85=8D?= =?UTF-8?q?=E7=BD=AE.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...EP-0000 oEEP \347\264\242\345\274\225.md" | 2 +- ...21\346\216\247\351\205\215\347\275\256.md" | 83 +++++++++++++++++++ 2 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 "oEEP/oEEP-0020 openEuler\350\275\257\344\273\266\345\214\205\347\211\210\346\234\254\347\233\221\346\216\247\351\205\215\347\275\256.md" diff --git "a/oEEP/oEEP-0000 oEEP \347\264\242\345\274\225.md" "b/oEEP/oEEP-0000 oEEP \347\264\242\345\274\225.md" index a5f7a1f..8d07f3a 100644 --- "a/oEEP/oEEP-0000 oEEP \347\264\242\345\274\225.md" +++ "b/oEEP/oEEP-0000 oEEP \347\264\242\345\274\225.md" @@ -32,7 +32,7 @@ | 0017 | P,I | [openEuler软件质量分级&执行策略](oEEP-0017%20openEuler软件质量分级&执行策略.md) | 范佳臣@disnight (fanjiachen3 at huawei.com) | 2023-10-14 | | 0018 | D,A | [openEuler全局构建参数变更记录](oEEP-0018%20openEuler全局构建参数变更记录.md) | Funda Wang (fundawang at yeah.net) | 2024-09-16 | | 0019 | P,I | [openEuler社区部分软件包自动化管理流程](oEEP-0019%20openEuler社区部分软件包自动化管理流程.md) | 曹志 (george at openeuler.sh) | 2024-11-28 | - +| 0020 | P,I | [openEuler软件包版本监控配置](oEEP-0020%20openEuler软件包版本监控配置.md) | 翟文杰(zwjsec at huawei.com) | 2025-01-10 | ## oEEP 类型分类: - D (Document, 信息整理): 信息梳理形成的文档。此类 oEPP 包含社区索引,指南,规范或其他和 openEuler 相关的信息。 - P (Process, 流程设计) -- openEuler 社区的流程设计,包括社区治理,CI/CD,测试等相关要求。 diff --git "a/oEEP/oEEP-0020 openEuler\350\275\257\344\273\266\345\214\205\347\211\210\346\234\254\347\233\221\346\216\247\351\205\215\347\275\256.md" "b/oEEP/oEEP-0020 openEuler\350\275\257\344\273\266\345\214\205\347\211\210\346\234\254\347\233\221\346\216\247\351\205\215\347\275\256.md" new file mode 100644 index 0000000..0ed9b54 --- /dev/null +++ "b/oEEP/oEEP-0020 openEuler\350\275\257\344\273\266\345\214\205\347\211\210\346\234\254\347\233\221\346\216\247\351\205\215\347\275\256.md" @@ -0,0 +1,83 @@ +--- +标题: openEuler软件包版本监控配置 +类别: 流程设计 +摘要: 监控软件包上游版本 +作者: 翟文杰(zwjsec at huawei.com) +状态: 初始化 +编号: oEEP-0020 +创建日期: 2024-11-12 +修订日期: 2025-01-10 +--- + +## 背景 +为了更好的维护和更新openEuler的软件包,软件包监控服务通过CI门禁自动监控openEuler软件包的上游软件版本和架构信息,从而解决软件包自动升级和查看软件包版本支持情况。可访问[软件中心](https://easysoftware.openeuler.org/zh/)查看软件包上游版本信息 + +## 软件包监控服务如何监控上游版本信息 + +软件包监控服务通过获取[community](https://gitee.com/openeuler/community/blob/master/sig/README.md)仓库的代码仓描述文件,解析到仓库的软件包上游信息配置,从而通过配置中的上游包链接和规则拉取到软件包的上游版本。 +实现上游软件包配置方式需要在[代码仓描述文件格式](https://gitee.com/openeuler/community/blob/master/sig/README.md#%E4%BB%A3%E7%A0%81%E4%BB%93%E6%8F%8F%E8%BF%B0%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F) 中`扩充upstream字段含义`。 + +### 代码仓描述文件格式 +upstream 清单中每个元素代表软件包上游版本信息,以关系字典的方式呈现,需要包含以下子元素: +| 名称 | 类型 | 说明 | +| :-- | :-- | :-- | +| Version URL | (必选)字符串 | 包含软件包版本信息的URL,如https://mirrors.edge.kernel.org/pub/software/network/ethtool/ 或者 https://ftp.gnu.org/gnu/gmp/ 等。 +| Regex | (必选)字符串 | 正则表达式用于从`Version URL`解析捕获出正确软件版本号 | +| homepage | (必选)字符串 | 表示软件包主页地址,可不包含软件包版本号等信息。可将存量upstream字段中的url复制至该处 | + +### 代码仓描述文件样例 +``` +- name: alluxio + description: 'alluxio' + branches: + - name: master + type: protected + type: public + upstream: + homepage: https://github.com/Alluxio/alluxio/ + regex: (?:Alluxio\s+)?v(\d+\.\d+\.\d+) + version_url: https://github.com/Alluxio/alluxio/releases +``` + +`version_url`: https://github.com/Alluxio/alluxio/releases 带有alluxio软件包版本号的url连接地址 + +`regex`: (?:Alluxio\s+)?v(\d+\.\d+\.\d+) +1. ```(?:Alluxio\s+)?```:这是一个非捕获组(由于前面的?:),并且它是可选的(由于后面的?)。这意味着括号内的内容可以出现0次或1次。在这个例子中,它用于匹配可能存在的“Alluxio ”前缀(注意后面有一个空格)。由于是非捕获组,所以即使匹配成功,这部分内容也不会被单独捕获或保存。 +2. ```Alluxio\s+```:这是非捕获组内的内容。Alluxio是字面量字符串,表示要匹配的文本中包含“Alluxio”。\s+匹配一个或多个空白字符(如空格、制表符等),确保“Alluxio”和后面的“v”版本标识符之间有空格分隔 +3. ```(\d+\.\d+\.\d+)```: 这是一个捕获组,用于匹配并捕获具体的版本号。\d+匹配一个或多个数字字符,.在这里是字面量点字符(表示版本号中的分隔符),由于.在正则表达式中有特殊含义(匹配任意单个字符),所以需要使用\进行转义以表示其字面量意义。因此,\d+\.\d+\.\d+匹配形如1.2.3的版本号,其中每个数字部分至少有一位数字 + +这段正则表达式用于匹配形如“Alluxio 1.2.3”或“v1.2.3”的字符串,并捕获其中的版本号“1.2.3”。如果字符串包含“Alluxio ”前缀,该前缀将被忽略,只有版本号部分被捕获。 + + +## 用户如何查看上游软件包版本 + +用户在向[community](https://gitee.com/openeuler/community/blob/master/sig/README.md)仓库提交PR修改代码仓描述文件(upstream信息)。后端门禁自动检测所配置的软件包字段是否能获取上游版本。 + +综上所述,软件包维护者需维护以下3个字段,其余字段可由后端服务自动配置。 + +1. name字段,表示软件包名称 +2. upstream.version_url字段,表示包含软件包版本号的url +3. upstream.regex字段,表示正则表达式,配合version_url字段,从url连接中解析软件包版本号 +4. upstream.homepage字段,表示软件包主页地址,不一定包含软件包版本号的url。可将存量upstream处的url地址复制粘贴至该字段 + +提交pr之后,用户查看软件包上游版本的途径 + +1. 在PR评论里看到上游软件包版本 +如果CI门禁能够根据用户提交的字段查找到上游版本,返回格式如下(例子:gcc)。 +```bash +Find upstream version of package: gcc. +The version field only indicates the version at the time of the this comment, maybe not the latest version. + +upstream: +- version_url: https://github.com/gcc-mirror/gcc + version: 14.2.0 +``` +如果门禁无法找到上游版本,返回格式如下(例子:gcc) + +```bash +Fail to find upstream version of package: gcc. +``` + +2. 登录[软件中心](https://easysoftware.openeuler.org/zh/)的【上游软件包全景】查看 + +由于软件包上游url比较复杂,可能无法获取上游版本。为避免影响其他业务,后端门禁不影响合入PR流程。同时可以联系 [ @zwjsec ](https://gitee.com/zwjsec) 或者软件包的maintainer。 \ No newline at end of file -- Gitee From c541de83a1718e244c465e1d17ab45c314998641 Mon Sep 17 00:00:00 2001 From: ZWJason Date: Mon, 10 Mar 2025 19:16:15 +0800 Subject: [PATCH 2/2] merge new file --- ...06\347\246\273\347\255\226\347\225\245.md" | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 "oEEP/oEEP-0020 openEuler\346\272\220\347\240\201\346\240\221\344\270\216\346\236\204\345\273\272\346\240\221\345\210\206\347\246\273\347\255\226\347\225\245.md" diff --git "a/oEEP/oEEP-0020 openEuler\346\272\220\347\240\201\346\240\221\344\270\216\346\236\204\345\273\272\346\240\221\345\210\206\347\246\273\347\255\226\347\225\245.md" "b/oEEP/oEEP-0020 openEuler\346\272\220\347\240\201\346\240\221\344\270\216\346\236\204\345\273\272\346\240\221\345\210\206\347\246\273\347\255\226\347\225\245.md" new file mode 100644 index 0000000..99a9464 --- /dev/null +++ "b/oEEP/oEEP-0020 openEuler\346\272\220\347\240\201\346\240\221\344\270\216\346\236\204\345\273\272\346\240\221\345\210\206\347\246\273\347\255\226\347\225\245.md" @@ -0,0 +1,105 @@ +--- +标题: openEuler 源码树与构建树分离策略 +类别: 特性变更 +摘要: 源码树与构建树在构建过程中的分离变化 +作者: Funda Wang (fundawang at yeah.net) +状态: 活跃 +编号: oEEP-0019 +创建日期: 2024-10-23 +修订日期: 2025-01-25 +--- + +# 背景说明 +源码树(Source tree),指软件包 SOURCES 展开后的源代码目录树;构建树(Build tree),指软件进行编译过程中由源代码通过编译、转换生成的目标文件所在的目录树。由于软件包及其口味的日渐复杂,越来越多的软件包及构建系统对发行版与二进制包分发者提出建议,在构建时使用独立于源码树的构建树进行构建(Out of source build),主要原因是避免在构建过程中污染源代码,避免异构或不同口味的目标文件互相污染。 + +# cmake 构建系统 + +### 生效版本 25.03 +`%cmake` 宏定义发生重大变化,构建树与源码树分离。构建树默认为源码树下的 `%{__cmake_builddir}`(默认等同于`%{_target_platform}`)文件夹。 + +使用 cmake 作为构建系统,且在 spec 文件中使用`%cmake`宏的开发者,应该清楚明白的知道,软件包构建过程**生成**的所有文件,包括但不限于目标文件、可执行文件、共享库、文档文件、最终配置文件范本,均不直接存储于源码树下,而在`%{__cmake_builddir}`文件夹下。如果要在后续的`%install`、`%check`、`%files`等区段引用构建过程中生成的文件,需要引用`%{__cmake_builddir}`文件夹。 + +特别需要指出的是,cmake 支持多种不同的编译规则生成器,比如`Unix Makefiles`和`Ninja`。无论你使用何种生成器,都建议在后续继续使用`%cmake_build`进行构建,使用`%cmake_install`进行安装,使用`%ctest`进行测试,cmake 本身会处理不同生成器之间的差异。 + +例1:24.03 LTS 下某软件的SPEC为: +``` +%build +%cmake -Dfoo=bar +%make_build + +%install +%make_install + +%check +ctest + +%files +%doc SOME_BUILT_FILES +``` +在 25.03 及其之后的版本应修改其内容为: +``` +%build +%cmake -Dfoo=bar +%cmake_build + +%install +%cmake_install + +%check +%ctest + +%files +%doc %{__cmake_builddir}/SOME_BUILT_FILES +``` + +例2:24.03 LTS 下某软件的SPEC为: +``` +%build +mkdir -p build && cd build +%cmake .. -GNinja +%ninja_build + +%install +pushd build +%ninja_install +popd +``` +在 25.03 之后应修改其内容为: +``` +%build +%cmake -GNinja +%cmake_build + +%install +%cmake_install +``` + +**禁用说明** + +如果软件不支持源码树外构建,且与上游沟通无果,可由软件包自行设置在源码树中直接进行构建(in source build)。方法是定义: +``` +%global __cmake_in_source_build 1 +``` +其他不变,仍然使用`%cmake`、`%cmake_build`、`%cmake_install`进行SPEC编写。 + +**参考链接** + +https://fedoraproject.org/wiki/Changes/CMake_to_do_out-of-source_builds +https://cmake.org/cmake/help/latest/manual/cmake.1.html#introduction-to-cmake-buildsystems + +# Meson 构建系统 +`meson`构建系统的构建树与目录树不同,构建树目录名为`%{_vpath_builddir}`。 +``` +%build +%meson +%meson_build + +%install +%meson_install + +%check +%meson_test +``` + +# Autotools 构建系统 +这一构建系统较老,由于改造困难其他发行版均没有设置单独的构建树目录。openEuler 目前采用的策略与其它发行版相同。 -- Gitee