长期支持版本

    使用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备份