使用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 patch 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即可。