社区热补丁制作发布流程

制作内核态/用户态热补丁

场景1. 在src-openEuler/openEuler仓下评论pr制作新版本热补丁

说明

制作内核态热补丁需在openEuler/kernel仓评论pr。 制作用户态热补丁需在src-openEuler仓评论pr,现在支持src-openEuler/openssl,src-openEuler/glibc,src-openEuler/systemd

1. 在已合入pr下评论制作热补丁

  • 从src-openeuler仓【支持openssl, glibc, systemd】评论已合入pr制作新版本热补丁。
shell
/makehotpatch [软件包版本号] [patch list] [cve/bug] [issue id] [os_branch]

命令说明:使用多个patch用','分隔,需注意patch的先后顺序。

image-20230629114903593

  • 从openeuler仓【支持kernel】评论已合入pr制作新版本热补丁。
shell
/makehotpatch [软件包版本号] [cve/bug] [issue id] [os_branch]

image-20230629142933917

评论后,门禁触发hotpatch_metadata仓创建热补丁issue以及同步该pr。

2. hotpatch_metadata仓自动创建热补丁issue、同步该pr

pr评论区提示启动热补丁制作流程。

image-20230629143426498

随后,hotpatch_metadata仓自动创建热补丁issue,并在hotpatch_metadata仓同步该pr。

说明

热补丁issue用于跟踪热补丁制作流程。 hotpatch_metadata仓用于触发制作热补丁。

image-20230629144503840

点击查看热补丁issue链接内容。

  • 热补丁Issue类别为hotpatch。

image-20230607161545732

点击查看在hotpatch_metadata仓自动创建的pr。

hotpatch-fix-pr

3. 触发制作热补丁

打开hotpatch_metadata仓自动创建的pr,评论区可以查看热补丁制作信息。

img

查看热补丁制作结果。

img

如果热补丁制作失败,可以根据相关日志信息修改pr、评论 /retest直到热补丁可以被成功制作。

如果热补丁制作成功,可以通过Download link下载热补丁进行自验。

image-20230608151244425

若热补丁制作成功,可以对热补丁进行审阅

场景2、从hotpatch_metadata仓提pr修改热补丁

说明

从hotpatch_metadata仓提pr只能修改还未正式发布的热补丁。

1. 提pr

用户需要手动创建热补丁issue。

(1)阅读readme,根据热补丁issue模版创建热补丁。

image-20230612113428096

说明

用户不允许修改热补丁元数据文件中已被正式发布的热补丁的相关内容。

pr内容:

  • patch文件。
  • 修改热补丁元数据hotmetadata.xml文件。

2. 触发制作热补丁

若热补丁制作成功,可以对热补丁进行审阅

场景3、从hotpatch_metadata仓提pr制作新版本热补丁

1. 提pr

在hotpatch_metadata仓提pr。

(1)阅读readme,根据热补丁issue模版创建热补丁。

image-20230612113428096

pr内容:

  • patch文件。
  • 如果没有相应热补丁元数据hotmetadata.xml文件,则手动创建;否则修改热补丁元数据hotmetadata.xml文件。

2. 触发制作热补丁

若热补丁制作成功,可以对热补丁进行审阅

审阅热补丁

1. 审阅热补丁pr

确认可发布,合入pr。

2. pr合入,回填热补丁issue

在热补丁issue页面补充热补丁路径,包含src.rpm/arm架构/x86架构的rpm包,以及对应hotpatch.xml,用于展示热补丁信息。

说明

如果一个架构失败,强行合入,也可只发布单架构的包。

img

  • 热补丁Issue标签为hotpatch。

  • 查看热补丁元数据内容。

热补丁元数据模版:

说明

热补丁元数据用于管理查看热补丁相关历史制作信息。

xml
<?xml version="1.0" ?>
<ns0:hotpatchdoc xmlns:ns0="https://gitee.com/openeuler/HotPatch_metadata">
 <DocumentTitle xml:lang="en">Managing Hot Patch Metadata</DocumentTitle>
 <HotPatchList>
  <Package name=软件版本号>
   <hotpatch version=热补丁版本 type=热补丁类型>
    <SRC_RPM>src.rpm归档地址</SRC_RPM>
    <Debug_RPM_X86_64>x86架构debuginfo二进制包归档地址</Debug_RPM_X86_64>
    <Debug_RPM_Aarch64>arm架构debuginfo二进制包归档地址</Debug_RPM_Aarch64>
    <patch>patch文件</patch>
    <issue id="CVE-2023-33203" hotpatch_issue_href="https://gitee.com/src-openeuler/kernel/issues/I75ZRL"/>
    <hotpatch_issue_link>https://gitee.com/wanghuan158/hot-patch_metadata/issues/I7AE5F</hotpatch_issue_link>
   </hotpatch>
  </Package>
 </HotPatchList>
