Skip to content

Commit

Permalink
丰富包迁移容器化定时update文档说明 (#56)
Browse files Browse the repository at this point in the history
  • Loading branch information
fuxinji9527 authored Nov 22, 2024
1 parent 302fb0c commit eaa314d
Show file tree
Hide file tree
Showing 2 changed files with 114 additions and 0 deletions.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
114 changes: 114 additions & 0 deletions easypackages/doc/包迁移容器化定时update.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,120 @@ start_container.sh
3. 检查进程是否在运行 (check_process_running 函数):使用 subprocess.run() 执行命令 ps -ef 来获取当前所有正在运行的进程,遍历进程输出,判断指定的脚本名称是否存在于其中。如果脚本正在运行,则返回 True,否则返回 False。
4. 运行Shell脚本 (run_shell_script 函数):构建要执行的Shell脚本的路径(task_crontab.sh),调用 check_process_running 函数检查相应的Shell脚本是否已经在运行,如果脚本没有在运行,则使用 subprocess.Popen() 启动Shell脚本,并打印成功消息;如果脚本已在运行,则输出提示信息。

#### task_crontab.sh
**作用:依赖于外部配置和库脚本的支持,以及一些环境变量的正确设置。它结合了多个子任务脚本来完成监控和迁移RPM包的功能**

1. 检查环境变量:判断 RPM_WATCH_PROJECT_PATH 是否为空,如果是,输出错误信息并结束。如果不是,继续执行
2. 初始化项目:创建必要的目录(数据和日志路径)
3. 记录当前时间和任务开始日志:调用 外部脚本的方法:log_msg 记录当前时间和启动信息
4. 生成openEuler的清单:执行 sub_task_proc_des_os_rpm_list.sh,传入相关参数
5. 监控CentOS9的源更新:执行 sub_task_proc_update_rpm.sh,传入 CentOS9 的相关参数
6. 监控Fedora40的源更新:执行 sub_task_proc_update_rpm.sh,传入 Fedora40 的相关参数

#### repo_cfg.sh(配置脚本)
**作用:配置脚本:统一管理,定义了三个数组,分别存储了 OpenEuler 24.03 LTS、CentOS 9 和 Fedora 40 的源 XML 文件 URL 列表。每个数组包含一系列指向不同软件源
(例如主仓库、更新和测试仓库)中 repodata/repomd.xml 文件的链接。(这些 XML 文件通常用于软件包管理器获取相应软件包的信息)**

**详细说明:**
1. OpenEuler 24.03 LTS:定义了一个数组 src_xml_url_openeuler_24_03_LTS,包含 5 个 URL,指向 OpenEuler 24.03 LTS 的主软件源及其更新源的元数据文件。
2. CentOS 9:定义了一个数组 src_xlm_url_centos_9,包含 8 个 URL,指向 CentOS 9 流的多个源,包括 AppStream、BaseOS、CRB 及 EPEL (Extra Packages for Enterprise Linux) 的不同版本。
3. Fedora 40:定义了一个数组 src_xlm_url_fedora_40,包含 6 个 URL,指向 Fedora 40 的各种软件源,包括更新源和正式发布源。

#### lib_rpm.sh(工具脚本)
**作用:定义了一系列公共脚本方法,方便其他脚本source引用**

**详细说明:**
* 日志记录函数 (log_msg)

- **输入**:
- 一条消息字符串(例如,`"这是一个日志消息"`)。

- **输出**:
- 将消息打印到控制台。
- 如果设置了 `project_log_file` 环境变量,将消息写入指定的日志文件。
- 若日志文件目录不存在,则尝试创建它。

* 文件解压函数 (file_uncompress)

- **输入**:
- 第一个参数:待解压的文件路径(例如,`"/path/to/archive.tar.gz"`)。
- 第二个参数:解压目标目录(例如,`"/path/to/destination"`)。

- **输出**:
- 解压缩后的文件将存放在指定的目标目录中。
- 如果解压失败,会通过日志记录错误信息。

* 下载主 XML 的函数 (download_primary_xml_by_repomdxml)

- **输入**:
- 第一个参数:`repomd.xml` 文件的 URL(例如,`"http://example.com/repodata/repomd.xml"`)。
- 第二个参数:保存下载文件的目录(例如,`"/path/to/save"`)。

- **输出**:
- 下载的 `primary.xml.gz``primary.xml` 文件(如果存在),下载后会自动解压至指定目录。
- 如果下载或解析过程中出现问题,会在日志中记录错误信息。

* 下载源主 XML 的函数 (download_source_primary_xml)

- **输入**:
- 一个包含多个 URL 的数组(例如,`("http://example.com/repo1" "http://example.com/repo2")`)。

- **输出**:
- 成功下载的所有主 XML 文件的列表,以及它们被保存的路径。
- 会清理旧的 XML 文件,并在日志中记录每一步的操作情况。

#### sub_task_proc_des_os_rpm_list.sh
**作用:根据src_xlm_urls, 生成二进制包列表,主要生成openEuler的二进制列表,表示已安装的包,用于过滤作用**

1. 导入依赖模块:source 命令用于引入外部的 Bash 脚本(lib_rpm.sh),其中可能包含一些函数或变量,以供当前脚本使用。
2. 参数检查:检查输入的参数数量是否为 3。如果不是,则打印错误信息并退出脚本
3. 环境变量检查:确保环境变量 RPM_WATCH_PROJECT_DATA_OS_PATH 和 RPM_WATCH_PROJECT_DATA_DATA_PATH 已定义。如果没有定义,打印相应的错误信息并退出
4. 参数赋值:将传入的参数分别赋值给变量 os_name、os_version 和 src_xlm_urls
5. 路径构建:根据之前定义的环境变量和参数构建目标文件和目录的路径
6. 日志记录:调用 log_msg 函数记录处理信息,表明正在处理特定操作系统及其版本
7. 下载源码包信息:调用 download_source_primary_xml 函数,下载与源系统版本相关的源码包信息
8. 复制安装列表:将下载得到的安装列表从 base_path 复制到最终指定的 rpm_install_list 路径中,确保生成的安装列表可供后续使用

**输入输出说明**

- **输入**:
- 第一个参数:系统名称. 例如:openEuler。
- 第二个参数:源系统版本. 例如:24.03-LTS。
- 第三个参数:rpm源码仓库地址. 例如:"https://mirrors.163.com/openeuler/openEuler-24.03-LTS/EPOL/main/source/repodata/repomd.xml https://yy"
- **输出**:
- rpm_install_list 路径中,生成的安装列表。

#### sub_task_proc_update_rpm.sh
**作用:从源系统获取RPM包列表,通过对比openEuler软件包清单和已经提交过的历史清单过滤出需要构建的rpm包清单后,提交批量迁移任务,将提交的清单追加写到历史清单中**

1. 参数检查:检查输入的参数数量是否为 5。如果不是,则打印错误信息并退出脚本
2. 环境变量检查:检查必要的环境变量是否已定义,包括日志路径、操作系统数据路径等,缺少任何一个都会导致脚本退出
3. 变量赋值与目录构建:从输入参数中获取源系统和目标系统的信息,并构建相关的路径
4. 历史文件备份:如果存在之前的源码包列表文件,进行时间戳备份,以避免数据丢失。同样,如果没有 base_path 目录,则创建它
5. 下载源码包信息:调用download_source_primary_xml函数下载指定源码包的信息,形成新的源码包列表
6. 过滤历史包和已安装包:先通过 filter_src_rpm_by_file 函数过滤掉历史记录中的包,然后再通过读取已安装包的列表进行二次过滤,只保留未安装且不在历史列表中的源码包
7. 提交批量迁移任务:如果历史文件存在,准备提交迁移任务。循环遍历架构类型(例如 aarch64, x86_64),构造命令并调用其他脚本 (submit-repair.sh) 进行批量处理。每个提交操作的日志路径也会被记录
8. 保存到历史列表:将当前处理的源码包列表追加到历史列表中,以便下次操作时进行参考

**输入输出说明**

- **输入**:
- 第一个参数:源系统名称(需要迁移的源操作系统的名称). 例如:centos
- 第二个参数:源系统版本(源操作系统的具体版本号). 例如:9-stream
- 第三个参数:目标系统名称(将要迁移到的目标操作系统的名称). 例如:openeuler
- 第四个参数:目标系统版本(目标操作系统的具体版本号). 例如:24.03-LTS
- 第五个参数: 源系统RPM 源码包仓库地址(包含源码包信息的 URL 列表,以空格分隔,在repo_cfg.sh中获取). 例如:"https://xx https://yy"
- **输出**:
- 日志文件:程序在执行过程中会生成日志,记录操作的详细信息,包括错误、处理步骤及提交任务的信息。日志路径由 RPM_WATCH_PROJECT_LOG_PATH 环境变量指定
- 备份文件:如果存在历史的 RPM 源码包列表,会在 bak_path 目录下生成以时间戳命名的备份文件,以避免数据丢失
- 新的 RPM 源码包列表:最终生成的需要迁移的 RPM 源码包列表文件位于 rpm_src_list 路径下,格式为:repo_addr rpm_name rpm_version
- 历史包列表:当前处理的 RPM 源码包列表会被追加到历史列表(rpm_src_history_list),用于未来的过滤和参考
- 提交任务结果:提交任务的执行结果

#### submit-repair.sh
**作用:用于批量提交submit任务的脚本,详细参数和逻辑输入输出查看该脚本自带注释介绍和代码**


### 使用说明

1. z9环境克隆github代码需要添加代理,克隆easypackages最新代码仓到本地(git clone https://ghp.ci/https://github.com/opensourceways/easypackages.git)
Expand Down

0 comments on commit eaa314d

Please sign in to comment.