长期支持版本

    社区创新版本

      使用SysCare

      本章介绍在openEuler中使用SysCare的方法

      前提条件

      安装openEuler 22.03 LTS SP1版本

      SysCare cli使用

      介绍SysCare cli使用方法,使用SysCare build cli制作补丁,使用SysCare patch cli管理补丁,包括安装、激活、去激活、卸载补丁。

      补丁制作

      介绍SysCare build补丁制作功能,示例如下:

      syscare-build --name redis_cve_2021_32675 \
              --source redis-6.2.5-1.src.rpm \
              --debuginfo redis-debuginfo-6.2.5-1.x86_64.rpm \
              --target-elfname redis-server \
              --summary CVE-2021-32675 \
              0001-Prevent-unauthenticated-client-from-easily-consuming.patch
      

      补丁管理

      patch-name格式为:目标包名/补丁名,其中“目标包名/”在补丁名唯一的情况下可以省略

      1. 补丁安装:
      syscare apply patch-name
      
      1. 补丁激活:
      syscare active patch-name
      
      1. 补丁去激活:
      syscarae deactive patch-name
      
      1. 补丁卸载/移除:
      syscare remove patch-name
      
      1. 补丁状态查询:
      syscare status patch-name
      
      1. 查询syscare所有补丁:
      syscare list
      

      补丁制作模块

      源码编译

      syscare/build目录下存放的是SysCare补丁制作的源码

      cd syscare/build
      
      cargo build
      

      补丁制作

      SysCare 补丁制作工具

      SysCare build为纯CLI工具,提供从RPM包生成热补丁包的功能,补丁包以RPM包的形式封装维护,支持制作内核热补丁及用户态热补丁。

      命令行参数

      usage: syscare build [OPTIONS] --patch-name <PATCH_NAME> --source <SOURCE> --debuginfo <DEBUGINFO> <PATCHES>...
      
      Arguments:
        <PATCHES>...  Patch file(s)
      
      Options:
        -n, --patch-name <PATCH_NAME>                Patch name
            --patch-arch <PATCH_ARCH>                Patch architecture [default: x86_64]
            --patch-version <PATCH_VERSION>          Patch version [default: 1]
            --patch-description <PATCH_DESCRIPTION>  Patch description [default: (none)]
            --target-name <TARGET_NAME>              Patch target name
        -t, --target-elfname <TARGET_ELFNAME>        Patch target executable name
            --target-arch <TARGET_ARCH>              parch target architecture
            --target-epoch <TARGET_EPOCH>            Patch target epoch
            --target-version <TARGET_VERSION>        Patch target version
            --target-release <TARGET_RELEASE>        Patch target release
            --target-license <TARGET_LICENSE>        Patch target license
        -s, --source <SOURCE>                        Source package
        -d, --debuginfo <DEBUGINFO>                  Debuginfo package
            --workdir <WORKDIR>                      Working directory [default: .]
        -o, --output <OUTPUT>                        Generated patch output directory [default: .]
            --kjobs <N>                              Kernel make jobs [default: 32]
            --skip-compiler-check                    Skip compiler version check (not recommended)
            --skip-cleanup                           Skip post-build cleanup
        -v, --verbose                                Provide more detailed info
        -h, --help                                   Print help information
        -V, --version                                Print version information
      

      必要参数:

      字段名称字段描述
      --patch-name补丁名称
      --source目标软件源码包
      --debuginfo目标软件调试信息包
      --target-elfname目标软件可执行文件名(内核补丁可忽略)
      --PATCHES补丁列表

      示例如下:

      syscare-build \
          --patch-name CVE-2021-32675 \                        
          --source redis-6.2.5-1.src.rpm \
          --debuginfo redis-debuginfo-6.2.5-1.x86_64.rpm \
          --target-elfname redis-server \
          --output output \
          0001-Prevent-unauthenticated-client-from-easily-consuming.patch
      

      输出

      • 补丁包:包含SysCare热补丁的二进制及元信息,用于热补丁安装。
      • 补丁源码包:包含目标软件源码及新增补丁,用于新版本热补丁制作。

      命名规则:

      • 补丁包:patch-目标软件全名-补丁名称-补丁版本-补丁release.架构名.rpm
      • 补丁源码包:目标软件全名.patched.补丁名称.补丁版本.补丁release.src.rpm

      补丁信息

      补丁元信息中包含以下字段:

      字段名称字段描述
      name补丁名称
      type补丁类型
      arch补丁架构
      target目标软件名
      elf_name目标软件可执行文件名称
      license目标软件许可证
      version补丁版本
      release补丁Release
      description补丁描述
      builder补丁制作工具版本

      示例:

      Collecting patch info
      ------------------------------
      name:        CVE-2021-32675
      type:        UserPatch
      target:      redis-6.2.5-1
      elf_name:    redis-server
      license:     BSD and MIT
      version:     1
      release:     31fc7544
      description: None
      
      patch list:
      0001-Prevent-unauthenticated-client-from-easily-consuming.patch 31fc7544
      ------------------------------
      

      补丁制作流程

      1. 准备补丁目标软件源码包(source rpm)及软件调试信息包(debuginfo rpm)

        示例:

        
        yumdownloader kernel --source
        
        yumdownloader kernel --debuginfo
        
      2. 确认满足对应软件编译依赖

        示例:

        dnf install make gcc bison flex openssl-devel dwarves python3-devel elfutils-libelf-devel
        
      3. 执行SysCare build命令

        示例:

        syscare-build \
                --patch-name kernel_version \
                --source kernel-5.10.0-60.66.0.91.oe2203.src.rpm \
                --debuginfo kernel-debuginfo-5.10.0-60.66.0.91.oe2203.x86_64.rpm \
                --output output \
                001-kernel-patch-test.patch
        

        补丁制作过程将会在由--workdir参数所指定的目录中(默认为当前目录)创建以syscare-build开头的临时文件夹,用于存放临时文件及编译日志。

        示例:

        dev@openeuler-dev:[~]$ ls -l syscare-build.111602/
        total 100
        -rw-r--r--. 1 dev dev 92303 Nov 12 00:00 build.log
        drwxr-xr-x. 6 dev dev 4096 Nov 12 00:00 package
        drwxr-xr-x. 4 dev dev 4096 Nov 12 00:00 patch
        

        编译日志将会生成在临时文件夹中,名称为build.log。

        dev@openeuler-dev:[~]$ cat syscare-build.111602/build.log | less
        ...
        

        若补丁制作成功,将自动删除该临时文件夹。

      4. 检查编译结果

        示例:

        dev@openeuler-dev:[~]$ ls -l
        total 189680
        -rw-r--r--. 1 dev dev 194218767 Nov 12 00:00 kernel-5.10.0-60.66.0.91.oe2203.patched.kernel_version.1.c15c1a6a.src.rpm
        -rw-r--r--. 1 dev dev     10937 Nov 12 00:00 patch-kernel-5.10.0-60.66.0.91.oe2203-kernel_version-1-c15c1a6a.x86_64.rpm
        

        其中

        patch-kernel-5.10.0-60.66.0.91.oe2203-kernel_version-1-c15c1a6a.x86_64.rpm为补丁包

        kernel-5.10.0-60.66.0.91.oe2203.patched.kernel_version.1.c15c1a6a.src.rpm为二进制包

      5. 补丁包安装

        rpm -ivh patch-xxx.rpm
        

        补丁包安装后,相关文件在如下路径:

        /usr/lib/syscare/patches/目标软件包名/补丁名
        
      6. 补丁包卸载

        rpm -e patch-xxx.rpm
        

        补丁在not-apply状态下,补丁包才可卸载

      错误处理

      如果出现错误,请参考编译日志:

      错误示例:

      ...
      Building patch, this may take a while
      ERROR: Process '/usr/libexec/syscare/upatch-build' exited unsuccessfully, exit_code=255
      

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

      小问题,全程线上修改...

      一键搞定!

      问题类型
      规范和低错类

      ● 错别字或拼写错误;标点符号使用错误;

      ● 链接错误、空单元格、格式错误;

      ● 英文中包含中文字符;

      ● 界面和描述不一致,但不影响操作;

      ● 表述不通顺,但不影响理解;

      ● 版本号不匹配:如软件包名称、界面版本号;

      易用性

      ● 关键步骤错误或缺失,无法指导用户完成任务;

      ● 缺少必要的前提条件、注意事项等;

      ● 图形、表格、文字等晦涩难懂;

      ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

      正确性

      ● 技术原理、功能、规格等描述和软件不一致,存在错误;

      ● 原理图、架构图等存在错误;

      ● 命令、命令参数等错误;

      ● 代码片段错误;

      ● 命令无法完成对应功能;

      ● 界面错误,无法指导操作;

      风险提示

      ● 对重要数据或系统存在风险的操作,缺少安全提示;

      内容合规

      ● 违反法律法规,涉及政治、领土主权等敏感词;

      ● 内容侵权;

      您对文档的总体满意度

      非常不满意
      非常满意
      提交
      根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
      文档捉虫
      编组 3备份