</ns0:hotpatchdoc>
xml
<?xml version="1.0" ?>
<ns0:hotpatchdoc xmlns:ns0="https://gitee.com/openeuler/HotPatch_metadata">
 <DocumentTitle xml:lang="en">Managing Hot Patch Metadata</DocumentTitle>
 <HotPatchList>
  <Package name="openssl-1.1.1m-20">
   <hotpatch version="1" type="cve">
    <SRC_RPM>download_link</SRC_RPM>
    <Debug_RPM_X86_64>download_link</Debug_RPM_X86_64>
    <Debug_RPM_Aarch64>download_link</Debug_RPM_Aarch64>
    <patch>0001-PEM-read-bio-ret-failure.patch</patch>
    <issue id="CVE-2023-33203" hotpatch_issue_href="https://gitee.com/src-openeuler/kernel/issues/I75ZRL"/>
    <hotpatch_issue_link>https://gitee.com/wanghuan158/hot-patch_metadata/issues/I7AE5F</hotpatch_issue_link>
   </hotpatch>
   <hotpatch version="2" type="cve">
    <SRC_RPM>download_link</SRC_RPM>
    <Debug_RPM_X86_64> download_link</Debug_RPM_X86_64>
    <Debug_RPM_Aarch64>download_link</Debug_RPM_Aarch64>
    <patch>0001-PEM-read-bio-ret-failure.patch</patch>
    <issue id="CVE-2023-33203" hotpatch_issue_href="https://gitee.com/src-openeuler/kernel/issues/I75ZRL"/>
    <hotpatch_issue_link>https://gitee.com/wanghuan158/hot-patch_metadata/issues/I7AE5P</hotpatch_issue_link>
   </hotpatch>
  </Package>
 </HotPatchList>
</ns0:hotpatchdoc>

说明

注意:download_link均为repo仓正式的归档链接。 热补丁当前只考虑演进,version 2基于version 1的src继续构建。

image-20230607163358749

3. 关闭相应热补丁Issue

发布热补丁

1、收集热补丁发布需求

在release-management仓库每周update需求收集的issue下方,手动评论start-update命令,此时会收集待发布的热补丁和待发布的修复cve的冷补丁。后台会在hotpatch_meta仓库根据hotpatch标签查找已关闭的热补丁issue。

2、生成安全公告热补丁信息

社区根据收集到的热补丁issue信息,在生成安全公告的同时生成hotpatch字段补丁,过滤已经发布的漏洞补丁。

  • 在安全公告文件新增HotPatchTree字段,记录和公告相关漏洞的热补丁,每个补丁按架构和CVE字段区分(Type=ProductName 记录分支,Type=ProductArch 记录补丁具体的rpm包)。

3、Majun平台上传文件到openEuler官网,同步生成updateinfo.xml文件

社区将生成的安全公告上传到openEuler官网,同时基于所收集的热补丁信息生成updateinfo.xml文件。

updateinfo.xml文件样例:

xml
        <?xml version="1.0" encoding="UTF-8"?>
        <updates>
            <update from="openeuler.org" type="security" status="stable">
                <id>openEuler-SA-2022-1</id>
                <title>An update for mariadb is now available for openEuler-25.03</title>
                <severity>Important</severity>
                <release>openEuler</release>
                <issued date="2022-04-16"></issued>
                <references>
                    <reference href="https://nvd.nist.gov/vuln/detail/CVE-2021-1111" id="CVE-2021-1111" title="CVE-2021-1111" type="cve"></reference>
                    <reference href="https://nvd.nist.gov/vuln/detail/CVE-2021-1112" id="CVE-2021-1112" title="CVE-2021-1112" type="cve"></reference>
                </references>
                <description>patch-redis-6.2.5-1-HP001.(CVE-2022-24048)</description>
                <pkglist>
                <hot_patch_collection>
                    <name>openEuler</name>
                    <package arch="aarch64" name="patch-redis-6.2.5-1-HP001" release="1" version="1" id="CVE-2021-1111" >
                        <filename>patch-redis-6.2.5-1-HP001-1-1.aarch64.rpm</filename>
                    </package>
                    <package arch="x86_64" name="patch-redis-6.2.5-1-HP001" release="1" version="1" id="CVE-2021-1111">
                        <filename>patch-redis-6.2.5-1-HP001-1-1.x86_64.rpm</filename>
                    </package>
                    <package arch="aarch64" name="patch-redis-6.2.5-1-HP002" release="1" version="1" id="CVE-2021-1111,CVE-2021-1112">
                        <filename>patch-redis-6.2.5-1-HP002-1-1.aarch64.rpm</filename>
                    </package>
                    <package arch="x86_64" name="patch-redis-6.2.5-1-HP002" release="1" version="1" id="CVE-2021-1111,CVE-2021-1112">
                        <filename>patch-redis-6.2.5-1-HP002-1-1.x86_64.rpm</filename>
                    </package>
                </hot_patch_collection>
                </pkglist>
            </update>
            ...
        </updates>

4、openEuler官网可以查看更新的热补丁信息,以cve编号划分

image-20230612113626330

5、获取热补丁相关文件

社区将热补丁相关文件同步至openEuler的repo源下,可以在各个分支的hotpatch目录下获取相应文件。

说明

openEuler的repo地址:https://repo.openeuler.org/