From 91320cfd7eab30bfd0b4d8c69d90e1064f8b52c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=B4=E5=9F=BA=E9=B1=BC?= Date: Tue, 19 Nov 2024 10:14:33 +0800 Subject: [PATCH 01/16] =?UTF-8?q?docs:=20x2=E6=96=87=E6=A1=A3=E6=9B=B4?= =?UTF-8?q?=E6=96=B0,=E5=88=A0=E9=99=A4=E9=83=A8=E5=88=86=E5=86=85?= =?UTF-8?q?=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/docs/x2openEuler/FeatureGuide.md | 22 +------ docs/zh/docs/x2openEuler/InstallationGuide.md | 60 +------------------ docs/zh/docs/x2openEuler/Introduce.md | 5 -- 3 files changed, 3 insertions(+), 84 deletions(-) diff --git a/docs/zh/docs/x2openEuler/FeatureGuide.md b/docs/zh/docs/x2openEuler/FeatureGuide.md index f4793e0ba..9cc9b0025 100644 --- a/docs/zh/docs/x2openEuler/FeatureGuide.md +++ b/docs/zh/docs/x2openEuler/FeatureGuide.md @@ -1174,27 +1174,7 @@ 4. 单击右下角“下载环境信息和日志”获取环境信息和日志文件,单击“导出HTML报告”导出当前评估任务的分析结果。 -## 升级后验证与回滚 - -### 升级后验证 - -#### 前提条件 - -待升级节点已经完成升级且升级过程无报错信息。 - -#### 操作步骤 - -1. 执行以下命令查看操作系统版本。 - - ```sh - cat /etc/os-release - ``` - -2. 尽快执行以下命令重启机器进入openEuler系统。 - - ```sh - reboot - ``` +## 升级后回退 ### 升级后回退 diff --git a/docs/zh/docs/x2openEuler/InstallationGuide.md b/docs/zh/docs/x2openEuler/InstallationGuide.md index 7eedd99df..c8a9ecaf3 100644 --- a/docs/zh/docs/x2openEuler/InstallationGuide.md +++ b/docs/zh/docs/x2openEuler/InstallationGuide.md @@ -138,69 +138,13 @@ 1. 此处以在x86环境上安装x2openEuler工具为例,使用sftp工具将安装包x2openEuler-core-_x.x.x-xx_.x86\_64.rpm上传至远程服务器的/root目录下。 2. 使SSH远程登录工具登录至需要远程服务器命令行界面。 -3. (可选)如果服务器OS防火墙已开启,执行如下操作开通服务器OS防火墙端口(如果服务器OS防火墙没有开启,请跳过此步骤)。 - - >![](public_sys-resources/icon-note.gif) **说明:** - >- 以下命令中的18082端口是在启动web服务时默认的HTTPS端口号,请根据实际情况修改。 - >- 若用户还配置了硬件防火墙,则需要用户联系相关的网络管理员同步完成对硬件防火墙的配置,开通需要访问的端口。 - - 1. 执行以下命令查看防火墙是否开启: - - ``` - systemctl status firewalld - ``` - - 显示“inactive”表示防火墙没有开启,请跳过以下步骤。 - - 2. 执行以下命令查看端口是否开通: - - ``` - firewall-cmd --query-port=18082/tcp - ``` - - 提示“no”表示端口未开通。 - - 3. 执行以下命令永久开通端口: - - ``` - firewall-cmd --add-port=18082/tcp --permanent - ``` - - 提示“success”表示开通成功。 - - 4. 执行以下命令重新载入配置。 - - ``` - firewall-cmd --reload - ``` - - 5. 再次执行以下命令查看端口是否开通: - - ``` - firewall-cmd --query-port=18082/tcp - ``` - - 提示“yes”表示端口已开通。 - - >![](public_sys-resources/icon-note.gif) **说明:** - >如果想要移除端口,请执行以下命令: - >``` - >firewall-cmd --permanent --remove-port=18082/tcp - >``` - >提示“success”表示端口移除成功。 - >移除成功后再执行以下命令重新载入配置。 - >``` - >firewall-cmd --reload - >``` - - -4. 执行以下命令安装x2openEuler工具。 +3. 执行以下命令安装x2openEuler工具。 ``` yum install -y /root/x2openEuler-core-x.x.x-xx.x86_64.rpm ``` -5. 工具包安装成功后,执行以下命令启动web服务。 +4. 工具包安装成功后,执行以下命令启动web服务。 >![](public_sys-resources/icon-note.gif) **说明:** >- 如web服务受SELinux策略无法正常运行,请更改SELinux策略或[关闭SELinux](CommonOperation.md#seoff)。 diff --git a/docs/zh/docs/x2openEuler/Introduce.md b/docs/zh/docs/x2openEuler/Introduce.md index d14ab6c81..72e5240e7 100644 --- a/docs/zh/docs/x2openEuler/Introduce.md +++ b/docs/zh/docs/x2openEuler/Introduce.md @@ -189,11 +189,6 @@ x2openEuler工具提供web界面方式进行操作,以供使用者能够在图 x2openEuler工具提供命令行或者web使用方式,用户在安装完成后选择使用方式。工具的使用方法请参考章节[特性指南](FeatureGuide.md)。 -> ![](public_sys-resources/icon-notice.gif) **须知:** -> -> - 待升级节点升级过程中需要root权限,由于root用户拥有最高权限,直接使用root用户登录服务器可能会存在安全风险。您可以通过配置禁止root用户SSH登录的选项,来提升系统安全性。具体配置如下:先以普通用户登录服务器,切换至root登录后检查/etc/ssh/sshd\_config配置项PermitRootLogin,如果显示no,说明禁止了root用户登录;如果显示yes,则需要将配置项PermitRootLogin设置为no,配置修改后重启sshd服务以生效。 -> - “配置迁移任务”只支持web方式使用。 - ### 界面说明 ##### 界面分区 -- Gitee From 149c86964692da13bb2f24a5fb47701a50ab030d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=B4=E5=9F=BA=E9=B1=BC?= Date: Tue, 19 Nov 2024 11:41:40 +0800 Subject: [PATCH 02/16] =?UTF-8?q?docs:=20x2=E6=96=87=E6=A1=A3=E6=9B=B4?= =?UTF-8?q?=E6=96=B0,FAQ=E9=83=A8=E5=88=86=E5=85=B3=E4=BA=8E=E6=96=B9?= =?UTF-8?q?=E6=A1=881,=E8=B0=83=E6=95=B4=E4=B8=80=E4=BA=8C=E7=BA=A7?= =?UTF-8?q?=E6=A0=87=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/docs/x2openEuler/Faq.md | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/docs/zh/docs/x2openEuler/Faq.md b/docs/zh/docs/x2openEuler/Faq.md index 488c0c1b7..7aab86665 100644 --- a/docs/zh/docs/x2openEuler/Faq.md +++ b/docs/zh/docs/x2openEuler/Faq.md @@ -1,6 +1,7 @@ -# x2openEuler升级失败-救援模式 +# FAQ +## x2openEuler升级失败-救援模式 ##### 现象描述 -升级完成后,无法进入操作系统且无法通过回退方式恢复源操作系统,可通过使用ISO镜像光驱进入救援模式进行系统救援。 +在较老版本中,使用方案1升级完成后,无法进入操作系统且无法通过回退方式恢复源操作系统,可通过使用ISO镜像光驱进入救援模式进行系统救援。 ##### 处理步骤 此处以x86\_64系统为例。 @@ -119,7 +120,7 @@ >- 救援完成后,可执行源操作系统命令进行验证。 >- 可根据业务需求,执行业务恢复或适配脚本。 -# 升级后部分命令无法执行 +## 升级后部分命令无法执行 ##### 现象描述 升级完成后,目标操作系统部分命令无法正常执行,报错原因为“找不到符号链接”。 ##### 可能原因 @@ -127,14 +128,7 @@ ##### 处理步骤 排查“/etc/ld.so.conf.d”目录下是存在和系统目录下的so文件冲突的配置。 -# 升级失败-DNF升级报错 -##### 现象描述 -升级失败,排查日志为DNF软件升级报错。 -##### 可能原因 -查看repo源配置,检查升级软件数量。正常情况下,90%的软件包都可以升级,若升级数量较低需要检查配置的repo源是否正确,是否存在配置repo源不完全的情况。 -##### 处理步骤 -完整配置 everything、epol和update源。 -# 升级过程漫长 +## 升级过程漫长 ##### 现象描述 源操作系统升级至目标操作系统过程耗费时间过长。 ##### 可能原因 @@ -148,12 +142,13 @@ 2. 如有需要将对应目录填写在排查目录中。 -# 升级前检查grub2版本不满足要求 +## 升级前检查grub2版本不满足要求 ##### 现象描述 升级前检查报告grub2版本不满足要求。 ##### 处理步骤 若升级的目标系统为“openEuler-20.03-LTS-SP1”,需要挂载update源。 -# 升级前检查报错 + +## 升级前检查报错 ##### 现象描述 升级前检查报错,回显信息如下: @@ -172,7 +167,8 @@ Abnormal exit,error:/etc/x2openEuler/database_2.0.0.630/centos7.4/x86_64/primary ``` 4. 进入升级任务,重新开始升级前检查。 -# QEMU相关问题处理 + +## QEMU相关问题处理 ##### 现象描述1 安装了qemu-kvm软件,在操作系统升级之后,发现软件被卸载。 ##### 处理步骤 @@ -215,7 +211,7 @@ qemu-kvm -machine help virsh edit ``` -# 工具Web服务启动失败,提示MariaDB is not installed. +## 工具Web服务启动失败,提示MariaDB is not installed. ##### 现象描述 在安装x2openEuler工具之前已通过编译安装的方式安装了MariaDB。x2openEuler工具安装完成后启动工具web服务时,返回如下信息。 -- Gitee From abdbe055687f39aa88d2401090c2d91ad8c6afbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=B4=E5=9F=BA=E9=B1=BC?= Date: Tue, 19 Nov 2024 16:47:14 +0800 Subject: [PATCH 03/16] =?UTF-8?q?docs:=20=E5=AE=89=E8=A3=85=E6=8C=87?= =?UTF-8?q?=E5=8D=97=E9=83=A8=E5=88=86,=E6=9B=B4=E6=96=B0=E9=83=A8?= =?UTF-8?q?=E7=BD=B2=E7=8E=AF=E5=A2=83=E8=A6=81=E6=B1=82=E3=80=81=E5=BE=85?= =?UTF-8?q?=E5=8D=87=E7=BA=A7=E3=80=81=E7=9B=AE=E6=A0=87OS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/docs/x2openEuler/Faq.md | 2 +- docs/zh/docs/x2openEuler/InstallationGuide.md | 42 +++++++++++++------ 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/docs/zh/docs/x2openEuler/Faq.md b/docs/zh/docs/x2openEuler/Faq.md index 7aab86665..b85a12a7a 100644 --- a/docs/zh/docs/x2openEuler/Faq.md +++ b/docs/zh/docs/x2openEuler/Faq.md @@ -1,5 +1,5 @@ # FAQ -## x2openEuler升级失败-救援模式 +## 升级失败-救援模式 ##### 现象描述 在较老版本中,使用方案1升级完成后,无法进入操作系统且无法通过回退方式恢复源操作系统,可通过使用ISO镜像光驱进入救援模式进行系统救援。 ##### 处理步骤 diff --git a/docs/zh/docs/x2openEuler/InstallationGuide.md b/docs/zh/docs/x2openEuler/InstallationGuide.md index c8a9ecaf3..ee92d7c10 100644 --- a/docs/zh/docs/x2openEuler/InstallationGuide.md +++ b/docs/zh/docs/x2openEuler/InstallationGuide.md @@ -10,7 +10,14 @@ 描述 - CentOS 7.6/openEuler 20.03-LTS-SPx + +
    +
  • CentOS 7.6
  • +
  • openEuler 20.03-LTS-SPx
  • +
  • openEuler 22.03-LTS-SPx
  • +
  • openEuler 24.03-LTS-SPx
  • +
+
  • 保持与待升级节点连接的内部网络联通
  • @@ -22,9 +29,6 @@ -- x2openEuler CLI 工具部署要求(CLI工具会通过web工具自动完成部署)。 - >![](public_sys-resources/icon-note.gif) **说明:** - >待升级环境必须能够保证兼容安装openEuler 20.03-LTS-SP1操作系统。 - 待升级节点操作系统要求如[表2](#sheet2)所示。 @@ -36,16 +40,28 @@ 升级目标操作系统 - CentOS 7.x - openEuler 20.03-LTS-SPx - - - openEuler 22.03-LTS - - - CentOS 8.x - openEuler 22.03-LTS + +
      +
    • CentOS 6.x
    • +
    • CentOS 7.x
    • +
    • CentOS 8.x
    • +
    • Ubuntu 18.04
    • +
    • openEuler 20.03-LTS-SPx
    • +
    • openEuler 22.03-LTS-SPx
    • +
    + + +
      +
    • openEuler 20.03-LTS-SPx
    • +
    • openEuler 22.03-LTS-SPx
    • +
    • + openEuler 24.03-LTS-SPx
      + (当前暂不支持Ubuntu 18.04升级至openEuler 24.03-LTS-SPx) +
    • +
    + + >![](public_sys-resources/icon-note.gif) **说明:** -- Gitee From 9f2c1362255d98cc8959842346224e681708a7df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=B4=E5=9F=BA=E9=B1=BC?= Date: Tue, 19 Nov 2024 17:15:25 +0800 Subject: [PATCH 04/16] =?UTF-8?q?docs:=20x2=E6=96=87=E6=A1=A3=E6=9B=B4?= =?UTF-8?q?=E6=96=B0,=E5=AE=89=E8=A3=85=E6=8C=87=E5=8D=97=E9=83=A8?= =?UTF-8?q?=E5=88=86,=E5=88=A0=E9=99=A4=E6=96=B9=E6=A1=881=E5=86=85?= =?UTF-8?q?=E5=AE=B9,=E8=B0=83=E6=95=B4=E4=B8=80=E4=BA=8C=E7=BA=A7?= =?UTF-8?q?=E6=A0=87=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/docs/x2openEuler/InstallationGuide.md | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/docs/zh/docs/x2openEuler/InstallationGuide.md b/docs/zh/docs/x2openEuler/InstallationGuide.md index ee92d7c10..6321f78ef 100644 --- a/docs/zh/docs/x2openEuler/InstallationGuide.md +++ b/docs/zh/docs/x2openEuler/InstallationGuide.md @@ -1,4 +1,5 @@ -# 环境要求 +# 安装指南 +## 环境要求 ##### 操作系统要求 - x2openEuler web工具部署要求如[表1](#sheet1)所示。 @@ -64,8 +65,6 @@ - >![](public_sys-resources/icon-note.gif) **说明:** - >x2openEuler工具默认支持源操作系统版本 CentOS 7.6,目标操作系统版本 openEuler 20.03-LTS-SP1,可通过[安装操作系统支持包](CommonOperation.md#updatedatabasepackage)支持更多操作系统。 ##### 硬件要求 部署x2openEuler web工具硬件要求如[表3](#sheet3)所示。 @@ -102,7 +101,7 @@ >![](public_sys-resources/icon-note.gif) **说明:** >待升级节点无特别要求,但需要保持内存在2GB及以上,否则会导致升级因内存不足而失败。 -# 获取软件包 +## 获取软件包 安装过程中所需软件包如[表4](#sheet4)所示。 **表 4** 获取工具软件包 @@ -129,7 +128,7 @@ >- 软件包名称中的“x.x.x”表示版本号。 >- 软件包中包含有针对待升级节点的分析工具接口。 -# 软件数字签名验证 +## 软件数字签名验证 为了防止软件包在传递过程或存储期间被恶意篡改,下载软件包时需下载对应的数字签名文件用于完整性验证。 在软件包下载之后,请参考《OpenPGP签名验证指南》,对从社区站点获取的软件包进行PGP数字签名校验。如果校验失败,请不要使用该软件包,重新从社区网站获取即可。 @@ -140,7 +139,7 @@ 企业客户请访问:[PGP Verify](https://support.huawei.com/enterprise/zh/tool/pgp-verify-TL1000000054) -# 安装 +## 安装 ##### 前提条件 @@ -311,7 +310,7 @@ Web console is now running, go to: https://x.x.x.x:18082/x2openEuler/#/login ``` -# 验证 +## 验证 ##### web模式下验证安装结果 登录Web界面,详细步骤请参见[登录x2openEuler工具Web界面](Introduce.md#loginweb),能够成功登录说明x2openEuler工具安装成功。 @@ -330,8 +329,8 @@ ``` x2openEuler-core-x.x.x-x.x86_64 ``` -# 升级及回退 -## 升级 +## 升级及回退 +### 升级 ##### 版本支持 当前支持3.0.RC1升级到3.0.RC1后续版本。 ##### 前提条件 @@ -357,7 +356,7 @@ systemctl start nginx_x2openEuler.service systemctl start gunicorn_x2openEuler.service ``` -## 通过升级脚本进行升级 +### 通过升级脚本进行升级 支持3.0.RC1之前的历史版本升级至3.0.RC1。 ##### 前提条件 - 已获取x2openEuler 3.0.RC1版本安装包到本地,并确认安装包与服务器硬件平台一致。获取软件包后,需要对软件包进行校验,确保与网站上的原始软件包一致,详细步骤请参见[软件数字签名验证](#pgpverfy)。 @@ -387,7 +386,7 @@ bash /usr/local/x2openEuler/portal/src/db_migrate.sh ``` 5. 数据库文件迁移完成后,重新登录x2openEuler工具web界面,查看历史版本工具的相关服务、数据及状态是否正常。 -## 升级后回退 +### 升级后回退 将3.0.RC1版本工具回退至工具升级前版本。 ##### 前提条件 - 当前工具由3.0.RC1之前版本升级至3.0.RC1版本。 @@ -415,7 +414,7 @@ ``` -# 卸载 +## 卸载 ##### 前提条件 没有正在运行中的任务。 ##### 操作步骤 -- Gitee From b21ce1ec9eee422a0bbbf7b4acb01582cf85c61b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=B4=E5=9F=BA=E9=B1=BC?= Date: Wed, 20 Nov 2024 10:23:33 +0800 Subject: [PATCH 05/16] =?UTF-8?q?docs:=20x2=E6=96=87=E6=A1=A3=E6=9B=B4?= =?UTF-8?q?=E6=96=B0,=E5=AE=89=E8=A3=85=E6=8C=87=E5=8D=97=E9=83=A8?= =?UTF-8?q?=E5=88=86,=E4=BF=AE=E6=94=B9=E5=8D=87=E7=BA=A7/=E5=9B=9E?= =?UTF-8?q?=E9=80=80=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/docs/x2openEuler/InstallationGuide.md | 89 ++++++++----------- 1 file changed, 36 insertions(+), 53 deletions(-) diff --git a/docs/zh/docs/x2openEuler/InstallationGuide.md b/docs/zh/docs/x2openEuler/InstallationGuide.md index 6321f78ef..8c81fe85e 100644 --- a/docs/zh/docs/x2openEuler/InstallationGuide.md +++ b/docs/zh/docs/x2openEuler/InstallationGuide.md @@ -101,6 +101,7 @@ >![](public_sys-resources/icon-note.gif) **说明:** >待升级节点无特别要求,但需要保持内存在2GB及以上,否则会导致升级因内存不足而失败。 + ## 获取软件包 安装过程中所需软件包如[表4](#sheet4)所示。 @@ -128,6 +129,7 @@ >- 软件包名称中的“x.x.x”表示版本号。 >- 软件包中包含有针对待升级节点的分析工具接口。 + ## 软件数字签名验证 为了防止软件包在传递过程或存储期间被恶意篡改,下载软件包时需下载对应的数字签名文件用于完整性验证。 @@ -139,8 +141,8 @@ 企业客户请访问:[PGP Verify](https://support.huawei.com/enterprise/zh/tool/pgp-verify-TL1000000054) -## 安装 +## 安装 ##### 前提条件 - 已获取x2openEuler工具安装包。 @@ -310,6 +312,7 @@ Web console is now running, go to: https://x.x.x.x:18082/x2openEuler/#/login ``` + ## 验证 ##### web模式下验证安装结果 @@ -329,10 +332,9 @@ ``` x2openEuler-core-x.x.x-x.x86_64 ``` -## 升级及回退 -### 升级 -##### 版本支持 -当前支持3.0.RC1升级到3.0.RC1后续版本。 + + +## 升级 ##### 前提条件 - 已将所需升级的迁移工具的软件包下载到本地,并确认软件包与服务器硬件平台一致。 @@ -340,9 +342,10 @@ - 升级前请确认x2openEuler工具可以正常使用。 - 工具默认安装在“/usr/local/x2openEuler”目录,升级前请确认安装空间充足。 -- 3.0.RC1之前的历史版本请参考[通过升级脚本进行升级](#upgradeinshell)章节升级至3.0.RC1。 + ##### 操作步骤 1. 使用SSH远程登录工具,进入Linux操作系统命令行界面。 + 2. 将x2openEuler工具软件包传输至服务器自定义目录下,执行以下命令进行升级。 ``` @@ -350,68 +353,49 @@ rpm -Uvh x2openEuler-core-x.x.x-xx.x86_64.rpm ``` -3. 升级完成后执行以下命令启动工具服务,重新登录x2openEuler工具即可。 - - ``` - systemctl start nginx_x2openEuler.service - systemctl start gunicorn_x2openEuler.service - ``` -### 通过升级脚本进行升级 -支持3.0.RC1之前的历史版本升级至3.0.RC1。 -##### 前提条件 -- 已获取x2openEuler 3.0.RC1版本安装包到本地,并确认安装包与服务器硬件平台一致。获取软件包后,需要对软件包进行校验,确保与网站上的原始软件包一致,详细步骤请参见[软件数字签名验证](#pgpverfy)。 -- 升级前请确认x2openEuler工具可以正常使用。 -##### 操作步骤 ->![](public_sys-resources/icon-notice.gif) **须知:** ->- 不支持在评估或升级任务执行过程中升级,请确保升级时没有任务在运行。 ->- 升级过程中请勿执行Ctrl+Z、Ctrl+C和重启操作系统。 -1. 使用SSH远程登录工具,进入Linux操作系统命令行界面,并上传x2openEuler 3.0.RC1 安装包。 -2. 执行以下命令解压安装包,从解压后的文件夹中获取“db_migrate.sh”文件。 - ``` - rpm2cpio x2openEuler-core-3.0.0-xxx.rpm | cpio -id ./usr/local/x2openEuler/portal/src/db_migrate.sh - ``` -3. 进入安装包存放目录,以root用户执行以下命令进行历史版本工具的数据库迁移。 +3. 根据提示,进入/usr/local/x2openEuler/portal/service目录,执行upgrade_migrate_data.sh脚本。 ``` - bash ./usr/local/x2openEuler/portal/src/db_migrate.sh - ``` - 返回信息如下: - ``` - The data is backed up successfully. You can uninstall the old version. + cd /usr/local/x2openEuler/portal/service + bash upgrade_migrate_data.sh ``` - 迁移完成后卸载旧版本x2openEuler。 - >![](public_sys-resources/icon-note.gif) **说明:** - >完成备份后请确保“/opt/back_up”目录下包含db.sqlite3、output.tar.gz、x2openEuler-upgrade.tar.gz等文件及x2openEuler文件夹。 -4. 参考[安装章节](#install),安装x2openEuler 3.0.RC1 版本工具。安装完成后,执行以下命令启动“db_migrate.sh”。 + +4. 回显信息如下时,代表已经完成升级操作。 ``` - bash /usr/local/x2openEuler/portal/src/db_migrate.sh + Starting the service is complete. ``` -5. 数据库文件迁移完成后,重新登录x2openEuler工具web界面,查看历史版本工具的相关服务、数据及状态是否正常。 -### 升级后回退 -将3.0.RC1版本工具回退至工具升级前版本。 + + +## 回退 ##### 前提条件 -- 当前工具由3.0.RC1之前版本升级至3.0.RC1版本。 -- “/opt/back_up”备份文件存在。 -- 已获取3.0.RC1之前版本的安装包。 +- 已将所需回退的迁移工具的软件包下载到本地,并确认软件包与服务器硬件平台一致。 + + 获取软件包后,需要校验软件包,确保与网站上的原始软件包一致,详细步骤请参见[软件数字签名验证](#pgpverfy)。 + +- 回退前请确认x2openEuler工具可以正常使用。 +- 工具默认安装在“/usr/local/x2openEuler”目录,回退前请确认安装空间充足。 ##### 操作步骤 >![](public_sys-resources/icon-note.gif) **说明:** >若回退前版本工具中存在环境检查通过的任务,则需在回退完成后卸载掉对应待升级节点的x2openEuler-upgrade包(例:x2openEuler-upgrade-x.x.x.x86_64)。 1. 使用SSH远程登录工具,进入Linux操作系统命令行界面。 -2. 执行以下命令复制“db_migrate.sh”文件至自定义目录。(此处以"/home"目录为例) + +2. 将x2openEuler工具软件包传输至服务器自定义目录下,执行以下命令进行回退。 ``` - cp /usr/local/x2openEuler/portal/src/db_migrate.sh /home/ + cd 自定义目录 + rpm -Uvh --oldpackage x2openEuler-core-x.x.x-xx.x86_64.rpm ``` -3. 参考[卸载章节](#uninstall),卸载3.0.RC1版本x2openEuler工具。 -4. 参考[安装章节](#install),安装需要回退版本的x2openEuler安装包。 -5. 进入“db_migrate.sh”文件所在路径,执行以下命令进行回退操作。 + +3. 根据提示,进入/usr/local/x2openEuler/portal/service目录,执行upgrade_migrate_data.sh脚本。 ``` - bash db_migrate.sh rollback + cd /usr/local/x2openEuler/portal/service + bash upgrade_migrate_data.sh ``` - 回显信息如下时代表已完成回退操作。 + +4. 回显信息如下时,代表已经完成回退操作。 ``` - System rollback succeeded. - ``` + Starting the service is complete. + ``` ## 卸载 @@ -474,4 +458,3 @@ rm -rf /etc/my.cnf rm -rf /var/lib/mysql/ ``` - -- Gitee From 0b129e965d421665e9a9acdd30d09e02ffada001 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=B4=E5=9F=BA=E9=B1=BC?= Date: Wed, 20 Nov 2024 11:32:26 +0800 Subject: [PATCH 06/16] =?UTF-8?q?docs:=20x2=E6=96=87=E6=A1=A3=E6=9B=B4?= =?UTF-8?q?=E6=96=B0,=E4=BB=8B=E7=BB=8D=E9=83=A8=E5=88=86,=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E9=83=A8=E7=BD=B2=E6=96=B9=E5=BC=8F=E3=80=81=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=A9=BA=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/docs/x2openEuler/Introduce.md | 138 +++++++++++++------------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/docs/zh/docs/x2openEuler/Introduce.md b/docs/zh/docs/x2openEuler/Introduce.md index 72e5240e7..55bf9b8d2 100644 --- a/docs/zh/docs/x2openEuler/Introduce.md +++ b/docs/zh/docs/x2openEuler/Introduce.md @@ -4,7 +4,7 @@ ### 概述 -本文档介绍了获取x2openEuler工具安装包,以及对其进行安装、使用的方法,对x2openEuler工具的web界面的各项功能做了详细介绍,同时提供了常见的问题解答及故障处理方法,详细请参考对应手册。 +本文档介绍了获取 x2openEuler 工具安装包,以及对其进行安装、使用的方法,对 x2openEuler 工具的 web 界面的各项功能做了详细介绍,同时提供了常见的问题解答及故障处理方法,详细请参考对应手册。 ### 读者对象 @@ -15,7 +15,7 @@ ### 使用声明 -本文档依据CC BY 4.0许可证进行授权,使用声明详细内容请访问[openEuler许可协议](https://gitee.com/openeuler/docs/tree/stable2-20.03_LTS_SP1)中“CC-BY-SA-4.0”页签。 +本文档依据 CC BY 4.0 许可证进行授权,使用声明详细内容请访问 [openEuler 许可协议](https://gitee.com/openeuler/docs/tree/stable2-20.03_LTS_SP1) 中“CC-BY-SA-4.0”页签。 ### 符号约定 @@ -91,7 +91,7 @@ &<1-n> - 表示符号“&”前面的参数可以重复1~n次。 + 表示符号“&”前面的参数可以重复 1~n 次。 @@ -163,17 +163,17 @@ ### x2openEuler 原地升级工具简介 -x2openEuler工具是一款将源操作系统升级为目标操作系统的搬迁工具套件,工具支持原地升级功能。 +x2openEuler 工具是一款将源操作系统升级为目标操作系统的搬迁工具套件,工具支持原地升级功能。 -当客户运行环境的操作系统生命周期即将EOS,但依托于业务运行的相关应用软件和产品还未到结束生命周期时,为了保障业务的持续性和安全性,可使用x2openEuler工具将源操作系统升级到新的目标操作系统。 +当客户运行环境的操作系统生命周期即将 EOS,但依托于业务运行的相关应用软件和产品还未到结束生命周期时,为了保障业务的持续性和安全性,可使用x2openEuler工具将源操作系统升级到新的目标操作系统。 -x2openEuler工具提供web界面方式进行操作,以供使用者能够在图形化界面便捷的进行升级操作。 +x2openEuler 工具提供 web 界面方式进行操作,以供使用者能够在图形化界面便捷的进行升级操作。 -同时,为了面向全面的数字化改造,配合产品信息化改造,使用x2openEuler工具升级的目标操作系统采用欧拉技术线,对于已有的业务系统完成数字化改造后可实现无缝迁移,保证业务的稳定性和高可用性。 +同时,为了面向全面的数字化改造,配合产品信息化改造,使用 x2openEuler 工具升级的目标操作系统采用欧拉技术线,对于已有的业务系统完成数字化改造后可实现无缝迁移,保证业务的稳定性和高可用性。 ### 应用场景 -升级任务:当用户运行环境操作系统生命周期即将EOS时,可使用该工具将本地操作系统升级到新的目标操作系统。 +升级任务:当用户运行环境操作系统生命周期即将 EOS 时,可使用该工具将本地操作系统升级到新的目标操作系统。 系统信息收集评估任务:系统信息收集评估任务收集待升级节点信息,针对待升级节点进行软件、硬件兼容性评估及软件冲突检查,产生相应评估报告,确认待升级节点是否符合升级要求。 @@ -183,22 +183,22 @@ x2openEuler工具提供web界面方式进行操作,以供使用者能够在图 ### 部署方式 -单机部署,即将x2openEuler工具部署在用户的安装CentOS 7.6或openEuler服务器上。 +单机部署,即将 x2openEuler 工具部署在用户的服务器上,操作系统支持 CentOS 7.6 / openEuler 20.03-LTS-SPx / openEuler 22.03-LTS-SPx / openEuler 24.03-LTS-SPx。 ### 访问和使用 -x2openEuler工具提供命令行或者web使用方式,用户在安装完成后选择使用方式。工具的使用方法请参考章节[特性指南](FeatureGuide.md)。 +x2openEuler 工具提供命令行或者web使用方式,用户在安装完成后选择使用方式。工具的使用方法请参考章节 [特性指南](FeatureGuide.md)。 ### 界面说明 ##### 界面分区 -x2openEuler工具首页界面主要由如[图1](#figure1)所示的区域组成,各个区域的作用如[图1](#figure1)所示。 +x2openEuler工具首页界面主要由如 [图1](#figure1) 所示的区域组成,各个区域的作用如 [图1](#figure1) 所示。 -**图 1** x2openEuler工具首页界面 -![](figures/ "x2openEuler工具首页界面") +**图 1** x2openEuler 工具首页界面 +![](figures/ "x2openEuler 工具首页界面") -**表 1** x2openEuler工具首页界面参数说明 +**表 1** x2openEuler 工具首页界面参数说明 @@ -219,12 +219,12 @@ x2openEuler工具首页界面主要由如[图1](#figure1)所示的区域组成 - + - + @@ -324,13 +324,13 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示
    3 配置提供用户管理,弱口令字典,系统配置,日志,web服务端证书和回退一致性检查过滤等功能入口。提供用户管理,弱口令字典,系统配置,日志,web 服务端证书和回退一致性检查过滤等功能入口。
    4 更多提供深色/浅色模式切换,联机帮助、免责声明和x2openEuler工具发布信息入口。提供深色/浅色模式切换,联机帮助、免责声明和 x2openEuler 工具发布信息入口。
    5
    -### 登录x2openEuler工具web界面 +### 登录 x2openEuler 工具 web 界面 -本章节以Windows 10操作系统安装的Chrome 105.0浏览器为例介绍登录x2openEuler工具web界面的操作步骤。 +本章节以 Windows 10 操作系统安装的 Chrome 105.0 浏览器为例介绍登录 x2openEuler 工具 web 界面的操作步骤。 ##### 浏览器要求 -浏览器要求如[表3](#sheet3)所示。 +浏览器要求如 [表3](#sheet3) 所示。 **表 3** 浏览器要求 @@ -345,15 +345,15 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 Google Chrome - Google Chrome 72.0及以上版本 + Google Chrome 72.0 及以上版本 Mozilla Firefox - Firefox Browser 89及以上版本 + Firefox Browser 89 及以上版本 Microsoft Edge - Microsoft Edge 79.0及以上版本 + Microsoft Edge 79.0 及以上版本 @@ -361,31 +361,31 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 > >![](public_sys-resources/icon-notice.gif) **须知:** > ->- 默认连续5次登录失败,系统将对此用户进行锁定,锁定3分钟后可以重新登录。 ->- 默认情况下,系统超时时间为30分钟,即在30分钟内,如果您未在webUI界面执行任何操作,系统将自动登出,此时需输入用户名和密码重新登录webUI界面。管理员可在x2openEuler工具首页中的![](figures/icons/settings.png)选项中选择“系统配置”,手动配置会话超时时间,可配置范围为10\~240分钟。 +>- 默认连续 5 次登录失败,系统将对此用户进行锁定,锁定 3 分钟后可以重新登录。 +>- 默认情况下,系统超时时间为 30 分钟,即在 30 分钟内,如果您未在webUI界面执行任何操作,系统将自动登出,此时需输入用户名和密码重新登录 webUI 界面。管理员可在 x2openEuler 工具首页中的![](figures/icons/settings.png)选项中选择“系统配置”,手动配置会话超时时间,可配置范围为 10\~240 分钟。 >- 为保证系统的安全性,初次登录时,请及时修改初始密码,并定期更新。 ->- 默认允许10个普通用户同时登录使用,管理员用户不受此限制。管理员用户可在x2openEuler工具首页中的![](figures/icons/settings.png)菜单选项中选择“系统配置”,手动配置“最大在线普通用户数”,可配置范围为1\~20。 ->- 单个用户只允许1个活跃会话,如果当前用户已经在登录使用,重复登录会挤掉前面的登录。 +>- 默认允许 10 个普通用户同时登录使用,管理员用户不受此限制。管理员用户可在x2openEuler工具首页中的![](figures/icons/settings.png)菜单选项中选择“系统配置”,手动配置“最大在线普通用户数”,可配置范围为 1\~20。 +>- 单个用户只允许 1 个活跃会话,如果当前用户已经在登录使用,重复登录会挤掉前面的登录。 >- 用户首次登录时会弹出免责声明弹窗,用户仔细阅读后,勾选“我已阅读以上内容“,点击“确认“后才能使用本工具,如点击“取消“将会退出工具。 -1. 打开本地PC机的浏览器,在地址栏输入**https://_部署服务器的ip_:_端口号_**(例如: +1. 打开本地PC机的浏览器,在地址栏输入 **https://_部署服务器的ip_:_端口号_**(例如:),按 “Enter”。 >![](public_sys-resources/icon-note.gif) **说明:** - >HTTPS默认端口为18082,请确认使用该工具之前OS防火墙已开通18082端口。 -2. 在如[图2](#figure2)所示的安全告警窗口中选择“继续浏览此网站”。 + >HTTPS 默认端口为 18082,请确认使用该工具之前 OS 防火墙已开通 18082 端口。 +2. 在如 [图2](#figure2) 所示的安全告警窗口中选择“继续浏览此网站”。 >![](public_sys-resources/icon-note.gif) **说明:** - >登录时可能会弹出“安全告警”界面,您可以选择忽略此告警信息或者下载华为根证书屏蔽该界面,详细步骤请参见[为x2openEuler Upgrade工具导入根证书](CommonOperation.md#importcert)。 + >登录时可能会弹出“安全告警”界面,您可以选择忽略此告警信息或者下载华为根证书屏蔽该界面,详细步骤请参见 [为 x2openEuler Upgrade 工具导入根证书](CommonOperation.md#importcert)。 **图 2** 安全告警 ![](figures/safetywarning.png "安全告警") - 打开首次登录界面,如[图3](#figure3)所示,参数说明如[表4](#sheet4)所示。 + 打开首次登录界面,如 [图3](#figure3) 所示,参数说明如 [表4](#sheet4) 所示。 - **图 3** 首次登录x2openEuler工具 - ![](figures/firstlogin.png "首次登录x2openEuler工具") + **图 3** 首次登录 x2openEuler 工具 + ![](figures/firstlogin.png "首次登录 x2openEuler 工具") - **表 4** 首次登录x2openEuler工具参数说明 + **表 4** 首次登录 x2openEuler 工具参数说明 @@ -394,17 +394,17 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 - + @@ -415,12 +415,12 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示
    用户名登录x2openEuler工具的用户
    说明:
    系统的默认管理员为x2openEulerAdmin,工具安装完成后首次登录需要设置管理员密码
    登录x2openEuler工具的用户
    说明:
    系统的默认管理员为 x2openEulerAdmin,工具安装完成后首次登录需要设置管理员密码
    密码 登录用户的密码。密码需要满足如下复杂度要求:
      -
    • 密码长度为8~32个字符
    • +
    • 密码长度为 8~32 个字符
    • 必须包含大写字母、小写字母、数字、特殊字符(`~!@#$%^&*()-_=+\|[{}];:'",<.>/?)中的两种及以上类型的组合
    • 密码不能包含空格
    • 密码不能是用户名
    • -
    • 密码不能在弱口令字典
    • +
    • 密码不能在 弱口令字典
    3. 设置管理员密码,单击“确认”。 - 打开登录界面,如[图4](#figure4)所示,参数说明如[表5](#sheet5)所示。 + 打开登录界面,如 [图4](#figure4) 所示,参数说明如 [表5](#sheet5) 所示。 - **图 4** 非首次登录x2openEuler工具 - ![](figures/notthefirstlogin.png "非首次登录x2openEuler工具") + **图 4** 非首次登录 x2openEuler 工具 + ![](figures/notthefirstlogin.png "非首次登录 x2openEuler 工具") - **表 5** 非首次登录x2openEuler工具参数说明 + **表 5** 非首次登录 x2openEuler 工具参数说明 @@ -429,7 +429,7 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 - + @@ -443,9 +443,9 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 4. 输入用户名和密码,单击“登录“。 - 首次登录web的普通用户,系统会提示修改初始密码。必须修改初始密码,否则无法登录。请按提示修改密码,密码需要满足如下复杂度要求: + 首次登录 web 的普通用户,系统会提示修改初始密码。必须修改初始密码,否则无法登录。请按提示修改密码,密码需要满足如下复杂度要求: - - 密码长度为8\~32个字符 + - 密码长度为 8\~32 个字符 - 密码至少包含以下字符中的两种: - 大写字母:A\~Z - 小写字母:a\~z @@ -455,10 +455,10 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 - 密码不能是用户名。 - 新密码与旧密码必须不同。 - 新密码不能是旧密码的逆序。 - - 新密码不能在弱口令字典中。 + - 新密码不能在 弱口令字典 中。 >![](public_sys-resources/icon-note.gif) **说明:** - >x2openEuler工具用户的密码默认有效期为90天,建议在密码有效期到达之前设置新密码。若密码已过期,则需要在登录后先进行密码修改操作。 + >x2openEuler 工具用户的密码默认有效期为 90 天,建议在密码有效期到达之前设置新密码。若密码已过期,则需要在登录后先进行密码修改操作。 成功登录后,显示首页界面,界面右上角将显示登录的用户名。 @@ -468,7 +468,7 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 ##### 前提条件 -已成功登录x2openEuler工具。 +已成功登录 x2openEuler 工具。 > ![](public_sys-resources/icon-note.gif) **说明:** > 只有管理员用户(x2openEulerAdmin)可以执行创建用户操作。 @@ -476,7 +476,7 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 ##### 操作步骤 1. 单击页面右上角![](figures/zh-cn_image_0000001575796977.png),在下拉菜单中选择“用户管理“,打开用户管理界面。 -2. 单击“创建“,打开“创建”界面,如[图5](#figure5)所示,需配置的参数如[表6](#sheet6)所示。 +2. 单击“创建“,打开“创建”界面,如 [图5](#figure5) 所示,需配置的参数如 [表6](#sheet6) 所示。 **图 5** 创建用户 ![](figures/createuser.png "创建用户") @@ -506,11 +506,11 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 @@ -519,18 +519,18 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示
    用户名登录x2openEuler工具的用户
    说明:
    系统的默认管理员为x2openEulerAdmin
    登录 x2openEuler 工具的用户
    说明:
    系统的默认管理员为 x2openEulerAdmin
    密码新密码 登录用户的密码。密码需要满足如下复杂度要求:
      -
    • 密码长度为8~32个字符
    • +
    • 密码长度为 8~32 个字符
    • 必须包含大写字母、小写字母、数字、特殊字符(`~!@#$%^&*()-_=+\|[{}];:'",<.>/?)中的两种及以上类型的组合
    • 密码不能包含空格
    • 密码不能是用户名
    • -
    • 密码不能在弱口令字典
    • +
    • 密码不能在 弱口令字典
    再次输入设置的密码
    -3. 参考[表6](#sheet6)配置新用户后,单击“确认”。 +3. 参考 [表6](#sheet6) 配置新用户后,单击“确认”。 >![](public_sys-resources/icon-note.gif) **说明:** > >- 创建的普通用户数量没有限制。 - >- 普通用户支持创建系统升级、系统信息收集评估、系统配置迁移和软件包评估任务;支持查看和下载操作日志;支持查看web服务端证书信息;支持查看和搜索弱口令;所有用户都只能查看、下载自己的升级任务相关报告。 + >- 普通用户支持创建系统升级、系统信息收集评估、系统配置迁移和软件包评估任务;支持查看和下载操作日志;支持查看 web 服务端证书信息;支持查看和搜索弱口令;所有用户都只能查看、下载自己的升级任务相关报告。 #### 系统配置 ##### 前提条件 -已成功登录x2openEuler工具。 +已成功登录 x2openEuler 工具。 > ![](public_sys-resources/icon-note.gif) **说明:** > 只有管理员用户(x2openEulerAdmin)可以执行系统配置操作。 @@ -538,7 +538,7 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 ##### 操作步骤 1. 单击页面右上角![](figures/icons/settings.png),在下拉菜单中选择“系统配置“,打开系统配置界面。 -2. 系统配置界面如[图6](#figure6)所示,单击“修改”,对配置项进行修改,需配置的参数如[表7](#sheet7)所示。 +2. 系统配置界面如 [图6](#figure6) 所示,单击“修改”,对配置项进行修改,需配置的参数如 [表7](#sheet7) 所示。 **图 6** 系统配置 ![](figures/systemconfig.png "系统配置") @@ -552,19 +552,19 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 最大在线普通用户数 - 表示工具最多同时允许普通用户在线数量,默认为10,可配置范围1~20,最大支持同时在线用户数20。 + 表示工具最多同时允许普通用户在线数量,默认为 10,可配置范围 1~20,最大支持同时在线用户数 20。 会话超时时间(min) - 表示工具会话超时时间,默认值30分钟,可配置范围1~240分钟。 + 表示工具会话超时时间,默认值 30 分钟,可配置范围 1~240 分钟。 - Web服务端证书过期警告阈值(天) - 表示服务端证书告警阈值,默认值90天,可配置范围7~180天。 + Web 服务端证书过期警告阈值(天) + 表示服务端证书告警阈值,默认值 90 天,可配置范围 7~180 天。 运行日志级别 - 日志级别用来表示日志信息的重要程度,默认为INFO。工具运行日志级别分DEBUG、INFO、WARNING、ERROR四级。 + 日志级别用来表示日志信息的重要程度,默认为 INFO。工具运行日志级别分 DEBUG、INFO、WARNING、ERROR 四级。
    • DEBUG:调试级别,记录调试信息,便于开发人员或维护人员定位问题。
    • INFO:信息级别,记录服务正常运行的关键信息。
    • @@ -575,7 +575,7 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 密码有效期(天) - 表示用户密码有效期限,默认值90天,可配置范围7~90天。 + 表示用户密码有效期限,默认值90天,可配置范围 7~90 天。 3. 选择对应配置项完成修改后,单击“确定”保存修改内容,单击“取消”放弃修改内容。 @@ -584,21 +584,21 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 ##### 前提条件 -- x2openEuler工具已部署。 -- x2openEuler工具部署环境需要配置代理。 +- x2openEuler 工具已部署。 +- x2openEuler 工具部署环境需要配置代理。 ##### 操作步骤 -如果x2openEuler工具部署环境需要配置代理,则可参考如下操作步骤进行代理配置。如果无需配置代理,则可跳过该章节。 +如果 x2openEuler 工具部署环境需要配置代理,则可参考如下操作步骤进行代理配置。如果无需配置代理,则可跳过该章节。 -1. 使用SSH工具远程登录x2openEuler部署环境,进入Linux操作系统命令行界面。 -2. 执行以下命令配置“/etc/systemd/system/gunicorn\_x2openEuler.service”文件。 +1. 使用 SSH 工具远程登录 x2openEuler 部署环境,进入 Linux 操作系统命令行界面。 +2. 执行以下命令配置 /etc/systemd/system/gunicorn\_x2openEuler.service 文件。 ```sh vi /etc/systemd/system/gunicorn_x2openEuler.service ``` -3. 在“gunicorn\_x2openEuler.service”文件中的“[Service]”字段后面增加如下两个环境变量。 +3. 在 gunicorn\_x2openEuler.service 文件中的 [Service] 字段后面增加如下两个环境变量。 ```conf Environment="http_proxy=ip:port" @@ -606,10 +606,10 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 ``` > ![](public_sys-resources/icon-note.gif) **说明:** - > “_ip:port_”是代理服务器的地址和端口号。 + > _ip:port_ 是代理服务器的地址和端口号。 -4. 按“ESC”,输入“:wq”,按“Enter”保存并退出。 -5. 执行以下命令重启“gunicorn\_x2openEuler”服务使配置文件生效。 +4. 按 “ESC”,输入 “:wq”,按 “Enter” 保存并退出。 +5. 执行以下命令重启 gunicorn\_x2openEuler 服务使配置文件生效。 ```sh systemctl restart gunicorn_x2openEuler -- Gitee From 06a529b494dd20bf6ce62269b2b2f64fb9ec402e Mon Sep 17 00:00:00 2001 From: shupiaoyang Date: Wed, 20 Nov 2024 14:40:16 +0800 Subject: [PATCH 07/16] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E8=A1=8C=E6=8C=87=E5=AF=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/docs/x2openEuler/FeatureGuide.md | 134 +++++++++++++++++++++++ 1 file changed, 134 insertions(+) diff --git a/docs/zh/docs/x2openEuler/FeatureGuide.md b/docs/zh/docs/x2openEuler/FeatureGuide.md index 9cc9b0025..7b2a2ee26 100644 --- a/docs/zh/docs/x2openEuler/FeatureGuide.md +++ b/docs/zh/docs/x2openEuler/FeatureGuide.md @@ -1207,3 +1207,137 @@ **图 34** 回滚后系统信息对比 ![回滚后信息对比](figures/rollbackcheck.png "回滚后系统信息对比") + +## 通过命令行使用x2openEuler工具 + +### 环境准备 + +下面以`CentOS 7.9 x86_64`系统为例,介绍如何将其升级为`openEuler 24.03-LTS`。 + +1. 安装 x2openEuler 工具 + + 获取并上传`x2openEuler-upgrade` RPM 包至待升级的机器。 + + > ![说明](public_sys-resources/icon-note.gif) **说明:** + > 如果机器运行的是`CentOS 6.x`或`SuSE 11`,请下载`x2openEuler-upgrade-for6`,其余系统使用`x2openEuler-upgrade`。 + + 确保当前系统的`yum`源可用,然后安装软件包: + + ```sh + yum install -y x2openEuler-upgrade-*.rpm + ``` + + > 若路径下存在多个 RPM 包,请使用完整的文件名进行安装。 + +2. 收集信息 + + 执行以下命令以收集本地软件信息: + + ```sh + x2openEuler-client upgrade-check-collect + ``` + + 执行成功后,系统会生成信息文件,示例如下: + + > 2024-10-23 16:43:37,373 - USER_ID:0 - INFO - Collect Success! The Archive file results are saved: /opt/x2openEuler-client/output/collect/collect-\.tar.gz + + 保存输出中的`uuid`,该信息将在后续操作中使用。本文的示例中,`uuid`为:`d8cf5ae2-911a-11ef-a25b-00155d306854`。 + +### 软件兼容性检查 + +执行以下命令进行兼容性检查: + +```sh +x2openEuler-upgrade-check upgrade-check \ +-repo \ +-o <报告输出路径> \ +-target_os_name <目标系统版本> \ +-os_name <当前系统版本> \ +-schema 2 +``` + +**参数说明:** + +1. `-repo `:指定目标系统的 repo 源信息。多个源用逗号分隔。 + 示例: + ``` + http://mirrors.tools.huawei.com/openeuler/openEuler-24.03-LTS/everything/x86_64/,\ + http://mirrors.tools.huawei.com/openeuler/openEuler-24.03-LTS/EPOL/main/x86_64/,\ + http://mirrors.tools.huawei.com/openeuler/openEuler-24.03-LTS/update/x86_64/ + ``` +2. `-o <报告输出路径>`:指定生成的兼容性报告文件输出路径。 + 示例:`/opt/x2openEuler-client/output/collect/collect-.tar.gz` +3. `-target_os_name <目标系统版本>`:目标系统版本号。 + 示例:`openEuler24.03-LTS` +4. `-os_name <当前系统版本>`:当前系统版本号。可选项有:`CentOS6`、`CentOS7`、`CentOS8`、`Ubuntu`、`SuSE11`、`SuSE12`、`openEuler20.03`、`openEuler22.03`。 + 示例:`CentOS7` +5. `-schema 2`:指定升级方案 2,请勿修改。 + +**示例**: + +```bash +x2openEuler-upgrade-check upgrade-check \ +-repo \ +http://mirrors.tools.huawei.com/openeuler/openEuler-24.03-LTS/everything/x86_64/,\ +http://mirrors.tools.huawei.com/openeuler/openEuler-24.03-LTS/EPOL/main/x86_64/,\ +http://mirrors.tools.huawei.com/openeuler/openEuler-24.03-LTS/update/x86_64/ \ +-o /opt/x2openEuler-client/output/collect/collect-d8cf5ae2-911a-11ef-a25b-00155d306854.tar.gz \ +-target_os_name openEuler24.03-LTS \ +-os_name CentOS7 \ +-schema 2 +``` + +> 请确保各部分之间留有空格,并使用 `\` 进行换行。 + +### 升级 + +执行以下命令进行升级: + +```sh +bash /opt/x2openEuler-upgrade/upgrade_entrance.sh upgrade \ +<备份目录> <排除目录> <备份路径> <内核启动参数> <兼容性报告路径> <依赖文件路径> <当前系统版本> <临时安装路径> +``` + +**参数说明:** + +1. **备份目录**:需要备份的系统目录,多个目录用逗号分隔。 + 示例:`/etc,/usr,/boot,/var,/opt,/bin,/sbin,/lib,/lib64` +2. **排除目录**:备份时要排除的目录,多个目录用逗号分隔。 + 示例:`/var/cache,/var/tmp` +3. **备份路径**:备份文件存放路径。该路径必须在根目录、`/root`、`/home`、`/data`、`/oracle`中的某个路径下。 + 示例:`/.osbak` +4. **内核启动参数**:升级时需要的内核参数。 + 示例:`crashkernel=512M,net.ifnames=0,biosdevname=0` +5. **兼容性报告路径**:软件兼容性检查报告的路径。 + 示例:`/opt/x2openEuler-upgrade/output/upgrade-check//check_result-.json` +6. **依赖文件路径**:升级前生成的软件包依赖列表路径。 + 示例:`/opt/x2openEuler-upgrade/output/upgrade-check//rpm_dep-.txt` +7. **当前系统版本**:在`CENTOS6`、`SUSE11`、`UBUNTU`和`OTHERS`(适用于`CentOS 7`、`CentOS 8`、`openEuler`等系统)中选择一项填入。 + 示例:`OTHERS` +8. **临时安装路径**:升级时的临时文件路径。该路径必须在`/root`、`/home`、`/data`、`/oracle`中的某个路径下,且不能与备份路径相同。 + 示例:`/root` +9. **repo文件路径**:指定 repo 文件路径,用于新系统的源配置。 + 示例:`/opt/x2openEuler/repo_files/migrate-oe2403.repo` + +**示例**: + +```sh +bash /opt/x2openEuler-upgrade/upgrade_entrance.sh upgrade \ +/etc,/usr,/boot,/var,/opt,/bin,/sbin,/lib,/lib64 \ +/var/cache,/var/tmp \ +/.osbak \ +crashkernel=512M,net.ifnames=0,biosdevname=0 \ +/opt/x2openEuler-upgrade/output/upgrade-check/d8cf5ae2-911a-11ef-a25b-00155d306854/check_result-d8cf5ae2-911a-11ef-a25b-00155d306854.json \ +/opt/x2openEuler-upgrade/output/upgrade-check/d8cf5ae2-911a-11ef-a25b-00155d306854/rpm_dep-d8cf5ae2-911a-11ef-a25b-00155d306854.txt \ +OTHERS \ +/root \ +/opt/x2openEuler/repo_files/migrate-oe2403.repo +``` + +### 重启 + +执行以下命令重启机器: + +```sh +reboot +``` \ No newline at end of file -- Gitee From 454407f6c3f658d0e55dcfdb7fbe3ddc4c20111f Mon Sep 17 00:00:00 2001 From: shupiaoyang Date: Wed, 20 Nov 2024 14:45:23 +0800 Subject: [PATCH 08/16] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E8=A1=8C=E6=8C=87=E5=AF=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/docs/x2openEuler/FeatureGuide.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/zh/docs/x2openEuler/FeatureGuide.md b/docs/zh/docs/x2openEuler/FeatureGuide.md index 7b2a2ee26..6accda68d 100644 --- a/docs/zh/docs/x2openEuler/FeatureGuide.md +++ b/docs/zh/docs/x2openEuler/FeatureGuide.md @@ -1287,8 +1287,6 @@ http://mirrors.tools.huawei.com/openeuler/openEuler-24.03-LTS/update/x86_64/ \ -schema 2 ``` -> 请确保各部分之间留有空格,并使用 `\` 进行换行。 - ### 升级 执行以下命令进行升级: -- Gitee From 18ec05989d73ebe5d33d325d9380a9e8b97ca1fd Mon Sep 17 00:00:00 2001 From: liujiangbin11 Date: Wed, 20 Nov 2024 14:45:28 +0800 Subject: [PATCH 09/16] =?UTF-8?q?docs:=20=E4=BF=AE=E6=94=B9=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E5=AE=89=E8=A3=85=E6=AD=A5=E9=AA=A4=E7=9A=84=E8=AF=B4?= =?UTF-8?q?=E6=98=8E=E5=92=8C=E6=96=B0=E5=A2=9E=E9=9D=99=E9=BB=98=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E7=9A=84=E6=AD=A5=E9=AA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/docs/x2openEuler/InstallationGuide.md | 46 +++++++++++++------ 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/docs/zh/docs/x2openEuler/InstallationGuide.md b/docs/zh/docs/x2openEuler/InstallationGuide.md index 6321f78ef..1de2e9d80 100644 --- a/docs/zh/docs/x2openEuler/InstallationGuide.md +++ b/docs/zh/docs/x2openEuler/InstallationGuide.md @@ -183,7 +183,9 @@ 1. 配置数据库。 ``` - Start MariaDB customize configure + Start the MariaDB custom configuration for the use of the x2openEuler tool. + Has MariaDB been installed on the server and can be used properly? [Y/n] (default: n) + Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service. MariaDB is active. NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB @@ -242,6 +244,8 @@ installation should now be secure. Thanks for using MariaDB! + + success ``` 2. 配置x2openEuler服务。 @@ -256,27 +260,23 @@ Enter the password of the root user of the MariaDB again: Set the password of the x2openEuler user for MariaDB: If the selected database already exists, it will be overwritten. - Use default x2openEulerDb database? [Y/n]y + Use default x2openEulerDb database? [Y/n] (default: Y) MariaDB is configured successfully. - - If authentication is enabled, the SSH connection fails after the fingerprint of the machine changes. + If authentication is enabled, + the SSH connection fails after the fingerprint of the machine changes. Please confirm whether public key authentication is not required for SSH connection(y/n default: n): - Use default x2openEuler database? [Y/n]y - MariaDB is configured successfully. - If authentication is enabled, the SSH connection fails after the fingerprint of the machine changes. - Please confirm whether public key authentication is not required for SSH connection(y/n default: n):y Start Nginx service and Gunicorn service Ip address list: sequence_number ip_address device [1] x.x.x.x enp1s0 - Enter the sequence number of listed ip as web server ip(default: 1): 1 Set the web server IP address x.x.x.x - Please enter HTTPS port(default: 18082): - The HTTPS port 18082 is valid. Set the HTTPS port to 18082 (y/n default: y): Set the HTTPS port 18082 - Please enter gunicorn port(default: 18080): - The GUNICORN port 18080 is valid. Set the GUNICORN port to 18080 (y/n default: y): Set the GUNICORN port 18080 + To ensure successful running of the tool, enable the web service port and reload the configuration as follows: + 1.Enable the web service port: firewall-cmd --add-port=18082/tcp --permanent + 2.Reload the configuration: firewall-cmd --reload + 3.Check whether the port is enabled: firewall-cmd --query-port=18082/tcp + Port 18082 is enabled successfully. The Nginx and Gunicorn ports are set up successfully. Installing the django dependent environment. The django dependency environment is installed successfully. @@ -307,8 +307,28 @@ Encrypting phase successfully. It may take a few minutes to generate the certificate, please wait... Certificate generated successfully. You can import the root certificate to the browser to mask security alarms when you access the tool. The root certificate is stored in /usr/local/x2openEuler/portal/thirdapp/nginx-install/webui/ca.crt. + Desktop icon created successfully. Web console is now running, go to: https://x.x.x.x:18082/x2openEuler/#/login ``` + + 工具也支持一键式地启动服务,采用默认配置。在执行静默安装前,需要先修改配置文件 `/usr/local/x2openEuler/portal/service/silent_installation.conf`, 配置文件的内容如下: + + ``` + root_password = + x2openEuler_password = + ``` + + `root_password` 和 `x2openEuler_password` 分别是数据库用户 root 和 x2openEuler 的密码。 + + 然后执行如下命令启动服务: + + ``` + cd /usr/local/x2openEuler/portal/service + bash service_init.sh true + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + > 如果在已经安装过 x2openEuler-core 的环境上重新安装时,需要注意 `root_password` 和 `x2openEuler_password` 应该填写之前设置过的密码。 ## 验证 ##### web模式下验证安装结果 -- Gitee From 7824673aa6294bf2bdbd268c2c8b6d5f53731207 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=B4=E5=9F=BA=E9=B1=BC?= Date: Wed, 20 Nov 2024 16:50:06 +0800 Subject: [PATCH 10/16] =?UTF-8?q?docs:=20x2=E6=96=87=E6=A1=A3=E6=9B=B4?= =?UTF-8?q?=E6=96=B0,=E5=AE=89=E8=A3=85=E6=8C=87=E5=8D=97=E9=83=A8?= =?UTF-8?q?=E5=88=86,=E8=B0=83=E6=95=B4=E4=B8=80=E4=BA=8C=E7=BA=A7?= =?UTF-8?q?=E6=A0=87=E9=A2=98=E3=80=81=E6=B7=BB=E5=8A=A0=E7=A9=BA=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/docs/x2openEuler/FeatureGuide.md | 363 +++++++++--------- docs/zh/docs/x2openEuler/InstallationGuide.md | 2 +- 2 files changed, 182 insertions(+), 183 deletions(-) diff --git a/docs/zh/docs/x2openEuler/FeatureGuide.md b/docs/zh/docs/x2openEuler/FeatureGuide.md index 6accda68d..5d500c899 100644 --- a/docs/zh/docs/x2openEuler/FeatureGuide.md +++ b/docs/zh/docs/x2openEuler/FeatureGuide.md @@ -1,6 +1,6 @@ -# x2openEuler 特性指南 +# 特性指南 -## 通过web界面使用x2openEuler工具 +## 通过 web 界面使用 x2openEuler 工具 ### 系统升级 @@ -16,7 +16,7 @@ > > ![须知](public_sys-resources/icon-notice.gif) **须知:** -> x2openEuler工具单个升级任务最多支持1000个节点。 +> x2openEuler 工具单个升级任务最多支持 1000 个节点。 1. 在页面左侧,单击“新建任务”,选择“升级任务”进入“新建升级任务”界面,工具默认会自动生成任务名称,可修改该名称。 2. 在“新建升级任务”确认“任务名称”后,选择“批量导入”或“添加节点”,并对以下参数进行配置。 @@ -25,19 +25,19 @@ > ![说明](public_sys-resources/icon-note.gif) **说明:** > 批量导入节点过程中,工具会对导入的节点信息进行校验,若校验不通过则需按照提示修改导入信息,并重新进行批量导入操作。 - 1. 在批量导入界面中,单击“模板表格”获取模板后参考[表1](#sheet1)填写节点信息。 + 1. 在批量导入界面中,单击“模板表格”获取模板后参考 [表1](#sheet1) 填写节点信息。 **图 1** 批量导入 ![批量导入](figures/batchimport.png "批量导入") - 2. 完成节点信息的填写后单击“上传文件”阅读“SSH传输须知”,选择已填写节点信息的批量导入文件进行上传。 + 2. 完成节点信息的填写后单击“上传文件”阅读 “SSH 传输须知”,选择已填写节点信息的批量导入文件进行上传。 - **图 2** SSH传输须知 - ![SSH传输须知](figures/sshnote.png "SSH传输须知") + **图 2** SSH 传输须知 + ![SSH 传输须知](figures/sshnote.png "SSH 传输须知") - 添加节点:添加单个节点的节点信息。 - 在“添加节点”页面,参考[表1](#sheet1)输入相应信息后,单击“确定”进行节点添加。 + 在“添加节点”页面,参考 [表1](#sheet1) 输入相应信息后,单击“确定”进行节点添加。 **表 1** 节点信息参数说明 @@ -47,12 +47,12 @@ 说明 - SSH传输须知 - 节点管理使用服务器默认的SSH传输通道,为了保护数据的安全完整,建议使用安全的ssh服务,如使用安全的ssh版本,配置使用安全的加密算法等。 + SSH 传输须知 + 节点管理使用服务器默认的 SSH 传输通道,为了保护数据的安全完整,建议使用安全的 ssh 服务,如使用安全的 ssh 版本,配置使用安全的加密算法等。 - 待升级节点IP - 待升级节点IP地址。
      说明:
      待升级节点与部署openEuler web工具的环境需要保持可联通状态。 + 待升级节点 IP + 待升级节点 IP 地址。
      说明:
      待升级节点与部署 openEuler web 工具的环境需要保持可联通状态。 节点别名 @@ -60,7 +60,7 @@ 端口 - 登录待升级节点的SSH协议端口。 + 登录待升级节点的 SSH 协议端口。 用户名 @@ -72,7 +72,7 @@
      • 私钥文件:登录待升级节点私钥文件的绝对路径。
      • -
      • 密码短语:登录待升级节点私钥文件的密码短语。配置秘钥认证方式请参考配置生成秘钥
      • +
      • 密码短语:登录待升级节点私钥文件的密码短语。配置秘钥认证方式请参考 配置生成秘钥
      @@ -80,33 +80,33 @@ 口令认证:通过口令进行认证。
      口令:登录待升级节点的密码口令。
      说明:
        -
      • 若登录用户为普通用户,需要输入root用户口令切换到root用户进行具体操作,由于root用户拥有最高权限,直接使用root用户登录服务器可能会存在安全风险。您可以通过配置禁止root用户SSH登录的选项,来提升系统安全性。具体配置如下:先以普通用户登录服务器,切换至root登录后检查/etc/ssh/sshd_config配置项PermitRootlogin,如果显示no,说明禁止了root用户登录;如果显示yes,则需要将配置项PermitRootlogin设置为no。配置完成后需要重启sshd服务确保配置生效。
      • +
      • 若登录用户为普通用户,需要输入 root 用户口令切换到 root 用户进行具体操作,由于 root 用户拥有最高权限,直接使用 root 用户登录服务器可能会存在安全风险。您可以通过配置禁止 root 用户 SSH 登录的选项,来提升系统安全性。具体配置如下:先以普通用户登录服务器,切换至 root 登录后检查 /etc/ssh/sshd_config 配置项 PermitRootlogin,如果显示 no,说明禁止了 root 用户登录;如果显示 yes,则需要将配置项 PermitRootlogin 设置为 no。配置完成后需要重启sshd服务确保配置生效。
      • 配置的节点信息中涉及用户密码输入,请注意定期维护帐户信息,确保环境安全。
      源操作系统版本 - 待升级节点的操作系统,默认为CentOS 7.6,可通过上传操作系统数据库支持包支持更多操作系统。 + 待升级节点的源操作系统,支持列表见 操作系统要求。 目标操作系统版本 - 待升级节点的操作系统,默认为openEuler 20.03-LTS-SP1,可通过上传操作系统数据库支持包支持更多操作系统。 + 待升级节点的目标操作系统,支持列表见 操作系统要求。 repo源配置 - 输入已配置的repo源名称或单击右侧“选择”进行选择已配置的待升级节点在升级过程中需要的repo源,可参考配置repo源进行配置。 + 输入已配置的repo源名称或单击右侧“选择”进行选择已配置的待升级节点在升级过程中需要的repo源,可参考 配置repo源 进行配置。 业务软件 须知:
        -
      • 未填写业务软件则不会生成软件评估报告。不需升级的业务软件(rpm包)优先级高于业务软件(rpm包)。
      • -
      • 输入多个软件目录或rpm包名称时,请用英文逗号分隔。
      • -
      • 业务软件(rpm包):使用rpm包安装的业务软件,只需填写主软件名称即可,例如安装了docker只需填写docker既可。工具将检查该软件是否存在对应的openEuler版本,存在则自动升级软件。 若不存在,将进行软件兼容性检查,如果该软件兼容openEuler,则保留该业务软件,检查不通过则无法升级节点。
      • -
      • 业务软件(目录):使用解压包,源码编译安装的软件,需填写业务软件实际的路径,该路径只能包含业务软件,不能包含其他与业务软件不相关的文件。 工具将检查该软件在openEuler操作系统上的兼容性, 检查通过后即可升级节点并保留原始业务软件,检查不通过则无法升级节点。
      • -
      • 不需升级的业务软件(rpm包):使用rpm包安装的业务软件,只需填写主软件名称即可,例如安装了docker只需填写docker即可。 工具将检查该软件在openEuler操作系统上的兼容性,检查通过后即可升级节点并保留原始版本包。 检查不通过则无法升级节点。
      • -
      • 升级后新安装软件:使用rpm包安装的业务软件,只需填写主软件名称即可。例如操作系统升级后安装了docker只需填写docker即可。工具将检查该软件在openEuler操作系统上的兼容性,检查通过后即可在升级后安装该软件。检查不通过则无法安装该软件。
      • +
      • 未填写业务软件则不会生成软件评估报告。不需升级的业务软件(rpm 包)优先级高于业务软件(rpm 包)。
      • +
      • 输入多个软件目录或 rpm 包名称时,请用英文逗号分隔。
      • +
      • 业务软件(rpm 包):使用rpm包安装的业务软件,只需填写主软件名称即可,例如安装了 docker 只需填写 docker 既可。工具将检查该软件是否存在对应的 openEuler 版本,存在则自动升级软件。 若不存在,将进行软件兼容性检查,如果该软件兼容openEuler,则保留该业务软件,检查不通过则无法升级节点。
      • +
      • 业务软件(目录):使用解压包,源码编译安装的软件,需填写业务软件实际的路径,该路径只能包含业务软件,不能包含其他与业务软件不相关的文件。 工具将检查该软件在 openEuler 操作系统上的兼容性, 检查通过后即可升级节点并保留原始业务软件,检查不通过则无法升级节点。
      • +
      • 不需升级的业务软件(rpm 包):使用 rpm 包安装的业务软件,只需填写主软件名称即可,例如安装了 docker 只需填写 docker 即可。 工具将检查该软件在 openEuler 操作系统上的兼容性,检查通过后即可升级节点并保留原始版本包。检查不通过则无法升级节点。
      • +
      • 升级后新安装软件:使用 rpm 包安装的业务软件,只需填写主软件名称即可。例如操作系统升级后安装了 docker 只需填写 docker 即可。工具将检查该软件在 openEuler 操作系统上的兼容性,检查通过后即可在升级后安装该软件。检查不通过则无法安装该软件。
      @@ -120,17 +120,17 @@ 备份目录

      待升级操作系统需要进行备份的目录。

      -

      默认备份目录:/etc,/usr,/boot,/var,/run,/opt/sut/check_result,以及所有rpm包文件,多个备份目录间需要用逗号隔开。

      +

      默认备份目录:/etc,/usr,/boot,/var,/run,/opt/sut/check_result,以及所有 rpm 包文件,多个备份目录间需要用逗号隔开。

      说明:
        -
      • 升级过程中会自动备份数据。默认备份/usr/run/boot/var/etc目录当中的文件,备份文件将被储存在/.osbak目录下。
      • +
      • 升级过程中会自动备份数据。默认备份 /usr/run/boot/var/etc 目录当中的文件,备份文件将被储存在 /.osbak 目录下。
      • 只需备份系统运行需要的文件目录,无需备份业务数据,如果业务数据直接存放在默认备份系统目录下, 或者通过挂载方式挂载在默认备份系统目录下,则需要将业务数据目录填写在排除目录一栏。备份目录一般情况无需额外填写。
      备份文件存放位置 - 用于指定节点升级时,备份文件存放的目录,不填写则默认存放在/.osbak。 + 用于指定节点升级时,备份文件存放的目录,不填写则默认存放在 /.osbak。 排除目录 @@ -151,9 +151,9 @@ 须知:
        -
      1. 前后置脚本上传格式为固定xxx.tar.gz包,xxx是压缩目录名称且解压目录一级必须有“run.sh”文件做为脚本执行入口,工具会根据“run.sh”的返回值来判断脚本是否执行成功。 脚本将在待升级节点上运行,请确保上传脚本无安全风险。
      2. -
      3. 脚本上传路径默认为“/opt/x2openEuler/scripts-execute/upload/”。
      4. -
      5. 使用chown -R x2openEuler:x2openEuler xxx.tar.gz修改文件拥有者和群组。
      6. +
      7. 前后置脚本上传格式为固定 xxx.tar.gz 包,xxx 是压缩目录名称且解压目录一级必须有 run.sh 文件做为脚本执行入口,工具会根据 run.sh 的返回值来判断脚本是否执行成功。 脚本将在待升级节点上运行,请确保上传脚本无安全风险。
      8. +
      9. 脚本上传路径默认为 /opt/x2openEuler/scripts-execute/upload/。
      10. +
      11. 使用 chown -R x2openEuler:x2openEuler xxx.tar.gz 修改文件拥有者和群组。
      @@ -187,7 +187,7 @@ ##### 前提条件 -- 已登录x2openEuler工具。 +- 已登录 x2openEuler 工具。 - 已创建升级任务。 ##### 操作步骤 @@ -201,21 +201,21 @@ > > - 升级过程中在不同的升级阶段结束后可单击右下角“初始化”,使待升级节点回归待测试状态。 > - 导入前后置脚本后,升级任务中会增加“前置脚本执行”和“后置脚本执行”阶段。 - > - 若升级过程中需要进行回退,可进行[回退一致性配置](CommonOperation.md#backupsync), 配置内容将不会进行一致性检查。配置之后仅在下一次回退才会生效。 + > - 若升级过程中需要进行回退,可进行 [回退一致性配置](CommonOperation.md#backupsync), 配置内容将不会进行一致性检查。配置之后仅在下一次回退才会生效。 **图 5** 初始化节点 ![初始化节点](figures/initnode.png "初始化节点") 1. 环境检查 - 环境检查用于分析x2openEuler工具与待升级节点的环境连通性,验证repo源是否处于可用状态,若环境检查无法通过,则需参考对应检查项操作建议修改节点配置信息。如需进行自定义环境检查请参考[自定义环境检查](CommonOperation.md#envcheck)。 + 环境检查用于分析 x2openEuler 工具与待升级节点的环境连通性,验证 repo 源是否处于可用状态,若环境检查无法通过,则需参考对应检查项操作建议修改节点配置信息。如需进行自定义环境检查请参考 [自定义环境检查](CommonOperation.md#envcheck)。 **图 6** 环境检查页面 ![环境检查页面](figures/envcheck.png "环境检查页面") 2. 升级前检查 - 针对待升级节点进行配置文件升级策略、软件、硬件兼容性评估及软件和服务冲突检查,产生相应评估报告,确认待升级节点是否符合升级要求。若出现兼容性不通过的情况,则需参考评估报告进行软件适配。评估报告参数详细说明请参考[表2](#sheet2)、[表3](#sheet3)、[表4](#sheet4)、[表5](#sheet5)和[表6](#sheet6)。 + 针对待升级节点进行配置文件升级策略、软件、硬件兼容性评估及软件和服务冲突检查,产生相应评估报告,确认待升级节点是否符合升级要求。若出现兼容性不通过的情况,则需参考评估报告进行软件适配。评估报告参数详细说明请参考 [表2](#sheet2)、[表3](#sheet3)、[表4](#sheet4)、[表5](#sheet5) 和 [表6](#sheet6)。 **图 7** 升级前检查 ![升级前检查](figures/updatecheck.png "升级前检查") @@ -299,14 +299,14 @@ 依赖包兼容性 -

      显示软件安装所需要的直接依赖以及依赖文件在各个系统上对应的rpm包。

      +

      显示软件安装所需要的直接依赖以及依赖文件在各个系统上对应的 rpm 包。

        -
      • 若查询到的直接依赖的rpm的名字和版本都一样,会显示 版本未变更
      • -
      • 若查询到的直接依赖的rpm的版本不一样,但接口无差异,会显示 版本有变更
      • -
      • 若查询到的直接依赖的rpm的包名发生变化,但接口无差异,会显示 包名有变更
      • -
      • 若源操作系统查到rpm,目标操作系统没有查到,会显示 缺失
      • -
      • 若源操作系统没有查到rpm,目标操作系统有查到,或者所在包有接口变化则会显示, 需要检查
      • -
      • 若源操作系统和目标操作系统都没有查到rpm,则会放到 other 里边,并显示 需要检查
      • +
      • 若查询到的直接依赖的 rpm 的名字和版本都一样,会显示 版本未变更
      • +
      • 若查询到的直接依赖的 rpm 的版本不一样,但接口无差异,会显示 版本有变更
      • +
      • 若查询到的直接依赖的 rpm 的包名发生变化,但接口无差异,会显示 包名有变更
      • +
      • 若源操作系统查到 rpm,目标操作系统没有查到,会显示 缺失
      • +
      • 若源操作系统没有查到 rpm,目标操作系统有查到,或者所在包有接口变化,则会显示 需要检查
      • +
      • 若源操作系统和目标操作系统都没有查到 rpm,则会放到 other 里边,并显示 需要检查
      @@ -325,7 +325,7 @@
    • 操作系统:表示迁移评估的系统名称。
    • 函数名:接口表示。
    • 文件名:表示外部接口所在的文件名。
    • -
    • 依赖包:表示接口所在的外部so库。
    • +
    • 依赖包:表示接口所在的外部 so 库。
    • 接口差异项:表示外部接口的变化差异,如果是已移除接口,则此项为空。
    @@ -335,11 +335,11 @@ 接口兼容性(JDK) -

    表示扫描Jar包中调用的jdk接口在待迁移的系统上对应满足运行条件的最小jdk上发生的变更。

    +

    表示扫描 Jar 包中调用的 jdk 接口在待迁移的系统上对应满足运行条件的最小 jdk 上发生的变更。

      -
    • openEuler jdk:openEuler上满足Jar包运行环境的最小jdk版本。
    • -
    • 对象构建jdk:扫描jar包对应构建的jdk版本。
    • -
    • jar包名:扫描的jar包名称。
    • +
    • openEuler jdk:openEuler上满足Jar包运行环境的最小 jdk 版本。
    • +
    • 对象构建 jdk:扫描 jar 包对应构建的jdk版本。
    • +
    • jar 包名:扫描的 jar 包名称。
    • 方法名:存在接口差异的方法名。
    • 函数调用签名:存在接口差异的方法函数签名。
    • 包名:存在接口差异的方法所在的包(packageName+className)。
    • @@ -350,16 +350,16 @@ 接口兼容性(Java) -

      Jar接口差异主要描述了当前jar包接口在待迁移的系统上发生的变更。

      +

      Jar 接口差异主要描述了当前jar包接口在待迁移的系统上发生的变更。

        -
      • 调用的jar包:表示当前被调用的jar包名称。
      • -
      • 所属的rpm包:表示当前的jar包所属的rpm包。
      • +
      • 调用的 ja r包:表示当前被调用的 jar 包名称。
      • +
      • 所属的 rpm 包:表示当前的 jar 包所属的 rpm 包。
      • 展开的详细信息中:
          -
        • centos7.6 Methods:表示CentOS 7.6上不兼容的接口名称。
        • -
        • package:表示不兼容的接口所属的jar包。
        • +
        • centos7.6 Methods:表示 CentOS 7.6 上不兼容的接口名称。
        • +
        • package:表示不兼容的接口所属的 jar 包。
        • class:表示不兼容的接口所属的类。
        • -
        • openEuler20.03-LTS-SP1 Change:表示不兼容的接口在openEuler20.03-LTS-SP1上发生的变更,这部分变更描述包含了方法的移除,方法返回参数、方法签名、方法修饰、异常等变更。
        • +
        • openEuler20.03-LTS-SP1 Change:表示不兼容的接口在 openEuler20.03-LTS-SP1 上发生的变更,这部分变更描述包含了方法的移除,方法返回参数、方法签名、方法修饰、异常等变更。
      @@ -376,17 +376,17 @@ 评估结果 - 显示评估环境中的系统、基本系统、CPU以及整机兼容性信息。 + 显示评估环境中的系统、基本系统、CPU 以及整机兼容性信息。 板卡在openEuler 20.03 LTS SP1 兼容性清单

      板卡兼容必须满足兼容性清单中参数与已有板卡清单列表中的信息都保持一致才算兼容。若对比字段信息不完全一致,则属于待确认板卡。

        -
      • 芯片厂商ID
      • -
      • 设备ID
      • -
      • 二级厂商制造ID
      • -
      • 二级设备ID
      • +
      • 芯片厂商 ID
      • +
      • 设备 ID
      • +
      • 二级厂商制造 ID
      • +
      • 二级设备 ID
      • 芯片型号
      • 是否在兼容性清单:确认该硬件是否兼容目标操作系统
      • 风险级别:对硬件兼容性影响升级的风险进行等级评估
      • @@ -419,8 +419,8 @@ 升级至目标操作系统后同时升级的软件包信息。 - 升级到openEuler拓展仓库包 - 升级至openEuler操作系统后拓展的软件包信息。 + 升级到 openEuler 拓展仓库包 + 升级至 openEuler 操作系统后拓展的软件包信息。 源操作系统删除的软件包 @@ -431,12 +431,12 @@ 升级至目标操作系统后额外安装的软件包。 - 升级前检查完成后,单击右下角“导出HTML报告”即可导出检查报告。单击“下载环境信息和日志”获取检查过程中收集的环境信息和任务执行日志。若升级前检查未通过,可单击右下角“重试”重新尝试升级检查或单击“剔除节点”清除该节点当前状态,剔除后单击“恢复”可恢复至剔除前状态。 + 升级前检查完成后,单击右下角“导出 HTML 报告”即可导出检查报告。单击“下载环境信息和日志”获取检查过程中收集的环境信息和任务执行日志。若升级前检查未通过,可单击右下角“重试”重新尝试升级检查或单击“剔除节点”清除该节点当前状态,剔除后单击“恢复”可恢复至剔除前状态。 3. 升级和数据备份 > ![说明](public_sys-resources/icon-note.gif) **说明:** - > 升级过程中会自动备份数据。默认备份/usr 、/run、/boot、/var和/etc目录当中的文件,备份文件将被储存在/.osbak目录下。 + > 升级过程中会自动备份数据。默认备份 /usr 、/run、/boot、/var 和 /etc 目录当中的文件,备份文件将被储存 在/.osbak 目录下。 环境检查和升级前检查通过后,进入节点升级阶段。升级完成后,单击“重启节点”或手动重启升级节点,确保升级完成。单击“下载环境信息和日志”获取升级过程中收集的环境信息和运行日志。 @@ -447,15 +447,15 @@ 4. 升级后环境检查 - 升级后环境检查会对升级后操作系统命令、软件包及服务等进行检查并生成巡检报告,如需自定义巡检项则可参考[自定义健康巡检](CommonOperation.md#healthcheck)。升级完成后建议清理备份数据,以节约节点空间。如需进行回退操作,则可以选择保留备份数据。 + 升级后环境检查会对升级后操作系统命令、软件包及服务等进行检查并生成巡检报告,如需自定义巡检项则可参考 [自定义健康巡检](CommonOperation.md#healthcheck)。升级完成后建议清理备份数据,以节约节点空间。如需进行回退操作,则可以选择保留备份数据。 > ![说明](public_sys-resources/icon-note.gif) **说明:** > 升级完成后,需进行业务运行验证,若业务运行正常,即可进行备份数据清理,以释放占用空间。 -3. 升级完成后,参考[升级后验证](#upgradeeverfy)进行升级后环境验证。 +3. 升级完成后,参考 [升级后验证](#upgradeeverfy) 进行升级后环境验证。 > ![说明](public_sys-resources/icon-note.gif) **说明:** - > 系统重启之后,SELinux会进行relabel动作,物理机可能耗时较长。relabel动作触发完成后,系统会自动进行重启,此时才真正升级至目标操作系统。 + > 系统重启之后,SELinux 会进行 relabel 动作,物理机可能耗时较长。relabel动作触发完成后,系统会自动进行重启,此时才真正升级至目标操作系统。 #### 升级后验证 @@ -482,7 +482,7 @@ ANSI_COLOR="0;31" ``` -2. 进行openEuler系统命令验证,能够正常运行即表示已升级至目标操作系统。 +2. 进行 openEuler 系统命令验证,能够正常运行即表示已升级至目标操作系统。 3. (可选)升级完成后,可根据业务需求,执行业务恢复或适配脚本。 4. 检查业务状态是否运行正常。 @@ -494,7 +494,7 @@ ##### 前提条件 -已登录x2openEuler工具。 +已登录 x2openEuler 工具。 ##### 操作步骤 @@ -506,7 +506,7 @@ > ![说明](public_sys-resources/icon-note.gif) **说明:** > 批量导入节点过程中,工具会对导入的节点信息进行校验,若校验不通过则需按照提示修改导入信息,并重新进行批量导入操作。 - 1. 在批量导入界面中,单击“模板表格”获取模板后参考[表7](#sheet7)填写节点信息。 + 1. 在批量导入界面中,单击“模板表格”获取模板后参考 [表7](#sheet7) 填写节点信息。 **图 9** 批量导入 ![批量导入](figures/batchimport.png "批量导入") @@ -528,11 +528,11 @@ SSH传输须知 - 节点管理使用服务器默认的SSH传输通道,为了保护数据的安全完整,建议使用安全的ssh服务,如使用安全的ssh版本,配置使用安全的加密算法等。 + 节点管理使用服务器默认的 SSH 传输通道,为了保护数据的安全完整,建议使用安全的 ssh 服务,如使用安全的 ssh 版本,配置使用安全的加密算法等。 - 待升级节点IP - 待升级节点IP地址。
        说明:
        待升级节点与部署openEuler web工具的环境需要保持可联通状态。 + 待升级节点 IP + 待升级节点 IP地址。
        说明:
        待升级节点与部署 openEuler web 工具的环境需要保持可联通状态。 节点别名 @@ -540,7 +540,7 @@ 端口 - 登录待升级节点的SSH协议端口。 + 登录待升级节点的 SSH 协议端口。 用户名 @@ -552,7 +552,7 @@
        • 私钥文件:登录待升级节点私钥文件的绝对路径。
        • -
        • 密码短语:登录待升级节点私钥文件的密码短语。配置秘钥认证方式请参考配置生成秘钥
        • +
        • 密码短语:登录待升级节点私钥文件的密码短语。配置秘钥认证方式请参考 配置生成秘钥
        @@ -560,33 +560,33 @@ 口令认证:通过口令进行认证。
        口令:登录待升级节点的密码口令。
        说明:
          -
        • 若登录用户为普通用户,需要输入root用户口令切换到root用户进行具体操作,由于root用户拥有最高权限,直接使用root用户登录服务器可能会存在安全风险。您可以通过配置禁止root用户SSH登录的选项,来提升系统安全性。具体配置如下:先以普通用户登录服务器,切换至root登录后检查/etc/ssh/sshd_config配置项PermitRootlogin,如果显示no,说明禁止了root用户登录;如果显示yes,则需要将配置项PermitRootlogin设置为no。配置完成后需要重启sshd服务确保配置生效。
        • +
        • 若登录用户为普通用户,需要输入 root 用户口令切换到 root 用户进行具体操作,由于 root 用户拥有最高权限,直接使用 root 用户登录服务器可能会存在安全风险。您可以通过配置禁止 root 用户 SSH 登录的选项,来提升系统安全性。具体配置如下:先以普通用户登录服务器,切换至 root 登录后检查 /etc/ssh/sshd_config 配置项 PermitRootlogin,如果显示 no,说明禁止了 root 用户登录;如果显示 yes,则需要将配置项 PermitRootlogin 设置为 no。配置完成后需要重启 sshd 服务确保配置生效。
        • 配置的节点信息中涉及用户密码输入,请注意定期维护帐户信息,确保环境安全。
        源操作系统版本 - 待升级节点的操作系统,默认为CentOS 7.6,可通过上传操作系统数据库支持包支持更多操作系统。 + 待升级节点的操作系统,默认为 CentOS 7.6,可通过 上传操作系统数据库支持包 支持更多操作系统。 目标操作系统版本 - 待升级节点的操作系统,默认为openEuler 20.03-LTS-SP1,可通过上传操作系统数据库支持包支持更多操作系统。 + 待升级节点的操作系统,默认为 openEuler 20.03-LTS-SP1,可通过 上传操作系统数据库支持包 持更多操作系统。 - repo源配置 - 输入已配置的repo源名称或单击右侧“选择”进行选择已配置的待升级节点在升级过程中需要的repo源,可参考配置repo源进行配置。 + repo 源配置 + 输入已配置的 repo 源名称或单击右侧“选择”进行选择已配置的待升级节点在升级过程中需要的 repo 源,可参考 配置repo源 进行配置。 业务软件 须知:
          -
        • 未填写业务软件则不会生成软件评估报告。不需升级的业务软件(rpm包)优先级高于业务软件(rpm包)。
        • -
        • 输入多个软件目录或rpm包名称时,请用英文逗号分隔。
        • -
        • 业务软件(rpm包):使用rpm包安装的业务软件,只需填写主软件名称即可,例如安装了docker只需填写docker既可。 工具将检查该软件是否存在对应的openEuler版本,存在则自动升级软件。 若不存在,将进行软件兼容性检查,如果该软件兼容openEuler,则保留该业务软件,检查不通过则无法升级节点。
        • -
        • 业务软件(目录):使用解压包,源码编译安装的软件,需填写业务软件实际的路径, 该路径只能包含业务软件,不能包含其他与业务软件不相关的文件。 工具将检查该软件在openEuler操作系统上的兼容性, 检查通过后即可升级节点并保留原始业务软件,检查不通过则无法升级节点。
        • -
        • 不需升级的业务软件(rpm包):使用rpm包安装的业务软件,只需填写主软件名称即可,例如安装了docker只需填写docker即可。 工具将检查该软件在openEuler操作系统上的兼容性,检查通过后即可升级节点并保留原始版本包。 检查不通过则无法升级节点。
        • -
        • 升级后新安装软件:使用rpm包安装的业务软件,只需填写主软件名称即可。例如操作系统升级后安装了docker只需填写docker即可。工具将检查该软件在openEuler操作系统上的兼容性,检查通过后即可在升级后安装该软件。检查不通过则无法安装该软件。
        • +
        • 未填写业务软件则不会生成软件评估报告。不需升级的业务软件(rpm 包)优先级高于业务软件(rpm 包)。
        • +
        • 输入多个软件目录或 rpm 包名称时,请用英文逗号分隔。
        • +
        • 业务软件(rpm 包):使用 rpm 包安装的业务软件,只需填写主软件名称即可,例如安装了 docker 只需填写 docker 既可。 工具将检查该软件是否存在对应的 openEuler 版本,存在则自动升级软件。 若不存在,将进行软件兼容性检查,如果该软件兼容 openEuler,则保留该业务软件,检查不通过则无法升级节点。
        • +
        • 业务软件(目录):使用解压包,源码编译安装的软件,需填写业务软件实际的路径, 该路径只能包含业务软件,不能包含其他与业务软件不相关的文件。 工具将检查该软件在 openEuler 操作系统上的兼容性, 检查通过后即可升级节点并保留原始业务软件,检查不通过则无法升级节点。
        • +
        • 不需升级的业务软件(rpm 包):使用rpm包安装的业务软件,只需填写主软件名称即可,例如安装了 docker 只需填写 docker 即可。 工具将检查该软件在 openEuler 操作系统上的兼容性,检查通过后即可升级节点并保留原始版本包。 检查不通过则无法升级节点。
        • +
        • 升级后新安装软件:使用rpm包安装的业务软件,只需填写主软件名称即可。例如操作系统升级后安装了 docker 只需填写 docker 即可。工具将检查该软件在 openEuler 操作系统上的兼容性,检查通过后即可在升级后安装该软件。检查不通过则无法安装该软件。
        @@ -617,27 +617,27 @@ 2. 单击节点信息右侧的“开始检查”,可对单个节点进行环境检查。同时勾选多个节点,单击左上角“批量操作➡开始检查”,可对多个节点进行环境检查。 - 节点信息收集评估任务分为2个阶段,其中任意阶段失败都会导致任务终止。 + 节点信息收集评估任务分为 2 个阶段,其中任意阶段失败都会导致任务终止。 > ![说明](public_sys-resources/icon-note.gif) **说明:** > > - 升级过程中在不同的升级阶段结束后可单击右下角“初始化”,使待升级节点回归待测试状态。 > - 导入前后置脚本后,升级任务中会增加“前置脚本执行”和“后置脚本执行”阶段。 - > - 若升级过程中需要进行回退,可进行[回退一致性配置](CommonOperation.md#backupsync), 配置内容将不会进行一致性检查。配置之后仅在下一次回退才会生效。 + > - 若升级过程中需要进行回退,可进行 [回退一致性配置](CommonOperation.md#backupsync), 配置内容将不会进行一致性检查。配置之后仅在下一次回退才会生效。 **图 13** 初始化节点 ![初始化节点](figures/initnode.png "初始化节点-2") 1. 环境检查 - 环境检查用于分析x2openEuler工具与待升级节点的连通性,验证环境信息是否正常,若环境检查无法通过,则需修改节点配置信息。 + 环境检查用于分析 x2openEuler 工具与待升级节点的连通性,验证环境信息是否正常,若环境检查无法通过,则需修改节点配置信息。 **图 11** 环境检查页面 ![环境检查页面](figures/envcheck-1.png "环境检查页面-3") 2. 收集与评估 - 针对待升级节点进行软件、硬件兼容性评估及软件冲突检查,产生相应评估报告,确认待升级节点是否符合升级要求。若出现兼容性不通过的情况,则需参考评估报告进行软件适配。评估报告参数详细说明请参考[表8](#sheet8)、[表9](#sheet9)和[表10](#sheet10)。 + 针对待升级节点进行软件、硬件兼容性评估及软件冲突检查,产生相应评估报告,确认待升级节点是否符合升级要求。若出现兼容性不通过的情况,则需参考评估报告进行软件适配。评估报告参数详细说明请参考 [表8](#sheet8)、[表9](#sheet9) 和 [表10](#sheet10)。 **图 12** 收集与评估 ![收集与评估](figures/collect.png "收集与评估") @@ -659,14 +659,14 @@ 依赖包兼容性 -

        显示软件安装所需要的直接依赖以及依赖文件在各个系统上对应的rpm包。

        +

        显示软件安装所需要的直接依赖以及依赖文件在各个系统上对应的 rpm 包。

          -
        • 若查询到的直接依赖的rpm的名字和版本都一样,会显示 版本未变更
        • -
        • 若查询到的直接依赖的rpm的版本不一样,但接口无差异,会显示 版本有变更
        • -
        • 若查询到的直接依赖的rpm的包名发生变化,但接口无差异,会显示 包名有变更
        • -
        • 若源操作系统查到rpm,目标操作系统没有查到,会显示 缺失
        • -
        • 若源操作系统没有查到rpm,目标操作系统有查到,或者所在包有接口变化则会显示, 需要检查
        • -
        • 若源操作系统和目标操作系统都没有查到rpm,则会放到 other 里边,并显示 需要检查
        • +
        • 若查询到的直接依赖的 rpm 的名字和版本都一样,会显示 版本未变更
        • +
        • 若查询到的直接依赖的 rpm 的版本不一样,但接口无差异,会显示 版本有变更
        • +
        • 若查询到的直接依赖的 rpm的包名发生变化,但接口无差异,会显示 包名有变更
        • +
        • 若源操作系统查到 rpm,目标操作系统没有查到,会显示 缺失
        • +
        • 若源操作系统没有查到 rpm,目标操作系统有查到,或者所在包有接口变化,则会显示 需要检查
        • +
        • 若源操作系统和目标操作系统都没有查到 rpm,则会放到 other 里边,并显示 需要检查
        @@ -685,7 +685,7 @@
      • 操作系统:表示迁移评估的系统名称。
      • 函数名:接口表示。
      • 文件名:表示外部接口所在的文件名。
      • -
      • 依赖包:表示接口所在的外部so库。
      • +
      • 依赖包:表示接口所在的外部 so 库。
      • 接口差异项:表示外部接口的变化差异,如果是已移除接口,则此项为空。
      @@ -695,14 +695,14 @@ 接口兼容性(JDK) -

      表示扫描Jar包中调用的jdk接口在待迁移的系统上对应满足运行条件的最小jdk上发生的变更。

      +

      表示扫描Jar包中调用的 jdk 接口在待迁移的系统上对应满足运行条件的最小 jdk 上发生的变更。

        -
      • openEuler jdk:openEuler上满足Jar包运行环境的最小jdk版本。
      • -
      • 对象构建jdk:扫描jar包对应构建的jdk版本。
      • -
      • jar包名:扫描的jar包名称。
      • +
      • openEuler jdk:openEuler 上满足 Jar 包运行环境的最小 jdk 版本。
      • +
      • 对象构建 jdk:扫描 jar 包对应构建的jdk版本。
      • +
      • jar 包名:扫描的 jar 包名称。
      • 方法名:存在接口差异的方法名。
      • 函数调用签名:存在接口差异的方法函数签名。
      • -
      • 包名:存在接口差异的方法所在的包(packageName+className)。
      • +
      • 包名:存在接口差异的方法所在的包(packageName + className)。
      • 差异项:接口差异选项。
      @@ -710,16 +710,16 @@ 接口兼容性(Java) -

      Jar接口差异主要描述了当前jar包接口在待迁移的系统上发生的变更。

      +

      Jar 接口差异主要描述了当前 jar 包接口在待迁移的系统上发生的变更。

        -
      • 调用的jar包:表示当前被调用的jar包名称。
      • -
      • 所属的rpm包:表示当前的jar包所属的rpm包。
      • +
      • 调用的 jar 包:表示当前被调用的 jar 包名称。
      • +
      • 所属的 rpm 包:表示当前的 jar 包所属的 rpm 包。
      • 展开的详细信息中:
          -
        • centos7.6 Methods:表示CentOS 7.6上不兼容的接口名称。
        • -
        • package:表示不兼容的接口所属的jar包。
        • +
        • centos7.6 Methods:表示 CentOS 7.6 上不兼容的接口名称。
        • +
        • package:表示不兼容的接口所属的 jar 包。
        • class:表示不兼容的接口所属的类。
        • -
        • openEuler20.03-LTS-SP1 Change:表示不兼容的接口在openEuler20.03-LTS-SP1上发生的变更,这部分变更描述包含了方法的移除,方法返回参数、方法签名、方法修饰、异常等变更。
        • +
        • openEuler20.03-LTS-SP1 Change:表示不兼容的接口在 openEuler20.03-LTS-SP1 上发生的变更,这部分变更描述包含了方法的移除,方法返回参数、方法签名、方法修饰、异常等变更。
      @@ -736,17 +736,17 @@ 评估结果 - 显示评估环境中的系统、基本系统、CPU以及整机兼容性信息。 + 显示评估环境中的系统、基本系统、CPU 以及整机兼容性信息。 - 板卡在openEuler 20.03 LTS SP1 兼容性清单 + 板卡在 openEuler 20.03 LTS SP1 兼容性清单

      板卡兼容必须满足兼容性清单中参数与已有板卡清单列表中的信息都保持一致才算兼容。若对比字段信息不完全一致,则属于待确认板卡。

        -
      • 芯片厂商ID
      • -
      • 设备ID
      • -
      • 二级厂商制造ID
      • -
      • 二级设备ID
      • +
      • 芯片厂商 ID
      • +
      • 设备 ID
      • +
      • 二级厂商制造 ID
      • +
      • 二级设备 ID
      • 芯片型号
      • 是否在兼容性清单:确认该硬件是否兼容目标操作系统
      • 风险级别:对硬件兼容性影响升级的风险进行等级评估
      • @@ -779,8 +779,8 @@ 升级至目标操作系统后的同时升级的软件包信息。 - 升级到openEuler拓展仓库包 - 升级至openEuler操作系统后拓展的软件包信息。 + 升级到 openEuler 拓展仓库包 + 升级至 openEuler 操作系统后拓展的软件包信息。 源操作系统删除的软件包 @@ -801,7 +801,7 @@ ##### 前提条件 -已成功登录x2openEuler工具。 +已成功登录 x2openEuler 工具。 ##### 操作步骤 @@ -820,18 +820,18 @@ > ![说明](public_sys-resources/icon-note.gif) **说明:** > 批量导入节点过程中,工具会对导入的节点信息进行校验,若校验不通过则需按照提示修改导入信息,并重新进行批量导入操作。 - 1. 在批量导入界面中,单击“模板表格”获取模板后参考[表11](#sheet11)填写节点信息。 + 1. 在批量导入界面中,单击“模板表格”获取模板后参考 [表11](#sheet11) 填写节点信息。 **图 13** 批量导入 ![批量导入](figures/batchimport.png "批量导入") - 2. 完成节点信息的填写后单击“上传文件”阅读“SSH传输须知”,选择已填写节点信息的批量导入文件进行上传。 + 2. 完成节点信息的填写后单击“上传文件”阅读 “SSH 传输须知”,选择已填写节点信息的批量导入文件进行上传。 - **图 14** SSH传输须知 - ![SSH传输须知](figures/sshnote.png "SSH传输须知-4") + **图 14** SSH 传输须知 + ![SSH 传输须知](figures/sshnote.png "SSH 传输须知-4") - 添加节点:添加单个节点的节点信息。 - 1. 在“添加节点”页面,参考[表11](#sheet11)输入相应信息后,单击“确定”进行节点添加。 + 1. 在“添加节点”页面,参考 [表11](#sheet11) 输入相应信息后,单击“确定”进行节点添加。 **图 15** 添加节点 ![添加节点](figures/addnode.png "添加节点") @@ -844,14 +844,14 @@ 说明 - SSH传输须知 - 节点管理使用服务器默认的SSH传输通道,为了保护数据的安全完整,建议使用安全的ssh服务,如使用安全的ssh版本,配置使用安全的加密算法等。 + SSH 传输须知 + 节点管理使用服务器默认的 SSH 传输通道,为了保护数据的安全完整,建议使用安全的 ssh 服务,如使用安全的 ssh 版本,配置使用安全的加密算法等。 - 源节点IP地址 - 源节点IP地址。
        + 源节点 IP 地址 + 源节点 IP 地址。
        说明:
        - 源节点与部署openEuler web工具的环境需要保持可联通状态。 + 源节点与部署 openEuler web 工具的环境需要保持可联通状态。 源节点别名 @@ -859,7 +859,7 @@ 源端口 - 登录源节点的SSH协议端口。 + 登录源节点的 SSH 协议端口。 源用户名 @@ -867,7 +867,7 @@ 源端口 - 登录源节点的SSH协议端口。 + 登录源节点的 SSH 协议端口。 认证方式 @@ -876,11 +876,11 @@
        • 私钥文件:登录源节点私钥文件的绝对路径。
        • 密码短语:登录源节点私钥文件的密码短语。 - 配置秘钥认证方式请参考配置生成秘钥
          + 配置秘钥认证方式请参考 配置生成秘钥
          说明:
            -
          • 若登录用户为普通用户,需要输入root用户口令切换到root用户进行具体操作。
          • -
          • 由于root用户拥有最高权限,直接使用root用户登录服务器可能会存在安全风险。您可以通过配置禁止root用户SSH登录的选项,来提升系统安全性。具体配置如下:先以普通用户登录服务器,切换至root登录后检查/etc/ssh/sshd_config配置项PermitRootlogin,如果显示no,说明禁止了root用户登录;如果显示yes,则需要将配置项PermitRootlogin设置为no。配置完成后需要重启sshd服务确保配置生效。
          • +
          • 若登录用户为普通用户,需要输入 root 用户口令切换到 root 用户进行具体操作。
          • +
          • 由于 root 用户拥有最高权限,直接使用 root 用户登录服务器可能会存在安全风险。您可以通过配置禁止 root 用户 SSH 登录的选项,来提升系统安全性。具体配置如下:先以普通用户登录服务器,切换至 root 登录后检查 /etc/ssh/sshd_config 配置项 PermitRootlogin,如果显示 no,说明禁止了 root 用户登录;如果显示 yes,则需要将配置项 PermitRootlogin 设置为 no。配置完成后需要重启 sshd 服务确保配置生效。
          • 配置的节点信息中涉及用户密码输入,请注意定期维护帐户信息,确保环境安全。
        • @@ -893,23 +893,23 @@

          口令:登录源节点的密码口令。

          说明:
            -
          • 若登录用户为普通用户,需要输入root用户口令切换到root用户进行具体操作。
          • -
          • 由于root用户拥有最高权限,直接使用root用户登录服务器可能会存在安全风险。您可以通过配置禁止root用户SSH登录的选项,来提升系统安全性。具体配置如下:先以普通用户登录服务器,切换至root登录后检查/etc/ssh/sshd_config配置项PermitRootlogin,如果显示no,说明禁止了root用户登录;如果显示yes,则需要将配置项PermitRootlogin设置为no。配置完成后需要重启sshd服务确保配置生效。
          • +
          • 若登录用户为普通用户,需要输入 root 用户口令切换到 root 用户进行具体操作。
          • +
          • 由于 root 用户拥有最高权限,直接使用 root 用户登录服务器可能会存在安全风险。您可以通过配置禁止 root 用户 SSH 登录的选项,来提升系统安全性。具体配置如下:先以普通用户登录服务器,切换至 root 登录后检查 /etc/ssh/sshd_config 配置项 PermitRootlogin,如果显示 no,说明禁止了 root 用户登录;如果显示 yes,则需要将配置项 PermitRootlogin 设置为 no。配置完成后需要重启 sshd 服务确保配置生效。
          源操作系统版本 - 待迁移节点的操作系统,默认为CentOS 7.6,可通过上传操作系统数据库支持包支持更多操作系统。 + 待迁移节点的操作系统,默认为 CentOS 7.6,可通过 上传操作系统数据库支持包 支持更多操作系统。 - 目标节点IP -

          目标节点IP地址。

          - 说明:
          目标节点与部署openEuler web工具的环境需要保持可联通状态。 + 目标节点 IP +

          目标节点 IP 地址。

          + 说明:
          目标节点与部署 openEuler web 工具的环境需要保持可联通状态。 目标端口 - 登录至目标节点的SSH协议端口。 + 登录至目标节点的 SSH 协议端口。 目标用户名 @@ -921,7 +921,7 @@
          • 私钥文件:登录待升级节点私钥文件的绝对路径。
          • -
          • 密码短语:登录待升级节点私钥文件的密码短语。配置秘钥认证方式请参考配置生成秘钥
          • +
          • 密码短语:登录待升级节点私钥文件的密码短语。配置秘钥认证方式请参考 配置生成秘钥
          @@ -929,14 +929,14 @@ 口令认证:通过口令进行认证。
          口令:登录待升级节点的密码口令。
          说明:
            -
          • 若登录用户为普通用户,需要输入root用户口令切换到root用户进行具体操作,由于root用户拥有最高权限,直接使用root用户登录服务器可能会存在安全风险。您可以通过配置禁止root用户SSH登录的选项,来提升系统安全性。具体配置如下:先以普通用户登录服务器,切换至root登录后检查/etc/ssh/sshd_config配置项PermitRootlogin,如果显示no,说明禁止了root用户登录;如果显示yes,则需要将配置项PermitRootlogin设置为no。配置完成后需要重启sshd服务确保配置生效。
          • +
          • 若登录用户为普通用户,需要输入 root 用户口令切换到 root 用户进行具体操作,由于 root 用户拥有最高权限,直接使用 root 用户登录服务器可能会存在安全风险。您可以通过配置禁止 root 用户 SSH 登录的选项,来提升系统安全性。具体配置如下:先以普通用户登录服务器,切换至 root 登录后检查 /etc/ssh/sshd_config 配置项 PermitRootlogin,如果显示 no,说明禁止了 root 用户登录;如果显示 yes,则需要将配置项 PermitRootlogin 设置为 no。配置完成后需要重启 sshd 服务确保配置生效。
          • 配置的节点信息中涉及用户密码输入,请注意定期维护帐户信息,确保环境安全。
          目标操作系统版本 - 待迁移节点进行升级的目标操作系统,默认为openEuler 20.03-LTS-SP1,可通过上传操作系统支持包支持更多操作系统。 + 待迁移节点进行升级的目标操作系统,默认为 openEuler 20.03-LTS-SP1,可通过 上传操作系统支持包 支持更多操作系统。 3. 此处以添加单个节点进行指纹验证为例,工具对导入的节点信息校验完成后,进入节点指纹验证页面,确认节点指纹无误后,单击“确定”。 @@ -953,7 +953,7 @@ ##### 前提条件 -- 已登录x2openEuler工具。 +- 已登录 x2openEuler 工具。 - 已创建配置迁移任务。 ##### 操作步骤 @@ -961,18 +961,18 @@ 1. 在页面“全部任务”下选择已创建的配置迁移任务,单击右侧“进入任务”,进入任务详情页面。 2. 单击节点信息右侧的“开始检查”,可对单个节点进行分析配置迁移。同时勾选多个节点,单击左上角“批量操作→开始检查”,可对多个节点启动分析配置迁移。 - 配置分析迁移过程分为4个阶段,其中任意阶段失败都会导致后续任务执行过程终止。 + 配置分析迁移过程分为 4 个阶段,其中任意阶段失败都会导致后续任务执行过程终止。 1. 环境检查 - 环境检查用于分析x2openEuler工具与源目节点的连通性,验证环境信息是否正常,若环境检查无法通过,则需修改节点配置信息。 + 环境检查用于分析 x2openEuler 工具与源目节点的连通性,验证环境信息是否正常,若环境检查无法通过,则需修改节点配置信息。 **图 18** 环境检查页面 ![环境检查页面](figures/envcheck-1.png "环境检查页面-6") 2. 配置分析 - 针对源节点进行配置分析,产生配置分析报告,确认源节点可以进行迁移配置信息。配置分析报告参数详细说明请参考[表12](#sheet12)。 + 针对源节点进行配置分析,产生配置分析报告,确认源节点可以进行迁移配置信息。配置分析报告参数详细说明请参考 [表12](#sheet12)。 **图 19** 配置分析 ![配置分析](figures/configinfoanalysisi.png "配置分析") @@ -1021,7 +1021,7 @@ > ![说明](public_sys-resources/icon-note.gif) **说明:** > > 升级完成后,需进行业务运行验证,若业务运行正常,即可进行环境清理,以释放占用空间。 - > 环境清理将清理备份文件并卸载x2openEuler-client软件。 + > 环境清理将清理备份文件并卸载 x2openEuler-client 软件。 > 3. 配置迁移完成后,请在目标节点上进行业务测试,以确认业务运行正常,如需进行回退操作,可进入节点详情页面,单击右下角“回退”。 @@ -1031,12 +1031,12 @@ #### 前提条件 -已安装x2openEuler工具 +已安装 x2openEuler 工具 #### 操作步骤 1. 单击页面左侧“新建任务”,在下拉菜单中选择“软件包评估”。在弹出框“新建软件评估任务”界面中输入任务名称,单击确定进入评估任务界面。 -2. 单击左上角“选择软件包”,进入如[图 21](#figure21)所示界面,参考[表 13](#sheet13)上传需要评估的软件包。 +2. 单击左上角“选择软件包”,进入如 [图 21](#figure21) 所示界面,参考 [表 13](#sheet13) 上传需要评估的软件包。 **图 21** 选择软件包 ![选择软件包](figures/uploadpackage.png "选择软件包") @@ -1050,20 +1050,20 @@ 扫描方式 - 上传软件包:支持上传多个软件包,支持elf/python/jar/shell/spec等类型的软件包。 + 上传软件包:支持上传多个软件包,支持 elf / python / jar / shell / spec 等类型的软件包。 -

          扫描路径:扫描x2openEuler安装节点上已存在的软件包。

          +

          扫描路径:扫描 x2openEuler 安装节点上已存在的软件包。

          说明:
          - 仅支持扫描“/opt/x2openEuler/scan”路径下的文件。 + 仅支持扫描 /opt/x2openEuler/scan 路径下的文件。 源操作系统 - 待升级节点的操作系统,默认为CentOS 7.6,可通过上传操作系统数据库支持包支持更多操作系统。 + 待升级节点的操作系统,默认为 CentOS 7.6,可通过上传操作系统数据库支持包支持更多操作系统。 目标操作系统 - 升级节点进行升级的目标操作系统,默认为openEuler 20.03-LTS-SP1,可通过上传操作系统支持包支持更多操作系统。 + 升级节点进行升级的目标操作系统,默认为 openEuler 20.03-LTS-SP1,可通过上传操作系统支持包支持更多操作系统。 系统架构 @@ -1075,7 +1075,7 @@ -3. 单击“确定“,执行软件评估任务。评估完成后,工具将自动跳转至分析结果界面,分析结果分为软件依赖关系图和软件评估报告,如[图22](#figure22)所示,软件评估报告详细参数描述如[表14](#sheet14)所示。 +3. 单击“确定“,执行软件评估任务。评估完成后,工具将自动跳转至分析结果界面,分析结果分为软件依赖关系图和软件评估报告,如 [图22](#figure22) 所示,软件评估报告详细参数描述如 [表14](#sheet14) 所示。 > ![说明](public_sys-resources/icon-note.gif) **说明:** > @@ -1103,14 +1103,14 @@ 依赖包兼容性 - 显示软件安装所需要的直接依赖以及依赖文件在各个系统上对应的rpm包。 + 显示软件安装所需要的直接依赖以及依赖文件在各个系统上对应的 rpm 包。
            -
          • 若查询到的直接依赖的rpm的名字和版本都一样,会显示 版本未变更
          • -
          • 若查询到的直接依赖的rpm的版本不一样,但接口无差异,会显示 版本有变更
          • -
          • 若查询到的直接依赖的rpm的包名发生变化,但接口无差异,会显示 包名有变更
          • -
          • 若源操作系统查到rpm,目标操作系统没有查到,会显示 缺失
          • -
          • 若源操作系统没有查到rpm,目标操作系统有查到,或者所在包有接口变化则会显示, 需要检查
          • -
          • 若源操作系统和目标操作系统都没有查到rpm,则会放到 other 里边,并显示 需要检查
          • +
          • 若查询到的直接依赖的 rpm 的名字和版本都一样,会显示 版本未变更
          • +
          • 若查询到的直接依赖的 rpm 的版本不一样,但接口无差异,会显示 版本有变更
          • +
          • 若查询到的直接依赖的 rpm 的包名发生变化,但接口无差异,会显示 包名有变更
          • +
          • 若源操作系统查到 rpm,目标操作系统没有查到,会显示 缺失
          • +
          • 若源操作系统没有查到 rpm,目标操作系统有查到,或者所在包有接口变化,则会显示 需要检查
          • +
          • 若源操作系统和目标操作系统都没有查到 rpm,则会放到 other 里边,并显示 需要检查
          @@ -1131,7 +1131,7 @@
        • 操作系统:表示迁移评估的系统名称。
        • 函数名:接口表示。
        • 文件名:表示外部接口所在的文件名。
        • -
        • 依赖包:表示接口所在的外部so库。
        • +
        • 依赖包:表示接口所在的外部 so 库。
        • 接口差异项:表示外部接口的变化差异,如果是已移除接口,则此项为空。
        @@ -1141,14 +1141,14 @@ 接口兼容性(JDK) -

        表示扫描Jar包中调用的jdk接口在待迁移的系统上对应满足运行条件的最小jdk上发生的变更。

        +

        表示扫描 Jar 包中调用的 jdk 接口在待迁移的系统上对应满足运行条件的最小 jdk 上发生的变更。

          -
        • openEuler jdk:openEuler上满足Jar包运行环境的最小jdk版本。
        • -
        • 对象构建jdk:扫描jar包对应构建的jdk版本。
        • -
        • jar包名:扫描的jar包名称。
        • +
        • openEuler jdk:openEuler 上满足 Jar 包运行环境的最小jdk版本。
        • +
        • 对象构建 jdk:扫描 jar 包对应构建的 jdk 版本。
        • +
        • jar 包名:扫描的 jar 包名称。
        • 方法名:存在接口差异的方法名。
        • 函数调用签名:存在接口差异的方法函数签名。
        • -
        • 包名:存在接口差异的方法所在的包(packageName+className)。
        • +
        • 包名:存在接口差异的方法所在的包(packageName + className)。
        • 差异项:接口差异选项。
        @@ -1156,28 +1156,26 @@ 接口兼容性(Java) -

        Jar接口差异主要描述了当前jar包接口在待迁移的系统上发生的变更。

        +

        Jar 接口差异主要描述了当前 jar 包接口在待迁移的系统上发生的变更。

          -
        • 调用的jar包:表示当前被调用的jar包名称。
        • -
        • 所属的rpm包:表示当前的jar包所属的rpm包。
        • +
        • 调用的 jar 包:表示当前被调用的 jar 包名称。
        • +
        • 所属的 rpm 包:表示当前的 jar 包所属的 rpm 包。
        • 展开的详细信息中:
            -
          • centos7.6 Methods:表示CentOS 7.6上不兼容的接口名称。
          • -
          • package:表示不兼容的接口所属的jar包。
          • +
          • centos7.6 Methods:表示 CentOS 7.6上 不兼容的接口名称。
          • +
          • package:表示不兼容的接口所属的 jar 包。
          • class:表示不兼容的接口所属的类。
          • -
          • openEuler20.03-LTS-SP1 Change:表示不兼容的接口在openEuler20.03-LTS-SP1上发生的变更,这部分变更描述包含了方法的移除,方法返回参数、方法签名、方法修饰、异常等变更。
          • +
          • openEuler20.03-LTS-SP1 Change:表示不兼容的接口在 openEuler20.03-LTS-SP1 上发生的变更,这部分变更描述包含了方法的移除,方法返回参数、方法签名、方法修饰、异常等变更。
        -4. 单击右下角“下载环境信息和日志”获取环境信息和日志文件,单击“导出HTML报告”导出当前评估任务的分析结果。 - -## 升级后回退 +4. 单击右下角“下载环境信息和日志”获取环境信息和日志文件,单击“导出 HTML 报告”导出当前评估任务的分析结果。 -### 升级后回退 +## 升级后回退 #### 前提条件 待升级节点已经完成升级。 @@ -1198,7 +1196,7 @@ ![回退过程](figures/rollback.png "回退过程") 2. (可选)检查回退一致性,重启系统后需要手动执行收集系统信息和系统信息对比的命令。 - 1. 收集回滚后系统信息请参考[4](#collectinfo)。 + 1. 收集回滚后系统信息请参考 [4](#collectinfo)。 2. 执行以下命令进行回滚后系统信息对比。 ```sh @@ -1208,20 +1206,21 @@ **图 34** 回滚后系统信息对比 ![回滚后信息对比](figures/rollbackcheck.png "回滚后系统信息对比") + ## 通过命令行使用x2openEuler工具 ### 环境准备 -下面以`CentOS 7.9 x86_64`系统为例,介绍如何将其升级为`openEuler 24.03-LTS`。 +下面以 `CentOS 7.9 x86_64` 系统为例,介绍如何将其升级为 `openEuler 24.03-LTS`。 1. 安装 x2openEuler 工具 - 获取并上传`x2openEuler-upgrade` RPM 包至待升级的机器。 + 获取并上传 `x2openEuler-upgrade` RPM 包至待升级的机器。 > ![说明](public_sys-resources/icon-note.gif) **说明:** - > 如果机器运行的是`CentOS 6.x`或`SuSE 11`,请下载`x2openEuler-upgrade-for6`,其余系统使用`x2openEuler-upgrade`。 + > 如果机器运行的是 `CentOS 6.x` 或 `SuSE 11`,请下载 `x2openEuler-upgrade-for6`,其余系统使用 `x2openEuler-upgrade`。 - 确保当前系统的`yum`源可用,然后安装软件包: + 确保当前系统的 `yum` 源可用,然后安装软件包: ```sh yum install -y x2openEuler-upgrade-*.rpm @@ -1241,7 +1240,7 @@ > 2024-10-23 16:43:37,373 - USER_ID:0 - INFO - Collect Success! The Archive file results are saved: /opt/x2openEuler-client/output/collect/collect-\.tar.gz - 保存输出中的`uuid`,该信息将在后续操作中使用。本文的示例中,`uuid`为:`d8cf5ae2-911a-11ef-a25b-00155d306854`。 + 保存输出中的 `uuid`,该信息将在后续操作中使用。本文的示例中,`uuid` 为:`d8cf5ae2-911a-11ef-a25b-00155d306854`。 ### 软件兼容性检查 diff --git a/docs/zh/docs/x2openEuler/InstallationGuide.md b/docs/zh/docs/x2openEuler/InstallationGuide.md index 3195ba035..9dfbf3115 100644 --- a/docs/zh/docs/x2openEuler/InstallationGuide.md +++ b/docs/zh/docs/x2openEuler/InstallationGuide.md @@ -3,7 +3,7 @@ ##### 操作系统要求 - x2openEuler web工具部署要求如[表1](#sheet1)所示。 - **表 1** 操作系统要求 + **表 1** 操作系统要求 -- Gitee From d144db369fbb356d7c97fe20fc5904843ed3c248 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=B4=E5=9F=BA=E9=B1=BC?= Date: Wed, 20 Nov 2024 19:10:37 +0800 Subject: [PATCH 11/16] =?UTF-8?q?docs:=20x2=E6=96=87=E6=A1=A3=E6=9B=B4?= =?UTF-8?q?=E6=96=B0,=E5=B8=B8=E7=94=A8=E6=93=8D=E4=BD=9C,=E4=BF=AE?= =?UTF-8?q?=E6=94=B9repo=E3=80=81=E7=A9=BA=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/docs/x2openEuler/CommonOperation.md | 551 ++++++++---------- .../docs/x2openEuler/figures/chooserepo.png | Bin 20794 -> 66558 bytes 2 files changed, 228 insertions(+), 323 deletions(-) diff --git a/docs/zh/docs/x2openEuler/CommonOperation.md b/docs/zh/docs/x2openEuler/CommonOperation.md index 70f246065..2904000ab 100644 --- a/docs/zh/docs/x2openEuler/CommonOperation.md +++ b/docs/zh/docs/x2openEuler/CommonOperation.md @@ -1,70 +1,70 @@ # 常用操作 -## 配置repo源 +## 配置 repo 源 ### 前提条件 -- 已登录x2openEuler工具 +- 已登录 x2openEuler 工具 - 创建升级、信息收集分析或配置迁移任务 ### 操作步骤 -1. 在工具创建任务时,单击“添加节点”,下拉至“repo源名称”选项。单击右侧“选择”,进入选择repo源界面,如[图1](#figure1)。 +1. 在工具创建任务时,单击“添加节点”,下拉至 “repo 源名称”选项。单击右侧“选择”,进入选择 repo 源界面,如 [图1](#figure1)。 > ![](public_sys-resources/icon-note.gif) **说明:** - > 工具默认提供openEuler 20.03-LTS-SP1操作系统的aarch和x86\_64源。 + > 工具默认提供 openEuler 22.03-LTS-SP4 操作系统的 aarch 和 x86\_64 源。建议使用镜像网站的 repo 源,以提高下载速率。 - **图 1** 选择repo源 - ![](figures/chooserepo.png "选择repo源") + **图 1** 选择 repo 源 + ![](figures/chooserepo.png "选择 repo 源") -2. 在左侧“repo源名称”列表中,选择相应repo源,单击“确定”即完成repo源选择。 -3. (可选)repo源管理。 +2. 在左侧 “repo 源名称”列表中,选择相应 repo 源,单击“确定”即完成 repo 源选择。 +3. (可选)repo 源管理。 > ![](public_sys-resources/icon-notice.gif) **须知:** > - > - 请务必添加工具已支持的目标操作系统repo源,否则会导致升级出现异常,添加的repo源中最少需要包含everything和update。 - > - 修改repo源可能会导致使用该repo源的其他节点无法正常运行,请谨慎操作。 - > - 删除repo源可能会导致使用该repo源的其他节点无法正常运行,请谨慎操作。 + > - 请务必添加工具已支持的目标操作系统 repo 源,否则会导致升级出现异常,添加的 repo 源中最少需要包含everything 和 update。 + > - 修改 repo 源可能会导致使用该 repo 源的其他节点无法正常运行,请谨慎操作。 + > - 删除 repo 源可能会导致使用该 repo 源的其他节点无法正常运行,请谨慎操作。 - - 添加repo源 + - 添加 repo 源 - 单击右上角“添加repo源”进入repo源配置界面参考默认repo源进行配置,repo源名称后缀为“.repo”,配置完成后单击“保存”即可完成repo源添加。 + 单击右上角“添加 repo 源”进入 repo 源配置界面参考默认 repo 源进行配置,repo 源名称后缀为 “.repo”,配置完成后单击“保存”即可完成 repo 源添加。 - - 修改repo源 + - 修改 repo 源 - 在左侧repo源列表中选择需要进行修改的repo源,单击![](figures/icons/edit.png)对repo源进行修改。 + 在左侧 repo 源列表中选择需要进行修改的 repo 源,单击![](figures/icons/edit.png)对 repo 源进行修改。 - - 删除repo源 + - 删除 repo 源 - 在左侧repo源列表中选择需要删除的repo源,单击![](figures/icons/delete_1.png)删除repo源。 + 在左侧 repo 源列表中选择需要删除的 repo 源,单击![](figures/icons/delete_1.png)删除 repo 源。 -## (可选)为x2openEuler工具导入根证书 +## (可选)为 x2openEuler 工具导入根证书 -使用浏览器登录x2openEuler工具时,若弹出安全告警提示,可以在浏览器中为x2openEuler工具导入根证书来屏蔽此安全告警提示。 +使用浏览器登录 x2openEuler 工具时,若弹出安全告警提示,可以在浏览器中为 x2openEuler 工具导入根证书来屏蔽此安全告警提示。 -本指南以Chrome 105.0为例介绍为x2openEuler工具导入根证书的操作步骤。 +本指南以 Chrome 105.0 为例介绍为 x2openEuler 工具导入根证书的操作步骤。 -1. 登录x2openEuler工具,在页面右上方选择“![](figures/zh-cn_image_0000001524877116.png) \> web服务端证书”,单击“下载根证书“下载根证书。 +1. 登录x2openEuler工具,在页面右上方选择“![](figures/icons/settings.png) \> web 服务端证书”,单击“下载根证书“下载根证书。 2. 打开浏览器,依次选择“设置 \> 隐私设置和安全性 \> 安全\>管理证书”。 -3. 在弹出“证书”的对话框中,选择“受信任的根证书颁发机构”页签,单击“导入”,如[图2](#figure2)所示。 +3. 在弹出“证书”的对话框中,选择“受信任的根证书颁发机构”页签,单击“导入”,如 [图2](#figure2) 所示。 **图 2** 证书 ![](figures/cert.png "证书") -4. 在弹出的“证书导入向导”对话框中,单击“下一步”,如[图3](#figure3)所示。 +4. 在弹出的“证书导入向导”对话框中,单击“下一步”,如 [图3](#figure3) 所示。 **图 3** 证书导入向导欢迎页面 ![](figures/certpage.png "证书导入向导欢迎页面") -5. 进入选择证书页面,单击“浏览”,如[图4](#figure4)所示。 +5. 进入选择证书页面,单击“浏览”,如 [图4](#figure4) 所示。 **图 4** 导入证书文件 ![](figures/importcertfile.png "导入证书文件") -6. 从本地PC路径中选择待导入的证书。 +6. 从本地 PC 路径中选择待导入的证书。 7. 单击“下一步”。 - 进入选择证书存储位置页面,选择如[图5](#figure5)中的存放位置。 + 进入选择证书存储位置页面,选择如 [图5](#figure5) 中的存放位置。 **图 5** 选择证书存储位置 ![](figures/savecert.png "选择证书存储位置") @@ -78,34 +78,34 @@ 弹出“导入成功”提示框,则表示成功导入证书。 10. 单击“确定”完成证书导入。 -11. 由于颁发的证书是针对工具的名称,需要修改本地的Hosts映射。 - 1. 在“C:\\Windows\\System32\\drivers\\etc”路径下,打开“hosts”文件。 +11. 由于颁发的证书是针对工具的名称,需要修改本地的 Hosts 映射。 + 1. 在 C:\\Windows\\System32\\drivers\\etc 路径下,打开 hosts 文件。 **图 6** hosts文件 ![](figures/hostsfile.png "hosts文件") - 2. 在“hosts”文件中增加如下内容后保存并退出。 + 2. 在 hosts 文件中增加如下内容后保存并退出。 - _服务器IP地址_ x2openEuler + _服务器 IP 地址_ x2openEuler 例如:10.254.206.190 x2openEuler -12. 打开本地PC机的浏览器,在地址栏输入**: _端口号_**(例如: +12. 打开本地 PC 机的浏览器,在地址栏输入**: _端口号_**(例如: -## SSH配置 +## SSH 配置 -修改工具中的SSH配置文件,实现对SSH的超时配置。 +修改工具中的 SSH 配置文件,实现对 SSH 的超时配置。 -1. 登录x2openEuler工具部署节点,执行以下命令,进入相应路径后修改“conf.ini”文件。 +1. 登录 x2openEuler 工具部署节点,执行以下命令,进入相应路径后修改 conf.ini 文件。 ```sh cd /usr/local/x2openEuler/portal/src/ vi conf.ini ``` -2. 参考[表 1](#sheet1)根据需要修改配置文件中的部分内容。 +2. 参考 [表 1](#sheet1) 根据需要修改配置文件中的部分内容。 - **表 1** SSH参数说明 + **表 1** SSH 参数说明
        @@ -114,44 +114,44 @@ - + - + - + - +
        long_cmd_timeout长命令执行超时时间,比如获取节点日志的命令,默认值为600。长命令执行超时时间,比如获取节点日志的命令,默认值为 600。
        tail_line_number获取节点日志时,tail追踪的日志行数,默认值为100。获取节点日志时,tail 追踪的日志行数,默认值为 100。
        hostname_length主机名的长度,用于动态配置命令回显一行的长度,默认值为100。主机名的长度,用于动态配置命令回显一行的长度,默认值为 100。
        cmd_timeout短命令执行超时时间,比如whoami命令,默认值为10。短命令执行超时时间,比如 whoami 命令,默认值为 10。
        3. 按“ESC”,输入“:wq”,按“Enter”保存并退出。 -4. 执行以下命令重启SSH服务以生效配置。 +4. 执行以下命令重启 SSH 服务以生效配置。 ``` systemctl restart sshd.service ``` -## 关闭SELinux +## 关闭 SELinux -若存在环境节点需要关闭SElinux强制模式,执行以下操作。 +若存在环境节点需要关闭 SElinux 强制模式,执行以下操作。 - **临时关闭** - 1. 执行以下命令查询SELinux状态。 + 1. 执行以下命令查询 SELinux 状态。 ```sh sestatus ``` - “Current mode“显示“enforcing“表示SELinux已开启强制模式。 + Current mode 显示 enforcing 表示SELinux已开启强制模式。 - 2. 执行如下命令将SELinux模式设置为“permissive“。 + 2. 执行如下命令将 SELinux 模式设置为 permissive。 ```sh setenforce 0 @@ -159,27 +159,27 @@ 3. 再次查询SELinux状态。 - “Current mode“显示“permissive“表示SELinux已临时关闭强制模式。 + Current mode 显示 permissive 表示 SELinux 已临时关闭强制模式。 > ![](public_sys-resources/icon-notice.gif) **须知:** > 服务器重启后失效,工具使用过程中可能会出现服务异常。 - **永久关闭** - 1. 执行以下命令查询SELinux状态。 + 1. 执行以下命令查询 SELinux 状态。 ```sh sestatus ``` - “SELinux status“显示“enabled“表示SELinux已开启。 + SELinux status 显示 enabled 表示 SELinux 已开启。 - 2. 执行如下命令修改“/etc/selinux/config“文件。 + 2. 执行如下命令修改 /etc/selinux/config 文件。 ```sh vi /etc/selinux/config ``` - 3. 按“i”进入编辑模式,将“SELINUX=enforcing“改为“SELINUX=disabled“。 + 3. 按“i”进入编辑模式,将 SELINUX=enforcing 改为 SELINUX=disabled。 4. 按“ESC”,输入“:wq”,按“Enter”保存并退出。 5. 执行以下命令重启服务器。 @@ -187,30 +187,30 @@ reboot ``` - 6. 再次查询SELinux状态。 + 6. 再次查询 SELinux 状态。 - “SELinux status“显示“disabled“表示SELinux已关闭。 + SELinux status 显示 disabled 表示SELinux 已关闭。 -## 修改x2openEuler工具的IP和端口 +## 修改 x2openEuler 工具的 IP 和端口 ### 前提条件 -已部署x2openEuler工具 +已部署 x2openEuler 工具 ### 操作步骤 -1. 使用SSH工具远程登录x2openEuler部署环境,进入Linux操作系统命令行界面。 -2. 执行以下命令停止x2openEuler工具。 +1. 使用 SSH 工具远程登录 x2openEuler 部署环境,进入 Linux 操作系统命令行界面。 +2. 执行以下命令停止 x2openEuler 工具。 > ![](public_sys-resources/icon-note.gif) **说明:** - > 用户须停止x2openEuler工具后,才能完成后续的修改IP和端口的操作。 + > 用户须停止 x2openEuler 工具后,才能完成后续的修改 IP 和端口的操作。 ```sh systemctl stop nginx_x2openEuler.service systemctl stop gunicorn_x2openEuler.service ``` -3. 执行如下命令修改IP或端口。 +3. 执行如下命令修改 IP 或端口。 ```sh cd /usr/local/x2openEuler/portal/service/ @@ -240,23 +240,23 @@ ``` > ![](public_sys-resources/icon-note.gif) **说明:** - > 其中,x.x.x.x 和 y.y.y.y 为工具部署环境IP地址。 + > 其中,x.x.x.x 和 y.y.y.y 为工具部署环境 IP 地址。 > - > - 在执行修改IP和端口命令前,需要先进入“/usr/local/x2openEuler/portal/service”目录。 - > - 执行命令后系统会列出可用的IP地址,用户可以自行选择。 + > - 在执行修改 IP 和端口命令前,需要先进入 /usr/local/x2openEuler/portal/service 目录。 + > - 执行命令后系统会列出可用的 IP 地址,用户可以自行选择。 > - 执行命令进行修改端口时,需确认该端口未被占用,避免产生端口冲突。若工具部署环境已经开启防火墙,则需要确保开通修改后端口,若修改前端口不再被使用,则需对其做关闭处理,避免影响部署环境安全。 - > - 修改完端口后,重启工具相关服务,请参考章节[启动/停止/重启服务](#servicemanager)。 + > - 修改完端口后,重启工具相关服务,请参考章节 [启动/停止/重启服务](#servicemanager)。 -## 启动/停止/重启服务 +## 启动 / 停止 / 重启服务 ### 前提条件 -已部署x2openEuler工具 +已部署 x2openEuler 工具 ### 操作步骤 -1. 使用SSH工具远程登录x2openEuler部署环境,进入Linux操作系统命令行界面。 -2. 执行以下命令进行工具服务启动/停止/重启/查看状态操作。 +1. 使用 SSH 工具远程登录 x2openEuler 部署环境,进入 Linux 操作系统命令行界面。 +2. 执行以下命令进行工具服务启动 / 停止 / 重启 / 查看状态操作。 ```sh systemctl start/stop/restart/status nginx_x2openEuler.service @@ -274,14 +274,14 @@ - 用户登录或退出 - 上传文件 - 创建任务 -- 创建/删除用户 -- 用户锁定/解锁 +- 创建 / 删除用户 +- 用户锁定 / 解锁 - 更改用户配置 - 修改密码 -- 下载/删除报告 +- 下载 / 删除报告 - 设置最大在线用户 - 设置运行日志级别 -- 导入/替换证书 +- 导入 / 替换证书 - 设置证书过期告警阈值 - 管理弱口令字典 - 更新工作密钥 @@ -365,17 +365,15 @@ 说明: -运行日志保存在“/usr/local/x2openEuler/portal/logs/backend”目录下。 +运行日志保存在 /usr/local/x2openEuler/portal/logs/backend 目录下。 -前置脚本执行日志保存在“ /opt/x2openEuler/scripts-execute/n-x.x.x.x/pre-execute/”。 +前置脚本执行日志保存在 /opt/x2openEuler/scripts-execute/n-x.x.x.x/pre-execute/。 -(重启后)后置脚本执行日志保存在“/opt/x2openEuler/scripts-execute/n-x.x.x.x/post-execute/”。 +(重启后)后置脚本执行日志保存在 /opt/x2openEuler/scripts-execute/n-x.x.x.x/post-execute/。 -(重启前)后置脚本执行日志保存在“/opt/x2openEuler/scripts-execute/n-x.x.x.x/post-execute-before-reboot”。 +(重启前)后置脚本执行日志保存在 /opt/x2openEuler/scripts-execute/n-x.x.x.x/post-execute-before-reboot。 -其中, - -n表示待升级任务ID,x.x.x.x表示待升级节点IP地址。 +其中,n 表示待升级任务 ID,x.x.x.x 表示待升级节点 IP 地址。 @@ -383,32 +381,32 @@ n表示待升级任务ID,x.x.x.x表示待升级节点IP地址。 #### 前提条件 -已成功登录x2openEuler工具。 +已成功登录 x2openEuler 工具。 > ![](public_sys-resources/icon-note.gif) **说明:** > > - 普通用户只可查看和下载自己的操作日志,管理员可以查看所有用户的操作日志。 -> - 操作日志保存在MariaDB的x2openEuler数据库中operaitonlogmanager\_operationlog表中,日志文件为“/usr/local/x2openEuler/portal/logs/backend/operationlog\_manager.log”。 -> - 操作日志默认保存30天,工具每天凌晨1点自动检查、删除超过30天的操作日志。 +> - 操作日志保存在 MariaDB 的 x2openEuler 数据库中 operaitonlogmanager\_operationlog 表中,日志文件为 /usr/local/x2openEuler/portal/logs/backend/operationlog\_manager.log。 +> - 操作日志默认保存 30 天,工具每天凌晨 1 点自动检查、删除超过 30 天的操作日志。 #### 操作步骤 1. 在页面右上角![](figures/icons/settings.png)下拉菜单中,选择“日志“。 - 打开“日志“界面,选择“操作日志“,如[图7](#figure7)所示。 + 打开“日志“界面,选择“操作日志“,如 [图7](#figure7) 所示。 **图 7** 操作日志 ![](figures/operationlogs.png "操作日志") 2. (可选)下载操作日志。 - 单击页面上的“下载”下载csv格式日志文件。 + 单击页面上的“下载”下载 csv 格式日志文件。 ## 运行日志管理 ### 前提条件 -已成功登录x2openEuler工具。 +已成功登录 x2openEuler 工具。 > ![](public_sys-resources/icon-note.gif) **说明:** > @@ -419,7 +417,7 @@ n表示待升级任务ID,x.x.x.x表示待升级节点IP地址。 1. 在页面右上角![](figures/icons/settings.png)下拉菜单中,选择“日志“。 - 打开“日志“界面,选择“运行日志“,如[图8](#figure8)所示。 + 打开“日志“界面,选择“运行日志“,如 [图8](#figure8) 所示。 **图 8** 运行日志 ![](figures/runninglogs.png "运行日志") @@ -436,7 +434,7 @@ n表示待升级任务ID,x.x.x.x表示待升级节点IP地址。 [2020-08-20 09:50:21] [INFO] [processID:18508] [MainThread] [solution_api:get_solution_category:143] get_solution_category ``` - 日志级别用来表示日志信息的重要程度,默认为INFO。工具运行日志级别分DEBUG、INFO、WARNING、ERROR四级。 + 日志级别用来表示日志信息的重要程度,默认为 INFO。工具运行日志级别分 DEBUG、INFO、WARNING、ERROR 四级。 - DEBUG:调试级别,记录调试信息,便于开发人员或维护人员定位问题。 - INFO:信息级别,记录服务正常运行的关键信息。 @@ -449,7 +447,7 @@ n表示待升级任务ID,x.x.x.x表示待升级节点IP地址。 ### 前提条件 -已成功登录x2openEuler工具。 +已成功登录 x2openEuler 工具。 > ![](public_sys-resources/icon-note.gif) **说明:** > 只有管理员(**x2openEulerAdmin**)可以执行重置密码操作。 @@ -460,7 +458,7 @@ n表示待升级任务ID,x.x.x.x表示待升级节点IP地址。 打开用户管理界面。 -2. 单击操作栏中指定用户后的“重置密码”。打开“重置密码”界面,如[图9](#figure9)所示,需配置的参数如[表2](#sheet2)所示。 +2. 单击操作栏中指定用户后的“重置密码”。打开“重置密码”界面,如 [图9](#figure9) 所示,需配置的参数如 [表2](#sheet2) 所示。 **图 9** 重置密码 ![](figures/resetpassword.png "重置密码") @@ -485,7 +483,7 @@ n表示待升级任务ID,x.x.x.x表示待升级节点IP地址。

        输入新建用户的密码。密码需要满足如下复杂度要求:

          -
        • 密码长度为8~32个字符
        • +
        • 密码长度为 8~32 个字符
        • 必须包含大写字母、小写字母、数字、特殊字符(`~!@#$%^&*()-_=+\|[{}];:'",<.>/?)中的两种及以上类型的组合
        • 密码不能包含空格
        • 密码不能是用户名
        • @@ -499,7 +497,7 @@ n表示待升级任务ID,x.x.x.x表示待升级节点IP地址。 -3. 参考[表2](#sheet2)重置完密码后,单击“确认”。 +3. 参考 [表2](#sheet2) 重置完密码后,单击“确认”。 > ![](public_sys-resources/icon-note.gif) **说明:** > 重置密码后,被重置密码的用户如果处于登录状态将会自动退出到登录页面,需要使用重置后的密码重新登录入页面。 @@ -508,7 +506,7 @@ n表示待升级任务ID,x.x.x.x表示待升级节点IP地址。 ### 前提条件 -已成功登录x2openEuler工具。 +已成功登录 x2openEuler 工具。 > ![](public_sys-resources/icon-note.gif) **说明:** > @@ -533,16 +531,16 @@ n表示待升级任务ID,x.x.x.x表示待升级节点IP地址。 ### 前提条件 -已成功登录x2openEuler工具。 +已成功登录 x2openEuler 工具。 >![](public_sys-resources/icon-note.gif) **说明:** ->x2openEuler工具用户的密码默认有效期为90天,建议在密码有效期到达之前设置新密码。若密码已过期,则需要在登录后先进行密码修改操作。 +>x2openEuler工具用户的密码默认有效期为 90 天,建议在密码有效期到达之前设置新密码。若密码已过期,则需要在登录后先进行密码修改操作。 > ### 操作步骤 1. 在页面右上角登录用户的下拉菜单中,选择“修改密码“。 - 打开用户修改密码界面,如[图10](#figure10)所示,需配置的参数如[表3](#sheet3)所示。 + 打开用户修改密码界面,如 [图10](#figure10) 所示,需配置的参数如 [表3](#sheet3) 所示。 **图 10** 修改密码 ![](figures/changepasswd.png "修改密码") @@ -567,7 +565,7 @@ n表示待升级任务ID,x.x.x.x表示待升级节点IP地址。

          输入新密码。密码需要满足如下复杂度要求:

            -
          • 密码长度为8~32个字符
          • +
          • 密码长度为 8~32 个字符
          • 必须包含大写字母、小写字母、数字、特殊字符(`~!@#$%^&*()-_=+\|[{}];:'",<.>/?)中的两种及以上类型的组合
          • 密码不能包含空格
          • 密码不能是用户名
          • @@ -583,7 +581,7 @@ n表示待升级任务ID,x.x.x.x表示待升级节点IP地址。 -2. 参考[表3](#sheet3)修改密码后,单击“确认”。 +2. 参考 [表3](#sheet3) 修改密码后,单击“确认”。 > ![](public_sys-resources/icon-note.gif) **说明:** > 密码修改完成后,当前用户会退出到登录页面,需要使用修改后的密码重新进行登录。 @@ -594,14 +592,14 @@ n表示待升级任务ID,x.x.x.x表示待升级节点IP地址。 ### 前提条件 -已成功登录x2openEuler工具。 +已成功登录 x2openEuler 工具。 > ![](public_sys-resources/icon-note.gif) **说明:** > > - 用户可以查看和搜索弱口令。 > - 只有管理员(**x2openEulerAdmin**)可以添加和删除弱口令。 -> - 工具提供52条默认的弱口令。 -> - 最多可添加至1000条弱口令。 +> - 工具提供 52 条默认的弱口令。 +> - 最多可添加至 1000 条弱口令。 > ### 操作步骤 @@ -611,7 +609,7 @@ n表示待升级任务ID,x.x.x.x表示待升级节点IP地址。 **图 11** 添加弱口令 ![](figures/addweakpassword.png) 3. 在文本框中输入需要添加的弱口令。弱口令需要满足如下要求: - - 长度为8\~32个字符 + - 长度为 8\~32 个字符 - 至少包含以下字符中的两种: - 大写字母:A\~Z - 小写字母:a\~z @@ -623,21 +621,21 @@ n表示待升级任务ID,x.x.x.x表示待升级节点IP地址。 > ![](public_sys-resources/icon-note.gif) **说明:** > 如需删除弱口令,单击对应弱口令“操作”列的“删除”。在弹出的“删除弱口令”对话框中单击“确认”。 -## 管理web服务端证书 +## 管理 web 服务端证书 -web服务端证书用于客户端浏览器和web服务器之间的通讯,实现数据信息在客户端和web服务器之间的加密传输,可以防止数据信息的泄露。为提高安全性,建议替换成自己的证书,并及时更新证书,保证证书的有效性。 +Web 服务端证书用于客户端浏览器和 web 服务器之间的通讯,实现数据信息在客户端和 web 服务器之间的加密传输,可以防止数据信息的泄露。为提高安全性,建议替换成自己的证书,并及时更新证书,保证证书的有效性。 ### 前提条件 -已成功登录x2openEuler工具。 +已成功登录 x2openEuler 工具。 > ![](public_sys-resources/icon-note.gif) **说明:** -> 只有管理员(**x2openEulerAdmin**)可以执行生成CSR文件、导入web服务器证书、下载根证书,重启和更换工作密钥的操作。 +> 只有管理员(**x2openEulerAdmin**)可以执行生成CSR文件、导入 web 服务器证书、下载根证书,重启和更换工作密钥的操作。 > ### 操作步骤 -1. 在页面右上方选择“![](figures/icons/settings.png) \> web服务端证书”。 -2. 查看证书信息,如[图12](#figure12)所示,界面参数描述如[表4](#sheet4)所示。 +1. 在页面右上方选择“![](figures/icons/settings.png) \> web 服务端证书”。 +2. 查看证书信息,如 [图12](#figure12) 所示,界面参数描述如 [表4](#sheet4) 所示。 **图 12** web服务端证书信息 ![](figures/webcertinfo.png "web服务端证书信息") @@ -666,7 +664,7 @@ web服务端证书用于客户端浏览器和web服务器之间的通讯,实 说明:
            • 工具每天自动检查并更新证书状态
            • -
            • web服务证书自动告警时间默认为90天。管理员可在x2openEuler工具首页中的选项中选择“系统配置”,手动配置“证书过期告警阈值”,可配置范围为7~180天。
            • +
            • web服务证书自动告警时间默认为 90 天。管理员可在x2openEuler工具首页中的选项中选择“系统配置”,手动配置“证书过期告警阈值”,可配置范围为 7~180 天。
            @@ -676,12 +674,12 @@ web服务端证书用于客户端浏览器和web服务器之间的通讯,实
            • 下载根证书 说明:
              - 使用浏览器登录x2openEuler工具时,若弹出安全告警提示,可以在浏览器中为x2openEuler工具导入根证书来屏蔽此安全告警提示
            • -
            • 生成CSR文件
              + 使用浏览器登录 x2openEuler 工具时,若弹出安全告警提示,可以在浏览器中为 x2openEuler 工具导入根证书来屏蔽此安全告警提示
            • +
            • 生成 CSR 文件
              说明:
              - CSR(Certificate Signing Request)是证书请求文件。证书申请者在申请数字证书时,由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件。证书申请者把CSR文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,即证书。 + CSR(Certificate Signing Request)是证书请求文件。证书申请者在申请数字证书时,由 CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件。证书申请者把 CSR 文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,即证书。
            • -
            • 导入web服务器证书
            • +
            • 导入 web 服务器证书
            • 重启服务
            • 更新工作密钥
            @@ -691,14 +689,14 @@ web服务端证书用于客户端浏览器和web服务器之间的通讯,实 ### 自定义服务器证书信息并导入 -1. 在“web服务端证书”页面中单击“生成CSR文件”。 +1. 在 “web 服务端证书”页面中单击“生成 CSR 文件”。 - 打开“生成CSR文件”对话框,如[图13](#figure13)所示,界面参数描述如[表5](#sheet5)所示。 + 打开“生成 CSR 文件”对话框,如 [图13](#figure13) 所示,界面参数描述如 [表5](#sheet5) 所示。 - **图 13** 生成CSR文件 + **图 13** 生成 CSR 文件 ![](figures/genratecsrfile.png "生成CSR文件") - **表 5** CSR文件参数说明 + **表 5** CSR 文件参数说明 @@ -707,57 +705,57 @@ web服务端证书用于客户端浏览器和web服务器之间的通讯,实 - + - + - + - + - + - +
            国家使用者所在的国家。
            支持字母,长度为2个字符,为必填项。
            使用者所在的国家。
            支持字母,长度为 2 个字符,为必填项。
            省份使用者所在的省份。
            支持字母、数字、“-”、“_”、“.”和空格,最大长度128个字符。
            使用者所在的省份。
            支持字母、数字、“-”、“_”、“.” 和空格,最大长度128个字符。
            城市使用者所在的城市。
            支持字母、数字、“-”、“_”、“.”和空格,最大长度128个字符。
            使用者所在的城市。
            支持字母、数字、“-”、“_”、“.” 和空格,最大长度128个字符。
            公司使用者所在的公司。
            支持字母、数字、“-”、“_”、“.”和空格,最大长度64个字符。
            使用者所在的公司。
            支持字母、数字、“-”、“_”、“.” 和空格,最大长度64个字符。
            部门使用者所在部门。
            支持字母、数字、“-”、“_”、“.”和空格,最大长度64个字符。
            使用者所在部门。
            支持字母、数字、“-”、“_”、“.” 和空格,最大长度64个字符。
            常用名使用者的名称。
            支持字母、数字、“-”、“_”、“.”和空格,最大长度64个字符,为必填项。
            使用者的名称。
            支持字母、数字、“-”、“_”、“.” 和空格,最大长度64个字符,为必填项。
            -2. 单击“确认“生成CSR文件。 -3. 将导出的CSR文件发往SSL证书颁发机构,并申请SSL证书。获取到正式的证书后,保存到本地。 +2. 单击“确认“生成 CSR 文件。 +3. 将导出的CSR文件发往 SSL 证书颁发机构,并申请 SSL 证书。获取到正式的证书后,保存到本地。 > ![](public_sys-resources/icon-note.gif) **说明:** > 用户也可以使用其根证书进行自签名获取正式的证书。 -4. 单击“导入web服务端证书“。弹出“导入web服务端证书“对话框。 +4. 单击“导入 web 服务端证书“。弹出“导入 web 服务端证书“对话框。 5. 单击![](figures/icons/moreaction.png),选择需要导入证书文件,单击“导入“。 > ![](public_sys-resources/icon-note.gif) **说明:** > - > - 导入的证书文件不得大于1MB,支持的格式为\*.crt、\*.cer、\*.pem。 - > - [1](#zh-cn_topic_0000001278745013_zh-cn_topic_0254527453_zh-cn_topic_0251823105_li681951883619)中生成的CSR文件与向CA机构申请的服务器证书是一一对应的,在导入服务器证书之前请不要再次生成新的CSR文件,否则需要向CA机构重新申请服务器证书。 - > - 导入的SSL证书如果不是从正式的证书颁发机构获取,而是用户自己使用工具生成,在导入该SSL证书后,还需要确认客户端浏览器中是否已存在对应的根证书。 + > - 导入的证书文件不得大于 1MB,支持的格式为 \*.crt、\*.cer、\*.pem。 + > - [1](#zh-cn_topic_0000001278745013_zh-cn_topic_0254527453_zh-cn_topic_0251823105_li681951883619) 中生成的 CSR 文件与向 CA 机构申请的服务器证书是一一对应的,在导入服务器证书之前请不要再次生成新的 CSR 文件,否则需要向 CA 机构重新申请服务器证书。 + > - 导入的 SSL 证书如果不是从正式的证书颁发机构获取,而是用户自己使用工具生成,在导入该 SSL 证书后,还需要确认客户端浏览器中是否已存在对应的根证书。 -6. 单击“确认“导入web服务端证书。 +6. 单击“确认“导入 web 服务端证书。 7. 单击“更多 \> 重启服务“使证书生效。 > ![](public_sys-resources/icon-note.gif) **说明:** - > 用户手动在服务器上重启Nginx服务,证书不会生效,必须在web上进行重启操作。 + > 用户手动在服务器上重启 Nginx 服务,证书不会生效,必须在 web 上进行重启操作。 ### 更新工作密钥 -工作密钥用于加密启动Nginx服务的口令。为提高系统安全性,建议定期更新。 +工作密钥用于加密启动 Nginx 服务的口令。为提高系统安全性,建议定期更新。 -1. 在页面右上方![](figures/icons/settings.png)选项中选择“web服务端证书”。 -2. 单击“更多 \> 更新工作密钥“,如[图14](#figure14)所示。 +1. 在页面右上方![](figures/icons/settings.png)选项中选择 “web 服务端证书”。 +2. 单击“更多 \> 更新工作密钥“,如 [图14](#figure14) 所示。 **图 14** 更新工作密钥 ![](figures/updatekey.png "更新工作密钥") @@ -768,12 +766,12 @@ web服务端证书用于客户端浏览器和web服务器之间的通讯,实 ### 前提条件 -已成功登录x2openEuler工具。 +已成功登录 x2openEuler 工具。 ### 操作步骤 1. 在页面右上方选择“![](figures/icons/more.png) \> 关于”。 -2. 查询工具的版本信息和发布时间,如[图15](#figure15)所示。 +2. 查询工具的版本信息和发布时间,如 [图15](#figure15) 所示。 **图 15** 工具详细发布信息 ![](figures/toolsinfo.png "工具详细发布信息") @@ -782,121 +780,28 @@ web服务端证书用于客户端浏览器和web服务器之间的通讯,实 ### 前提条件 -已成功登录x2openEuler工具。 +已成功登录 x2openEuler 工具。 #### 操作步骤 -1. 在页面右上方选择“![](figures/icons/more.png) \> 免责声明”,如[图16](#figure16)所示。 +1. 在页面右上方选择“![](figures/icons/more.png) \> 免责声明”,如 [图16](#figure16) 所示。 **图 16** 免责声明 ![](figures/disclaimer.png "免责声明") 2. 仔细阅读免责声明。 -## 版本查看(CLI) - -### 命令功能 - -查看当前安装的x2openEuler工具的版本信息。 - -### 命令格式 - -```sh -x2openEuler -v -``` - -> ![](public_sys-resources/icon-note.gif) **说明:** -> “/usr/local/x2openEuler“为工具安装目录,请根据实际情况替换。 -> -### 使用实例 - -1. 执行以下命令确定x2openEuler用户是否具备登录权限。 - - ```sh - vi /etc/passwd - ``` - - 若回显信息中包含如下信息,则表示具备登录权限,否则需修改以下内容至“/etc/passwd”中并保存。 - - ```sh - x2openEuler:x:1000:1000::/home/x2openEuler:/bin/bash - ``` - - > ![](public_sys-resources/icon-note.gif) **说明:** - > 完成操作任务后需恢复原配置,确保运行环境安全。 - -2. 执行以下命令切换到x2openEuler用户。 - - ```sh - su x2openEuler - ``` - - 执行以下命令查看x2openEuler工具版本信息。 - - ```sh - x2openEuler -v - ``` - -3. 返回信息即为x2openEuler工具版本信息。 - - ```sh - x2openEuler x.x.x.x - ``` - -## 回退一致性配置 - -### 前提条件 - -已成功登录x2openEuler工具。 - -### 操作步骤 - -1. 在页面右上方选择“![](figures/icons/more.png) \> 回退一致性检查过滤”,进入“回退一致性检查过滤”页面。 -2. 在“回退一致性检查过滤”页面中参考[表6](#sheet6)配置需要在回退一致性检查中过滤的内容,配置内容支持正则表达式。 - - **表 6** 参数配置 - - - - - - - - - - - - - - - - - - - - - - - - - - -
            参数项描述
            软件配置不需要进行一致性检查的软件配置项。
            软件包不需要进行一致性检查的软件包。
            文件不需要进行一致性检查的文件。
            服务配置不需要进行一致性检查的服务配置。
            内核参数不需要进行一致性检查的内核参数。
            -3. 配置完成后,单击“确定”保存。 - - > ![](public_sys-resources/icon-note.gif) **说明:** - > 回退过程中出现的不一致项,在进行回退一致性配置后, 配置内容将不会进行一致性检查。配置之后仅在下一次回退才会生效。 ## 配置生成秘钥 ### 前提条件 -- 已部署x2openEuler工具 -- 本地已安装SSH远程连接工具 +- 已部署 x2openEuler 工具 +- 本地已安装 SSH 远程连接工具 ### 操作步骤 -1. 使用SSH工具远程登录待升级节点,进入Linux操作系统命令行界面。执行以下命令生成秘钥并修改公钥名称。 +1. 使用 SSH 工具远程登录待升级节点,进入 Linux 操作系统命令行界面。执行以下命令生成秘钥并修改公钥名称。 ```sh ssh-keygen @@ -906,11 +811,11 @@ x2openEuler -v > ![](public_sys-resources/icon-note.gif) **说明:** > - > - 执行**ssh-keygen**命令后,请根据终端交互信息进行操作。 - > - 修改“id\_rsa.pub”文件名称时,需确认“/etc/ssh/sshd\_config”文件中“AuthorizedKeysFile”参数为“.ssh/authorized\_keys”。 + > - 执行 **ssh-keygen** 命令后,请根据终端交互信息进行操作。 + > - 修改 id\_rsa.pub 文件名称时,需确认 /etc/ssh/sshd\_config 文件中 AuthorizedKeysFile 参数为 .ssh/authorized\_keys。 > -2. 执行以下命令配置“/etc/ssh/sshd\_config”文件,开启秘钥连接。 +2. 执行以下命令配置 /etc/ssh/sshd\_config 文件,开启秘钥连接。 ```sh vi /etc/ssh/sshd_config @@ -930,30 +835,30 @@ x2openEuler -v systemctl restart sshd ``` -4. 将id\_rsa文件传输至x2openEuler部署节点。 -5. 使用SSH工具远程登录x2openEuler部署节点,进入Linux操作系统命令行界面。 -6. 将x2openEuler部署节点id\_rsa文件移动至“/opt/x2openEuler”目录下,执行以下命令修改id\_rsa文件权限及属主属组。 +4. 将 id\_rsa 文件传输至 x2openEuler 部署节点。 +5. 使用 SSH 工具远程登录 x2openEuler 部署节点,进入Linux操作系统命令行界面。 +6. 将 x2openEuler 部署节点 id\_rsa 文件移动 /opt/x2openEuler 目录下,执行以下命令修改 id\_rsa 文件权限及属主属组。 ```sh chown x2openEuler:x2openEuler id_rsa chmod 600 id_rsa ``` -7. 在x2openEuler工具进行“批量导入”或“添加节点”时,选择“认证方式”为“秘钥认证”。 +7. 在 x2openEuler 工具进行“批量导入”或“添加节点”时,选择“认证方式”为“秘钥认证”。 ## 上传操作系统数据库支持包 ### 前提条件 -已成功安装x2openEuler工具。 +已成功安装 x2openEuler 工具。 已获取操作系统数据库支持包到本地。 ### 操作步骤 -1. 访问[openEuler 扩展仓库](https://repo.oepkgs.net/openEuler/rpm/)获取操作系统数据库支持包到本地。 +1. 访问 [openEuler 扩展仓库](https://repo.oepkgs.net/openEuler/rpm/) 获取操作系统数据库支持包到本地。 - 本文以上传支持CentOS 7.3升级到openEuler 22.03-LTS所需的操作系统数据库支持包为例。 + 本文以上传支持 CentOS 7.3 升级到 openEuler 22.03-LTS 所需的操作系统数据库支持包为例。 1. 进入以下路径。 @@ -964,9 +869,9 @@ x2openEuler -v > ![](public_sys-resources/icon-note.gif) **说明:** > 其中, > - > - openEuler-22.03-LTS为升级目标操作系统。 + > - openEuler-22.03-LTS 为升级目标操作系统。 > - > - noarch为操作系统硬件平台,可根据硬件平台环境选择aarch或x86\_64目录。 + > - noarch 为操作系统硬件平台,可根据硬件平台环境选择 aarch 或 x86\_64 目录。 > 2. 获取以下操作系统包。 @@ -991,37 +896,37 @@ x2openEuler -v 目标操作系统数据库支持包。 -2. 使用SSH工具远程登录x2openEuler部署环境,上传操作系统数据库支持包至以下目录。 +2. 使用 SSH 工具远程登录 x2openEuler 部署环境,上传操作系统数据库支持包至以下目录。 ```sh /etc/x2openEuler/rpms/databases ``` > ![](public_sys-resources/icon-note.gif) **说明:** - > 工具默认支持源操作系统CentOS7.6 和 目标操作系统 openEuler 20.03-LTS-SP1,因此当需要升级其他系统至openEuler 20.03-LTS-SP1时,无需再次上传目标操作系统支持包。 + > 工具默认支持源操作系统 CentOS7.6 和 目标操作系统 openEuler 20.03-LTS-SP1,因此当需要升级其他系统至 openEuler 20.03-LTS-SP1 时,无需再次上传目标操作系统支持包。 -3. 登录x2openEuler工具Web页面,在创建任务时,“源操作系统版本”选项中,选择“centos7.3”,目标操作系统选择“openEuler 22.03-LTS”即可。 +3. 登录 x2openEuler 工具 Web 页面,在创建任务时,“源操作系统版本”选项中,选择 Centos7.3,目标操作系统选择 openEuler 22.03-LTS 即可。 ## 自定义健康巡检 ### 前提条件 -- 已部署x2openEuler工具。 +- 已部署 x2openEuler 工具。 - 已完成对待升级节点的环境检查。 ### 操作步骤 -1. 使用SSH工具登录待升级节点,进入以下路径。 +1. 使用 SSH 工具登录待升级节点,进入以下路径。 ```sh /usr/lib/x2openEuler-upgrade/src/env_check/check_actor/ ``` -2. 参考如下代码新增actor,以下代码展示了可用内存是否大于1G的检查项编写。 +2. 参考如下代码新增 actor,以下代码展示了可用内存是否大于 1G 的检查项编写。 > ![](public_sys-resources/icon-note.gif) **说明:** - > actor是一个python文件,如果在本地编写完actor代码,需将代码上传至待升级节点“/usr/lib/x2openEuler-upgrade/src/env_check/check_actor/”路径下。工具会自动读取check_actor下的所有actor文件并完成解析,并在指定的流程中执行检查项。 - > 该actor无需远程连接,可直接执行。 + > actor 是一个 python 文件,如果在本地编写完 actor 代码,需将代码上传至待升级节点 /usr/lib/x2openEuler-upgrade/src/env_check/check_actor/ 路径下。工具会自动读取 check_actor 下的所有 actor 文件并完成解析,并在指定的流程中执行检查项。 + > 该 actor 无需远程连接,可直接执行。 ```sh # -*- coding: utf-8 -*- @@ -1032,34 +937,34 @@ x2openEuler -v LOG = LoggerGenerator().get_logger() - @register_func.register #注册器,会自动注册该用例,必须存在 + @register_func.register # 注册器,会自动注册该用例,必须存在 class MemoryUsageStatisticsActor(BaseCheckActor): - name = "MemoryUsageStatisticsActor" #用例名称,会显示在前端 - description = "get memory usage statistics" #用例描述,会显示在前端 - level = "Low" #用例level,预留字段,当前未使用 - sort = "100" #优先级,支持小数,数字越低,优先级越高,不能低于10 - priority = "unnecessary" #用例等级,分必选和可选,必选失败会导致步骤失败,必选为mandatory,可选为unnecessary - task_type = (BaseCheckActor.task_type.SYSTEM_UPGRADE,) #用例type,只有用例于对应type匹配上,才会在对应类型的任务下执行,SYSTEM_UPGRADE为环境巡检字段 + name = "MemoryUsageStatisticsActor" # 用例名称,会显示在前端 + description = "get memory usage statistics" # 用例描述,会显示在前端 + level = "Low" # 用例 level,预留字段,当前未使用 + sort = "100" # 优先级,支持小数,数字越低,优先级越高,不能低于 10 + priority = "unnecessary" # 用例等级,分必选和可选,必选失败会导致步骤失败,必选为 mandatory,可选为 unnecessary + task_type = (BaseCheckActor.task_type.SYSTEM_UPGRADE,) # 用例 type,只有用例于对应 type 匹配上,才会在对应类型的任务下执行,SYSTEM_UPGRADE 为环境巡检字段 @staticmethod - def run(node: dict): #node为记录了节点相关信息的字典,如需查看内容,可以使用LOG.info(node)将其记录到日志中,run()方法必须实现 + def run(node: dict): # node 为记录了节点相关信息的字典,如需查看内容,可以使用 LOG.info(node) 将其记录到日志中,run()方法必须实现 LOG.info("start to get memory usage info...") - used_size, total_size = MemoryUsageStatisticsActor._get_memory_usage() #获取内存数据 - if used_size < 0 or total_size < 0 or total_size < 1024*1024: #内存值比较 + used_size, total_size = MemoryUsageStatisticsActor._get_memory_usage() #获取内存数据 + if used_size < 0 or total_size < 0 or total_size < 1024*1024: # 内存值比较 return ReturnMessage(result=BaseCheckActor.FAIL, solution="请检查 free -k 命令回显", - failed_reason="通过 free -k 获取内存使用情况失败,或者内存值小于1G") #必须返回ReturnMessage数据类型 + failed_reason="通过 free -k 获取内存使用情况失败,或者内存值小于1G") # 必须返回 ReturnMessage 数据类型 info = f"内存使用情况(已使用/总内存):{round(used_size / 1024, 1)}MB / {round(total_size / 1024, 1)}MB" - return ReturnMessage(result=BaseCheckActor.SUCCESS, solution=info, failed_reason="") #必须返回ReturnMessage数据类型,如果该用例未通过,failed_reason与solution会展示到前端 + return ReturnMessage(result=BaseCheckActor.SUCCESS, solution=info, failed_reason="") # 必须返回 ReturnMessage 数据类型,如果该用例未通过,failed_reason 与 solution 会展示到前端 @staticmethod def _get_memory_usage() -> (int, int): - cmd = ["free", "-k"] #使用free -k命令获取使用内存 - stdout, _, return_code = CommandExecutor.run_single_cmd(cmd, timeout=15) #下发命令,第一个返回值为命令输出,第二个为错误输出,第三个为命令退出码 + cmd = ["free", "-k"] # 使用 free -k 命令获取使用内存 + stdout, _, return_code = CommandExecutor.run_single_cmd(cmd, timeout=15) # 下发命令,第一个返回值为命令输出,第二个为错误输出,第三个为命令退出码 if return_code or not stdout: return -1, -1 for line in stdout.splitlines(): - if not line.startswith('Mem:'): #获取关键信息 + if not line.startswith('Mem:'): # 获取关键信息 continue words = line.split() total_size = int(words[1]) @@ -1067,27 +972,27 @@ x2openEuler -v return used_size, total_size ``` -3. 登录x2openEuler工具,创建升级任务。 +3. 登录 x2openEuler 工具,创建升级任务。 ## 自定义环境检查 ### 前提条件 -已部署x2openEuler工具。 +已部署 x2openEuler 工具。 ### 操作步骤 -1. 使用SSH工具登录x2openEuler工具部署节点,进入以下路径。 +1. 使用 SSH 工具登录 x2openEuler 工具部署节点,进入以下路径。 ```sh /usr/local/x2openEuler/portal/src/taskmanager/actors/env_check_actor ``` -2. 参考如下代码新增actor。 +2. 参考如下代码新增 actor。 > ![](public_sys-resources/icon-note.gif) **说明:** - > actor是一个python文件,如果在本地编写完actor代码,需将代码上传至x2openEuler工具部署节点“/usr/local/x2openEuler/portal/src/taskmanager/actors/env_check_actor”路径下,工具会自动读取check_actor下的所有actor文件并完成解析,并在指定的流程中执行对应代码。 - > 该actor无需远程连接,可直接执行。 + > actor 是一个 python 文件,如果在本地编写完 actor 代码,需将代码上传至 x2openEuler 工具部署节点 /usr/local/x2openEuler/portal/src/taskmanager/actors/env_check_actor 路径下,工具会自动读取check_actor 下的所有 actor 文件并完成解析,并在指定的流程中执行对应代码。 + > 该 actor 无需远程连接,可直接执行。 ```sh # -*- coding: utf-8 -*- @@ -1097,34 +1002,34 @@ x2openEuler -v from src.utils.log.logger_generator import LoggerGenerator LOG = LoggerGenerator().get_logger() - @register_func.register #注册器,会自动注册该用例,必须存在 + @register_func.register # 注册器,会自动注册该用例,必须存在 class MemoryUsageStatisticsActor(BaseCheckActor): - name = "MemoryUsageStatisticsActor" #用例名称,会显示在前端 - description = "get memory usage statistics" #用例描述,会显示在前端 - level = "Low" #用例level,预留字段,当前未使用 - sort = "100" #优先级,支持小数,数字越低,优先级越高,不能低于10 - priority = "unnecessary" #用例等级,分必选和可选,必选失败会导致步骤失败,必选为mandatory,可选为unnecessary - task_type = (BaseCheckActor.task_type.PRE_SYSTEM_UPGRADE,) #用例type,只有用例于对应type匹配上,才会在对应类型的任务下执行,PRE_SYSTEM_UPGRADE为环境巡检字段 + name = "MemoryUsageStatisticsActor" # 用例名称,会显示在前端 + description = "get memory usage statistics" # 用例描述,会显示在前端 + level = "Low" # 用例 level,预留字段,当前未使用 + sort = "100" # 优先级,支持小数,数字越低,优先级越高,不能低于 10 + priority = "unnecessary" # 用例等级,分必选和可选,必选失败会导致步骤失败,必选为mandatory,可选为unnecessary + task_type = (BaseCheckActor.task_type.PRE_SYSTEM_UPGRADE,) # 用例 type,只有用例于对应 type 匹配上,才会在对应类型的任务下执行,PRE_SYSTEM_UPGRADE 为环境巡检字段 @staticmethod - def run(node: dict): #node为记录了节点相关信息的字典,如需查看内容,可以使用LOG.info(node)将其记录到日志中,run()方法必须实现 + def run(node: dict): # node 为记录了节点相关信息的字典,如需查看内容,可以使用 LOG.info(node) 将其记录到日志中,run()方法必须实现 LOG.info("start to get memory usage info...") - used_size, total_size = MemoryUsageStatisticsActor._get_memory_usage() #获取内存数据 - if used_size < 0 or total_size < 0 or total_size < 1024*1024: #内存值比较 + used_size, total_size = MemoryUsageStatisticsActor._get_memory_usage() # 获取内存数据 + if used_size < 0 or total_size < 0 or total_size < 1024*1024: # 内存值比较 return ReturnMessage(result=BaseCheckActor.FAIL, solution="请检查 free -k 命令回显", - failed_reason="通过 free -k 获取内存使用情况失败,或者内存值小于1G") #必须返回ReturnMessage数据类型 + failed_reason="通过 free -k 获取内存使用情况失败,或者内存值小于1G") # 必须返回 ReturnMessage 数据类型 info = f"内存使用情况(已使用/总内存):{round(used_size / 1024, 1)}MB / {round(total_size / 1024, 1)}MB" - return ReturnMessage(result=BaseCheckActor.SUCCESS, solution=info, failed_reason="") #必须返回ReturnMessage数据类型,如果该用例未通过,failed_reason与solution会展示到前端 + return ReturnMessage(result=BaseCheckActor.SUCCESS, solution=info, failed_reason="") # 必须返回 ReturnMessage 数据类型,如果该用例未通过,failed_reason 与 solution 会展示到前端 @staticmethod def _get_memory_usage() -> (int, int): - cmd = ["free", "-k"] #使用free -k命令获取使用内存 - stdout, _, return_code = CommandExecutor.run_single_cmd(cmd, timeout=15) #下发命令,第一个返回值为命令输出,第二个为错误输出,第三个为命令退出码 + cmd = ["free", "-k"] # 使用 free -k 命令获取使用内存 + stdout, _, return_code = CommandExecutor.run_single_cmd(cmd, timeout=15) # 下发命令,第一个返回值为命令输出,第二个为错误输出,第三个为命令退出码 if return_code or not stdout: return -1, -1 for line in stdout.splitlines(): - if not line.startswith('Mem:'): #获取关键信息 + if not line.startswith('Mem:'): # 获取关键信息 continue words = line.split() total_size = int(words[1]) @@ -1132,35 +1037,35 @@ x2openEuler -v return used_size, total_size ``` -3. actor完成新增后,执行以下命令重启“gunicorn服务”。 +3. actor 完成新增后,执行以下命令重启 gunicorn 服务。 ```sh systemctl restart gunicorn_x2openEuler.service ``` -4. 重新登录x2openEuler工具web页面,进行环境检查任务。 +4. 重新登录 x2openEuler 工具 web 页面,进行环境检查任务。 ## 自定义升级前检查 ### 前提条件 -已部署x2openEuler工具。 +已部署 x2openEuler 工具。 已创建升级任务。 ### 操作步骤 -1. 使用SSH工具登录待升级节点,进入以下目录。 +1. 使用 SSH 工具登录待升级节点,进入以下目录。 ```sh /usr/lib/x2openEuler-upgrade/src/env_check/check_actor/ ``` -2. 参考如下代码新增actor以自定义升级前检查,以下代码展示了可用内存是否大于1G的检查项编写。 +2. 参考如下代码新增 actor 以自定义升级前检查,以下代码展示了可用内存是否大于 1G 的检查项编写。 > ![](public_sys-resources/icon-note.gif) **说明:** - > actor是一个python文件,如果在本地编写完actor代码,需将代码上传至部署x2openEuler-upgrade的待升级环境“/usr/lib/x2openEuler-upgrade/src/env_check/check_actor/”路径下,工具会自动读取check_actor下的所有actor文件并完成解析,并在指定的流程中执行对应代码 - > 该actor无需远程连接,可直接执行。 + > actor 是一个 python 文件,如果在本地编写完 actor 代码,需将代码上传至部署 x2openEuler-upgrade 的待升级环境 /usr/lib/x2openEuler-upgrade/src/env_check/check_actor/ 路径下,工具会自动读取 check_actor 下的所有 actor 文件并完成解析,并在指定的流程中执行对应代码 + > 该 actor 无需远程连接,可直接执行。 ```sh # -*- coding: utf-8 -*- @@ -1170,34 +1075,34 @@ x2openEuler -v from src.utils.log.logger_generator import LoggerGenerator LOG = LoggerGenerator().get_logger() - @register_func.register #注册器,会自动注册该用例,必须存在 + @register_func.register # 注册器,会自动注册该用例,必须存在 class MemoryUsageStatisticsActor(BaseCheckActor): - name = "MemoryUsageStatisticsActor" #用例名称,会显示在前端 - description = "get memory usage statistics" #用例描述,会显示在前端 - level = "Low" #用例level,预留字段,当前未使用 - sort = "100" #优先级,支持小数,数字越低,优先级越高,不能低于10 - priority = "unnecessary" #用例等级,分必选和可选,必选失败会导致步骤失败,必选为mandatory,可选为unnecessary - task_type = (BaseCheckActor.task_type.PRE_SYSTEM_UPGRADE,) #用例type,只有用例于对应type匹配上,才会在对应类型的任务下执行,PRE_SYSTEM_UPGRADE为环境巡检字段 + name = "MemoryUsageStatisticsActor" # 用例名称,会显示在前端 + description = "get memory usage statistics" # 用例描述,会显示在前端 + level = "Low" # 用例 level,预留字段,当前未使用 + sort = "100" # 优先级,支持小数,数字越低,优先级越高,不能低于 10 + priority = "unnecessary" # 用例等级,分必选和可选,必选失败会导致步骤失败,必选为mandatory,可选为unnecessary + task_type = (BaseCheckActor.task_type.PRE_SYSTEM_UPGRADE,) # 用例 type,只有用例于对应 type 匹配上,才会在对应类型的任务下执行,PRE_SYSTEM_UPGRADE为环境巡检字段 @staticmethod - def run(node: dict): #node为记录了节点相关信息的字典,如需查看内容,可以使用LOG.info(node)将其记录到日志中,run()方法必须实现 + def run(node: dict): # node 为记录了节点相关信息的字典,如需查看内容,可以使用 LOG.info(node) 将其记录到日志中,run()方法必须实现 LOG.info("start to get memory usage info...") - used_size, total_size = MemoryUsageStatisticsActor._get_memory_usage() #获取内存数据 - if used_size < 0 or total_size < 0 or total_size < 1024*1024: #内存值比较 + used_size, total_size = MemoryUsageStatisticsActor._get_memory_usage() # 获取内存数据 + if used_size < 0 or total_size < 0 or total_size < 1024*1024: # 内存值比较 return ReturnMessage(result=BaseCheckActor.FAIL, solution="请检查 free -k 命令回显", - failed_reason="通过 free -k 获取内存使用情况失败,或者内存值小于1G") #必须返回ReturnMessage数据类型 + failed_reason="通过 free -k 获取内存使用情况失败,或者内存值小于1G") # 必须返回 ReturnMessage 数据类型 info = f"内存使用情况(已使用/总内存):{round(used_size / 1024, 1)}MB / {round(total_size / 1024, 1)}MB" - return ReturnMessage(result=BaseCheckActor.SUCCESS, solution=info, failed_reason="") #必须返回ReturnMessage数据类型,如果该用例未通过,failed_reason与solution会展示到前端 + return ReturnMessage(result=BaseCheckActor.SUCCESS, solution=info, failed_reason="") # 必须返回 ReturnMessage 数据类型,如果该用例未通过,failed_reason 与 solution 会展示到前端 @staticmethod def _get_memory_usage() -> (int, int): - cmd = ["free", "-k"] #使用free -k命令获取使用内存 - stdout, _, return_code = CommandExecutor.run_single_cmd(cmd, timeout=15) #下发命令,第一个返回值为命令输出,第二个为错误输出,第三个为命令退出码 + cmd = ["free", "-k"] # 使用 free -k 命令获取使用内存 + stdout, _, return_code = CommandExecutor.run_single_cmd(cmd, timeout=15) # 下发命令,第一个返回值为命令输出,第二个为错误输出,第三个为命令退出码 if return_code or not stdout: return -1, -1 for line in stdout.splitlines(): - if not line.startswith('Mem:'): #获取关键信息 + if not line.startswith('Mem:'): # 获取关键信息 continue words = line.split() total_size = int(words[1]) @@ -1211,7 +1116,7 @@ x2openEuler -v ### 前提条件 -已安装x2openEuler工具 +已安装 x2openEuler 工具 已创建涉及节点操作的相关任务 @@ -1219,18 +1124,18 @@ x2openEuler -v > > ![](public_sys-resources/icon-notice.gif) **须知:** -> 为确保x2openEuler部署节点的环境安全,请勿在非必要情况下操作数据库。 +> 为确保 x2openEuler 部署节点的环境安全,请勿在非必要情况下操作数据库。 -1. 使用SSH工具登录x2openEuler工具节点,执行以下命令输入密码后登录数据库。 +1. 使用 SSH 工具登录 x2openEuler 工具节点,执行以下命令输入密码后登录数据库。 ```sh mysql -u user -p ``` > ![](public_sys-resources/icon-note.gif) **说明:** - > 其中,user为数据库用户。 + > 其中,user 为数据库用户。 -2. 在数据库终端执行以下SQL语句,强制删除节点。 +2. 在数据库终端执行以下 SQL 语句,强制删除节点。 ```sh delete from taskmanager_report where step_id in (select id from taskmanager_step where node_id = (select id from taskmanager_node where ip_address='x.x.x.x' and port=22)); @@ -1239,27 +1144,27 @@ x2openEuler -v ``` > ![](public_sys-resources/icon-note.gif) **说明:** - > 其中,x.x.x.x为待升级节点ip地址,22为待升级节点ssh端口。 + > 其中,x.x.x.x 为待升级节点 ip 地址,22为 待升级节点 ssh 端口。 ## 强制修改数据库密码 ### 前提条件 -已安装部署x2openEuler工具。 +已安装部署 x2openEuler 工具。 ### 操作步骤 > ![](public_sys-resources/icon-notice.gif) **须知:** -> 为确保x2openEuler部署节点的环境安全,请勿在非必要情况下操作数据库。 +> 为确保 x2openEuler 部署节点的环境安全,请勿在非必要情况下操作数据库。 -1. 使用SSH远程登录工具,进入Linux操作系统命令行界面。 -2. 执行以下命令登录MariaDB。 +1. 使用 SSH 远程登录工具,进入 Linux 操作系统命令行界面。 +2. 执行以下命令登录 MariaDB。 ```sh mysql -u root -p; ``` -3. 进入数据库以后,执行以下SQL语句修改x2openEuler用户密码。 +3. 进入数据库以后,执行以下 SQL 语句修改 x2openEuler 用户密码。 ```sh use mysql; @@ -1268,11 +1173,11 @@ x2openEuler -v ``` > ![](public_sys-resources/icon-note.gif) **说明:** - > 其中,password参数为设置的新密码。 + > 其中,password 参数为设置的新密码。 设置完成密码后,退出数据库操作界面。 -4. 执行以下命令同步修改后的密码到x2openEuler 工具。 +4. 执行以下命令同步修改后的密码到 x2openEuler 工具。 ```sh bash /usr/local/x2openEuler/portal/service/update_db_pwd.sh diff --git a/docs/zh/docs/x2openEuler/figures/chooserepo.png b/docs/zh/docs/x2openEuler/figures/chooserepo.png index a5a0f8c43dcf276e2036b24f245879975cb6384b..f40fb1ab2a56740ff47bcdb3562033082fb827d2 100644 GIT binary patch literal 66558 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 RMeTotx{4OMQ2F+we*o13Vjutj literal 20794 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 -- Gitee From 07e08f8d14b8ab015afa64ac7e466e1a94c55663 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=B4=E5=9F=BA=E9=B1=BC?= Date: Thu, 21 Nov 2024 14:30:43 +0800 Subject: [PATCH 12/16] =?UTF-8?q?docs:=20x2=E6=96=87=E6=A1=A3=E6=9B=B4?= =?UTF-8?q?=E6=96=B0,=E7=89=B9=E6=80=A7=E6=8C=87=E5=8D=97,=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E8=8A=82=E7=82=B9=E5=8F=82=E6=95=B0=E8=AF=B4=E6=98=8E?= =?UTF-8?q?=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/docs/x2openEuler/FeatureGuide.md | 187 ++++++++++++----------- 1 file changed, 99 insertions(+), 88 deletions(-) diff --git a/docs/zh/docs/x2openEuler/FeatureGuide.md b/docs/zh/docs/x2openEuler/FeatureGuide.md index 5d500c899..a25b02ea0 100644 --- a/docs/zh/docs/x2openEuler/FeatureGuide.md +++ b/docs/zh/docs/x2openEuler/FeatureGuide.md @@ -25,7 +25,7 @@ > ![说明](public_sys-resources/icon-note.gif) **说明:** > 批量导入节点过程中,工具会对导入的节点信息进行校验,若校验不通过则需按照提示修改导入信息,并重新进行批量导入操作。 - 1. 在批量导入界面中,单击“模板表格”获取模板后参考 [表1](#sheet1) 填写节点信息。 + 1. 在批量导入界面中,单击“模板表格”获取模板后参考 [表 1](#sheet1) 填写节点信息。 **图 1** 批量导入 ![批量导入](figures/batchimport.png "批量导入") @@ -37,7 +37,7 @@ - 添加节点:添加单个节点的节点信息。 - 在“添加节点”页面,参考 [表1](#sheet1) 输入相应信息后,单击“确定”进行节点添加。 + 在“添加节点”页面,参考 [表 1](#sheet1) 输入相应信息后,单击“确定”进行节点添加。 **表 1** 节点信息参数说明 @@ -94,22 +94,36 @@ 待升级节点的目标操作系统,支持列表见 操作系统要求。 - repo源配置 - 输入已配置的repo源名称或单击右侧“选择”进行选择已配置的待升级节点在升级过程中需要的repo源,可参考 配置repo源 进行配置。 + repo 源配置 + 输入已配置的 repo 源名称或单击右侧“选择”进行选择已配置的待升级节点在升级过程中需要的 repo 源,可参考 配置 repo 源 进行配置。 - 业务软件 - 须知: -
              -
            • 未填写业务软件则不会生成软件评估报告。不需升级的业务软件(rpm 包)优先级高于业务软件(rpm 包)。
            • -
            • 输入多个软件目录或 rpm 包名称时,请用英文逗号分隔。
            • -
            • 业务软件(rpm 包):使用rpm包安装的业务软件,只需填写主软件名称即可,例如安装了 docker 只需填写 docker 既可。工具将检查该软件是否存在对应的 openEuler 版本,存在则自动升级软件。 若不存在,将进行软件兼容性检查,如果该软件兼容openEuler,则保留该业务软件,检查不通过则无法升级节点。
            • -
            • 业务软件(目录):使用解压包,源码编译安装的软件,需填写业务软件实际的路径,该路径只能包含业务软件,不能包含其他与业务软件不相关的文件。 工具将检查该软件在 openEuler 操作系统上的兼容性, 检查通过后即可升级节点并保留原始业务软件,检查不通过则无法升级节点。
            • -
            • 不需升级的业务软件(rpm 包):使用 rpm 包安装的业务软件,只需填写主软件名称即可,例如安装了 docker 只需填写 docker 即可。 工具将检查该软件在 openEuler 操作系统上的兼容性,检查通过后即可升级节点并保留原始版本包。检查不通过则无法升级节点。
            • -
            • 升级后新安装软件:使用 rpm 包安装的业务软件,只需填写主软件名称即可。例如操作系统升级后安装了 docker 只需填写 docker 即可。工具将检查该软件在 openEuler 操作系统上的兼容性,检查通过后即可在升级后安装该软件。检查不通过则无法安装该软件。
            • -
            + 须知: +
              +
            1. 未填写业务软件则不会生成软件评估报告。不需升级的业务软件(rpm 包)优先级高于业务软件(rpm 包)。
            2. +
            3. 输入多个软件目录或 rpm 包名称时,请用英文逗号分隔。
            4. +
            + + 业务软件 + + + 业务软件(rpm 包) + 使用rpm包安装的业务软件,只需填写主软件名称即可,例如安装了 docker 只需填写 docker 既可。工具将检查该软件是否存在对应的 openEuler 版本,存在则自动升级软件。 若不存在,将进行软件兼容性检查,如果该软件兼容openEuler,则保留该业务软件,检查不通过则无法升级节点。 + + + 业务软件(目录) + 使用解压包,源码编译安装的软件,需填写业务软件实际的路径,该路径只能包含业务软件,不能包含其他与业务软件不相关的文件。 工具将检查该软件在 openEuler 操作系统上的兼容性, 检查通过后即可升级节点并保留原始业务软件,检查不通过则无法升级节点。 + + + 不需升级的业务软件(rpm 包) + 使用 rpm 包安装的业务软件,只需填写主软件名称即可,例如安装了 docker 只需填写 docker 即可。 工具将检查该软件在 openEuler 操作系统上的兼容性,检查通过后即可升级节点并保留原始版本包。检查不通过则无法升级节点。 + + + 升级后新安装软件(rpm 包) + 使用 rpm 包安装的业务软件,只需填写主软件名称即可。例如操作系统升级后安装了 docker 只需填写 docker 即可。工具将检查该软件在 openEuler 操作系统上的兼容性,检查通过后即可在升级后安装该软件。检查不通过则无法安装该软件。 + 高级配置 @@ -123,8 +137,8 @@

            默认备份目录:/etc,/usr,/boot,/var,/run,/opt/sut/check_result,以及所有 rpm 包文件,多个备份目录间需要用逗号隔开。

            说明:
              -
            • 升级过程中会自动备份数据。默认备份 /usr/run/boot/var/etc 目录当中的文件,备份文件将被储存在 /.osbak 目录下。
            • -
            • 只需备份系统运行需要的文件目录,无需备份业务数据,如果业务数据直接存放在默认备份系统目录下, 或者通过挂载方式挂载在默认备份系统目录下,则需要将业务数据目录填写在排除目录一栏。备份目录一般情况无需额外填写。
            • +
            • 升级过程中会自动备份数据。默认备份 /usr/run/boot/var/etc 目录当中的文件,备份文件可被存储在自定义目录下,不填写则默认存储在 /.osbak 目录下。
            • +
            • 只需备份系统运行需要的文件目录,无需备份业务数据,如果业务数据直接存放在默认备份系统目录下,或者通过挂载方式挂载在默认备份系统目录下,则需要将业务数据目录填写在排除目录一栏。备份目录一般情况无需额外填写。
            @@ -148,6 +162,26 @@ swap软件包配置 部分软件包无法被升级,需要手动替换,如想将A包在升级后替换成B包,则需填写A->B。 + + 文件迁移配置 + 自定义文件迁移的列表。文件在源OS和目标OS上的位置相同时,可直接填写文件绝对路径,例如/.../A;文件在源OS和目标OS上的位置不同时,用->连接升级前后路径,例如/.../B->/.../C + + + 文件权限继承配置 + 自定义文件权限继承的列表。文件在源OS和目标OS上的位置相同时,可直接填写文件绝对路径,例如/.../A;文件在源OS和目标OS上的位置不同时,用->连接升级前后路径,例如/.../B->/.../C + + + 须知: +
              +
            1. 自定义检查项上传格式固定为xxx.tar.gz,xxx是压缩目录名字,解压目录一级包含严格按照模板编写的python脚本,工具会根据返回值来判断脚本是否执行成功。脚本将在待升级节点上运行,请确保上传脚本无安全风险。
            2. +
            3. 脚本上传路径默认为 /opt/x2openEuler/scripts-execute/upload/。
            4. +
            + + + + 自定义检查项 + 填写自定义检查项的脚本路径,根据任务类型的不同,自定义检查项可以分别执行在环境检查、升级前检查、升级后检查。 + 须知:
              @@ -169,6 +203,19 @@ 后置脚本(重启后) 启用该项后,需填写后置脚本(重启后)路径,该脚本运行在升级完成重启后。 + + 须知: +
                +
              1. SMT自定义脚本上传格式固定为xxx.tar.gz包,xxx是压缩目录名字,解压目录一级包含SMT前置脚本执行入口pre_run.sh、SMT后置脚本执行入口post_run.sh,自定义脚本执行是否成功不应影响SMT本身的执行。脚本将在待升级节点上运行,请确保上传脚本无安全风险。
              2. +
              3. 脚本上传路径默认为 /opt/x2openEuler/scripts-execute/upload/。
              4. +
              + + + + SMT自定义脚本 + 填写SMT自定义脚本路径,前置脚本、后置脚本分别在重启后的SMT脚本之前和之后执行。 + + 3. 此处以添加单个节点进行指纹验证为例,工具对导入的节点信息校验完成后,进入节点指纹验证页面,确认节点指纹无误后,单击“确定”。 @@ -215,49 +262,13 @@ 2. 升级前检查 - 针对待升级节点进行配置文件升级策略、软件、硬件兼容性评估及软件和服务冲突检查,产生相应评估报告,确认待升级节点是否符合升级要求。若出现兼容性不通过的情况,则需参考评估报告进行软件适配。评估报告参数详细说明请参考 [表2](#sheet2)、[表3](#sheet3)、[表4](#sheet4)、[表5](#sheet5) 和 [表6](#sheet6)。 + 针对待升级节点进行配置文件升级策略、软件、硬件兼容性评估及软件和服务冲突检查,产生相应评估报告,确认待升级节点是否符合升级要求。若出现兼容性不通过的情况,则需参考评估报告进行软件适配。评估报告参数详细说明请参考 [表 2](#sheet2)、[表 3](#sheet3)、[表 4](#sheet4) 和 [表 5](#sheet5)。 **图 7** 升级前检查 ![升级前检查](figures/updatecheck.png "升级前检查") - **表 2** 升级前检查报告参数说明 + **表 2** 配置文件升级策略 - - - - - - - - - - - - - - - - - - - - - -
              参数说明
              检查项检查项为从源操作系统升级到目标操作系统的服务、相关策略和配置。
              检查结果

              显示检查项是否通过升级前检查。

              -
                -
              • 通过
              • -
              • 不通过
              • -
              -
              优先级

              显示检查项对升级的影响:

              -
                -
              • 高:可能会导致升级出现中止异常。
              • -
              • 中:可能会导致升级过程中出现异常,但不一定会中止升级进程。
              • -
              • 低:可能导致升级过程中出现异常,但不会影响升级进程。
              • -
              -
              操作针对不通过检查项提供不通过原因和解决方案。
              - - **表 3** 配置文件升级策略 - @@ -282,8 +293,8 @@
              参数
              - **表 4** 业务软件评估报告结果参数说明 - + **表 3** 业务软件评估报告结果参数说明 + @@ -367,8 +378,8 @@
              参数
              - **表 5** 硬件兼容性评估报告结果参数说明 - + **表 4** 硬件兼容性评估报告结果参数说明 + @@ -379,7 +390,7 @@ - +
              参数显示评估环境中的系统、基本系统、CPU 以及整机兼容性信息。
              板卡在openEuler 20.03 LTS SP1 兼容性清单板卡在 openEuler2x.03-LTS-SPx 兼容性清单

              板卡兼容必须满足兼容性清单中参数与已有板卡清单列表中的信息都保持一致才算兼容。若对比字段信息不完全一致,则属于待确认板卡。

                @@ -395,8 +406,8 @@
              - **表 6** 软件冲突检查报告结果参数说明 - + **表 5** 软件冲突检查报告结果参数说明 + @@ -404,7 +415,7 @@ - + @@ -436,7 +447,7 @@ 3. 升级和数据备份 > ![说明](public_sys-resources/icon-note.gif) **说明:** - > 升级过程中会自动备份数据。默认备份 /usr 、/run、/boot、/var 和 /etc 目录当中的文件,备份文件将被储存 在/.osbak 目录下。 + > 升级过程中会自动备份数据。默认备份 /usr、/run、/boot、/var 和 /etc 目录当中的文件,备份文件可被存储在自定义目录下,不填写则默认存储在 /.osbak 目录下。 环境检查和升级前检查通过后,进入节点升级阶段。升级完成后,单击“重启节点”或手动重启升级节点,确保升级完成。单击“下载环境信息和日志”获取升级过程中收集的环境信息和运行日志。 @@ -506,7 +517,7 @@ > ![说明](public_sys-resources/icon-note.gif) **说明:** > 批量导入节点过程中,工具会对导入的节点信息进行校验,若校验不通过则需按照提示修改导入信息,并重新进行批量导入操作。 - 1. 在批量导入界面中,单击“模板表格”获取模板后参考 [表7](#sheet7) 填写节点信息。 + 1. 在批量导入界面中,单击“模板表格”获取模板后参考 [表 6](#sheet6) 填写节点信息。 **图 9** 批量导入 ![批量导入](figures/batchimport.png "批量导入") @@ -517,10 +528,10 @@ ![SSH传输须知](figures/sshnote.png "SSH传输须知-0") - 添加节点:添加单个节点的节点信息。 - 在“添加节点”页面,参考[表7](#sheet7)输入相应信息后,单击“确定”进行节点添加。 + 在“添加节点”页面,参考[表 6](#sheet6)输入相应信息后,单击“确定”进行节点添加。 - **表 7** 节点信息参数说明 - + **表 6** 节点信息参数说明 +
              参数
              软件冲突检查统计显示评估环境升级中存在的冲突信息、源操作系统保留包、升级到目标系统包、升级到openEuler拓展仓库包、源操作系统删除的软件包和目标操作系统额外安装包等相关信息。显示评估环境升级中存在的冲突信息、源操作系统保留包、升级到目标系统包、升级到 openEuler 拓展仓库包、源操作系统删除的软件包和目标操作系统额外安装包等相关信息。
              冲突信息
              @@ -637,13 +648,13 @@ 2. 收集与评估 - 针对待升级节点进行软件、硬件兼容性评估及软件冲突检查,产生相应评估报告,确认待升级节点是否符合升级要求。若出现兼容性不通过的情况,则需参考评估报告进行软件适配。评估报告参数详细说明请参考 [表8](#sheet8)、[表9](#sheet9) 和 [表10](#sheet10)。 + 针对待升级节点进行软件、硬件兼容性评估及软件冲突检查,产生相应评估报告,确认待升级节点是否符合升级要求。若出现兼容性不通过的情况,则需参考评估报告进行软件适配。评估报告参数详细说明请参考 [表 7](#sheet7)、[表 8](#sheet9) 和 [表 9](#sheet9)。 **图 12** 收集与评估 ![收集与评估](figures/collect.png "收集与评估") - **表 8** 业务软件评估报告结果参数说明 - + **表 7** 业务软件评估报告结果参数说明 +
              参数
              @@ -727,8 +738,8 @@
              参数
              - **表 9** 硬件兼容性评估报告结果参数说明 - + **表 8** 硬件兼容性评估报告结果参数说明 + @@ -755,8 +766,8 @@
              参数
              - **表 10** 软件冲突检查报告结果参数说明 - + **表 9** 软件冲突检查报告结果参数说明 + @@ -820,7 +831,7 @@ > ![说明](public_sys-resources/icon-note.gif) **说明:** > 批量导入节点过程中,工具会对导入的节点信息进行校验,若校验不通过则需按照提示修改导入信息,并重新进行批量导入操作。 - 1. 在批量导入界面中,单击“模板表格”获取模板后参考 [表11](#sheet11) 填写节点信息。 + 1. 在批量导入界面中,单击“模板表格”获取模板后参考 [表 10](#sheet10) 填写节点信息。 **图 13** 批量导入 ![批量导入](figures/batchimport.png "批量导入") @@ -831,13 +842,13 @@ ![SSH 传输须知](figures/sshnote.png "SSH 传输须知-4") - 添加节点:添加单个节点的节点信息。 - 1. 在“添加节点”页面,参考 [表11](#sheet11) 输入相应信息后,单击“确定”进行节点添加。 + 1. 在“添加节点”页面,参考 [表 10](#sheet10) 输入相应信息后,单击“确定”进行节点添加。 **图 15** 添加节点 ![添加节点](figures/addnode.png "添加节点") - **表 11** 节点信息参数说明 - + **表 10** 节点信息参数说明 +
              参数
              @@ -972,12 +983,12 @@ 2. 配置分析 - 针对源节点进行配置分析,产生配置分析报告,确认源节点可以进行迁移配置信息。配置分析报告参数详细说明请参考 [表12](#sheet12)。 + 针对源节点进行配置分析,产生配置分析报告,确认源节点可以进行迁移配置信息。配置分析报告参数详细说明请参考 [表 11](#sheet11)。 **图 19** 配置分析 ![配置分析](figures/configinfoanalysisi.png "配置分析") - **表 12** 配置分析报表参数说明 - + **表 11** 配置分析报表参数说明 +
              参数
              @@ -1036,13 +1047,13 @@ #### 操作步骤 1. 单击页面左侧“新建任务”,在下拉菜单中选择“软件包评估”。在弹出框“新建软件评估任务”界面中输入任务名称,单击确定进入评估任务界面。 -2. 单击左上角“选择软件包”,进入如 [图 21](#figure21) 所示界面,参考 [表 13](#sheet13) 上传需要评估的软件包。 +2. 单击左上角“选择软件包”,进入如 [图 21](#figure21) 所示界面,参考 [表 12](#sheet12) 上传需要评估的软件包。 **图 21** 选择软件包 ![选择软件包](figures/uploadpackage.png "选择软件包") - **表 13** 软件包扫描参数说明 - + **表 12** 软件包扫描参数说明 +
              参数
              @@ -1075,7 +1086,7 @@
              参数
              -3. 单击“确定“,执行软件评估任务。评估完成后,工具将自动跳转至分析结果界面,分析结果分为软件依赖关系图和软件评估报告,如 [图22](#figure22) 所示,软件评估报告详细参数描述如 [表14](#sheet14) 所示。 +3. 单击“确定“,执行软件评估任务。评估完成后,工具将自动跳转至分析结果界面,分析结果分为软件依赖关系图和软件评估报告,如 [图22](#figure22) 所示,软件评估报告详细参数描述如 [表 13](#sheet13) 所示。 > ![说明](public_sys-resources/icon-note.gif) **说明:** > @@ -1086,8 +1097,8 @@ **图 22** 软件依赖关系图 ![依赖关系图](figures/softwaredependce.png "软件依赖关系图") - **表 14** 业务软件评估报告结果参数说明 - + **表 13** 业务软件评估报告结果参数说明 + @@ -1184,7 +1195,7 @@ > > ![须知](public_sys-resources/icon-notice.gif) **须知:** -> 若要进行回退操作,必须先重启机器,否则会导致回退异常。 +> 若要进行回退操作,必须完成升级至 openEuler 系统,并且重启机器,否则会导致回退异常。 1. 重启系统后执行以下命令进行回退操作。 -- Gitee From 5fd3b90c0a9875515b0ad57e6ca114c869aa33a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=B4=E5=9F=BA=E9=B1=BC?= Date: Thu, 21 Nov 2024 15:27:29 +0800 Subject: [PATCH 13/16] =?UTF-8?q?docs:=20x2=E6=96=87=E6=A1=A3=E6=9B=B4?= =?UTF-8?q?=E6=96=B0,=E7=89=B9=E6=80=A7=E6=8C=87=E5=8D=97,=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=96=B9=E6=A1=881=E7=9A=84=E5=9B=9E=E9=80=80?= =?UTF-8?q?=E5=92=8C=E4=B8=80=E8=87=B4=E6=80=A7=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/docs/x2openEuler/FeatureGuide.md | 32 ------------------------ 1 file changed, 32 deletions(-) diff --git a/docs/zh/docs/x2openEuler/FeatureGuide.md b/docs/zh/docs/x2openEuler/FeatureGuide.md index a25b02ea0..7e0534bc2 100644 --- a/docs/zh/docs/x2openEuler/FeatureGuide.md +++ b/docs/zh/docs/x2openEuler/FeatureGuide.md @@ -1186,38 +1186,6 @@ 4. 单击右下角“下载环境信息和日志”获取环境信息和日志文件,单击“导出 HTML 报告”导出当前评估任务的分析结果。 -## 升级后回退 -#### 前提条件 - -待升级节点已经完成升级。 - -#### 操作步骤 - -> -> ![须知](public_sys-resources/icon-notice.gif) **须知:** -> 若要进行回退操作,必须完成升级至 openEuler 系统,并且重启机器,否则会导致回退异常。 - -1. 重启系统后执行以下命令进行回退操作。 - - ```sh - sh /usr/bin/centos2openEuler rollback - ``` - - **图 33** 回退过程 - ![回退过程](figures/rollback.png "回退过程") - -2. (可选)检查回退一致性,重启系统后需要手动执行收集系统信息和系统信息对比的命令。 - 1. 收集回滚后系统信息请参考 [4](#collectinfo)。 - 2. 执行以下命令进行回滚后系统信息对比。 - - ```sh - x2openEuler-client system-info-compare -d /opt/x2openEuler-client/output/ - ``` - - **图 34** 回滚后系统信息对比 - ![回滚后信息对比](figures/rollbackcheck.png "回滚后系统信息对比") - - ## 通过命令行使用x2openEuler工具 ### 环境准备 -- Gitee From 53803a8277e890309672265f90d7304d83bba952 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=B4=E5=9F=BA=E9=B1=BC?= Date: Thu, 21 Nov 2024 16:53:36 +0800 Subject: [PATCH 14/16] =?UTF-8?q?docs:=20x2=E6=96=87=E6=A1=A3=E6=9B=B4?= =?UTF-8?q?=E6=96=B0,=E7=89=B9=E6=80=A7=E6=8C=87=E5=8D=97,=E8=A1=A5?= =?UTF-8?q?=E5=85=85=E9=A1=BB=E7=9F=A5=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/docs/x2openEuler/FeatureGuide.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/zh/docs/x2openEuler/FeatureGuide.md b/docs/zh/docs/x2openEuler/FeatureGuide.md index 7e0534bc2..a19d496e9 100644 --- a/docs/zh/docs/x2openEuler/FeatureGuide.md +++ b/docs/zh/docs/x2openEuler/FeatureGuide.md @@ -175,6 +175,7 @@
              1. 自定义检查项上传格式固定为xxx.tar.gz,xxx是压缩目录名字,解压目录一级包含严格按照模板编写的python脚本,工具会根据返回值来判断脚本是否执行成功。脚本将在待升级节点上运行,请确保上传脚本无安全风险。
              2. 脚本上传路径默认为 /opt/x2openEuler/scripts-execute/upload/。
              3. +
              4. 使用 chown -R x2openEuler:x2openEuler xxx.tar.gz 修改文件拥有者和群组。
              @@ -208,6 +209,7 @@
              1. SMT自定义脚本上传格式固定为xxx.tar.gz包,xxx是压缩目录名字,解压目录一级包含SMT前置脚本执行入口pre_run.sh、SMT后置脚本执行入口post_run.sh,自定义脚本执行是否成功不应影响SMT本身的执行。脚本将在待升级节点上运行,请确保上传脚本无安全风险。
              2. 脚本上传路径默认为 /opt/x2openEuler/scripts-execute/upload/。
              3. +
              4. 使用 chown -R x2openEuler:x2openEuler xxx.tar.gz 修改文件拥有者和群组。
              -- Gitee From bea4d3bec53c7538c3f1600551e0b781bf0344cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=B4=E5=9F=BA=E9=B1=BC?= Date: Thu, 21 Nov 2024 17:52:00 +0800 Subject: [PATCH 15/16] =?UTF-8?q?docs:=20x2=E6=96=87=E6=A1=A3=E6=9B=B4?= =?UTF-8?q?=E6=96=B0,=E4=BF=AE=E6=94=B9=E7=A9=BA=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/docs/x2openEuler/CommonOperation.md | 59 ++++---- docs/zh/docs/x2openEuler/Faq.md | 114 +++++++-------- docs/zh/docs/x2openEuler/FeatureGuide.md | 34 ++--- docs/zh/docs/x2openEuler/InstallationGuide.md | 136 +++++++++--------- docs/zh/docs/x2openEuler/Introduce.md | 26 ++-- 5 files changed, 185 insertions(+), 184 deletions(-) diff --git a/docs/zh/docs/x2openEuler/CommonOperation.md b/docs/zh/docs/x2openEuler/CommonOperation.md index 2904000ab..81cd4be61 100644 --- a/docs/zh/docs/x2openEuler/CommonOperation.md +++ b/docs/zh/docs/x2openEuler/CommonOperation.md @@ -9,7 +9,7 @@ ### 操作步骤 -1. 在工具创建任务时,单击“添加节点”,下拉至 “repo 源名称”选项。单击右侧“选择”,进入选择 repo 源界面,如 [图1](#figure1)。 +1. 在工具创建任务时,单击“添加节点”,下拉至 “repo 源名称”选项。单击右侧“选择”,进入选择 repo 源界面,如 [图 1](#figure1)。 > ![](public_sys-resources/icon-note.gif) **说明:** > 工具默认提供 openEuler 22.03-LTS-SP4 操作系统的 aarch 和 x86\_64 源。建议使用镜像网站的 repo 源,以提高下载速率。 @@ -22,7 +22,7 @@ > ![](public_sys-resources/icon-notice.gif) **须知:** > - > - 请务必添加工具已支持的目标操作系统 repo 源,否则会导致升级出现异常,添加的 repo 源中最少需要包含everything 和 update。 + > - 请务必添加工具已支持的目标操作系统 repo 源,否则会导致升级出现异常,添加的 repo 源中最少需要包含 everything 和 update。 > - 修改 repo 源可能会导致使用该 repo 源的其他节点无法正常运行,请谨慎操作。 > - 删除 repo 源可能会导致使用该 repo 源的其他节点无法正常运行,请谨慎操作。 @@ -46,17 +46,17 @@ 1. 登录x2openEuler工具,在页面右上方选择“![](figures/icons/settings.png) \> web 服务端证书”,单击“下载根证书“下载根证书。 2. 打开浏览器,依次选择“设置 \> 隐私设置和安全性 \> 安全\>管理证书”。 -3. 在弹出“证书”的对话框中,选择“受信任的根证书颁发机构”页签,单击“导入”,如 [图2](#figure2) 所示。 +3. 在弹出“证书”的对话框中,选择“受信任的根证书颁发机构”页签,单击“导入”,如 [图 2](#figure2) 所示。 **图 2** 证书 ![](figures/cert.png "证书") -4. 在弹出的“证书导入向导”对话框中,单击“下一步”,如 [图3](#figure3) 所示。 +4. 在弹出的“证书导入向导”对话框中,单击“下一步”,如 [图 3](#figure3) 所示。 **图 3** 证书导入向导欢迎页面 ![](figures/certpage.png "证书导入向导欢迎页面") -5. 进入选择证书页面,单击“浏览”,如 [图4](#figure4) 所示。 +5. 进入选择证书页面,单击“浏览”,如 [图 4](#figure4) 所示。 **图 4** 导入证书文件 ![](figures/importcertfile.png "导入证书文件") @@ -64,7 +64,7 @@ 6. 从本地 PC 路径中选择待导入的证书。 7. 单击“下一步”。 - 进入选择证书存储位置页面,选择如 [图5](#figure5) 中的存放位置。 + 进入选择证书存储位置页面,选择如 [图 5](#figure5) 中的存放位置。 **图 5** 选择证书存储位置 ![](figures/savecert.png "选择证书存储位置") @@ -149,7 +149,7 @@ sestatus ``` - Current mode 显示 enforcing 表示SELinux已开启强制模式。 + Current mode 显示 enforcing 表示 SELinux 已开启强制模式。 2. 执行如下命令将 SELinux 模式设置为 permissive。 @@ -157,7 +157,7 @@ setenforce 0 ``` - 3. 再次查询SELinux状态。 + 3. 再次查询 SELinux 状态。 Current mode 显示 permissive 表示 SELinux 已临时关闭强制模式。 @@ -179,7 +179,7 @@ vi /etc/selinux/config ``` - 3. 按“i”进入编辑模式,将 SELINUX=enforcing 改为 SELINUX=disabled。 + 3. 按 “i” 进入编辑模式,将 SELINUX=enforcing 改为 SELINUX=disabled。 4. 按“ESC”,输入“:wq”,按“Enter”保存并退出。 5. 执行以下命令重启服务器。 @@ -189,7 +189,7 @@ 6. 再次查询 SELinux 状态。 - SELinux status 显示 disabled 表示SELinux 已关闭。 + SELinux status 显示 disabled 表示 SELinux 已关闭。 ## 修改 x2openEuler 工具的 IP 和端口 @@ -393,7 +393,7 @@ 1. 在页面右上角![](figures/icons/settings.png)下拉菜单中,选择“日志“。 - 打开“日志“界面,选择“操作日志“,如 [图7](#figure7) 所示。 + 打开“日志“界面,选择“操作日志“,如 [图 7](#figure7) 所示。 **图 7** 操作日志 ![](figures/operationlogs.png "操作日志") @@ -417,7 +417,7 @@ 1. 在页面右上角![](figures/icons/settings.png)下拉菜单中,选择“日志“。 - 打开“日志“界面,选择“运行日志“,如 [图8](#figure8) 所示。 + 打开“日志“界面,选择“运行日志“,如 [图 8](#figure8) 所示。 **图 8** 运行日志 ![](figures/runninglogs.png "运行日志") @@ -426,7 +426,7 @@ 下载的运行日志的格式如下: - [时间\] [日志级别\] [进程ID\] [线程名称\] [模块名称:函数名:行数\] 日志详情 + [时间\] [日志级别\] [进程 ID\] [线程名称\] [模块名称:函数名:行数\] 日志详情 例如: @@ -458,7 +458,7 @@ 打开用户管理界面。 -2. 单击操作栏中指定用户后的“重置密码”。打开“重置密码”界面,如 [图9](#figure9) 所示,需配置的参数如 [表2](#sheet2) 所示。 +2. 单击操作栏中指定用户后的“重置密码”。打开“重置密码”界面,如 [图 9](#figure9) 所示,需配置的参数如 [表 2](#sheet2) 所示。 **图 9** 重置密码 ![](figures/resetpassword.png "重置密码") @@ -497,7 +497,7 @@
              参数
              -3. 参考 [表2](#sheet2) 重置完密码后,单击“确认”。 +3. 参考 [表 2](#sheet2) 重置完密码后,单击“确认”。 > ![](public_sys-resources/icon-note.gif) **说明:** > 重置密码后,被重置密码的用户如果处于登录状态将会自动退出到登录页面,需要使用重置后的密码重新登录入页面。 @@ -534,13 +534,13 @@ 已成功登录 x2openEuler 工具。 >![](public_sys-resources/icon-note.gif) **说明:** ->x2openEuler工具用户的密码默认有效期为 90 天,建议在密码有效期到达之前设置新密码。若密码已过期,则需要在登录后先进行密码修改操作。 +>x2openEuler 工具用户的密码默认有效期为 90 天,建议在密码有效期到达之前设置新密码。若密码已过期,则需要在登录后先进行密码修改操作。 > ### 操作步骤 1. 在页面右上角登录用户的下拉菜单中,选择“修改密码“。 - 打开用户修改密码界面,如 [图10](#figure10) 所示,需配置的参数如 [表3](#sheet3) 所示。 + 打开用户修改密码界面,如 [图 10](#figure10) 所示,需配置的参数如 [表 3](#sheet3) 所示。 **图 10** 修改密码 ![](figures/changepasswd.png "修改密码") @@ -581,7 +581,7 @@ -2. 参考 [表3](#sheet3) 修改密码后,单击“确认”。 +2. 参考 [表 3](#sheet3) 修改密码后,单击“确认”。 > ![](public_sys-resources/icon-note.gif) **说明:** > 密码修改完成后,当前用户会退出到登录页面,需要使用修改后的密码重新进行登录。 @@ -635,7 +635,7 @@ Web 服务端证书用于客户端浏览器和 web 服务器之间的通讯, ### 操作步骤 1. 在页面右上方选择“![](figures/icons/settings.png) \> web 服务端证书”。 -2. 查看证书信息,如 [图12](#figure12) 所示,界面参数描述如 [表4](#sheet4) 所示。 +2. 查看证书信息,如 [图 12](#figure12) 所示,界面参数描述如 [表 4](#sheet4) 所示。 **图 12** web服务端证书信息 ![](figures/webcertinfo.png "web服务端证书信息") @@ -691,7 +691,7 @@ Web 服务端证书用于客户端浏览器和 web 服务器之间的通讯, 1. 在 “web 服务端证书”页面中单击“生成 CSR 文件”。 - 打开“生成 CSR 文件”对话框,如 [图13](#figure13) 所示,界面参数描述如 [表5](#sheet5) 所示。 + 打开“生成 CSR 文件”对话框,如 [图 13](#figure13) 所示,界面参数描述如 [表 5](#sheet5) 所示。 **图 13** 生成 CSR 文件 ![](figures/genratecsrfile.png "生成CSR文件") @@ -709,28 +709,28 @@ Web 服务端证书用于客户端浏览器和 web 服务器之间的通讯, 省份 - 使用者所在的省份。
              支持字母、数字、“-”、“_”、“.” 和空格,最大长度128个字符。 + 使用者所在的省份。
              支持字母、数字、“-”、“_”、“.” 和空格,最大长度 128 个字符。 城市 - 使用者所在的城市。
              支持字母、数字、“-”、“_”、“.” 和空格,最大长度128个字符。 + 使用者所在的城市。
              支持字母、数字、“-”、“_”、“.” 和空格,最大长度 128 个字符。 公司 - 使用者所在的公司。
              支持字母、数字、“-”、“_”、“.” 和空格,最大长度64个字符。 + 使用者所在的公司。
              支持字母、数字、“-”、“_”、“.” 和空格,最大长度 64 个字符。 部门 - 使用者所在部门。
              支持字母、数字、“-”、“_”、“.” 和空格,最大长度64个字符。 + 使用者所在部门。
              支持字母、数字、“-”、“_”、“.” 和空格,最大长度 64 个字符。 常用名 - 使用者的名称。
              支持字母、数字、“-”、“_”、“.” 和空格,最大长度64个字符,为必填项。 + 使用者的名称。
              支持字母、数字、“-”、“_”、“.” 和空格,最大长度 64 个字符,为必填项。 2. 单击“确认“生成 CSR 文件。 -3. 将导出的CSR文件发往 SSL 证书颁发机构,并申请 SSL 证书。获取到正式的证书后,保存到本地。 +3. 将导出的 CSR 文件发往 SSL 证书颁发机构,并申请 SSL 证书。获取到正式的证书后,保存到本地。 > ![](public_sys-resources/icon-note.gif) **说明:** > 用户也可以使用其根证书进行自签名获取正式的证书。 @@ -755,7 +755,7 @@ Web 服务端证书用于客户端浏览器和 web 服务器之间的通讯, 工作密钥用于加密启动 Nginx 服务的口令。为提高系统安全性,建议定期更新。 1. 在页面右上方![](figures/icons/settings.png)选项中选择 “web 服务端证书”。 -2. 单击“更多 \> 更新工作密钥“,如 [图14](#figure14) 所示。 +2. 单击“更多 \> 更新工作密钥“,如 [图 14](#figure14) 所示。 **图 14** 更新工作密钥 ![](figures/updatekey.png "更新工作密钥") @@ -771,7 +771,7 @@ Web 服务端证书用于客户端浏览器和 web 服务器之间的通讯, ### 操作步骤 1. 在页面右上方选择“![](figures/icons/more.png) \> 关于”。 -2. 查询工具的版本信息和发布时间,如 [图15](#figure15) 所示。 +2. 查询工具的版本信息和发布时间,如 [图 15](#figure15) 所示。 **图 15** 工具详细发布信息 ![](figures/toolsinfo.png "工具详细发布信息") @@ -784,7 +784,7 @@ Web 服务端证书用于客户端浏览器和 web 服务器之间的通讯, #### 操作步骤 -1. 在页面右上方选择“![](figures/icons/more.png) \> 免责声明”,如 [图16](#figure16) 所示。 +1. 在页面右上方选择“![](figures/icons/more.png) \> 免责声明”,如 [图 16](#figure16) 所示。 **图 16** 免责声明 ![](figures/disclaimer.png "免责声明") @@ -1182,3 +1182,4 @@ Web 服务端证书用于客户端浏览器和 web 服务器之间的通讯, ```sh bash /usr/local/x2openEuler/portal/service/update_db_pwd.sh ``` + \ No newline at end of file diff --git a/docs/zh/docs/x2openEuler/Faq.md b/docs/zh/docs/x2openEuler/Faq.md index b85a12a7a..b5736b62c 100644 --- a/docs/zh/docs/x2openEuler/Faq.md +++ b/docs/zh/docs/x2openEuler/Faq.md @@ -1,61 +1,61 @@ # FAQ ## 升级失败-救援模式 ##### 现象描述 -在较老版本中,使用方案1升级完成后,无法进入操作系统且无法通过回退方式恢复源操作系统,可通过使用ISO镜像光驱进入救援模式进行系统救援。 +在较老版本中,使用方案 1 升级完成后,无法进入操作系统且无法通过回退方式恢复源操作系统,可通过使用 ISO 镜像光驱进入救援模式进行系统救援。 ##### 处理步骤 -此处以x86\_64系统为例。 +此处以 x86\_64 系统为例。 -1. 获取标准ISO发布镜像。(例如 [openEuler-20.03-LTS-SP1-everthing-x86\_64-dvd.iso](https://repo.openeuler.org/openEuler-20.03-LTS-SP1/ISO/x86_64/openEuler-20.03-LTS-SP1-everything-x86_64-dvd.iso)) -2. 光驱挂载ISO镜像并重启机器通过光驱引导。 -3. 在光驱的GRUB菜单界面中进入“系统救援”,具体操作如下: - - UEFI启动模式 - 1. 选择“Troubleshooting” +1. 获取标准 ISO 发布镜像。(例如 [openEuler-20.03-LTS-SP1-everthing-x86\_64-dvd.iso](https://repo.openeuler.org/openEuler-20.03-LTS-SP1/ISO/x86_64/openEuler-20.03-LTS-SP1-everything-x86_64-dvd.iso)) +2. 光驱挂载 ISO 镜像并重启机器通过光驱引导。 +3. 在光驱的 GRUB 菜单界面中进入“系统救援”,具体操作如下: + - UEFI 启动模式 + 1. 选择 Troubleshooting - **图 1** UEFI grub菜单 - ![](figures/UEFI-grub.png "UEFI-grub菜单") + **图 1** UEFI grub 菜单 + ![](figures/UEFI-grub.png "UEFI-grub 菜单") - 2. 选择“rescue” + 2. 选择 rescue **图 2** 选择恢复模式 ![](figures/chooserescuemode.png "选择恢复模式") - - Legacy启动模式 - 1. 选择“Troubleshooting” + - Legacy 启动模式 + 1. 选择 Troubleshooting - **图 3** Legacy grub菜单 - ![](figures/Legacy-grub.png "Legacy-grub菜单") + **图 3** Legacy grub 菜单 + ![](figures/Legacy-grub.png "Legacy-grub 菜单") - 2. 选择“rescue” + 2. 选择 rescue **图 4** 选择恢复模式 ![](figures/chooserescuemode-1.png "选择恢复模式-7") -4. 进入“救援模式”后,按下数字键“1”选择“Continue”。 +4. 进入“救援模式”后,按下数字键 1 选择 Continue。 **图 5** 救援模式 ![](figures/rescuemode.png "救援模式") - 按下回车键后,进入“Rescue Shell” + 按下回车键后,进入 Rescue Shell **图 6** Rescue Shell ![](figures/Rescue-Shell.png "Rescue-Shell") -5. 执行以下命令检查当前环境是否存在x2openEuler-upgrade 软件包,若存在则跳转至[7](#li0265188125315)。 +5. 执行以下命令检查当前环境是否存在 x2openEuler-upgrade 软件包,若存在则跳转至 [7](#li0265188125315)。 ``` find / -name x2openEuler-upgrade ``` - **图 7** 检查x2openEuler-upgrade 软件包 + **图 7** 检查 x2openEuler-upgrade 软件包 ![](figures/checkx2openEuler-upgrade-package.png "检查x2openEuler-upgrade-软件包") -6. 为当前环境配置可用的ip地址。 +6. 为当前环境配置可用的 ip 地址。 - **图 8** 配置可用ip地址 + **图 8** 配置可用 ip 地址 ![](figures/configip.png "配置可用ip地址") -7. 执行以下命令,开启SSH服务,上传x2openEuler-upgrade软件包至“/root”目录下。 +7. 执行以下命令,开启 SSH 服务,上传 x2openEuler-upgrade 软件包至 /root 目录下。 ``` mv /etc/ssh/sshd_config.anaconda /etc/ssh/sshd_config @@ -63,13 +63,13 @@ scp root@xxx.xxx.xxx.xxx:/xxx/x2oepnEuler-upgrade* /root/ ``` - **图 9** 启动SSH服务 - ![](figures/startsshservice.png "启动SSH服务") + **图 9** 启动 SSH 服务 + ![](figures/startsshservice.png "启动 SSH 服务") - **图 10** 上传x2openEuler工具安装包至/root目录下 - ![](figures/updatex2openEulerpackage.png "上传x2openEuler工具安装包至-root目录下") + **图 10** 上传 x2openEuler 工具安装包至 /root 目录下 + ![](figures/updatex2openEulerpackage.png "上传 x2openEuler 工具安装包至 /root 目录下") -8. 执行以下命令解压安装包获取x2openEuler-upgrade软件包并进行安装。 +8. 执行以下命令解压安装包获取 x2openEuler-upgrade 软件包并进行安装。 ``` ln -s /usr/bin/python3 /usr/bin/python @@ -77,17 +77,17 @@ source /root/.bashrc ``` - **图 11** 安装x2openEuler-upgrade软件包 + **图 11** 安装 x2openEuler-upgrade 软件包 ![](figures/installx2openEuler-upgradepackage.png "安装x2openEuler-upgrade软件包") -9. 执行以下命令,修改x2openEuler-upgrade配置文件,不对“/run/install”进行回滚。 +9. 执行以下命令,修改 x2openEuler-upgrade 配置文件,不对 /run/install 进行回滚。 ``` vim /mnt/sysroot/etc/sut/sut.conf ``` - **图 12** 修改x2openEuler-upgrade配置文件 - ![](figures/changex2openEuler-upgradeconfigure.png "修改x2openEuler-upgrade配置文件") + **图 12** 修改 x2openEuler-upgrade 配置文件 + ![](figures/changex2openEuler-upgradeconfigure.png "修改 x2openEuler-upgrade 配置文件") 10. 执行以下命令,进行系统救援。 @@ -105,7 +105,7 @@ ``` >![](public_sys-resources/icon-note.gif) **说明:** - >系统重启之后,SELinux会进行relabel动作,物理机可能耗时较长。relabel动作触发完成后,系统会自动进行重启,此时才真正回退至最初的源操作系统。 + >系统重启之后,SELinux 会进行 relabel 动作,物理机可能耗时较长。relabel 动作触发完成后,系统会自动进行重启,此时才真正回退至最初的源操作系统。 12. 执行以下命令进行系统救援结果验证。 @@ -126,7 +126,7 @@ ##### 可能原因 升级前配置了高版本的动态依赖库,升级后会出现系统冲突。 ##### 处理步骤 -排查“/etc/ld.so.conf.d”目录下是存在和系统目录下的so文件冲突的配置。 +排查 /etc/ld.so.conf.d 目录下是存在和系统目录下的 so 文件冲突的配置。 ## 升级过程漫长 ##### 现象描述 @@ -142,11 +142,11 @@ 2. 如有需要将对应目录填写在排查目录中。 -## 升级前检查grub2版本不满足要求 +## 升级前检查 grub2 版本不满足要求 ##### 现象描述 -升级前检查报告grub2版本不满足要求。 +升级前检查报告 grub2 版本不满足要求。 ##### 处理步骤 -若升级的目标系统为“openEuler-20.03-LTS-SP1”,需要挂载update源。 +若升级的目标系统为 openEuler-20.03-LTS-SP1,需要挂载 update 源。 ## 升级前检查报错 ##### 现象描述 @@ -157,9 +157,9 @@ Abnormal exit,error:/etc/x2openEuler/database_2.0.0.630/centos7.4/x86_64/primary ``` ##### 处理步骤 -1. 访问[OEPKGS](https://repo.oepkgs.net/openEuler/rpm/openEuler-20.03-LTS-SP1/contrib/x2openEuler/noarch/Packages/),根据报错回显信息,获取对应版本数据包,例如“缺少CentOS 7.4 的数据库包需要安装x2openEuler-database-centos7.4-2.0.0.630-1.noarch.rpm,x2openEuler-database-centos7.4-openEuler20.03-LTS-SP1-2.0.0.630-1.noarch.rpm”。 -2. 上传获取的数据包至部署x2openEuler工具的环境,并使用SSH远程登录工具登录。 -3. 进入执行以下命令进行安装,此处以安装CentOS 7.4 对应版本数据包为例。 +1. 访问 [OEPKGS](https://repo.oepkgs.net/openEuler/rpm/openEuler-20.03-LTS-SP1/contrib/x2openEuler/noarch/Packages/),根据报错回显信息,获取对应版本数据包,例如“缺少 CentOS 7.4 的数据库包需要安装 x2openEuler-database-centos7.4-2.0.0.630-1.noarch.rpm,x2openEuler-database-centos7.4-openEuler20.03-LTS-SP1-2.0.0.630-1.noarch.rpm”。 +2. 上传获取的数据包至部署 x2openEuler 工具的环境,并使用 SSH 远程登录工具登录。 +3. 进入执行以下命令进行安装,此处以安装 CentOS 7.4 对应版本数据包为例。 ``` rpm -ivh x2openEuler-database-centos7.4-2.0.0.630-1.noarch.rpm @@ -170,9 +170,9 @@ Abnormal exit,error:/etc/x2openEuler/database_2.0.0.630/centos7.4/x86_64/primary ## QEMU相关问题处理 ##### 现象描述1 -安装了qemu-kvm软件,在操作系统升级之后,发现软件被卸载。 +安装了 qemu-kvm 软件,在操作系统升级之后,发现软件被卸载。 ##### 处理步骤 -执行以下命令安装qemu软件后,再次启动虚拟机。 +执行以下命令安装 qemu 软件后,再次启动虚拟机。 ``` yum install qemu @@ -180,7 +180,7 @@ yum install qemu ##### 现象描述2 -系统升级后安装qemu,启动虚拟机报错如下: +系统升级后安装 qemu,启动虚拟机报错如下: ``` Process exited prior to exec: libvirt: QEMU Driver error : Unable to get devmapper targets for /data1/var/lib/scevm/instances/xxxxxxx/disk.qcow2: Success @@ -188,7 +188,7 @@ Process exited prior to exec: libvirt: QEMU Driver error : Unable to get devmapp ##### 处理步骤 -由于主机没有加载dm\_mod.ko导致,可以通过modprobe dm\_mod来解决该异常,执行如下命令: +由于主机没有加载 dm\_mod.ko 导致,可以通过 modprobe dm\_mod 来解决该异常,执行如下命令: ``` modprobe dm_mod @@ -196,16 +196,16 @@ modprobe dm_mod ##### 现象描述3 -升级完成后虚拟机启动提示machine不匹配相关异常。 +升级完成后虚拟机启动提示 machine 不匹配相关异常。 ##### 处理步骤 -由于升级后machine不匹配,首先执行以下命令查询openEuler支持的machine类型。 +由于升级后 machine 不匹配,首先执行以下命令查询 openEuler 支持的 machine 类型。 ``` qemu-kvm -machine help ``` -之后执行以下命令修改对应虚拟机的machine参数为openEuler支持的类型,并再次启动虚拟机。 +之后执行以下命令修改对应虚拟机的 machine 参数为 openEuler 支持的类型,并再次启动虚拟机。 ``` virsh edit @@ -213,35 +213,35 @@ virsh edit ## 工具Web服务启动失败,提示MariaDB is not installed. ##### 现象描述 -在安装x2openEuler工具之前已通过编译安装的方式安装了MariaDB。x2openEuler工具安装完成后启动工具web服务时,返回如下信息。 +在安装 x2openEuler 工具之前已通过编译安装的方式安装了 MariaDB。x2openEuler 工具安装完成后启动工具 web 服务时,返回如下信息。 -**图 15** 启动web服务回显信息 -![](figures/startwebservice.png "启动web服务") +**图 15** 启动 web 服务回显信息 +![](figures/startwebservice.png "启动 web 服务") ##### 可能原因 -x2openEuler工具不能通过mysql.sock连接到MariaDB。 +x2openEuler 工具不能通过 mysql.sock连 接到 MariaDB。 ##### 处理步骤 -1. 执行以下命令查询MariaDB进程的PID。 +1. 执行以下命令查询 MariaDB 进程的 PID。 ``` ps -ef | grep mariadb ``` - 获取到mariadb的PID后执行以下命令终止进程。 + 获取到m ariadb 的 PID 后执行以下命令终止进程。 ``` kill -9 PID ``` -2. 注释“/etc/my.cnf”中socket参数。 - 1. 执行以下命令编辑my.cnf文件,按下“i”进入编辑模式。 +2. 注释 /etc/my.cnf 中socket参数。 + 1. 执行以下命令编辑my.cnf文件,按下 “i” 进入编辑模式。 ``` vi /etc/my.cnf ``` - 2. 注释“[mysqld]”字段下的socket参数。 + 2. 注释 [mysqld] 字段下的 socket 参数。 ``` # socket=/var/lib/mysql/mysql.sock ``` 3. 按“ESC”,输入“:wq”,按“Enter”保存并退出。 -3. 执行以下命令重启MariaDB服务。 +3. 执行以下命令重启 MariaDB 服务。 ``` systemctl start mariadb.service ``` -4. 重新启动x2openEuler工具web服务。 \ No newline at end of file +4. 重新启动 x2openEuler 工具 web 服务。 diff --git a/docs/zh/docs/x2openEuler/FeatureGuide.md b/docs/zh/docs/x2openEuler/FeatureGuide.md index a19d496e9..4737828af 100644 --- a/docs/zh/docs/x2openEuler/FeatureGuide.md +++ b/docs/zh/docs/x2openEuler/FeatureGuide.md @@ -110,7 +110,7 @@ 业务软件(rpm 包) - 使用rpm包安装的业务软件,只需填写主软件名称即可,例如安装了 docker 只需填写 docker 既可。工具将检查该软件是否存在对应的 openEuler 版本,存在则自动升级软件。 若不存在,将进行软件兼容性检查,如果该软件兼容openEuler,则保留该业务软件,检查不通过则无法升级节点。 + 使用 rpm 包安装的业务软件,只需填写主软件名称即可,例如安装了 docker 只需填写 docker 既可。工具将检查该软件是否存在对应的 openEuler 版本,存在则自动升级软件。 若不存在,将进行软件兼容性检查,如果该软件兼容 openEuler,则保留该业务软件,检查不通过则无法升级节点。 业务软件(目录) @@ -164,16 +164,16 @@ 文件迁移配置 - 自定义文件迁移的列表。文件在源OS和目标OS上的位置相同时,可直接填写文件绝对路径,例如/.../A;文件在源OS和目标OS上的位置不同时,用->连接升级前后路径,例如/.../B->/.../C + 自定义文件迁移的列表。文件在源 OS 和目标 OS 上的位置相同时,可直接填写文件绝对路径,例如 /.../A;文件在源 OS 和目标 OS 上的位置不同时,用 -> 连接升级前后路径,例如 /.../B->/.../C。 文件权限继承配置 - 自定义文件权限继承的列表。文件在源OS和目标OS上的位置相同时,可直接填写文件绝对路径,例如/.../A;文件在源OS和目标OS上的位置不同时,用->连接升级前后路径,例如/.../B->/.../C + 自定义文件权限继承的列表。文件在源 OS 和目标 OS 上的位置相同时,可直接填写文件绝对路径,例如 /.../A;文件在源 OS 和目标 OS 上的位置不同时,用 -> 连接升级前后路径,例如 /.../B->/.../C。 须知:
                -
              1. 自定义检查项上传格式固定为xxx.tar.gz,xxx是压缩目录名字,解压目录一级包含严格按照模板编写的python脚本,工具会根据返回值来判断脚本是否执行成功。脚本将在待升级节点上运行,请确保上传脚本无安全风险。
              2. +
              3. 自定义检查项上传格式固定为 xxx.tar.gz,xxx 是压缩目录名字,解压目录一级包含严格按照模板编写的 python 脚本,工具会根据返回值来判断脚本是否执行成功。脚本将在待升级节点上运行,请确保上传脚本无安全风险。
              4. 脚本上传路径默认为 /opt/x2openEuler/scripts-execute/upload/。
              5. 使用 chown -R x2openEuler:x2openEuler xxx.tar.gz 修改文件拥有者和群组。
              @@ -207,15 +207,15 @@ 须知:
                -
              1. SMT自定义脚本上传格式固定为xxx.tar.gz包,xxx是压缩目录名字,解压目录一级包含SMT前置脚本执行入口pre_run.sh、SMT后置脚本执行入口post_run.sh,自定义脚本执行是否成功不应影响SMT本身的执行。脚本将在待升级节点上运行,请确保上传脚本无安全风险。
              2. +
              3. SMT 自定义脚本上传格式固定为 xxx.tar.gz 包,xxx 是压缩目录名字,解压目录一级包含 SMT 前置脚本执行入口 pre_run.sh、SMT 后置脚本执行入口post_run.sh,自定义脚本执行是否成功不应影响 SMT 本身的执行。脚本将在待升级节点上运行,请确保上传脚本无安全风险。
              4. 脚本上传路径默认为 /opt/x2openEuler/scripts-execute/upload/。
              5. 使用 chown -R x2openEuler:x2openEuler xxx.tar.gz 修改文件拥有者和群组。
              - SMT自定义脚本 - 填写SMT自定义脚本路径,前置脚本、后置脚本分别在重启后的SMT脚本之前和之后执行。 + SMT 自定义脚本 + 填写 SMT 自定义脚本路径,前置脚本、后置脚本分别在重启后的 SMT 脚本之前和之后执行。 @@ -524,13 +524,13 @@ **图 9** 批量导入 ![批量导入](figures/batchimport.png "批量导入") - 2. 完成节点信息的填写后单击“上传文件”阅读“SSH传输须知”,选择已填写节点信息的批量导入文件进行上传。 + 2. 完成节点信息的填写后单击“上传文件”阅读 “SSH 传输须知”,选择已填写节点信息的批量导入文件进行上传。 **图 10** SSH传输须知 ![SSH传输须知](figures/sshnote.png "SSH传输须知-0") - 添加节点:添加单个节点的节点信息。 - 在“添加节点”页面,参考[表 6](#sheet6)输入相应信息后,单击“确定”进行节点添加。 + 在“添加节点”页面,参考 [表 6](#sheet6) 输入相应信息后,单击“确定”进行节点添加。 **表 6** 节点信息参数说明 @@ -540,12 +540,12 @@ 说明 - SSH传输须知 + SSH 传输须知 节点管理使用服务器默认的 SSH 传输通道,为了保护数据的安全完整,建议使用安全的 ssh 服务,如使用安全的 ssh 版本,配置使用安全的加密算法等。 待升级节点 IP - 待升级节点 IP地址。
              说明:
              待升级节点与部署 openEuler web 工具的环境需要保持可联通状态。 + 待升级节点 IP 地址。
              说明:
              待升级节点与部署 openEuler web 工具的环境需要保持可联通状态。 节点别名 @@ -598,7 +598,7 @@
            1. 输入多个软件目录或 rpm 包名称时,请用英文逗号分隔。
            2. 业务软件(rpm 包):使用 rpm 包安装的业务软件,只需填写主软件名称即可,例如安装了 docker 只需填写 docker 既可。 工具将检查该软件是否存在对应的 openEuler 版本,存在则自动升级软件。 若不存在,将进行软件兼容性检查,如果该软件兼容 openEuler,则保留该业务软件,检查不通过则无法升级节点。
            3. 业务软件(目录):使用解压包,源码编译安装的软件,需填写业务软件实际的路径, 该路径只能包含业务软件,不能包含其他与业务软件不相关的文件。 工具将检查该软件在 openEuler 操作系统上的兼容性, 检查通过后即可升级节点并保留原始业务软件,检查不通过则无法升级节点。
            4. -
            5. 不需升级的业务软件(rpm 包):使用rpm包安装的业务软件,只需填写主软件名称即可,例如安装了 docker 只需填写 docker 即可。 工具将检查该软件在 openEuler 操作系统上的兼容性,检查通过后即可升级节点并保留原始版本包。 检查不通过则无法升级节点。
            6. +
            7. 不需升级的业务软件(rpm 包):使用 rpm 包安装的业务软件,只需填写主软件名称即可,例如安装了 docker 只需填写 docker 即可。 工具将检查该软件在 openEuler 操作系统上的兼容性,检查通过后即可升级节点并保留原始版本包。 检查不通过则无法升级节点。
            8. 升级后新安装软件:使用rpm包安装的业务软件,只需填写主软件名称即可。例如操作系统升级后安装了 docker 只需填写 docker 即可。工具将检查该软件在 openEuler 操作系统上的兼容性,检查通过后即可在升级后安装该软件。检查不通过则无法安装该软件。
          @@ -1088,7 +1088,7 @@ -3. 单击“确定“,执行软件评估任务。评估完成后,工具将自动跳转至分析结果界面,分析结果分为软件依赖关系图和软件评估报告,如 [图22](#figure22) 所示,软件评估报告详细参数描述如 [表 13](#sheet13) 所示。 +3. 单击“确定“,执行软件评估任务。评估完成后,工具将自动跳转至分析结果界面,分析结果分为软件依赖关系图和软件评估报告,如 [图 22](#figure22) 所示,软件评估报告详细参数描述如 [表 13](#sheet13) 所示。 > ![说明](public_sys-resources/icon-note.gif) **说明:** > @@ -1156,7 +1156,7 @@

          表示扫描 Jar 包中调用的 jdk 接口在待迁移的系统上对应满足运行条件的最小 jdk 上发生的变更。

            -
          • openEuler jdk:openEuler 上满足 Jar 包运行环境的最小jdk版本。
          • +
          • openEuler jdk:openEuler 上满足 Jar 包运行环境的最小 jdk 版本。
          • 对象构建 jdk:扫描 jar 包对应构建的 jdk 版本。
          • jar 包名:扫描的 jar 包名称。
          • 方法名:存在接口差异的方法名。
          • @@ -1229,7 +1229,7 @@ ```sh x2openEuler-upgrade-check upgrade-check \ --repo \ +-repo \ -o <报告输出路径> \ -target_os_name <目标系统版本> \ -os_name <当前系统版本> \ @@ -1238,7 +1238,7 @@ x2openEuler-upgrade-check upgrade-check \ **参数说明:** -1. `-repo `:指定目标系统的 repo 源信息。多个源用逗号分隔。 +1. `-repo `:指定目标系统的 repo 源信息。多个源用逗号分隔。 示例: ``` http://mirrors.tools.huawei.com/openeuler/openEuler-24.03-LTS/everything/x86_64/,\ @@ -1318,4 +1318,4 @@ OTHERS \ ```sh reboot -``` \ No newline at end of file +``` diff --git a/docs/zh/docs/x2openEuler/InstallationGuide.md b/docs/zh/docs/x2openEuler/InstallationGuide.md index 9dfbf3115..5e0ec8831 100644 --- a/docs/zh/docs/x2openEuler/InstallationGuide.md +++ b/docs/zh/docs/x2openEuler/InstallationGuide.md @@ -1,7 +1,7 @@ # 安装指南 ## 环境要求 ##### 操作系统要求 -- x2openEuler web工具部署要求如[表1](#sheet1)所示。 +- x2openEuler web 工具部署要求如 [表 1](#sheet1) 所示。 **表 1** 操作系统要求 @@ -31,7 +31,7 @@ -- 待升级节点操作系统要求如[表2](#sheet2)所示。 +- 待升级节点操作系统要求如 [表 2](#sheet2) 所示。 **表 2** 操作系统要求 @@ -57,7 +57,7 @@
          • openEuler 22.03-LTS-SPx
          • openEuler 24.03-LTS-SPx
            - (当前暂不支持Ubuntu 18.04升级至openEuler 24.03-LTS-SPx) + (当前暂不支持 Ubuntu 18.04 升级至 openEuler 24.03-LTS-SPx)
          @@ -66,7 +66,7 @@ ##### 硬件要求 -部署x2openEuler web工具硬件要求如[表3](#sheet3)所示。 +部署 x2openEuler web 工具硬件要求如 [表 3](#sheet3) 所示。 **表 3** 硬件要求 @@ -79,31 +79,31 @@ 服务器
            -
          • x86服务器
          • -
          • 基于鲲鹏916/920的服务器
          • +
          • x86 服务器
          • +
          • 基于鲲鹏 916/920 的服务器
          CPU - 四核2.5GHz及以上(8核心及以上) + 四核 2.5GHz 及以上(8 核心及以上) 内存 - 系统空闲内存要求16GB及以上 + 系统空闲内存要求 16GB 及以上 安装空间 - 20GB及以上剩余空间 + 20GB 及以上剩余空间 >![](public_sys-resources/icon-note.gif) **说明:** ->待升级节点无特别要求,但需要保持内存在2GB及以上,否则会导致升级因内存不足而失败。 +>待升级节点无特别要求,但需要保持内存在 2GB 及以上,否则会导致升级因内存不足而失败。 ## 获取软件包 -安装过程中所需软件包如[表4](#sheet4)所示。 +安装过程中所需软件包如 [表 4](#sheet4) 所示。 **表 4** 获取工具软件包 @@ -116,24 +116,24 @@
            -
          • x86服务器:x2openEuler-core-x.x.x-xx.x86_64.rpm
          • -
          • 基于鲲鹏916/920的服务器:x2openEuler-core-x.x.x-xx.aarch64.rpm
          • +
          • x86 服务器:x2openEuler-core-x.x.x-xx.x86_64.rpm
          • +
          • 基于鲲鹏 916/920 的服务器:x2openEuler-core-x.x.x-xx.aarch64.rpm
          - x2openEuler工具安装包 - oepkgs社区获取软件包 + x2openEuler 工具安装包 + oepkgs 社区获取软件包 >![](public_sys-resources/icon-note.gif) **说明:** ->- 软件包名称中的“x.x.x”表示版本号。 +>- 软件包名称中的 “x.x.x” 表示版本号。 >- 软件包中包含有针对待升级节点的分析工具接口。 ## 软件数字签名验证 为了防止软件包在传递过程或存储期间被恶意篡改,下载软件包时需下载对应的数字签名文件用于完整性验证。 -在软件包下载之后,请参考《OpenPGP签名验证指南》,对从社区站点获取的软件包进行PGP数字签名校验。如果校验失败,请不要使用该软件包,重新从社区网站获取即可。 +在软件包下载之后,请参考《OpenPGP 签名验证指南》,对从社区站点获取的软件包进行 PGP 数字签名校验。如果校验失败,请不要使用该软件包,重新从社区网站获取即可。 使用软件包安装/升级之前,也需要按上述过程先验证软件包的数字签名,确保软件包未被篡改。 @@ -145,35 +145,35 @@ ## 安装 ##### 前提条件 -- 已获取x2openEuler工具安装包。 -- 已安装远程SSH登录工具,如Xshell、MobaXterm、PuTTY等。 -- 已安装sftp工具。 -- 待升级环境可以通过网络访问本地配置的CentOS yum源。 +- 已获取 x2openEuler 工具安装包。 +- 已安装远程 SSH 登录工具,如 Xshell、MobaXterm、PuTTY 等。 +- 已安装 sftp 工具。 +- 待升级环境可以通过网络访问本地配置的 CentOS yum源 。 - 工具安装环境需开启工具端口。 ##### 操作步骤 -1. 此处以在x86环境上安装x2openEuler工具为例,使用sftp工具将安装包x2openEuler-core-_x.x.x-xx_.x86\_64.rpm上传至远程服务器的/root目录下。 -2. 使SSH远程登录工具登录至需要远程服务器命令行界面。 -3. 执行以下命令安装x2openEuler工具。 +1. 此处以在 x86 环境上安装 x2openEuler 工具为例,使用 sftp 工具将安装包 x2openEuler-core-_x.x.x-xx_.x86\_64.rpm 上传至远程服务器的 /root 目录下。 +2. 使 SSH 远程登录工具登录至需要远程服务器命令行界面。 +3. 执行以下命令安装 x2openEuler 工具。 ``` yum install -y /root/x2openEuler-core-x.x.x-xx.x86_64.rpm ``` -4. 工具包安装成功后,执行以下命令启动web服务。 +4. 工具包安装成功后,执行以下命令启动 web 服务。 >![](public_sys-resources/icon-note.gif) **说明:** - >- 如web服务受SELinux策略无法正常运行,请更改SELinux策略或[关闭SELinux](CommonOperation.md#seoff)。 - >- 如web服务需停止或重启请参考[启动/停止/重启服务](CommonOperation.md#servicemanager)。 - >- 首次启动服务时,需要配置MariaDB用户密码。密码需要满足如下复杂度要求: - > - 密码长度为8\~32个字符 + >- 如 web 服务受 SELinux策略无法正常运行,请更改 SELinux 策略或 [关闭SELinux](CommonOperation.md#seoff)。 + >- 如 web 服务需停止或重启请参考 [启动/停止/重启服务](CommonOperation.md#servicemanager)。 + >- 首次启动服务时,需要配置 MariaDB 用户密码。密码需要满足如下复杂度要求: + > - 密码长度为 8\~32 个字符 > - 必须包含大写字母、小写字母、数字、特殊字符(\`\~!@\#$%^&\*\(\)-\_=+\\|\[\{\}];:'",<.\>/?)中的两种及以上类型的组合 > - 密码不能包含空格 > - 密码不能是用户名 - > - 密码不能在[弱口令字典](CommonOperation.md#weakpasswd)中 - >- 建议对数据库x2openEuler用户密码定期进行修改,确保业务安全运行。 - >- 如本地已存在MariaDB数据库,建议更新MariaDB到最新版本,并禁止远程访问数据库。 + > - 密码不能在 [弱口令字典](CommonOperation.md#weakpasswd) 中 + >- 建议对数据库 x2openEuler 用户密码定期进行修改,确保业务安全运行。 + >- 如本地已存在 MariaDB 数据库,建议更新 MariaDB 到最新版本,并禁止远程访问数据库。 ``` cd /usr/local/x2openEuler/portal/service @@ -250,13 +250,13 @@ success ``` - 2. 配置x2openEuler服务。 + 2. 配置 x2openEuler 服务。 - - 配置数据库用户x2openEuler密码。 - - 配置是否启用SSH身份验证。 - - 配置Web Server的IP地址。 - - 配置HTTPS端口,默认端口为18082。 - - 配置GUNICORN端口,默认端口为18080。 + - 配置数据库用户 x2openEuler 密码。 + - 配置是否启用 SSH 身份验证。 + - 配置 Web Server 的 IP 地址。 + - 配置 HTTPS 端口,默认端口为 18082。 + - 配置 GUNICORN 端口,默认端口为 18080。 ``` Enter the password of the root user of the MariaDB again: @@ -334,20 +334,20 @@ ## 验证 -##### web模式下验证安装结果 +##### web 模式下验证安装结果 -登录Web界面,详细步骤请参见[登录x2openEuler工具Web界面](Introduce.md#loginweb),能够成功登录说明x2openEuler工具安装成功。 +登录 Web 界面,详细步骤请参见 [登录 x2openEuler 工具 Web 界面](Introduce.md#loginweb),能够成功登录说明 x2openEuler 工具安装成功。 -##### CLI模式下验证安装结果 +##### CLI 模式下验证安装结果 -1. 使用SSH远程登录工具,进入x2openEuler工具部署节点命令行界面。 +1. 使用 SSH 远程登录工具,进入 x2openEuler 工具部署节点命令行界面。 2. 执行如下命令查看版本信息。 ``` rpm -qa x2openEuler-core ``` - 显示如下格式内容说明安装成功(其中“x.x.x-x”表示版本号,请以实际情况为准)。 + 显示如下格式内容说明安装成功(其中 “x.x.x-x” 表示版本号,请以实际情况为准)。 ``` x2openEuler-core-x.x.x-x.x86_64 @@ -358,22 +358,22 @@ ##### 前提条件 - 已将所需升级的迁移工具的软件包下载到本地,并确认软件包与服务器硬件平台一致。 - 获取软件包后,需要校验软件包,确保与网站上的原始软件包一致,详细步骤请参见[软件数字签名验证](#pgpverfy)。 + 获取软件包后,需要校验软件包,确保与网站上的原始软件包一致,详细步骤请参见 [软件数字签名验证](#pgpverfy)。 -- 升级前请确认x2openEuler工具可以正常使用。 -- 工具默认安装在“/usr/local/x2openEuler”目录,升级前请确认安装空间充足。 +- 升级前请确认 x2openEuler 工具可以正常使用。 +- 工具默认安装在 /usr/local/x2openEuler 目录,升级前请确认安装空间充足。 ##### 操作步骤 -1. 使用SSH远程登录工具,进入Linux操作系统命令行界面。 +1. 使用 SSH 远程登录工具,进入 Linux 操作系统命令行界面。 -2. 将x2openEuler工具软件包传输至服务器自定义目录下,执行以下命令进行升级。 +2. 将 x2openEuler 工具软件包传输至服务器自定义目录下,执行以下命令进行升级。 ``` cd 自定义目录 rpm -Uvh x2openEuler-core-x.x.x-xx.x86_64.rpm ``` -3. 根据提示,进入/usr/local/x2openEuler/portal/service目录,执行upgrade_migrate_data.sh脚本。 +3. 根据提示,进入 /usr/local/x2openEuler/portal/service 目录,执行 upgrade_migrate_data.sh 脚本。 ``` cd /usr/local/x2openEuler/portal/service bash upgrade_migrate_data.sh @@ -389,24 +389,24 @@ ##### 前提条件 - 已将所需回退的迁移工具的软件包下载到本地,并确认软件包与服务器硬件平台一致。 - 获取软件包后,需要校验软件包,确保与网站上的原始软件包一致,详细步骤请参见[软件数字签名验证](#pgpverfy)。 + 获取软件包后,需要校验软件包,确保与网站上的原始软件包一致,详细步骤请参见 [软件数字签名验证](#pgpverfy)。 -- 回退前请确认x2openEuler工具可以正常使用。 -- 工具默认安装在“/usr/local/x2openEuler”目录,回退前请确认安装空间充足。 +- 回退前请确认 x2openEuler 工具可以正常使用。 +- 工具默认安装在 /usr/local/x2openEuler 目录,回退前请确认安装空间充足。 ##### 操作步骤 >![](public_sys-resources/icon-note.gif) **说明:** ->若回退前版本工具中存在环境检查通过的任务,则需在回退完成后卸载掉对应待升级节点的x2openEuler-upgrade包(例:x2openEuler-upgrade-x.x.x.x86_64)。 +>若回退前版本工具中存在环境检查通过的任务,则需在回退完成后卸载掉对应待升级节点的 x2openEuler-upgrade 包(例:x2openEuler-upgrade-x.x.x.x86_64)。 -1. 使用SSH远程登录工具,进入Linux操作系统命令行界面。 +1. 使用 SSH 远程登录工具,进入 Linux 操作系统命令行界面。 -2. 将x2openEuler工具软件包传输至服务器自定义目录下,执行以下命令进行回退。 +2. 将 x2openEuler 工具软件包传输至服务器自定义目录下,执行以下命令进行回退。 ``` cd 自定义目录 rpm -Uvh --oldpackage x2openEuler-core-x.x.x-xx.x86_64.rpm ``` -3. 根据提示,进入/usr/local/x2openEuler/portal/service目录,执行upgrade_migrate_data.sh脚本。 +3. 根据提示,进入 /usr/local/x2openEuler/portal/service 目录,执行 upgrade_migrate_data.sh 脚本。 ``` cd /usr/local/x2openEuler/portal/service bash upgrade_migrate_data.sh @@ -422,8 +422,8 @@ ##### 前提条件 没有正在运行中的任务。 ##### 操作步骤 -1. 使用SSH工具远程登录进入操作系统命令行界面。 -2. 执行如下命令卸载x2openEuler工具。 +1. 使用 SSH 工具远程登录进入操作系统命令行界面。 +2. 执行如下命令卸载 x2openEuler 工具。 ``` yum -y remove x2openEuler-core-x.x.x-x.x86_64 @@ -431,42 +431,42 @@ >![](public_sys-resources/icon-note.gif) **说明:** >- 当用户执行卸载命令时,如果有正在运行的任务,用户需要先终止或等待运行的任务结束。若用户仍选择卸载,当前运行的任务会直接中断。 - >- 当用户执行卸载命令时,需要确保当前用户所在客户端为唯一操作远端服务器x2openEuler工具的客户端,否则可能会因删除用户失败而导致工具卸载失败。 - >- 卸载完成后,x2openEuler用户、“/home/x2openEuler“和“/var/spool/mail/x2openEuler“相关文件目录会被自动移除,以保证系统环境安全。 + >- 当用户执行卸载命令时,需要确保当前用户所在客户端为唯一操作远端服务器 x2openEuler 工具的客户端,否则可能会因删除用户失败而导致工具卸载失败。 + >- 卸载完成后,x2openEuler 用户、/home/x2openEuler 和 /var/spool/mail/x2openEuler 相关文件目录会被自动移除,以保证系统环境安全。 -3. 清理x2openEuler工具的数据库。 - 1. 执行以下命令输入密码后登录MariaDB。 +3. 清理 x2openEuler 工具的数据库。 + 1. 执行以下命令输入密码后登录 MariaDB。 ``` mysql -u root -p ``` - 2. 执行以下SQL语句删除x2openEuler工具的数据库。此处以删除名为x2openEulerDb的数据库为例。 + 2. 执行以下 SQL 语句删除 x2openEuler 工具的数据库。此处以删除名为 x2openEulerDb 的数据库为例。 ``` DROP DATABASE IF EXISTS x2openEulerDb; ``` - 3. 执行以下SQL语句清除x2openEuler工具的数据库用户。 + 3. 执行以下 SQL 语句清除 x2openEuler 工具的数据库用户。 ``` DELETE FROM mysql.user WHERE User='x2openEuler'; DELETE FROM mysql.db WHERE User='x2openEuler'; ``` - 4. 执行以下SQL语句查询并确认x2openEuler工具的数据库及用户是否已删除。 + 4. 执行以下 SQL 语句查询并确认 x2openEuler 工具的数据库及用户是否已删除。 ``` show databases; SELECT Host,User,Password FROM mysql.user; ``` -4. (可选)卸载MariaDB。 +4. (可选)卸载 MariaDB。 >![](public_sys-resources/icon-notice.gif) **须知:** - >卸载MariaDB之前,请确保业务环境无MariaDB使用需求且不影响运行环境及业务。 + >卸载 MariaDB 之前,请确保业务环境无 MariaDB 使用需求且不影响运行环境及业务。 - 1. 执行以下命令卸载MariaDB。 + 1. 执行以下命令卸载 MariaDB。 ``` rpm -qa | grep mariadb | xargs yum remove -y diff --git a/docs/zh/docs/x2openEuler/Introduce.md b/docs/zh/docs/x2openEuler/Introduce.md index 55bf9b8d2..3286fbad2 100644 --- a/docs/zh/docs/x2openEuler/Introduce.md +++ b/docs/zh/docs/x2openEuler/Introduce.md @@ -15,7 +15,7 @@ ### 使用声明 -本文档依据 CC BY 4.0 许可证进行授权,使用声明详细内容请访问 [openEuler 许可协议](https://gitee.com/openeuler/docs/tree/stable2-20.03_LTS_SP1) 中“CC-BY-SA-4.0”页签。 +本文档依据 CC BY 4.0 许可证进行授权,使用声明详细内容请访问 [openEuler 许可协议](https://gitee.com/openeuler/docs/tree/stable2-20.03_LTS_SP1) 中 “CC-BY-SA-4.0” 页签。 ### 符号约定 @@ -165,7 +165,7 @@ x2openEuler 工具是一款将源操作系统升级为目标操作系统的搬迁工具套件,工具支持原地升级功能。 -当客户运行环境的操作系统生命周期即将 EOS,但依托于业务运行的相关应用软件和产品还未到结束生命周期时,为了保障业务的持续性和安全性,可使用x2openEuler工具将源操作系统升级到新的目标操作系统。 +当客户运行环境的操作系统生命周期即将 EOS,但依托于业务运行的相关应用软件和产品还未到结束生命周期时,为了保障业务的持续性和安全性,可使用 x2openEuler 工具将源操作系统升级到新的目标操作系统。 x2openEuler 工具提供 web 界面方式进行操作,以供使用者能够在图形化界面便捷的进行升级操作。 @@ -193,7 +193,7 @@ x2openEuler 工具提供命令行或者web使用方式,用户在安装完成 ##### 界面分区 -x2openEuler工具首页界面主要由如 [图1](#figure1) 所示的区域组成,各个区域的作用如 [图1](#figure1) 所示。 +x2openEuler 工具首页界面主要由如 [图 1](#figure1) 所示的区域组成,各个区域的作用如 [图 1](#figure1) 所示。 **图 1** x2openEuler 工具首页界面 ![](figures/ "x2openEuler 工具首页界面") @@ -240,7 +240,7 @@ x2openEuler工具首页界面主要由如 [图1](#figure1) 所示的区域组成 ##### 图标及按钮说明 -x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示。 +x2openEuler 工具中出现的图标/按钮及其说明如 [表 2](#sheet2) 所示。 **表 2** 图标/按钮说明 @@ -330,7 +330,7 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 ##### 浏览器要求 -浏览器要求如 [表3](#sheet3) 所示。 +浏览器要求如 [表 3](#sheet3) 所示。 **表 3** 浏览器要求 @@ -368,11 +368,11 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 >- 单个用户只允许 1 个活跃会话,如果当前用户已经在登录使用,重复登录会挤掉前面的登录。 >- 用户首次登录时会弹出免责声明弹窗,用户仔细阅读后,勾选“我已阅读以上内容“,点击“确认“后才能使用本工具,如点击“取消“将会退出工具。 -1. 打开本地PC机的浏览器,在地址栏输入 **https://_部署服务器的ip_:_端口号_**(例如:),按 “Enter”。 +1. 打开本地 PC 机的浏览器,在地址栏输入 **https://_部署服务器的ip_:_端口号_**(例如:),按 “Enter”。 >![](public_sys-resources/icon-note.gif) **说明:** >HTTPS 默认端口为 18082,请确认使用该工具之前 OS 防火墙已开通 18082 端口。 -2. 在如 [图2](#figure2) 所示的安全告警窗口中选择“继续浏览此网站”。 +2. 在如 [图 2](#figure2) 所示的安全告警窗口中选择“继续浏览此网站”。 >![](public_sys-resources/icon-note.gif) **说明:** >登录时可能会弹出“安全告警”界面,您可以选择忽略此告警信息或者下载华为根证书屏蔽该界面,详细步骤请参见 [为 x2openEuler Upgrade 工具导入根证书](CommonOperation.md#importcert)。 @@ -380,7 +380,7 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 **图 2** 安全告警 ![](figures/safetywarning.png "安全告警") - 打开首次登录界面,如 [图3](#figure3) 所示,参数说明如 [表4](#sheet4) 所示。 + 打开首次登录界面,如 [图 3](#figure3) 所示,参数说明如 [表 4](#sheet4) 所示。 **图 3** 首次登录 x2openEuler 工具 ![](figures/firstlogin.png "首次登录 x2openEuler 工具") @@ -415,7 +415,7 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 3. 设置管理员密码,单击“确认”。 - 打开登录界面,如 [图4](#figure4) 所示,参数说明如 [表5](#sheet5) 所示。 + 打开登录界面,如 [图 4](#figure4) 所示,参数说明如 [表 5](#sheet5) 所示。 **图 4** 非首次登录 x2openEuler 工具 ![](figures/notthefirstlogin.png "非首次登录 x2openEuler 工具") @@ -476,7 +476,7 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 ##### 操作步骤 1. 单击页面右上角![](figures/zh-cn_image_0000001575796977.png),在下拉菜单中选择“用户管理“,打开用户管理界面。 -2. 单击“创建“,打开“创建”界面,如 [图5](#figure5) 所示,需配置的参数如 [表6](#sheet6) 所示。 +2. 单击“创建“,打开“创建”界面,如 [图 5](#figure5) 所示,需配置的参数如 [表 6](#sheet6) 所示。 **图 5** 创建用户 ![](figures/createuser.png "创建用户") @@ -519,7 +519,7 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 再次输入设置的密码 -3. 参考 [表6](#sheet6) 配置新用户后,单击“确认”。 +3. 参考 [表 6](#sheet6) 配置新用户后,单击“确认”。 >![](public_sys-resources/icon-note.gif) **说明:** > @@ -538,7 +538,7 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 ##### 操作步骤 1. 单击页面右上角![](figures/icons/settings.png),在下拉菜单中选择“系统配置“,打开系统配置界面。 -2. 系统配置界面如 [图6](#figure6) 所示,单击“修改”,对配置项进行修改,需配置的参数如 [表7](#sheet7) 所示。 +2. 系统配置界面如 [图 6](#figure6) 所示,单击“修改”,对配置项进行修改,需配置的参数如 [表 7](#sheet7) 所示。 **图 6** 系统配置 ![](figures/systemconfig.png "系统配置") @@ -575,7 +575,7 @@ x2openEuler工具中出现的图标/按钮及其说明如[表2](#sheet2)所示 密码有效期(天) - 表示用户密码有效期限,默认值90天,可配置范围 7~90 天。 + 表示用户密码有效期限,默认值 90 天,可配置范围 7~90 天。 3. 选择对应配置项完成修改后,单击“确定”保存修改内容,单击“取消”放弃修改内容。 -- Gitee From c87368d45fb8f20cac3f591aa6776dbe823d98ae Mon Sep 17 00:00:00 2001 From: shupiaoyang Date: Fri, 22 Nov 2024 09:46:02 +0800 Subject: [PATCH 16/16] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E8=A1=8C=E6=8C=87=E5=AF=BC=E4=B8=AD=E7=9A=84repo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/docs/x2openEuler/FeatureGuide.md | 25 ++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/docs/zh/docs/x2openEuler/FeatureGuide.md b/docs/zh/docs/x2openEuler/FeatureGuide.md index 4737828af..985b44b95 100644 --- a/docs/zh/docs/x2openEuler/FeatureGuide.md +++ b/docs/zh/docs/x2openEuler/FeatureGuide.md @@ -1192,7 +1192,7 @@ ### 环境准备 -下面以 `CentOS 7.9 x86_64` 系统为例,介绍如何将其升级为 `openEuler 24.03-LTS`。 +下面以 `CentOS 7.9 x86_64` 系统为例,介绍如何将其升级为 `openEuler 22.03-LTS-SP4`。 1. 安装 x2openEuler 工具 @@ -1207,6 +1207,7 @@ yum install -y x2openEuler-upgrade-*.rpm ``` + > ![说明](public_sys-resources/icon-note.gif) **说明:** > 若路径下存在多个 RPM 包,请使用完整的文件名进行安装。 2. 收集信息 @@ -1221,7 +1222,7 @@ > 2024-10-23 16:43:37,373 - USER_ID:0 - INFO - Collect Success! The Archive file results are saved: /opt/x2openEuler-client/output/collect/collect-\.tar.gz - 保存输出中的 `uuid`,该信息将在后续操作中使用。本文的示例中,`uuid` 为:`d8cf5ae2-911a-11ef-a25b-00155d306854`。 + 保存输出中的 `uuid`,该信息将在后续操作中使用。在此示例中,`uuid` 为:`d8cf5ae2-911a-11ef-a25b-00155d306854`。 ### 软件兼容性检查 @@ -1241,14 +1242,14 @@ x2openEuler-upgrade-check upgrade-check \ 1. `-repo `:指定目标系统的 repo 源信息。多个源用逗号分隔。 示例: ``` - http://mirrors.tools.huawei.com/openeuler/openEuler-24.03-LTS/everything/x86_64/,\ - http://mirrors.tools.huawei.com/openeuler/openEuler-24.03-LTS/EPOL/main/x86_64/,\ - http://mirrors.tools.huawei.com/openeuler/openEuler-24.03-LTS/update/x86_64/ + http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/x86_64/,\ + http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/main/x86_64/,\ + http://repo.openeuler.org/openEuler-22.03-LTS-SP4/update/x86_64/ \ ``` 2. `-o <报告输出路径>`:指定生成的兼容性报告文件输出路径。 示例:`/opt/x2openEuler-client/output/collect/collect-.tar.gz` 3. `-target_os_name <目标系统版本>`:目标系统版本号。 - 示例:`openEuler24.03-LTS` + 示例:`openEuler22.03-LTS-SP4` 4. `-os_name <当前系统版本>`:当前系统版本号。可选项有:`CentOS6`、`CentOS7`、`CentOS8`、`Ubuntu`、`SuSE11`、`SuSE12`、`openEuler20.03`、`openEuler22.03`。 示例:`CentOS7` 5. `-schema 2`:指定升级方案 2,请勿修改。 @@ -1258,11 +1259,11 @@ x2openEuler-upgrade-check upgrade-check \ ```bash x2openEuler-upgrade-check upgrade-check \ -repo \ -http://mirrors.tools.huawei.com/openeuler/openEuler-24.03-LTS/everything/x86_64/,\ -http://mirrors.tools.huawei.com/openeuler/openEuler-24.03-LTS/EPOL/main/x86_64/,\ -http://mirrors.tools.huawei.com/openeuler/openEuler-24.03-LTS/update/x86_64/ \ +http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/x86_64/,\ +http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/main/x86_64/,\ +http://repo.openeuler.org/openEuler-22.03-LTS-SP4/update/x86_64/ \ -o /opt/x2openEuler-client/output/collect/collect-d8cf5ae2-911a-11ef-a25b-00155d306854.tar.gz \ --target_os_name openEuler24.03-LTS \ +-target_os_name openEuler22.03-LTS-SP4 \ -os_name CentOS7 \ -schema 2 ``` @@ -1295,7 +1296,7 @@ bash /opt/x2openEuler-upgrade/upgrade_entrance.sh upgrade \ 8. **临时安装路径**:升级时的临时文件路径。该路径必须在`/root`、`/home`、`/data`、`/oracle`中的某个路径下,且不能与备份路径相同。 示例:`/root` 9. **repo文件路径**:指定 repo 文件路径,用于新系统的源配置。 - 示例:`/opt/x2openEuler/repo_files/migrate-oe2403.repo` + 示例:`/opt/x2openEuler/repo_files/migrate-oe2203sp4.repo` **示例**: @@ -1309,7 +1310,7 @@ crashkernel=512M,net.ifnames=0,biosdevname=0 \ /opt/x2openEuler-upgrade/output/upgrade-check/d8cf5ae2-911a-11ef-a25b-00155d306854/rpm_dep-d8cf5ae2-911a-11ef-a25b-00155d306854.txt \ OTHERS \ /root \ -/opt/x2openEuler/repo_files/migrate-oe2403.repo +/opt/x2openEuler/repo_files/migrate-oe2203sp4.repo ``` ### 重启 -- Gitee