diff --git a/docs/zh/server/_toc.yaml b/docs/zh/server/_toc.yaml index 0a55a7055fe556d4c9904a724a5430cd3bc63d3e..ee70eb69d777e625c0036ba9e230bb1597751806 100644 --- a/docs/zh/server/_toc.yaml +++ b/docs/zh/server/_toc.yaml @@ -1 +1,243 @@ -label: 服务器 +isManual: true +label: '' +sections: + - label: 管理员指南 + href: ./administration/administrator/administration.md + - label: 基础配置 + href: ./administration/administrator/basic_configuration.md + - label: 搭建FTP服务器 + href: ./administration/administrator/configuring_the_ftp_server.md + - label: 搭建repo服务器 + href: ./administration/administrator/configuring_the_repo_server.md + - label: 搭建web服务器 + href: ./administration/administrator/configuring_the_web_server.md + - label: 管理进程 + href: ./administration/administrator/process_management.md + - label: 管理服务 + href: ./administration/administrator/service_management.md + - label: 搭建数据库服务器 + href: ./administration/administrator/setting_up_the_database_server.md + - label: 管理用户 + href: ./administration/administrator/user_and_user_group_management.md + - label: 使用DNF管理软件包 + href: ./administration/administrator/using_dnf_to_manage_software_packages.md + - label: 查看系统信息 + href: ./administration/administrator/viewing_system_infortmation.md + - label: 兼容性命令 + href: ./administration/compa_command/overview.md + - label: utshell 用户手册 + href: ./administration/compa_command/utshell_guide.md + - label: utsudo 使用指南 + href: ./administration/compa_command/utsudo_user_guide.md + - label: 设备管理 + href: ./administration/sysmaster/device_management.md + - label: 安装与部署 + href: ./administration/sysmaster/devmaster_install_deploy.md + - label: 使用说明 + href: ./administration/sysmaster/devmaster_usage.md + - label: sysMaster用户指南 + href: ./administration/sysmaster/overview.md + - label: 服务管理 + href: ./administration/sysmaster/service_management.md + - label: 安装与部署 + href: ./administration/sysmaster/sysmaster_install_deploy.md + - label: sysmaster使用说明 + href: ./administration/sysmaster/sysmaster_usage.md + - label: AI4C使用手册 + href: ./development/ai4c/ai4c_user_manual.md + - label: 应用开发指南 + href: ./development/application_dev/application_development.md + - label: 构建RPM包 + href: ./development/application_dev/building_an_rpm_package.md + - label: FAQ + href: ./development/application_dev/faq.md + - label: 安装obs工具 + href: ./development/application_dev/Installing_obs.md + - label: 开发环境准备 + href: ./development/application_dev/perparations_for_development_environment.md + - label: 使用GCC编译 + href: ./development/application_dev/using_gcc_for_compilation.md + - label: 使用JDK编译 + href: ./development/application_dev/using_jdk_for_compilation.md + - label: 使用make编译 + href: ./development/application_dev/using_make_for_compilation.md + - label: 安装与部署 + href: ./development/fangtian/fangtian_environment_configuration.md + - label: Linux Wayland 应用及鸿蒙应用的支持 + href: >- + ./development/fangtian/fangtian_for_linux_waylan_and_openharmony_applications.md + - label: FangTian 视窗引擎指南 + href: ./development/fangtian/overview.md + - label: '**1** 容器管理面无感卸载' + href: >- + ./diversified_computing/dpu_offload/container_management_plane_direct_connection_aggregation_environment_establishment.md + - label: '**1** 硬件准备' + href: >- + ./diversified_computing/dpu_offload/libvirt_direct_connection_aggregation_environment_establishment.md + - label: qtfs + href: ./diversified_computing/dpu_offload/qtfs_architecture_and_usage.md + - label: HA的安装与部署 + href: ./high_availability/ha/ha_installation_and_deployment.md + - label: HA使用实例 + href: ./high_availability/ha/ha_usecase_examples.md + - label: FAQ + href: ./installation_upgrade/installation/faq.md + - label: FAQ + href: ./installation_upgrade/installation/faq_1.md + - label: 安装指南 + href: ./installation_upgrade/installation/installation.md + - label: 安装指导 + href: ./installation_upgrade/installation/installation_guide.md + - label: 安装指导 + href: ./installation_upgrade/installation/installation_guide_1.md + - label: 安装方式介绍 + href: ./installation_upgrade/installation/installation_modes.md + - label: 安装方式介绍 + href: ./installation_upgrade/installation/installation_modes_1.md + - label: 安装在服务器 + href: ./installation_upgrade/installation/installation_on_servers.md + - label: 安装准备 + href: ./installation_upgrade/installation/installation_preparations.md + - label: 安装准备 + href: ./installation_upgrade/installation/installation_preparations_1.md + - label: 安装在树莓派 + href: ./installation_upgrade/installation/install_pi.md + - label: 参考资料 + href: ./installation_upgrade/installation/more_resources.md + - label: 使用kickstart自动化安装 + href: >- + ./installation_upgrade/installation/using_kickstart_for_automatic_installation.md + - label: 常用技能 + href: ./maintenance/common_skills/common_configurations.md + - label: 信息收集 + href: ./maintenance/common_skills/information_collection.md + - label: 常用工具 + href: ./maintenance/common_tools/commonly_used_tools.md + - label: gala-anteater使用手册 + href: ./maintenance/gala/using_gala_anteater.md + - label: '**gala-gopher使用手册**' + href: ./maintenance/gala/using_gala_gopher.md + - label: gala-spider使用手册 + href: ./maintenance/gala/using_gala_spider.md + - label: 安装与部署 + href: ./maintenance/kernel_live_upgrade/installation_and_deployment.md + - label: 内核热升级用户指南 + href: ./maintenance/kernel_live_upgrade/kernel_live_upgrade.md + - label: 使用方法 + href: ./maintenance/kernel_live_upgrade/usage_guide.md + - label: sysmonitor + href: ./maintenance/sysmonitor/sysmonitor_user_guide.md + - label: 故障应急处理 + href: ./maintenance/troubleshooting/troubleshooting.md + - label: etmem + href: ./menmory_storage/etmem/etmem_user_guide.md + - label: 使用LVM管理硬盘 + href: ./menmory_storage/lvm/managing_drives_through_lvm.md + - label: Gazelle 加速openGauss使用说明 + href: ./network/gazelle/Gazelle_for_opengauss_acceleration.md + - label: Gazelle加速redis + href: ./network/gazelle/Gazelle_for_redis_acceleration.md + - label: Gazelle单网卡功能使用说明 + href: ./network/gazelle/Gazelle_single_nic_user_guide.md + - label: 用户态协议栈Gazelle用户指南 + href: ./network/gazelle/gazelle_user_guide.md + - label: 配置网络 + href: ./network/network_config/network_configuration.md + - label: FUSE fastpath特性说明和使用指南 + href: ./performance/cpu_optimization/fuse_acceleration_feature_guide.md + - label: 使用KAE加速引擎 + href: ./performance/cpu_optimization/using_the_kae.md + - label: 系统资源与性能 + href: ./performance/overall/system_resource/system_resources_and_performance.md + - label: 附录 + href: ./performance/system_optimization/atune/appendix.md + - label: 认识A-Tune + href: ./performance/system_optimization/atune/getting_to_know_a_tune.md + - label: 安装与部署 + href: ./performance/system_optimization/atune/installation_and_deloyment.md + - label: 使用方法 + href: ./performance/system_optimization/atune/usage_instructions.md + - label: 快速入门 + href: ./quickstart/quick_start.md + - label: openEuler账号清单 + href: ./releasenotes/account_list.md + - label: 致谢 + href: ./releasenotes/acknowledgment.md + - label: 参与贡献 + href: ./releasenotes/contribution.md + - label: CVE漏洞 + href: ./releasenotes/cve.md + - label: 简介 + href: ./releasenotes/introduction.md + - label: 关键特性 + href: ./releasenotes/key_features.md + - label: 已知问题 + href: ./releasenotes/known_issues.md + - label: 系统安装 + href: ./releasenotes/os_installation.md + - label: 组件分类 + href: ./releasenotes/README.md + - label: 发行说明 + href: ./releasenotes/release_notes.md + - label: 已修复问题 + href: ./releasenotes/resoluved_issues.md + - label: 源代码 + href: ./releasenotes/source_code.md + - label: 法律声明 + href: ./releasenotes/terms_of_use.md + - label: 用户须知 + href: ./releasenotes/user_notice.md + - label: 版本发行说明 + href: ./releasenotes/zh-cn_bookmap_0225720059.md + - label: 证书签名使用指南 + href: ./security/cert_signature/certsignature.md + - label: 认识证书和签名 + href: ./security/cert_signature/overview_of_certificates_and_signatures.md + - label: 安全启动 + href: ./security/cert_signature/secure_boot.md + - label: 1. SBOM介绍 + href: ./security/sbom/sbom.md + - label: 接口说明 + href: ./security/secdetector/api_reference.md + - label: 安装 secDetector + href: ./security/secdetector/install_secdetector.md + - label: 认识secDetector + href: ./security/secdetector/introduction_to_secdetector.md + - label: secDetector 使用指南 + href: ./security/secdetector/secDetector.md + - label: 使用 secDetector + href: ./security/secdetector/using_secdetector.md + - label: 接口说明 + href: ./security/secgear/api_reference.md + - label: 认识secGear + href: ./security/secgear/introduction_to_secgear.md + - label: secGear 开发指南 + href: ./security/secgear/secGear.md + - label: 安装 secGear + href: ./security/secgear/secgear_installation.md + - label: 帐户口令 + href: ./security/secharden/account_passwords.md + - label: 附录 + href: ./security/secharden/appendix.md + - label: 授权认证 + href: ./security/secharden/authentication_and_authenticationu.md + - label: 文件权限 + href: ./security/secharden/file_permissions.md + - label: 内核参数 + href: ./security/secharden/kernel_parameters.md + - label: 操作系统加固概述 + href: ./security/secharden/os_hardening_overview.md + - label: 安全加固指南 + href: ./security/secharden/secharden.md + - label: openEuler安全配置说明 + href: ./security/secharden/security_configuration_benchmark.md + - label: 安全加固工具 + href: ./security/secharden/security_configuration_hardening_tool.md + - label: 加固指导 + href: ./security/secharden/security_hardening_guide.md + - label: SELinux配置 + href: ./security/secharden/selinux_configuration.md + - label: 系统服务 + href: ./security/secharden/system_services.md + - label: 可信计算 + href: ./security/trusted_computing/trusted_computing.md diff --git a/docs/zh/server/administration/administrator/_toc.yaml b/docs/zh/server/administration/administrator/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5b2785601d10b6500a84c6e553ff0e1f99b0b835 --- /dev/null +++ b/docs/zh/server/administration/administrator/_toc.yaml @@ -0,0 +1,25 @@ +isManual: true +label: '' +sections: + - label: 管理员指南 + href: ./administration.md + - label: 基础配置 + href: ./basic_configuration.md + - label: 搭建FTP服务器 + href: ./configuring_the_ftp_server.md + - label: 搭建repo服务器 + href: ./configuring_the_repo_server.md + - label: 搭建web服务器 + href: ./configuring_the_web_server.md + - label: 管理进程 + href: ./process_management.md + - label: 管理服务 + href: ./service_management.md + - label: 搭建数据库服务器 + href: ./setting_up_the_database_server.md + - label: 管理用户 + href: ./user_and_user_group_management.md + - label: 使用DNF管理软件包 + href: ./using_dnf_to_manage_software_packages.md + - label: 查看系统信息 + href: ./viewing_system_infortmation.md diff --git a/docs/zh/server/administration/administrator/administration.md b/docs/zh/server/administration/administrator/administration.md new file mode 100644 index 0000000000000000000000000000000000000000..89dd0f1865325203c28439b9e89e44b99839d526 --- /dev/null +++ b/docs/zh/server/administration/administrator/administration.md @@ -0,0 +1,4 @@ +# 管理员指南 + +本文档提供了openEuler系统常用的管理员操作,方便管理员更好地使用openEuler。 +本文档适用于所有使用openEuler系统的管理员。 diff --git a/docs/zh/server/administration/administrator/basic_configuration.md b/docs/zh/server/administration/administrator/basic_configuration.md new file mode 100644 index 0000000000000000000000000000000000000000..b82c56eaf7a883843dc433b17eae35acb7a7865f --- /dev/null +++ b/docs/zh/server/administration/administrator/basic_configuration.md @@ -0,0 +1,499 @@ +# 基础配置 + + +- [基础配置](#基础配置) + - [设置语言环境](#设置语言环境) + - [显示当前语言环境状态](#显示当前语言环境状态) + - [列出可用的语言环境](#列出可用的语言环境) + - [设置语言环境](#设置语言环境-1) + - [设置键盘](#设置键盘) + - [显示当前设置](#显示当前设置) + - [列出可用的键盘布局](#列出可用的键盘布局) + - [设置键盘布局](#设置键盘布局) + - [设置日期和时间](#设置日期和时间) + - [使用timedatectl命令设置](#使用timedatectl命令设置) + - [使用date命令设置](#使用date命令设置) + - [使用hwclock命令设置](#使用hwclock命令设置) + - [设置kdump](#设置kdump) + - [设置kdump预留内存](#设置kdump预留内存) + - [预留内存推荐值](#预留内存推荐值) + - [禁用网络相关驱动](#禁用网络相关驱动) + - [设置磁盘调度算法](#设置磁盘调度算法) + - [临时修改调度策略](#临时修改调度策略) + - [永久设置调度策略](#永久设置调度策略) + + + +## 设置语言环境 + +您可以通过localectl修改系统的语言环境,对应的参数设置保存在/etc/locale.conf文件中。这些参数会在系统启动过程中被systemd的守护进程读取。 + +### 显示当前语言环境状态 + +显示当前语言环境,命令如下: + +```shell +$ localectl status +``` + +例如显示系统当前的设置,命令和输出如下: + +```shell +$ localectl status + System Locale: LANG=zh_CN.UTF-8 + VC Keymap: cn + X11 Layout: cn +``` + +### 列出可用的语言环境 + +显示当前可用的语言环境,命令如下: + +```shell +$ localectl list-locales +``` + +例如显示当前系统中所有可用的中文环境,命令和输出如下: + +```shell +$ localectl list-locales | grep zh +zh_CN.UTF-8 +``` + +### 设置语言环境 + +要设置语言环境,在root权限下执行如下命令,其中 _locale_ 是您要设置的语言类型,取值范围可通过**localectl list-locales**获取,请根据实际情况修改。 + +```shell +# localectl set-locale LANG=locale +``` + +例如设置为简体中文语言环境,在root权限下执行如下命令: + +```shell +# localectl set-locale LANG=zh_CN.UTF-8 +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>修改后需要重新登录或者在root权限下执行`source /etc/locale.conf`命令刷新配置文件,使修改生效。 + +## 设置键盘 + +您可以通过localectl修改系统的键盘设置,对应的参数设置保存在/etc/locale.conf文件中。这些参数,会在系统启动的早期被systemd的守护进程读取。 + +### 显示当前设置 + +显示当前键盘设置,命令如下: + +```shell +$ localectl status +``` + +例如显示系统当前的设置,命令和输出如下: + +```shell +$ localectl status + System Locale: LANG=zh_CN.UTF-8 + VC Keymap: cn + X11 Layout: cn +``` + +### 列出可用的键盘布局 + +显示当前可用的键盘布局,命令如下: + +``` +$ localectl list-keymaps +``` + +例如显示系统当前的中文键盘布局,命令和输出如下: + +``` +$ localectl list-keymaps | grep cn +cn +``` + +### 设置键盘布局 + +设置键盘布局,在root权限下执行如下命令,其中 _map_ 是您想要设置的键盘类型,取值范围可通过**localectl list-keymaps**获取,请根据实际情况修改: + +``` +# localectl set-keymap map +``` + +此时设置的键盘布局同样也会应用到图形界面中。 + +设置完成后,查看当前状态: + +``` +$ localectl status + System Locale: LANG=zh_CN.UTF-8 + VC Keymap: cn + X11 Layout: us +``` + +## 设置日期和时间 + +本节介绍如何通过timedatectl、date、hwclock命令来设置系统的日期、时间和时区等。 + +### 使用timedatectl命令设置 + +#### 显示日期和时间 + +显示当前的日期和时间,命令如下: + +``` +$ timedatectl +``` + +例如显示系统当前的日期和时间,命令和输出如下: + +``` +$ timedatectl + Local time: Mon 2023-05-20 04:05:00 EDT + Universal time: Mon 2023-05-20 08:05:00 UTC + RTC time: Mon 2023-05-20 08:05:00 + Time zone: China Standard Time (CST), UTC +8 +System clock synchronized: no + NTP service: inactive + RTC in local TZ: no +``` + +#### 通过远程服务器进行时间同步 + +您可以启用NTP远程服务器进行系统时钟的自动同步。是否启用NTP,可在root权限下执行如下命令进行设置。其中 _boolean_ 可取值yes和no,分别表示启用和不启用NTP进行系统时钟自动同步,请根据实际情况修改。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>若启用了NTP远程服务器进行系统时钟自动同步,则不能手动修改日期和时间。若需要手动修改日期或时间,则需确保已经关闭NTP系统时钟自动同步。可执行**timedatectl set-ntp no** 命令进行关闭。 + +``` +# timedatectl set-ntp boolean +``` + +例如开启自动远程时间同步,命令如下: + +``` +# timedatectl set-ntp yes +``` + +#### 修改日期 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>修改日期前,请确保已经关闭NTP系统时钟自动同步。 + +修改当前的日期,在root权限下执行如下命令,其中 _YYYY_ 代表年份,_MM_ 代表月份,_DD_ 代表某天,请根据实际情况修改: + +``` +# timedatectl set-time YYYY-MM-DD +``` + +例如修改当前的日期为2019年8月14号,命令如下: + +``` +# timedatectl set-time '2019-08-14' +``` + +#### 修改时间 + +修改时间前,请确保已经关闭NTP系统时钟自动同步。查看NTP服务是否运行,命令如下: + +``` +systemctl status ntpd +``` + +关闭NTP服务,命令如下: + +``` +systemctl disable ntpd +``` + +修改当前的时间,在root权限下执行如下命令,其中 _HH_ 代表小时,_MM_ 代表分钟,_SS_ 代表秒,请根据实际情况修改: + +``` +# timedatectl set-time HH:MM:SS +``` + +例如修改当前的时间为15点57分24秒,命令如下: + +``` +# timedatectl set-time 15:57:24 +``` + +#### 修改时区 + +显示当前可用时区,命令如下: + +``` +$ timedatectl list-timezones +``` + +要修改当前的时区,在root权限下执行如下命令,其中 _time\_zone_ 是您想要设置的时区,请根据实际情况修改: + +``` +# timedatectl set-timezone time_zone +``` + +例如修改当前的时区,首先查询所在地域的可用时区,此处以Asia为例: + +``` +# timedatectl list-timezones | grep Asia +Asia/Aden +Asia/Almaty +Asia/Amman +Asia/Anadyr +Asia/Aqtau +Asia/Aqtobe +Asia/Ashgabat +Asia/Baghdad +Asia/Bahrain +…… + +Asia/Seoul +Asia/Shanghai +Asia/Singapore +Asia/Srednekolymsk +Asia/Taipei +Asia/Tashkent +Asia/Tbilisi +Asia/Tehran +Asia/Thimphu +Asia/Tokyo +``` + +然后修改当前的时区为“Asia/Shanghai”,命令如下: + +``` +# timedatectl set-timezone Asia/Shanghai +``` + +### 使用date命令设置 + +#### 显示当前的日期和时间 + +显示当前的日期和时间,命令如下: + +``` +$ date +``` + +默认情况下,date命令显示本地时间。要显示UTC时间,添加\-\-utc或-u参数: + +``` +$ date --utc +``` + +要自定义对应的输出信息格式,添加 +"format" 参数: + +``` +$ date +"format" +``` + +**表 1** 参数说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

格式参数

+

说明

+

%H

+

小时以HH格式(例如 17)。

+

%M

+

分钟以MM格式(例如 37)。

+

%S

+

秒以SS格式(例如 25)。

+

%d

+

日期以DD格式(例如 15)。

+

%m

+

月份以MM格式(例如 07)。

+

%Y

+

年份以YYYY格式(例如 2019)。

+

%Z

+

时区缩写(例如CEST)。

+

%F

+

日期整体格式为YYYY-MM-DD(例如 2019-7-15),等同%Y-%m-%d。

+

%T

+

时间整体格式为HH:MM:SS(例如 18:30:25),等同%H:%M:%S。

+
+ +实际使用示例如下: + +- 显示当前的日期和本地时间。 + + ``` + $ date + 2023年 05月 20日 星期六 17:26:34 CST + ``` + +- 显示当前的日期和UTC时间。 + + ``` + $ date --utc + 2023年 05月 20日 星期六 09:26:18 UTC + ``` + +- 自定义date命令的输出。 + + ``` + $ date +"%Y-%m-%d %H:%M" + 2023-05-20 17:24 + ``` + +#### 修改时间 + +要修改当前的时间,请添加\-\-set或者-s参数。在root权限下执行如下命令,其中 _HH_ 代表小时,_MM_ 代表分钟,_SS_ 代表秒,请根据实际情况修改: + +``` +# date --set HH:MM:SS +``` + +默认情况下, date命令设置本地时间。要设置UTC时间,添加\-\-utc或-u参数: + +``` +# date --set HH:MM:SS --utc +``` + +例如修改当前的时间为23点26分00秒,在root权限下执行如下命令: + +``` +# date --set 23:26:00 +``` + +#### 修改日期 + +修改当前的日期,添加\-\-set或者-s参数。在root权限下执行如下命令,其中 _YYYY_ 代表年份,_MM_ 代表月份,_DD_ 代表某天,请根据实际情况修改:(注意,执行修改日期操作后,相应的时间会重置为00:00:00) + +``` +# date --set YYYY-MM-DD +``` + +例如修改当前的日期为2019年11月2日,命令如下: + +``` +# date --set 2019-11-02 +``` + +### 使用hwclock命令设置 + +可以使用 hwclock 命令设置硬件时钟RTC \(Real Time Clock\) 。 + +#### 硬件时钟和系统时钟 + +Linux 将时钟分为: + +- 系统时钟 \(System Clock\) :当前Linux Kernel中的时钟。 +- 硬件时钟 RTC:主板上由电池供电的主板硬件时钟,该时钟可以在BIOS的 "Standard BIOS Feature" 项中进行设置。 + +当Linux启动时,会读取硬件时钟,并根据硬件时间来设置系统时间。 + +#### 显示日期和时间 + +显示当前硬件的日期和时间,在root权限下执行如下命令: + +``` +# hwclock +``` + +例如显示当前硬件的日期和时间,命令和输出如下: + +``` +# hwclock +2023-05-26 10:18:42.528948+08:00 +``` + +#### 设置日期和时间 + +修改当前硬件的日期和时间,在root权限下执行如下命令,其中 _dd_ 表示日,_mm_ 表示月份,_yyyy_ 表示年份,_HH_ 表示小时,_MM_ 表示分钟,请根据实际情况修改: + +``` +# hwclock --set --date "dd mm yyyy HH:MM" +``` + +例如修改当前的时间为2023年05月21日21点17分,命令如下: + +``` +# hwclock --set --date "21 May 2023 21:17" --utc +``` + +## 设置kdump + +本节介绍如何设置kdump预留内存及修改kdump配置文件参数。 + +### 设置kdump预留内存 + +#### 预留内存参数格式 + +kdump预留内存参数必须添加到内核启动参数中,配置文件为/boot/efi/EFI/openEuler/grub.cfg(UEFI引导模式)或/boot/grub2/grub.cfg(legacy引导模式),openEuler发布版本中默认已经添加,可以根据实际使用情况调整。添加和修改启动参数后,重启系统生效。kdump预留内存参数格式如下: + +| 内核启动参数 | 描述 | 默认值 | 备注 | +|--------------------|-------------------------------------------|---------------|------------------------------------------------------------| +| crashkernel=x | 在4G以下的物理内存预留x大小的内存给kdump使用。 | x86版本默认配置512M | 该配置方法只在4G以下内存预留,必须保证4G以下连续可用内存足够预留。 | +| crashkernel=x@y | 在y起始地址预留x大小的内存给kdump使用。 | 未使用 | 需要确保y起始地址的x大小的内存未被其他模块预留。 | +| crashkernel=x,high | 在4G以下的物理内存中预留256M内存,在4G以上预留x大小内存给kdump使用。 | arm64版本默认配置1024M,high | 需要确保4G以下有256M连续可用的物理内存,4G以上有连续的x大小的连续物理内存。实际预留内存大小为256M+x。 | +| crashkernel=x,low crashkernel=y,high | 在4G以下的物理内存中预留x大小,在4G以上预留y大小内存给kdump使用。 | 未使用 | 需要确保4G以下有连续的x大小物理内存,4G以上有连续的y大小物理内存。 | + +### 预留内存推荐值 + +| 推荐方案 | 预留参数 | 参数说明 | +|------|------------------------|----------------------------------------------| +| 通用方案 | crashkernel=2048M,high | 4G以下预留256M,4G以上预留2048M内存给kdump使用。共256+2048M。 | +| 经济方案 | crashkernel=1024M,high | 4G以下预留256M,4G以上预留1024M内存给kdump使用。共256+1024M。 推荐系统512M内存以内的场景,并不使用网络转储kdump文件。对于虚拟机场景,可以适当减少内存预留值,推荐虚拟机设置为crashkernel=512M或者crashkernel=256M,high。 | +>![](./public_sys-resources/icon-note.gif) **说明:** +>不通过网络转储kdump文件时,需要设置kdump文件系统不打包网络相关驱动。网络驱动加载需要申请较大内存,可能导致预留内存不足,kdump失败。因此建议禁用网络相关驱动。 + +### 禁用网络相关驱动 + +kdump配置文件(/etc/kdump.conf)中,dracut参数可以设置裁剪的驱动模块,可以将网络驱动配置到裁剪驱动列表中,让kdump文件系统中不加载该驱动,修改配置文件后,重启kdump服务生效。dracut参数配置如下所示: + +``` +dracut_args --omit-drivers "mdio-gpi usb_8dev et1011c rt2x00usb bcm-phy-lib mac80211_hwsim rtl8723be rndis_host hns3_cae amd vrf rtl8192cu mt76x02-lib int51x1 ppp_deflate team_mode_loadbalance smsc911x aweth bonding mwifiex_usb hnae dnet rt2x00pci vaser_pci hdlc_ppp marvell rtl8xxxu mlxsw_i2c ath9k_htc rtl8150 smc91x cortina at803x rockchip cxgb4 spi_ks8995 mt76x2u smsc9420 mdio-cavium bnxt_en ch9200 dummy macsec ice mt7601u rtl8188ee ixgbevf net1080 liquidio_vf be2net mlxsw_switchx2 gl620a xilinx_gmii2rgmii ppp_generic rtl8192de sja1000_platform ath10k_core cc770_platform realte igb c_can_platform c_can ethoc dm9601 smsc95xx lg-vl600 ifb enic ath9 mdio-octeon ppp_mppe ath10k_pci cc770 team_mode_activebackup marvell10g hinic rt2x00lib mlx4_en iavf broadcom igc c_can_pci alx rtl8192se rtl8723ae microchip lan78xx atl1c rtl8192c-common almia ax88179_178a qed netxen_nic brcmsmac rt2800usb e1000 qla3xxx mdio-bitbang qsemi mdio-mscc-miim plx_pci ipvlan r8152 cx82310_eth slhc mt76x02-usb ems_pci xen-netfront usbnet pppoe mlxsw_minimal mlxsw_spectrum cdc_ncm rt2800lib rtl_usb hnae3 ath9k_common ath9k_hw catc mt76 hns_enet_drv ppp_async huawei_cdc_ncm i40e rtl8192ce dl2 qmi_wwan mii peak_usb plusb can-dev slcan amd-xgbe team_mode_roundrobin ste10Xp thunder_xcv pptp thunder_bgx ixgbe davicom icplus tap tun smsc75xx smsc dlci hns_dsaf mlxsw_core rt2800mmi softing uPD60620 vaser_usb dp83867 brcmfmac mwifiex_pcie mlx4_core micrel team macvlan bnx2 virtio_net rtl_pci zaurus hns_mdi libcxgb hv_netvsc nicvf mt76x0u teranetics mlxfw cdc_eem qcom-emac pppox mt76-usb sierra_net i40evf bcm87xx mwifiex pegasus rt2x00mmi sja1000 ena hclgevf cnic cxgb4vf ppp_synctty iwlmvm team_mode_broadcast vxlan vsockmon hdlc_cisc rtl8723-common bsd_comp fakelb dp83822 dp83tc811 cicada fm10 8139t sfc hs geneve hclge xgene-enet-v2 cdc_mbim hdlc asix netdevsim rt2800pci team_mode_random lxt ems_usb mlxsw_pci sr9700 mdio-thunder mlxsw_switchib macvtap atlantic cdc_ether mcs7830 nicpf mdi peak_pci atl1e cdc_subset ipvtap btcoexist mt76x0-common veth slip iwldvm bcm7xxx vitesse netconsole epic100 myri10ge r8169 qede microchip_t1 liquidi bnx2x brcmutil mwifiex_sdi mlx5_core rtlwifi vmxnet3 nlmon hns3 hdlc_raw esd_usb2 atl2 mt76x2-common iwlwifi mdio-bcm-unimac national ath rtwpci rtw88 nfp rtl8821ae fjes thunderbolt-net 8139cp atl1 mscc vcan dp83848 dp83640 hdlc_fr e1000e ipheth net_failover aquantia rtl8192ee igbvf rocker intel-xway tg3" --omit "ramdisk network ifcfg qemu-net" --install "chmod" --nofscks +``` + +## 设置磁盘调度算法 + +本节介绍如何设置磁盘调度算法。 + +### 临时修改调度策略 + +例如将所有IO调度算法修改为mq-deadline,此修改重启后会失效。 + +``` +echo mq-deadline > /sys/block/sd*/queue/scheduler +``` + +### 永久设置调度策略 + +可以通过在内核启动配置文件grub.cfg中的kernel行追加:elevator=mq-deadline,重启后生效。 + +``` +linux /vmlinuz-5.10.0-153.12.0.89.oe2203SP4.x86_64 root=/dev/mapper/openeuler-root ro resume=/dev/mapper/openeuler-swap rd.lvm.lv=openeuler/root rd.lvm.lv=openeuler/swap quiet crashkernel=512M elevator=mq-deadline +``` diff --git a/docs/zh/server/administration/administrator/configuring_the_ftp_server.md b/docs/zh/server/administration/administrator/configuring_the_ftp_server.md new file mode 100644 index 0000000000000000000000000000000000000000..7197445ac053f9d9774429ef26124ef718372e27 --- /dev/null +++ b/docs/zh/server/administration/administrator/configuring_the_ftp_server.md @@ -0,0 +1,505 @@ +# 搭建FTP服务器 + +## 总体介绍 + +### FTP简介 + +FTP(File Transfer Protocol)即文件传输协议,是互联网最早的传输协议之一,其最主要的功能是服务器和客户端之间的文件传输。FTP使用户可以通过一套标准的命令访问远程系统上的文件,而不需要直接登录远程系统。另外,FTP服务器还提供了如下主要功能: + +- 用户分类 + + 默认情况下,FTP服务器依据登录情况,将用户分为实体用户(real user)、访客(guest)、匿名用户(anonymous)三类。三类用户对系统的访问权限差异较大,实体用户具有较完整的访问权限,匿名用户仅有下载资源的权限。 + +- 命令记录和日志文件记录 + + FTP可以利用系统的syslogd记录数据,这些数据包括用户历史使用命令与用户传输数据(传输时间、文件大小等),用户可以在/var/log/中获得各项日志信息。 + +- 限制用户的访问范围 + + FTP可以将用户的工作范围限定在用户主目录。用户通过FTP登录后系统显示的根目录就是用户主目录,这种环境被称为change root,简称chroot。这种方式可以限制用户只能访问主目录,而不允许访问/etc、/home、/usr/local等系统的重要目录,从而保护系统,使系统更安全。 + +### FTP使用到的端口 + +FTP的正常工作需要使用到多个网络端口,服务器端会使用到的端口主要有: + +- 命令通道,默认端口为21。 +- 数据通道,默认端口为20。 + +两者的连接发起端不同,端口21主要接收来自客户端的连接,端口20则是FTP服务器主动连接至客户端。 + +### vsftpd简介 + +由于FTP历史悠久,它采用未加密的传输方式,所以被认为是一种不安全的协议。为了更安全地使用FTP,这里介绍FTP较为安全的守护进程vsftpd(Very Secure FTP Daemon)。 + +之所以说vsftpd安全,是因为它最初的发展理念就是构建一个以安全为中心的FTP服务器。它具有如下特点: + +- vsftpd服务的启动身份为一般用户,具有较低的系统权限。此外,vsftpd使用chroot改变根目录,不会误用系统工具。 +- 任何需要较高执行权限的vsftpd命令均由一个特殊的上层程序控制,该上层程序的权限较低,以不影响系统本身为准。 +- vsftpd整合了大部分FTP会使用到的额外命令(例如dir、ls、cd等),一般不需要系统提供额外命令,对系统来说比较安全。 + +## 使用vsftpd + +### 安装vsftpd + +使用vsftpd需要安装vsftpd软件,在已经配置yum源的情况下,通过root权限执行如下命令,即可完成vsftpd的安装。 + +```sh +# dnf install vsftpd +``` + +### 管理vsftpd服务 + +启动、停止和重启vsftpd服务,请在root权限下执行对应命令。 + +- 启动vsftpd服务 + + ```sh + # systemctl start vsftpd + ``` + + 可以通过netstat命令查看通信端口21是否开启,如下显示说明vsftpd已经启动。 + + ```sh + # netstat -tulnp | grep 21 + tcp6 0 0 :::21 :::* LISTEN 19716/vsftpd + ``` + + > ![](./public_sys-resources/icon-note.gif) **说明:** + > 如果没有**netstat**命令,可以执行**dnf install net-tools**命令安装后再使用**netstat**命令。 + +- 停止vsftpd服务 + + ```sh + # systemctl stop vsftpd + ``` + +- 重启vsftpd服务 + + ```sh + # systemctl restart vsftpd + ``` + +## 配置vsftpd + +### vsftpd配置文件介绍 + +用户可以通过修改vsftpd的配置文件,控制用户权限等。vsftpd的主要配置文件和含义如[表1](#table1541615718372)所示,用户可以根据需求修改配置文件的内容。更多的配置参数含义可以通过man查看。 + +**表 1** vsftpd配置文件介绍 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

配置文件

+

含义

+

/etc/vsftpd/vsftpd.conf

+

vsftpd进程的主配置文件,配置内容格式为“参数=参数值”,且参数和参数值不能为空。

+

vsftpd.conf 的详细介绍可以使用如下命令查看:

+

man 5 vsftpd.conf

+

/etc/pam.d/vsftpd

+

PAM(Pluggable Authentication Modules)认证文件,主要用于身份认证和限制一些用户的操作。

+

/etc/vsftpd/ftpusers

+

禁止使用vsftpd的用户列表文件。默认情况下,系统帐号也在该文件中,因此系统帐号默认无法使用vsftpd。

+

/etc/vsftpd/user_list

+

禁止或允许登录vsftpd服务器的用户列表文件。该文件是否生效,取决于主配置文件vsftpd.conf中的如下参数:

+

userlist_enable:是否启用userlist机制,YES为启用,此时userlist_deny配置有效,NO为禁用。

+

userlist_deny:是否禁止user_list中的用户登录,YES为禁止名单中的用户登录,NO为允许命令中的用户登录。

+

例如userlist_enable=YES,userlist_deny=YES,则user_list中的用户都无法登录。

+

/etc/vsftpd/chroot_list

+

是否限制在主目录下的用户列表。该文件默认不存在,需要手动建立。它是主配置文件vsftpd.conf中参数chroot_list_file的参数值。

+

其作用是限制还是允许,取决于主配置文件vsftpd.conf中的如下参数:

+
  • chroot_local_user:是否将所有用户限制在主目录,YES为启用,NO禁用
  • chroot_list_enable:是否启用限制用户的名单,YES为启用,NO禁用。
+

例如chroot_local_user=YES,chroot_list_enable=YES,且指定chroot_list_file=/etc/vsftpd/chroot_list时,表示所有用户被限制在其主目录下,而chroot_list中的用户不受限制。

+

/usr/sbin/vsftpd

+

vsftpd的唯一执行文件。

+

/var/ftp/

+

匿名用户登录的默认根目录,与ftp帐户的用户主目录有关。

+
+ +### 默认配置说明 + +> ![](./public_sys-resources/icon-note.gif) **说明:** +> 文档中的配置内容仅供参考,请用户根据实际情况(例如安全加固需要)进行修改。 + +openEuler系统中 ,vsftpd默认不开放匿名用户,使用vim命令查看主配置文件,其内容如下: + +```sh +$ vim /etc/vsftpd/vsftpd.conf +anonymous_enable=NO +local_enable=YES +write_enable=YES +local_umask=022 +dirmessage_enable=YES +xferlog_enable=YES +connect_from_port_20=YES +xferlog_std_format=YES +listen=NO +listen_ipv6=YES +pam_service_name=vsftpd +userlist_enable=YES +``` + +其中各参数含义如[表2](#table18185162512499)所示。 + +**表 2** 参数说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

含义

+

anonymous_enable

+

是否允许匿名用户登录,YES为允许匿名登录,NO为不允许。

+

local_enable

+

是否允许本地用户登入,YES 为允许本地用户登入,NO为不允许。

+

write_enable

+

是否允许登录用户有写权限,YES为启用上传写入功能,NO为禁用。

+

local_umask

+

本地用户新增档案时的umask值。

+

dirmessage_enable

+

当用户进入某个目录时,是否显示该目录需要注意的内容,YES为显示注意内容,NO为不显示。

+

xferlog_enable

+

是否记录使用者上传与下载文件的操作,YES为记录操作,NO为不记录。

+

connect_from_port_20

+

Port模式进行数据传输是否使用端口20,YES为使用端口20,NO为不使用端口20。

+

xferlog_std_format

+

传输日志文件是否以标准xferlog格式书写,YES为使用该格式书写,NO为不使用。

+

listen

+

设置vsftpd是否以stand alone的方式启动,YES为使用stand alone方式启动,NO为不使用该方式。

+

pam_service_name

+

支持PAM模块的管理,配置值为服务名称,例如vsftpd。

+

userlist_enable

+

是否支持/etc/vsftpd/user_list文件内的帐号登录控制,YES为支持,NO为不支持。

+

tcp_wrappers

+

是否支持TCP Wrappers的防火墙机制,YES为支持,NO为不支持。

+

listen_ipv6

+

是否侦听IPv6的FTP请求,YES为侦听,NO为不侦听。listen和listen_ipv6不能同时开启。

+
+ +### 配置本地时间 + +#### 概述 + +openEuler系统中,vsftpd默认使用GMT时间(格林尼治时间),可能和本地时间不一致,例如GMT时间比北京时间晚8小时,请用户改为本地时间,否则服务器和客户端时间不一致,在上传下载文件时可能引起错误。 + +#### 设置方法 + +在root权限下设置vsftpd时间为本地时间的操作步骤如下: + +1. 打开配置文件vsftpd.conf,将参数use\_localtime的参数值改为YES。命令如下: + + ```sh + # vim /etc/vsftpd/vsftpd.conf + ``` + + 配置内容如下: + + ```sh + use_localtime=YES + ``` + +2. 重启vsftpd服务。 + + ```sh + # systemctl restart vsftpd + ``` + +3. 设置vsftpd服务开机启动。 + + ```sh + # systemctl enable vsftpd + ``` + +### 配置欢迎信息 + +使用vsftpd服务,建议新建欢迎信息文件(没有也不影响使用)。在root权限下设置vsftpd的欢迎信息welcome.txt文件的操作步骤如下: + +1. 打开配置文件vsftpd.conf,加入欢迎信息文件配置内容后保存退出。 + + ```sh + # vim /etc/vsftpd/vsftpd.conf + ``` + + 需要加入的配置行如下: + + ```Conf + banner_file=/etc/vsftpd/welcome.txt + ``` + +2. 建立欢迎信息。即打开welcome.txt文件,写入欢迎信息后保存退出。 + + ```sh + # vim /etc/vsftpd/welcome.txt + ``` + + 欢迎信息举例如下: + + ```Conf + Welcome to this FTP server! + ``` + +### 配置系统帐号登录权限 + +一般情况下,用户需要限制部分帐号的登录权限。用户可根据需要进行配置。 + +vsftpd有两个默认存放用户名单的文件,来对访问FTP服务的用户身份进行管理和限制。vsftpd会分别检查两个配置文件,只要是被任何一个文件所禁止的用户,FTP访问到本机的请求都会被拒绝。 + +- /etc/vsftpd/user_list:可以作为用户白名单,或者是黑名单,或者无效名单,由userlist_enable和userlist_deny这两个参数决定。 +- /etc/vsftpd/ftpusers:只能是用户黑名单,不受任何参数限制。 + +## 验证FTP服务是否搭建成功 + +可以使用openEuler提供的FTP客户端进行验证。命令和回显如下,根据提示输入用户名(用户为系统中存在的用户)和密码。如果显示Login successful,即说明FTP服务器搭建成功。 + +```sh +$ ftp localhost +Trying 127.0.0.1... +Connected to localhost (127.0.0.1). +220-Welcome to this FTP server! +220 +Name (localhost:root): USERNAME +331 Please specify the password. +Password: +230 Login successful. +Remote system type is UNIX. +Using binary mode to transfer files. +ftp> bye +221 Goodbye. +``` + +> ![](./public_sys-resources/icon-note.gif) **说明:** +> 如果没有**ftp**命令,可以在root权限下执行**dnf install ftp**命令安装后再使用**ftp**命令。 + +## 配置防火墙 + +如果要将FTP开放给Internet使用,需要在root权限下对防火墙和SElinux进行设置。 + +```sh +# firewall-cmd --add-service=ftp --permanent +success +# firewall-cmd --reload +success +# setsebool -P ftpd_full_access on +``` + +## 传输文件 + +### 概述 + +这里给出vsftpd服务启动后,如何进行文件传输的指导。 + +### 连接服务器 + +**命令格式** + +**ftp** \[_hostname_ | _ip-address_\] + +其中hostname为服务器名称,ip-address为服务器IP地址。 + +**操作说明** + +在openEuler系统的命令行终端,执行如下命令: + +```sh +ftp ip-address +``` + +根据提示输入用户名和密码,认证通过后显示如下,说明ftp连接成功,此时进入了连接到的服务器目录。 + +```sh +ftp> +``` + +在该提示符下,可以输入不同的命令进行相关操作: + +- 显示服务器当前路径。 + + ```sh + ftp>pwd + ``` + +- 显示本地路径,用户可以将该路径下的文件上传到FTP服务器对应位置。 + + ```sh + ftp>lcd + ``` + +- 退出当前窗口,返回本地Linux终端。 + + ```sh + ftp>! + ``` + +### 下载文件 + +通常使用get或mget命令下载文件。 + +**get使用方法** + +- 功能说明:将文件从远端主机中传送至本地主机中。 +- 命令格式:**get** \[_remote-file_\] \[_local-file_\] + + 其中 _remote-file_ 为远程文件,_local-file_ 为本地文件。 + +- 示例:获取远程服务器上的/home/openEuler/openEuler.htm文件到本地/home/myopenEuler/,并改名为myopenEuler.htm,命令如下: + + ```sh + ftp> get /home/openEuler/openEuler.htm /home/myopenEuler/myopenEuler.htm + ``` + +**mget使用方法** + +- 功能说明:从远端主机接收一批文件至本地主机。 +- 命令格式:**mget** \[_remote-file_\] + + 其中 _remote-file_ 为远程文件。 + +- 示例:获取服务器上/home/openEuler/目录下的所有文件,命令如下: + + ```sh + ftp> cd /home/openEuler/ + ftp> mget *.* + ``` + + > ![](./public_sys-resources/icon-note.gif) **说明:** + > + > - 此时每下载一个文件,都会有提示信息。如果要屏蔽提示信息,则在**mget \*.\*** 命令前先执行**prompt off**。 + > - 文件都被下载到Linux主机的当前目录下。比如,在/home/myopenEuler/下运行的ftp命令,则文件都下载到/home/myopenEuler/下。 + > + +### 上传文件 + +通常使用put或mput命令上传文件。 + +**put使用方法** + +- 功能说明:将本地的一个文件传送到远端主机中。 +- 命令格式:**put** \[_local-file_\] \[_remote-file_\] + + 其中 _remote-file_ 为远程文件,_local-file_ 为本地文件。 + +- 示例:将本地的myopenEuler.htm传送到远端主机/home/openEuler/,并改名为openEuler.htm,命令如下: + + ```sh + ftp> put myopenEuler.htm /home/openEuler/openEuler.htm + ``` + +**mput使用方法** + +- 功能说明:将本地主机中一批文件传送至远端主机。 +- 命令格式:**mput** \[_local-file_\] + + 其中 _local-file_ 为本地文件。 + +- 示例:将本地当前目录下所有htm文件上传到服务器/home/openEuler/下,命令如下: + + ```sh + ftp> cd /home/openEuler/ + ftp> mput *.htm + ``` + +### 删除文件 + +通常使用delete或mdelete命令删除文件。 + +**delete使用方法** + +- 功能说明:删除远程服务器上的一个或多个文件。 +- 命令格式:**delete** \[_remote-file_\] + + 其中 _remote-file_ 为远程文件。 + +- 示例:删除远程服务器上/home/openEuler/下的openEuler.htm文件,命令如下: + + ```sh + ftp> cd /home/openEuler/ + ftp> delete openEuler.htm + ``` + +**mdelete使用方法** + +- 功能说明:删除远程服务器上的文件,常用于批量删除。 +- 命令格式:**mdelete** \[_remote-file_\] + + 其中 _remote-file_ 为远程文件。 + +- 示例:删除远程服务器上/home/openEuler/下所有a开头的文件,命令如下: + + ```sh + ftp> cd /home/openEuler/ + ftp> mdelete a* + ``` + +### 断开服务器 + +断开与服务器的连接,使用bye命令,如下: + +```sh +ftp> bye +``` diff --git a/docs/zh/server/administration/administrator/configuring_the_repo_server.md b/docs/zh/server/administration/administrator/configuring_the_repo_server.md new file mode 100644 index 0000000000000000000000000000000000000000..cbc8b77eafbf94a12d8ed49c554550d4c02e6140 --- /dev/null +++ b/docs/zh/server/administration/administrator/configuring_the_repo_server.md @@ -0,0 +1,400 @@ +# 搭建repo服务器 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>openEuler提供了多种repo源供用户在线使用,各repo源含义可参考[系统安装](./../Releasenotes/系统安装.md)。若用户无法在线获取openEuler repo源,则可使用openEuler提供的ISO发布包创建为本地openEuler repo源。本章节中以openEuler-22.03-LTS-SP4-aarch64-dvd.iso发布包为例,请根据实际需要的ISO发布包进行修改。 + + + +- [搭建repo服务器](#搭建repo服务器) + - [概述](#概述) + - [创建/更新本地repo源](#创建更新本地repo源) + - [获取ISO发布包](#获取iso发布包) + - [挂载ISO创建repo源](#挂载iso创建repo源) + - [创建本地repo源](#创建本地repo源) + - [更新repo源](#更新repo源) + - [部署远端repo源](#部署远端repo源) + - [nginx安装与配置](#nginx安装与配置) + - [启动nginx服务](#启动nginx服务) + - [repo源部署](#repo源部署) + - [使用repo源](#使用repo源) + - [repo配置为yum源(软件源)](#repo配置为yum源软件源) + - [repo优先级](#repo优先级) + - [dnf相关命令](#dnf相关命令) + + + +## 概述 + +将openEuler提供的ISO发布包openEuler-22.03-LTS-SP4-aarch64-dvd.iso创建为repo源,如下以使用nginx进行repo源部署,提供http服务为例进行说明。 + +## 创建/更新本地repo源 + +使用mount挂载,将openEuler的ISO发布包openEuler-22.03-LTS-SP4-aarch64-dvd.iso创建为repo源,并能够对repo源进行更新。 +### 获取ISO发布包 + +请从如下网址获取openEuler的ISO发布包: + +[https://repo.openeuler.org/openEuler-22.03-LTS-SP4/ISO/](https://repo.openeuler.org/openEuler-22.03-LTS-SP4/ISO/) + +### 挂载ISO创建repo源 + +在root权限下使用mount命令挂载ISO发布包。 + +示例如下: + +``` +# mount /home/openEuler/openEuler-22.03-LTS-SP4-aarch64-dvd.iso /mnt/ +``` + +挂载好的mnt目录如下: + +``` +. +│── boot.catalog +│── docs +│── EFI +│── images +│── Packages +│── repodata +│── TRANS.TBL +└── RPM-GPG-KEY-openEuler +``` + +其中,Packages为rpm包所在的目录,repodata为repo源元数据所在的目录,RPM-GPG-KEY-openEuler为openEuler的签名公钥。 + +### 创建本地repo源 + +可以拷贝ISO发布包中相关文件至本地目录以创建本地repo源,示例如下: + +``` +# mount /home/openEuler/openEuler-22.03-LTS-SP4-aarch64-dvd.iso /mnt/ +$ mkdir -p ~/srv/repo/ +$ cp -r /mnt/Packages ~/srv/repo/ +$ cp -r /mnt/repodata ~/srv/repo/ +$ cp -r /mnt/RPM-GPG-KEY-openEuler ~/srv/repo/ +``` + +本地repo目录如下: + +``` +. +│── Packages +│── repodata +└── RPM-GPG-KEY-openEuler +``` + +Packages为rpm包所在的目录,repodata为repo源元数据所在的目录,RPM-GPG-KEY-openEuler为openEuler的签名公钥。 + +### 更新repo源 + +更新repo源有两种方式: + +- 通过新版本的ISO更新已有的repo源,与创建repo源的方式相同,即挂载ISO发布包或重新拷贝ISO发布包至本地目录。 + +- 在repo源的Packages目录下添加rpm包,然后通过createrepo命令更新repo源。 + + ``` + # createrepo --update --workers=10 ~/srv/repo + ``` + + 其中,\-\-update表示更新,\-\-workers表示线程数,可自定义。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + >若命令打印信息为“createrepo:未找到命令”,则表示未安装createrepo软件,可在root权限下执行**dnf install createrepo**进行安装。 + + +## 部署远端repo源 + +安装openEuler操作系统,在openEuler上通过nginx部署repo源。 +### nginx安装与配置 + +1. 请自行下载nginx工具并在root权限下安装nginx。 +2. 安装nginx之后,在root权限下配置/etc/nginx/nginx.conf。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + >文档中的配置内容仅供参考,请用户根据实际情况(例如安全加固需要)进行配置。 + + ``` + user nginx; + worker_processes auto; # 建议设置为core-1 + error_log /var/log/nginx/error.log warn; # log存放位置 + pid /var/run/nginx.pid; + + events { + worker_connections 1024; + } + + http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + sendfile on; + keepalive_timeout 65; + + server { + listen 80; + server_name localhost; # 服务器名(url) + client_max_body_size 4G; + root /usr/share/nginx/repo; # 服务默认目录 + + location / { + autoindex on; # 开启访问目录下层文件 + autoindex_exact_size on; + autoindex_localtime on; + } + + } + + } + ``` + + +### 启动nginx服务 + +1. 在root权限下通过systemd启动nginx服务: + + ``` + # systemctl enable nginx + # systemctl start nginx + ``` + +2. nginx是否启动成功可通过下面命令查看: + + ``` + # systemctl status nginx + ``` + + - [图1](#zh-cn_topic_0151920971_fd25e3f1d664b4087ae26631719990a71)表示nginx服务启动成功: + + **图 1** nginx服务启动成功 + ![](./figures/nginx_start_success.png) + + - 若nginx服务启动失败,查看错误信息: + + ``` + # systemctl status nginx.service --full + ``` + + **图 2** nginx服务启动失败 + ![](./figures/nginx_start_failed.png) + + 如[图2](#zh-cn_topic_0151920971_f1f9f3d086e454b9cba29a7cae96a4c54)所示nginx服务创建失败,是由于目录/var/spool/nginx/tmp/client\_body创建失败,在root权限下手动进行创建,类似的问题也这样处理: + + ``` + # mkdir -p /var/spool/nginx/tmp/client_body + # mkdir -p /var/spool/nginx/tmp/proxy + # mkdir -p /var/spool/nginx/tmp/fastcgi + # mkdir -p /usr/share/nginx/uwsgi_temp + # mkdir -p /usr/share/nginx/scgi_temp + ``` + + +### repo源部署 + +1. 在root权限下创建nginx配置文件/etc/nginx/nginx.conf中指定的目录/usr/share/nginx/repo: + + ``` + # mkdir -p /usr/share/nginx/repo + ``` + +2. 在root权限下修改目录/usr/share/nginx/repo的权限: + + ``` + # chmod -R 755 /usr/share/nginx/repo + ``` + +3. 设置防火墙规则,开启nginx设置的端口(此处为80端口),在root权限下通过firewall设置端口开启: + + ``` + # firewall-cmd --add-port=80/tcp --permanent + # firewall-cmd --reload + ``` + + 在root权限下查询80端口是否开启成功,输出为yes则表示80端口开启成功: + + ``` + # firewall-cmd --query-port=80/tcp + ``` + + 也可在root权限下通过iptables来设置80端口开启: + + ``` + # iptables -I INPUT -p tcp --dport 80 -j ACCEPT + ``` + +4. nginx服务设置好之后,即可通过ip直接访问网页,如[图3](#zh-cn_topic_0151921017_fig1880404110396): + + **图 3** nginx部署成功 + ![](./figures/nginx_deployed_success.png) + +5. 通过下面几种方式将repo源放入到/usr/share/nginx/repo下: + - 在root权限下拷贝镜像中相关文件至/usr/share/nginx/repo下,并修改目录权限。 + + ``` + # mount /home/openEuler/openEuler-22.03-LTS-SP4-aarch64-dvd.iso /mnt/ + # cp -r /mnt/Packages /usr/share/nginx/repo + # cp -r /mnt/repodata /usr/share/nginx/repo + # cp -r /mnt/RPM-GPG-KEY-openEuler /usr/share/nginx/repo + # chmod -R 755 /usr/share/nginx/repo + ``` + + openEuler-22.03-LTS-SP4-aarch64-dvd.iso存放在/home/openEuler目录下。 + + - 使用root在/usr/share/nginx/repo下创建repo源的软链接。 + + ``` + # ln -s /mnt /usr/share/nginx/repo/os + ``` + + /mnt为已经创建好的repo源,/usr/share/nginx/repo/os将指向/mnt。 + + + +## 使用repo源 + +repo可配置为yum源,yum(全称为 Yellow dog Updater, Modified)是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载和安装。 +### repo配置为yum源(软件源) + +构建好的repo可以配置为yum源使用,在/etc/yum.repos.d/目录下使用root权限创建\*\*\*.repo的配置文件(必须以.repo为扩展名),分为本地和http服务器配置yum源两种方式: + +- 配置本地yum源 + + 在/etc/yum.repos.d目录下创建openEuler.repo文件,使用构建的本地repo源作为yum源,openEuler.repo的内容如下: + + ``` + [base] + name=base + baseurl=file:///home/openEuler/srv/repo + enabled=1 + gpgcheck=1 + gpgkey=file:///home/openEuler/srv/repo/RPM-GPG-KEY-openEuler + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + > - \[*repoid*\]中的repoid为软件仓库(repository)的ID号,所有.repo配置文件中的各repoid不能重复,必须唯一。示例中repoid设置为**base**。 + > - name为软件仓库描述的字符串。 + > - baseurl为软件仓库的地址。 + > - enabled为是否启用该软件源仓库,可选值为1和0。默认值为1,表示启用该软件源仓库。 + > - gpgcheck可设置为1或0,1表示进行gpg(GNU Private Guard)校验,0表示不进行gpg校验,gpgcheck可以确定rpm包的来源是有效和安全的。 + > - gpgkey为验证签名用的公钥。 + +- 配置http服务器yum源 + + 在/etc/yum.repos.d目录下创建openEuler.repo文件。 + + - 若使用用户部署的http服务端的repo源作为yum源,openEuler.repo的内容如下: + + ``` + [base] + name=base + baseurl=http://192.168.139.209/ + enabled=1 + gpgcheck=1 + gpgkey=http://192.168.139.209/RPM-GPG-KEY-openEuler + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >“192.168.139.209”为示例地址,请用户根据实际情况进行配置。 + + - 若使用openEuler提供的openEuler repo源作为yum源,以AArch64架构的OS repo源为例,openEuler.repo的内容如下: + + ``` + [base] + name=base + baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/aarch64/ + enabled=1 + gpgcheck=1 + gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/aarch64/RPM-GPG-KEY-openEuler + ``` + + + +### repo优先级 + +当有多个repo源时,可通过在.repo文件的priority参数设置repo的优先级(如果不设置,默认优先级是99,当相同优先级的源中存在相同rpm包时,会安装最新的版本)。其中,1为最高优先级,99为最低优先级,如给openEuler.repo配置优先级为2: + +``` +[base] +name=base +baseurl=http://192.168.139.209/ +enabled=1 +priority=2 +gpgcheck=1 +gpgkey=http://192.168.139.209/RPM-GPG-KEY-openEuler +``` + +### dnf相关命令 + +dnf命令在安装升级时能够自动解析包的依赖关系,一般的使用方式如下: + +``` +dnf +``` + +常用的命令如下: + +- 安装,需要在root权限下执行。 + + ``` + # dnf install + ``` + +- 升级,需要在root权限下执行。 + + ``` + # dnf update + ``` + +- 回退,需要在root权限下执行。 + + ``` + # dnf downgrade + ``` + +- 检查更新 + + ``` + # dnf check-update + ``` + +- 卸载,需要在root权限下执行。 + + ``` + # dnf remove + ``` + +- 查询 + + ``` + # dnf search + ``` + +- 本地安装,需要在root权限下执行。 + + ``` + # dnf localinstall + ``` + +- 查看历史记录 + + ``` + # dnf history + ``` + +- 清除缓存目录 + + ``` + # dnf clean all + ``` + +- 更新缓存 + + ``` + # dnf makecache + ``` + diff --git a/docs/zh/server/administration/administrator/configuring_the_web_server.md b/docs/zh/server/administration/administrator/configuring_the_web_server.md new file mode 100644 index 0000000000000000000000000000000000000000..f331822af6f0279cc01138e06e43954489342ee6 --- /dev/null +++ b/docs/zh/server/administration/administrator/configuring_the_web_server.md @@ -0,0 +1,558 @@ +# 搭建web服务器 + + +- [搭建web服务器](#搭建web服务器) + - [Apache服务器](#apache服务器) + - [概述](#概述) + - [管理httpd](#管理httpd) + - [配置文件说明](#配置文件说明) + - [管理模块和SSL](#管理模块和ssl) + - [验证web服务是否搭建成功](#验证web服务是否搭建成功) + - [Nginx服务器](#nginx服务器) + - [概述](#概述-1) + - [安装](#安装) + - [管理nginx](#管理nginx) + - [配置文件说明](#配置文件说明-1) + - [管理模块](#管理模块) + - [验证web服务是否搭建成功](#验证web服务是否搭建成功-1) + + + +## Apache服务器 +### 概述 + +Web(World Wide Web)是目前最常用的Internet协议之一。目前在Unix-Like系统中的web服务器主要通过Apache服务器软件实现。为了实现运营动态网站,产生了LAMP(Linux + Apache +MySQL + PHP)。web服务可以结合文字、图形、影像以及声音等多媒体,并支持超链接(Hyperlink)的方式传输信息。 + +openEuler系统中的web服务器版本是Apache HTTP服务器2.4版本,即httpd,一个由Apache软件基金会发展而来的开源web服务器。 + +### 管理httpd + +#### 概述 + +通过systemctl工具,可以对httpd服务进行管理,包括启动、停止、重启服务,以及查看服务状态等。本章介绍Apache HTTP服务的管理操作,以指导用户使用。 + +#### 前提条件 + +- 为了能够使用Apache HTTP服务,请确保您的系统中已经安装httpd服务的rpm包。在root权限下执行如下命令进行安装: + + ``` + # dnf install httpd + ``` + + 更多关于管理服务的内容,请参见[管理服务](./管理服务.html)。 + +- 启动、停止和重启httpd服务,需要使用root权限。 + +#### 启动服务 + +- 启动并运行httpd服务,命令如下: + + ``` + # systemctl start httpd + ``` + + +- 假如希望在系统启动时,httpd服务自动启动,则命令和回显如下: + + ``` + # systemctl enable httpd + Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service. + ``` + + +>![](./public_sys-resources/icon-note.gif) **说明:** +>假如正在运行的Apache HTTP服务器作为一个安全服务器,系统开机启动后需要密码,这个密码使用的是加密的私有SSL密钥。 + +#### 停止服务 + +- 停止运行的httpd服务,命令如下: + + ``` + # systemctl stop httpd + ``` + +- 如果希望防止服务在系统开机阶段自动开启,命令和回显如下: + + ``` + # systemctl disable httpd + Removed /etc/systemd/system/multi-user.target.wants/httpd.service. + ``` + + +#### 重启服务 + +重启服务有三种方式: + +- 完全重启服务 + + ``` + # systemctl restart httpd + ``` + + 该命令会停止运行的httpd服务并且立即重新启动它。一般在服务安装以后或者去除一个动态加载的模块(例如PHP)时使用这个命令。 + +- 重新加载配置 + + ``` + # systemctl reload httpd + ``` + + 该命令会使运行的httpd服务重新加载它的配置文件。任何当前正在处理的请求将会被中断,从而造成客户端浏览器显示一个错误消息或者重新渲染部分页面。 + +- 重新加载配置而不影响激活的请求 + + ``` + # apachectl graceful + ``` + + 该命令会使运行的httpd服务重新加载它的配置文件。任何当前正在处理的请求将会继续使用旧的配置文件。 + + +#### 验证服务状态 + +验证httpd服务是否正在运行 + +``` +$ systemctl is-active httpd +``` + +回显为“active”说明服务处于运行状态。 + +### 配置文件说明 + +当httpd服务启动后,默认情况下它会读取如[表1](#table24341012096)所示的配置文件。 + +**表 1** 配置文件说明 + + + + + + + + + + + + + +

文件

+

说明

+

/etc/httpd/conf/httpd.conf

+

主要的配置文件

+

/etc/httpd/conf.d

+

配置文件的辅助目录,这些配置文件也被包含在主配置文件当中

+

一个配置文件的辅助目录被包含在主要的配置文件中

+
+ +虽然默认配置可以适用于多数情况,但是用户至少需要熟悉里面的一些重要配置项。配置文件修改完成后,可以在root权限下使用如下命令检查配置文件可能出现的语法错误。 + +``` +# apachectl configtest +``` + +如果回显如下,说明配置文件语法正确。 + +``` +Syntax OK +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>- 在修改配置文件之前,请先备份原始文件,以便出现问题时能够快速恢复配置文件。 +>- 需要重启web服务,才能使修改后的配置文件生效。 + +### 管理模块和SSL + +#### 概述 + +httpd服务是一个模块化的应用,它和许多动态共享对象DSO(Dynamic Shared Objects)一起分发。动态共享对象DSO,在必要情况下,可以在运行时被动态加载或卸载。服务器操作系统中这些模块位于/usr/lib64/httpd/modules/目录下。本节介绍如何加载和写入模块。 + +#### 加载模块 + +为了加载一个特殊的DSO模块,在配置文件中使用加载模块指示。独立软件包提供的模块一般在/etc/httpd/conf.modules.d目录下有他们自己的配置文件。 + +例如,加载asis DSO模块的操作步骤如下: + +1. 在/etc/httpd/conf.modules.d/00-optional.conf文件中,使用root权限取消注释如下配置行。 + + ``` + LoadModule asis_module modules/mod_asis.so + ``` + +2. 加载完成后,请使用root权限重启httpd服务以便于重新加载配置文件。 + + ``` + # systemctl restart httpd + ``` + +3. 加载完成后,在root权限下使用httpd -M的命令查看是否已经加载了asis DSO模块。 + + ``` + # httpd -M | grep asis + ``` + + 回显如下,说明asis DSO模块加载成功。 + + ``` + asis_module (shared) + ``` + + +>![](./public_sys-resources/icon-note.gif) **说明:** +>**httpd 的常用命令** +> +>- httpd -v : 查看httpd的版本号。 +>- httpd -l:查看编译进httpd程序的静态模块。 +>- httpd -M:查看已经编译进httpd程序的静态模块和已经加载的动态模块。 + +#### SSL介绍 + +安全套接层SSL(Secure Sockets Layer)是一个允许服务端和客户端之间进行安全通信的加密协议。其中,传输层安全性协议TLS(Transport Layer Security)为网络通信提供了安全性和数据完整性保障。openEuler支持Mozilla NSS(Network Security Services)作为安全性协议TLS进行配置。加载SSL的操作步骤如下: + +1. 在root权限下安装mod\_ssl的rpm包。 + + ``` + # dnf install mod_ssl + ``` + +2. 安装完成后,请在root权限下重启httpd服务以便于重新加载配置文件。 + + ``` + # systemctl restart httpd + ``` + +3. 加载完成后,在root权限下使用httpd -M的命令查看是否已经加载了SSL。 + + ``` + # httpd -M | grep ssl + ``` + + 回显如下,说明SSL已加载成功。 + + ``` + ssl_module (shared) + ``` + + +### 验证web服务是否搭建成功 + +Web服务器搭建完成后,可以通过如下方式验证是否搭建成功。 + +1. 在root权限下查看服务器的IP地址,命令如下: + + ``` + # ifconfig + ``` + + 回显信息如下,说明服务器IP为 192.168.1.60。 + + ``` + enp3s0: flags=4163 mtu 1500 + inet 192.168.1.60 netmask 255.255.255.0 broadcast 192.168.1.255 + inet6 fe80::5054:ff:fe95:499f prefixlen 64 scopeid 0x20 + ether 52:54:00:95:49:9f txqueuelen 1000 (Ethernet) + RX packets 150713207 bytes 49333673733 (45.9 GiB) + RX errors 0 dropped 43 overruns 0 frame 0 + TX packets 2246438 bytes 203186675 (193.7 MiB) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + + enp4s0: flags=4163 mtu 1500 + ether 52:54:00:7d:80:9e txqueuelen 1000 (Ethernet) + RX packets 149937274 bytes 44652889185 (41.5 GiB) + RX errors 0 dropped 1102561 overruns 0 frame 0 + TX packets 0 bytes 0 (0.0 B) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + + lo: flags=73 mtu 65536 + inet 127.0.0.1 netmask 255.0.0.0 + inet6 ::1 prefixlen 128 scopeid 0x10 + loop txqueuelen 1000 (Local Loopback) + RX packets 37096 bytes 3447369 (3.2 MiB) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 37096 bytes 3447369 (3.2 MiB) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + ``` + +2. 在root权限下配置防火墙: + + ``` + # firewall-cmd --add-service=http --permanent + success + # firewall-cmd --reload + success + ``` + +3. 验证web服务器是否搭建成功,用户可选择Linux或Windows系统进行验证。 + - 使用Linux系统验证 + + 执行如下命令,查看是否可以访问网页信息,服务搭建成功时,该网页可以正常访问。 + + ``` + $ curl http://192.168.1.60 + ``` + + 执行如下命令,查看命令返回值是否为0,返回值为0,说明httpd服务器搭建成功。 + + ``` + $ echo $? + ``` + + - 使用Windows系统验证 + + 打开浏览器,在地址栏输入如下地址,如果能正常访问网页,说明httpd服务器搭建成功。 + + http://192.168.1.60 + + 如果修改了端口号,输入地址格式如下: + + http://192.168.1.60:端口号 + + + +## Nginx服务器 +### 概述 + +Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占用内存少,并发能力强,支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能,并且支持很多第三方的模块扩展。 + +### 安装 + +1. 配置本地yum源,详细信息请参考[搭建repo服务器](./搭建repo服务器.html)。 +2. 清除缓存。 + + ``` + $ dnf clean all + ``` + +3. 创建缓存。 + + ``` + $ dnf makecache + ``` + +4. 在root权限下安装nginx服务。 + + ``` + # dnf install nginx + ``` + +5. 查看安装后的rpm包。 + + ``` + $ dnf list all | grep nginx + ``` + + +### 管理nginx + +#### 概述 + +通过systemctl工具,可以对nginx服务进行管理,包括启动、停止、重启服务,以及查看服务状态等。本章介绍nginx服务的管理操作,以指导用户使用。 + +#### 前提条件 + +- 为了能够使用nginx服务,请确保您的系统中已经安装nginx服务。若未安装,可参考[安装](#安装)进行安装。 + + 更多关于管理服务的内容,请参见[管理服务](./管理服务.html)。 + +- 启动、停止和重启nginx服务,需要使用root权限。 + +#### 启动服务 + +- 启动并运行nginx服务,命令如下: + + ``` + # systemctl start nginx + ``` + + +- 假如希望在系统启动时,nginx服务自动启动,则命令和回显如下: + + ``` + # systemctl enable nginx + Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service. + ``` + + +>![](./public_sys-resources/icon-note.gif) **说明:** +>假如正在运行的nginx服务器作为一个安全服务器,系统开机启动后需要密码,这个密码使用的是加密的私有SSL密钥。 + +#### 停止服务 + +- 停止运行的nginx服务,命令如下: + + ``` + # systemctl stop nginx + ``` + +- 如果希望防止服务在系统开机阶段自动开启,命令和回显如下: + + ``` + # systemctl disable nginx + Removed /etc/systemd/system/multi-user.target.wants/nginx.service. + ``` + + +#### 重启服务 + +重启服务有三种方式: + +- 完全重启服务 + + ``` + # systemctl restart nginx + ``` + + 该命令会停止运行的nginx服务并且立即重新启动它。一般在服务安装以后或者去除一个动态加载的模块(例如PHP)时使用这个命令。 + +- 重新加载配置 + + ``` + # systemctl reload nginx + ``` + + 该命令会使运行的nginx服务重新加载它的配置文件。任何当前正在处理的请求将会被中断,从而造成客户端浏览器显示一个错误消息或者重新渲染部分页面。 + +- 平滑重启nginx + + ``` + # kill -HUP 主进程ID + ``` + + 该命令会使运行的nginx服务重新加载它的配置文件。任何当前正在处理的请求将会继续使用旧的配置文件。 + + +#### 验证服务状态 + +验证nginx服务是否正在运行 + +``` +$ systemctl is-active nginx +``` + +回显为“active”说明服务处于运行状态。 + +### 配置文件说明 + +当nginx服务启动后,默认情况下它会读取如[表2](#table24341012096)所示的配置文件。 + +**表 2** 配置文件说明 + + + + + + + + + + + + + +

文件

+

说明

+

/etc/nginx/nginx.conf

+

主要的配置文件

+

/etc/nginx/conf.d

+

配置文件的辅助目录,这些配置文件也被包含在主配置文件当中

+

一个配置文件的辅助目录被包含在主要的配置文件中

+
+ +虽然默认配置可以适用于多数情况,但是用户至少需要熟悉里面的一些重要配置项。配置文件修改完成后,可以在root权限下使用如下命令检查配置文件可能出现的语法错误。 + +``` +# nginx -t +``` + +如果回显信息中有“syntax is ok”,说明配置文件语法正确。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>- 在修改配置文件之前,请先备份原始文件,以便出现问题时能够快速恢复配置文件。 +>- 需要重启web服务,才能使修改后的配置文件生效。 + +### 管理模块 + +#### 概述 + +nginx服务是一个模块化的应用,它和许多动态共享对象DSO(Dynamic Shared Objects)一起分发。动态共享对象DSO,在必要情况下,可以在运行时被动态加载或卸载。服务器操作系统中这些模块位于/usr/lib64/nginx/modules/目录下。本节介绍如何加载和写入模块。 + +#### 加载模块 + +为了加载一个特殊的DSO模块,在配置文件中使用加载模块指示。独立软件包提供的模块一般在/usr/share/nginx/modules目录下有他们自己的配置文件。 + +openEuler操作系统中使用dnf install nginx安装nginx时会自动加载DSO。 + +### 验证web服务是否搭建成功 + +Web服务器搭建完成后,可以通过如下方式验证是否搭建成功。 + +1. 在root权限下查看服务器的IP地址,命令如下: + + ``` + # ifconfig + ``` + + 回显信息如下,说明服务器IP为 192.168.1.60。 + + ``` + enp3s0: flags=4163 mtu 1500 + inet 192.168.1.60 netmask 255.255.255.0 broadcast 192.168.1.255 + inet6 fe80::5054:ff:fe95:499f prefixlen 64 scopeid 0x20 + ether 52:54:00:95:49:9f txqueuelen 1000 (Ethernet) + RX packets 150713207 bytes 49333673733 (45.9 GiB) + RX errors 0 dropped 43 overruns 0 frame 0 + TX packets 2246438 bytes 203186675 (193.7 MiB) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + + enp4s0: flags=4163 mtu 1500 + ether 52:54:00:7d:80:9e txqueuelen 1000 (Ethernet) + RX packets 149937274 bytes 44652889185 (41.5 GiB) + RX errors 0 dropped 1102561 overruns 0 frame 0 + TX packets 0 bytes 0 (0.0 B) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + + lo: flags=73 mtu 65536 + inet 127.0.0.1 netmask 255.0.0.0 + inet6 ::1 prefixlen 128 scopeid 0x10 + loop txqueuelen 1000 (Local Loopback) + RX packets 37096 bytes 3447369 (3.2 MiB) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 37096 bytes 3447369 (3.2 MiB) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + ``` + +2. 在root权限下配置防火墙: + + ``` + # firewall-cmd --add-service=http --permanent + success + # firewall-cmd --reload + success + ``` + +3. 验证web服务器是否搭建成功,用户可选择Linux或Windows系统进行验证。 + - 使用Linux系统验证 + + 执行如下命令,查看是否可以访问网页信息,服务搭建成功时,该网页可以正常访问。 + + ``` + $ curl http://192.168.1.60 + ``` + + 执行如下命令,查看命令返回值是否为0,返回值为0,说明nginx服务器搭建成功。 + + ``` + $ echo $? + ``` + + - 使用Windows系统验证 + + 打开浏览器,在地址栏输入如下地址,如果能正常访问网页,说明nginx服务器搭建成功。 + + http://192.168.1.60 + + 如果修改了端口号,输入地址格式如下: + + http://192.168.1.60:端口号 + + diff --git a/docs/zh/server/administration/administrator/figures/D1376B2A-D036-41C4-B852-E8368F363B5E-1.png b/docs/zh/server/administration/administrator/figures/D1376B2A-D036-41C4-B852-E8368F363B5E-1.png new file mode 100644 index 0000000000000000000000000000000000000000..900cdc07c1f0e844bc48fe2342e83c91a23c24ec Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/D1376B2A-D036-41C4-B852-E8368F363B5E-1.png differ diff --git a/docs/zh/server/administration/administrator/figures/D1376B2A-D036-41C4-B852-E8368F363B5E.png b/docs/zh/server/administration/administrator/figures/D1376B2A-D036-41C4-B852-E8368F363B5E.png new file mode 100644 index 0000000000000000000000000000000000000000..900cdc07c1f0e844bc48fe2342e83c91a23c24ec Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/D1376B2A-D036-41C4-B852-E8368F363B5E.png differ diff --git a/docs/zh/server/administration/administrator/figures/PostgreSql_architecture.png b/docs/zh/server/administration/administrator/figures/PostgreSql_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..f780ad9cb56378e7baa3497da68ca1610a6dfadb Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/PostgreSql_architecture.png differ diff --git a/docs/zh/server/administration/administrator/figures/RA-arch-1.png b/docs/zh/server/administration/administrator/figures/RA-arch-1.png new file mode 100644 index 0000000000000000000000000000000000000000..bc55e411637b825b0ce44a7efca08f7e52e0fa70 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/RA-arch-1.png differ diff --git a/docs/zh/server/administration/administrator/figures/RA-arch-2.png b/docs/zh/server/administration/administrator/figures/RA-arch-2.png new file mode 100644 index 0000000000000000000000000000000000000000..7effbaf881ffe42823142561b9135237989d7153 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/RA-arch-2.png differ diff --git a/docs/zh/server/administration/administrator/figures/TPCM.png b/docs/zh/server/administration/administrator/figures/TPCM.png new file mode 100644 index 0000000000000000000000000000000000000000..290bdb3471b46dca3e9f0c0907c3855367bd5b65 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/TPCM.png differ diff --git a/docs/zh/server/administration/administrator/figures/creat_datadisk.png b/docs/zh/server/administration/administrator/figures/creat_datadisk.png new file mode 100644 index 0000000000000000000000000000000000000000..0dfd6a2802184af6d809c485191ea52452cf28d5 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/creat_datadisk.png differ diff --git a/docs/zh/server/administration/administrator/figures/creat_datadisk1.png b/docs/zh/server/administration/administrator/figures/creat_datadisk1.png new file mode 100644 index 0000000000000000000000000000000000000000..0dfd6a2802184af6d809c485191ea52452cf28d5 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/creat_datadisk1.png differ diff --git a/docs/zh/server/administration/administrator/figures/etmem-system-architecture.png b/docs/zh/server/administration/administrator/figures/etmem-system-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..1e077e00f44c0404526a4742d49c6e866601eee1 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/etmem-system-architecture.png differ diff --git a/docs/zh/server/administration/administrator/figures/ima_digest_list_update.png b/docs/zh/server/administration/administrator/figures/ima_digest_list_update.png new file mode 100644 index 0000000000000000000000000000000000000000..771067e31cee84591fbb914d7be4e8c576d7f5d2 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/ima_digest_list_update.png differ diff --git a/docs/zh/server/administration/administrator/figures/ima_performance.gif b/docs/zh/server/administration/administrator/figures/ima_performance.gif new file mode 100644 index 0000000000000000000000000000000000000000..72fad8a8333f7357c64a160c1d1c174c31201eaa Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/ima_performance.gif differ diff --git a/docs/zh/server/administration/administrator/figures/ima_verification.png b/docs/zh/server/administration/administrator/figures/ima_verification.png new file mode 100644 index 0000000000000000000000000000000000000000..d022b9d4ea08d4af386c7b76ca28115ad90e5451 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/ima_verification.png differ diff --git a/docs/zh/server/administration/administrator/figures/logical_architectureofMariaDB.png b/docs/zh/server/administration/administrator/figures/logical_architectureofMariaDB.png new file mode 100644 index 0000000000000000000000000000000000000000..8caa189a6fbf37bf4e9fd863c2ebb24e25547789 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/logical_architectureofMariaDB.png differ diff --git a/docs/zh/server/administration/administrator/figures/login.png b/docs/zh/server/administration/administrator/figures/login.png new file mode 100644 index 0000000000000000000000000000000000000000..d15c2cad98fba16320d587f3c7b0c80f435c5d3a Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/login.png differ diff --git a/docs/zh/server/administration/administrator/figures/nginx_deployed_success.png b/docs/zh/server/administration/administrator/figures/nginx_deployed_success.png new file mode 100644 index 0000000000000000000000000000000000000000..9ffb2c142defbd690e5407659116bf8e5582ba73 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/nginx_deployed_success.png differ diff --git a/docs/zh/server/administration/administrator/figures/nginx_start_failed.png b/docs/zh/server/administration/administrator/figures/nginx_start_failed.png new file mode 100644 index 0000000000000000000000000000000000000000..c8b855453433796265de42d7ffd0189c7ff9be2b Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/nginx_start_failed.png differ diff --git a/docs/zh/server/administration/administrator/figures/nginx_start_success.png b/docs/zh/server/administration/administrator/figures/nginx_start_success.png new file mode 100644 index 0000000000000000000000000000000000000000..bc6929772fd98fac3494b4436f26910b09818cb7 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/nginx_start_success.png differ diff --git a/docs/zh/server/administration/administrator/figures/postgres.png b/docs/zh/server/administration/administrator/figures/postgres.png new file mode 100644 index 0000000000000000000000000000000000000000..e7fc36882718587ec949133fe9892185cb4c2158 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/postgres.png differ diff --git a/docs/zh/server/administration/administrator/figures/top_display.png b/docs/zh/server/administration/administrator/figures/top_display.png new file mode 100644 index 0000000000000000000000000000000000000000..2d77d3dc2934763b5da896a827b9805da34d1c09 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/top_display.png differ diff --git a/docs/zh/server/administration/administrator/figures/trusted_chain.png b/docs/zh/server/administration/administrator/figures/trusted_chain.png new file mode 100644 index 0000000000000000000000000000000000000000..034f0f092f41fb500ee4122339c447d10d4138ec Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/trusted_chain.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0229622729.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0229622729.png new file mode 100644 index 0000000000000000000000000000000000000000..a32856aa08e459ed0f51f8fcf4c2f51511c12095 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0229622729.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0229622789.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0229622789.png new file mode 100644 index 0000000000000000000000000000000000000000..d245d48dc07e2b01734e21ec1952e89fa9269bdb Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0229622789.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0230050789.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0230050789.png new file mode 100644 index 0000000000000000000000000000000000000000..0b785be2a026fe059c6ee41700a971a11cfff7ae Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0230050789.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143176.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143176.png new file mode 100644 index 0000000000000000000000000000000000000000..300165189e6d3e8fa356f3d463cfc627c2ece0e2 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143176.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143177.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143177.png new file mode 100644 index 0000000000000000000000000000000000000000..ccafce4b0c58a4da0a9f7aece335ede24e5030c0 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143177.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143178.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143178.png new file mode 100644 index 0000000000000000000000000000000000000000..bff125f096215e91b28ee6deacde6d886e5b21eb Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143178.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143180.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143180.png new file mode 100644 index 0000000000000000000000000000000000000000..52f5644f9c985bcc39c0d146006dd9136140bc01 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143180.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143181.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143181.png new file mode 100644 index 0000000000000000000000000000000000000000..d3698e6c0e021a56be46b9f4944c858a425eb66c Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143181.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143183.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143183.png new file mode 100644 index 0000000000000000000000000000000000000000..55ffdfa2616ee259543c1539e46c3e05f9335354 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143183.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143185.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143185.png new file mode 100644 index 0000000000000000000000000000000000000000..bff125f096215e91b28ee6deacde6d886e5b21eb Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143185.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143187.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143187.png new file mode 100644 index 0000000000000000000000000000000000000000..52f5644f9c985bcc39c0d146006dd9136140bc01 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143187.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143189.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143189.png new file mode 100644 index 0000000000000000000000000000000000000000..7656f3aa5f5907f1e9f981c0cb5d44d4fcb84ef3 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143189.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143191.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143191.png new file mode 100644 index 0000000000000000000000000000000000000000..a82d1bcb2b719e3a372f63ae099cb5d52a93b536 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143191.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143193.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143193.png new file mode 100644 index 0000000000000000000000000000000000000000..94614045bddb0871b44d2f6603402f914871ad61 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143193.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143195.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143195.png new file mode 100644 index 0000000000000000000000000000000000000000..05011dbabe2d245c37ec68de646851bf955a2361 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143195.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143196.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143196.png new file mode 100644 index 0000000000000000000000000000000000000000..9bdbac969920af77721980804bd1c5433bea5bc9 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143196.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143197.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143197.png new file mode 100644 index 0000000000000000000000000000000000000000..5ea4eec4002374096d8ac18eb973ed3bf874b632 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143197.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143198.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143198.png new file mode 100644 index 0000000000000000000000000000000000000000..7d6360c150495d204da4b069e6dc62677580888f Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231143198.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0231563132.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231563132.png new file mode 100644 index 0000000000000000000000000000000000000000..bb801a9471f3f3541ba96491654f25e2df9ce8bf Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231563132.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0231563134.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231563134.png new file mode 100644 index 0000000000000000000000000000000000000000..398d15376d29d3aa406abb2e7e065d4625428c4d Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231563134.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0231563135.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231563135.png new file mode 100644 index 0000000000000000000000000000000000000000..785977142a6bf0e1c1815b82dea73d75fa206a75 Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231563135.png differ diff --git a/docs/zh/server/administration/administrator/figures/zh-cn_image_0231563136.png b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231563136.png new file mode 100644 index 0000000000000000000000000000000000000000..c274db4d0ca9d8758267a916e19fdef4aa22d0ba Binary files /dev/null and b/docs/zh/server/administration/administrator/figures/zh-cn_image_0231563136.png differ diff --git a/docs/zh/server/administration/administrator/process_management.md b/docs/zh/server/administration/administrator/process_management.md new file mode 100644 index 0000000000000000000000000000000000000000..c876f9dc12183d7b63c33df737c24374731c479b --- /dev/null +++ b/docs/zh/server/administration/administrator/process_management.md @@ -0,0 +1,350 @@ +# 管理进程 + +操作系统管理多个用户的请求和多个任务。大多数系统都只有一个CPU和一个主要存储,但一个系统可能有多个二级存储磁盘和多个输入/输出设备。操作系统管理这些资源并在多个用户间共享资源,当用户提出一个请求时,造成好像系统被用户独占的假象。实际上操作系统监控着一个等待执行的任务队列,这些任务包括用户任务、操作系统任务、邮件和打印任务等。本章节将从用户的角度讲述如何控制进程。 + + +- [管理进程](#管理进程) + - [查看进程](#查看进程) + - [who命令](#who命令) + - [ps命令](#ps命令) + - [top命令](#top命令) + - [kill命令](#kill命令) + - [调度启动进程](#调度启动进程) + - [定时运行一批程序(at)](#定时运行一批程序at) + - [周期性运行一批程序(cron)](#周期性运行一批程序cron) + - [挂起/恢复进程](#挂起恢复进程) + + +## 查看进程 + +Linux是一个多任务系统,经常需要对这些进程进行一些调配和管理。要进行管理,首先就要知道现在的进程情况:有哪些进程、进程的状态如何等。Linux提供了多种命令来了解进程的状况。 + +### who命令 + +who命令主要用于查看当前系统中的用户情况。如果用户想和其他用户建立即时通讯,比如使用talk命令,那么首先要确定的就是该用户在线,不然talk进程就无法建立起来。又如,系统管理员希望监视每个登录的用户此时此刻的所作所为,也要使用who命令。who命令应用起来非常简单,可以比较准确地掌握用户的情况,所以使用非常广泛。 + +例如查看系统中的用户及其状态。使用如下: + +``` +$ who +admin tty1 2023-07-28 15:55 +admin pts/0 2023-08-05 15:46 (192.168.0.110) +admin pts/2 2023-07-29 19:52 (192.168.0.110) +root pts/3 2023-07-30 12:07 (192.168.0.110) +root pts/4 2023-07-31 10:29 (192.168.0.144) +root pts/5 2023-07-31 14:52 (192.168.0.11) +root pts/6 2023-08-06 10:12 (192.168.0.234) +root pts/8 2023-08-06 11:34 (192.168.0.234) +``` + +### ps命令 + +ps命令是最基本又非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等,大部分进程信息都是可以通过执行该命令得到的。 + +ps命令最常用的还是用来监控后台进程的工作情况,因为后台进程是不与屏幕、键盘这些标准输入/输出设备进行通信的,所以如果需要检测其状况,就可使用ps命令。ps命令的常见选项如[表1](#zh-cn_topic_0151921029_t34619d964a3d41ad8694189ec383359c)所示。 + +**表 1** 选项说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

选项

+

描述

+

-e

+

显示所有进程。

+

-f

+

全格式。

+

-h

+

不显示标题。

+

-l

+

使用长格式。

+

-w

+

宽行输出。

+

-a

+

显示终端上的所有进程,包括其他用户的进程。

+

-r

+

只显示正在运行的进程。

+

-x

+

显示没有控制终端的进程。

+
+ +例如显示系统中终端上的所有进程。命令如下: + +``` +$ ps -a + PID TTY TIME CMD +12175 pts/6 00:00:00 bash +24526 pts/0 00:00:00 vsftpd +29478 pts/5 00:00:00 ps +32461 pts/0 1-01:58:33 sh +``` + +### top命令 + +top命令和ps命令的基本作用是相同的,显示系统当前的进程和其他状况,但是top是一个动态显示过程,即可以通过用户按键来不断刷新进程的当前状态,如果在前台执行该命令,它将独占前台,直到用户终止该程序为止。其实top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU的任务列表。该命令可以按CPU使用、内存使用和执行时间对任务进行排序,而且该命令的很多特性都可以通过交互式命令或者在定制文件中进行设定。 + +top命令输出的示例如[图1](#zh-cn_topic_0151921029_f289234fcdbac453796200d80e9889cd1)所示: + +**图 1** top显示 +![](./figures/top_display.png) + +### kill命令 + +当需要中断一个前台进程的时候,通常使用“Ctrl+c”组合键,而对于后台进程不能用组合键来终止,这时就可以使用kill命令。该命令可以终止前台和后台进程。终止后台进程的原因包括:该进程占用CPU的时间过多、该进程已经死锁等。 + +kill命令是通过向进程发送指定的信号来结束进程的。如果没有指定发送的信号,那么默认值为TERM信号。TERM信号将终止所有不能捕获该信号的进程。至于那些可以捕获该信号的进程可能就需要使用KILL信号(它的编号为9),而该信号不能被捕捉。 + +kill命令的浯法格式有以下两种方式: + +``` +kill [-s 信号 | -p] [-a] 进程号… +kill -l [信号] +``` + +其中进程号可以通过ps命令的输出得到。-s选项是给程序发送指定的信号,详细的信号可以用“kill -l”命令查看;-p选项只显示指定进程的ID号。 + +杀死pid为1409的进程,在root权限下执行如下命令: + +``` +# kill -9 1409 +``` + +显示所有的信号及其编号对应关系,示例如下: + +``` +$ kill -l + 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP + 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 +11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM +16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP +21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ +26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR +31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 +38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 +43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 +48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 +53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 +58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 +63) SIGRTMAX-1 64) SIGRTMAX +``` + +## 调度启动进程 + +有时候需要对系统进行一些比较费时而且占用资源的维护工作,这些工作适合在深夜进行,这时候用户就可以事先进行调度安排,指定任务运行的时间或者场合,到时候系统会自动完成这些任务。要使用自动启动进程的功能,就需要掌握以下几个启动命令。 + + + +### 定时运行一批程序(at) + +#### at命令 + +用户使用at命令在指定时刻执行指定的命令序列。该命令至少需要指定一个命令和一个执行时间。at命令可以只指定时间,也可以时间和日期一起指定。 + +at命令的语法格式如下: + +``` + at [-V] [-q 队列] [-f 文件名] [-mldbv] 时间 + at -c 作业 [作业…] +``` + +#### 设置时间 + +at允许使用一套相当复杂的时间指定方法,比如: + +- 接受在当天的hh:mm(小时:分钟)式的时间指定。如果该时间已经过去,那么就放在第二天执行。 +- 使用midnight(深夜)、noon(中午)、teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。 +- 采用12小时计时制,即在时间后面加上AM(上午)或者PM(下午)来说明是上午还是下午。 +- 指定命令执行的具体日期,指定格式为month day(月日)或者mm/dd/yy(月/日/年)或者dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。 + +上面介绍的都是绝对计时法,其实还可以使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为now+count time-units,now就是当前时间,time-units是时间单位,这里可以是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时等。还有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。下面通过一些例子来说明具体用法。 + +例如指定在今天下午4:30执行某个命令。假设现在时间是中午12:30,2019年6月7日,可用命令格式如下: + +``` + at 4:30pm + at 16:30 + at 16:30 today + at now+4 hours + at now+ 240 minutes + at 16:30 7.6.19 + at 16:30 6/7/19 + at 16:30 Jun 7 +``` + +以上这些命令表达的意义是完全一样的,所以在安排时间的时候完全可以根据个人喜好和具体情况自由选择。一般采用绝对时间的24小时计时法可以避免由于用户自己的疏忽造成计时错误,例如上例可以写成:at 16:30 6/7/19。 + +#### 执行权限 + +对于at命令来说,需要定时执行的命令是从标准输入或者使用-f选项指定的文件中读取并执行的。如果at命令是从一个使用su命令切换到用户shell中执行的,那么当前用户被认为是执行用户,所有的错误和输出结果都会送给这个用户。但是如果有邮件送出的话,收到邮件的将是原来的用户,也就是登录时shell的所有者。 + +例如在6月8日上午10点执行slocate -u命令。在root权限下执行命令如下: + +``` +# at 10:00 6/8/19 +at> slocate -u +at> +[1]+ Stopped at 10:00 6/8/19 +``` + +上面的结果中,输入at命令之后,会出现提示符at\>,提示用户输入命令,在此输入了slocate -u,然后按回车键。还可以输入多条命令,当所有要执行的命令输入结束后,按“Ctrl+d”键结束at命令。 + +在任何情况下,管理员帐户都可以使用这个命令。对于其他用户来说,是否可以使用就取决于/etc/at.allow和/etc/at.deny文件。 + +### 周期性运行一批程序(cron) + +前面介绍at命令都会在一定时间内完成一定任务,但是它只能执行一次。也就是说,当指定了运行命令后,系统在指定时间完成任务,以后就不再执行了。但是在很多情况下需要周期性重复执行一些命令,这时候就需要使用cron命令来完成任务。 + +#### 运行机制 + +首先cron命令会搜索/var/spool/cron目录,寻找以/etc/passwd文件中的用户名命名的crontab文件,被找到的这种文件将装入内存。比如一个用户名为userexample的用户,对应的crontab文件应该是/var/spool/cron/userexample,即以该用户命名的crontab文件存放在/var/spool/cron目录下面。 + +cron命令还将搜索/etc/crontab文件,这个文件是用不同的格式写成的。cron启动以后,它将首先检查是否有用户设置了crontab文件,如果没有就转入睡眠状态,释放系统资源。所以该后台进程占用资源极少,它每分钟被唤醒一次,查看当前是否有需要运行的命令。 + +命令执行结束后,任何输出都将作为邮件发送给crontab的所有者,或者是/etc/crontab文件中MAILTO环境变量中指定的用户。这是cron的工作原理,但是cron命令的执行不需要用户干涉,用户只需要修改crontab中要执行的命令。 + +#### crontab命令 + +crontab命令用于安装、删除或者显示用于驱动cron后台进程的表格。用户把需要执行的命令序列放到crontab文件中以获得执行,而且每个用户都可以有自己的crontab文件。 + +crontab命令的常用方法如下: + +- crontab -u:设置某个用户的cron服务,root用户在执行crontab时需要此参数。 +- crontab -l:列出当前用户cron服务的详细内容。 +- crontab -r:删除当前用户的cron服务。 +- crontab -e:编辑当前用户的cron服务。 + +例如root查看自己的cron设置。命令如下: + +``` +# crontab -u root -l +``` + +#### crontab文件 + +在crontab文件中输入需要执行的命令和时间。该文件中每行都包括6个域,其中前5个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔。格式如下: + +``` +minute hour day-of-month month-of-year day-of-week commands +``` + +对于每一项的说明如[表2](#zh-cn_topic_0151921016_t7d97d1204fe249d7ae0a87b4cf9a9353)所示。 + +**表 2** 参数说明 + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

描述

+

minute

+

分钟(0~59)。

+

hour

+

小时(0~23)。

+

day-of-month

+

一个月的第几天(1~31)。

+

month-of-year

+

一年的第几个月(1~12)。

+

day-of-week

+

一周的星期几(0~6),0代表星期天。

+

commands

+

需要执行的命令。

+
+ +这些项都不能为空,必须指定值。除了数字还有几个特殊的符号“\*”、“/”和“-”、“,”。其中,\*代表所有的取值范围内的数字,/代表每的意思,“\*/5”表示每5个单位,“-”代表从某个数字到某个数字,“,”用于分开几个离散数字。对于要执行的命令,调用的时候需要写出命令的完整路径。 + +例如每天18点到22点之间每两个小时,在/tmp/test.txt文件中加入sleepy文本。在crontab文件中对应的行如下: + +``` +* 18-22/2 * * * echo "sleepy" >> /tmp/test.txt +``` + +每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件。此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e来编辑。用户也可以另外建立一个文件,使用“cron文件名”命令导入cron设置。 + +假设有个用户名为userexample,他需要为自己创建一个crontab文件。步骤如下: + +1. 首先可以使用任何文本编辑器建立一个新文件,并向该文件加入需要运行的命令和要定期执行的时间,假设该文件为 \~/userexample.cron。 +2. 然后在root权限下使用crontab命令安装这个文件,使之成为该用户的crontab文件。命令如下: + + ``` + # crontab -u userexample ~/userexample.cron + ``` + + +这样crontab文件就建立好了,可以转到/var/spool/cron目录下面查看,发现多了一个userexample文件。这个文件就是所需的crontab文件。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>cron启动后,每过一分钟读一次crontab文件,检查是否要执行里面的命令。因此该文件被修改后不需要重新启动cron服务。 + +#### 编辑配置文件 + +cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此通过配置这个文件也能得到cron的服务。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式如下: + +``` +SHELL=/bin/sh +PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin +MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 +HOME=/ +# run-parts +01 * * * * root run-parts /etc/cron.hourly //每个小时执行一次/etc/cron.hourly里的脚本 +02 4 * * * root run-parts /etc/cron.daily //每天执行一次/etc/cron.daily里的脚本 +22 4 * * 0 root run-parts /etc/cron.weekly //每周执行一次/etc/cron.weekly里的脚本 +42 4 1 * * root run-parts /etc/cron.monthly //每月执行一次/etc/cron.monthly里的脚本 +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>如果去掉run-parts参数,其后面就是运行的某个脚本名,而不是目录名。 + +## 挂起/恢复进程 + +作业控制允许进程挂起并可以在需要时恢复进程的运行,被挂起的作业恢复后将从中止处开始继续运行。只要在键盘上按“Ctrl+Z”键,即可挂起当前的前台作业。在键盘上按“Ctrl+Z”键后,将挂起当前执行的命令cat。使用jobs命令可以显示shell的作业清单,包括具体的作业、作业号以及作业当前所处的状态。 + +恢复进程执行时,有两种选择:用fg命令将挂起的作业放回到前台执行;用bg命令将挂起的作业放到后台执行。灵活使用上述命令,将给自己带来很大的方便。 + diff --git a/docs/zh/server/administration/administrator/public_sys-resources/icon-caution.gif b/docs/zh/server/administration/administrator/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/administration/administrator/public_sys-resources/icon-caution.gif differ diff --git a/docs/zh/server/administration/administrator/public_sys-resources/icon-danger.gif b/docs/zh/server/administration/administrator/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/administration/administrator/public_sys-resources/icon-danger.gif differ diff --git a/docs/zh/server/administration/administrator/public_sys-resources/icon-note.gif b/docs/zh/server/administration/administrator/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/server/administration/administrator/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/server/administration/administrator/public_sys-resources/icon-notice.gif b/docs/zh/server/administration/administrator/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/server/administration/administrator/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/server/administration/administrator/public_sys-resources/icon-tip.gif b/docs/zh/server/administration/administrator/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/zh/server/administration/administrator/public_sys-resources/icon-tip.gif differ diff --git a/docs/zh/server/administration/administrator/public_sys-resources/icon-warning.gif b/docs/zh/server/administration/administrator/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/administration/administrator/public_sys-resources/icon-warning.gif differ diff --git a/docs/zh/server/administration/administrator/service_management.md b/docs/zh/server/administration/administrator/service_management.md new file mode 100644 index 0000000000000000000000000000000000000000..f9f5349ee37742881939a9b8dfb3f3024534d4df --- /dev/null +++ b/docs/zh/server/administration/administrator/service_management.md @@ -0,0 +1,845 @@ +# 管理服务 + +本章介绍如何使用systemd进行系统和服务管理。 + + +- [管理服务](#管理服务) + - [简介](#简介) + - [概念介绍](#概念介绍) + - [特性说明](#特性说明) + - [更快的启动速度](#更快的启动速度) + - [提供按需启动能力](#提供按需启动能力) + - [采用cgroup特性跟踪和管理进程的生命周期](#采用cgroup特性跟踪和管理进程的生命周期) + - [启动挂载点和自动挂载的管理](#启动挂载点和自动挂载的管理) + - [实现事务性依赖关系管理](#实现事务性依赖关系管理) + - [与SysV初始化脚本兼容](#与sysv初始化脚本兼容) + - [能够对系统进行快照和恢复](#能够对系统进行快照和恢复) + - [管理系统服务](#管理系统服务) + - [sysvinit命令和systemd命令](#sysvinit命令和systemd命令) + - [显示所有当前服务](#显示所有当前服务) + - [显示服务状态](#显示服务状态) + - [运行服务](#运行服务) + - [关闭服务](#关闭服务) + - [重启服务](#重启服务) + - [启用服务](#启用服务) + - [禁用服务](#禁用服务) + - [改变运行级别](#改变运行级别) + - [Target和运行级别](#target和运行级别) + - [查看系统默认启动目标](#查看系统默认启动目标) + - [查看当前系统所有的启动目标](#查看当前系统所有的启动目标) + - [改变默认目标](#改变默认目标) + - [改变当前目标](#改变当前目标) + - [切换到救援模式](#切换到救援模式) + - [切换到紧急模式](#切换到紧急模式) + - [关闭、暂停和休眠系统](#关闭暂停和休眠系统) + - [systemctl命令](#systemctl命令) + - [关闭系统](#关闭系统) + - [重启系统](#重启系统) + - [使系统待机](#使系统待机) + - [使系统休眠](#使系统休眠) + + + +## 简介 + +systemd是在Linux下,与SysV和LSB初始化脚本兼容的系统和服务管理器。systemd使用socket和D-Bus来开启服务,提供基于守护进程的按需启动策略,支持快照和系统状态恢复,维护挂载和自挂载点,实现了各服务间基于从属关系的一个更为精细的逻辑控制,拥有更高的并行性能。 + +### 概念介绍 + +systemd开启和监督整个系统是基于unit的概念。unit是由一个与配置文件对应的名字和类型组成的(例如:avahi.service unit有一个具有相同名字的配置文件,是守护进程Avahi的一个封装单元)。unit有多种类型,如[表1](#zh-cn_topic_0151921012_t2dcb6d973cc249ed9ccd56729751ca6b)所示。 + +**表 1** unit说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

unit名称

+

后缀名

+

描述

+

Service unit

+

.service

+

系统服务。

+

Target unit

+

.target

+

一组systemd units。

+

Automount unit

+

.automount

+

文件系统挂载点。

+

Device unit

+

.device

+

内核识别的设备文件。

+

Mount unit

+

.mount

+

文件系统挂载点。

+

Path unit

+

.path

+

在一个文件系统中的文件或目录。

+

Scope unit

+

.scope

+

外部创建的进程。

+

Slice unit

+

.slice

+

一组用于管理系统进程分层组织的units。

+

Socket unit

+

.socket

+

一个进程间通信的Socket。

+

Swap unit

+

.swap

+

swap设备或者swap文件。

+

Timer unit

+

.timer

+

systemd计时器。

+
+ +所有的可用systemd unit类型,可在如[表2](#zh-cn_topic_0151921012_t2523a0a9a0c54f9b849e52d1efa0160c)所示的路径下查看。 + +**表 2** 可用systemd unit类型 + + + + + + + + + + + + + + + + +

路径

+

描述

+

/usr/lib/systemd/system/

+

随安装的RPM产生的systemd units。

+

/run/systemd/system/

+

在运行时创建systemd units。

+

/etc/systemd/system/

+

由系统管理员创建和管理的systemd units。

+
+ +## 特性说明 + +### 更快的启动速度 + +systemd提供了比UpStart更激进的并行启动能力,采用了socket/D-Bus activation等技术启动服务,带来了更快的启动速度。 + +为了减少系统启动时间,systemd的目标是: + +- 尽可能启动更少的进程。 +- 尽可能将更多进程并行启动。 + +### 提供按需启动能力 + +当sysvinit系统初始化的时候,它会将所有可能用到的后台服务进程全部启动运行。并且系统必须等待所有的服务都启动就绪之后,才允许用户登录。这种做法有两个缺点:首先是启动时间过长;其次是系统资源浪费。 + +某些服务很可能在很长一段时间内,甚至整个服务器运行期间都没有被使用过。比如CUPS,打印服务在多数服务器上很少被真正使用到。大量实际应用情况表明,在很多服务器上SSHD也是很少被真正访问到的。花费在启动这些服务上的时间是不必要的;同样,花费在这些服务上的系统资源也是一种浪费。 + +systemd可以提供按需启动的能力,只有在某个服务被真正请求的时候才启动它。当该服务结束,systemd可以关闭它,等待下次需要时再次启动它。 + +### 采用cgroup特性跟踪和管理进程的生命周期 + +init系统的一个重要职责就是负责跟踪和管理服务进程的生命周期。它不仅可以启动一个服务,也能够停止服务。这看上去没有什么特别的,然而在真正用代码实现的时候,您或许会发现停止服务比一开始想的要困难。 + +服务进程一般都会作为守护进程(daemon)在后台运行,为此服务程序有时候会派生(fork)两次。在UpStart中,需要在配置文件中正确地配置expect小节。这样UpStart通过对fork系统调用进行计数,从而获知真正的精灵进程的PID号。 + +cgroup已经出现了很久,它主要用来实现系统资源配额管理。cgroup提供了类似文件系统的接口,使用方便。当进程创建子进程时,子进程会继承父进程的cgroup。因此无论服务如何启动新的子进程,所有的这些相关进程都会属于同一个cgroup,systemd只需要简单地遍历指定的cgroup即可正确地找到所有的相关进程,将它们逐一停止即可。 + +### 启动挂载点和自动挂载的管理 + +传统的Linux系统中,用户可以用/etc/fstab文件来维护固定的文件系统挂载点。这些挂载点在系统启动过程中被自动挂载,一旦启动过程结束,这些挂载点就会确保存在。这些挂载点都是对系统运行至关重要的文件系统,比如HOME目录。和sysvinit一样,systemd管理这些挂载点,以便能够在系统启动时自动挂载它们。systemd还兼容/etc/fstab文件,您可以继续使用该文件管理挂载点。 + +有时候用户还需要动态挂载点,比如打算访问DVD内容时,才临时执行挂载以便访问其中的内容,而不访问光盘时该挂载点被取消(umount\),以便节约资源。传统地,人们依赖autofs服务来实现这种功能。 + +systemd内建了自动挂载服务,无需另外安装autofs服务,可以直接使用systemd提供的自动挂载管理能力来实现autofs的功能。 + +### 实现事务性依赖关系管理 + +系统启动过程是由很多的独立工作共同组成的,这些工作之间可能存在依赖关系,比如挂载一个NFS文件系统必须依赖网络能够正常工作。systemd虽然能够最大限度地并发执行很多有依赖关系的工作,但是类似“挂载NFS”和“启动网络”这样的工作还是存在天生的先后依赖关系,无法并发执行。对于这些任务,systemd维护一个“事务一致性”的概念,保证所有相关的服务都可以正常启动而不会出现互相依赖,以至于死锁的情况。 + +### 与SysV初始化脚本兼容 + +和UpStart一样,systemd引入了新的配置方式,对应用程序的开发也有一些新的要求。如果systemd想替代目前正在运行的初始化系统,就必须和现有程序兼容。任何一个Linux发行版都很难为了采用systemd而在短时间内将所有的服务代码都修改一遍。 + +systemd提供了和sysvinit以及LSB initscripts兼容的特性。系统中已经存在的服务和进程无需修改。这降低了系统向systemd迁移的成本,使得systemd替换现有初始化系统成为可能。 + +### 能够对系统进行快照和恢复 + +systemd支持按需启动,因此系统的运行状态是动态变化的,人们无法准确地知道系统当前运行了哪些服务。systemd快照提供了一种将当前系统运行状态保存并恢复的能力。 + +比如系统当前正运行服务A和B,可以用systemd命令行对当前系统运行状况创建快照。然后将进程A停止,或者做其他的任意的对系统的改变,比如启动新的进程C。在这些改变之后,运行systemd的快照恢复命令,就可立即将系统恢复到快照时刻的状态,即只有服务A和B在运行。一个可能的应用场景是调试:比如服务器出现一些异常,为了调试方便,用户将当前状态保存为快照,然后可以进行任意的操作,比如停止服务等。等调试结束,恢复快照即可。 + +## 管理系统服务 + +systemd提供systemctl命令来运行、关闭、重启、显示、启用/禁用系统服务。 + +### sysvinit命令和systemd命令 + +systemd提供systemctl命令与sysvinit命令的功能类似。当前版本中依然兼容service和chkconfig命令,相关说明如[表3](#zh-cn_topic_0151920917_ta7039963b0c74b909b72c22cbc9f2e28),但建议用systemctl进行系统服务管理。 + +**表 3** sysvinit命令和systemd命令的对照表 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

sysvinit命令

+

systemd命令

+

备注

+

service network start

+

systemctl start network.service

+

用来启动一个服务 (并不会重启现有的)。

+

service network stop

+

systemctl stop network.service

+

用来停止一个服务 (并不会重启现有的)。

+

service network restart

+

systemctl restart network.service

+

用来停止并启动一个服务。

+

service network reload

+

systemctl reload network.service

+

当支持时,重新装载配置文件而不中断等待操作。

+

service network condrestart

+

systemctl condrestart network.service

+

如果服务正在运行那么重启它。

+

service network status

+

systemctl status network.service

+

检查服务运行状态

+

chkconfig network on

+

systemctl enable network.service

+

在下次启动时或满足其他触发条件时设置服务为启用。

+

chkconfig network off

+

systemctl disable network.service

+

在下次启动时或满足其他触发条件时设置服务为禁用。

+

chkconfig network

+

systemctl is-enabled network.service

+

用来检查一个服务在当前环境下被配置为启用还是禁用。

+

chkconfig \-\-list

+

systemctl list-unit-files \-\-type=service

+

输出在各个运行级别下服务的启用和禁用情况。

+

chkconfig network \-\-list

+

ls /etc/systemd/system/*.wants/network.service

+

用来列出该服务在哪些运行级别下启用和禁用。

+

chkconfig network \-\-add

+

systemctl daemon-reload

+

当您创建新服务文件或者变更设置时使用。

+
+ +### 显示所有当前服务 + +如果您需要显示当前正在运行的服务,使用命令如下: + +``` +systemctl list-units --type service +``` + +如果您需要显示所有的服务(包括未运行的服务),需要添加-all参数,使用命令如下: + +``` +systemctl list-units --type service --all +``` + +例如显示当前正在运行的服务,命令如下: + +``` +$ systemctl list-units --type service +UNIT LOAD ACTIVE SUB DESCRIPTION +atd.service loaded active running Deferred execution scheduler +auditd.service loaded active running Security Auditing Service +avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack +chronyd.service loaded active running NTP client/server +crond.service loaded active running Command Scheduler +dbus.service loaded active running D-Bus System Message Bus +dracut-shutdown.service loaded active exited Restore /run/initramfs on shutdown +firewalld.service loaded active running firewalld - dynamic firewall daemon +getty@tty1.service loaded active running Getty on tty1 +gssproxy.service loaded active running GSSAPI Proxy Daemon +...... +``` + +### 显示服务状态 + +如果您需要显示某个服务的状态,可执行如下命令: + +``` +systemctl status name.service +``` + +相关状态显示参数说明如[表4](#zh-cn_topic_0151920917_t36cd267d69244ed39ae06bb117ed8e62)所示。 + +**表 4** 状态参数说明 + + + + + + + + + + + + + + + + + + + +

参数

+

描述

+

Loaded

+

说明服务是否被加载,并显示服务对应的绝路径以及是否启用。

+

Active

+

说明服务是否正在运行,并显示时间节点。

+

Main PID

+

相应的系统服务的PID值。

+

CGroup

+

相关控制组(CGroup)的其他信息。

+
+ +如果您需要鉴别某个服务是否运行,可执行如下命令: + +``` +systemctl is-active name.service +``` + +is-active命令的返回结果如下: + +**表 5** is-active命令的返回结果 + + + + + + + + + + + + + + + + + + + +

状态

+

含义

+

active(running)

+

有一个或多个程序正在系统中执行。

+

active(exited)

+

仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行。 举例来说,开机或者 是挂载时才会进行一次的 quotaon 功能。

+

active(waiting)

+

正在执行当中,不过要等待其他的事件才能继续处理。例如:打印的队列相关服务 就是这种状态,虽然正在启动中,不过也需要真的有队列进来 (打印作业) 这样他才会继续唤醒打印机 服务来进行下一步打印的功能。

+

inactive

+

这个服务没有运行。

+
+ +同样,如果您需要判断某个服务是否被启用,可执行如下命令: + +``` +systemctl is-enabled name.service +``` + +is-enabled命令的返回结果如下: + +**表 6** is-enabled命令的返回结果 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

状态

+

含义

+

enabled

+

已经通过 /etc/systemd/system/ 目录下的 Alias= 别名、 .wants/ 或 .requires/ 软链接被永久启用。

+

enabled-runtime

+

已经通过 /run/systemd/system/ 目录下的 Alias= 别名、 .wants/ 或 .requires/ 软链接被临时启用。

+

linked

+

虽然单元文件本身不在标准单元目录中,但是指向此单元文件的一个或多个软链接已经存在于 /etc/systemd/system/ 永久目录中。

+

linked-runtime

+

虽然单元文件本身不在标准单元目录中,但是指向此单元文件的一个或多个软链接已经存在于 /run/systemd/system/ 临时目录中。

+

masked

+

已经被 /etc/systemd/system/ 目录永久屏蔽(软链接指向 /dev/null 文件),因此 start 操作会失败。

+

masked-runtime

+

已经被 /run/systemd/systemd/ 目录临时屏蔽(软链接指向 /dev/null 文件),因此 start 操作会失败。

+

static

+

尚未被启用,并且单元文件的 "[Install]" 小节中没有可用于 enable 命令的选项。

+

indirect

+

尚未被启用,但是单元文件的 "[Install]" 小节中 Also= 选项的值列表非空(也就是列表中的某些单元可能已被启用)、或者它拥有一个不在 Also= 列表中的其他名称的别名软链接。对于模版单元来说,表示已经启用了一个不同于 DefaultInstance= 的实例。

+

disabled

+

尚未被启用,但是单元文件的 "[Install]" 小节中存在可用于 enable 命令的选项。

+

generated

+

单元文件是被单元生成器动态生成的。被生成的单元文件可能并未被直接启用,而是被单元生成器隐含的启用了。

+

transient

+

单元文件是被运行时API动态临时生成的。该临时单元可能并未被启用。

+

bad

+

单元文件不正确或者出现其他错误。 is-enabled 不会返回此状态,而是会显示一条出错信息。 list-unit-files 命令有可能会显示此单元。

+
+ +例如查看gdm.service服务状态,命令如下: + +``` +# systemctl status gdm.service +gdm.service - GNOME Display Manager + Loaded: loaded (/usr/lib/systemd/system/gdm.service; enabled) + Active: active (running) since Thu 2013-10-17 17:31:23 CEST; 5min ago + Main PID: 1029 (gdm) + CGroup: /system.slice/gdm.service + ├─1029 /usr/sbin/gdm + ├─1037 /usr/libexec/gdm-simple-slave --display-id /org/gno... + └─1047 /usr/bin/Xorg :0 -background none -verbose -auth /r...Oct 17 17:31:23 localhost systemd[1]: Started GNOME Display Manager. +``` + +### 运行服务 + +如果您需要运行某个服务,请在root权限下执行如下命令: + +``` +systemctl start name.service +``` + +例如运行httpd服务,命令如下: + +``` +# systemctl start httpd.service +``` + +### 关闭服务 + +如果您需要关闭某个服务,请在root权限下执行如下命令: + +``` +systemctl stop name.service +``` + +例如关闭蓝牙服务,命令如下: + +``` +# systemctl stop bluetooth.service +``` + +### 重启服务 + +如果您需要重启某个服务,请在root权限下执行如下命令: + +``` +systemctl restart name.service +``` + +执行命令后,当前服务会被关闭,但马上重新启动。如果您指定的服务,当前处于关闭状态,执行命令后,服务也会被启动。 + +例如重启蓝牙服务,命令如下: + +``` +# systemctl restart bluetooth.service +``` + +### 启用服务 + +如果您需要在开机时启用某个服务,请在root权限下执行如下命令: + +``` +systemctl enable name.service +``` + +例如设置httpd服务开机时启动,命令如下: + +``` +# systemctl enable httpd.service +ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service' +``` + +### 禁用服务 + +如果您需要在开机时禁用某个服务,请在root权限下执行如下命令: + +``` +systemctl disable name.service +``` + +例如在开机时禁用蓝牙服务启动,命令如下: + +``` +# systemctl disable bluetooth.service +Removed /etc/systemd/system/bluetooth.target.wants/bluetooth.service. +Removed /etc/systemd/system/dbus-org.bluez.service. +``` + +## 改变运行级别 + +### Target和运行级别 + +systemd用目标(target)替代了运行级别的概念,提供了更大的灵活性,如您可以继承一个已有的目标,并添加其他服务,来创建自己的目标。[表7](#zh-cn_topic_0151920939_t9af92c282ad240ea9a79fb08d26e8181)列举了systemd下的目标和常见runlevel的对应关系。 + +**表 7** 运行级别和systemd目标 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

运行级别

+

systemd目标(target)

+

描述

+

0

+

runlevel0.target,poweroff.target

+

关闭系统。

+

1, s, single

+

runlevel1.target,rescue.target

+

单用户模式。

+

2, 4

+

runlevel2.target,runlevel4.target,multi-user.target

+

用户定义/域特定运行级别。默认等同于3。

+

3

+

runlevel3.target,multi-user.target

+

多用户,非图形化。用户可以通过多个控制台或网络登录。

+

5

+

runlevel5.target,graphical.target

+

多用户,图形化。通常为所有运行级别3的服务外加图形化登录。

+

6

+

runlevel6.target,reboot.target

+

重启系统。

+

emergency

+

emergency.target

+

紧急Shell。

+
+ +### 查看系统默认启动目标 + +查看当前系统默认的启动目标,命令如下: + +``` +systemctl get-default +``` + +### 查看当前系统所有的启动目标 + +查看当前系统所有的启动目标,命令如下: + +``` +systemctl list-units --type=target +``` + +### 改变默认目标 + +改变系统默认的目标,在root权限下执行如下命令: + +``` +systemctl set-default name.target +``` + +### 改变当前目标 + +改变当前系统的目标,在root权限下执行如下命令: + +``` +systemctl isolate name.target +``` + +### 切换到救援模式 + +改变当前系统为救援模式,在root权限下执行如下命令: + +``` +systemctl rescue +``` + +这条命令和“systemctl isolate rescue.target”类似。命令执行后会在串口有如下打印信息: + +``` +You are in rescue mode. After logging in, type "journalctl -xb" to viewsystem logs, "systemctl reboot" to reboot, "systemctl default" or "exit"to boot into default mode. +Give root password for maintenance +(or press Control-D to continue): +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>从救援模式进入正常模式,用户需要重启系统。 + +### 切换到紧急模式 + +改变当前系统为紧急模式,在root权限下执行如下命令: + +``` +systemctl emergency +``` + +这条命令和“systemctl isolate emergency.target”类似。命令执行后会在串口有如下打印信息: + +``` +You are in emergency mode. After logging in, type "journalctl -xb" to viewsystem logs, "systemctl reboot" to reboot, "systemctl default" or "exit"to boot into default mode. +Give root password for maintenance +(or press Control-D to continue): +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>从紧急模式进入正常模式,用户需要重启系统。 + +## 关闭、暂停和休眠系统 + +### systemctl命令 + +systemd通过systemctl命令可以对系统进行关机、重启、休眠等一系列操作。当前仍兼容部分Linux常用管理命令,对应关系如[表8](#zh-cn_topic_0151920964_t3daaaba6a03b4c36be9668efcdb61f3b)。建议用户使用systemctl命令进行操作。 + +**表 8** 命令对应关系 + + + + + + + + + + + + + + + + + + + + +

Linux常用管理命令

+

systemctl命令

+

描述

+

halt

+

systemctl halt

+

关闭系统

+

poweroff

+

systemctl poweroff

+

关闭电源

+

reboot

+

systemctl reboot

+

重启

+
+ +### 关闭系统 + +关闭系统并下电,在root权限下执行如下命令: + +``` +systemctl poweroff +``` + +关闭系统但不下电机器,在root权限下执行如下命令: + +``` +systemctl halt +``` + +执行上述命令会给当前所有的登录用户发送一条提示消息。如果不想让systemd发送该消息,您可以添加“\-\-no\-wall”参数。具体命令如下: + +``` +systemctl --no-wall poweroff +``` + +### 重启系统 + +重启系统,在root权限下执行如下命令: + +``` +systemctl reboot +``` + +执行上述命令会给当前所有的登录用户发送一条提示消息。如果不想让systemd发送该消息,您可以添加“\-\-no\-wall”参数。具体命令如下: + +``` +systemctl --no-wall reboot +``` + +### 使系统待机 + +使系统待机,在root权限下执行如下命令: + +``` +systemctl suspend +``` + +### 使系统休眠 + +使系统休眠,在root权限下执行如下命令: + +``` +systemctl hibernate +``` + +使系统待机且处于休眠状态,在root权限下执行如下命令: + +``` +systemctl hybrid-sleep +``` diff --git a/docs/zh/server/administration/administrator/setting_up_the_database_server.md b/docs/zh/server/administration/administrator/setting_up_the_database_server.md new file mode 100644 index 0000000000000000000000000000000000000000..753cab1337ae8a13596228ef13b6084507b68814 --- /dev/null +++ b/docs/zh/server/administration/administrator/setting_up_the_database_server.md @@ -0,0 +1,2686 @@ +# 搭建数据库服务器 + + + +- [搭建数据库服务器](#搭建数据库服务器) + - [PostgreSql服务器](#postgresql服务器) + - [软件介绍](#软件介绍) + - [配置环境](#配置环境) + - [安装、运行和卸载](#安装运行和卸载) + - [管理数据库角色](#管理数据库角色) + - [管理数据库](#管理数据库) + - [Mariadb服务器](#mariadb服务器) + - [软件介绍](#软件介绍-1) + - [配置环境](#配置环境-1) + - [安装、运行和卸载](#安装运行和卸载-1) + - [管理数据库用户](#管理数据库用户) + - [管理数据库](#管理数据库-1) + - [MySQL服务器](#mysql服务器) + - [软件介绍](#软件介绍-2) + - [配置环境](#配置环境-2) + - [安装、运行和卸载](#安装运行和卸载-2) + - [管理数据库用户](#管理数据库用户-1) + - [管理数据库](#管理数据库-2) + - [openGauss服务器](#openGauss服务器) + - [软件介绍](#软件介绍-3) + - [安装](#安装-3) + - [管理数据库角色](#管理数据库角色-1) + - [管理数据库](#管理数据库-3) + + + +## PostgreSql服务器 + +### 软件介绍 + +PostgreSQL的架构如[图1](#fig26022387391)所示,主要进程说明如[表1](#table62020913417)所示。 + +**图 1** PostgreSql架构 +![](./figures/PostgreSql_architecture.png) + +**表 1** PostgreSql中的主要进程说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

进程类别

+

进程名称

+

说明

+

主进程

+

Postmaster

+

Postmaster是整个数据库实例的总控进程,负责启动和关闭该数据库实例。

+

常驻进程

+

Postgres(常驻进程)

+

管理后端的常驻进程,也称为“postmaster”。其默认侦听UNIXDomain Socket和TCP/IP(Windows等,一部分的平台只侦听TCP/IP)的5432端口,等待来自前端的连接处理。侦听的端口号可以在PostgreSql的设置文件postgresql.conf中修改。

+

子进程

+

Postgres(子进程)

+

子进程根据pg_hba.conf定义的安全策略来判断是否允许进行连接,根据策略,会拒绝某些特定的IP及网络,或者也可以只允许某些特定的用户或者对某些数据库进行连接。

+

Postgres会接受前端过来的查询,然后对数据库进行检索,最后把结果返回,有时也会对数据库进行更新。更新的数据同时还会记录在事务日志里面(PostgreSQL称为WAL日志)。这个主要是当停电、服务器宕机、重新启动的时候进行恢复处理的时候使用。另外,把日志归档保存起来,可在需要进行恢复的时候使用。在PostgreSQL 9.0以后,通过把WAL日志传送其他的postgreSQL,可以实时的进行数据库复制,这就是所谓的“数据库复制”功能。

+

辅助进程

+

SysLogger(系统日志)

+

需要在Postgres.conf中logging_collection设置为on,此时主进程才会启动Syslogger辅助进程。

+

BgWriter(后台写)

+

把共享内存中的脏页写到磁盘上的进程。主要是为了提高插入、更新和删除数据的性能。

+

WALWriter(预写式日志)

+

在修改数据之前把修改操作记录到磁盘中,以便后面更新实时数据时就不需要数据持久化到文件中。

+

PgArch(归档)

+

WAL日志会被循环使用,PgArch在归档前会把WAL日志备份出来。通过PITY(Point in Time Recovery)技术,可以在数据库进行一次全量备份后,将全量备份时间点之后的WAL日志通过归档进行备份,然后凭借数据库的全量备份再加上后面产生的WAL日志,即可把数据库向前推到全量备份后的任意一个时间点。

+

AutoVacuum(系统自动清理)

+

在PostgreSQL数据库中,对表进行DELETE操作后,旧的数据并不会立即被删除,并且,在更新数据时,也并不会在旧的数据上做更新,而是新生成一行数据。旧的数据只是被标识为删除状态,只有在没有并发的其他事务读到这些就数据时,它们才会被清除。这个清除工作就由AutoVacuum进程完成。

+

PgStat(统计收集)

+

做数据的统计收集工作。主要用于查询优化时的代价估算,包括一个表和索引进行了多少次的插入、更新、删除操作,磁盘块读写的次数、行的读次数。pg_statistic中存储了PgStat收集的各类信息。

+

CheckPoint(检查点)

+

检查点是系统设置的事务序列点,设置检查点保证检查点前的日志信息刷到磁盘中。

+
+ +### 配置环境 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>以下环境配置仅为参考示例,具体配置视实际需求做配置 + +#### 关闭防火墙并取消开机自启动 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>测试环境下通常会关闭防火墙以避免部分网络因素影响,视实际需求做配置。 + +1. 在root权限下停止防火墙。 + + ```shell + systemctl stop firewalld + ``` + +2. 在root权限下关闭防火墙。 + + ```shell + systemctl disable firewalld + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >执行disable命令关闭防火墙的同时,也取消了开机自启动。 + +#### 修改SELINUX为disabled + +在root权限下修改配置文件。 + +```shell +sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config +``` + +#### 创建组和用户 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>服务器环境下,为了系统安全,通常会为进程分配单独的用户,以实现权限隔离。本章节创建的组和用户都是操作系统层面的,不是数据库层面的。 + +1. 在root权限下创建PostgreSQL用户(组)。 + + ```shell + groupadd postgres + useradd -g postgres postgres + ``` + +2. 在root权限下设置postgres用户密码(重复输入密码)。 + + ```shell + passwd postgres + ``` + +#### 搭建数据盘 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>- 测试极限性能时,建议单独挂载IO性能更优的NVME SSD存储介质创建PostgreSQL测试实例,避免磁盘IO对性能测试结果的影响,本文以单独挂载NVME SSD为例,参考步骤1\~步骤4。 +>- 非性能测试时,在root权限下执行以下命令,创建数据目录即可。然后跳过本小节: +> mkdir /data + +1. 在root权限下创建文件系统(以xfs为例,根据实际需求创建文件系统),若磁盘之前已做过文件系统,执行此命令会出现报错,可使用-f参数强制创建文件系统。 + + ```shell + mkfs.xfs /dev/nvme0n1 + ``` + +2. 在root权限下创建数据目录。 + + ```shell + mkdir /data + ``` + +3. 在root权限下挂载磁盘。 + + ```shell + mount -o noatime,nobarrier /dev/nvme0n1 /data + ``` + +#### 数据目录授权 + +1. 在root权限下修改目录权限。 + + ```shell + chown -R postgres:postgres /data/ + ``` + +### 安装、运行和卸载 + +#### 安装 + +1. 配置本地yum源,详细信息请参考[搭建repo服务器](./搭建repo服务器.md)。 +2. 清除缓存。 + + ```shell + dnf clean all + ``` + +3. 创建缓存。 + + ```shell + dnf makecache + ``` + +4. 在root权限下安装PostgreSQL服务器。 + + ```shell + dnf install postgresql-server + ``` + +5. 查看安装后的rpm包。 + + ```shell + rpm -qa | grep postgresql + ``` + +#### 运行 + +##### 初始化数据库 + +>![](./public_sys-resources/icon-notice.gif) **须知:** +>此步骤在postgres用户下操作。 + +1. 切换到已创建的PostgreSQL用户。 + + ```shell + su - postgres + ``` + +2. 初始化数据库,其中命令中的/usr/bin是命令initdb所在的目录。 + + ```shell + usr/bin/initdb -D /data/ + ``` + +##### 启动数据库 + +1. 启动PostgreSQL数据库。 + + ```shell + /usr/bin/pg_ctl -D /data/ -l /data/logfile start + ``` + +2. 确认PostgreSQL数据库进程是否正常启动。 + + ```shell + ps -ef | grep postgres + ``` + + 命令执行后,打印信息如下图所示,PostgreSQL相关进程已经正常启动了。 + + ![](./figures/postgres.png) + +##### 登录数据库 + +1. 登录数据库。 + + ```shell + /usr/bin/psql -U postgres + ``` + + ![](./figures/login.png) + + >![](./public_sys-resources/icon-note.gif) **说明:** + >初次登录数据库,无需密码。 + +##### 配置数据库帐号密码 + +1. 登录后,设置postgres密码。 + + ```shell + postgres=#alter user postgres with password '123456'; + ``` + + ![](./figures/zh-cn_image_0230050789.png) + +##### 退出数据库 + +1. 执行\\q退出数据库。 + + ```shell + postgres=#\q + ``` + +##### 停止数据库 + +1. 停止PostgreSQL数据库。 + + ```shell + /usr/bin/pg_ctl -D /data/ -l /data/logfile stop + ``` + +#### 卸载 + +1. 在postgres用户下停止数据库。 + + ```shell + /usr/bin/pg_ctl -D /data/ -l /data/logfile stop + ``` + +2. 在root用户下执行**dnf remove postgresql-server**卸载PostgreSQL数据库。 + + ```shell + dnf remove postgresql-server + ``` + +### 管理数据库角色 + +#### 创建角色 + +可以使用CREATE ROLE语句或createuser来创建角色。createuser是对CREATE ROLE命令的封装,需要在shell界面执行,而不是在数据库界面。 + +```shell +CREATE ROLE rolename [ [ WITH ] option [ ... ] ]; +``` + +```shell +createuser rolename +``` + +其中: + +- rolename:角色名。 +- option为参数选项,常用的有: + - SUPERUSER | NOSUPERUSER:决定一个新角色是否为"超级用户",若未指定,则默认为NOSUPERUSER,即不是超级用户。 + - CREATEDB | NOCREATEDB:定义一个角色是否能创建数据库,若未指定,则默认为NOCREATEDB,即不能创建数据库。 + - CREATEROLE | NOCREATEROLE:决定一个角色是否可以创建新角色,若未指定,则默认为NOCREATEROLE,即不能创建新角色。 + - INHERIT | NOINHERIT:决定一个角色是否"继承"它所在组的角色的权限。一个带有 INHERIT 属性的角色可以自动使用已经赋与它直接或间接所在组的任何权限。若未指定,则默认为INHERIT。 + - LOGIN | NOLOGIN:决定一个角色是否可以登录,一个拥有LOGIN属性的角色可以认为是一个用户,若无此属性的角色可以用于管理数据库权限,但是并不是用户,若未指定,则默认为NOLOGIN。但若创建角色是使用的是CREATE USER而不是CREATE ROLE,则默认是LOGIN属性。 + - \[ ENCRYPTED | UNENCRYPTED \] PASSWORD 'password':设置角色的密码,密码只对那些拥有 LOGIN 属性的角色有意义。ENCRYPTED | UNENCRYPTED表示是否对密码进行加密,若未指定,则默认为ENCRYPTED,即加密。 + - VALID UNTIL 'timestamp':角色的密码失效的时间戳,若为指定,则表示密码永久有效。 + - IN ROLE rolename1:列出一个或多个现有的角色,新角色rolename将立即加入这些角色,成为rolename1的成员。 + - ROLE rolename2:列出一个或多个现有的角色,它们将自动添加为新角色rolename的成员,即新角色为"组"。 + +要使用这条命令,必须拥有 CREATEROLE 权限或者是数据库超级用户。 + +##### 示例 + +创建一个可以登录的角色roleexample1。 + +```shell +postgres=# CREATE ROLE roleexample1 LOGIN; +``` + +创建一个密码为123456的角色roleexample2。 + +```shell +postgres=# CREATE ROLE roleexample2 WITH LOGIN PASSWORD '123456'; +``` + +创建角色名为roleexample3的角色。 + +```shell +[postgres@localhost ~]# createuser roleexample3 +``` + +#### 查看角色 + +可以使用SELECT语句或psql的元命令\\du查看角色。 + +```shell +SELECT rolename FROM pg_roles; +``` + +```shell +\du +``` + +其中:rolename:角色名。 + +##### 示例 + +查看roleexample1角色。 + +```shell +postgres=# SELECT roleexample1 from pg_roles; +``` + +查看现有角色。 + +```shell +postgres=# \du +``` + +#### 修改角色 + +##### 修改用户名 + +可以使用ALTER ROLE语句修改一个已经存在的角色名。 + +```shell +ALTER ROLE oldrolername RENAME TO newrolename; +``` + +其中: + +- oldrolername:旧的角色名。 +- newrolename:新的角色名。 + +##### 修改用户示例 + +将角色名roleexample1修改为roleexapme2。 + +```shell +postgres=# ALTER ROLE roleexample1 RENAME TO roleexample2; +``` + +##### 修改用户密码 + +可以使用ALTER ROLE语句修改一个角色的登录密码。 + +```shell +ALTER ROLE rolename PASSWORD 'password' +``` + +其中: + +- rolename:角色名。 +- password:密码。 + +##### 修改角色密码示例 + +将roleexample1的密码修改为456789。 + +```shell +postgres=# ALTER ROLE roleexample1 WITH PASSWORD '456789'; +``` + +#### 删除角色 + +可以使用DROP ROLE语句或dropuser来删除角色。dropuser是对DROP ROLE命令的封装,需要在shell界面执行,而不是在数据库界面。 + +```shell +DROP ROLE rolename; +``` + +```shell +dropuser rolename +``` + +其中:rolename为角色名。 + +##### 示例 + +删除userexample1角色。 + +```shell +postgres=# DROP ROLE userexample1; +``` + +删除userexample2角色。 + +```shell +[postgres@localhost ~]# dropuser userexample2 +``` + +#### 角色授权 + +可以使用GRANT语句来对角色授权。 + +对角色授予表的操作权限: + +```shell +GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ] +``` + +对角色授予序列的操作权限: + +```shell +GRANT { { USAGE | SELECT | UPDATE } [,...] | ALL [ PRIVILEGES ] } ON SEQUENCE sequencename [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ] +``` + +对角色授予数据库的操作权限: + +```shell +GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE databasename [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ] +``` + +对角色授予函数的操作权限: + +```shell +GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTION funcname ( [ [ argmode ] [ argname ] argtype [, ...] ] ) [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ] +``` + +对角色授予过程语言的操作权限: + +```shell +GRANT { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE langname [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ] +``` + +对角色授予模式的操作权限: + +```shell +GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schemaname [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ] +``` + +对角色授予表空间的操作权限: + +```shell +GRANT { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACE tablespacename [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ] +``` + +将角色rolename1的成员关系赋予角色rolename2: + +```shell +GRANT rolename1 [, ...] TO rolename2 [, ...] [ WITH ADMIN OPTION ] +``` + +其中: + +- SELECT、INSERT、UPDATE、DELETE、REFERENCES、TRIGGER、USAGE、CREATE、CONNECT、TEMPORARY、TEMP、EXECUTE、ALL \[ PRIVILEGES \]:用户的操作权限,ALL \[ PRIVILEGES \]表示所有的权限,PRIVILEGES关键字在 PostgreSQL里是可选的,但是严格的SQL 要求有这个关键字。 +- ON字句:用于指定权限授予的对象。 +- tablename:表名。 +- TO字句:用来指定被赋予权限的角色。 +- rolename、rolename1、rolename2:角色名。 +- groupname:角色组名。 +- PUBLIC:表示该权限要赋予所有角色,包括那些以后可能创建的用户。 +- WITH GRANT OPTION:表示权限的接收者也可以将此权限赋予他人,否则就不能授权他人。该选项不能赋予给PUBLIC。 +- sequencename:序列名。 +- databasename:数据库名。 +- funcname \( \[ \[ argmode \] \[ argname \] argtype \[, ...\] \] \):函数名及其参数。 +- langname:过程语言名。 +- schemaname:模式名。 +- tablespacename:表空间名。 +- WITH ADMIN OPTION:表示成员随后就可以将角色的成员关系赋予其他角色,以及撤销其他角色的成员关系。 + +##### 示例 + +对userexample授予数据库database1的CREATE权限。 + +```shell +postgres=# GRANT CREATE ON DATABASE database1 TO userexample; +``` + +对所有用户授予表table1的所有权限。 + +```shell +postgres=# GRANT ALL PRIVILEGES ON TABLE table1 TO PUBLIC; +``` + +#### 删除用户权限 + +可以使用REVOKE语句来撤销以前赋予一个或多个角色的权限。 + +撤销角色对表的操作权限: + +```shell +REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] +``` + +撤销角色对序列的操作权限: + +```shell +REVOKE [ GRANT OPTION FOR ] { { USAGE | SELECT | UPDATE } [,...] | ALL [ PRIVILEGES ] } ON SEQUENCE sequencename [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] +``` + +撤销角色对数据库的操作权限: + +```shell +REVOKE [ GRANT OPTION FOR ] { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE databasename [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] +``` + +撤销角色对函数的操作权限: + +```shell +REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTION funcname ( [ [ argmode ] [ argname ] argtype [, ...] ] ) [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] +``` + +撤销角色对过程语言的操作权限: + +```shell +REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE langname [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] +``` + +撤销角色对模式的操作权限: + +```shell +REVOKE [ GRANT OPTION FOR ] { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schemaname [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] +``` + +撤销角色对表空间的操作权限: + +```shell +REVOKE [ GRANT OPTION FOR ] { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACE tablespacename [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] +``` + +删除rolename2的rolename1的成员关系: + +```shell +REVOKE [ ADMIN OPTION FOR ] rolename1 [, ...] FROM rolename2 [, ...] [ CASCADE | RESTRICT ] +``` + +其中: + +- GRANT OPTION FOR:表示只是撤销对该权限的授权的权力,而不是撤销该权限本身。 +- SELECT、INSERT、UPDATE、DELETE、REFERENCES、TRIGGER、USAGE、CREATE、CONNECT、TEMPORARY、TEMP、EXECUTE、ALL \[ PRIVILEGES \]:用户的操作权限,ALL \[ PRIVILEGES \]表示所有的权限,PRIVILEGES关键字在 PostgreSQL里是可选的,但是严格的SQL 要求有这个关键字。 +- ON字句:用于指定撤销权限的对象。 +- tablename:表名。 +- FROM字句:用来指定被撤销权限的角色。 +- rolename、rolename1、rolename2:角色名。 +- groupname:角色组名。 +- PUBLIC:表示撤销隐含定义的、拥有所有角色的组,但并不意味着所有角色都失去了权限,那些直接得到的权限以及通过一个组得到的权限仍然有效。 +- sequencename:序列名。 +- CASCADE:撤销所有依赖性权限。 +- RESTRICT:不撤销所有依赖性权限。 +- databasename:数据库名。 +- funcname \( \[ \[ argmode \] \[ argname \] argtype \[, ...\] \] \):函数名及其参数。 +- langname:过程语言名。 +- schemaname:模式名。 +- tablespacename:表空间名。 +- ADMIN OPTION FOR:表示传递的授权不会自动收回。 + +##### 示例 + +对userexample授予数据库database1的CREATE权限。 + +```shell +postgres=# GRANT CREATE ON DATABASE database1 TO userexample; +``` + +对所有用户授予表table1的所有权限。 + +```shell +postgres=# GRANT ALL PRIVILEGES ON TABLE table1 TO PUBLIC; +``` + +### 管理数据库 + +#### 创建数据库 + +可以使用CREATE DATABASE语句或createdb来创建数据库。createrdb是对CREATE DATABASE命令的封装,需要在shell界面执行,而不是在数据库界面。 + +```shell +CREATE DATABASE databasename; +``` + +```shell +createdb databasename +``` + +其中:databasename为数据库名。 + +要使用这条命令,必须拥有CREATEDB权限。 + +##### 示例 + +创建一个数据库database1。 + +```shell +postgres=# CREATE DATABASE database1; +``` + +#### 选择数据库 + +可以使用\\c语句来选择数据库。 + +```shell +\c databasename; +``` + +其中:databasename为数据库名称。 + +##### 示例 + +选择databaseexample数据库。 + +```shell +postgres=# \c databaseexample; +``` + +#### 查看数据库 + +可以使用\\l语句来查看数据库。 + +```shell +\l; +``` + +##### 示例 + +查看所有数据库。 + +```shell +postgres=# \l; +``` + +#### 删除数据库 + +可以使用DROP DATABASE语句或dropdb来删除数据库。dropdb是对DROP DATABASE命令的封装,需要在shell界面执行,而不是在数据库界面。 + +>![](./public_sys-resources/icon-caution.gif) **注意:** +>删除数据库要谨慎操作,一旦删除,数据库中的所有表和数据都会删除。 + +```shell +DROP DATABASE databasename; +``` + +```shell +dropdb databasename +``` + +其中:databasename为数据库名称。 + +DROP DATABASE会删除数据库的系统目录项并且删除包含数据的文件目录。 + +DROP DATABASE只能由超级管理员或数据库拥有者执行。 + +##### 示例 + +删除databaseexample数据库。 + +```shell +postgres=# DROP DATABASE databaseexample; +``` + +#### 备份数据库 + +可以使用pg\_dump命令备份数据库,将数据库转储到一个脚本文件或其他归档文件中。 + +```shell +pg_dump [option]... [databasename] > outfile +``` + +其中: + +- databasename:数据库名称。如果没有声明这个参数,那么使用环境变量 PGDATABASE 。如果那个环境变量也没声明,那么使用发起连接的用户名。 +- outfile:数据库备份的文件。 +- option:pg\_dump命令参数选项,多个参数之间可以使用空格分隔。常用的pg\_dump命令参数选项如下: + - -f,\-\-file= _filename_ :指输出到指定的文件。如果忽略,则使用标准输出。 + - -d,\-\-dbname= _databasename_ :指定转储的数据库。 + - -h,\-\-host= _hostname_ :指定主机名。 + - -p,\-\-port= _portnumber_ :指定端口。 + - -U,\-\-username= _username_ :指定连接的用户名。 + - -W,\-\-password:强制口令提示(自动)。 + +##### 示例 + +备份主机为192.168.202.144,端口为3306,postgres用户下的database1数据库到db1.sql中。 + +```shell +[postgres@localhost ~]# pg_dump -h 192.168.202.144 -p 3306 -U postgres -W database1 > db1.sql +``` + +#### 恢复数据库 + +可以使用psql命令恢复数据库。 + +```shell +psql [option]... [databasename [username]] < infile +``` + +其中: + +- databasename:数据库名称。如果没有声明这个参数,那么使用环境变量 PGDATABASE 。如果那个环境变量也没声明,那么使用发起连接的用户名。 +- username:用户名。 +- infile:pg\_dump命令中的outfile参数。 +- option:psql命令参数选项,多个参数之间可以使用空格分隔。常用的psql命令参数选项如下: + - -f,--file=filename:指输出到指定的文件。如果忽略,则使用标准输出。 + - -d,--dbname=databasename:指定转储的数据库。 + - -h,--host=hostname:指定主机名。 + - -p,--port=portnumber:指定端口。 + - -U,--username=username:指定连接的用户名。 + - -W,--password:强制口令提示(自动)。 + +psql命令不会自动创建databasename数据库,所以在执行psql恢复数据库之前需要先创建databasename数据库。 + +##### 示例 + +将db1.sql脚本文件导入到主机为192.168.202.144,端口为3306,postgres用户下newdb数据库中。 + +```shell +[postgres@localhost ~]# createdb newdb +[postgres@localhost ~]# psql -h 192.168.202.144 -p 3306 -U postgres -W -d newdb < db1.sql +``` + +## Mariadb服务器 + +### 软件介绍 + +MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品,MariaDB还提供了许多更好的新特性。 + +MariaDB的架构如[图2](#fig13492418164520)所示。 + +**图 2** MariaDB逻辑架构 +![](./figures/logical_architectureofMariaDB.png) + +当Mariadb接受到Sql语句时,其详细的执行过程如下: + +1. 当客户端连接到mariadb的时候,会认证客户端的主机名、用户、密码,认证功能可以做成插件。 +2. 如果登录成功,客户端发送sql命令到服务端。由解析器解析sql语句。 +3. 服务端检查客户端是否有权限去获取它想要的资源。 +4. 如果查询已经存储在query cache当中,那么结果立即返回。 +5. 优化器将会找出最快的执行策略,或者是执行计划,也就是说优化器可以决定什么表将会被读,以及哪些索引会被访问,哪些临时表会被使用,一个好的策略能够减少大量的磁盘访问和排序操作等。 +6. 存储引擎读写数据和索引文件,cache用来加速这些操作,其他的诸如事物和外键特性,都是在存储引擎层处理的。 + +存储引擎在物理层管控数据,它负责数据文件、数据、索引、cache等的管理,这使得管理和读取数据变得更高效,每一张表,都有一个.frm文件,这些文件包含着表的定义。 + +每一个存储引擎管理、存储数据的方式都是不同的,所支持的特性和性能也不尽相同。例如: + +- MyISAM,适合读多写少的环境,且不支持事务,支持全文索引等。 +- noDB,支持事务,支持行锁和外键等。 +- MEMORY,将数据存储在内存当中。 +- CSV,将数据存储为CSV格式。 + +### 配置环境 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>以下环境配置仅为参考示例,具体配置视实际需求做配置 + +#### 关闭防火墙并取消开机自启动 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>测试环境下通常会关闭防火墙以避免部分网络因素影响,视实际需求做配置。 + +1. 在root权限下停止防火墙。 + + ```shell + systemctl stop firewalld + ``` + +2. 在root权限下关闭防火墙。 + + ```shell + systemctl disable firewalld + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >执行disable命令关闭防火墙的同时,也取消了开机自启动。 + +#### 修改SELINUX为disabled + +1. 在root权限下修改配置文件。 + + ```shell + sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux + ``` + +#### 创建组和用户 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>服务器环境下,为了系统安全,通常会为进程分配单独的用户,以实现权限隔离。本章节创建的组和用户都是操作系统层面的,不是数据库层面的。 + +1. 在root权限下创建MySQL用户(组)。 + + ```shell + groupadd mysql + ``` + + ```shell + useradd -g mysql mysql + ``` + +2. 在root权限下设置MySQL用户密码。 + + ```shell + passwd mysql + ``` + + 重复输入密码(根据实际需求设置密码)。 + +#### 搭建数据盘 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>- 进行性能测试时,数据目录使用单独硬盘,需要对硬盘进行格式化并挂载,参考方法一或者方法二。 +>- 非性能测试时,在root权限下执行`mkdir /data`创建数据目录即可。然后跳过本小节。 + +##### 方法一:在root权限下使用fdisk进行磁盘管理 + +1. 创建分区(以/dev/sdb为例,根据实际情况创建) + + ```shell + fdisk /dev/sdb + ``` + +2. 输入n,按回车确认。 +3. 输入p,按回车确认。 +4. 输入1,按回车确认。 +5. 采用默认配置,按回车确认。 +6. 采用默认配置,按回车确认。 +7. 输入w,按回车保存。 +8. 创建文件系统(以xfs为例,根据实际需求创建文件系统) + + ```shell + mkfs.xfs /dev/sdb1 + ``` + +9. 挂载分区到“/data”以供操作系统使用。 + + ```shell + mkdir /data + ``` + + ```shell + mount /dev/sdb1 /data + ``` + +10. 执行命令“vi /etc/fstab", 编辑“/etc/fstab”使重启后自动挂载数据盘。如下图中,添加最后一行内容。 + + 其中,/dev/nvme0n1p1为示例,具体名称以实际情况为准。 + + ![](./figures/creat_datadisk1.png) + +##### 方法二:在root权限下使用LVM进行磁盘管理 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>此步骤需要安装镜像中的lvm2相关包,步骤如下: +>1. 配置本地yum源,详细信息请参考[搭建repo服务器](./搭建repo服务器.md)。如果已经执行,则可跳过此步。 +>2. 在root权限下执行`yum install lvm2`命令安装lvm2。 + +1. 创建物理卷(sdb为硬盘名称,具体名字以实际为准)。 + + ```shell + pvcreate /dev/sdb + ``` + +2. 创建物理卷组(其中datavg为创建的卷组名称,具体名字以实际规划为准)。 + + ```shell + vgcreate datavg /dev/sdb + ``` + +3. 创建逻辑卷(其中600G为规划的逻辑卷大小,具体大小以实际情况为准;datalv为创建的逻辑卷的名字,具体名称以实际规划为准。)。 + + ```shell + lvcreate -L 600G -n datalv datavg + ``` + +4. 创建文件系统。 + + ```shell + mkfs.xfs /dev/datavg/datalv + ``` + +5. 创建数据目录并挂载。 + + ```shell + mkdir /data + mount /dev/datavg/datalv /data + ``` + +6. 执行命令**vi /etc/fstab**,编辑“/etc/fstab”使重启后自动挂载数据盘。如下图中,添加最后一行内容。 + + 其中,/dev/datavg/datalv为示例,具体名称以实际情况为准。 + + ![](./figures/D1376B2A-D036-41C4-B852-E8368F363B5E.png) + +#### 创建数据库目录并且授权 + +1. 在已创建的数据目录 **/data** 基础上,使用root权限继续创建进程所需的相关目录并授权MySQL用户(组)。 + + ```shell + mkdir -p /data/mariadb + cd /data/mariadb + mkdir data tmp run log + chown -R mysql:mysql /data + ``` + +### 安装、运行和卸载 + +#### 安装 + +1. 配置本地yum源,详细信息请参考[搭建repo服务器](./搭建repo服务器.md)。 +2. 清除缓存。 + + ```shell + dnf clean all + ``` + +3. 创建缓存。 + + ```shell + dnf makecache + ``` + +4. 在root权限下安装mariadb服务器。 + + ```shell + dnf install mariadb-server + ``` + +5. 查看安装后的rpm包。 + + ```shell + rpm -qa | grep mariadb + ``` + +#### 运行 + +1. 在root权限下开启mariadb服务器。 + + ```shell + systemctl start mariadb + ``` + +2. 在root权限下初始化数据库。 + + ```shell + /usr/bin/mysql_secure_installation + ``` + + 命令执行过程中需要输入数据库的root设置的密码,若没有密码则直接按“Enter”。然后根据提示及实际情况进行设置。 + +3. 登录数据库。 + + ```shell + mysql -u root -p + ``` + + 命令执行后提示输入密码。密码为[2](#li197143190587)中设置的密码。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + >执行 **\\q** 或者 **exit** 可退出数据库。 + +#### 卸载 + +1. 在root权限下关闭数据库进程。 + + ```shell + ps -ef | grep mysql + kill -9 进程ID + ``` + +2. 在root权限下执行**dnf remove mariadb-server**命令卸载mariadb。 + + ```shell + dnf remove mariadb-server + ``` + +### 管理数据库用户 + +#### 创建用户 + +可以使用CREATE USER语句来创建一个或多个用户,并设置相应的口令。 + +```shell +CREATE USER 'username'@'hostname' IDENTIFIED BY 'password'; +``` + +其中: + +- username:用户名。 +- host:主机名,即用户连接数据库时所在的主机的名字。若是本地用户可用localhost,若在创建的过程中,未指定主机名,则主机名默认为“%”,表示一组主机。 +- password:用户的登录密码,密码可以为空,如果为空则该用户可以不需要密码登录服务器,但从安全的角度而言,不推荐这种做法。 + +使用CREATE USER语句必须拥有数据库的INSERT权限或全局CREATE USER权限。 + +使用CREATE USER语句创建一个用户帐号后,会在系统自身的数据库的user表中添加一条新记录。若创建的帐户已经存在,则语句执行时会出现错误。 + +新创建的用户拥有的权限很少,只允许进行不需要权限的操作,如使用SHOW语句查询所有存储引擎和字符集的列表等。 + +##### 示例 + +创建密码为123456,用户名为userexample1的本地用户。 + +```shell +> CREATE USER 'userexample1'@'localhost' IDENTIFIED BY '123456'; +``` + +创建密码为123456,用户名为userexample2,主机名为192.168.1.100的用户。 + +```shell +> CREATE USER 'userexample2'@'192.168.1.100' IDENTIFIED BY '123456'; +``` + +#### 查看用户 + +可以使用SHOW GRANTS语句或SELECT语句查看一个或多个用户。 + +查看特定用户: + +```shell +SHOW GRANTS [FOR 'username'@'hostname']; +``` + +```shell +SELECT USER,HOST,PASSWORD FROM mysql.user WHERE USER='username'; +``` + +查看所有用户: + +```shell +SELECT USER,HOST,PASSWORD FROM mysql.user; +``` + +其中: + +- username:用户名。 +- hostname:主机名。 + +##### 示例 + +查看userexample1用户。 + +```shell +> SHOW GRANTS FOR 'userexample1'@'localhost'; +``` + +查看mysql数据库中所有用户。 + +```shell +> SELECT USER,HOST,PASSWORD FROM mysql.user; +``` + +#### 修改用户 + +##### 修改用户名 + +可以使用RENAME USER语句修改一个或多个已经存在的用户名。 + +```shell +RENAME USER 'oldusername'@'hostname' TO 'newusername'@'hostname'; +``` + +其中: + +- oldusername:旧的用户名。 +- newusername:新的用户名。 +- hostname:主机名。 + +RENAME USER语句用于对原有的帐号进行重命名。若系统中旧帐号不存在或者新帐号已存在,则该语句执行时会出现错误。 + +使用RENAME USER语句,必须拥有数据库的UPDATE权限或全局CREATE USER权限。 + +##### 修改用户示例 + +将用户名userexample1修改为userexapme2,主机名为locahost。 + +```shell +> RENAME USER 'userexample1'@'localhost' TO 'userexample2'@'localhost'; +``` + +##### 修改用户密码 + +可以使用SET PASSWORD语句修改一个用户的登录密码。 + +```shell +SET PASSWORD FOR 'username'@'hostname' = PASSWORD('newpassword'); +``` + +其中: + +- FOR 'username'@'hostname':FOR字句,可选项,指定欲修改密码的用户名及主机名。 +- PASSWORD\('newpassword'\):表示使用函数PASSWORD\(\)设置新口令,即新口令必须传递到函数PASSWORD\(\)中进行加密。 + +>![](./public_sys-resources/icon-caution.gif) **注意:** +>PASSWORD\(\)函数为单向加密函数,一旦加密后不能解密出原明文。 + +在SET PASSWORD语句中,若不加上FOR子句,表示修改当前用户的密码。 + +FOR字句中必须以'username'@'hostname'的格式给定,username为帐户的用户名,hostname为帐户的主机名。 + +欲修改密码的帐号必须在系统中存在,否则语句执行时会出现错误。 + +##### 修改用户密码示例 + +将用户名为userexample的密码修改为0123456,主机名为locahost。 + +```shell +> SET PASSWORD FOR 'userexample'@'localhost' = PASSWORD('0123456') ; +``` + +#### 删除用户 + +可以使用DROP USER语句来删除一个或多个用户帐号以及相关的权限。 + +```shell +DROP USER 'username1'@'hostname1' [,'username2'@'hostname2']…; +``` + +>![](./public_sys-resources/icon-caution.gif) **注意:** +>用户的删除不会影响他们之前所创建的表、索引或其他数据库对象,因为数据库并不会记录创建了这些对象的帐号。 + +DROP USER语句可用于删除一个或多个数据库帐号,并删除其原有权限。 + +使用DROP USER语句必须拥有数据库的DELETE权限或全局CREATE USER权限。 + +在DROP USER语句的使用中,若没有明确地给出帐号的主机名,则该主机名默认为“%”。 + +##### 示例 + +删除用户名为userexample的本地用户。 + +```shell +> DROP USER 'userexample'@'localhost'; +``` + +#### 用户授权 + +可以使用GRANT语句来对新建用户的授权。 + +```shell +GRANT privileges ON databasename.tablename TO 'username'@'hostname'; +``` + +其中: + +- ON字句:用于指定权限授予的对象和级别。 +- privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所有的权限则使用ALL。 +- databasename:数据库名。 +- tablename:表名。 +- TO字句:用来设定用户密码,以及指定被赋予权限的用户。 +- username:用户名。 +- hostname:主机名。 + +如果要授予该用户对所有数据库和表的相应操作权限则可用\*表示,如\*.\*。 + +如果在TO子句中给系统中存在的用户指定密码,则新密码会将原密码覆盖。 + +如果权限被授予给一个不存在的用户,则会自动执行一条CREATE USER语句来创建这个用户,但同时必须为该用户指定密码。 + +##### 示例 + +对本地用户userexample授予SELECT和INSERT权限。 + +```shell +> GRANT SELECT,INSERT ON *.* TO 'userexample'@'localhost'; +``` + +#### 删除用户权限 + +可以使用REVOKE语句来删除一个用户的权限,但此用户不会被删除。 + +```shell +REVOKE privilege ON databasename.tablename FROM 'username'@'hostname'; +``` + +其中REVOKE语句的参数与GRANT语句的参数含义相同。 + +要使用 REVOKE 语句,必须拥有数据库的全局CREATE USER权限或UPDATE权限。 + +##### 示例 + +删除本地用户userexample的INSERT权限。 + +```shell +> REVOKE INSERT ON *.* FROM 'userexample'@'localhost'; +``` + +### 管理数据库 + +#### 创建数据库 + +可以使用CREATE DATABASE语句来创建数据库。 + +```shell +CREATE DATABASE databasename; +``` + +其中:databasename为数据库名称,且数据库名称不区分大小写。 + +##### 示例 + +创建数据库名为databaseexample的数据库。 + +```shell +> CREATE DATABASE databaseexample; +``` + +#### 查看数据库 + +可以使用SHOW DATABASES语句来查看数据库。 + +```shell +SHOW DATABASES; +``` + +##### 示例 + +查看所有数据库。 + +```shell +> SHOW DATABASES; +``` + +#### 选择数据库 + +一般创建表,查询表等操作首先需要选择一个目标数据库。可以使用USE语句来选择数据库。 + +```shell +USE databasename; +``` + +其中:databasename为数据库名称。 + +##### 示例 + +选择databaseexample数据库。 + +```shell +> USE databaseexample; +``` + +#### 删除数据库 + +可以使用DROP DATABASE语句来删除数据库。 + +>![](./public_sys-resources/icon-caution.gif) **注意:** +>删除数据库要谨慎操作,一旦删除,数据库中的所有表和数据都会删除。 + +```shell +DROP DATABASE databasename; +``` + +其中:databasename为数据库名称。 + +DROP DATABASE命令用于删除创建过\(已存在\)的数据库,且会删除数据库中的所有表,但数据库的用户权限不会自动删除。 + +要使用DROP DATABASE,您需要数据库的DROP权限。 + +DROP SCHEMA是DROP DATABASE的同义词。 + +##### 示例 + +删除databaseexample数据库。 + +```shell +> DROP DATABASE databaseexample; +``` + +#### 备份数据库 + +可以在root权限下使用mysqldump命令备份数据库。 + +备份一个或多个表: + +```shell +mysqldump [options] databasename [tablename ...] > outfile +``` + +备份一个或多个库: + +```shell +mysqldump [options] -databases databasename ... > outfile +``` + +备份所有库: + +```shell +mysqldump [options] -all-databases > outputfile +``` + +其中: + +- databasename:数据库名称。 +- tablename:数据表名称。 +- outfile:数据库备份的文件。 +- options:mysqldump命令参数选项,多个参数之间可以使用空格分隔。常用的mysqldump命令参数选项如下: + - -u, \-\-user= _username_ :指定用户名。 + - -p, \-\-password\[= _password_\]:指定密码。 + - -P, \-\-port= _portnumber_ :指定端口。 + - -h, \-\-host= _hostname_ :指定主机名。 + - -r, \-\-result-file= _filename_ :将导出结果保存到指定的文件中,等同于“\>”。 + - -t:只备份数据。 + - -d:只备份表结构。 + +##### 示例 + +备份主机为192.168.202.144,端口为3306,root用户下的所有数据库到alldb.sql中。 + +```shell +mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 --all-databases > alldb.sql +``` + +备份主机为192.168.202.144,端口为3306,root用户下的db1数据库到db1.sql中。 + +```shell +mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 --databases db1 > db1.sql +``` + +备份主机为192.168.202.144,端口为3306,root用户下的db1数据库的tb1表到db1tb1.sql中。 + +```shell +mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 db1 tb1 > db1tb1.sql +``` + +只备份主机为192.168.202.144,端口为3306,root用户下的db1数据库的表结构到db1.sql中。 + +```shell +mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 -d db1 > db1.sql +``` + +只备份主机为192.168.202.144,端口为3306,root用户下的db1数据库的数据到db1.sql中。 + +```shell +mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 -t db1 > db1.sql +``` + +#### 恢复数据库 + +可以在root权限下使用mysql命令恢复数据库。 + +恢复一个或多个表: + +```shell +mysql -h hostname -P portnumber -u username -ppassword databasename < infile +``` + +其中: + +- hostname:主机名。 +- portnumber:端口号。 +- username:用户名。 +- password:密码。 +- databasename:数据库名。 +- infile:mysqldump命令中的outfile参数。 + +##### 示例 + +恢复数据库。 + +```shell +# mysql -h 192.168.202.144 -P 3306 -uroot -p123456 -t db1 < db1.sql +``` + +## MySQL服务器 + +### 软件介绍 + +MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle旗下产品。MySQL是业界最流行的RDBMS \(Relational Database Management System,关系数据库管理系统\)之一,尤其在WEB应用方面。 + +关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就加快了速度并提高了灵活性。 + +MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权模式,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。 + +### 配置环境 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>以下环境配置仅为参考示例,具体配置视实际需求做配置 + +#### 关闭防火墙并取消开机自启动 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>测试环境下通常会关闭防火墙以避免部分网络因素影响,视实际需求做配置。 + +1. 在root权限下停止防火墙。 + + ```shell + systemctl stop firewalld + ``` + +2. 在root权限下关闭防火墙。 + + ```shell + systemctl disable firewalld + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >执行disable命令关闭防火墙的同时,也取消了开机自启动。 + +#### 修改SELINUX为disabled + +1. 在root权限下修改配置文件。 + + ```shell + sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux + ``` + +#### 创建组和用户 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>服务器环境下,为了系统安全,通常会为进程分配单独的用户,以实现权限隔离。本章节创建的组和用户都是操作系统层面的,不是数据库层面的。 + +1. 在root权限下创建MySQL用户(组)。 + + ```shell + groupadd mysql + ``` + + ```shell + useradd -g mysql mysql + ``` + +2. 在root权限下设置MySQL用户密码。 + + ```shell + passwd mysql + ``` + + 重复输入密码(根据实际需求设置密码)。 + +#### 搭建数据盘 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>- 进行性能测试时,数据目录使用单独硬盘,需要对硬盘进行格式化并挂载,参考方法一或者方法二。 +>- 非性能测试时,在root权限下执行`mkdir /data`创建数据目录即可。然后跳过本小节: + +##### 方法一:在root权限下使用fdisk进行磁盘管理 + +1. 创建分区(以/dev/sdb为例,根据实际情况创建) + + ```shell + fdisk /dev/sdb + ``` + +2. 输入n,按回车确认。 +3. 输入p,按回车确认。 +4. 输入1,按回车确认。 +5. 采用默认配置,按回车确认。 +6. 采用默认配置,按回车确认。 +7. 输入w,按回车保存。 +8. 创建文件系统(以xfs为例,根据实际需求创建文件系统) + + ```shell + mkfs.xfs /dev/sdb1 + ``` + +9. 挂载分区到“/data”以供操作系统使用。 + + ```shell + mkdir /data + ``` + + ```shell + mount /dev/sdb1 /data + ``` + +10. 执行命令“vi /etc/fstab", 编辑“/etc/fstab”使重启后自动挂载数据盘。如下图中,添加最后一行内容。 + + 其中,/dev/nvme0n1p1为示例,具体名称以实际情况为准。 + + ![](./figures/creat_datadisk.png) + +##### 方法二:在root权限下使用LVM进行磁盘管理 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>此步骤需要安装镜像中的lvm2相关包,步骤如下: +>1. 配置本地yum源,详细信息请参考[搭建repo服务器](./搭建repo服务器.md)。如果已经执行,则可跳过此步。 +>2. 执行`yum install lvm2`安装lvm2。 + +1. 创建物理卷(sdb为硬盘名称,具体名字以实际为准)。 + + ```shell + pvcreate /dev/sdb + ``` + +2. 创建物理卷组(其中datavg为创建的卷组名称,具体名字以实际规划为准)。 + + ```shell + vgcreate datavg /dev/sdb + ``` + +3. 创建逻辑卷(其中600G为规划的逻辑卷大小,具体大小以实际情况为准;datalv为创建的逻辑卷的名字,具体名称以实际规划为准。)。 + + ```shell + lvcreate -L 600G -n datalv datavg + ``` + +4. 创建文件系统。 + + ```shell + mkfs.xfs /dev/datavg/datalv + ``` + +5. 创建数据目录并挂载。 + + ```shell + mkdir /data + ``` + + ```shell + mount /dev/datavg/datalv /data + ``` + +6. 执行命令**vi /etc/fstab**,编辑“/etc/fstab”使重启后自动挂载数据盘。如下图中,添加最后一行内容。 + + 其中,/dev/datavg/datalv为示例,具体名称以实际情况为准。 + + ![](./figures/D1376B2A-D036-41C4-B852-E8368F363B5E-1.png) + +#### 创建数据库目录并且授权 + +1. 在已创建的数据目录 **/data** 基础上,使用root权限继续创建进程所需的相关目录并授权MySQL用户(组)。 + + ```shell + mkdir -p /data/mysql + cd /data/mysql + mkdir data tmp run log + chown -R mysql:mysql /data + ``` + +### 安装、运行和卸载 + +#### 安装 + +1. 配置本地yum源,详细信息请参考[搭建repo服务器](./搭建repo服务器.md)章节。 +2. 清除缓存。 + + ```shell + dnf clean all + ``` + +3. 创建缓存。 + + ```shell + dnf makecache + ``` + +4. 在root权限下安装MySQL服务器。 + + ```shell + dnf install mysql-server + ``` + +5. 查看安装后的rpm包。 + + ```shell + rpm -qa | grep mysql-server + ``` + +#### 运行 + +1. 修改配置文件。 + 1. 在root权限下创建my.cnf文件,其中文件路径(包括软件安装路径basedir、数据路径datadir等)根据实际情况修改。 + + ```shell + vi /etc/my.cnf + ``` + + 编辑my.cnf内容如下: + + ```text + [mysqld_safe] + log-error=/data/mysql/log/mysql.log + pid-file=/data/mysql/run/mysqld.pid + [mysqldump] + quick + [mysql] + no-auto-rehash + [client] + default-character-set=utf8 + [mysqld] + basedir=/usr/local/mysql + socket=/data/mysql/run/mysql.sock + tmpdir=/data/mysql/tmp + datadir=/data/mysql/data + default_authentication_plugin=mysql_native_password + port=3306 + user=mysql + ``` + + 2. 确保my.cnf配置文件修改正确。 + + ```shell + cat /etc/my.cnf + ``` + + ![](./figures/zh-cn_image_0231563132.png) + + >![](./public_sys-resources/icon-caution.gif) **注意:** + >其中basedir为软件安装路径,请根据实际情况修改。 + + 3. 在root权限下修改/etc/my.cnf文件的组和用户为mysql:mysql + + ```shell + chown mysql:mysql /etc/my.cnf + ``` + +2. 配置环境变量。 + 1. 安装完成后,在root权限下将MySQL二进制文件路径到PATH。 + + ```shell + echo export PATH=$PATH:/usr/local/mysql/bin >> /etc/profile + ``` + + >![](./public_sys-resources/icon-caution.gif) **注意:** + >其中PATH中的“/usr/local/mysql/bin“路径,为MySQL软件安装目录下的bin文件的绝对路径。请根据实际情况修改。 + + 2. 在root权限下使环境变量配置生效。 + + ```shell + source /etc/profile + ``` + +3. 在root权限下初始化数据库。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + >本步骤倒数第2行中有初始密码,请注意保存,登录数据库时需要使用。 + + ```shell + # mysqld --defaults-file=/etc/my.cnf --initialize + 2020-03-18T03:27:13.702385Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.17) initializing of server in progress as process 34014 + 2020-03-18T03:27:24.112453Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: iNat=)#V2tZu + 2020-03-18T03:27:28.576003Z 0 [System] [MY-013170] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.17) initializing of server has completed + ``` + + 查看打印信息,打印信息中包括“initializing of server has completed”表示初始化数据库完成,且打印信息中“A temporary password is generated for root@localhost: iNat=\)V2tZu”的“iNat=\)V2tZu”为初始密码。 + +4. 启动数据库。 + + >![](./public_sys-resources/icon-caution.gif) **注意:** + >如果第一次启动数据库服务,以root用户启动数据库,则启动时会提示缺少mysql.log文件而导致失败。使用mysql用户启动之后,会在/data/mysql/log目录下生成mysql.log文件,再次使用root用户启动则不会报错。 + + 1. 在root权限下修改文件权限。 + + ```shell + chmod 777 /usr/local/mysql/support-files/mysql.server + chown mysql:mysql /var/log/mysql/* + ``` + + 2. 在root权限下启动MySQL。 + + ```shell + cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql + chkconfig mysql on + ``` + + 以mysql用户启动数据库。 + + ```shell + su - mysql + service mysql start + ``` + +5. 登录数据库。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + >- 提示输入密码时,请输入[3](#li15634560582)产生的初始密码。 + >- 如果采用官网RPM安装方式,则mysql文件在/usr/bin目录下。登录数据库的命令根据实际情况修改。 + + ```shell + # /usr/local/mysql/bin/mysql -uroot -p -S /data/mysql/run/mysql.sock + ``` + + ![](./figures/zh-cn_image_0231563134.png) + +6. 配置数据库帐号密码。 + 1. 登录数据库以后,修改通过root用户登录数据库的密码。 + + ```shell + mysql> alter user 'root'@'localhost' identified by "123456"; + ``` + + 2. 创建全域root用户(允许root从其他服务器访问)。 + + ```shell + mysql> create user 'root'@'%' identified by '123456'; + ``` + + 3. 进行授权。 + + ```shell + mysql> grant all privileges on *.* to 'root'@'%'; + mysql> flush privileges; + ``` + + ![](./figures/zh-cn_image_0231563135.png) + +7. 退出数据库。 + + 执行 **\\q** 或者 **exit** 退出数据库。 + + ```shell + mysql> exit + ``` + + ![](./figures/zh-cn_image_0231563136.png) + +#### 卸载 + +1. 在root权限下关闭数据库进程。 + + ```shell + ps -ef | grep mysql + kill -9 进程ID + ``` + +2. 在root权限下执行**dnf remove mysql**命令卸载MySQL。 + + ```shell + dnf remove mysql + ``` + +### 管理数据库用户 + +#### 创建用户 + +可以使用CREATE USER语句来创建一个或多个用户,并设置相应的口令。 + +```shell +CREATE USER 'username'@'hostname' IDENTIFIED BY 'password'; +``` + +其中: + +- username:用户名。 +- host:主机名,即用户连接数据库时所在的主机的名字。若是本地用户可用localhost,若在创建的过程中,未指定主机名,则主机名默认为“%”,表示一组主机。 +- password:用户的登录密码,密码可以为空,如果为空则该用户可以不需要密码登录服务器,但从安全的角度而言,不推荐这种做法。 + +使用CREATE USER语句必须拥有数据库的INSERT权限或全局CREATE USER权限。 + +使用CREATE USER语句创建一个用户帐号后,会在系统自身的数据库的user表中添加一条新记录。若创建的帐户已经存在,则语句执行时会出现错误。 + +新创建的用户拥有的权限很少,只允许进行不需要权限的操作,如使用SHOW语句查询所有存储引擎和字符集的列表等。 + +##### 示例 + +创建密码为123456,用户名为userexample1的本地用户。 + +```shell +> CREATE USER 'userexample1'@'localhost' IDENTIFIED BY '123456'; +``` + +创建密码为123456,用户名为userexample2,主机名为192.168.1.100的用户。 + +```shell +> CREATE USER 'userexample2'@'192.168.1.100' IDENTIFIED BY '123456'; +``` + +#### 查看用户 + +可以使用SHOW GRANTS语句或SELECT语句查看一个或多个用户。 + +查看特定用户: + +```shell +SHOW GRANTS [FOR 'username'@'hostname']; +``` + +```shell +SELECT USER,HOST,PASSWORD FROM mysql.user WHERE USER='username'; +``` + +查看所有用户: + +```shell +SELECT USER,HOST FROM mysql.user; +``` + +其中: + +- username:用户名。 +- hostname:主机名。 + +##### 示例 + +查看userexample1用户。 + +```shell +> SHOW GRANTS FOR 'userexample1'@'localhost'; +``` + +查看mysql数据库中所有用户。 + +```shell +> SELECT USER,HOST FROM mysql.user; +``` + +#### 修改用户 + +##### 修改用户名 + +可以使用RENAME USER语句修改一个或多个已经存在的用户名。 + +```shell +RENAME USER 'oldusername'@'hostname' TO 'newusername'@'hostname'; +``` + +其中: + +- oldusername:旧的用户名。 +- newusername:新的用户名。 +- hostname:主机名。 + +RENAME USER语句用于对原有的帐号进行重命名。若系统中旧帐号不存在或者新帐号已存在,则该语句执行时会出现错误。 + +使用RENAME USER语句,必须拥有数据库的UPDATE权限或全局CREATE USER权限。 + +##### 修改用户示例 + +将用户名userexample1修改为userexapme2,主机名为locahost。 + +```shell +> RENAME USER 'userexample1'@'localhost' TO 'userexample2'@'localhost'; +``` + +##### 修改用户密码 + +可以使用SET PASSWORD语句修改一个用户的登录密码。 + +```shell +SET PASSWORD FOR 'username'@'hostname' = 'newpassword'; +``` + +其中: + +- FOR 'username'@'hostname':FOR字句,可选项,指定欲修改密码的用户名及主机名。 +- 'newpassword':新密码。 + +在SET PASSWORD语句中,若不加上FOR子句,表示修改当前用户的密码。 + +FOR字句中必须以'username'@'hostname'的格式给定,username为帐户的用户名,hostname为帐户的主机名。 + +欲修改密码的帐号必须在系统中存在,否则语句执行时会出现错误。 + +##### 修改用户密码示例 + +将用户名为userexample的密码修改为0123456,主机名为locahost。 + +```shell +> SET PASSWORD FOR 'userexample'@'localhost' = '0123456'; +``` + +#### 删除用户 + +可以使用DROP USER语句来删除一个或多个用户帐号以及相关的权限。 + +```shell +DROP USER 'username1'@'hostname1' [,'username2'@'hostname2']…; +``` + +>![](./public_sys-resources/icon-caution.gif) **注意:** +>用户的删除不会影响他们之前所创建的表、索引或其他数据库对象,因为数据库并不会记录创建了这些对象的帐号。 + +DROP USER语句可用于删除一个或多个数据库帐号,并删除其原有权限。 + +使用DROP USER语句必须拥有数据库的DELETE权限或全局CREATE USER权限。 + +在DROP USER语句的使用中,若没有明确地给出帐号的主机名,则该主机名默认为“%”。 + +##### 示例 + +删除用户名为userexample的本地用户。 + +```shell +> DROP USER 'userexample'@'localhost'; +``` + +#### 用户授权 + +可以使用GRANT语句来对新建用户的授权。 + +```shell +GRANT privileges ON databasename.tablename TO 'username'@'hostname'; +``` + +其中: + +- ON字句:用于指定权限授予的对象和级别。 +- privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所有的权限则使用ALL。 +- databasename:数据库名。 +- tablename:表名。 +- TO字句:用来设定用户密码,以及指定被赋予权限的用户。 +- username:用户名。 +- hostname:主机名。 + +如果要授予该用户对所有数据库和表的相应操作权限则可用\*表示,如\*.\*。 + +如果在TO子句中给系统中存在的用户指定密码,则新密码会将原密码覆盖。 + +如果权限被授予给一个不存在的用户,则会自动执行一条CREATE USER语句来创建这个用户,但同时必须为该用户指定密码。 + +##### 示例 + +对本地用户userexample授予SELECT和INSERT权限。 + +```shell +> GRANT SELECT,INSERT ON *.* TO 'userexample'@'localhost'; +``` + +#### 删除用户权限 + +可以使用REVOKE语句来删除一个用户的权限,但此用户不会被删除。 + +```shell +REVOKE privilege ON databasename.tablename FROM 'username'@'hostname'; +``` + +其中REVOKE语句的参数与GRANT语句的参数含义相同。 + +要使用 REVOKE 语句,必须拥有数据库的全局CREATE USER权限或UPDATE权限。 + +##### 示例 + +删除本地用户userexample的INSERT权限。 + +```shell +> REVOKE INSERT ON *.* FROM 'userexample'@'localhost'; +``` + +### 管理数据库 + +#### 创建数据库 + +可以使用CREATE DATABASE语句来创建数据库。 + +```shell +CREATE DATABASE databasename; +``` + +其中:databasename为数据库名称,且数据库名称不区分大小写。 + +##### 示例 + +创建数据库名为databaseexample的数据库。 + +```shell +> CREATE DATABASE databaseexample; +``` + +#### 查看数据库 + +可以使用SHOW DATABASES语句来查看数据库。 + +```shell +SHOW DATABASES; +``` + +##### 示例 + +查看所有数据库。 + +```shell +> SHOW DATABASES; +``` + +#### 选择数据库 + +一般创建表,查询表等操作首先需要选择一个目标数据库。可以使用USE语句来选择数据库。 + +```shell +USE databasename; +``` + +其中:databasename为数据库名称。 + +##### 示例 + +选择databaseexample数据库。 + +```shell +> USE databaseexample; +``` + +#### 删除数据库 + +可以使用DROP DATABASE语句来删除数据库。 + +>![](./public_sys-resources/icon-caution.gif) **注意:** +>删除数据库要谨慎操作,一旦删除,数据库中的所有表和数据都会删除。 + +```shell +DROP DATABASE databasename; +``` + +其中:databasename为数据库名称。 + +DROP DATABASE命令用于删除创建过\(已存在\)的数据库,且会删除数据库中的所有表,但数据库的用户权限不会自动删除。 + +要使用DROP DATABASE,您需要数据库的DROP权限。 + +DROP SCHEMA是DROP DATABASE的同义词。 + +##### 示例 + +删除databaseexample数据库。 + +```shell +> DROP DATABASE databaseexample; +``` + +#### 备份数据库 + +可以在root权限下使用mysqldump命令备份数据库。 + +备份一个或多个表: + +```shell +mysqldump [options] databasename [tablename ...] > outfile +``` + +备份一个或多个库: + +```shell +mysqldump [options] -databases databasename ... > outfile +``` + +备份所有库: + +```shell +mysqldump [options] -all-databases > outputfile +``` + +其中: + +- databasename:数据库名称。 +- tablename:数据表名称。 +- outfile:数据库备份的文件。 +- options:mysqldump命令参数选项,多个参数之间可以使用空格分隔。常用的mysqldump命令参数选项如下: + - -u, \-\-user= _username_ :指定用户名。 + - -p, \-\-password\[= _password_\]:指定密码。 + - -P, \-\-port= _portnumber_ :指定端口。 + - -h, \-\-host= _hostname_ :指定主机名。 + - -r, \-\-result-file= _filename_ :将导出结果保存到指定的文件中,等同于“\>”。 + - -t:只备份数据。 + - -d:只备份表结构。 + +##### 示例 + +备份主机为192.168.202.144,端口为3306,root用户下的所有数据库到alldb.sql中。 + +```shell +mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 --all-databases > alldb.sql +``` + +备份主机为192.168.202.144,端口为3306,root用户下的db1数据库到db1.sql中。 + +```shell +mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 --databases db1 > db1.sql +``` + +备份主机为192.168.202.144,端口为3306,root用户下的db1数据库的tb1表到db1tb1.sql中。 + +```shell +mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 db1 tb1 > db1tb1.sql +``` + +只备份主机为192.168.202.144,端口为3306,root用户下的db1数据库的表结构到db1.sql中。 + +```shell +mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 -d db1 > db1.sql +``` + +只备份主机为192.168.202.144,端口为3306,root用户下的db1数据库的数据到db1.sql中。 + +```shell +mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 -t db1 > db1.sql +``` + +#### 恢复数据库 + +可以在root权限下使用mysql命令恢复数据库。 + +恢复一个或多个表: + +```shell +mysql -h hostname -P portnumber -u username -ppassword databasename < infile +``` + +其中: + +- hostname:主机名。 +- portnumber:端口号。 +- username:用户名。 +- password:密码。 +- databasename:数据库名。 +- infile:mysqldump命令中的outfile参数。 + +##### 示例 + +恢复数据库。 + +```shell +# mysql -h 192.168.202.144 -P 3306 -uroot -p123456 -t db1 < db1.sql +``` + +## openGauss服务器 + +### 软件介绍 + +openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核深度融合华为在数据库领域多年的经验,结合企业级场景需求,持续构建竞争力特性。 + +### 安装 + +安装指南请参见[《openGauss rpm安装》](https://docs.opengauss.org/zh/docs/latest/docs/InstallationGuide/RPM%E5%AE%89%E8%A3%85.html)。 + +### 管理数据库角色 + +#### 创建角色 + +可以使用CREATE ROLE语句来创建角色,在数据库界面执行。 + +```shell +CREATE ROLE role_name [ [ WITH ] option [ ... ] ] [ ENCRYPTED | UNENCRYPTED ] { PASSWORD | IDENTIFIED BY } { 'password' [EXPIRED] | DISABLE }; +``` + +其中: + +- role_name:角色名。 +- password:登录密码。 +- option为参数选项,常用的有: + - SYSADMIN | NOSYSADMIN:决定一个新角色是否为"系统管理员",具有SYSADMIN属性的角色拥有系统最高权限。缺省为NOSYSADMIN。 + - CREATEDB | NOCREATEDB:定义一个角色是否能创建数据库,若未指定,则默认为NOCREATEDB,即不能创建数据库。 + - CREATEROLE | NOCREATEROLE:决定一个角色是否可以创建新角色,若未指定,则默认为NOCREATEROLE,即不能创建新角色。 + - INHERIT | NOINHERIT:这些子句决定一个角色是否“继承”它所在组的角色的权限。不推荐使用。 + - LOGIN | NOLOGIN:具有LOGIN属性的角色才可以登录数据库。一个拥有LOGIN属性的角色可以认为是一个用户。 + - ENCRYPTED | UNENCRYPTED:控制密码存储在系统表里的口令是否加密。按照产品安全要求,密码必须加密存储,所以,UNENCRYPTED在openGauss中禁止使用。因为系统无法对指定的加密口令字符串进行解密,所以如果目前的口令字符串已经是用SHA256加密的格式,则会继续照此存放,而不管是否声明了ENCRYPTED或UNENCRYPTED。这样就允许在dump/restore的时候重新加载加密的口令。 + - VALID UNTIL:设置角色失效的时间戳。如果省略了该子句,角色无有效结束时间限制。 + - IN ROLE:新角色立即拥有IN ROLE子句中列出的一个或多个现有角色拥有的权限。不推荐使用。 + - ROLE:ROLE子句列出一个或多个现有的角色,它们将自动添加为这个新角色的成员,拥有新角色所有的权限。 + +要使用这条命令,必须拥有 CREATE ROLE 权限或者是系统管理员。 + +##### 示例 + +创建一个角色,名为manager,密码为xxxxxxxxx。 + +```shell +openGauss=# CREATE ROLE manager IDENTIFIED BY 'xxxxxxxxx'; +``` + +创建一个角色,从2015年1月1日开始生效,到2026年1月1日失效。 + +```shell +openGauss=# CREATE ROLE miriam WITH LOGIN PASSWORD 'xxxxxxxxx' VALID BEGIN '2015-01-01' VALID UNTIL '2026-01-01'; +``` + +#### 查看角色 + +可以使用SELECT语句或gsql的元命令du或者du+查看角色。 + +```shell +SELECT * FROM pg_roles; +``` + +```shell +\du +``` + +```shell +\du+ +``` + +##### 示例 + +查看所有角色名包括内置角色。 + +```shell +openGauss=# SELECT rolname from pg_roles; +``` + +查看现有角色不包含内置角色。 + +```shell +openGauss=# \du +``` + +#### 修改角色 + +##### 修改用户名 + +可以使用ALTER ROLE语句修改一个已经存在的角色名。 + +```shell +ALTER ROLE oldrolename RENAME TO newrolename; +``` + +其中: + +- oldrolename:旧的角色名。 +- newrolename:新的角色名。 + +##### 修改用户示例 + +将角色名manager修改为newmanager。 + +```shell +openGauss=# ALTER ROLE manager RENAME TO newmanager; +``` + +##### 修改用户密码 + +可以使用ALTER ROLE语句修改一个角色的登录密码。 + +```shell +ALTER ROLE rolename with PASSWORD 'password' +``` + +其中: + +- rolename:角色名。 +- password:密码。 + +##### 修改角色密码示例 + +将manager的密码修改为xxxxxxxxx。 + +```shell +openGauss=# ALTER ROLE manager with PASSWORD 'xxxxxxxxx'; +``` + +#### 删除角色 + +可以使用DROP ROLE语句来删除角色。在数据库界面执行。 + +```shell +DROP ROLE rolename; +``` + +其中:rolename为角色名。 + +##### 示例 + +删除manager角色。 + +```shell +openGauss=# DROP ROLE manager; +``` + +#### 角色授权 + +可以使用GRANT语句来对角色授权。 + +对角色授予表或视图的操作权限: + +```shell +GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | ALTER | DROP | COMMENT | INDEX | VACUUM } [, ...] + | ALL [ PRIVILEGES ] } + ON { [ TABLE ] table_name [, ...] + | ALL TABLES IN SCHEMA schema_name [, ...] } + TO { [ GROUP ] role_name | PUBLIC } [, ...] + [ WITH GRANT OPTION ]; +``` + +对角色授予序列的操作权限: + +```shell +GRANT { { SELECT | UPDATE | USAGE | ALTER | DROP | COMMENT } [, ...] + | ALL [ PRIVILEGES ] } + ON { [ [ LARGE ] SEQUENCE ] sequence_name [, ...] + | ALL SEQUENCES IN SCHEMA schema_name [, ...] } + TO { [ GROUP ] role_name | PUBLIC } [, ...] + [ WITH GRANT OPTION ]; +``` + +对角色授予数据库的操作权限: + +```shell +GRANT { { CREATE | CONNECT | TEMPORARY | TEMP | ALTER | DROP | COMMENT } [, ...] + | ALL [ PRIVILEGES ] } + ON DATABASE database_name [, ...] + TO { [ GROUP ] role_name | PUBLIC } [, ...] + [ WITH GRANT OPTION ]; +``` + +对角色授予函数的操作权限: + +```shell +GRANT { { EXECUTE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } + ON { FUNCTION {function_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...] + | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } + TO { [ GROUP ] role_name | PUBLIC } [, ...] + [ WITH GRANT OPTION ]; +``` + +对角色授予过程语言的操作权限: + +```shell +GRANT { USAGE | ALL [ PRIVILEGES ] } + ON LANGUAGE lang_name [, ...] + TO { [ GROUP ] role_name | PUBLIC } [, ...] + [ WITH GRANT OPTION ]; +``` + +将模式的访问权限赋予指定的角色: + +```shell +GRANT { { CREATE | USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } + ON SCHEMA schema_name [, ...] + TO { [ GROUP ] role_name | PUBLIC } [, ...] + [ WITH GRANT OPTION ]; +``` + +对角色授予表空间的操作权限: + +```shell +GRANT { { CREATE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } + ON TABLESPACE tablespace_name [, ...] + TO { [ GROUP ] role_name | PUBLIC } [, ...] + [ WITH GRANT OPTION ]; +``` + +将角色rolename1的成员关系赋予角色rolename2: + +```shell +GRANT rolename1 [, ...] TO rolename2 [, ...] [ WITH ADMIN OPTION ] +``` + +其中: + +- SELECT、INSERT、UPDATE、DELETE、REFERENCES、TRIGGER、USAGE、CREATE、CONNECT、TEMPORARY、TEMP、EXECUTE、ALL PRIVILEGES:用户的操作权限,ALL PRIVILEGES表示所有的权限。 +- ON字句:用于指定权限授予的对象。 +- tablename:表名。 +- TO字句:用来指定被赋予权限的角色。 +- rolename1、rolename2:角色名。 +- PUBLIC:表示该权限要赋予所有角色,包括那些以后可能创建的用户。 +- WITH GRANT OPTION:被授权的用户也可以将此权限赋予他人,否则就不能授权给他人。这个选项不能赋予PUBLIC。 +- sequence_name:序列名。 +- database_name:数据库名。 +- function_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...]:函数名及其参数。 +- lang_name:过程语言名。 +- schema_name:模式名。 +- tablespace_name:表空间名。 +- WITH ADMIN OPTION:表示成员随后就可以将角色的成员关系赋予其他角色,以及撤销其他角色的成员关系。 + +##### 示例 + +对manager授予数据库database1的CREATE权限。· + +```shell +openGauss=# GRANT CREATE ON DATABASE database1 TO manager; +``` + +对所有用户授予表table1的所有权限。 + +```shell +openGauss=# GRANT ALL PRIVILEGES ON TABLE table1 TO PUBLIC; +``` + +#### 删除用户权限 + +可以使用REVOKE语句来撤销一个或多个角色的权限。 + +撤销角色对表的操作权限: + +```shell +REVOKE [ GRANT OPTION FOR ] + { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | ALTER | DROP | COMMENT | INDEX | VACUUM }[, ...] + | ALL [ PRIVILEGES ] } + ON { [ TABLE ] table_name [, ...] + | ALL TABLES IN SCHEMA schema_name [, ...] } + FROM { [ GROUP ] role_name | PUBLIC } [, ...] + [ CASCADE | RESTRICT ]; +``` + +撤销角色对序列的操作权限: + +```shell +REVOKE [ GRANT OPTION FOR ] + { { SELECT | UPDATE | ALTER | DROP | COMMENT }[, ...] + | ALL [ PRIVILEGES ] } + ON { [ [ LARGE ] SEQUENCE ] sequence_name [, ...] + | ALL SEQUENCES IN SCHEMA schema_name [, ...] } + FROM { [ GROUP ] role_name | PUBLIC } [, ...] + [ CASCADE | RESTRICT ]; +``` + +撤销角色对数据库的操作权限: + +```shell +REVOKE [ GRANT OPTION FOR ] + { { CREATE | CONNECT | TEMPORARY | TEMP | ALTER | DROP | COMMENT } [, ...] + | ALL [ PRIVILEGES ] } + ON DATABASE database_name [, ...] + FROM { [ GROUP ] role_name | PUBLIC } [, ...] + [ CASCADE | RESTRICT ]; +``` + +撤销角色对函数的操作权限: + +```shell +REVOKE [ GRANT OPTION FOR ] + { { EXECUTE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } + ON { FUNCTION {function_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...] + | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } + FROM { [ GROUP ] role_name | PUBLIC } [, ...] + [ CASCADE | RESTRICT ]; +``` + +撤销角色对过程语言的操作权限: + +```shell +REVOKE [ GRANT OPTION FOR ] + { USAGE | ALL [ PRIVILEGES ] } + ON LANGUAGE lang_name [, ...] + FROM { [ GROUP ] role_name | PUBLIC } [, ...] + [ CASCADE | RESTRICT ]; +``` + +撤销角色对模式的操作权限: + +```shell +REVOKE [ GRANT OPTION FOR ] + { { CREATE | USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } + ON SCHEMA schema_name [, ...] + FROM { [ GROUP ] role_name | PUBLIC } [, ...] + [ CASCADE | RESTRICT ]; + +``` + +撤销角色对表空间的操作权限: + +```shell +REVOKE [ GRANT OPTION FOR ] + { { CREATE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } + ON TABLESPACE tablespace_name [, ...] + FROM { [ GROUP ] role_name | PUBLIC } [, ...] + [ CASCADE | RESTRICT ]; +``` + +删除rolename2的rolename1之间的成员关系: + +```shell +REVOKE [ ADMIN OPTION FOR ] rolename1 [, ...] FROM rolename2 [, ...] [ CASCADE | RESTRICT ] +``` + +其中: + +- GRANT OPTION FOR:表示只是撤销对该权限的授权的权力,而不是撤销该权限本身。 +- SELECT、INSERT、UPDATE、DELETE、REFERENCES、TRIGGER、USAGE、CREATE、CONNECT、TEMPORARY、TEMP、EXECUTE、ALL PRIVILEGES:用户的操作权限,ALL PRIVILEGES表示所有的权限。 +- ON字句:用于指定撤销权限的对象。 +- table_name:表名。 +- FROM字句:用来指定被撤销权限的角色。 +- rolename1、rolename2:角色名。 +- PUBLIC:表示撤销隐含定义的、拥有所有角色的组,但并不意味着所有角色都失去了权限,那些直接得到的权限以及通过一个组得到的权限仍然有效。 +- sequence_name:序列名。 +- CASCADE:撤销所有依赖性权限。 +- RESTRICT:不撤销所有依赖性权限。 +- database_name:数据库名。 +- function_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...]:函数名及其参数。 +- lang_name:过程语言名。 +- schema_name:模式名。 +- tablespace_name:表空间名。 +- ADMIN OPTION FOR:表示传递的授权不会自动收回。 + +##### 示例 + +对manager授予数据库database1的CREATE权限。 + +```shell +openGauss=# GRANT CREATE ON DATABASE database1 TO manager; +``` + +对所有用户撤销表table1的所有权限。 + +```shell +openGauss=# REVOKE ALL PRIVILEGES ON TABLE table1 FROM PUBLIC; +``` + +### 管理数据库 + +#### 创建数据库 + +可以使用CREATE DATABASE语句来创建数据库。在数据库界面使用。 + +```shell +CREATE DATABASE databasename; +``` + +其中:databasename为数据库名。 + +要使用这条命令,必须拥有CREATEDB权限。 + +##### 示例 + +创建一个数据库database1。 + +```shell +openGauss=# CREATE DATABASE database1; +``` + +#### 选择数据库 + +可以使用\c语句来选择数据库。 + +```shell +\c databasename; +``` + +其中:databasename为数据库名称。 + +##### 示例 + +选择database_example数据库。 + +```shell +openGauss=# \c database_example; +``` + +#### 查看数据库 + +可以使用\l语句来查看数据库。 + +```shell +\l; +``` + +##### 示例 + +查看所有数据库。 + +```shell +openGauss=# \l; +``` + +#### 删除数据库 + +可以使用DROP DATABASE语句来删除数据库。 + +>![](./public_sys-resources/icon-caution.gif) **注意:** +>删除数据库要谨慎操作,一旦删除,数据库中的所有表和数据都会删除。 + +```shell +DROP DATABASE databasename; +``` + +其中:databasename为数据库名称。 + +DROP DATABASE会删除数据库的系统目录项并且删除包含数据的文件目录。 + +DROP DATABASE只能由超级管理员或数据库管理者执行。 + +##### 示例 + +删除databaseexample数据库。 + +```shell +openGauss=# DROP DATABASE databaseexample; +``` + +#### 备份数据库 + +gs_dump支持将数据库信息导出至纯文本格式的SQL脚本文件或其他归档文件中。 + +```shell +gs_dump [OPTION]... [DBNAME] +gs_dump -p port_number postgres -f dump1.sql +``` + +其中: + +- DBNAME前面不需要加短或长选项。DBNAME指定要连接的数据库。 例如: 不需要-d,直接指定DBNAME。 +- dump1.sql:数据库备份的文件。 +- option:gs_dump命令参数选项,多个参数之间可以使用空格分隔。常用的gs_dump命令参数选项如下: + - -F, --format=c|d|t|p:选择输出格式。格式如下: + - p|plain:输出一个文本SQL脚本文件(默认)。 + - c|custom:输出一个自定义格式的归档,并且以目录形式输出,作为gs_restore输入信息。该格式是最灵活的输出格式,因为能手动选择,而且能在恢复过程中将归档项重新排序。该格式默认状态下会被压缩。 + - d|directory:该格式会创建一个目录,该目录包含两类文件,一类是目录文件,另一类是每个表和blob对象对应的数据文件。 + - t|tar:输出一个tar格式的归档形式,作为gs_restore输入信息。tar格式与目录格式兼容;tar格式归档形式在提取过程中会生成一个有效的目录格式归档形式。但是,tar格式不支持压缩且对于单独表有8GB的大小限制。此外,表数据项的相应排序在恢复过程中不能更改. + - -h, --host=HOSTNAME:指定主机名。 + - -p, --port=PORT:指定端口。 + - -U, --username=NAME:指定连接的用户名。 + - -W, --password=PASSWORD:指定用户连接的密码。如果主机的认证策略是trust,则不会对系统管理员进行密码验证,即无需输入-W选项;如果没有-W选项,并且不是系统管理员,“Dump Restore工具”会提示用户输入密码。 + - -w, --no-password:不出现输入密码提示。如果主机要求密码认证并且密码没有通过其它形式给出,则连接尝试将会失败。 该选项在批量工作和不存在用户输入密码的脚本中很有帮助。 + +##### 示例 + +执行gs_dump,导出postgres数据库全量信息,导出的MPPDB_backup.sql文件格式为纯文本格式。 + +```shell +[openGauss@localhost ~]# gs_dump -U omm -W password -f backup/MPPDB_backup.sql -p port postgres -F p +``` + +执行gs_dump,导出postgres数据库全量信息,导出的MPPDB_backup.dmp文件格式为自定义归档格式。 + +```shell +gs_dump -U omm -W password -f backup/MPPDB_backup.dmp -p port postgres -F c +``` + +#### 恢复数据库 + +gs_restore是openGauss提供的针对gs_dump导出数据的导入工具。通过此工具可将由gs_dump生成的导出文件进行导入。 + +```shell +gs_restore [OPTION]... FILE +``` + +其中: + +- FILE没有短选项或长选项。用来指定归档文件所处的位置。 +- 作为前提条件,需输入dbname或-l选项。不允许用户同时输入dbname和-l选项。 +- gs_restore默认是以追加的方式进行数据导入。为避免多次导入造成数据异常,在进行导入时,建议使用“-c” 参数,在重新创建数据库对象前,清理(删除)已存在于将要还原的数据库中的数据库对象。 +- option:通用参数如下: + - -f,--file=FILENAME:指定生成脚本的输出文件,或使用-l时列表的输出文件。 + - -d, --dbname=NAME:连接数据库dbname并直接导入到该数据库中。 + - -h, --host=HOSTNAME:指定主机名。 + - -p, --port=PORT:指定端口。 + - -U, --username=NAME:指定连接的用户名。 + - -W, --password=PASSWORD:指定用户连接的密码。如果主机的认证策略是trust,则不会对系统管理员进行密码验证,即无需输入-W参数;如果没有-W参数,并且不是系统管理员,“gs_restore”会提示用户输入密码。 + +##### 示例 + +执行gs_restore,将导出的MPPDB_backup.dmp文件(自定义归档格式)导入到postgres数据库。 + +```shell +[openGauss@localhost ~]# gs_restore -W password backup/MPPDB_backup.dmp -p port -d postgres +``` diff --git a/docs/zh/server/administration/administrator/user_and_user_group_management.md b/docs/zh/server/administration/administrator/user_and_user_group_management.md new file mode 100644 index 0000000000000000000000000000000000000000..1bfd9d422f60d038bb60c493d8148906dbc1ffd9 --- /dev/null +++ b/docs/zh/server/administration/administrator/user_and_user_group_management.md @@ -0,0 +1,342 @@ +# 管理用户 + +在Linux中,每个普通用户都有一个帐户,包括用户名、密码和主目录等信息。除此之外,还有一些系统本身创建的特殊用户,它们具有特殊的意义,其中最重要的是管理员帐户,默认用户名是root。同时Linux也提供了用户组,使每一个用户至少属于一个组,从而便于权限管理。 + +用户和用户组管理是系统安全管理的重要组成部分,本章主要介绍openEuler提供的用户管理和组管理命令,以及为普通用户分配特权的方法。 + + + +- [管理用户](#管理用户) + - [管理用户](#管理用户-1) + - [增加用户](#增加用户) + - [修改用户帐号](#修改用户帐号) + - [删除用户](#删除用户) + - [管理员帐户授权](#管理员帐户授权) + - [管理用户组](#管理用户组) + - [增加用户组](#增加用户组) + - [修改用户组](#修改用户组) + - [删除用户组](#删除用户组) + - [将用户加入用户组或从用户组中移除](#将用户加入用户组或从用户组中移除) + - [切换用户组](#切换用户组) + + + +## 管理用户 + +### 增加用户 + +#### useradd命令 + +在root权限下,通过useradd命令可以为系统添加新用户信息,其中 _options_ 为相关参数, _username_ 为用户名称。 + +``` +useradd [options] username +``` + +#### 用户信息文件 + +与用户帐号信息有关的文件如下: + +- /etc/passwd:用户帐号信息文件。 +- /etc/shadow:用户帐号信息加密文件。 +- /etc/group:组信息文件。 +- /etc/default/useradd:定义默认设置文件。 +- /etc/login.defs:系统广义设置文件。 +- /etc/skel:默认的初始配置文件目录。 + +#### 创建用户示例 + +例如新建一个用户名为userexample的用户,在root权限下执行如下命令: + +``` +# useradd userexample +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>没有任何提示,表明用户建立成功。这时请使用passwd命令设置用户的密码,没有设置密码的新帐号不能登录系统。 + + +使用id命令查看新建的用户信息,命令如下: + +``` +# id userexample +uid=1000(userexample) gid=1000(userexample) groups=1000(userexample) +``` + +修改用户userexample的密码: + +``` +# passwd userexample +``` + +建议在修改用户密码时满足密码复杂度要求,密码的复杂度的要求如下: + +1. 口令长度至少8个字符。 +2. 口令至少包含大写字母、小写字母、数字和特殊字符中的任意3种。 +3. 口令不能和帐号一样。 +4. 口令不能使用字典词汇。 + - 查询字典 + 在已装好的openEuler环境中,可以通过如下命令导出字典库文件dictionary.txt,用户可以查询密码是否在该字典中。 + ``` + cracklib-unpacker /usr/share/cracklib/pw_dict > dictionary.txt + ``` + - 修改字典 + 1. 修改上面导出的字典文件,执行如下命令更新系统字典库。 + ``` + # create-cracklib-dict dictionary.txt + ``` + 2. 在原字典库基础上新增其他字典内容custom.txt。 + ``` + # create-cracklib-dict dictionary.txt custom.txt + ``` + + +根据提示两次输入新用户的密码,完成密码更改。过程如下: + +``` +# passwd userexample +Changing password for user userexample. +New password: +Retype new password: +passwd: all authentication tokens updated successfully. +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>若打印信息中出现“BAD PASSWORD: The password fails the dictionary check - it is too simplistic/sytematic”,表示设置的密码过于简单,建议设置复杂度较高的密码。 + +### 修改用户帐号 + +#### 修改密码 + +普通用户可以用passwd修改自己的密码,只有管理员才能用passwd username为其他用户修改密码。 + +#### 修改用户shell设置 + +使用chsh命令可以修改自己的shell,只有管理员才能用chsh username为其他用户修改shell设置。 + +用户也可以使用usermod命令修改shell信息,在root权限下执行如下命令,其中 _new\_shell\_path_ 为目标shell路径,_username_ 为要修改用户的用户名,请根据实际情况修改: + +``` +usermod -s new_shell_path username +``` + +例如,将用户userexample的shell改为csh,命令如下: + +``` +# usermod -s /bin/csh userexample +``` + +#### 修改主目录 + +- 修改主目录,可以在root权限下执行如下命令,其中 _new\_home\_directory_ 为已创建的目标主目录的路径,_username_ 为要修改用户的用户名,请根据实际情况修改: + + ``` + usermod -d new_home_directory username + ``` + +- 如果想将现有主目录的内容转移到新的目录,应该使用-m选项,命令如下: + + ``` + usermod -d new_home_directory -m username + ``` + + +#### 修改UID + +修改用户ID,在root权限下执行如下命令,其中 _UID_ 代表目标用户ID,_username_ 代表用户名,请根据实际情况修改: + +``` +usermod -u UID username +``` + +该用户主目录中所拥有的文件和目录都将自动修改UID设置。但是,对于主目录外所拥有的文件,只能使用chown命令手动修改所有权。 + +#### 修改帐号的有效期 + +如果使用了影子口令,则可以在root权限下,执行如下命令来修改一个帐号的有效期,其中 _MM_ 代表月份,_DD_ 代表某天,_YY_ 代表年份,_username_ 代表用户名,请根据实际情况修改: + +``` +usermod -e MM/DD/YY username +``` + +### 删除用户 + +在root权限下,使用userdel命令可删除现有用户。 + +例如,删除用户Test,命令如下: + +``` +# userdel Test +``` + +如果想同时删除该用户的主目录以及其中所有内容,要使用-r参数递归删除。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>不建议直接删除已经进入系统的用户,如果需要强制删除,请使用 userdel -f _Test_ 命令。 + +### 管理员帐户授权 + +使用sudo命令可以允许普通用户执行管理员帐户才能执行的命令。 + +sudo命令允许已经在/etc/sudoers文件中指定的用户运行管理员帐户命令。例如,一个已经获得许可的普通用户可以运行如下命令: + +``` +sudo /usr/sbin/useradd newuserl +``` + +实际上,sudo的配置完全可以指定某个已经列入/etc/sudoers文件的普通用户可以做什么,不可以做什么。 + +/etc/sudoers的配置行如下所示。 + +- 空行或注释行(以\#字符打头):无具体功能的行。 +- 可选的主机别名行:用来创建主机列表的简称。必须以Host\_Alias关键词开头,列表中的主机必须用逗号(,)隔开,如: + + ``` + Host_Alias linux=ted1,ted2 + ``` + + 其中ted1和ted2是两个主机名,可使用linux(别名)称呼它们。 + + +- 可选的用户别名行:用来创建用户列表的简称。用户别名行必须以User\_Alias关键词开头,列表中的用户名必须以逗号(,)隔开。其格式同主机别名行。 +- 可选的命令别名行:用来创建命令列表的简称。必须以Cmnd\_Alias开头,列表中的命令必须用逗号(,)隔开。 +- 可选的运行方式别名行:用来创建用户列表的简称。不同的是,使用这样的别名可以告诉sudo程序以列表中某一用户的身份来运行程序。 +- 必要的用户访问说明行。 + + 用户访问的说明语法如下: + + ``` + user host = [ run as user ] command list + ``` + + 在user处指定一个真正的用户名或定义过的别名,host也可以是一个真正的主机名或者定义过的主机别名。默认情况下,sudo执行的所有命令都是以root身份执行。如果您想使用其他身份可以指定。command list可以是以逗号(,)分隔的命令列表,也可以是一个已经定义过的别名,如: + + ``` + ted1 ted2=/sbin/shutdown + ``` + + 这一句说明ted1可以在ted2主机上运行关机命令。 + + ``` + newuser1 ted1=(root) /usr/sbin/useradd,/usr/sbin/userdel + ``` + + 这一句说明ted1主机上的newuser1可以以root用户权限执行useradd,userdel命令。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + >- 可以在一行定义多个别名,中间用冒号 \(:\) 隔开。 + >- 可在命令或命令别名之前加上感叹号 \(!\),使该命令或命令别名无效。 + >- 有两个关键词:ALL和NOPASSWD。ALL意味着“所有”(所有文件、所有主机或所有命令),NOPASSWD意味着不用密码。 + >- 通过修改用户访问,将普通用户的访问权限修改为同root一样,则可以给普通用户分配特权。 + + +下面是一个sudoers文件的例子: + +``` +#sudoers files +#User alias specification +User_Alias ADMIN=ted1:POWERUSER=globus,ted2 +#user privilege specification +ADMIN ALL=ALL +POWERUSER ALL=ALL,!/bin/su +``` + +其中: + +- User\_Alias ADMIN=ted1:POWERUSER=globus,ted2 + + 定义了两个别名ADMIN和POWERUSER + +- ADMIN ALL=ALL + + 说明在所有主机上,ADMIN用户都可以以root身份执行所有命令 + +- POWERUSER ALL=ALL,!/bin/su + + 给POWERUSER用户除了运行su命令外等同ADMIN的权限 + +## 管理用户组 + +### 增加用户组 + +#### groupadd命令 + +在root权限下,通过groupadd命令可以为系统添加新用户组信息,其中 _options_ 为相关参数, _groupname_ 为用户组名称。 + +``` +groupadd [options] groupname +``` +例如新建一个用户组名为groupexample的用户,在root权限下执行如下命令: + +``` +# groupadd groupexample +``` + + +#### 用户组信息文件 + +与用户组信息有关的文件如下: + +- /etc/gshadow:用户组信息加密文件。 +- /etc/group:组信息文件。 +- /etc/login.defs:系统广义设置文件。 + + +### 修改用户组 + +#### 修改GID + +修改用户组ID,在root权限下执行如下命令,其中 _GID_ 代表目标用户组ID, _groupname_ 代表用户组,请根据实际情况修改: + +``` +groupmod -g GID groupname +``` + + +#### 修改用户组名 + +修改用户组名,在root权限下执行如下命令,其中 _newgroupname_ 代表新用户组名, _oldgroupname_ 代表已经存在的待修改的用户组名,请根据实际情况修改: + +``` +groupmod -n newgroupname oldgroupname +``` + +### 删除用户组 + +在root权限下,使用groupdel命令可删除用户组。 + +例如,删除用户组Test,命令如下: + +``` +# groupdel Test +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>每个用户有且只有一个主组,在创建用户时默认创建。groupdel不能直接删除用户的主组,如果需要强制删除用户主组,请使用 groupdel -f _Test_ 命令。 + +### 将用户加入用户组或从用户组中移除 + +在root权限下,使用gpasswd命令将用户加入用户组或从用户组中移除。 + +例如,将用户 _userexample_ 加入用户组 _Test_ ,命令如下: + +``` +# gpasswd -a userexample Test +``` +例如,将用户 _userexample_ 从 _Test_ 用户组中移除,命令如下: + +``` +# gpasswd -d userexample Test +``` + +### 切换用户组 + +一个用户同时属于多个用户组时,在该用户登录后,使用newgrp命令可以切换到其他用户组,以便具有其他用户组的权限。 + +例如,将用户 _userexample_ 切换到 _Test_ 用户组,命令如下: + +``` +$ newgrp Test +``` + + diff --git a/docs/zh/server/administration/administrator/using_dnf_to_manage_software_packages.md b/docs/zh/server/administration/administrator/using_dnf_to_manage_software_packages.md new file mode 100644 index 0000000000000000000000000000000000000000..ff6b4e22f99de83345538a2e5c4bbb809b3a63b5 --- /dev/null +++ b/docs/zh/server/administration/administrator/using_dnf_to_manage_software_packages.md @@ -0,0 +1,598 @@ +# 使用DNF管理软件包 + +DNF是一款Linux软件包管理工具,用于管理RPM软件包。DNF可以查询软件包信息,从指定软件库获取软件包,自动处理依赖关系以安装或卸载软件包,以及更新系统到最新可用版本。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- DNF与YUM完全兼容,提供了YUM兼容的命令行以及为扩展和插件提供的API。 +>- 使用DNF需要管理员权限,本章所有命令需要在管理员权限下执行。 + + +- [使用DNF管理软件包](#使用dnf管理软件包) + - [配置DNF](#配置dnf) + - [DNF配置文件](#dnf配置文件) + - [创建本地软件源仓库](#创建本地软件源仓库) + - [添加、启用和禁用软件源](#添加启用和禁用软件源) + - [管理软件包](#管理软件包) + - [搜索软件包](#搜索软件包) + - [列出软件包清单](#列出软件包清单) + - [显示RPM包信息](#显示rpm包信息) + - [安装RPM包](#安装rpm包) + - [下载软件包](#下载软件包) + - [删除软件包](#删除软件包) + - [管理软件包组](#管理软件包组) + - [列出软件包组清单](#列出软件包组清单) + - [显示软件包组信息](#显示软件包组信息) + - [安装软件包组](#安装软件包组) + - [删除软件包组](#删除软件包组) + - [检查并更新](#检查并更新) + - [检查更新](#检查更新) + - [升级](#升级) + - [更新所有的包和它们的依赖](#更新所有的包和它们的依赖) + + + +## 配置DNF + +### DNF配置文件 + +DNF的主要配置文件是/etc/dnf/dnf.conf,该文件包含两部分: + +- “main”部分保存着DNF的全局设置。 + +- “repository”部分保存着软件源的设置,可以有零个或多个“repository”。 + +另外,在/etc/yum.repos.d目录中保存着零个或多个repo源相关文件,它们也可以定义不同的“repository”。 + +所以openEuler软件源的配置一般有两种方式,一种是直接配置/etc/dnf/dnf.conf文件中的“repository”部分,另外一种是在/etc/yum.repos.d目录下增加.repo文件。 + +#### 配置main部分 + +/etc/dnf/dnf.conf 文件包含的“main”部分,配置示例如下: + +```text +[main] +gpgcheck=1 +installonly_limit=3 +clean_requirements_on_remove=True +best=True +skip_if_unavailable=False +``` + +常用选项说明: + +**表 1** main参数说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

说明

+

cachedir

+

缓存目录,该目录用于存储RPM包和数据库文件。

+

keepcache

+

可选值是1和0,表示是否要缓存已安装成功的RPM包及头文件,默认值为0,即不缓存。

+

debuglevel

+

设置dnf生成的debug信息。取值范围:[0-10],数值越大会输出越详细的debug信息。默认值为2,设置为0表示不输出debug信息。

+

clean_requirements_on_remove

+

删除在dnf remove期间不再使用的依赖项,如果软件包是通过DNF安装的,而不是通过显式用户请求安装的,则只能通过clean_requirements_on_remove删除软件包,即它是作为依赖项引入的。 默认值为True。

+

best

+

升级包时,总是尝试安装其最高版本,如果最高版本无法安装,则提示无法安装的原因并停止安装。默认值为True。

+

obsoletes

+

可选值1和0,设置是否允许更新陈旧的RPM包。默认值为1,表示允许更新。

+

gpgcheck

+

可选值1和0,设置是否进行gpg校验。默认值为1,表示需要进行校验。

+

plugins

+

可选值1和0,表示启用或禁用dnf插件。默认值为1,表示启用dnf插件。

+

installonly_limit

+

设置可以同时安装“installonlypkgs”指令中列出的任何单个软件包的最大版本数。默认值为3,不建议降低此值。

+
+ +#### 配置repository部分 + +repository部分允许您定义定制化的openEuler软件源仓库,各个仓库的名称不能相同,否则会引起冲突。配置repository部分有两种方式,一种是直接配置/etc/dnf/dnf.conf文件中的“repository”部分,另外一种是配置/etc/yum.repos.d目录下的.repo文件。 + +- 直接配置/etc/dnf/dnf.conf文件中的“repository”部分 + + 下面是\[repository\]部分的一个最小配置示例: + + ```text + [repository] + name=repository_name + baseurl=repository_url + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >openEuler提供在线的镜像源,地址:[https://repo.openeuler.org/](https://repo.openeuler.org/)。以 openEuler 22.03 LTS SP4 的aarch64版本为例,baseurl可配置为[https://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/aarch64/](https://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/aarch64/)。 + + 选项说明: + + **表 2** repository参数说明 + + + + + + + + + + + +

参数

+

说明

+

name=repository_name

+

软件仓库(repository )描述的字符串。

+

baseurl=repository_url

+

软件仓库(repository )的地址。

+
  • 使用http协议的网络位置:例如 http://path/to/repo
  • 使用ftp协议的网络位置:例如 ftp://path/to/repo
  • 本地位置:例如 file:///path/to/local/repo
+
+ +- 配置/etc/yum.repos.d目录下的.repo文件 + + openEuler提供了多种repo源供用户在线使用,各repo源含义可参考[系统安装](./../../releasenotes/os_installation.md)。使用root权限添加openEuler repo源,示例如下: + + ```shell + # vi /etc/yum.repos.d/openEuler.repo + ``` + + ```shell + [OS] + name=OS + baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/$basearch/ + enabled=1 + gpgcheck=1 + gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/$basearch/RPM-GPG-KEY-openEuler + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + > - enabled为是否启用该软件源仓库,可选值为1和0。默认值为1,表示启用该软件源仓库。 + > - gpgkey为验证签名用的公钥。 + +#### 显示当前配置 + +- 要显示当前的配置信息: + + ```shell + dnf config-manager --dump + ``` + +- 要显示相应软件源的配置,首先查询repo id: + + ```shell + dnf repolist + ``` + + 然后执行如下命令,显示对应id的软件源配置,其中 _repository_ 为查询得到的repo id: + + ```shell + dnf config-manager --dump repository + ``` + +- 您也可以使用一个全局正则表达式,来显示所有匹配部分的配置: + + ```shell + dnf config-manager --dump glob_expression + ``` + +### 创建本地软件源仓库 + +要建立一个本地软件源仓库,请按照下列步骤操作。 + +1. 安装createrepo软件包。在root权限下执行如下命令: + + ```shell + dnf install createrepo + ``` + +2. 将需要的软件包复制到一个目录下,如/mnt/local\_repo/ 。 +3. 创建软件源,执行以下命令: + + ```shell + createrepo /mnt/local_repo + ``` + +### 添加、启用和禁用软件源 + +本节将介绍如何通过“dnf config-manager”命令添加、启用和禁用软件源仓库。 + +#### 添加软件源 + +要定义一个新的软件源仓库,您可以在 /etc/dnf/dnf.conf 文件中添加“repository”部分,或者在/etc/yum.repos.d/目录下添加“.repo”文件进行说明。建议您通过添加“.repo”的方式,每个软件源都有自己对应的“.repo”文件,以下介绍该方式的操作方法。 + +要在您的系统中添加一个这样的源,请在root权限下执行如下命令,执行完成之后会在/etc/yum.repos.d/目录下生成对应的repo文件。其中 _repository\_url_ 为repo源地址,详情请参见[表2](#zh-cn_topic_0151921080_a4a0b069bbf624b09be3bdd08567c0445)。 + +```shell +dnf config-manager --add-repo repository_url +``` + +#### 启用软件源 + +要启用软件源,请在root权限下执行如下命令,其中 _repository_ 为新增.repo文件中的repo id(可通过dnf repolist查询): + +```shell +dnf config-manager --set-enable repository +``` + +您也可以使用一个全局正则表达式,来启用所有匹配的软件源。其中 _glob\_expression_ 为对应的正则表达式,用于同时匹配多个repo id: + +```shell +dnf config-manager --set-enable glob_expression +``` + +#### 禁用软件源 + +要禁用软件源,请在root权限下执行如下命令: + +```shell +dnf config-manager --set-disable repository +``` + +同样的,您也可以使用一个全局正则表达式来禁用所有匹配的软件源: + +```shell +dnf config-manager --set-disable glob_expression +``` + +## 管理软件包 + +使用dnf能够让您方便的进行查询、安装、删除软件包等操作。 + +### 搜索软件包 + +您可以使用rpm包名称、缩写或者描述搜索需要的RPM包,使用命令如下: + +```shell +dnf search term +``` + +示例如下: + +```shell +$ dnf search httpd +========================================== N/S matched: httpd ========================================== +httpd.aarch64 : Apache HTTP Server +httpd-devel.aarch64 : Development interfaces for the Apache HTTP server +httpd-manual.noarch : Documentation for the Apache HTTP server +httpd-tools.aarch64 : Tools for use with the Apache HTTP Server +libmicrohttpd.aarch64 : Lightweight library for embedding a webserver in applications +mod_auth_mellon.aarch64 : A SAML 2.0 authentication module for the Apache Httpd Server +mod_dav_svn.aarch64 : Apache httpd module for Subversion server +``` + +### 列出软件包清单 + +要列出系统中所有已安装的以及可用的RPM包信息,使用命令如下: + +```shell +dnf list all +``` + +要列出系统中特定的RPM包信息,使用命令如下: + +```shell +dnf list glob_expression... +``` + +示例如下: + +```shell +$ dnf list httpd +Available Packages +httpd.aarch64 2.4.51-17.oe2203SP4 Local +``` + +### 显示RPM包信息 + +要显示一个或者多个RPM包信息,使用命令如下: + +```shell +dnf info package_name... +``` + +例如搜索,命令如下: + +```shell +$ dnf info httpd +Available Packages +Name : httpd +Version : 2.4.51 +Release : 17.oe2203SP4 +Arch : aarch64 +Size : 1.2 M +Repo : Local +Summary : Apache HTTP Server +URL : http://httpd.apache.org/ +License : ASL 2.0 +Description : The Apache HTTP Server is a powerful, efficient, and extensible + : web server. +``` + +### 安装RPM包 + +要安装一个软件包及其所有未安装的依赖,请在root权限下执行如下命令: + +```shell +dnf install package_name +``` + +您也可以通过添加软件包名字同时安装多个软件包。配置文件/etc/dnf/dnf.conf添加参数strict=False,运行dnf命令参数添加\-\-setopt=strict=0。请在root权限下执行如下命令: + +```shell +dnf install package_name package_name... --setopt=strict=0 +``` + +示例如下: + +```shell +# dnf install httpd +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- 安装RPM包过程中,若出现安装失败,可参考[安装时出现软件包冲突、文件冲突或缺少软件包导致安装失败](./faq_54.md#安装时出现软件包冲突文件冲突或缺少软件包导致安装失败)。 +>- 请勿安装install-scripts软件包,该包仅用于imageTailor工具裁剪ISO时使用,若在openEuler系统上安装该软件包会导致系统无法启动。 + +### 下载软件包 + +使用dnf下载软件包,请在root权限下输入如下命令: + +```shell +dnf download package_name +``` + +如果需要同时下载未安装的依赖,则加上\-\-resolve,使用命令如下: + +```shell +dnf download --resolve package_name +``` + +示例如下: + +```shell +# dnf download --resolve httpd +``` + +### 删除软件包 + +要卸载软件包以及相关的依赖软件包,请在root权限下执行如下命令: + +```shell +dnf remove package_name... +``` + +示例如下: + +```shell +# dnf remove totem +``` + +## 管理软件包组 + +软件包集合是服务于一个共同目的的一组软件包,例如系统工具集等。使用dnf可以对软件包组进行安装/删除等操作,使相关操作更高效。 + +### 列出软件包组清单 + +使用summary参数,可以列出系统中所有已安装软件包组、可用的组、可用的环境组的数量,命令如下: + +```shell +dnf groups summary +``` + +使用示例如下: + +```shell +# dnf groups summary +Last metadata expiration check: 0:11:56 ago on Sat 17 Aug 2019 07:45:14 PM CST. +Available Groups: 8 +``` + +要列出所有软件包组和它们的组ID ,命令如下: + +```shell +dnf group list +``` + +使用示例如下: + +```shell +# dnf group list +Last metadata expiration check: 0:10:32 ago on Sat 17 Aug 2019 07:45:14 PM CST. +Available Environment Groups: + Minimal Install + Custom Operating System + Server +Available Groups: + Development Tools + Graphical Administration Tools + Headless Management + Legacy UNIX Compatibility + Network Servers + Scientific Support + Security Tools + System Tools + +``` + +### 显示软件包组信息 + +要列出包含在一个软件包组中必须安装的包和可选包,使用命令如下: + +```shell +dnf group info glob_expression... +``` + +例如显示Development Tools信息,示例如下: + +```shell +# dnf group info "Development Tools" +Last metadata expiration check: 0:14:54 ago on Wed 05 Jun 2019 08:38:02 PM CST. + +Group: Development Tools + Description: A basic development environment. + Mandatory Packages: + binutils + glibc-devel + make + pkgconf + pkgconf-m4 + pkgconf-pkg-config + rpm-sign + Optional Packages: + expect +``` + +### 安装软件包组 + +每一个软件包组都有自己的名称以及相应的ID(groupid),您可以使用软件包组名称或它的ID进行安装。 + +要安装一个软件包组,请在root权限下执行如下命令: + +```shell +dnf group install group_name +``` + +或 + +```shell +dnf group install groupid +``` + +例如安装Development Tools相应的软件包组,命令如下: + +```shell +# dnf group install "Development Tools" +``` + +或 + +```shell +# dnf group install development +``` + +### 删除软件包组 + +要卸载软件包组,您可以使用软件包组名称或它的ID,在root权限下执行如下命令: + +```shell +dnf group remove group_name +``` + +或 + +```shell +dnf group remove groupid +``` + +例如删除Development Tools相应的软件包组,命令如下: + +```shell +# dnf group remove "Development Tools" +``` + +或 + +```shell +# dnf group remove development +``` + +## 检查并更新 + +dnf可以检查您的系统中是否有软件包需要更新。您可以通过dnf列出需要更新的软件包,并可以选择一次性全部更新或者只对指定包进行更新。 + +### 检查更新 + +如果您需要显示当前系统可用的更新,使用命令如下: + +```shell +dnf check-update +``` + +使用示例如下: + +```shell +# dnf check-update +Last metadata expiration check: 0:02:10 ago on Sun 21 May 2023 11:28:07 PM CST. + +anaconda-core.aarch64 36.15.5-17.oe2203SP4 update +anaconda-tui.aarch64 36.15.5-17.oe2203SP4 update +anaconda-user-help.aarch64 26.1-10.oe2203SP4 update +bind-libs.aarch64 9.16.23-18.oe2203SP4 update +bind-license.noarch 9.16.23-18.oe2203SP4 update +bind-utils.aarch64 9.16.23-18.oe2203SP4 update +... +``` + +### 升级 + +如果您需要升级单个软件包,在root权限下执行如下命令: + +```shell +dnf update package_name +``` + +例如升级rpm包,示例如下: + +```shell +# dnf update anaconda-gui.aarch64 +Last metadata expiration check: 0:02:10 ago on Sun 21 May 2023 11:30:27 PM CST. +Dependencies Resolved +================================================================================ + Package Arch Version Repository Size +================================================================================ +Updating: + anaconda-core aarch64 36.15.5-17.oe2203SP4 updates 1.4 M + anaconda-tui aarch64 36.15.5-17.oe2203SP4 updates 274 k + anaconda-user-help aarch64 26.1-10.oe2203SP4 updates 315 k + +Transaction Summary +================================================================================ +Upgrade 5 Package + +Total download size: 3.1 M +Is this ok [y/N]: +``` + +如果您需要升级软件包组,在root权限下执行如下命令: + +```shell +dnf group update group_name +``` + +### 更新所有的包和它们的依赖 + +要更新所有的包和它们的依赖,在root权限下执行如下命令: + +```shell +dnf update +``` diff --git a/docs/zh/server/administration/administrator/viewing_system_infortmation.md b/docs/zh/server/administration/administrator/viewing_system_infortmation.md new file mode 100644 index 0000000000000000000000000000000000000000..be88212480663b19f6093883b1bf2af63391b6cc --- /dev/null +++ b/docs/zh/server/administration/administrator/viewing_system_infortmation.md @@ -0,0 +1,46 @@ +# 查看系统信息 + +- 查看系统信息,命令如下: + + ``` + $ cat /etc/os-release + ``` + + 命令输出如下: + + ``` + $ cat /etc/os-release + NAME="openEuler" + VERSION="22.03 (LTS SP4)" + ID="openEuler" + VERSION_ID="22.03" + PRETTY_NAME="openEuler 22.03 (LTS SP4)" + ANSI_COLOR="0;31" + ``` + + +- 查看系统相关的资源信息。 + + 查看CPU信息,命令如下: + + ``` + $ lscpu + ``` + + 查看内存信息,命令如下: + + ``` + $ free + ``` + + 查看磁盘信息,命令如下: + + ``` + $ fdisk -l + ``` + + 查看系统资源实时信息,命令如下: + + ``` + $ top + ``` diff --git a/docs/zh/server/administration/compa_command/_toc.yaml b/docs/zh/server/administration/compa_command/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..416c39d25bdf65bb76adacc7c49c641f4c775aa8 --- /dev/null +++ b/docs/zh/server/administration/compa_command/_toc.yaml @@ -0,0 +1,9 @@ +isManual: true +label: '' +sections: + - label: 兼容性命令 + href: ./overview.md + - label: utshell 用户手册 + href: ./utshell_guide.md + - label: utsudo 使用指南 + href: ./utsudo_user_guide.md diff --git a/docs/zh/server/administration/compa_command/figures/image-20230828094539717.png b/docs/zh/server/administration/compa_command/figures/image-20230828094539717.png new file mode 100644 index 0000000000000000000000000000000000000000..2f92fd1d2216c56dbd02c228947d24d88c0e0ac8 Binary files /dev/null and b/docs/zh/server/administration/compa_command/figures/image-20230828094539717.png differ diff --git a/docs/zh/server/administration/compa_command/figures/image-20230828094723153.png b/docs/zh/server/administration/compa_command/figures/image-20230828094723153.png new file mode 100644 index 0000000000000000000000000000000000000000..aef4a7a18627344e29cc0849b0ef24d00172dbb5 Binary files /dev/null and b/docs/zh/server/administration/compa_command/figures/image-20230828094723153.png differ diff --git a/docs/zh/server/administration/compa_command/figures/image-20230828135001624.png b/docs/zh/server/administration/compa_command/figures/image-20230828135001624.png new file mode 100644 index 0000000000000000000000000000000000000000..e74a43e46b3a815ce484cfa67dea4011169ecb13 Binary files /dev/null and b/docs/zh/server/administration/compa_command/figures/image-20230828135001624.png differ diff --git a/docs/zh/server/administration/compa_command/figures/image-20230828140355863.png b/docs/zh/server/administration/compa_command/figures/image-20230828140355863.png new file mode 100644 index 0000000000000000000000000000000000000000..dddd64f7ffb7b433a460f3baf6d8f2ae62994987 Binary files /dev/null and b/docs/zh/server/administration/compa_command/figures/image-20230828140355863.png differ diff --git a/docs/zh/server/administration/compa_command/figures/image-20230828140709441.png b/docs/zh/server/administration/compa_command/figures/image-20230828140709441.png new file mode 100644 index 0000000000000000000000000000000000000000..d7d83de6fce30099daa9cc9c05f92943efd12b3f Binary files /dev/null and b/docs/zh/server/administration/compa_command/figures/image-20230828140709441.png differ diff --git a/docs/zh/server/administration/compa_command/media/image1.png b/docs/zh/server/administration/compa_command/media/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..feff5b7bae51f432b5a8a05828295ace5b2f616d Binary files /dev/null and b/docs/zh/server/administration/compa_command/media/image1.png differ diff --git a/docs/zh/server/administration/compa_command/media/image2.png b/docs/zh/server/administration/compa_command/media/image2.png new file mode 100644 index 0000000000000000000000000000000000000000..c241e9356595daf58732a25a2bb31cd0a75bd027 Binary files /dev/null and b/docs/zh/server/administration/compa_command/media/image2.png differ diff --git a/docs/zh/server/administration/compa_command/media/image3.png b/docs/zh/server/administration/compa_command/media/image3.png new file mode 100644 index 0000000000000000000000000000000000000000..f00123d7b8553d8b7c374c7a0becd4269a663084 Binary files /dev/null and b/docs/zh/server/administration/compa_command/media/image3.png differ diff --git a/docs/zh/server/administration/compa_command/media/image4.png b/docs/zh/server/administration/compa_command/media/image4.png new file mode 100644 index 0000000000000000000000000000000000000000..9a047ff75fb1144c7df513345acef97357aa82b7 Binary files /dev/null and b/docs/zh/server/administration/compa_command/media/image4.png differ diff --git a/docs/zh/server/administration/compa_command/overview.md b/docs/zh/server/administration/compa_command/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..847b50270f91686278a8fa70b96144c557929ddf --- /dev/null +++ b/docs/zh/server/administration/compa_command/overview.md @@ -0,0 +1,3 @@ +# 兼容性命令 + +本文档是介绍基于 Rust 语言重构的 shell 及 Linux 命令,可在 openEuler 系统上使用,与 Linux 原生命令兼容。 diff --git a/docs/zh/server/administration/compa_command/utshell_guide.md b/docs/zh/server/administration/compa_command/utshell_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..6798078680cef0985b3673d869026531ac01398c --- /dev/null +++ b/docs/zh/server/administration/compa_command/utshell_guide.md @@ -0,0 +1,273 @@ +# utshell 用户手册 + +## 介绍 + +utshell 是一个与 bash 兼容的 shell。它实现了基本的内建命令执行和启动外部命令。同时也实现了任务、管道和信号处理等功能。 + +## 安装和卸载 + +### 安装 + +utshell 使用 rpm 命令进行安装,我们假设使用的是欧拉的 2309 系统: + +进入命令行界面执行: + +![截图.png](./media/image1.png) + +根据提示输入\"y\",即可安装成功。 + +![截图.png](./media/image2.png) + +### 卸载 + +在命令行执行`rpm -e utshell`即可卸载 utshell。 + +```shell + +rpm -e utshell + +``` + +![截图.png](./media/image3.png) + +## 使用 + +### 一般命令 + +在 utshell 环境下,直接键入命令名即可执行对应的命令。 + +utshell 支持如下内建命令: + +![截图.png](./media/image4.png) + +### 变量定义和使用 + +#### 变量定义 + +变量定义直接用\"=\",中间不能有空格。 + +```shell + +var=4 + +``` + +#### 变量使用 + +```shell + +echo \${var} + +``` + +### 数组的定义和使用 + +#### 数组的定义 + +```shell + +distros=(ubuntu fedora suse \"arch linux\") + +``` + +#### 数组的使用 + +```shell + +echo \${distros\[2\]} + +``` + +### 函数定义和使用 + +#### 函数的定义 + +```shell + +func() { echo \$1; } + +``` + +#### 函数的调用 + +```shell + +func 1 + +``` + +#### 给函数传递参数 + +调用函数时,在函数名后面直接已空格分割参数: + +`func firstParam secondParam` + +在函数体中使用\$1,\$2\...\...其中\$1 表示第一个参数,\$2 表示第二个参数,大于 9 的需要用大括号括起来。 + +```shell + +func() { + +echo \$1 \${10} \#需要传递 10 个参数 + +} + +\#调用 + +func 1 2 3 4 5 6 7 8 9 0 + +``` + +### 逻辑判断 + +#### if 语句 + +语法为: + +```shell + +if condition; then + +do-if-true; + +elif second-condition; then + +do-else-if-true + +elif third-condition; then + +do-else-if-third-true + +else + +do-else-false + +fi + +``` + +其中 condition 可以是命令,如: + +```shell + +if \[ \"\$s\" = \"string\" \]; then + +echo \"string is equivalent to \\\$s\" + +else + +echo \"string is not equivalent to \\\$s\" + +fi + +``` + +也可以是测试条件操作符: + +下面简单介绍些条件操作符: + +```shell + + -f 检查文件是否存在并且它是一个普通文件。 + + -d 检查提供的参数是否是目录。 + + -h 检查提供的参数是否是符号链接。 + + -s 检查文件是否存在且不为空。 + + -r 检查文件是否可读。 + + -w 检查文件是否可写。 + + -x 检查文件是否可执行。 + +``` + +如果用于数字比较,可以用如下测试条件操作符: + +```shell + + -lt 小于 + + -gt 大于 + + -ge 大于等于 + + -le 小于等于 + + -ne 不等于 + +``` + +如果用于字符串比较,可以用如下测试条件操作符: + +```shell + + == 两个字符串相同 + + = 两个字符串相同(同==) + + != 两个字符串不同 + + -z 空字符串,返回 true + + -n 长度不是 0,则返回 true + +``` + +### 循环 + +#### for 循环 + +```shell + +for number in 1 2 3 4 5 + +do + +echo \$number + +done + +使用列表: + +for number in {1..500..2} + +do + +echo \$number + +done + +``` + +其中{1..500..2}表示起始数字为 1,结束数字为 500(包括),步长为 2。 + +#### until 循环 + +```shell + +until \[condition\]; do + +commands + +done + +``` + +当条件为真时,执行循环; + +#### while 循环 + +```shell + +while \[ condition \]; do + +commands + +done + +``` + +当条件为真时,执行循环。 diff --git a/docs/zh/server/administration/compa_command/utsudo_user_guide.md b/docs/zh/server/administration/compa_command/utsudo_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..4bf581efd6494dadad66372759f5501e1c985d2d --- /dev/null +++ b/docs/zh/server/administration/compa_command/utsudo_user_guide.md @@ -0,0 +1,85 @@ +# utsudo 使用指南 + +本文档主要介绍`utsudo`工具的安装和简单使用,帮助用户快速上手。`utsudo`从参数功能到插件使用都是完全兼容`sudo`,大大降低了用户的学习成本,欢迎大家使用。 + +本文档主要适用于`utsudo`的开发人员、测试人员、以及普通用户。 + +## utsudo 介绍 + +utsudo 诞生于 2022 年 6 月份,是一个目前正在进行的使用 Rust 语言重构 Sudo 的项目。utsudo 旨在提供一个更加高效、安全、灵活的提权工具,涉及的模块主要有:通用工具库、整体框架和插件功能等。 + +## utsudo 安装 + +在`0.0.4`版本中,`utsudo`与`sudo`还存在部分文件冲突。需要先使用`yum`命令,把`utsudo`的二进制`rpm`包下载到本地,再使用`rpm`命令进行安装 ,以允许与`sudo`的文件冲突。 + +首先使用`yumdownloader utsudo`命令下载`utsudo`二进制包到本地。 + +然后使用`sudo rpm -ivh utsudo-0.0.1-0.04.x86_64.rpm --replacefiles`命令安装`utsudo`,执行过程如下所示。 + +![image-20230828094539717](./figures/image-20230828094539717.png) + +安装完成后,使用`rpm -qa | grep utsudo`命令查看`utsudo`是否正常安装,如下图所示。 + +![image-20230828094723153](./figures/image-20230828094723153.png) + +由上图可知,`utsudo`已正常安装,安装的版本是`0.0.1-0.04`。 + +`utsudo`后续还会有版本更新,大家以自己安装的版本为准。 + +## utsudo使用 + +下面给大家介绍一下`utsudo`的简单使用。 + +`utsudo`参数较多,下面简单列出部分参数,详细内容可使用`utsudo -h`列出。 + +```shell + +-e, --edit 编辑文件而非执行命令 +-k, --reset-timestamp 无效的时间戳文件 +-l, --list 列出用户权限或检查某个特定命令;对于长格式,使用两次 + +``` + +### `-e` 参数 + +`-e`参数的功能:编辑文件。 + +`utsudo -e`相当于`sudoedit`命令,执行时会调用普通用户进行编辑,而位于调用用户可写目录中的文件是无法编辑的,除非该用户是`root`用户。 + +在当前用户没有可写权限的目录`e`中,存在一个当前用户没有可编辑权限的文件:`test.txt`。使用普通用户编辑`test.txt`文件,会提示没有权限。使用`utsudo -e`后,可以正常编辑。具体执行过程如下图所示。 + +![image-20230828135001624](./figures/image-20230828135001624.png) + +由上图可知,成功修改了`test.txt`文件的内容。(其中`utsudo -e is okay !!`,是我们在编辑器中自己添加的。) + +### `-k`参数 + +`-k`参数功能:使时间戳无效。 + +默认使用`utsudo`执行命令时,第一次是需要输入密码的,短时间内(默认是5分钟)再次执行`sudo`命令则不需要再次输入密码。使用`-k`参数可以强迫使用者在下一次执行`utsudo`时询问密码。 + +![image-20230828140355863](./figures/image-20230828140355863.png) + +`utsudo`输入密码后,默认`5`分钟之内不需要输入密码。 + +但是,由上图可知,`utsudo -k`使得`utsudo`的时间戳失效了。 + +### `-l`参数 + +`-l`参数功能:用于显示当前用户可以用`utsudo`执行哪些命令。 + +执行过程如下所示: + +![image-20230828140709441](./figures/image-20230828140709441.png) + +上图显示了`test`用户,可以运行如下命令: + +```shell + +(ALL) ALL + +``` + +也就是所有命令,说明`/etc/sudoers`文件中,并没有对`test`用户做过多的限制。 + +`utsudo`的使用,就简单介绍这些,除了上面介绍到的,`utsudo`还有很多其他的功能和参数,此处就不一一列举了。欢迎大家讨论。 diff --git a/docs/zh/server/administration/sysmaster/_toc.yaml b/docs/zh/server/administration/sysmaster/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5fad8bbe2548ee66e87175dba232270a15dbb631 --- /dev/null +++ b/docs/zh/server/administration/sysmaster/_toc.yaml @@ -0,0 +1,17 @@ +isManual: true +label: '' +sections: + - label: 设备管理 + href: ./device_management.md + - label: 安装与部署 + href: ./devmaster_install_deploy.md + - label: 使用说明 + href: ./devmaster_usage.md + - label: sysMaster用户指南 + href: ./overview.md + - label: 服务管理 + href: ./service_management.md + - label: 安装与部署 + href: ./sysmaster_install_deploy.md + - label: sysmaster使用说明 + href: ./sysmaster_usage.md diff --git a/docs/zh/server/administration/sysmaster/device_management.md b/docs/zh/server/administration/sysmaster/device_management.md new file mode 100644 index 0000000000000000000000000000000000000000..9fa6b496e474b31d090c5ff35a0679fa072b6e93 --- /dev/null +++ b/docs/zh/server/administration/sysmaster/device_management.md @@ -0,0 +1,14 @@ +# 设备管理 + +设备管理器作为链接用户态软件与底层物理设备的桥梁,支撑着 `lvm2`、`NetworkManager`等关键基础软件的运作。`devmaster`作为 `sysMaster`的设备管理组件,一方面支撑 `sysMaster`的快速启动以及用户态软件的生态兼容,另一方面通过对 `Linux`生态下主流设备管理方案的现状和优劣进行了总结和思考,从而提供一种分层解耦、可扩展性强、面向通用 `OS`的设备管理能力。 + +`devmaster`由常驻进程、客户端工具和动态库组成。常驻进程`devmaster`基于内核提供的`netlink`、`inotify`、`sysfs`等机制,监听设备事件并触发规则处理任务;客户端工具`devctl`和动态库`libs`提供一组命令行指令以及公开接口,用于调试规则、控制常驻进程、查询设备状态等等。`devmaster`的总体架构如下图所示: + +**图1 devMaster的总体架构** +![devMaster的总体架构](./figures/devmaster_architecture.png) + +`devmaster`使用 `Rust`语言编写,能够原生消除内存安全类问题。`devmaster`的核心功能如下: + +1. 事件驱动:利用队列缓存和 `worker`池机制,满足设备事件高并发的场景,并支持将设备就绪状态动态地通知到用户态进程。 +2. 机制与策略分离:将设备处理逻辑定义在规则中,避免业务硬编码,提供按需定制、灵活组合的能力。 +3. 生态兼容:良好地兼容 `udev`语法和 `udev`用户态广播协议,支持原有业务低成本迁移到 `devmaster`环境。 diff --git a/docs/zh/server/administration/sysmaster/devmaster_install_deploy.md b/docs/zh/server/administration/sysmaster/devmaster_install_deploy.md new file mode 100644 index 0000000000000000000000000000000000000000..6b9d83ffabb5f0e7e2ebdf1f89d9d6a6eb5055c0 --- /dev/null +++ b/docs/zh/server/administration/sysmaster/devmaster_install_deploy.md @@ -0,0 +1,29 @@ +# 安装与部署 + +`devmaster`目前可应用于以 `sysmaster`为1号进程的虚拟机环境,本章节介绍安装部署的规格约束以及操作流程。 + +## 软件要求 + +* 操作系统:`openEuler 22.03 LTS SP4` + +## 硬件要求 + +* `x86_64`架构、`aarch64`架构 + +## 安装部署流程 + +1. 执行如下命令,使用`yum`工具安装`devmaster`包: + + ```shell + # yum install devmaster + ``` + +2. `devmaster`包自带`sysmaster`服务配置文件,安装后会覆盖`udev`的相关服务,并在启动阶段自动被`sysmaster`拉起。卸载`devmaster`后,会恢复`udev`的相关服务。 + +3. 安装`devmaster`后,重启系统生效。 + +4. 查看 `/run/devmaster/data/`目录,如果生成设备数据库文件,则表示部署成功: + + ```shell + # ll /run/devmaster/data/ + ``` diff --git a/docs/zh/server/administration/sysmaster/devmaster_usage.md b/docs/zh/server/administration/sysmaster/devmaster_usage.md new file mode 100644 index 0000000000000000000000000000000000000000..725d314a36df7c387b63ae2286431d5af38fbd1e --- /dev/null +++ b/docs/zh/server/administration/sysmaster/devmaster_usage.md @@ -0,0 +1,234 @@ +# 使用说明 + +本章介绍 `devmaster`的使用方法,包括常驻进程配置、客户端工具、规则使用说明和网卡配置。 + +## 常驻进程配置 + +常驻进程 `devmaster`启动后会读取配置文件,并根据配置文件内容,调整日志级别、设置规则加载路径等等。`devmaster`拥有唯一的配置文件,路径为 `/etc/devmaster/config.toml`,文件内容采用 `toml`格式。 + +### 配置选项 + +目前 `devmaster`配置文件中支持的配置选项如下: + +- `rules_d`: 指定规则加载路径,默认配置中设置为 `["/etc/devmaster/rules.d", "/lib/devmaster/rules.d", "/etc/udev/rules.d", "/run/udev/rules.d", "/lib/udev/rules.d"]`,该配置项未显式指定时,默认值为 `["/etc/devmaster/rules.d", "/run/devmaster/rules.d", "/usr/local/lib/devmaster/rules.d", "/usr/lib/devmaster/rules.d"]`。 `devmaster`当前不支持规则加载优先级,不同规则路径下的同名规则文件不会发生覆盖。规则文件的加载顺序按照 `rules_d`配置项中指定的目录顺序,相同目录下按照规则文件的字典序进行加载。 +- `max_workers`: 指定最大 `worker`线程并发数,默认配置文件中设置为3,该配置项未设置时默认为3。手动设置该配置项时,不能超过 `cpu`核数。 +- `log_level`: 指定日志级别,支持 `error`、 `debug`和 `info`级别,默认配置中设置为 `error`级别,未设置时默认为 `info`级别。 +- `network_d`: 指定网卡配置加载路径,默认配置中设置为 `["/etc/devmaster/network.d"]`,未指定时无默认加载路径。网卡配置用于控制 `devmaster`的内置命令 `net_setup_link`的行为,具体可参考[网卡配置说明](#网卡配置)。 +- `log_targets`: 指定日志输出对象,支持 `file`、 `console`和 `syslog`,默认值为 `["syslog"]`。设置 `file`时,日志会保存在 `/var/log/devmaster/devmaster.log`文件中。设置 `console`时,日志直接在控制台显示。设置 `syslog`时,日志输出到 `/dev/log`套接字并由相关日志服务,比如 `rsyslog`间接管理,如果未配置日志服务,则日志直接在控制台显示。可以指定多个日志输出对象。 + +## 客户端工具 + +`devctl`是常驻进程 `devmaster`的客户端工具,用来控制 `devmaster`的行为、模拟设备事件、调试规则等等。以下介绍一些常用的 `devctl`使用命令: + +### 查看设备数据库信息 + +查看设备的 `sysfs`属性和数据库信息,或清理数据库: + + ```shell + # devctl info [OPTIONS] [DEVICES]... + ``` + +### 监听设备事件 + +监听内核上报的 `uevent`事件和 `devmaster`处理完设备后发出的事件,分别以 `KERNEL`和 `USERSPACE`作为前缀进行区分: + + ```shell + # devctl monitor [OPTIONS] + ``` + +### 触发设备事件 + +模拟一个设备动作,使内核上报对应的uevent事件,用于重放内核初始化过程中的冷插(coldplug)设备事件: + + ```shell + # devctl trigger [OPTIONS] [DEVICES]... + ``` + +### 测试内置命令 + +测试内置命令在某个设备上的执行效果,目前支持的内置命令包括 `blkid`、 `input_id`、 `kmod`、 `net_id`、 `net_setup_link`、 `path_id`、 `usb_id`,可以触发的事件类型包括 `add`、 `change`、 `remove`、 `move`、 `online`、 `offline`、 `bind`和 `unbind`: + + ```shell + # devctl test-builtin [OPTIONS] + ``` + +## 规则使用说明 + +`devmaster`的规则由一组规则文件组成, `devmaster`常驻进程启动后会根据配置文件中指定的规则加载目录,按字典序依次加载各个规则文件。 + +> ![说明](./public_sys-resources/icon-note.gif) **说明:** +> +> 增加、删除、修改规则或配置文件后,均需要重启 `devmaster`使之生效。 +> +> 重启 `devmaster`需要执行 `sctl stop devmaster`和 `sctl start devmaster`,不能使用 `sctl restart devmaster`。 + +### 常用规则案例 + +以下介绍几种常见的规则应用案例,规则语法详见官方文档中的[devmaster手册](http://sysmaster.online/man/exts/devmaster/devmaster/)。 + +#### 示例1: 创建块设备软链接 + +通过 `blkid`内置命令,读取块设备的 `uuid`,并基于 `uuid`创建块设备的软链接。 + +触发拥有文件系统的某块设备的事件后,在 `/dev/test`目录下生成该设备对应的软链接。 + +以 `sda1`分区块设备为例,测试规则效果: + +1. 创建规则文件 `/etc/devmaster/rules.d/00-persist-storage.rules`,内容如下: + + ```shell + SUBSYSTEM!="block", GOTO="end" + + IMPORT{builtin}=="blkid" + + ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="test/$env{ID_FS_UUID_ENC}" + + LABEL="end" + ``` + +2. 重启 `devmaster`: + + ```shell + # sctl stop devmaster + # sctl start devmaster + ``` + +3. 触发 `sda1`设备的事件: + + ```shell + # devctl trigger /dev/sda1 + ``` + +4. 查看 `/dev/test/`目录下存在指向 `sda1`的软链接,表示规则生效: + + ```shell + # ll /dev/test/ + total 0 + lrwxrwxrwx 1 root root 7 Sep 6 15:35 06771fe1-39da-42d7-ad3c-236a10d08a7d -> ../sda1 + ``` + +#### 示例2: 网卡重命名 + +使用 `net_id`内置命令,获取网卡设备的硬件属性,再使用 `net_setup_link`内置命令,基于网卡配置选择某个硬件属性作为网卡名,最后通过 `NAME`规则重命名网卡。 + +以 `ens33`网卡为例,测试网卡重命名规则的效果: + +1. 创建规则文件 `/etc/devmaster/rules.d/01-netif-rename.rules`,内容如下: + + ```shell + SUBSYSTEM!="net", GOTO="end" + + IMPORT{builtin}=="net_id" + + IMPORT{builtin}=="net_setup_link" + + ENV{ID_NET_NAME}=="?*", NAME="$env{ID_NET_NAME}" + + LABEL="end" + ``` + +2. 重启 `devmaster`: + + ```shell + # sctl stop devmaster + # sctl start devmaster + ``` + +3. 创建网卡配置`/etc/devmaster/network.d/99-default.link`,内容如下: + + ```shell + [Match] + OriginalName = "*" + + [Link] + NamePolicy = ["database", "onboard", "slot", "path"] + ``` + +4. 先将网卡设备下线: + + ```shell + # ip link set ens33 down + ``` + +5. 将网卡名临时命名为 `tmp`: + + ```shell + # ip link set ens33 name tmp + ``` + +6. 触发网卡设备的 `add`事件: + + ```shell + # devctl trigger /sys/class/net/tmp --action add + ``` + +7. 查看网卡名称,发现重新命名为 `ens33`,表示规则生效: + + ```shell + # ll /sys/class/net/| grep ens33 + lrwxrwxrwx 1 root root 0 Sep 6 11:57 ens33 -> ../../devices/pci0000:00/0000:00:11.0/0000:02:01.0/net/ens33 + ``` + +8. 激活网卡后恢复网络连接: + + ```shell + # ip link set ens33 up + ``` + +> ![说明](./public_sys-resources/icon-note.gif) **说明:** +> +> 网卡设备处于激活状态下无法重命名,需要先将其下线。另外 `devmaster`仅在网卡设备的 `add`事件下对网卡重命名才会生效。 +> +> 在内核参数中添加 `net.ifnames=0`或 `net.ifnames=false`参数会关闭网卡重命名功能。 + +#### 示例3: 修改设备节点的用户权限 + +`OPTIONS+="static_node=`规则会使 `devmaster`启动后,立即将本规则行中的用户权限应用在 `/dev/`设备节点上。重启 `devmaster`后立即生效,无需设备事件触发。 + +1. 创建规则文件`/etc/devmaster/rules.d/02-devnode-privilege.rules`,内容如下: + + ```shell + OWNER="root", GROUP="root", MODE="777", OPTIONS+="static_node=tty5" + ``` + +2. 重启 `devmaster`: + + ```shell + # sctl stop devmaster + # sctl start devmaster + ``` + +3. 观察 `/dev/tty5`的用户、用户组和权限,变更为 `root`、`root`和 `rwxrwxrwx`,表示规则生效: + + ```shell + # ll /dev/tty5 + crwxrwxrwx 1 root root 4, 5 Feb 3 2978748 /dev/tty5 + ``` + +## 网卡配置 + +`devmaster`的网卡重命名功能由内置命令 `net_id`、`net_setup_link`和网卡配置文件配合完成。在规则文件中,通过 `net_id`获取网卡的硬件属性,再使用 `net_setup_link`选择某个网卡属性作为新的网卡名。`net_setup_link`命令基于网卡配置,针对特定网卡设备,控制网卡命名的风格。本章主要介绍网卡配置文件的使用方法,网卡重命名的实施方法可参考[网卡重命名规则案例](#示例2-网卡重命名)。 + +### 默认网卡配置 + +`devmaster`提供了如下默认网卡配置: + + ```toml + [Match] + OriginalName = "*" + + [Link] + NamePolicy = ["onboard", "slot", "path"] + ``` + +网卡配置文件中包含 `[Match]`匹配节和 `[Link]`控制节,每节中包含若干配置项。匹配节的配置项用于匹配网卡设备,当网卡满足所有匹配条件时,将控制节中的所有配置项作用在网卡上,比如设置网卡名选取策略、调整网卡参数等等。 + +以上列举的默认网卡配置表示将该配置作用在所有网卡设备上,并依次检查 `onboard`、`slot`和 `path`风格的网卡命名风格,如果找到一个可用的风格,就以该风格对网卡进行命名。 + +网卡配置的详细说明可以参考 `sysMaster`官方手册中的[devmaster手册](http://sysmaster.online/man/exts/devmaster/netif_config/#1)。 + +> ![说明](./public_sys-resources/icon-note.gif) **说明:** +> +> 在内核参数中添加 `net.ifnames=0`或 `net.ifnames=false`参数会关闭网卡重命名功能。 +> +> 如果发现网卡重命名未生效,可以检查内核参数中是否配置了这两项。 diff --git a/docs/zh/server/administration/sysmaster/figures/devmaster_architecture.png b/docs/zh/server/administration/sysmaster/figures/devmaster_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..c60c9505c570093c78fa5335b590e7da58c7cc7c Binary files /dev/null and b/docs/zh/server/administration/sysmaster/figures/devmaster_architecture.png differ diff --git a/docs/zh/server/administration/sysmaster/figures/sysMaster.png b/docs/zh/server/administration/sysmaster/figures/sysMaster.png new file mode 100644 index 0000000000000000000000000000000000000000..5f4a8d239727c4d22f2b8841946bb12cd4a8d86b Binary files /dev/null and b/docs/zh/server/administration/sysmaster/figures/sysMaster.png differ diff --git a/docs/zh/server/administration/sysmaster/overview.md b/docs/zh/server/administration/sysmaster/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..7613fde909b021e7479e842bbf5c6ce4bc12431c --- /dev/null +++ b/docs/zh/server/administration/sysmaster/overview.md @@ -0,0 +1,26 @@ +# sysMaster用户指南 + +## 概述 + +`sysMaster` 是一套超轻量、高可靠的服务管理程序集合,是对 `1` 号进程的全新实现,旨在改进传统的 `init` 守护进程。它使用 `Rust` 编写,具有故障监测、秒级自愈和快速启动等能力,从而提升操作系统可靠性和业务可用度。 + +`sysMaster` 支持进程、容器和虚拟机的统一管理,其适用于服务器、云计算和嵌入式等多个场景。 + +`sysMaster` 实现思路是将传统 `1` 号进程的功能解耦分层,结合使用场景,拆分出 `1+1+N` 的架构。 + +如下面 `sysMaster` 系统架构图所示,主要包含三个方面: +• `sysmaster-init`:新的 `1` 号进程提供系统初始化、僵尸进程回收、监控保活等功能,可单独应用于嵌入式场景。 +• `sysmaster-core`:承担原有服务管理的核心功能,引入可靠性框架,使其具备崩溃快速自愈、热升级等能力,保障业务全天在线。 +• `sysmaster-exts`:使原本耦合的各组件功能独立,提供系统关键功能的组件集合(如设备管理 `devMaster`,总线通信 `busMaster` 等),各组件可单独使用,可根据不同场景灵活选用。 + +**图1** sysMaster整体架构图 +![sysMaster](./figures/sysMaster.png) + +`sysMaster` 目前主要由 `sysmaster` 和 `devmaster` 两部分功能组成,其中 `sysmaster` 负责服务的管理,`devmaster` 负责设备的管理,下面将对这两部分功能进行说明。 + +## 读者对象 + +本文档主要适用于使用 `openEuler` 并需要对服务和设备进行管理的用户。用户需要具备以下经验和技能: + +* 熟悉 `Linux` 基本操作 +* 对服务配置和设备有一定了解 diff --git a/docs/zh/server/administration/sysmaster/public_sys-resources/icon-caution.gif b/docs/zh/server/administration/sysmaster/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/administration/sysmaster/public_sys-resources/icon-caution.gif differ diff --git a/docs/zh/server/administration/sysmaster/public_sys-resources/icon-danger.gif b/docs/zh/server/administration/sysmaster/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/administration/sysmaster/public_sys-resources/icon-danger.gif differ diff --git a/docs/zh/server/administration/sysmaster/public_sys-resources/icon-note.gif b/docs/zh/server/administration/sysmaster/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/server/administration/sysmaster/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/server/administration/sysmaster/public_sys-resources/icon-notice.gif b/docs/zh/server/administration/sysmaster/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/server/administration/sysmaster/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/server/administration/sysmaster/public_sys-resources/icon-tip.gif b/docs/zh/server/administration/sysmaster/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/zh/server/administration/sysmaster/public_sys-resources/icon-tip.gif differ diff --git a/docs/zh/server/administration/sysmaster/public_sys-resources/icon-warning.gif b/docs/zh/server/administration/sysmaster/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/administration/sysmaster/public_sys-resources/icon-warning.gif differ diff --git a/docs/zh/server/administration/sysmaster/service_management.md b/docs/zh/server/administration/sysmaster/service_management.md new file mode 100644 index 0000000000000000000000000000000000000000..ba8dedd4f178a8048eba05d6d0234c17f76f3fd2 --- /dev/null +++ b/docs/zh/server/administration/sysmaster/service_management.md @@ -0,0 +1,5 @@ +# 服务管理 + +在 `Linux`中,有很多在后台运行的程序或进程,如 `Web`服务器、数据库服务器、邮件服务器等。系统启动和运行过程中会启动和停止这些程序。 `sysmaster`对此提供了高效的服务管理的命令及配置,确保系统正常工作。 + +本文主要介绍 `sysmaster`的安装部署与各个特性说明和使用方法,使用户能够快速了解并使用。 diff --git a/docs/zh/server/administration/sysmaster/sysmaster_install_deploy.md b/docs/zh/server/administration/sysmaster/sysmaster_install_deploy.md new file mode 100644 index 0000000000000000000000000000000000000000..d373cb208a58332460405809e4830bdb86217d42 --- /dev/null +++ b/docs/zh/server/administration/sysmaster/sysmaster_install_deploy.md @@ -0,0 +1,101 @@ +# 安装与部署 + +`sysmaster`可应用于容器和虚拟机,本文档将以 `aarch64`系统为例说明如何在各场景下进行安装与部署。 + +## 软件要求 + +* 操作系统:`openEuler 22.03 LTS SP4` + +## 硬件要求 + +* `x86_64`架构、`aarch64`架构 + +## 容器场景安装与部署 + +1. 安装 docker。 + + ```bash + yum install -y docker + systemctl restart docker + ``` + +2. 加载基础容器镜像。 + + 下载容器镜像: + + ```bash + wget https://repo.openeuler.org/openEuler-22.03-LTS-SP4/docker_img/aarch64/openEuler-docker.aarch64.tar.xz + xz -d openEuler-docker.aarch64.tar.xz + ``` + + 加载容器镜像: + + ```bash + docker load --input openEuler-docker.aarch64.tar + ``` + +3. 构建容器。 + + 基于 `docker images`命令查询得到的镜像名创建 `Dockerfile`,以 `openEuler-22.03-LTS-SP4`为例。 + + ```bash + cat << EOF > Dockerfile + FROM openEuler-22.03-LTS-SP4 + RUN yum install -y sysmaster + CMD ["/usr/lib/sysmaster/init"] + EOF + ``` + + 构建容器: + + ```bash + docker build -t openEuler-22.03-LTS-SP4:latest . + ``` + +4. 启动并进入容器。 + + 启动容器: + + ```bash + docker run -itd --privileged openEuler-22.03-LTS-SP4:latest + ``` + + 获取`CONTAINERID`: + + ```bash + docker ps + ``` + + 使用上一步获取到 `CONTAINERID`进入容器: + + ```bash + docker exec -it CONTAINERID /bin/bash + ``` + +## 虚拟机场景安装与部署 + +1. `initramfs`镜像制作。 + + 为了避免 `initrd`阶段 `systemd`的影响,需要制作一个剔除 `systemd`的 `initramfs`镜像,并以该镜像进入 `initrd`流程。使用如下命令: + + ```bash + dracut -f --omit "systemd systemd-initrd systemd-networkd dracut-systemd" /boot/initrd_withoutsd.img + ``` + +2. 新增启动项。 + + 在 `grub.cfg`中增加新的启动项,`aarch64`下的路径为 `/boot/efi/EFI/openEuler/grub.cfg`,`x86_64`下的路径为 `/boot/grub2/grub.cfg`,拷贝一份原有启动项,并做以下几处修改: + + * `menuentry` 设置启动项名称为 `openEuler sysmaster` + * `linux` 项内核启动参数修改 `root=/dev/mapper/openeuler-root ro` 为 `root=/dev/mapper/openeuler-root rw` + * `linux` 项内核启动参数修改 `plymouth`,如果环境上安装了 `plymouth`, 需要添加 `plymouth.enable=0` 禁用 `plymouth` + * `linux` 项内核启动参数增加 `init=/usr/lib/sysmaster/init` + * `initrd` 项修改为 `/initrd_withoutsd.img` + +3. 安装 sysmaster。 + + ```bash + yum install sysmaster + ``` + +4. 重启后出现 `openEuler sysmaster`启动项表示已成功配置,选择此启动项进入虚拟机。 diff --git a/docs/zh/server/administration/sysmaster/sysmaster_usage.md b/docs/zh/server/administration/sysmaster/sysmaster_usage.md new file mode 100644 index 0000000000000000000000000000000000000000..e49a236af6b7b9e91dda7dd9741962edaa8c4a9b --- /dev/null +++ b/docs/zh/server/administration/sysmaster/sysmaster_usage.md @@ -0,0 +1,104 @@ +# sysmaster使用说明 + +本章主要通过一些实例来带领用户初步使用 `sysmaster`,例如: + +* 如何创建 `service`服务单元配置文件。 +* 如何管理单元服务,例如启动、停止、查看服务。 + +更多可以查阅[官方手册](http://sysmaster.online/man/all/)。 + +## 创建单元配置文件 + +用户可以在 `/usr/lib/sysmaster/system/`目录下创建单元配置文件。 + +### 单元配置文件的类型 + +当前 `sysmaster`支持 `target`、`socket`、`service`类型的单元配置文件。 + +* `target`:封装了一个由 `sysmaster`管理的启动目标,用于将多个单元集中到一个同步点。`sysmaster`提供不同阶段的 `target`单元,例如 `multi-user.target`代表系统已完成启动,用户可以依赖此目标,启动自己的服务。 +* `socket`:封装了一个用于进程间通信的套接字 `socket`, 以支持基于套接字的启动。例如用户可以配置 `service`单元依赖此 `socket`,当此 `socket`有数据写入时,`sysmaster`会拉起对应的 `service`单元。 +* `service`:封装了一个被 `sysmaster`监视与控制的进程。 + +### 单元配置文件的构成 + +单元配置文件通常由3块组成: + +* `Unit`:单元的公共配置说明,如服务名称、描述、依赖关系等。 +* `Install`:描述如何安装和启动服务。 +* `Service`、`Socket`:各个单元类型的配置。 + +### 创建service单元配置 + +`sshd`服务被用来远程登录到服务器,并在远程终端上执行命令和操作。 +使用如下配置项来创建一个 `sshd.service`服务单元配置。 + +```bash +[Unit] +Description="OpenSSH server daemon" +Documentation="man:sshd(8) man:sshd_config(5)" +After="sshd-keygen.target" +Wants="sshd-keygen.target" + +[Service] +Type="notify" +EnvironmentFile="-/etc/sysconfig/sshd" +ExecStart="/usr/sbin/sshd -D $OPTIONS" +ExecReload="/bin/kill -HUP $MAINPID" +KillMode="process" +Restart="on-failure" +RestartSec=42 + +[Install] +WantedBy="multi-user.target" +``` + +以下是对单元配置文件中选项配置的说明,更多可以查阅[官方手册](http://sysmaster.online/man/all/)。 + +* `Description`:说明该 `unit`的主要功能。 +* `Documentation`:说明该 `unit`的文档链接。 +* `After`:配置同时启动的单元的先后顺序,`sshd.service`服务将在 `sshd-keygen.target`之后启动。 +* `Wants`:配置一个单元对另一个单元的依赖,启动 `sshd.service`服务,将会自动启动 `sshd-keygen.target`。 +* `Type`:配置 `sysmaster` 如何启动此服务,`notify`表明需要主进程启动完成后发送通知消息。 +* `EnvironmentFile`:设置环境变量的文件读取路径。 +* `ExecStart`:配置服务启动时执行的命令,启动 `sshd.service`服务会执行 `sshd`命令。 +* `ExecReload`:配置重新加载 `sshd.service`的配置时执行的命令。 +* `KillMode`:配置当需要停止服务进程时,杀死服务进程的方法,`process`表示只杀死主进程。 +* `Restart`:配置服务不同情况下退出或终止,是否重新启动服务,`on-failure`表示当服务非正常退出时重新启动服务。 +* `RestartSec`:配置当服务退出时,重新拉起服务的间隔时间。 +* `WantedBy`:配置依赖当前 `sshd.service`服务的单元。 + +## 管理单元服务 + +`sctl`是 `sysmaster`的命令行工具,用于检查和控制 `sysmaster`服务端行为和各个服务的状态,它可以启动、停止、重启、检查系统服务。 + +### 启动服务 + +使用以下命令可以启动 `sshd`服务和运行 `ExecStart`所配置的命令。 + +```bash +# sctl start sshd.service +``` + +### 停止服务 + +使用以下命令可以停止 `sshd`服务,杀死 `ExecStart`所运行的进程。 + +```bash +# sctl stop sshd.service +``` + +### 重启服务 + +使用以下命令可以重启 `sshd`服务,该命令会先停止后启动服务。 + +```bash +# sctl restart sshd.service +``` + +### 查看服务状态 + +使用以下命令可以查看服务 `sshd`运行状态,用户可以查看服务的状态来获取服务是否正常运行。 + +```bash +# sctl status sshd.service +``` diff --git a/docs/zh/server/development/ai4c/_toc.yaml b/docs/zh/server/development/ai4c/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cd81f1238285544d40d2ddc135de9d3294d3e947 --- /dev/null +++ b/docs/zh/server/development/ai4c/_toc.yaml @@ -0,0 +1,5 @@ +isManual: true +label: '' +sections: + - label: AI4C使用手册 + href: ./ai4c_user_manual.md diff --git a/docs/zh/server/development/ai4c/ai4c_user_manual.md b/docs/zh/server/development/ai4c/ai4c_user_manual.md new file mode 100644 index 0000000000000000000000000000000000000000..774e9417a6241d970b3106993d39296c32c58dc2 --- /dev/null +++ b/docs/zh/server/development/ai4c/ai4c_user_manual.md @@ -0,0 +1,71 @@ +# AI4C使用手册 + +## 安装 + +1. 使用root权限,安装rpmbuild、rpmdevtools,具体命令如下 + + ```bash + ## 安装rpmbuild + yum install rpm-build + ## 安装rpmdevtools + yum install rpmdevtools + ``` + +2. 使用`git clone https://gitee.com/src-openeuler/AI4C.git`,从目标仓库拉取代码后,使用`rpmdev-setuptree`在主目录下生成rpmbuild文件夹,将拉取代码中的AI4C-v0.1.0-alpha.tar.gz和相关patch文件放入rpmbuild中的SOURCES文件夹中,将AI4C.spec放入rpmbuild中的SPECS目录下。 + +3. 进入SPECS目录下,用户需先使用`yum-builddep --spec AI4C.spec`命令安装`AI4C`所需依赖。再使用`rpmbuild -ba AI4C.SPEC`,如果构建成功即可返回上一级文件夹,再进入RPM文件夹下,使用`rpm -ivh <成功构建的rpm>`(若系统因存有旧版本安装包而导致的文件冲突,可以在`rpm -ivh <成功构建的rpm>`命令中添加一行`--force`选项,强制安装新版本;或者通过`rpm -Uvh <成功构建的rpm>`命令更新安装包)。待安装完成后,相关动态库会安装在`/usr/lib64`下,模型会安装在`/usr/lib64/AI4C`目录下。 + + + +## 使用 +1. 开发者在使用前可以通过`export LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH`和`export INCLUDE_PATH=/usr/include:$INCLUDE_PATH`配置相关环境变量 +2. 开发者需先构建自己的模型,再通过onnxruntime保存成一个**ONNX模型**,即可通过AI4C提供的API进行推理。 + + + +### API接口 +以下接口存在动态库`libONNXRunner.so`中,用于模型的推理配置阶段、推理运行阶段和模型推理结束后的资源清理阶段,需要用户实现在目标优化遍的适配层内。 + +1. 参数为模型存放的路径,并创建session对本次推理进行初始化和配置 + + ```cpp + extern ONNXRunner* createONNXRunner(const char* model_path) + ``` + +2. 删除ONNXRunner对象 + + ```cpp + extern void deleteONNXRunner(ONNXRunner* instance) + ``` + +3. 参数为模型的输入,将输入传入模型进行推理得到相应结果 + + ```cpp + extern float runONNXModel(ONNXRunner* instance, std::vector input_string, std::vector input_int64, std::vector input_float) + ``` + + + +### demo -- 以“创建session对本次推理进行初始化和配置”为例 + +这里建议使用`dlopen`链接动态库,避免对目标应用构建时增加增加额外依赖。使用时开发者需根据实际需求增加异常处理机制。 + +```cpp +// 挂载动态库 +/* dynamic_library_path 为动态库绝对路径,正常下载流程执行完成后,动态库将会在/usr/lib64下,这里可以直接使用动态库的名字作为输入*/ +void *sample_dylib_handle = dlopen (dynamic_library_path, RTLD_LAZY | RTLD_GLOBAL); + +// 获取动态库所需要调用的函数 +/* 使用函数指针储存动态库需要使用的函数,不同的目标应用对于dlsym返回值的类型转换可能不一样,使用时需要以具体应用要求为标准 */ +typedef void* (*sample_func)(const char *); // 参数和返回值以需要使用的函数为准 + +// function_name为动态库中需要使用的函数名,这里以createONNXRunner为例 +sample_func func = (sample_func) dlsym (smple_dylib_handle, "createONNXRunner"); + +// 使用所需函数, +func (model_path); + +// 卸载动态库 +dlclose (dynamic_library_path); +``` + diff --git a/docs/zh/server/development/application_dev/Installing_obs.md b/docs/zh/server/development/application_dev/Installing_obs.md new file mode 100644 index 0000000000000000000000000000000000000000..ea83f1162ee8bff91963dfafc645713f9c94c803 --- /dev/null +++ b/docs/zh/server/development/application_dev/Installing_obs.md @@ -0,0 +1,87 @@ +# 安装obs工具 + +## 介绍 + +OBS(Open Build Service)是通用编译工具,用于将源码包构建为 RPM 软件包或 Linux 镜像。 +obs-server 是 OBS 对应的软件包。 + +## 架构适配 + +支持在多种架构平台(x86_64、AArch64 等)上使用。 + +## 安装 + +此处以 openEuler 22.03 LTS SP4版本的 AArch64 架构为例,介绍 obs-server 多版本分支软件包的安装操作。 + +1. 确认设备已安装操作系统 openEuler 22.03 LTS SP4。 + + ``` shell script + $ cat /etc/openEuler-release + openEuler release 22.03 LTS SP4 + ``` + +2. 配置 yum 源。yum 源配置内容参考如下: + + ``` shell script + [everything] + name=everything + baseurl=https://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/aarch64/ + enabled=1 + gpgcheck=0 + ``` + + 执行下述命令拷贝上述文本到 repo 源中: + + ``` shell script + sudo vi /etc/yum.repos.d/xxx.repo + ``` + +3. 使 yum 源生效。 + + ``` shell script + sudo yum clean all + sudo yum makecache + ``` + +4. 检查是否已安装其他版本的软件包。 + + ``` shell script + sudo rpm -qa obs-server obs-common obs-api mod_passenger obs-api-deps obs-bundled-gems passenger ruby ruby-help ruby-irb rubygem-bundler rubygem-io-console rubygem-json rubygem-openssl rubygem-psych rubygem-rake rubygem-rdoc rubygems rubygem-bigdecimal rubygem-did_you_mean + ``` + +5. (可选)如果有其他版本的软件包,请卸载软件包防止安装冲突。 + + ``` shell script + sudo yum remove -y obs-server obs-common obs-api mod_passenger obs-api-deps obs-bundled-gems passenger ruby ruby-help ruby-irb rubygem-bundler rubygem-io-console rubygem-json rubygem-openssl rubygem-psych rubygem-rake rubygem-rdoc rubygems rubygem-bigdecimal rubygem-did_you_mean + ``` + + > **注意事项:** + > + >- 该分支作为 openEuler 22.03 LTS SP4版本发布的 obs-server 多版本分支。 + >- 安装依赖包可能由于存在多个版本,导致依赖冲突安装失败。所以安装前先卸载上述软件包。 + +6. 安装 obs-server 相关软件包。 + + ``` shell script + sudo yum install -y obs-api obs-server + ``` + +7. 检查 obs-server 软件包安装成功。 + + ``` shell script + $ rpm -qa | grep obs-server + obs-server-2.10.15-7.oe2203SP4.noarch + $ rpm -qa | grep obs-api + obs-api-2.10.15-7.oe2203SP4.noarch + ``` + +## 部署 + +1. 获取部署脚本,具体请参见获取链接: +https://gitee.com/openeuler/infrastructure/tree/master/obs/tf/startup + +2. 执行 restart_service.sh 脚本部署 OBS 工具。 + +## 使用说明 + +可以通过 OBS 网页和osc命令的方式构建RPM软件包。详细内容可参考[《构建RPM包》](https://docs.openeuler.org/zh/docs/22.03_LTS_SP4/docs/ApplicationDev/%E6%9E%84%E5%BB%BARPM%E5%8C%85.html)。 diff --git a/docs/zh/server/development/application_dev/_toc.yaml b/docs/zh/server/development/application_dev/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..dca364752a5326ea9190d1e6c9875e5327a3e259 --- /dev/null +++ b/docs/zh/server/development/application_dev/_toc.yaml @@ -0,0 +1,19 @@ +isManual: true +label: '' +sections: + - label: 应用开发指南 + href: ./application_development.md + - label: 构建RPM包 + href: ./building_an_rpm_package.md + - label: FAQ + href: ./faq.md + - label: 安装obs工具 + href: ./Installing_obs.md + - label: 开发环境准备 + href: ./perparations_for_development_environment.md + - label: 使用GCC编译 + href: ./using_gcc_for_compilation.md + - label: 使用JDK编译 + href: ./using_jdk_for_compilation.md + - label: 使用make编译 + href: ./using_make_for_compilation.md diff --git a/docs/zh/server/development/application_dev/application_development.md b/docs/zh/server/development/application_dev/application_development.md new file mode 100644 index 0000000000000000000000000000000000000000..14656517de43515d910151711fd2ad62daeddf7b --- /dev/null +++ b/docs/zh/server/development/application_dev/application_development.md @@ -0,0 +1,77 @@ +# 应用开发指南 + +本文档简要介绍应用程序开发需要的常用工具,以指导用户使用openEuler并基于openEuler进行应用程序开发。 + +## 概述 + +本文档主要介绍如下四部分内容,以指导用户使用openEuler并基于openEuler进行代码开发。 + +- 在openEuler系统中安装和使用GCC编译器,并完成一个简单代码的开发、编译和执行。 +- 在openEuler系统中使用JDK自带工具完成代码的编译和执行。 +- 在openEuler系统中安装IntelliJ IDEA进行Java开发。 +- 在本地或使用OBS(Open Build Service)创建RPM(The RPM Package Manager)软件包的方法。 + +## 读者对象 + +本文档适用于所有使用openEuler操作系统进行代码开发的用户。用户需要具备如下经验或能力: + +- 具备Linux操作系统基础知识。 +- 了解Linux命令行的基本使用方法。 + +## 符号约定 + +在本文中可能出现下列标志,它们所代表的含义如下。 + +| 符号 |说明 | +|:--- |:---- | +| ![](./figures/zh-cn_image_0229243712.png)|用于传递设备或环境安全警示信息,若不避免,可能会导致设备损坏、数据丢失、设备性能降低或其他不可预知的结果。
“注意”不涉及人身伤害。| +| ![](./figures/zh-cn_image_0229243671.png)|用于突出重要/关键信息、最佳实践和小窍门等。
“说明”不是安全警示信息,不涉及人身、设备及环境伤害。| + +## 命令行格式约定 + +**表 1** 命令行格式的约定 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

格式

+

含义

+

粗体

+

命令行关键字,即命令中保持不变、必须照输的部分,采用加粗字体表示。

+

斜体

+

命令行参数,即命令中必须由实际值进行替代的部分,采用斜体表示。

+

[ ]

+

用“[ ]”括起来的部分表示在命令配置时是可选的。

+

{ x | y | ... }

+

表示从两个或多个选项中选取一个。

+

[ x | y | ... ]

+

表示从两个或多个选项中选取一个或者不选。

+

{ x | y | ... }\*

+

表示从两个或多个选项中选取多个,最少选取一个,最多选取所有选项。

+

[ x | y | ... ]\*

+

表示从两个或多个选项中选取一个、多个或者不选。

+
diff --git a/docs/zh/server/development/application_dev/building_an_rpm_package.md b/docs/zh/server/development/application_dev/building_an_rpm_package.md new file mode 100644 index 0000000000000000000000000000000000000000..ae65cdd1c2c30b8eb4a196ccb94b1d31802f6085 --- /dev/null +++ b/docs/zh/server/development/application_dev/building_an_rpm_package.md @@ -0,0 +1,592 @@ +# 构建RPM包 + +本章介绍通过本地或OBS构建RPM软件包的方法。详见打包规则。 + +## 打包说明 + +### 原理介绍 + +RPM打包的时候需要编译源码,需要把编写好的配置文件、二进制命令文件等放到合适的位置,还要根据需要对RPM的包进行测试,这些都需要先有一个“工作空间”。 + +执行 `dnf install rpmdevtools*` 安装rpmdevtools后,即可执行 `rpmdev-setuptree` 命令,就会在“/root“目录(非root用户为“/home/用户名“目录)下生成一套标准化的“工作空间”,目录结构如下: + +```sh +# tree rpmbuild +rpmbuild +├── BUILD +├── RPMS +├── SOURCES +├── SPECS +└── SRPMS +``` + +内容相关的说明如下: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

目录

+

宏代码

+

名称

+

功能

+

~/rpmbuild/BUILD

+

%_builddir

+

构建目录

+

源码包被解压至此,并在该目录的子目录完成编译

+

~/rpmbuild/RPMS

+

%_rpmdir

+

标准 RPM 包目录

+

生成/保存二进制 RPM 包

+

~/rpmbuild/SOURCES

+

%_sourcedir

+

源代码目录

+

保存源码包(如 .tar 包)和所有 patch 补丁

+

~/rpmbuild/SPECS

+

%_specdir

+

Spec 文件目录

+

保存 RPM 包配置(.spec)文件

+

~/rpmbuild/SRPMS

+

%_srcrpmdir

+

源代码 RPM 包目录

+

生成/保存源码 RPM 包(SRPM)

+
+ +SPECS 下是RPM包的配置文件,是RPM打包的“图纸”,这个文件会告诉rpmbuild命令如何去打包。“宏代码”这一列就可以在SPEC文件中用来代指所对应的目录,类似于编程语言中的宏或全局变量。 + +### 打包流程 + +打包的过程主要分为如下步骤: + +1. 把源代码放到%\_sourcedir中。 +2. 进行编译,编译的过程是在%\_builddir中完成的,一般情况下,源代码是压缩包格式,需要先进行解压。 +3. 进行“安装”,类似于预先组装软件包,把软件包应该包含的内容(比如二进制文件、配置文件、man文档等)复制到%\_buildrootdir中,并按照实际安装后的目录结构组装,比如二进制命令可能会放在/usr/bin下,那么就在%\_buildrootdir下也按照同样的目录结构放置。 +4. 做一些必要的配置,比如在实际安装前的准备,安装后的清理等等。这些都是通过配置在SPEC文件中来告诉rpmbuild命令。 +5. 检查软件是否正常运行。 +6. 生成的RPM包放置到%\_rpmdir,源码包放置到%\_srcrpmdir下。 + +在SPEC文件中,各个阶段说明如下: + +| 阶段 | 读取的目录 | 写入的目录 | 具体动作 | +|-------------------|--------------|-----------------|-------------------------------------------| +| %prep | %_sourcedir | %_builddir | 读取位于 %_sourcedir 目录的源代码和 patch 之后,解压源代码至 %_builddir 的子目录并应用所有 patch。 | +| %build | %_builddir | %_builddir |编译位于 %_builddir 构建目录下的文件。通过执行类似 ./configure && make 的命令实现。| +| %install | %_builddir | %_buildrootdir |读取位于 %_builddir 构建目录下的文件并将其安装至 %_buildrootdir 目录。这些文件就是用户安装 RPM 后,最终得到的文件。| +| %check | %_builddir | %_builddir | 检查软件是否正常运行。通过执行类似 make test 的命令实现。| +| bin | %_buildrootdir | %_rpmdir| 读取位于 %_buildrootdir 最终安装目录下的文件,以便最终在 %_rpmdir 目录下创建 RPM 包。在该目录下,不同架构的 RPM 包会分别保存至不同子目录, noarch 目录保存适用于所有架构的 RPM 包。这些 RPM 文件就是用户最终安装的 RPM 包。 | +| src | %_sourcedir | %_srcrpmdir | 创建源码 RPM 包(简称 SRPM,以.src.rpm 作为后缀名),并保存至 %_srcrpmdir 目录。SRPM 包通常用于审核和升级软件包。 | + +### 打包选项 + +通过rpmbuild命令构建软件包。rpmbuild构建软件包一般可以通过构建SPEC文件、tar文件、source文件实现。 + +rpmbuild命令格式为:rpmbuild \[_option_...\] + +常用的rpmbuild打包选项如下所示。 + +| option取值 | 说明 | +|----------|--------------| +|-bp specfile |从specfile文件的%prep段开始构建(解开源码包并打补丁)。 | +|-bc specfile |从specfile文件的%build段开始构建。 | +|-bi specfile |从specfile文件的%install段开始构建。 | +|-bl specfile |从specfile文件的%files段开始检查。 | +|-ba specfile |通过specfile文件构建源码包和二进制包。 | +|-bb specfile |通过specfile文件构建二进制包。 | +|-bs specfile |通过specfile文件构建源码包。 | +|-rp sourcefile |从sourcefile文件的%prep段开始构建(解开源码包并打补丁)。 | +|-rc sourcefile |从sourcefile文件的%build段开始构建。 | +|-ri sourcefile |从sourcefile文件的%install段开始构建。 | +|-rl sourcefile |从sourcefile文件的%files段开始检查。 | +|-ra sourcefile |通过sourcefile文件构建源码包和二进制包。 | +|-rb sourcefile |通过sourcefile文件构建二进制包。 | +|-rs sourcefile |通过sourcefile文件构建源码包。 | +|-tp tarfile |从tarfile文件的%prep段开始构建(解开源码包并打补丁)。 | +|-tc tarfile |从tarfile文件的%build段开始构建。 | +|-ti tarfile |从tarfile文件的%install段开始构建。 | +|-ta tarfile |通过tarfile文件构建源码包和二进制包。 | +|-tb tarfile |通过tarfile文件构建二进制包。 | +|-ts tarfile |通过tarfile文件构建源码包。 | +|--buildroot=DIRECTORY |在构建时,使用DIRECTORY目录覆盖默认的/root目录。 | +|--clean |完成打包后清除BUILD目录下的文件。 | +|--nobuild |不执行任何实际的构建步骤。可用于测试spec文件。 | +|--noclean |不执行spec文件的"%clean"阶段(即使它确实存在)。 | +|--nocheck |不执行spec文件的"%check"阶段(即使它确实存在)。 | +|--dbpath DIRECTORY |使用DIRECTORY中的数据库,而不是默认的 /var/lib/rpm。 | +|--root DIRECTORY |使DIRECTORY为最高级别的路径,默认“/”为最高路径。 | +|--rebuild sourcefile |将安装指定的源代码包sourcefile,然后进行准备、编译、安装。 | +|--recompile sourcefile |在\-\-recompile 的基础上额外构建一个新的二进制包。在构建结束时,构建目录、源代码和 spec 文件都将被删除(就好像用了 \-\-clean)。 | +|-?,--help |打印详细的帮助信息。 | +|--version |打印详细的版本信息。 | + +## 本地构建 + +本章通过一个简单的示例介绍如何在本地构建RPM软件包的方法。 + +### 搭建开发环境 + +#### 前提条件 + +需要root权限,已设置openEuler的repo软件源。 + +#### 操作步骤 + +用户可以直接使用DNF工具安装 rpmdevtools,其中包含 rpm-build 等命令以及相关依赖(例如make、gdb)。使用如下命令: + +```sh +# dnf install rpmdevtools* +``` + +### 创建Hello World RPM包 + +这里以GNU “Hello World” 项目的打包过程作为示例,包含了典型的FOSS(Free and Open Source Software) 软件项目相关的最常用的外围组件,其中包括配置/编译/安装环境、文档、国际化等等。 + +#### 下载源码 + +我们直接下载官方例子的源码,使用如下命令: + +```sh +# rpmdev-setuptree +# cd ~/rpmbuild/SOURCES +# wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz +``` + +#### 编辑SPEC文件 + +在**~/rpmbuild/SPECS**目录下新建spec文件,参考命令如下: + +```sh +# cd ~/rpmbuild/SPECS +# vi hello.spec +``` + +在文件中写入对应内容后保存文件。文件内容示例如下,请根据实际情况修改相应字段。 + +```Conf +Name: hello +Version: 2.10 +Release: 1%{?dist} +Summary: The "Hello World" program from GNU +Summary(zh_CN): GNU "Hello World" 程序 +License: GPLv3+ +URL: http://ftp.gnu.org/gnu/hello +Source0: http://ftp.gnu.org/gnu/hello/%{name}-%{version}.tar.gz + +BuildRequires: gettext +Requires(post): info +Requires(preun): info + +%description +The "Hello World" program, done with all bells and whistles of a proper FOSS +project, including configuration, build, internationalization, help files, etc. + +%description -l zh_CN +"Hello World" 程序, 包含 FOSS 项目所需的所有部分, 包括配置, 构建, 国际化, 帮助文件等。 + +%prep +%setup -q + +%build +%configure +make %{?_smp_mflags} + +%install +make install DESTDIR=%{buildroot} +%find_lang %{name} +rm -f %{buildroot}/%{_infodir}/dir + +%post +/sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || : + +%preun +if [ $1 = 0 ] ; then +/sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || : +fi + +%files -f %{name}.lang +%doc AUTHORS ChangeLog NEWS README THANKS TODO +%license COPYING +%{_mandir}/man1/hello.1.* +%{_infodir}/hello.info.* +%{_bindir}/hello + +%changelog +* Thu Dec 26 2019 Your Name - 2.10-1 +- Update to 2.10 +* Sat Dec 3 2016 Your Name - 2.9-1 +- Update to 2.9 +``` + +- Name 标签是软件名,Version 标签是版本号,而 Release 标签是发布编号。 +- Summary 标签是简要说明,英文的话第一个字母应大写,以避免 rpmlint 工具(打包检查工具)警告。 +- License 标签说明软件包的协议版本,审查软件的 License 状态是打包者的职责,这可以通过检查源码或 LICENSE 文件,或与作者沟通来完成。 +- Group 标签过去用于按照 /usr/share/doc/rpm-/GROUPS 分类软件包。目前该标记已丢弃,vim的模板还有这一条,删掉即可,不过添加该标记也不会有任何影响。%changelog 标签应包含每个 Release 所做的更改日志,尤其应包含上游的安全/漏洞补丁的说明。%changelog 条目应包含版本字符串,以避免 rpmlint 工具警告。 +- 多行的部分,如 %changelog 或 %description 由指令下一行开始,空行结束。 +- 一些不需要的行 \(如 BuildRequires 和 Requires\) 可在行首使用‘\#’注释。 +- %prep、%build、%install、%files暂时用默认的,未做任何修改。 + +#### 构建RPM包 + +构建源码、二进制和包含调试信息的软件包,在spec文件所在目录执行如下命令: + +```sh +# rpmbuild -ba hello.spec +``` + +执行成功后,查看结果,使用如下命令: + +```sh +# tree ~/rpmbuild/*RPMS + +/home/testUser/rpmbuild/RPMS +└── aarch64 + ├── hello-2.10-1.aarch64.rpm + ├── hello-debuginfo-2.10-1.aarch64.rpm + └── hello-debugsource-2.10-1.aarch64.rpm +/home/testUser/rpmbuild/SRPMS +└── hello-2.10-1.src.rpm +``` + +## 使用OBS构建 + +本章介绍通过网页和osc构建RPM软件包的方法。主要包括如下两类: + +- 修改已有软件包:修改已有软件包源代码,然后将修改后的源代码构建成一个RPM软件包。 +- 新增软件包:从无到有全新开发一个新的软件源文件,并将新开发的源文件构建成一个RPM软件包。 + +### OBS简介 + +OBS是基于openSUSE发行版的通用编译框架,用于将源码包构建为RPM软件包或Linux镜像。OBS采用自动化的分布式编译方式,支持多种Linux操作系统发行版(openEuler、SUSE、Debian等)镜像和安装包的编译,且支持在多种架构平台(x86、ARM64等)上编译。 + +OBS由后端和前端组成,后端实现所有核心功能,前端提供了网页应用和API,用于与后端进行交互。此外,OBS还有一个API命令行客户端osc,osc是在一个单独的存储库中开发的。 + +OBS使用工程组织软件包。基础的权限控制、相关的存储仓库和构建目标(操作系统和架构)都可以在工程中定义。一个工程可以包含多个子工程,各个子工程可以独立配置,共同完成任务。 + +### 在线构建软件包 + +本章介绍通过OBS网页端在线构建RPM软件包的方法。 + +#### 构建已有软件包 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- 若为首次使用,请首先在OBS网页注册个人帐号。 +>- 该方法需要拷贝修改后的代码,因此,请在执行下述操作前完成代码修改并提交到正确的代码路径。代码路径会在\_service文件中指定。 + +使用OBS网页端,修改已有软件的源代码,并将修改后的源文件构建为RPM软件包的操作方法如下: + +1. 登录OBS界面,地址为:[https://build.openeuler.openatom.cn](https://build.openeuler.openatom.cn)。 +2. 单击“All Projects”进入所有工程页面。 +3. 单击需要修改的对应工程,进入该工程的详情页面,例如单击“openEuler:Mainline”。 +4. 在工程详情页面的搜索框查找需要修改的软件包,然后单击该软件包包名,进入该软件包详情页面。 +5. 单击“Branch package”,在弹出的确认页面单击“Accept”确认创建子工程,如[图1](#fig77646143214)所示。 + + **图 1** Branch Confirmation页面 + ![](./figures/Branch-Confirmationpage.png) + +6. 单击“\_service”文件进入编辑页面,修改\_service内容后点击“Save”保存该文件。\_service内容示例如下,其中 _userCodeURL_、 _userCommitID_ 分别为用户代码托管路径、用户代码提交版本号或分支。 + + ```Conf + + + git + userCodeURL + userCommitID + + + bz2 + *.tar + + + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >单击“Save”保存\_service文件后,OBS服务会根据\_service文件描述,从指定的url下载源码到OBS对应工程的软件目录下并替换原有文件,例如上述例子中 “openEuler:Mainline”工程的kernel目录。 + +7. 文件拷贝并替换完成后,OBS会自动开始构建RPM软件包。等待构建完成,并查看右侧状态栏的构建状态。 + - succeeded:构建成功。用户可以单击“succeeded”查看构建日志,如[图2](#fig10319114217337)所示。 + + **图 2** succeeded的页面 + ![](./figures/succeededpage.png) + + - failed:构建失败。请单击“failed”查看错误日志进行问题定位后重新构建。 + - unresolvable:未进行构建,可能由于缺失依赖。 + - disabled:构建被手动关闭或正在排队构建。 + - excluded:构建被禁止,可能由于缺少spec文件或者spec文件中禁止了目标架构的编译。 + +#### 新增软件包 + +使用OBS网页端,新增一个全新软件包的操作方法如下: + +1. 登录OBS界面。 +2. 根据新增软件包的依赖情况,选择合适的工程,即单击“All Projects”选择对应工程,例如“openEuler:Mainline”。 +3. 单击工程下任一软件包,进入该软件包的详情页面。 +4. 单击“Branch package”,在弹出的确认页面单击“Accept”确认创建子工程。 +5. 单击“Delete package”,删除新创建子工程中的软件包,如[图3](#fig18306181103615)所示。 + + **图 3** 删除子工程中软件包 + ![](./figures/delete_package.png) + + >![](./public_sys-resources/icon-note.gif) **说明:** + >通过已有软件创建新工程是为了继承环境等依赖,而不需要实际的文件,所以这里需要把这些文件删除。 + +6. 单击“Create Package”,在弹出的页面输入软件包名称、标题和软件包描述,然后单击“Create”创建软件包,分别如[图4](#fig6762111693811)、[图5](#fig18351153518389)所示。 + + **图 4** Create Package页面 + ![](./figures/Create-Packagepage.png) + + **图 5** 创建软件包信息填写页面 + ![](./figures/setting_software_info.png) + +7. 在页面中单击“Add file”上传spec文件和需要编译的文件(在spec文件中指定),如[图6](#fig1475845284011)所示。 + + **图 6** Add file页面 + ![](./figures/filepage.png) + +8. 文件上传成功后,OBS会自动开始构建RPM软件包。等待构建完成,并查看右侧状态栏的构建状态。 + - succeeded:构建成功。用户可以单击“succeeded”查看构建日志。 + - failed:构建失败。请单击“failed”查看错误日志进行问题定位后重新构建。 + - unresolvable:未进行构建,可能由于缺失依赖。 + - disabled:构建被手动关闭或正在排队构建。 + - excluded:构建被禁止,可能由于缺少spec文件或者spec文件中禁止了目标架构的编译。 + +#### 获取软件包 + +RPM软件包构建完成后,通过网页端获取对应RPM软件包的方法如下: + +1. 登录OBS界面。 +2. 单击“All Projects”找到所需软件包的对应工程,例如“openEuler:Mainline”。 +3. 在工程下单击所需软件包的包名,进入该软件包详情页面。例如上述例子中的kernel页面。 +4. 选择Repositories页签进入软件包的软件仓库管理页面,在Publish Flag中通过单击选择“Enable”开启(状态由![](./figures/zh-cn_image_0229243704.png)变为![](./figures/zh-cn_image_0229243702.png))对应的RPM软件包下载功能,如[图7](#fig17480830144217)所示。 + + **图 7** Repositories页面 + ![](./figures/Repositoriespage.png) + +5. 单击Repository列的构建工程名称,进入RPM软件包下载页面,单击RPM软件包右侧的“Download”即可下载对应RPM软件包,如[图8](#fig12152145615438)所示。 + + **图 8** RPM软件包下载页面 + ![](./figures/RPM_package_download.png) + +### 使用osc构建软件包 + +本章介绍使用OBS的命令行工具osc创建工程并构建RPM软件包的方法。 + +#### 安装并配置osc + +##### 前提条件 + +需要root权限,已设置openEuler的repo软件源。 + +##### 操作步骤 + +1. 使用root用户安装osc命令行工具及依赖。 + + ```sh + # dnf install osc build + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >编译RPM软件包的过程中会依赖build。 + +2. 配置osc。 + 1. 打开\~/.oscrc,命令如下: + + ```sh + vi ~/.oscrc + ``` + + 2. 在\~/.oscrc中添加user和pass字段,如下所示,它们的取值 _userName_ 和 _passWord_ 分别是用户在OBS网页([https://build.openeuler.openatom.cn](https://build.openeuler.openatom.cn))上已经注册的帐号和密码。 + + ```sh + [general] + apiurl = https://build.openeuler.openatom.cn + [https://build.openeuler.openatom.cn] + user=userName + pass=passWord + ``` + +#### 构建已有软件包 + +创建工程 + +1. 通过拷贝已有工程,创建属于用户自己的子工程。例如将openEuler:Mainline工程下的zlib软件包添加到新分支,参考命令如下: + + ```sh + # osc branch openEuler:Mainline zlib + ``` + + 回显如下所示,说明在用户testUser下创建了新的分支工程home:testUser:branches:openEuler:Mainline。 + + ```text + A working copy of the branched package can be checked out with: + osc co home:testUser:branches:openEuler:Mainline/zlib + ``` + +2. 将需要修改软件包的相关配置文件(例如\_service)下载到本地当前路径。其中 _testUser_ 为\~/.oscrc配置文件中配置的帐户名称,请根据实际情况修改。 + + ```sh + # osc co home:testUser:branches:openEuler:Mainline/zlib + ``` + + 回显如下所示: + + ```text + A home:testUser:branches:openEuler:Mainline + A home:testUser:branches:openEuler:Mainline/zlib + A home:testUser:branches:openEuler:Mainline/zlib/_service + ``` + +3. 进入本地子工程目录,并将软件包远程代码同步到本地。 + + ```sh + # cd home:testUser:branches:openEuler:Mainline/zlib + # osc up -S + ``` + + 回显如下所示: + + ```text + A _service:tar_scm_kernel_repo:0001-Neon-Optimized-hash-chain-rebase.patch + A _service:tar_scm_kernel_repo:0002-Porting-optimized-longest_match.patch + A _service:tar_scm_kernel_repo:0003-arm64-specific-build-patch.patch + A _service:tar_scm_kernel_repo:zlib-1.2.11-optimized-s390.patch + A _service:tar_scm_kernel_repo:zlib-1.2.11.tar.xz + A _service:tar_scm_kernel_repo:zlib-1.2.5-minizip-fixuncrypt.patch + A _service:tar_scm_kernel_repo:zlib.spec + ``` + +构建RPM包 + +1. 重命名源文件,然后将重命名后的源文件添加到OBS暂存中。 + + ```sh + # rm -f _service;for file in `ls | grep -v .osc`;do new_file=${file##*:};mv $file $new_file;done + # osc addremove * + ``` + +2. 修改源代码和spec文件,并执行如下命令更新文件。 + + ```sh + # osc up + ``` + +3. 将对应软件包的所有修改同步到OBS服务器。参考命令如下,-m参数后的信息为提交记录。 + + ```sh + # osc ci -m "commit log" + ``` + +4. 获取当前工程的仓库名称和架构,参考命令如下: + + ```sh + # osc repos home:testUser:branches:openEuler:Mainline + ``` + +5. 修改提交成功后,OBS会自动开始编译软件包。可以通过如下命令,查看对应仓库的编译日志,其中 _standard_aarch64_ 、 _aarch64_ 分别为查询所得仓库名称和架构。 + + ```sh + # osc buildlog standard_aarch64 aarch64 + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >用户也可以通过网页端打开自己创建的对应工程,查看构建日志。 + +#### 新增软件包 + +使用OBS的osc工具新增一个全新软件包的操作方法如下: + +创建工程 + +1. 根据新增软件包的依赖情况,基于合适的工程,创建属于用户自己的个人工程。例如基于 _openEuler:Mainline_ 工程的 zlib 创建工程的参考命令如下,zlib 为工程下的任一软件包。 + + ```sh + # osc branch openEuler:Mainline zlib + ``` + +2. 删除创建工程时新增的无用软件包。例如删除zlib软件包的参考命令如下: + + ```sh + # cd home:testUser:branches:openEuler:Mainline + # osc rm zlib + # osc commit -m "commit log" + ``` + +3. 在个人工程下创建新增的软件包。例如新增软件包 my-first-obs-package命令如下: + + ```sh + # mkdir my-first-obs-package + # cd my-first-obs-package + ``` + +构建RPM包 + +1. 添加准备的源文件和spec文件到软件包目录。 +2. 修改源代码和spec文件,并将对应软件包的所有文件上传到OBS服务器。参考命令如下,-m 参数后的信息为提交记录。 + + ```sh + # cd home:testUser:branches:openEuler:Mainline + # osc add my-first-obs-package + # osc ci -m "commit log" + ``` + +3. 获取当前工程的仓库名称和架构,参考命令如下: + + ```sh + # osc repos home:testUser:branches:openEuler:Mainline + ``` + +4. 修改提交成功后,OBS会自动开始编译软件包。可以通过如下命令,查看对应仓库的编译日志,其中 _standard_aarch64_ 、 _aarch64_ 分别为查询所得仓库名称和架构。 + + ```sh + # cd home:testUser:branches:openEuler:Mainline/my-first-obs-package + # osc buildlog standard_aarch64 aarch64 + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >用户也可以通过网页端打开自己创建的对应工程,查看构建日志。 + +#### 获取软件包 + +RPM软件包构建完成后,使用osc获取对应RPM软件包的命令如下: + +```sh +# osc getbinaries home:testUser:branches:openEuler:Mainline my-first-obs-package standard_aarch64 aarch64 +``` + +命令中的各参数含义如下,请用户根据实际情况修改: + +- _home:testUser:branches:openEuler:Mainline_ :软件包所在工程名称。 +- _my-first-obs-package_ :软件包名称。 +- _standard\_aarch64_ :仓库名称。 +- _aarch64_ :仓库架构名称。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>使用osc构建的软件包也可以在网页端获取,获取方式请参见[获取软件包](#获取软件包)。 diff --git a/docs/zh/server/development/application_dev/faq.md b/docs/zh/server/development/application_dev/faq.md new file mode 100644 index 0000000000000000000000000000000000000000..d37b0523cacd2d9bb2c9ac0b75358cda70ae7e90 --- /dev/null +++ b/docs/zh/server/development/application_dev/faq.md @@ -0,0 +1,26 @@ +# FAQ + + +- [FAQ](#faq) + - [部分依赖java-devel的应用程序自编译失败](#部分依赖java-devel的应用程序自编译失败) + + + +## 部分依赖java-devel的应用程序自编译失败 + +### 问题描述 + +部分依赖java-devel的应用程序会出现使用rpmbuild命令自编译失败的问题。 + +### 原因分析 + +为了提供更新的openjdk特性和对广大java应用程序的兼容,openEuler同时提供了openjdk-1.8.0、openjdk-11等多个版本的openjdk。部分应用程序在编译时需要依赖java-devel包,安装java-devel包时系统会默认安装更高版本的java-11-openjdk,从而导致这些应用的编译失败。 + +### 解决方法 + +用户需手动使用如下命令安装java-1.8.0-openjdk后再使用rpmbuild命令进行自编译。 + +```jdk +# yum install java-1.8.0-openjdk + +``` diff --git a/docs/zh/server/development/application_dev/figures/Branch-Confirmationpage.png b/docs/zh/server/development/application_dev/figures/Branch-Confirmationpage.png new file mode 100644 index 0000000000000000000000000000000000000000..e66cbcd22217b74785381b85128ea61895194882 Binary files /dev/null and b/docs/zh/server/development/application_dev/figures/Branch-Confirmationpage.png differ diff --git a/docs/zh/server/development/application_dev/figures/Create-Packagepage.png b/docs/zh/server/development/application_dev/figures/Create-Packagepage.png new file mode 100644 index 0000000000000000000000000000000000000000..36ea525856d428b6f88a338202e7cb59b2204fc0 Binary files /dev/null and b/docs/zh/server/development/application_dev/figures/Create-Packagepage.png differ diff --git a/docs/zh/server/development/application_dev/figures/RPM_package_download.png b/docs/zh/server/development/application_dev/figures/RPM_package_download.png new file mode 100644 index 0000000000000000000000000000000000000000..9f32d6c16d344df6951fc4e6aa027d02dfb9ccb5 Binary files /dev/null and b/docs/zh/server/development/application_dev/figures/RPM_package_download.png differ diff --git a/docs/zh/server/development/application_dev/figures/Repositoriespage.png b/docs/zh/server/development/application_dev/figures/Repositoriespage.png new file mode 100644 index 0000000000000000000000000000000000000000..b7c04eedf9dd32cf4a9d024a05f5c8b294c76934 Binary files /dev/null and b/docs/zh/server/development/application_dev/figures/Repositoriespage.png differ diff --git a/docs/zh/server/development/application_dev/figures/delete_package.png b/docs/zh/server/development/application_dev/figures/delete_package.png new file mode 100644 index 0000000000000000000000000000000000000000..a365cd1f46bfb8bec094b79477c0168861a5193b Binary files /dev/null and b/docs/zh/server/development/application_dev/figures/delete_package.png differ diff --git a/docs/zh/server/development/application_dev/figures/filepage.png b/docs/zh/server/development/application_dev/figures/filepage.png new file mode 100644 index 0000000000000000000000000000000000000000..83f0bfaeeb9227bcbb863a93ab8d3535e2b2bc1d Binary files /dev/null and b/docs/zh/server/development/application_dev/figures/filepage.png differ diff --git a/docs/zh/server/development/application_dev/figures/setting_software_info.png b/docs/zh/server/development/application_dev/figures/setting_software_info.png new file mode 100644 index 0000000000000000000000000000000000000000..0144be1f86e2a1d977881355022f7b5a5940cacb Binary files /dev/null and b/docs/zh/server/development/application_dev/figures/setting_software_info.png differ diff --git a/docs/zh/server/development/application_dev/figures/succeededpage.png b/docs/zh/server/development/application_dev/figures/succeededpage.png new file mode 100644 index 0000000000000000000000000000000000000000..3f10cd1db8bdc9be1ab8b660ef93e8a481c2d6b8 Binary files /dev/null and b/docs/zh/server/development/application_dev/figures/succeededpage.png differ diff --git a/docs/zh/server/development/application_dev/figures/zh-cn_image_0229243671.png b/docs/zh/server/development/application_dev/figures/zh-cn_image_0229243671.png new file mode 100644 index 0000000000000000000000000000000000000000..a32856aa08e459ed0f51f8fcf4c2f51511c12095 Binary files /dev/null and b/docs/zh/server/development/application_dev/figures/zh-cn_image_0229243671.png differ diff --git a/docs/zh/server/development/application_dev/figures/zh-cn_image_0229243702.png b/docs/zh/server/development/application_dev/figures/zh-cn_image_0229243702.png new file mode 100644 index 0000000000000000000000000000000000000000..96096879d161f04750a332e5c749a834c49d3173 Binary files /dev/null and b/docs/zh/server/development/application_dev/figures/zh-cn_image_0229243702.png differ diff --git a/docs/zh/server/development/application_dev/figures/zh-cn_image_0229243704.png b/docs/zh/server/development/application_dev/figures/zh-cn_image_0229243704.png new file mode 100644 index 0000000000000000000000000000000000000000..267bc9508f3a065b5b40c367e745f0d8c3ddb5fa Binary files /dev/null and b/docs/zh/server/development/application_dev/figures/zh-cn_image_0229243704.png differ diff --git a/docs/zh/server/development/application_dev/figures/zh-cn_image_0229243712.png b/docs/zh/server/development/application_dev/figures/zh-cn_image_0229243712.png new file mode 100644 index 0000000000000000000000000000000000000000..8d5a343524e14d11a3e2a94be4066fbb2d20599e Binary files /dev/null and b/docs/zh/server/development/application_dev/figures/zh-cn_image_0229243712.png differ diff --git a/docs/zh/server/development/application_dev/perparations_for_development_environment.md b/docs/zh/server/development/application_dev/perparations_for_development_environment.md new file mode 100644 index 0000000000000000000000000000000000000000..6b37c8b5b20b52280cabd16c1b6f7f46b41d74ee --- /dev/null +++ b/docs/zh/server/development/application_dev/perparations_for_development_environment.md @@ -0,0 +1,483 @@ +# 开发环境准备 + + +- [开发环境准备](#开发环境准备) + - [环境要求](#环境要求) + - [操作系统要求](#操作系统要求) + - [配置openEuler yum源](#配置openeuler-yum源) + - [通过直接获取在线的openEuler repo源配置在线yum源](#通过直接获取在线的openeuler-repo源配置在线yum源) + - [通过挂载ISO创建本地openEuler repo源配置本地yum源](#通过挂载iso创建本地openeuler-repo源配置本地yum源) + - [安装软件包](#安装软件包) + - [安装JDK软件包](#安装jdk软件包) + - [安装rpm-build软件包](#安装rpm-build软件包) + - [使用IDE进行Java开发](#使用ide进行java开发) + - [简介](#简介) + - [使用MobaXterm登录服务器](#使用mobaxterm登录服务器) + - [设置JDK环境](#设置jdk环境) + - [下载安装GTK库](#下载安装gtk库) + - [设置X11 Forwarding](#设置x11-forwarding) + - [下载并运行IntelliJ IDEA](#下载并运行intellij-idea) + + + +## 环境要求 + +- 若使用的是物理机,则开发环境所需的最小硬件要求如[表1](#table154419352610)所示。 + + **表 1** 最小硬件要求 + + + + + + + + + + + + + + + + + + + + + + + + +

部件名称

+

最小硬件要求

+

说明

+

架构

+
  • AArch64
  • x86_64
+
  • 支持Arm的64位架构。
  • 支持Intel的x86_64位架构。
+

CPU

+
  • 华为鲲鹏920系列CPU
  • Intel® Xeon®处理器
+

-

+

内存

+

不小于4GB(为了获得更好的应用体验,建议不小于8GB)

+

-

+

硬盘

+

不小于32GB(为了获得更好的应用体验,建议不小于120GB)

+

支持IDE、SATA、SAS等接口的硬盘。

+
+ +- 若使用的是虚拟机,则开发环境所需的最小虚拟化空间要求如[表2](#table780410493819)所示。 + + **表 2** 最小虚拟化空间要求 + + + + + + + + + + + + + + + + + + + + + + + + +

部件名称

+

最小虚拟化空间要求

+

说明

+

架构

+
  • AArch64
  • x86_64
+

-

+

CPU

+

2个CPU

+

-

+

内存

+

不小于4GB(为了获得更好的应用体验,建议不小于8GB)

+

-

+

硬盘

+

不小于32GB(为了获得更好的应用体验,建议不小于120GB)

+

-

+
+ +### 操作系统要求 + +操作系统要求为openEuler操作系统。 + +openEuler操作系统具体安装方法请参考[安装指南](./../../installation_upgrade/installation/installation_guide.md),其中“软件选择”页面的“已选环境的附加选项”中将“开发工具”勾选。 + +## 配置openEuler yum源 + +通过直接获取在线的openEuler repo源配置在线yum源或通过挂载ISO创建本地openEuler repo源配置本地yum源。 + +### 通过直接获取在线的openEuler repo源配置在线yum源 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>openEuler提供了多种repo源供用户在线使用,各repo源含义可参考[系统安装](./../../releasenotes/os_installation.md)。本操作以AArch64架构的OS repo源为例将其配置为yum源。 + +1. 进入到yum源目录并查看目录下的.repo配置文件。 + + ```shell + $ cd /etc/yum.repos.d + $ ls + openEuler.repo + ``` + +2. 在root权限下编辑openEuler.repo文件,将在线的openEuler repo源配置为yum源。 + + ```shell + # vi openEuler.repo + ``` + + 编辑openEuler.repo文件的内容如下: + + ```text + [osrepo] + name=osrepo + baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/aarch64/ + enabled=1 + gpgcheck=1 + gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/aarch64/RPM-GPG-KEY-openEuler + ``` + + **** + + >![](./public_sys-resources/icon-note.gif) **说明:** + > + > - \[*repoid*\]中的repoid为软件仓库(repository)的ID号,所有.repo配置文件中的各repoid不能重复,必须唯一。示例中repoid设置为**osrepo**。 + > - name为软件仓库描述的字符串。 + > - baseurl为软件仓库的地址。 + > - enabled为是否启用该软件源仓库,可选值为1和0。默认值为1,表示启用该软件源仓库。 + > - gpgcheck可设置为1或0,1表示进行gpg(GNU Private Guard)校验,0表示不进行gpg校验,gpgcheck可以确定rpm包的来源是有效和安全的。 + > - gpgkey为验证签名用的公钥。 + +### 通过挂载ISO创建本地openEuler repo源配置本地yum源 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>openEuler提供了多种ISO发布包,各ISO发布包含义可参考[系统安装](./../../releasenotes/os_installation.md)。本操作以openEuler-22.03-LTS-SP4-aarch64-dvd.iso发布包和sha256校验文件为例,请根据实际需要的ISO发布包和校验文件进行修改。 + +1. 下载ISO发布包。 + - 通过跨平台文件传输工具下载ISO镜像。 + 1. 登录[openEuler社区](https://openeuler.org/zh/)网站。 + 2. 单击“下载”。 + 3. 单击“社区发行版”,显示版本列表。 + 4. 在版本列表的“openEuler 22.03 LTS SP4”版本处单击“前往下载”按钮,进入openEuler-22.03-LTS-SP4版本下载列表。 + 5. 在对应的系统下载列表中,可以查看系统镜像架构和应用场景。 + + 架构分类如下: + + - AArch64:AArch64架构的ISO。 + - x86\_64:x86\_64架构的ISO。 + - ARM32:嵌入式的Image。 + + 场景分类如下: + + - 服务器:服务器场景的ISO。 + - 边缘计算:边缘计算场景的ISO。 + - 云计算:云计算场景的ISO。 + - 嵌入式:嵌入式的Image(只有选择AArch64或ARM32架构时,才可选该场景)。 + + 6. 单击“AArch64”,选择AArch64架构。 + 7. 单击“服务器”,选择服务器场景。 + 8. 在“软件包类型”栏选择需要的ISO,单击“立即下载”。 + 9. 单击该ISO对应的完整性校验文件“SHA256”,复制校验值到本地。 + 10. 登录openEuler操作系统,新建用于存放发布包的目录,如“~/iso”。 + + ```shell + $ mkdir ~/iso + ``` + + 11. 使用跨平台文件传输工具(如WinSCP)将本地的openEuler发布包上传到openEuler操作系统。 + + - 通过wget命令下载ISO镜像。 + 1. 登录[openEuler社区](https://openeuler.org/zh/)网站。 + 2. 单击“下载”。 + 3. 单击“社区发行版”,显示版本列表。 + 4. 在版本列表的“openEuler 22.03 LTS SP4”版本处单击“前往下载”按钮,进入openEuler-22.03-LTS-SP4版本下载列表。 + 5. 在对应的系统下载列表中,可以查看系统镜像架构和应用场景。 + + 架构分类如下: + + - AArch64:AArch64架构的ISO。 + - x86\_64:x86\_64架构的ISO。 + - ARM32:嵌入式的Image。 + + 场景分类如下: + + - 服务器:服务器场景的ISO。 + - 边缘计算:边缘计算场景的ISO。 + - 云计算:云计算场景的ISO。 + - 嵌入式:嵌入式的Image(只有选择AArch64或ARM32架构时,才可选该场景)。 + + 6. 单击“AArch64”,选择AArch64架构。 + 7. 单击“服务器”,选择服务器场景。 + 8. 在“软件包类型”栏选择需要的ISO,右键单击“立即下载”,单击“复制链接地址”,将openEuler发布包地址记录好。 + 9. 单击复制该ISO对应的完整性校验文件“SHA256”,将openEuler校验文件记录好。 + 10. 登录openEuler操作系统,新建用于存放发布包和检验文件的目录,如“~/iso”,并切换到该目录。 + + ```shell + $ mkdir ~/iso + $ cd ~/iso + ``` + + 11. 使用**wget**命令远程下载发布包,命令中的 _ipaddriso_ 为openEuler发布包地址。 + + ```shell + $ wget ipaddriso + ``` + +2. 发布包完整性校验。 + 1. 计算openEuler发布包的sha256校验值。 + + ```shell + $ sha256sum openEuler-22.03-LTS-SP4-aarch64-dvd.iso + ``` + + 命令执行完成后,输出校验值。 + + 2. 对比步骤1和复制的校验值是否一致。 + + 如果校验值一致说明iso文件完整性没有被破坏,如果校验值不一致则可以确认文件完整性已被破坏,需要重新获取。 + +3. 挂载ISO并创建为repo源。 + + 在root权限下使用mount命令挂载镜像文件。 + + 示例如下: + + ```shell + # mount /home/iso/openEuler-22.03-LTS-SP4-aarch64-dvd.iso /mnt/ + ``` + + 挂载好的mnt目录如下: + + ```text + . + │── boot.catalog + │── docs + │── EFI + │── images + │── Packages + │── repodata + │── TRANS.TBL + └── RPM-GPG-KEY-openEuler + ``` + + 其中,Packages为rpm包所在的目录,repodata为repo源元数据所在的目录,RPM-GPG-KEY-openEuler为openEuler的签名公钥。 + +4. 进入到yum源目录并查看目录下的.repo配置文件。 + + ```shell + $ cd /etc/yum.repos.d + $ ls + openEuler.repo + ``` + +5. 在root权限下编辑openEuler.repo文件,将[3](#li6236932222)中创建的repo源配置为本地yum源。 + + ```shell + # vi openEuler.repo + ``` + + 编辑openEuler.repo文件的内容如下: + + ```text + [localosrepo] + name=localosrepo + baseurl=file:///mnt + enabled=1 + gpgcheck=1 + gpgkey=file:///mnt/RPM-GPG-KEY-openEuler + ``` + +## 安装软件包 + +安装开发过程中需要用到的软件。不同的开发需要的软件不一样,但安装方法相同,本章以安装常用的几个软件包(JDK,rpm-build)为例。有些开发软件openEuler操作系统已默认自带,如GCC、GNU make。 + +### 安装JDK软件包 + +1. 执行**dnf list installed | grep jdk** 查询JDK软件是否已安装。 + + ```shell + $ dnf list installed | grep jdk + ``` + + 查看命令打印信息,若打印信息中包含“jdk”,表示该软件已经安装了,则不需要再安装。若无任何打印信息,则表示该软件未安装。 + +2. 清除缓存。 + + ```shell + $ dnf clean all + ``` + +3. 创建缓存。 + + ```shell + $ dnf makecache + ``` + +4. 查询可安装的JDK软件包。 + + ```shell + $ dnf search jdk | grep jdk + ``` + + 查看命令打印信息,选择安装java-x.x.x-openjdk-devel.aarch64软件包。其中x.x.x为版本号。 + +5. 在root权限下安装JDK软件包,以安装java-1.8.0-openjdk-devel-1.8.0.372.b07-1.oe2203SP4.aarch64.rpm软件包为例。 + + ```shell + # dnf install java-1.8.0-openjdk-devel-1.8.0.372.b07-1.oe2203SP4.aarch64 + ``` + +6. 查询JDK软件版本。 + + ```shell + $ java -version + ``` + + 查看打印信息,若打印信息中包括“openjdk version "1.8.0\_372"”信息,表示已正确安装,其中1.8.0\_372为版本号。 + +### 安装rpm-build软件包 + +1. 执行**dnf list installed | grep rpm-build** 查询rpm-build软件是否已安装。 + + ```shell + $ dnf list installed | grep rpm-build + ``` + + 查看命令打印信息,若打印信息中包含“rpm-build”,表示该软件已经安装了,则不需要再安装。若无任何打印信息,则表示该软件未安装。 + +2. 清除缓存。 + + ```shell + $ dnf clean all + ``` + +3. 创建缓存。 + + ```shell + $ dnf makecache + ``` + +4. 在root权限下安装rpm-build软件包。 + + ```shell + # dnf install rpm-build + ``` + +5. 查询rpm-build软件版本。 + + ```shell + $ rpmbuild --version + ``` + +## 使用IDE进行Java开发 + +对于小型的Java程序,可以直接参考“使用JDK编译”章节得到可运行Java应用。但是对于大中型Java应用,这种方式已经无法满足开发者的需求。因此您可以参考如下步骤安装IDE并进行使用,以方便您在openEuler系统上的Java开发工作。 + +### 简介 + +IntelliJ IDEA是一款非常流行的Java IDE,其社区版可以免费下载使用。目前openEuler支持使用IntelliJ IDEA集成开发环境(IDE)进行Java程序的开发,从而可以提升开发人员的工作效率。 + +### 使用MobaXterm登录服务器 + +MobaXterm是一款非常优秀的SSH客户端,其自带X Server,可以轻松解决远程GUI显示问题。 + +您需要提前下载安装好MobaXterm并打开,然后SSH登录您的服务器并进行以下操作。 + +### 设置JDK环境 + +在设置JAVA\_HOME之前您需要先找到JDK的安装路径。在“开发环境准备 \> 安装软件包 \> 安装JDK软件包”章节中您已经学会了如何安装JDK,如果您还没安装JDK,请提前安装好。 + +查看java路径,命令如下: + +```shell +$ which java +/usr/bin/java +``` + +查看软链接的实际指向目录,命令如下: + +```shell +$ ls -la /usr/bin/java +lrwxrwxrwx. 1 root root 22 Mar 6 20:28 /usr/bin/java -> /etc/alternatives/java +$ ls -la /etc/alternatives/java +lrwxrwxrwx. 1 root root 83 Mar 6 20:28 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-devel-1.8.0.372.b07-1.oe2203SP4.aarch64/jre/bin/java +``` + +发现JDK的真实路径为/usr/lib/jvm/java-1.8.0-openjdk-devel-1.8.0.372.b07-1.oe2203SP4.aarch64,设置JAVA\_HOME和PATH,命令如下: + +```shell +$ export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-devel-1.8.0.372.b07-1.oe2203SP4.aarch64 +$ export PATH=$JAVA_HOME/bin:$PATH +``` + +### 下载安装GTK库 + +运行如下命令: + +```shell +$ dnf list installed | grep gtk +``` + +如果显示gtk2或者gtk3,则表示您已安装该库,可以直接跳过进入下一步,否则需要在root权限下运行如下命令自动下载安装gtk库: + +```shell +# dnf -y install gtk2 libXtst libXrender xauth +``` + +### 设置X11 Forwarding + +切换到sshd配置目录 + +```shell +$ cd ~/.ssh +``` + +如果该目录不存在,则创建目录后再进行切换,创建目录命令如下: + +```shell +$ mkdir ~/.ssh +``` + +然后在.ssh目录下编辑config文件并保存: + +1. 使用vim打开config文件 + + ```shell + $ vim config + ``` + +2. 将以下内容添加到文件末尾并保存: + + ```shell + Host * + ForwardAgent yes + ForwardX11 yes + ``` + +### 下载并运行IntelliJ IDEA + +在执行如上环境配置后,您就可以下载使用IntelliJ IDEA了。鉴于最新版的IntelliJ IDEA和openEuler系统在部分功能上有兼容性问题,建议您从此[链接](https://www.jetbrains.com/idea/download/other.html)下载2018版本linux压缩包。下载好后把压缩包移到您想要安装该软件的目录,对压缩包进行解压: + +```shell +$ tar xf ideaIC-2018.3.tar.gz +``` + +解压后切换到IntelliJ IDEA的目录下并运行: + +```shell +$ cd ./idea-IC-183.4284.148 +$ bin/idea.sh & +``` diff --git a/docs/zh/server/development/application_dev/public_sys-resources/icon-caution.gif b/docs/zh/server/development/application_dev/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/development/application_dev/public_sys-resources/icon-caution.gif differ diff --git a/docs/zh/server/development/application_dev/public_sys-resources/icon-danger.gif b/docs/zh/server/development/application_dev/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/development/application_dev/public_sys-resources/icon-danger.gif differ diff --git a/docs/zh/server/development/application_dev/public_sys-resources/icon-note.gif b/docs/zh/server/development/application_dev/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/server/development/application_dev/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/server/development/application_dev/public_sys-resources/icon-notice.gif b/docs/zh/server/development/application_dev/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/server/development/application_dev/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/server/development/application_dev/public_sys-resources/icon-tip.gif b/docs/zh/server/development/application_dev/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/zh/server/development/application_dev/public_sys-resources/icon-tip.gif differ diff --git a/docs/zh/server/development/application_dev/public_sys-resources/icon-warning.gif b/docs/zh/server/development/application_dev/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/development/application_dev/public_sys-resources/icon-warning.gif differ diff --git a/docs/zh/server/development/application_dev/using_gcc_for_compilation.md b/docs/zh/server/development/application_dev/using_gcc_for_compilation.md new file mode 100644 index 0000000000000000000000000000000000000000..7d0f35847bc8fbe79e991c642be24b190d4c5c27 --- /dev/null +++ b/docs/zh/server/development/application_dev/using_gcc_for_compilation.md @@ -0,0 +1,612 @@ +# 使用GCC编译 + +本章介绍GCC编译的一些基本知识,并通过示例进行实际演示。更多的GCC知识请通过**man gcc**命令查询。 + + +- [使用GCC编译](#使用gcc编译) + - [简介](#简介) + - [基本规则](#基本规则) + - [文件类型](#文件类型) + - [编译流程](#编译流程) + - [编译选项](#编译选项) + - [多源文件编译](#多源文件编译) + - [库](#库) + - [动态链接库](#动态链接库) + - [静态链接库](#静态链接库) + - [示例](#示例) + - [使用GCC编译C程序示例](#使用gcc编译c程序示例) + - [使用GCC创建和使用动态链接库示例](#使用gcc创建和使用动态链接库示例) + - [使用GCC创建和使用静态链接库示例](#使用gcc创建和使用静态链接库示例) + + + +## 简介 + +GCC(GNU Compiler Collection)是GNU推出的功能强大、性能优越的多平台编译器。GCC编译器能将C、C++语言源程序、汇编程序和目标程序编译、链接成可执行文件。openEuler操作系统中已默认安装了GCC软件包。 + +## 基本规则 + +### 文件类型 + +对于任何给定的输入文件,文件类型决定进行何种编译。GCC常用的文件类型如[表1](#table634145764320)所示。 + +**表 1** GCC常用的文件类型 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

扩展名(后缀)

+

说明

+

.c

+

C语言源代码文件。

+

.C,.cc或.cxx

+

C++源代码文件。

+

.m

+

Objective-C源代码文件。

+

.s

+

汇编语言源代码文件。

+

.i

+

已经预处理的C源代码文件。

+

.ii

+

已经预处理的C++源代码文件。

+

.S

+

已经预处理的汇编语言源代码文件。

+

.h

+

程序所包含的头文件。

+

.o

+

编译后的目标文件。

+

.so

+

动态链接库,它是一种特殊的目标文件。

+

.a

+

静态链接库。

+

.out

+

可执行文件,但可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。如果没有给出可执行文件的名字,GCC将生成一个名为a.out的文件。

+
+ +### 编译流程 + +使用GCC将源代码文件生成可执行文件,需要经过预处理、编译、汇编和链接。 + +1. 预处理:将源程序(如 **.c** 文件)预处理,生成 **.i** 文件。 +2. 编译:将预处理后的 **.i** 文件编译成为汇编语言,生成 **.s** 文件。 +3. 汇编:将汇编语言文件经过汇编,生成目标文件 **.o** 文件。 +4. 链接:将各个模块的 **.o** 文件链接起来生成一个可执行程序文件。 + +其中 **.i** 文件、**.s**文件、**.o**文件是中间文件或临时文件,如果使用GCC一次性完成C语言程序的编译,则这些文件会被删除。 + +### 编译选项 + +GCC编译的命令格式为:**gcc** \[_options_\] \[_filenames_\] + +其中: + +_options_ :编译选项。 + +_filenames_ :文件名称。 + +GCC是一个功能强大的编译器,其 _options_ 参数取值很多,但有些大部分并不常用,常用的 _options_ 取值如[表2](#table1342946175212)所示。 + +**表 2** GCC常用的编译选项 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

options取值

+

说明

+

示例

+

-c

+

编译、汇编指定的源文件生成目标文件,但不进行链接。通常用于编译不包含主程序的子程序文件。

+

#使用-c选项编译test1.c、test2.c源文件。

+

gcc -c test1.c test2.c

+

-S

+

编译指定的源文件生成以.s作为后缀的汇编语言文件,但不进行汇编。

+

#编译器预处理 circle.c,将其翻译成汇编语言,并将结果存储在 circle.s 文件中。

+

gcc -S circle.c

+

-E

+

预处理指定的源文件,但不进行编译。

+

默认情况下,预处理器的输出会被导入到标准输出流(如显示器),可以利用-o选项把它导入到某个输出文件。

+

#预处理的结果导出到 circle.i 文件。

+

gcc -E circle.c -o circle.i

+

-o file

+

用在生成可执行文件时,生成指定的输出文件file。同时该名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。

+

#将源文件作为输入文件,将可执行文件作为输出文件,也即完整地编译整个程序。

+

gcc main.c func.c -o app.out

+

-g

+

在可执行程序中包含标准调试信息。

+

-

+

-L library_path

+

在库文件的搜索路径列表中添加library_path路径。

+

-

+

-Ilibrary

+

链接时搜索指定的函数库library

+

使用 GCC 编译和链接程序时,GCC 默认会链接 libc.a 或者 libc.so,但是对于其他的库(例如非标准库、第三方库等),就需要手动添加。

+

#使用-l选项,以链接数学库。

+

gcc main.c -o main.out -lm

+
说明:

数学库的文件名是 libm.a。前缀lib和后缀.a是标准的,m是基本名称,GCC 会在-l选项后紧跟着的基本名称的基础上自动添加这些前缀、后缀,本例中,基本名称为 m。

+
+

-I head_path

+

在头文件的搜索路径列表中添加head_path路径。

+

-

+

-static

+

进行静态编译,及链接静态库,禁止链接动态库。

+

-

+

-shared

+

默认选项,可省略。

+
  • 可以生成动态库文件。
  • 进行动态编译,优先链接动态库,只有没有动态库时才会链接同名的静态库。
+

-

+

-fPIC(或-fpic)

+

生成使用相对地址的位置无关的目标代码。通常使用-static选项从该PIC目标文件生成动态库文件。

+

-

+
+ +### 多源文件编译 + +多个源文件的编译方法有2种。 + +- 多个源文件一起编译。编译时需要所有文件重新编译。 + + 示例:将test1.c和test2.c分别编译后链接成test可执行文件。 + + ```shell + $ gcc test1.c test2.c -o test + ``` + +- 分别编译各个源文件,之后对编译后输出的目标文件链接。编译时只重新编译修改的文件,未修改的文件不用重新编译。 + + 示例:分别编译test1.c,test2.c,再将二者的目标文件test1.o,test2.o链接成test可执行文件。 + + ```shell + $ gcc -c test1.c + $ gcc -c test2.c + $ gcc -o test1.o test2.o -o test + ``` + +## 库 + +库是写好的、现有的、成熟的、可以复用的代码。每个程序都要依赖很多基础的底层库。 + +库文件在命名时约定,以lib为前缀,以.so(动态库)或.a(静态库)为后缀,中间为库文件名。如libfoo.so或libfoo.a。由于所有的库文件都遵循了同样的规范,因此当在链接库时,-l 选项指定链接的库文件名时可以省去lib前缀,即GCC 在对-lfoo 进行处理时,会自动去链接名为libfoo.so 或libfoo.a的库文件。而当在创建库时,必须指定完整文件名libfoo.so或libfoo.a。 + +根据链接时期的不同,库分为静态库和动态库。静态库是在链接阶段,将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中;而动态库是在程序编译时并不会被链接到目标代码中,而是在程序运行时才被载入。二者有如下差异: + +- 资源利用不一样 + + 静态库为生成的可执行文件的一部分,而动态库为单独的文件。所以使用静态库和和动态库的可执行文件大小和占用的磁盘空间大小不一样,导致资源利用不一样。 + +- 扩展性与兼容性不一样 + + 静态库中某个函数的实现变了,那么可执行文件必须重新编译,而对于动态链接生成的可执行文件,只需要更新动态库本身即可,不需要重新编译可执行文件。 + +- 依赖不一样 + + 静态库的可执行文件不需要依赖其他的内容即可运行,而动态库的可执行文件必须依赖动态库的存在。所以静态库更方便移植。 + +- 加载速度不一样 + + 静态库在链接时就和可执行文件在一块了,而动态库在加载或者运行时才链接,因此,对于同样的程序,静态链接的要比动态链接加载更快。 + +### 动态链接库 + +使用-shared选项 和-fPIC选项,可直接使用源文件、汇编文件或者目标文件创建一个动态库。其中-fPIC 选项作用于编译阶段,在生成目标文件时就需要使用该选项,以生成位置无关的代码。 + +示例1:从源文件生成动态链接库。 + +```shell +$ gcc -fPIC -shared test.c -o libtest.so +``` + +示例2:从目标文件生成动态链接库。 + +```shell +$ gcc -fPIC -c test.c -o test.o +$ gcc -shared test.o -o libtest.so +``` + +将一个动态库链接到可执行文件,需要在命令行中列出动态库的名称。 + +示例:将main.c和libtest.so一起编译成 app.out,当 app.out 运行时,会动态地加载链接库 libtest.so。 + +```shell +$ gcc main.c libtest.so -o app.out +``` + +这种方式是直接指定使用当前目录下的libtest.so文件。 + +若使用下面搜索动态库的方式,则为了确保程序在运行时能够链接到动态库,需要通过如下三种方法中的任一种实现。 + +- 将动态库保存在标准目录下,例如 /usr/lib。 +- 把动态库所在路径libraryDIR增加到环境变量LD\_LIBRARY\_PATH中。 + + ```shell + $ export LD\_LIBRARY\_PATH=libraryDIR:$LD\_LIBRARY\_PATH + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >LD\_LIBRARY\_PATH为动态库的环境变量。当运行动态库时,若动态库不在缺省文件夹(/lib 和/usr/lib)下,则需要指定环境变量LD\_LIBRARY\_PATH。 + +- 把动态库所在路径libraryDIR添加到 /etc/ld.so.conf中然后执行ldconfig或者以动态库所在路径libraryDIR为参数执行ldconfig。 + + ```shell + $ gcc main.c -L libraryDIR -ltest -o app.out + $ export LD_LIBRARY_PATH=libraryDIR:$LD_LIBRARY_PATH + ``` + +### 静态链接库 + +创建一个静态链接库,需要先将源文件编译为目标文件,然后再使用ar命令将目标文件打包成静态链接库。 + +示例:将源文件test1.c,test2.c,test3.c编译并打包成静态库。 + +```shell +$ gcc -c test1.c test2.c test3.c +$ ar rcs libtest.a test1.o test2.o test3.o +``` + +其中ar是一个备份压缩命令,可以将多个文件打包成一个备份文件(也叫归档文件),也可以从备份文件中提取成员文件。ar最常见的用法是将目标文件打包为静态链接库。 + +ar将目标文件打包成静态链接库的命令格式为: + +ar rcs _Sllfilename_ _Targetfilelist_ + +- _Sllfilename_ :静态库文件名。 +- _Targetfilelist_ :目标文件列表。 +- r: 替换库中已有的目标文件,或者加入新的目标文件。 +- c: 创建一个库,不管库是否存在,都将创建。 +- s: 创建目标文件索引,在创建较大的库时能提高速度。 + +示例:创建一个main.c文件来使用静态库。 + +```shell +$ gcc main.c -L libraryDIR -ltest -o test.out +``` + +其中libraryDIR为libtest.a库的路径。 + +## 示例 + +### 使用GCC编译C程序示例 + +1. cd到代码目录,以目录“~/code”进行举例。如下所示: + + ```shell + $ cd ~/code + ``` + +2. 编写Hello World程序,保存为helloworld.c,此处以编译Hello World程序进行举例说明。示例如下: + + ```shell + $ vi helloworld.c + ``` + + 代码内容示例: + + ```shell + #include + int main() + { + printf("Hello World!\n"); + return 0; + } + ``` + +3. 在代码目录,执行编译,使用命令: + + ```shell + $ gcc helloworld.c -o helloworld + ``` + + 编译执行未报错,表明执行通过。 + +4. 编译完成后,会生成helloworld文件,查看编译结果,示例如下: + + ```shell + $ ./helloworld + Hello World! + ``` + +### 使用GCC创建和使用动态链接库示例 + +1. cd到代码目录,以目录“~/code”进行举例。并在该目录下创建src,lib,include子目录,分别用于存放源文件,动态库文件和头文件。 + + ```shell + $ cd ~/code + $ mkdir src lib include + ``` + +2. cd到~/code/src目录,创建2个函数add.c、sub.c,分别实现加、减。 + + ```c + $ cd ~/code/src + $ vi add.c + $ vi sub.c + ``` + + add.c代码内容示例: + + ```c + #include "math.h" + int add(int a, int b) + { + return a+b; + } + ``` + + sub.c代码内容示例: + + ```c + #include "math.h" + int sub(int a, int b) + { + return a-b; + } + ``` + +3. 将add.c、sub.c源文件创建为动态库libmath.so,并将该动态库存放在~/code/lib目录。 + + ```shell + $ gcc -fPIC -shared add.c sub.c -o ~/code/lib/libmath.so + ``` + +4. cd到~/code/include目录,创建1个头文件math.h,声明函数的头文件。 + + ```shell + $ cd ~/code/include + $ vi math.h + ``` + + math.h代码内容示例: + + ```shell + #ifndef __MATH_H_ + #define __MATH_H_ + int add(int a, int b); + int sub(int a, int b); + #endif + ``` + +5. cd到~/code/src目录,创建一个调用add\(\)和sub\(\)的main.c函数。 + + ```shell + $ cd ~/code/src + $ vi main.c + ``` + + math.c代码内容示例: + + ```c + #include + #include "math.h" + int main() + { + int a, b; + printf("Please input a and b:\n"); + scanf("%d %d", &a, &b); + printf("The add: %d\n", add(a,b)); + printf("The sub: %d\n", sub(a,b)); + return 0; + } + ``` + +6. 将main.c和libmath.so一起编译成math.out。 + + ```shell + $ gcc main.c -I ~/code/include -L ~/code/lib -lmath -o math.out + ``` + +7. 将动态链接库所在的路径加入到环境变量中。 + + ```shell + $ export LD_LIBRARY_PATH=~/code/lib:$LD_LIBRARY_PATH + ``` + +8. 执行math.out。 + + ```shell + $ ./math.out + ``` + + 执行结果如下所示: + + ```text + Please input a and b: + 9 2 + The add: 11 + The sub: 7 + ``` + +### 使用GCC创建和使用静态链接库示例 + +1. cd到代码目录,以目录“~/code”进行举例。并在该目录下创建src,lib,include子目录,分别用于存放源文件,静态库文件和头文件。 + + ```shell + $ cd ~/code + $ mkdir src lib include + ``` + +2. cd到~/code/src目录,创建2个函数add.c、sub.c,分别实现加、减。 + + ```shell + $ cd ~/code/src + $ vi add.c + $ vi sub.c + ``` + + add.c代码内容示例: + + ```c + #include "math.h" + int add(int a, int b) + { + return a+b; + } + ``` + + sub.c代码内容示例: + + ```c + #include "math.h" + int sub(int a, int b) + { + return a-b; + } + ``` + +3. 将add.c、sub.c源文件编译为目标文件add.o、sub.o。 + + ```shell + $ gcc -c add.c sub.c + ``` + +4. 将add.o、sub.o目标文件通过ar命令打包成静态库libmath.a,并将该静态库存放在~/code/lib目录。 + + ```shell + $ ar rcs ~/code/lib/libmath.a add.o sub.o + ``` + +5. cd到~/code/include目录,创建1个头文件math.h,声明函数的头文件。 + + ```shell + $ cd ~/code/include + $ vi math.h + ``` + + math.h代码内容示例: + + ```shell + #ifndef __MATH_H_ + #define __MATH_H_ + int add(int a, int b); + int sub(int a, int b); + #endif + ``` + +6. cd到~/code/src目录,创建一个调用add\(\)和sub\(\)的main.c函数。 + + ```shell + $ cd ~/code/src + $ vi main.c + ``` + + math.c代码内容示例: + + ```c + #include + #include "math.h" + int main() + { + int a, b; + printf("Please input a and b:\n"); + scanf("%d %d", &a, &b); + printf("The add: %d\n", add(a,b)); + printf("The sub: %d\n", sub(a,b)); + return 0; + } + ``` + +7. 将main.c和libmath.a一起编译成math.out。 + + ```shell + $ gcc main.c -I ~/code/include -L ~/code/lib -lmath -o math.out + ``` + +8. 执行math.out。 + + ```shell + $ ./math.out + ``` + + 执行结果如下所示: + + ```text + Please input a and b: + 9 2 + The add: 11 + The sub: 7 + ``` diff --git a/docs/zh/server/development/application_dev/using_jdk_for_compilation.md b/docs/zh/server/development/application_dev/using_jdk_for_compilation.md new file mode 100644 index 0000000000000000000000000000000000000000..968855d78a2c6c09578f61195a04f20ddf3b6041 --- /dev/null +++ b/docs/zh/server/development/application_dev/using_jdk_for_compilation.md @@ -0,0 +1,525 @@ +# 使用JDK编译 + + +- [使用JDK编译](#使用jdk编译) + - [简介](#简介) + - [基本规则](#基本规则) + - [文件类型及工具](#文件类型及工具) + - [java程序生成流程](#java程序生成流程) + - [JDK常用工具选项](#jdk常用工具选项) + - [类库](#类库) + - [包的声明](#包的声明) + - [包的引用](#包的引用) + - [示例](#示例) + - [编译不带包的java程序示例](#编译不带包的java程序示例) + - [编译带包的java程序示例](#编译带包的java程序示例) + + + +## 简介 + +JDK(Java Development Kit)是 Java 开发者进行 Java 开发所必需的软件包,包含 JRE(Java Runtime Environment)和编译、调测工具。openEuler在OpenJDK 的基础上进行了 GC 优化、并发稳定性增强、安全性增强等修改,提高了 Java 应用程序在 ARM 上的性能和稳定性。 + +## 基本规则 + +### 文件类型及工具 + +对于任何给定的输入文件,文件类型决定采用何种工具进行处理。JDK常用的文件类型如[表1](#table634145764320)所示,JDK常用的工具如[表2](#table103504146433)所示。 + +**表 1** JDK常用的文件类型 + + + + + + + + + + + + + + + + +

扩展名(后缀)

+

说明

+

.java

+

java语言源代码文件。

+

.class

+

java的字节码文件,是一种和任何具体机器环境及操作系统环境无关的中间代码。它是一种二进制文件,是Java 源文件由 Java 编译器编译后生成的目标代码文件。

+

.jar

+

java的jar压缩文件。

+
+ +**表 2** JDK常用的工具 + + + + + + + + + + + + + + + + +

工具名称

+

说明

+

java

+

Java运行工具,用于运行.class字节码文件或.jar文件。

+

javac

+

Java编程语言的编译器,将.java的源代码文件编译成.class的字节码文件。

+

jar

+

创建和管理Jar文件

+
+ +### java程序生成流程 + +通过JDK将java源代码文件生成并运行Java程序,需要经过编译和运行。 + +1. 编译:是指使用Java编译器(javac)将java源代码文件(.java文件)编译为.class的字节码文件。 +2. 运行:是指在Java虚拟机上执行字节码文件。 + +### JDK常用工具选项 + +#### javac编译选项 + +javac编译的命令格式为:**javac** \[_options_\] \[_sourcefiles_\] \[_classes_\] \[@_argfiles_\] + +其中: + +_options_ :命令选项。 + +_sourcefiles_ :一个或多个需要编译的源文件。 + +_classes_ :一个或多个要为注释处理的类。 + +@_argfiles_ :一个或多个列出选项和源文件的文件。这些文件中不允许有-J选项。 + +javac是java编译器,其 _options_ 参数取值很多,但有些大部分并不常用,常用的 _options_ 取值如[表3](#table1342946175212)所示。 + +**表 3** javac常用的编译选项 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

options取值

+

说明

+

示例

+

-d path

+

指定存放生成的类文件的路径

+

默认情况下,编译生成的类文件与源文件在同一路径下。使用-d选项可以将类文件输出到指定路径。

+

#使用-d选项将所有类文件输出到bin路径下

+

javac /src/*.java -d /bin

+

-s path

+

指定存放生成的源文件的路径

+

-

+

-cp path或-classpath path

+

搜索编译所需的class文件,指出编译所用到的class文件的位置。

+

#在Demo中要调用GetStringDemo类中的getLine()方法,而GetStringDemo类编译后的文件,即.class文件在bin目录下。

+

javac -cp bin Demo.java -d bin

+

-verbose

+

输出关于编译器正在执行的操作的消息,如加载的类信息和编译的源文件信息。

+

#输出关于编译器正在执行的操作的消息。

+

javac -verbose -cp bin Demo.java

+

-source sourceversion

+

指定查找输入源文件的位置。

+

-

+

-sourcepath path

+

用于搜索编译所需的源文件(即java文件),指定要搜索的源文件的位置,如jar、zip或其他包含java文件的目录。

+

-

+

-target targetversion

+

生成特定JVM版本的类文件。取值为1.1,1.2,1.3,1.4,1.5(或5),1.6(或6),1.7(或7),1.8(或8)。targetversion的默认取值与-source选项的sourceversion有关。sourceversion取值:

+
  • 1.2,targetversion为1.4;
  • 1.3,targetversion为1.4;
  • 1.5、1.6、1.7、未指定,targetversion为1.8。
  • 其他值,targetversionsourceversion取值相同。
+

-

+
+ +#### java运行选项 + +java运行的格式为: + +运行类文件:**java** \[_options_\] _classesname_ \[args\] + +运行jar文件:**java** \[_options_\] -jar _filename_ \[args\] + +其中: + +_options_ :命令选项,选项之间用空格分隔。 + +_classname_ :运行的.class文件名。 + +_filename_ :运行的.jar文件名。 + +args:传递给main\(\)函数的参数,参数之间用空格分隔。 + +java是运行java应用程序的工具,其 _options_ 参数取值很多,但有些大部分并不常用,常用的 _options_ 取值如[表4](#table371918587238)所示。 + +**表 4** java常用的运行选项 + + + + + + + + + + + + + + + + +

options取值

+

说明

+

示例

+

-cp path或-classpath path

+

指定要运行的文件所在的位置以及需要用到的类路径,包括jar、zip和class文件目录。

+

当路径有多个时,使用“:”分隔。

+

-

+

-verbose

+

输出关于编译器正在执行的操作的消息,如加载的类信息和编译的源文件信息。

+

#输出关于编译器正在执行的操作的消息。

+

java -verbose -cp bin Demo.java

+
+ +#### jar打包选项 + +jar的命令格式为:**jar** \{c | t | x | u\}\[vfm0M\] \[_jarfile_\] \[_manifest_\] \[-C _dir_\] _file_... + +jar命令参数说明如[表5](#table3691718114817)所示。 + +**表 5** jar命令参数说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

说明

+

示例

+

c

+

创建jar文件包。

+

#把当前目录的hello.class文件打包到Hello.jar,且不显示打包的过程。如果Hello.jar文件还不存在,就创建它,否则首先清空它。

+

jar cf Hello.jar hello.class

+

t

+

列出jar文件包的内容列表。

+

#列出Hello.jar包含的文件清单。

+

jar tf Hello.jar

+

x

+

展开jar文件包的指定文件或者所有文件。

+

#解压Hello.jar 到当前目录,不显示任何信息。

+

jar xf Hello.jar

+

u

+

更新已存在的jar文件包,如添加文件到jar文件包中。

+

-

+

v

+

生成详细报告并打印到标准输出。

+

#把当前目录的hello.class文件打包到Hello.jar,并显示打包的过程。如果Hello.jar文件还不存在,就创建它,否则首先清空它。

+

jar cvf Hello.jar hello.class

+

f

+

指定jar文件名,通常这个参数是必须的。

+

-

+

m

+

指定需要包含的manifest清单文件。

+

-

+

0

+

只存储,不压缩,这样产生的jar文件包会比不用该参数产生的体积大,但速度更快。

+

-

+

M

+

不产生所有项的manifest清单文件,此参数会忽略m参数。

+

#把当前目录的hello.class文件打包到Hello.jar,并显示打包的过程。如果Hello.jar文件还不存在,就创建它,否则首先清空它。但在创建Hello.jar时不产生manifest 文件。

+

jar cvfM Hello.jar hello.class

+

jarfile

+

.jar文件包,它是f参数的附属参数。

+

-

+

manifest

+

.mf的manifest清单文件,它是m参数的附属参数。

+

-

+

-C dir

+

转到指定dir下执行jar命令,只能配合参数c、t使用。

+

-

+

file

+

指定文件/路径列表,文件或路径下的所有文件(包括递归路径下的)都会被打入jar文件包中,或解压jar文件到路径下。

+

#把当前目录的所有class文件打包到Hello.jar,并显示打包的过程。如果Hello.jar文件还不存在,就创建它,否则首先清空它。

+

jar cvf Hello.jar *.class

+
+ +## 类库 + +java类库是以包的形式实现的,包是类和接口的集合。java编译器为每个类生成一个字节码文件,且文件名与类名相同,因此同名的类之间就有可能发生冲突。java语言中,把一组类和接口封装在一个包内,包可以有效地管理类名空间,位于不同包中的类即使同名也不会冲突,从而解决了同名类之间可能发生的冲突问题,为管理大量的类和接口提供了方便,也有利于类和接口的安全。 + +除java提供的许多包外,开发者也可以自定义包,把自己编写的类和接口等组成程序包的形式,以便后续使用。 + +自定义包需要先声明包,然后再使用包。 + +### 包的声明 + +包的声明格式为:package pkg1\[.pkg2\[.pkg3...\]\]; + +为了声明一个包,首先必须建立一个相应的目录结构,子目录与包名一致,然后在需要放入该包的类文件开头声明包,表示该文件的全部类都属于这个包。包声明中的“.”指明了目录的层次。如果源程序文件中没有package语句,则指定为无名包。无名包没有路径,一般情况下,java仍然会把源文件中的类存储在当前工作目录(即存放java源文件的目录)下。 + +包声明语句必须被加到源程序文件的起始部分,而且前面不能有注释和空格。如果在不同源程序文件中使用相同的包声明语句,就可以将不同源程序文件中的类都包含在相同的包中。 + +### 包的引用 + +在 Java 中,为了能使用java提供的包中的公用类,或者使用自定义的包中的类,有两种方法。 + +- 在要引用的类名前带上包名。 + + 如:name.A obj=new name.A \(\); + + 其中,name为包名,A为类名,obj为对象。表示程序中用name包中的A类定义一个对象obj。 + + 示例:新建一个example包中Test类的test对象。 + + ```shell + example.Test test = new example.Test(); + ``` + +- 在文件开头使用import来导入包中的类。 + + import语句的格式为:import pkg1\[.pkg2\[.pkg3...\]\].\(classname | \*\); + + 其中,pkg1\[.pkg2\[.pkg3...\]\]表明包的层次,classname为所要导入的类。如果要从一个包中导入多个类,则可以使用通配符“\*”来替代。 + + 示例:导入example包中的Test类。 + + ```java + import example.Test; + ``` + + 示例:将example 整个包导入。 + + ```java + import example.*; + ``` + +## 示例 + +### 编译不带包的java程序示例 + +1. cd到代码目录,此处以“~/code”进行举例。如下所示: + + ```shell + $ cd ~/code + ``` + +2. 编写Hello World程序,保存为HelloWorld.java,此处以编译Hello World程序进行举例说明。示例如下: + + ```shell + $ vi HelloWorld.java + ``` + + 代码内容示例: + + ```java + public class HelloWorld { + public static void main(String[] args) { + System.out.println("Hello World"); + } + } + ``` + +3. 在代码目录,执行编译,使用命令: + + ```shell + $ javac HelloWorld.java + ``` + + 编译执行未报错,表明执行通过。 + +4. 编译完成后,会生成 HelloWorld.class 文件,通过java命令可执行查看结果,示例如下: + + ```shell + $ java HelloWorld + Hello World + ``` + +### 编译带包的java程序示例 + +1. cd到代码目录,此处以“~/code”进行举例。并在该目录下创建“~/code/Test/my/example”、“~/code/Hello/world/developers”、“~/code/Hi/openos/openeuler”子目录,分别用于存放源文件。 + + ```shell + $ cd ~/code + $ mkdir -p Test/my/example + $ mkdir -p Hello/world/developers + $ mkdir -p Hi/openos/openeuler + ``` + +2. cd到~/code/Test/my/example目录,创建Test.java。 + + ```shell + $ cd ~/code/Test/my/example + $ vi Test.java + ``` + + Test.java代码内容示例: + + ```java + package my.example; + import world.developers.Hello; + import openos.openeuler.Hi; + public class Test { + public static void main(String[] args) { + Hello me = new Hello(); + me.hello(); + Hi you = new Hi(); + you.hi(); + } + } + ``` + +3. cd到~/code/Hello/world/developers目录,创建Hello.java。 + + ```shell + $ cd ~/code/Hello/world/developers + $ vi Hello.java + ``` + + Hello.java代码内容示例: + + ```java + package world.developers; + public class Hello { + public void hello(){ + System.out.println("Hello, openEuler."); + } + } + ``` + +4. ~/code/Hi/openos/openeuler目录,创建Hi.java。 + + ```shell + $ cd ~/code/Hi/openos/openeuler + $ vi Hi.java + ``` + + Hi.java代码内容示例: + + ```java + package openos.openeuler; + public class Hi { + public void hi(){ + System.out.println("Hi, the global developers."); + } + } + ``` + +5. cd到~/code目录,使用javac编译源文件。 + + ```shell + $ cd ~/code + $ javac -classpath Hello:Hi Test/my/example/Test.java + ``` + + 执行完命令后,会在“~/code/Test/my/example”、“~/code/Hello/world/developers”、“~/code/Hi/openos/openeuler”目录下分别生成Test.class、Hello.class、Hi.class文件。 + +6. cd到~/code目录,使用java运行Test程序。 + + ```shell + $ cd ~/code + $ java -classpath Test:Hello:Hi my/example/Test + ``` + + 执行结果如下所示: + + ```text + Hello, openEuler. + Hi, the global developers. + ``` diff --git a/docs/zh/server/development/application_dev/using_make_for_compilation.md b/docs/zh/server/development/application_dev/using_make_for_compilation.md new file mode 100644 index 0000000000000000000000000000000000000000..d072f21d2fbd31df5fb5eb1c3262b29061f42fef --- /dev/null +++ b/docs/zh/server/development/application_dev/using_make_for_compilation.md @@ -0,0 +1,372 @@ +# 使用make编译 + +本章介绍make编译的一些基本知识,并通过示例进行实际演示。更多的make选项请通过**man make**命令查询。 + + +- [使用make编译](#使用make编译) + - [简介](#简介) + - [基本规则](#基本规则) + - [文件类型](#文件类型) + - [make工作流程](#make工作流程) + - [make选项](#make选项) + - [Makefile](#makefile) + - [Makefile结构](#makefile结构) + - [Makefile主要内容](#makefile主要内容) + - [示例](#示例) + - [使用Makefile实现编译的示例](#使用makefile实现编译的示例) + + + +## 简介 + +GNU make实用程序(通常缩写为make)是一种用于控制从源文件生成可执行文件的工具。 make会自动确定复杂程序的哪些部分已更改并需要重新编译。 make使用称为Makefile的配置文件来控制程序的构建方式。 + +## 基本规则 + +### 文件类型 + +makefile文件中可能用到的文件类型如[表1](#table634145764320)所示。 + +**表 1** 文件类型 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

扩展名(后缀)

+

说明

+

.c

+

C语言源代码文件。

+

.C,.cc或.cxx

+

C++源代码文件。

+

.m

+

Objective-C源代码文件。

+

.s

+

汇编语言源代码文件。

+

.i

+

已经预处理的C源代码文件。

+

.ii

+

已经预处理的C++源代码文件。

+

.S

+

已经预处理的汇编语言源代码文件。

+

.h

+

程序所包含的头文件。

+

.o

+

编译后的目标文件。

+

.so

+

动态链接库,它是一种特殊的目标文件。

+

.a

+

静态链接库。

+

.out

+

可执行文件,但可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。如果没有给出可执行文件的名字,GCC将生成一个名为a.out的文件。

+
+ +### make工作流程 + +使用make由源代码文件生成可执行文件,需要经过如下步骤: + +1. make命令会读入Makefile文件,包括当前目录下命名为“GNUmakefile” 、“makefile” 、“Makefile”的文件、被include的makefile文件、参数-f、--file、--makefile指定的规则文件。 +2. 初始化变量。 +3. 推导隐含规则,分析依赖关系,并创建依赖关系链。 +4. 根据依赖关系链,决定哪些目标需要重新生成。 +5. 执行生成命令,最终输出终极文件。 + +### make选项 + +make命令格式为:**make** \[_option_\]... \[_target_\]... + +其中: + +_option_ :参数选项。 + +_target_ :Makefile中指定的目标。 + +常用make的 _option_ 取值如[表2](#table261872312343)所示。 + +**表 2** 常用的make选项 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

options取值

+

说明

+

-C dir,--directory=dir

+

指定make在开始运行后的工作目录为dir

+

当存在多个 -C 选项的时候,make 的最终工作目录是第一个目录的相对路径。

+

-d

+

make在执行的过程中打印出所有的调试信息。使用-d选项可以显示make构造依赖关系链、重建目标过程中的所有信息。

+

-e,--environment-overrides

+

使用环境变量定义覆盖Makefile中的同名变量定义。

+

-f file,--file=file--makefile=file

+

指定file文件为make 执行的Makefile文件。

+

-h,--help

+

打印帮助信息。

+

-i,--ignore-errors

+

执行过程中忽略规则命令执行的错误。

+

-k,--keep-going

+

执行命令错误时不终止make的执行,make 尽最大可能执行所有的命令,直至出现致命的错误才终止。

+

-n,--just-print,--dry-run

+

按实际运行时的执行顺序模拟执行命令(包括用@开头的命令),没有实际执行效果,仅仅用于显示执行过程。

+

-o file,--old-file=file,--assume-old=file

+

指定file文件不需要重建,即使它的依赖已经过期,同时不重建此依赖文件的任何目标。

+

-p,--print-data-base

+

命令执行之前,打印出make读取的Makefile的所有数据,同时打印出 make的版本信息。如果只需要打印这些数据信息,可以使用 “make -qp”命令,查看 make 执行之前预设的规则和变量,可使用命令“make -p -f /dev/null”。

+

-r,--no-builtin-rules

+

忽略内嵌的隐含规则的使用,同时忽略所有后缀规则的隐含后缀列表。

+

-R,--no-builtin-variables

+

忽略内嵌的隐含变量。

+

-s,--silent,--quiet

+

取消命令执行过程中的打印。

+

-S,--no-keep-going,--stop

+

取消 "-k" 的选项在递归的 make 过程中子 make 通过 "MAKEFLAGS" 变量继承了上层的命令行选项那个。我们可以在子 make 中使用“-S”选项取消上层传递的 "-k" 选项,或者取消系统环境变量 "MAKEFLAGS" 中 "-k"选项。

+

-t,--touch

+

更新所有的目标文件的时间戳到当前系统时间。防止 make 对所有过时目标文件的重建。

+

-v,--version

+

查看make的版本信息。

+
+ +## Makefile + +make是通过Makefile文件获取如何编译、链接和安装、清理的方法,从而实现将源代码文件生成可执行文件和其他相关文件的工具。因此,Makefile中描述了整个工程的编译和链接等规则,其中包含了哪些文件需要编译,哪些文件不需要编译,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重建等等。Makefile文件让工程编译实现了自动化,不需要每次都手动输入一堆源文件和参数。 + +本章简单介绍Makefile文件的结构和主要内容,更多Makefile的内容请通过**info make**命令查询。 + +### Makefile结构 + +Makefile文件结构如下所示: + +_targets_:_prerequisites_ + +_command_ + +或者是: + +_targets_:_prerequisites_;_command_ + +_command_ + +其中: + +- _targets_ :目标,可以是目标文件、可执行文件或标签。 +- _prerequisites_ :依赖文件,生成targets需要的文件或者是目标。可以是多个,也可以没有。 +- _command_ :make需要执行的命令(任意的 shell 命令)。可以有多条命令,每一条命令占一行。 +- 目标和依赖文件之间要使用“:”分隔,命令的开始一定要按“Tab”。 + +Makefile文件结构表明了输出的目标,输出目标的依赖对象和生成目标需要执行的命令。 + +### Makefile主要内容 + +一个Makefile文件主要由以下内容组成: + +- 显式规则 + + 明确写出来的依赖关系,如要生成的文件,文件的依赖文件,生成的命令。 + +- 隐含规则 + + 由make自动推导的规则,make命令支持自动推导功能。 + +- 变量的定义 +- 文件指示 + + 文件指示包括三部分: + + - include 其他 Makefile,如include xx.md。 + - 选择执行,如\#ifdef。 + - 定义多行命令,如define...endef。 + +- 注释 + + 以 “\#” 开头。 + +## 示例 + +### 使用Makefile实现编译的示例 + +1. cd到代码目录,以目录“~/code”进行举例。 + + ```shell + $ cd ~/code + ``` + +2. 创建1个头文件hello.h和2个函数hello.c、main.c。 + + ```c + $ vi hello.h + $ vi hello.c + $ vi main.c + ``` + + hello.h代码内容示例: + + ```c + #pragma once + #include + void hello(); + ``` + + hello.c代码内容示例: + + ```c + #include "hello.h" + void hello() + { + int i=1; + while(i<5) + { + printf("The %dth say hello.\n", i); + i++; + } + } + + ``` + + main.c代码内容示例: + + ```c + #include "hello.h" + #include + int main() + { + hello(); + return 0; + } + ``` + +3. 创建Makefile文件。 + + ```shell + $ vi Makefile + ``` + + Makefile文件内容示例: + + ```text + main:main.o hello.o + gcc -o main main.o hello.o + main.o:main.c + gcc -c main.c + hello.o:hello.c + gcc -c hello.c + clean: + rm -f hello.o main.o main + ``` + +4. 执行make命令。 + + ```shell + $ make + ``` + + 命令执行后,会打印Makefile中执行的命令。如果不需要打印该信息,可以在执行make命令时加上参数-s。 + + gcc -c main.c + + gcc -c hello.c + + gcc -o main main.o hello.o + +5. 执行./main目标。 + + ```shell + $ ./main + ``` + + 命令执行后,打印如下信息: + + The 1th say hello. + + The 2th say hello. + + The 3th say hello. + + The 4th say hello. diff --git a/docs/zh/server/development/fangtian/_toc.yaml b/docs/zh/server/development/fangtian/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..166c8c4e4016ad732d95b42bf7d715c965802033 --- /dev/null +++ b/docs/zh/server/development/fangtian/_toc.yaml @@ -0,0 +1,9 @@ +isManual: true +label: '' +sections: + - label: 安装与部署 + href: ./fangtian_environment_configuration.md + - label: Linux Wayland 应用及鸿蒙应用的支持 + href: ./fangtian_for_linux_waylan_and_openharmony_applications.md + - label: FangTian 视窗引擎指南 + href: ./overview.md diff --git a/docs/zh/server/development/fangtian/fangtian_environment_configuration.md b/docs/zh/server/development/fangtian/fangtian_environment_configuration.md new file mode 100644 index 0000000000000000000000000000000000000000..11cf1094eb61420e589a0bcce3a97249f247fdef --- /dev/null +++ b/docs/zh/server/development/fangtian/fangtian_environment_configuration.md @@ -0,0 +1,85 @@ +# 安装与部署 + +本章介绍在 openEuler 中安装 FangTian 的方法。 + +## 软硬件要求 + +### 硬件要求 + +当前仅支持 x86和 AArch64 架构。 + +### 软件要求 + +操作系统:openEuler 22.03 LTS SP4 + +### 环境准备 + +安装 openEuler 系统,安装方法参考《[openEuler 安装指南](./../Installation/installation.md)》。 + +### FangTian 软件包安装 + + x86架构下: + + ```shell + sudo dnf install ft_multimedia ft_mmi ft_flutter ft_engine arkui-linux ft_utils + sudo dnf install ft_multimedia-devel ft_mmi-devel ft_flutter-devel ft_engine-devel + ``` + + AArch64架构下: + + ```shell + sudo dnf install ft_multimedia ft_mmi ft_flutter ft_engine ft_utils + sudo dnf install ft_multimedia-devel ft_mmi-devel ft_flutter-devel ft_engine-devel + ``` + +## 启动引擎 + +- 系统服务samgr的启动 + + 预设置:安装 binder,ashmem 等。 + + ```shell + sudo /usr/share/sa/pre_oneshot_samgr + ``` + + 可以直接拉起samgr。 + + ```shell + mkdir -p ~/tmp + sudo samgr > ~/tmp/samgr.log 2>&1 & + ``` + + 或者,自行配置为 service 再启动服务。 + + ```shell + sudo systemctl restart samgr + ``` + +- 引擎sa的启动 + + ```shell + sa_main /system/profile/ft/ft.xml > ~/tmp/ftsa.log 2>&1 & + ``` + + > 说明 + > + > - sa 代表一种系统能力,一个进程可包含多个 sa。ft.xml 配置了多个 sa,共同组成进程 ft。关于 samgr 及 sa 概念可以参考 OpenHarmony。 + > - 关于 sa 的配置 xml 及 sa_main samgr 均已在软件包安装时自动部署。 + +## 基于 FangTian 做简单 GUI 应用开发运行 + +C++ GUI 简单应用《[示例参考](https://gitee.com/openeuler/ft_engine/blob/master/samples/)》。 + +运行: + +```shell +desktop & +``` + +结果如下: + +![](./figures/desktop_simple_apps.png) + + > 说明 + > + > 开发者可以查看[FT接口](https://gitee.com/openeuler/ft_engine/wikis/1.0-alpha%E6%8E%A5%E5%8F%A3/1.0-alpha%20Interface%20Overview)进行应用的开发。 diff --git a/docs/zh/server/development/fangtian/fangtian_for_linux_waylan_and_openharmony_applications.md b/docs/zh/server/development/fangtian/fangtian_for_linux_waylan_and_openharmony_applications.md new file mode 100644 index 0000000000000000000000000000000000000000..9723d13c9d738ebedd84ca3f647ee70540c6ae0b --- /dev/null +++ b/docs/zh/server/development/fangtian/fangtian_for_linux_waylan_and_openharmony_applications.md @@ -0,0 +1,74 @@ +# Linux Wayland 应用及鸿蒙应用的支持 + +FangTian 视窗引擎融合了多个应用生态,可支持 Linux、鸿蒙应用在 openEuler 同时运行。 + +## Wayland应用的支持 + +### Wayland协议 + +FangTian 为了支持 Linux 原生应用,对 Wayland 应用做了兼容。由于 Wayland 协议庞杂,FangTian 当前主要兼容了 Core/Stable/Unstable 等。 + +### 应用运行 + +1. 在启动[引擎](./FangTian环境配置.md#启动引擎)之后,启动 wayland 适配器的 sa。 + + ```shell + mkdir -p ~/tmp + sa_main /system/profile/ft/ft_wl.xml > ~/tmp/ftwlsa.log 2>&1 & + ``` + +2. 配置 wl 环境。 + + ```shell + export XDG_SESSION_TYPE=wayland + export WAYLAND_DISPLAY="wayland-0" + export QT_QPA_PLATFORMTHEME=ukui + ``` + +3. Linux Wayland 应用的安装下载。 + + ```shell + sudo dnf install kylin-calculator deepin-terminal + ``` + +4. 运行结果如下 。 + +![](./figures/wayland_apps.png) + +## 鸿蒙应用的支持 + +### ArkUI框架 + +FangTian 当前支持 ArkUI 部分控件,如文本、按钮、图片等。开发者可以基于[DevEco Studio](https://developer.harmonyos.com/cn/develop/deveco-studio/)完成鸿蒙应用的开发。 + +### 应用代码 + +- [电子相册](https://gitee.com/openharmony/codelabs/tree/master/ETSUI/ElectronicAlbum) +- [简易计算器](https://gitee.com/openharmony/codelabs/tree/master/ETSUI/SimpleCalculator) + +### 安装运行 + +1. 从 DevEco Studio 复制应用 hap 到 openEuler 目录下,如`~/apps/tmp`。 + +2. 解压该 hap,如`eletronicAlbum.hap`。 + + ```shell + unzip eletronicAlbum.hap + ``` + 解压之后的路径为`~/apps/tmp/eletronicAlbum`。 + +3. 在启动[引擎](./FangTian环境配置.md#启动引擎)之后,运行 hap。 + + ```shell + hap_executor ~/apps/tmp/eletronicAlbum + ``` + +4. 运行结果如下。 + +![](./figures/arkui_ele.png) + +### 限制条件 + +- 当前 ArkUI 控件支持不全,web、视频类等控件不可用,napi 接口需要自行开发、迁移。 + +- ArkUI 在该版本版本上仅支持 x86 架构。 diff --git a/docs/zh/server/development/fangtian/figures/arkui_ele.png b/docs/zh/server/development/fangtian/figures/arkui_ele.png new file mode 100644 index 0000000000000000000000000000000000000000..d2c8010cddaa99a852c072f7852f51e48c9b9675 Binary files /dev/null and b/docs/zh/server/development/fangtian/figures/arkui_ele.png differ diff --git a/docs/zh/server/development/fangtian/figures/desktop_simple_apps.png b/docs/zh/server/development/fangtian/figures/desktop_simple_apps.png new file mode 100644 index 0000000000000000000000000000000000000000..cf625a544183dafb9747ececc544722dd1e42f87 Binary files /dev/null and b/docs/zh/server/development/fangtian/figures/desktop_simple_apps.png differ diff --git a/docs/zh/server/development/fangtian/figures/wayland_apps.png b/docs/zh/server/development/fangtian/figures/wayland_apps.png new file mode 100644 index 0000000000000000000000000000000000000000..bb62dd4f352625b273b22b8681a9de34123eb0ca Binary files /dev/null and b/docs/zh/server/development/fangtian/figures/wayland_apps.png differ diff --git a/docs/zh/server/development/fangtian/overview.md b/docs/zh/server/development/fangtian/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..b303fcdf1e0174822b99c2accb6b4e8d77d987cf --- /dev/null +++ b/docs/zh/server/development/fangtian/overview.md @@ -0,0 +1,8 @@ +# FangTian 视窗引擎指南 + +本文档介绍基于 openEuler 系统的 FangTian 视窗引擎的安装及开发使用指南。 + +本文档适用于使用 openEuler 系统并希望了解和使用 FangTian 视窗引擎的社区开发者、开源爱好者以及相关合作伙伴。使用人员需要具备以下经验和技能: + +* 熟悉 Linux 基本操作。 +* 了解 Linux GUI 开发、ArkUI 开发。 diff --git a/docs/zh/server/diversified_computing/dpu_offload/_toc.yaml b/docs/zh/server/diversified_computing/dpu_offload/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4c7e4732f1b09097d3ec38f8a4ec4bcb5ce2daf8 --- /dev/null +++ b/docs/zh/server/diversified_computing/dpu_offload/_toc.yaml @@ -0,0 +1,10 @@ +isManual: true +label: '' +sections: + - label: '**1** 容器管理面无感卸载' + href: >- + ./container_management_plane_direct_connection_aggregation_environment_establishment.md + - label: '**1** 硬件准备' + href: ./libvirt_direct_connection_aggregation_environment_establishment.md + - label: qtfs + href: ./qtfs_architecture_and_usage.md diff --git a/docs/zh/server/diversified_computing/dpu_offload/config/client.json b/docs/zh/server/diversified_computing/dpu_offload/config/client.json new file mode 100644 index 0000000000000000000000000000000000000000..4aedf4c846914a6bc34dff1988c7794ddb1fa521 --- /dev/null +++ b/docs/zh/server/diversified_computing/dpu_offload/config/client.json @@ -0,0 +1,5 @@ +{ + "Protocol": "tcp", + "Ipaddr" : "192.168.10.11", + "Port" : "7777" +} diff --git a/docs/zh/server/diversified_computing/dpu_offload/config/prepare.sh b/docs/zh/server/diversified_computing/dpu_offload/config/prepare.sh new file mode 100644 index 0000000000000000000000000000000000000000..996a453b0da8632bfad82e08440c143b7e98032d --- /dev/null +++ b/docs/zh/server/diversified_computing/dpu_offload/config/prepare.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +mkdir -p /another_rootfs/var/run/docker/containerd +iptables -t nat -N DOCKER + +echo "---------insmod qtfs ko----------" +# TEST_MODE: IP +insmod ${YOUR_PATH}/qtfs.ko qtfs_server_ip=${YOUR_SERVER_IP} qtfs_log_level=INFO #此处需要自行修改ip, 以及ko的路径 +nohup ${YOUR_PATH}/udsproxyd 1 ${YOUR_CLIENT_IP} 12121 ${YOUR_SERVER_IP} 12121 2>&1 & + +# TEST_MODE: vsock +# insmod ${YOUR_PATH}/qtfs.ko qtfs_server_vsock_cid=${YOUR_SERVER_VSOCK_CID} qtfs_log_level=INFO #此处需要自行修改ip, 以及ko的路径 +# nohup ${YOUR_PATH}/udsproxyd 1 ${YOUR_CLIENT_VSOCK_CID} 12121 ${YOUR_SERVER_VSOCK_CID} 12121 2>&1 & + +qtcfg -w udsconnect -x /var/run/rexec +qtcfg -w udsconnect -x /run/rexec + +mkdir /another_rootfs/local_proc/ +mount -t proc proc /another_rootfs/local_proc/ +mount --bind /var/run/ /another_rootfs/var/run/ +mount --bind /var/lib/ /another_rootfs/var/lib/ +mount --bind /etc /another_rootfs/etc +mount -t devtmpfs devtmpfs /another_rootfs/dev/ +mount -t sysfs sysfs /another_rootfs/sys +mkdir -p /another_rootfs/sys/fs/cgroup +mount -t tmpfs tmpfs /another_rootfs/sys/fs/cgroup +list="perf_event freezer files net_cls,net_prio hugetlb pids rdma cpu,cpuacct memory devices blkio cpuset" +for i in $list +do + echo $i + mkdir -p /another_rootfs/sys/fs/cgroup/$i + mount -t cgroup cgroup -o rw,nosuid,nodev,noexec,relatime,$i /another_rootfs/sys/fs/cgroup/$i +done + +mount -t qtfs -o proc /proc /another_rootfs/proc +echo "proc" +mount -t qtfs /sys /another_rootfs/sys +echo "cgroup" + +mkdir -p /another_rootfs/var/lib/docker/containers +mkdir -p /another_rootfs/var/lib/docker/containerd +mkdir -p /another_rootfs/var/lib/docker/overlay2 +mkdir -p /another_rootfs/var/lib/docker/image +mkdir -p /another_rootfs/var/lib/docker/tmp +mount -t qtfs /var/lib/docker/containers /another_rootfs/var/lib/docker/containers +mount -t qtfs /var/lib/docker/containerd /another_rootfs/var/lib/docker/containerd +mount -t qtfs /var/lib/docker/overlay2 /another_rootfs/var/lib/docker/overlay2 +mount -t qtfs /var/lib/docker/image /another_rootfs/var/lib/docker/image +mount -t qtfs /var/lib/docker/tmp /another_rootfs/var/lib/docker/tmp +mkdir -p /another_rootfs/run/containerd/io.containerd.runtime.v1.linux/ +mount -t qtfs /run/containerd/io.containerd.runtime.v1.linux/ /another_rootfs/run/containerd/io.containerd.runtime.v1.linux/ +mkdir -p /another_rootfs/var/run/docker/containerd +mount -t qtfs /run/docker/containerd /another_rootfs/run/docker/containerd +mkdir -p /another_rootfs/var/lib/containerd/io.containerd.runtime.v1.linux +mount -t qtfs /var/lib/containerd/io.containerd.runtime.v1.linux /another_rootfs/var/lib/containerd/io.containerd.runtime.v1.linux + +qtcfg -w udsconnect -x /another_rootfs/var/run/rexec +qtcfg -w udsconnect -x /another_rootfs/run/rexec diff --git a/docs/zh/server/diversified_computing/dpu_offload/config/rexec.service b/docs/zh/server/diversified_computing/dpu_offload/config/rexec.service new file mode 100644 index 0000000000000000000000000000000000000000..52c9d7993d38a0d9c057a92388e026354904859e --- /dev/null +++ b/docs/zh/server/diversified_computing/dpu_offload/config/rexec.service @@ -0,0 +1,12 @@ +[Unit] +Description=Rexec_server Service +After=network.target + +[Service] +Type=simple +ExecStart=/usr/bin/rexec_server +ExecReload=/bin/kill -s HUP $MAINPID +KillMode=process + +[Install] +WantedBy=multi-user.target diff --git a/docs/zh/server/diversified_computing/dpu_offload/config/server.json b/docs/zh/server/diversified_computing/dpu_offload/config/server.json new file mode 100644 index 0000000000000000000000000000000000000000..1d4a7bbbc1cbf086e18b147f3f27e6a15c2e322e --- /dev/null +++ b/docs/zh/server/diversified_computing/dpu_offload/config/server.json @@ -0,0 +1,5 @@ +{ + "Protocol": "tcp", + "Ipaddr" : "0.0.0.0", + "Port" : "7777" +} diff --git a/docs/zh/server/diversified_computing/dpu_offload/config/server_start.sh b/docs/zh/server/diversified_computing/dpu_offload/config/server_start.sh new file mode 100644 index 0000000000000000000000000000000000000000..fd3655159ddb0fc6069dfa3ab802f4c9f8520c13 --- /dev/null +++ b/docs/zh/server/diversified_computing/dpu_offload/config/server_start.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +modprobe overlay +mkdir /var/lib/docker/containers +mkdir -p /var/lib/docker/containers +mkdir -p /var/lib/docker/containerd +mkdir -p /var/lib/docker/overlay2 +mkdir -p /var/lib/docker/tmp +mkdir -p /var/lib/docker/image +mkdir -p /var/run/docker/containerd +mkdir -p /run/containerd/io.containerd.runtime.v1.linux/ +mkdir -p /var/run/docker/netns +mkdir -p /var/lib/containerd/io.containerd.runtime.v1.linux/ +mkdir -p /run/user/0 +touch /var/run/docker/netns/default +# this should be done once +mount --bind /proc/1/ns/net /var/run/docker/netns/default + +function TaskClean() +{ + echo "Now do task clean..." + pkill engine + rmmod qtfs_server + echo "TaskClean done" +} + +trap "TaskClean exit" SIGINT + +mkdir -p /var/run/docker/containerd +mkdir -p /run/containerd/io.containerd.runtime.v1.linux/ + +# TEST_MODE: IP +insmod ${YOUR_PATH}/qtfs_server.ko qtfs_server_ip=${YOUR_SERVER_IP} qtfs_log_level=ERROR +nohup ${YOUR_PATH}/engine 16 1 ${YOUR_SERVER_IP} 12121 ${YOUR_CLIENT_IP} 12121 2>&1 & + +# TEST_MODE: vsock +# insmod ${YOUR_PATH}/qtfs_server.ko qtfs_server_vsock_cid=${YOUR_SERVER_VSOCK_CID} qtfs_log_level=ERROR +# nohup ${YOUR_PATH}/engine 16 1 ${YOUR_SERVER_VSOCK_CID} 12121 ${YOUR_CLIENT_VSOCK_CID} 12121 2>&1 & + +sleep 2 + +qtcfg -w udsconnect -x /var/run/rexec +qtcfg -w udsconnect -x /run/rexec +qtcfg -w udsconnect -x /var/run/containerd diff --git a/docs/zh/server/diversified_computing/dpu_offload/config/whitelist b/docs/zh/server/diversified_computing/dpu_offload/config/whitelist new file mode 100644 index 0000000000000000000000000000000000000000..70ca91b8b6ca3a37354f7452c57dc9a413373aa3 --- /dev/null +++ b/docs/zh/server/diversified_computing/dpu_offload/config/whitelist @@ -0,0 +1,15 @@ +kill +taskset +qemu-kvm +rexec_shim +/usr/bin/taskset +/usr/bin/kill +/usr/bin/qemu-kvm +/usr/bin/rexec_shim +/usr/bin/dockerd +/usr/bin/containerd +/usr/bin/rexec_shim +/usr/bin/containerd-shim +/usr/bin/containerd-real +/usr/bin/runc +/usr/bin/modprobe diff --git a/docs/zh/server/diversified_computing/dpu_offload/container_management_plane_direct_connection_aggregation_environment_establishment.md b/docs/zh/server/diversified_computing/dpu_offload/container_management_plane_direct_connection_aggregation_environment_establishment.md new file mode 100644 index 0000000000000000000000000000000000000000..2bffc55992344b933451021e0d5d8c5e415e7909 --- /dev/null +++ b/docs/zh/server/diversified_computing/dpu_offload/container_management_plane_direct_connection_aggregation_environment_establishment.md @@ -0,0 +1,452 @@ +# **1** 容器管理面无感卸载 + +## **1.1** 简介 + +容器管理面,即dockerd、containerd、isulad等容器的管理工具,而容器管理面卸载,即是将容器管理面卸载到与容器所在机器(以下称为HOST)之外的另一台机器(以下称为DPU)上运行。 + +我们使用qtfs将HOST上一些与容器运行相关的目录挂载到DPU上,使得容器管理面工具可以访问到这些目录,为容器准备运行所需要的环境。此外,因为需要挂载远端的proc和sys文件系统,为避免对当前系统运行造成影响,可以创建一个专门的rootfs以作为dockerd、contianerd的运行环境(以下称为`/another_rootfs`)。 + +通过rexec执行容器的拉起、删除等操作,可以将容器管理面和容器分离在不同的两台机器上,对容器进行远程管理。无感卸载的验证可以使用下述两种模式。 + +## 1.1.1 测试模式 + +需准备2台物理机(或虚拟机),两台机器之间网络互通。 + +其中一台作为DPU模拟,另一台作为HOST模拟。在本文档中用DPU和HOST指代这两台服务器。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>测试模式因为会暴露网络端口且不做连接认证,存在网络安全风险,仅能用于内部测试验证,不要用于实际生产环境。 +>实际生产环境中应使用封闭通信方式,以防止外界连接风险,如下述vsock通信模式。 + +## 1.1.2 vsock模式 + +需要DPU和HOST通过virtio提供vsock通信方式。 + +文档当前仅描述基于测试模式的方法,下面的内容依然默认使用测试模式。如果验证环境支持vsock通信(虚拟化环境或支持vsock的DPU-HOST环境),下述测试步骤仍适用,只需要将测试中的IP网络地址修改为vsock cid即可(相关二进制编译过程也无需使用TEST_MODE)。 + +# **2** 环境搭建 + +## **2.1** qtfs文件系统部署 + +可参考[qtfs主页](https://gitee.com/openeuler/dpu-utilities/tree/master/qtfs)。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>如果使用测试模式,需要在qtfs客户端及服务端ko编译时指定qtfs_TEST_MODE=1,vsock模式无需指定。 + +qtfs建联需要关闭DPU和HOST侧的防火墙,或在防火墙中开放相关网络端口号。 + +## **2.2** UDSPROXYD服务部署 + +### 2.2.1 简介 + +udsproxyd是一个跨主机的unix domain socket代理服务,需要分别部署在HOST和DPU上,在HOST和DPU上的udsproxyd组件是对等的关系,可以实现分布在HOST与DPU上的2个进程之间使用标准uds进行通信,通信进程是无感的,即如果这两个进程在同一主机内通过uds正常通信的功能,拉远到HOST和DPU之间也可以,不需要做代码适配。udsproxyd作为一个跨主机的unix socket服务,可以用`LD_PRELOAD=libudsproxy.so`动态库截获的方式对接使用,也可以通过提前进行udsconnect白名单配置无感应用,白名单配置具体有两种方式,将在后面详述。 + +### 2.2.2 部署方式 + +首先,在dpu-utilities工程内编译udsproxyd: + +```bash +cd qtfs/ipc + +make -j UDS_TEST_MODE=1 && make install +``` +>![](./public_sys-resources/icon-note.gif) **说明:** +>如果使用vsock模式,编译时不需要设置UDS_TEST_MODE + +当前最新版本下,qtfs server侧的engine服务已经整合了udsproxyd的能力,所以server侧需要再额外启动udsproxyd。client侧则单独拉起udsproxyd服务: + +```bash +nohup /usr/bin/udsproxyd 2>&1 & +``` + +参数解释: + +```bash +thread num: 线程数量,目前只支持单线程,填1 + +addr: 本机使用的ip,如果使用vsock通信模式则为cid + +port:本机占用的port + +peer addr: udsproxyd对端的ip,如果使用vsock模式则为cid + +peer port: 对端port +``` + +示例: + +```bash +nohup /usr/bin/udsproxyd 1 192.168.10.10 12121 192.168.10.11 12121 2>&1 & +``` + +如果未拉起qtfs的engine服务,想单独测试udsproxyd,则在server端也对等拉起udsproxyd即可: + +```bash +nohup /usr/bin/udsproxyd 1 192.168.10.11 12121 192.168.10.10 12121 2>&1 & +``` + +### 2.2.3 应用方式 + +#### 2.2.3.1 独立使用udsproxyd服务 + +需要在使用uds服务的unix socket应用程序的client端进程启动时添加LD_PRELOAD=libudsproxy.so环境变量,以接管glibc的connect api进行uds对接,或者通过qtcfg增加udsconnect白名单的方式指定系统接管特定目录下的uds连接。 + +#### 2.2.3.2 无感使用udsproxyd服务 + +首先为qtfs配置uds服务的白名单,这里说的白名单是unix socket的server端bind的sock文件地址,提供两种方式供选择: + +* 通过配置工具qtcfg加载,进入qtfs/qtinfo目录编译工具: + +在qtfs的client端执行 + +```bash +make role=client +make install +``` +在qtfs的server端执行 + +```bash +make role=server +make install +``` +配置工具将会自动安装,然后使用qtcfg命令配置白名单,假设需要增加的白名单为"/var/lib/docker",输入: + +```bash +qtcfg -w udsconnect -x /var/lib/docker +``` +查询白名单为: + +```bash +qtcfg -w udsconnect -z +``` +删除白名单为: + +```bash +qtcfg -w udsconnect -y 0 +``` +删除白名单时,参数为查询白名单时列出来的index序号。 + +* 通过配置文件增加,这需要在qtfs或qtfs_server内核模块加载前配置,通过内核模块初始化时读取该文件进行白名单配置。 + +在/etc/qtfs/whitelist文件中增加如下字段: + +```bash +[Udsconnect] +/var/lib/docker +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>白名单是为了防止不相干的unix socket链接也进行远程连接产生错误,或者浪费不必要的资源,所以白名单尽量设置得精确一些,比如本文中针对容器场景设置为/var/lib/docker比较好,而直接将/var/lib/或/var/或直接将根目录加入的做法是有较大风险和系统影响的。 + +## **2.3** REXEC服务部署 + +### 2.3.1 简介 + +rexec是一个用c语言开发的远程执行组件,分为rexec client和rexec server。server端为一个常驻服务进程,client端为一个二进制文件,client端被执行后会基于udsproxyd服务与server端建立uds连接,并由server常驻进程在server端拉起指定程序。在容器管理面卸载中,dockerd卸载到DPU上,当它需要在HOST拉起容器业务进程时调用rexec client进行远程拉起。 + +### 2.3.2 部署方法 + +#### 2.3.2.1 配置环境变量与白名单 + +在HOST侧配置rexec server的白名单,将文件whitelist放置在/etc/rexec/目录下并修改权限为只读: + +```bash +chmod 400 /etc/rexec/whitelist +``` + +下载dpu-utilities代码后,进入qtfs/rexec主目录下,执行:`make && make install`即可安装rexec所需全部二进制到/usr/bin目录下,包括了:`rexec、rexec_server`两个二进制可执行文件。 + +在server端启动rexec_server服务之前,检查是否存在/var/run/rexec目录,没有则创建: + +```bash +mkdir /var/run/rexec +``` + +rexec服务运行时底层通信使用unix socket,因此跨主机的rexec和rexec_server通信依赖上述udsproxyd服务,并且需要在udsproxy中添加相关白名单: +```bash +qtcfg -w udsconnect -x /var/run/rexec +``` + +#### 2.3.2.2 服务方式 + +server端可以通过两种方式拉起rexec_server服务。 + +- 方式1: +配置systemd服务 + +在/usr/lib/systemd/system/下增加rexec.service文件,内容如下: + +[rexec.service](./config/rexec.service) + +然后通过systemctl管理rexec服务。 + +首次配置服务时: + +```bash +systemctl daemon-reload +systemctl enable --now rexec +``` + +后续重启新启动服务: + +```bash +systemctl stop rexec +systemctl start rexec +``` + +- 方式2: +手动后台拉起 + +```bash +nohup /usr/bin/rexec_server 2>&1 & +``` + +## **3** 管理面组件改动 + +### **3.1** dockerd相关改动介绍 + +对dockerd的改动是基于18.09版本的。 + +在docker中,暂时绕过了网络部分,管理面卸载依赖容器网络组件做针对性适配,本测试方案暂不涉及。 + +对docker的改动可以参考[该目录](https://gitee.com/openeuler/dpu-utilities/tree/master/usecases/transparent-offload/patches/docker)下的patch文件。 + +### **3.2** containerd相关改动介绍 + +对于containerd的改动是基于containerd-1.2-rc.1版本的。 + +对containerd的改动可以参考[该目录](https://gitee.com/openeuler/dpu-utilities/tree/master/usecases/transparent-offload/patches/containerd)下的patch文件。 + +# **4** 容器管理面卸载操作指南 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +> 1. 在HOST端和DPU端,都要拉起rexec_server; +> 2. HOST端拉起rexec_server,主要是用于DPU创建容器时用rexec拉起containerd-shim; +> 3. DPU拉起rexec_server,则是为了执行containerd-shim对dockerd和containerd的调用。 + +## **4.1** 准备dockerd和containerd运行的rootfs + +> 注:本步骤仅需在DPU上执行的。 + +在下面的文档中,我们将这个rootfs称为`/another_rootfs`(具体的目录名称,可以根据自己的需求进行调整)。 + +### 4.1.1 使用openEuler官方qcow2镜像构造rootfs + +建议用openEuler官方提供的qcow2镜像,来准备一个新的rootfs: + +#### 4.1.1.1 工具安装 + +需要用yum安装xz、kpartx、qemu-img + +``` bash +yum install xz kpartx qemu-img +``` + +#### 4.1.1.2 下载qcow2镜像 + +在openEuler官网获取[22.03版本openEuler-x86虚拟机镜像](https://repo.openeuler.org/openEuler-22.03-LTS/virtual_machine_img/x86_64/openEuler-22.03-LTS-x86_64.qcow2.xz)(X86架构),或者[22.03版本openEuler-arm64虚拟机镜像](https://repo.openeuler.org/openEuler-22.03-LTS/virtual_machine_img/aarch64/openEuler-22.03-LTS-aarch64.qcow2.xz)(ARM架构)。 + +#### 4.1.1.3 解压qcow2镜像 + +使用xz -d解压为openEuler-22.03-LTS-.qcow2文件, 以x86镜像为例 + +``` bash +xz -d openEuler-22.03-LTS-x86_64.qcow2.xz +``` +#### 4.1.1.4 挂载qcow2镜像并拷贝文件 + +1. 使用`modprobe nbd maxpart=<任意数字>`来加载nbd模块 +2. `qemu-nbd -c /dev/nbd0 <虚拟机镜像的路径>` +3. 创建任意文件夹`/random_dir` +4. 执行挂载`mount /dev/nbd0p2 /random_dir` +5. 拷贝文件 + +``` bash +mkdir /another_rootfs +cp -r /random_dir/* /another_rootfs/ +``` + +此时,虚拟机镜像遍已经挂载到当前文件夹中了。 + +#### 4.1.1.5 qcow2卸载 + +在准备好rootfs后,需要卸载qcow2文件,此时,需要执行如下指令: + +``` bash +umount /random_dir +qemu-nbd -d /dev/nbd0 +``` + +### 4.1.2 向another_rootfs中安装软件 + +1. 将根目录中的`/etc/resolv.conf`拷贝到`/another_rootfs/etc/resolv.conf` +2. 清空`/another_rootfs/etc/yum.repos.d`中的文件,并将`/etc/yum.repos.d/`中的文件拷贝到`/another_rootfs/etc/yum.repos.d` +3. 使用`yum install <软件包> --installroot=/another_rootfs`来安装软件包 + +``` +yum install --installroot=/another_rootfs iptables +``` + +## **4.2** 在Host侧拉起qtfs_server + +需要将rexec、containerd-shim、runc、engine拷贝到`/usr/bin`下面,这里要注意权限问题,rexec、engine已提供,docker相关二进制根据上述第三章相关patch编译生成。 + +### 4.2.1 插入qtfs_server驱动 + +创建容器管理面所需要的文件夹,然后插入qtfs_server.ko,并拉起engine进程。 + +可以使用[这个脚本](./config/server_start.sh)来执行此操作,如果执行错误,可能需要dos2unix来将此脚本的格式转换(如下所有脚本皆同理)。 + +>注意,使用实际qtfs路径替换脚本中的模块及二进制路径。 + +此外在HOST端,还需要创建执行rexec指令的脚本`/usr/bin/dockerd`以及`/usr/bin/containerd`: + +/usr/bin/dockerd: + +``` bash +#!/bin/bash +rexec /usr/bin/dockerd $* +``` +/usr/bin/containerd: + +``` bash +#!/bin/bash +exec /usr/bin/containerd $* +``` + +在创建完成后,需要用chmod为这两个脚本赋予执行权限 + +``` bash +chmod +x /usr/bin/containerd +chmod +x /usr/bin/dockerd +``` + +## **4.3** 挂载Host上依赖目录至DPU + +### 4.3.1 安装软件包 + +#### 4.3.2.1 在根目录的安装 + +DPU根目录中(another_rootfs之外):安装iptables和libtool、libcgroup、tar,可以通过yum直接直接安装。 + +``` +yum install iptables libtool libcgroup tar +``` + +也可以下载其所有的依赖包之后,用rpm指令安装,iptables以及libtool的包及依赖包链接如下:[iptables](https://repo.openeuler.org/openEuler-22.03-LTS/everything/x86_64/Packages/iptables-1.8.7-5.oe2203.x86_64.rpm), [libtool](https://repo.openeuler.org/openEuler-22.03-LTS/everything/x86_64/Packages/libtool-2.4.6-34.oe2203.x86_64.rpm), [emacs](https://repo.openeuler.org/openEuler-22.03-LTS/everything/x86_64/Packages/emacs-27.2-3.oe2203.x86_64.rpm), [autoconf](https://repo.openeuler.org/openEuler-22.03-LTS/everything/x86_64/Packages/autoconf-2.71-2.oe2203.noarch.rpm), [automake](https://repo.openeuler.org/openEuler-22.03-LTS/everything/x86_64/Packages/automake-1.16.5-3.oe2203.noarch.rpm), [libtool-ltdl](https://repo.openeuler.org/openEuler-22.03-LTS/everything/x86_64/Packages/libtool-ltdl-2.4.6-34.oe2203.x86_64.rpm), [m4](https://repo.openeuler.org/openEuler-22.03-LTS/everything/x86_64/Packages/m4-1.4.19-2.oe2203.x86_64.rpm), [tar](https://repo.openeuler.org/openEuler-22.03-LTS/everything/x86_64/Packages/tar-1.34-1.oe2203.x86_64.rpm), [libcgroup](https://repo.openeuler.org/openEuler-22.03-LTS/everything/x86_64/Packages/libcgroup-0.42.2-1.oe2203.x86_64.rpm)。 + +在下载上述软件包之后,执行命令 + +``` bash +rpm -ivh iptables-1.8.7-5.oe2203.x86_64.rpm libtool-2.4.6-34.oe2203.x86_64.rpm emacs-27.2-3.oe2203.x86_64.rpm autoconf-2.71-2.oe2203.noarch.rpm automake-1.16.5-3.oe2203.noarch.rpm libtool-ltdl-2.4.6-34.oe2203.x86_64.rpm m4-1.4.19-2.oe2203.x86_64.rpm tar-1.34-1.oe2203.x86_64.rpm libcgroup-0.42.2-1.oe2203.x86_64.rpm +``` + +#### 4.3.2.2 another_rootfs环境配置 + +1. 在`/another_rootfs`中,需要安装iptables,这个是dockerd启动所必须的依赖 + +使用`yum install <软件包> --installroot=/another_rootfs`来安装软件包 + +2. 并需要将rexec拷贝到`/another_rootfs/usr/bin`下面,并对其添加可执行权限 + +``` bash +cp rexec /another_rootfs/usr/bin +chmod +x /another_rootfs/usr/bin/rexec +``` + +3. 另外,将根据社区docker源码与前述patch编译出来的containerd和dockerd拷贝到`/another_rootfs/usr/bin`下面, 将docker拷贝到`/usr/bin`下 + +``` bash +cp {YOUR_PATH}/dockerd /another_rootfs/usr/bin +cp {YOUR_PATH}/containerd /another_rootfs/usr/bin +cp {YOUR_PATH}/docker /usr/bin +``` + +4. 在`/another_rootfs`中删除/another_rootfs/usr/sbin/modprobe + +``` bash +rm -f /another_rootfs/usr/sbin/modprobe +``` + +5. 在`/another_rootfs`中创建如下三个脚本 + +containerd-shim创建路径:`/another_rootfs/usr/local/bin/containerd-shim` + +``` bash +#!/bin/bash +/usr/bin/rexec /usr/bin/containerd-shim $* +``` + +remote_kill创建路径:`/another_rootfs/usr/bin/remote_kill` + +``` bash +#!/bin/bash +/usr/bin/rexec /usr/bin/kill $* +``` + +modprobe创建路径:`/another_rootfs/usr/sbin/modprobe` + +``` bash +#!/bin/bash +/usr/bin/rexec /usr/sbin/modprobe $* +``` + +在创建完成后,为其赋予执行权限 + +``` bash +chmod +x /another_rootfs/usr/local/bin/containerd-shim +chmod +x /another_rootfs/usr/bin/remote_kill +chmod +x /another_rootfs/usr/sbin/modprobe +``` +#### 4.3.2.3 目录挂载 + +在DPU上执行此脚本[prepare.sh](./config/prepare.sh) ,将dockerd、containerd所需要的HOST目录挂载到DPU。 + +并且,需要确保在该脚本被挂载的远程目录在HOST和DPU都存在。 + +## **4.4** 拉起dockerd和containerd + +在DPU上,打开两个窗口,并且都chroot到dockerd和containerd运行所需的/another_rootfs。 + +``` bash +chroot /another_rootfs +``` + +在两个窗口中用如下的命令先拉起containerd,后拉起dockerd。 + +**containerd** +``` bash +#!/bin/bash +SHIM_HOST=${YOUR_SERVER_IP} containerd --config /var/run/docker/containerd/containerd.toml --address /var/run/containerd/containerd.sock +``` + +**dockerd** +``` bash +#!/bin/bash +# this need to be done once +/usr/bin/rexec mount -t qtfs /var/lib/docker/overlay2 /another_rootfs/var/lib/docker/overlay2/ +SHIM_HOST=${YOUR_SERVER_IP} /usr/bin/dockerd --containerd /var/run/containerd/containerd.sock -s overlay2 --iptables=false --debug 2>&1 | tee docker.log +``` + +因为我们已经将`/var/run/`和`/another_rootfs/var/run/`绑定在一起,可以在正常的rootfs下,通过docker来访问docker.sock接口,从而管理容器。 + +# **5** 环境恢复 + +如果需要卸载相关的目录,需要先删除已有容器,再关掉containerd、dockerd,并执行如下指令: + +``` bash +for i in `lsof | grep v1.linux | awk '{print $2}'` +do + kill -9 $i +done +mount | grep qtfs | awk '{print $3}' | xargs umount +mount | grep another_rootfs | awk '{print $3}' | xargs umount + +sleep 1 + +umount /another_rootfs/etc +umount /another_rootfs/sys +pkill udsproxyd +rmmod qtfs +``` diff --git a/docs/zh/server/diversified_computing/dpu_offload/figures/arch.png b/docs/zh/server/diversified_computing/dpu_offload/figures/arch.png new file mode 100644 index 0000000000000000000000000000000000000000..b6a7836fd6fab75009e781ac1ed96c73c352f75b Binary files /dev/null and b/docs/zh/server/diversified_computing/dpu_offload/figures/arch.png differ diff --git a/docs/zh/server/diversified_computing/dpu_offload/figures/offload-arch.png b/docs/zh/server/diversified_computing/dpu_offload/figures/offload-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..944900b42c13091e4ec40c6d51dc3c95088aa1b8 Binary files /dev/null and b/docs/zh/server/diversified_computing/dpu_offload/figures/offload-arch.png differ diff --git a/docs/zh/server/diversified_computing/dpu_offload/figures/qtfs-arch.png b/docs/zh/server/diversified_computing/dpu_offload/figures/qtfs-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..40fd7e28707642801ec0b984690a25c08e092ac4 Binary files /dev/null and b/docs/zh/server/diversified_computing/dpu_offload/figures/qtfs-arch.png differ diff --git a/docs/zh/server/diversified_computing/dpu_offload/libvirt_direct_connection_aggregation_environment_establishment.md b/docs/zh/server/diversified_computing/dpu_offload/libvirt_direct_connection_aggregation_environment_establishment.md new file mode 100644 index 0000000000000000000000000000000000000000..fc8f61bb50d268abfaf81d9f69140e96d438794d --- /dev/null +++ b/docs/zh/server/diversified_computing/dpu_offload/libvirt_direct_connection_aggregation_environment_establishment.md @@ -0,0 +1,363 @@ +# **1** 硬件准备 + +## 测试模式 + +需准备2台物理机(虚拟机当前未试过),网络互通。 + +其中一台作为DPU模拟,另一台作为HOST模拟。在本文档中用DPU和HOST指代这两台服务器。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>测试模式因为会暴露网络端口且不做连接认证,存在网络安全风险,仅能用于内部测试验证,不要用于实际生产环境。 +>实际生产环境中应使用封闭通信方式,以防止外界连接风险,如下述vsock通信模式。 + +## vsock模式 + +需要DPU加HOST,且DPU能支持通过virtio提供vsock通信方式。 + +文档当前仅描述基于测试模式的方法,下面的内容依然默认使用测试模式。如果验证环境支持vsock通信(虚拟化环境或支持vsock的DPU-HOST环境),下述测试步骤仍适用,只需要将测试中的IP网络地址修改为vsock cid即可(相关二进制编译过程也无需使用TEST_MODE)。 + +# **2** libvirt卸载架构图 + +![arch](./figures/arch.png) + +# **3** 环境搭建 + +## **3.1** qtfs文件系统部署 + +可参考qtfs主页: + +qtfs建联需要关闭DPU和HOST侧的防火墙,或在防火墙中开放相关网络端口号。 + +## **3.2** UDSPROXYD服务部署 + +### 3.2.1 简介 + +udsproxyd是一个跨主机的unix domain socket代理服务,需要分别部署在HOST和DPU上,在HOST和DPU上的udsproxyd组件是对等的关系,可以实现分布在HOST与DPU上的2个进程之间的uds通信,通信进程是无感的,也就是说如果这两个进程在同一主机内通过uds正常通信的功能,拉远到HOST和DPU之间也可以,不需要做代码适配,只需要作为client的一端加一个环境变量`LD_PRELOAD=libudsproxy.so`。udsproxyd作为一个跨主机的unix socket服务,本身可以用LD_PRELOAD=libudsproxy.so的方式对接使用,在qtfs的支持下也可以无感应用,这需要提前做好白名单相关配置,具体有两种方式,将在后面详述。 + +### 3.2.2 部署方式 + +首先,在dpu-utilities工程内编译udsproxyd: + +```bash +cd qtfs/ipc + +make -j UDS_TEST_MODE=1 && make install +``` +>如果使用vsock模式,编译时不需要设置UDS_TEST_MODE。 + +当前最新版本下,qtfs server侧的engine服务已经整合了udsproxyd的能力,所以server侧若部署了qtfs后不需要再额外启动udsproxyd。client侧则单独拉起udsproxyd服务: + +```bash +nohup /usr/bin/udsproxyd 2>&1 & +``` + +参数解释: + +```bash +thread num: 线程数量,目前只支持单线程,填1 + +addr: 本机使用的ip,如果使用vsock通信模式则为cid + +port:本机占用的port + +peer addr: udsproxyd对端的ip,如果使用vsock模式则为cid + +peer port: 对端port +``` + +示例: + +```bash +nohup /usr/bin/udsproxyd 1 192.168.10.10 12121 192.168.10.11 12121 2>&1 & +``` + +如果未拉起qtfs的engine服务,想单独测试udsproxyd,则在server端也对等拉起udsproxyd即可: + +```bash +nohup /usr/bin/udsproxyd 1 192.168.10.11 12121 192.168.10.10 12121 2>&1 & +``` + +### 3.2.3 应用方式 + +#### 3.2.3.1 独立使用udsproxyd服务 + +需要在使用uds服务的unix socket应用程序的client端进程启动时添加LD_PRELOAD=libudsproxy.so环境变量,以接管glibc的connect api进行uds对接,在libvirt卸载场景中可以将libudsproxy.so拷贝到libvirt的chroot目录下的/usr/lib64中以提供给libvirtd服务使用,这一步在后面介绍。 + +#### 3.2.3.2 无感使用udsproxyd服务 + +首先为qtfs配置uds服务的白名单,这里说的白名单是unix socket的server端bind的sock文件地址,例如libvirt的虚拟机建立的unix socket的服务端文件地址都在/var/lib/libvirt下,则我们需要增加一条白名单路径为/var/lib/libvirt/,提供两种方式供选择: + +* 通过配置工具qtcfg加载,进入qtfs/qtinfo目录编译工具: + +在qtfs的client端执行 + +```bash +make role=client +make install +``` +在qtfs的server端执行 + +```bash +make role=server +make install +``` +配置工具将会自动安装,然后使用qtcfg命令配置白名单,假设需要增加的白名单为"/var/lib/libvirt/",输入: + +```bash +qtcfg -w udsconnect -x /var/lib/libvirt/ +``` +查询白名单为: + +```bash +qtcfg -w udsconnect -z +``` +删除白名单为: + +```bash +qtcfg -w udsconnect -y 0 +``` +删除白名单时,参数为查询白名单时列出来的index序号。 + +* 通过配置文件增加,这需要在qtfs或qtfs_server内核模块加载前配置,通过内核模块初始化时读取该文件进行白名单配置。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>白名单是为了防止不相干的unix socket链接也进行远程连接产生错误,或者浪费不必要的资源,所以白名单尽量设置得精确一些,比如本文中针对libvirt场景设置为/var/lib/libvirt/比较好,而直接将/var/lib/或/var/或直接将根目录加入的做法是有较大风险的。 + +## **3.3** REXEC服务部署 + +### 3.3.1 简介 + +rexec是一个用c语言开发的远程执行组件,分为rexec client和rexec server。server端为一个常驻服务进程,client端为一个二进制文件,client端被执行后会基于udsproxyd服务与server端建立uds连接,并由server常驻进程在server端拉起指定程序。在libvirt虚拟化卸载中,libvirtd卸载到DPU上,当它需要在HOST拉起虚拟机qemu进程时调用rexec client进行远程拉起。 + +### 3.3.2 部署方法 + +#### 3.3.2.1 配置环境变量与白名单 + +在HOST侧配置rexec server的白名单,将文件whitelist放置在/etc/rexec/目录下并修改权限为只读: + +```bash +chmod 400 /etc/rexec/whitelist +``` +如果想仅用于测试,可以不进行白名单配置,删除此文件重启rexec_server进程后则没有白名单限制。 + +下载dpu-utilities代码后,进入qtfs/rexec主目录下,执行:`make && make install`即可安装rexec所需全部二进制到/usr/bin目录下,包括了:`rexec、rexec_server`两个二进制可执行文件。 + +在server端启动rexec_server服务之前,检查是否存在/var/run/rexec目录,没有则创建: + +```bash +mkdir /var/run/rexec +``` + +rexec服务运行时底层通信使用unix socket,因此跨主机的rexec和rexec_server通信依赖上述udsproxyd服务,并且需要在udsproxy中添加相关白名单: +```bash +qtcfg -w udsconnect -x /var/run/rexec +``` + +#### 3.3.2.2 服务方式 + +server端可以通过两种方式拉起rexec_server服务。 + +- 方式1: +配置systemd服务 + +在/usr/lib/systemd/system/下增加rexec.service文件,内容如下: + +[rexec.service](./config/rexec.service) + +然后通过systemctl管理rexec服务。 + +首次配置服务时: + +```bash +systemctl daemon-reload + +systemctl enable --now rexec +``` + + +后续重启新启动服务: + +```bash +systemctl stop rexec + +systemctl start rexec +``` + +- 方式2: +手动后台拉起 + +```bash +nohup /usr/bin/rexec_server 2>&1 & +``` + +## **3.4** libvirt服务部署 + +### 3.4.1 HOST侧部署 + +HOST无需额外部署,只需要安装虚拟机启动环境以及libvirt即可(安装libvirt主要是为了创建对应的目录): + +```bash +yum install -y qemu libvirt edk2-aarch64 #(arm环境虚拟机启动需要) +``` + +HOST需要放置虚拟机镜像,后面通过qtfs挂载到client端共享给libvirt。 + +### 3.4.2 DPU侧部署 + +#### 3.4.2.1 创建chroot环境 + +a) 从openEuler官网下载qcow镜像,例如openEuler 22.03 LTS版本:。 + +b) 将qcow2挂载出来: + +```bash +cd /root/ + +mkdir p2 new_root_origin new_root + +modprobe nbd maxport=8 + +qemu-nbd -c /dev/nbd0 xxx.qcow2 + +mount /dev/nbd0p2 /root/p2 + +cp -rf /root/p2/* /root/new_root_origin/ + +umount /root/p2 + +qemu-nbd -d /dev/nbd0 +``` + +c) 此时new_root_origin有解压出来的镜像根目录,再将new_root绑定挂载到该目录上,作为chroot的根目录挂载点: + +```bash +mount --bind /root/new_root_origin /root/new_root +``` + +#### 3.4.2.2 安装libvirt +此处介绍patch方式源码编译,如果计算提供rpm包则参考计算提供的安装方法。 + +a) 进入chroot环境,安装编译环境和常用工具: + +```bash +yum groupinstall "Development tools" -y +yum install -y vim meson qemu qemu-img strace edk2-aarch64 tar +``` +其中edk2-aarch64是arm环境下虚拟机启动需要的。 + +b) 安装libvirt编译需要的依赖包: + +```bash +yum install -y rpcgen python3-docutils glib2-devel gnutls-devel libxml2-devel libpciaccess-devel libtirpc-devel yajl-devel systemd-devel dmidecode glusterfs-api numactl +``` + +c) 下载libvirt-6.9.0源码包:。 + +d) 获取直连聚合libvirt patch: + +。 + +e) 将源码包解压到chroot环境下的目录,如/home。将patch打上。 + +f) 进入libvirt-6.9.0目录: + +```bash +meson build --prefix=/usr -Ddriver_remote=enabled -Ddriver_network=enabled -Ddriver_qemu=enabled -Dtests=disabled -Ddocs=enabled -Ddriver_libxl=disabled -Ddriver_esx=disabled -Dsecdriver_selinux=disabled -Dselinux=disabled +``` + +g) 安装成功。 + +```bash +ninja -C build install +``` + +#### 3.4.2.3 启动libvirtd服务。 + +libvirt直连聚合卸载模式,需要从chroot内启动libvirtd服务,首先需要把chroot之外的libvirtd服务停掉。 + +a) 放置虚拟机跳板脚本在chroot环境下的/usr/bin和/usr/libexec下:[qemu-kvm](./scripts/qemu-kvm)。替换原同名二进制,这个跳板脚本就是用于调用rexec拉起远端虚拟机。 +>![](./public_sys-resources/icon-note.gif) **说明:** +>virsh使用的xml中,**\** 下面的 **\** 需要填qemu-kvm,如果是填的其他,则需要修改为qemu-kvm,或者将跳板脚本替换 **\** 指代的二进制,且跳板脚本内容需要对应地更改。 + +b) 将udsproxyd编译时附带产生的libudsproxy.so拷贝到本chroot目录下/usr/lib64下,如果配置qtfs的uds白名单方式使用udsproxyd服务,则不需要。 + +c) 将前面rexec编译产生的rexec二进制放置到本chroot的/usr/bin/目录下。 + +d) 配置chroot的挂载环境,需要挂载一些目录,使用如下配置脚本: +- [virt_start.sh](./scripts/virt_start.sh)为配置脚本,virt_start.sh脚本中需要手动修改qtfs ko dir为编译的ko位置,HOST ip address为正确的HOST地址。 +- [virt_umount.sh](./scripts/virt_umount.sh)为消除配置脚本。 + +e) 脚本中挂载目录位置都是按照本文档前文创建目录位置与名称为准,如果有修改需要同步适配修改脚本。 + +f) 配置好chroot环境后,进入chroot环境,手动拉起libvirtd。 + +未配置qtfs使用udsproxyd白名单的拉起方式: + +```bash +LD_PRELOAD=/usr/lib64/libudsproxy.so virtlogd -d +LD_PRELOAD=/usr/lib64/libudsproxy.so libvirtd -d +```` +如果已配置qtfs使用udsproxyd白名单,则不需要增加LD_PRELOAD前缀: + +```bash +virtlogd -d +libvirtd -d +``` + +查看是否已配置白名单的方式,在chroot之外的窗口,执行: + +```bash +qtcfg -z +``` + +查看列举出来的白名单是否包含/var/lib/libvirt/。 + +## **3.5** 拉起虚拟机 + +服务部署完成后,即可以在DPU侧进行虚拟机的生命周期管理。 + +### 3.5.1 虚拟机define + +a) 将虚拟机启动镜像放置在HOST侧某目录,例如: + +```bash +/home/VMs/Domain_name +``` + +b) 使用qtfs将这个目录挂载到DPU侧: + +```bash +mount -t qtfs /home/VMs /home/VMs +``` + +c) xml中使用`/home/VMs/Domain_name`作为启动镜像,这样在DPU和HOST侧看到的都是同一个镜像文件(Domain_name是虚拟机domain的名字)。 + +d) 检查xml中是否指向了跳板脚本。 + +e) 执行。 + +```bash +virsh define xxx.xml +``` + +### 3.5.2 虚拟机start + +``` +virsh start domain +``` + + +# **4** 环境重置 + +由于libvirt在DPU和HOST之间共享了部分目录,卸载环境时需要先将这部分目录全部umount。一般先停掉libvirtd和virtlogd进程,调用virt_umount脚本即可。如果HOST还有虚拟机运行,也需要先杀掉才能umount。 + + +# **5** 部分问题定位思路 + +1. libvirt编译失败:检查依赖包安装是否完全,如果chroot挂载了外部目录或者HOST目录,也可能导致编译失败,需先解除挂载。 + +2. qtfs挂载失败:可能server端engine进程没拉起、防火墙没关导致qtfs建联失败。 + +3. 虚拟机define失败:检查xml里的项目仿真器是否指向跳板脚本、虚拟机镜像是否已经通过qtfs挂载到DPU上可见,且路径与HOST一致。 + +4. 虚拟机启动失败:libvirtd和virtlogd服务是否拉起、rexec服务是否拉起、跳板进程是否拉起、是否qemu-kvm拉起时报错。 diff --git a/docs/zh/server/diversified_computing/dpu_offload/public_sys-resources/icon-note.gif b/docs/zh/server/diversified_computing/dpu_offload/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/server/diversified_computing/dpu_offload/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/server/diversified_computing/dpu_offload/qtfs_architecture_and_usage.md b/docs/zh/server/diversified_computing/dpu_offload/qtfs_architecture_and_usage.md new file mode 100644 index 0000000000000000000000000000000000000000..a1a177539459102cb3088908f973aef7945a4301 --- /dev/null +++ b/docs/zh/server/diversified_computing/dpu_offload/qtfs_architecture_and_usage.md @@ -0,0 +1,199 @@ +# qtfs + +## 介绍 + +qtfs是一个共享文件系统项目,可部署在host-dpu的硬件架构上,也可以部署在2台服务器之间。它以客户端服务器的模式工作,使客户端能通过qtfs访问服务端的指定文件系统,得到本地文件访问一致的体验。 + +qtfs的特性: + ++ 支持挂载点传播; + ++ 支持proc、sys、cgroup等特殊文件系统的共享; + ++ 支持远程文件读写的共享; + ++ 支持在客户端对服务端的文件系统进行远程挂载; + ++ 支持特殊文件的定制化处理; + ++ 支持远端fifo、unix-socket等,并且支持epoll,使客户端和服务端像本地通信一样使用这些文件; + ++ 支持基于host-dpu架构通过PCIe协议底层通信,性能大大优于网络; + ++ 支持内核模块形式开发,无需对内核进行侵入式修改。 + +## 软件架构 + +软件大体框架图: + +![qtfs-arch](./figures/qtfs-arch.png) + +## 安装教程 + +目录说明: + ++ **rexec**:跨主机二进制生命周期管理组件,在该目录下编译rexec和rexec_server。 + ++ **ipc**: 跨主机unix domain socket协同组件,在该目录下编译udsproxyd二进制和libudsproxy.so库。 + ++ **qtfs**: 客户端内核模块相关代码,直接在该目录下编译客户端ko。 + ++ **qtfs_server**: 服务端内核模块相关代码,直接在该目录下编译服务端ko和相关程序。 + ++ **qtinfo**:诊断工具,支持查询文件系统的工作状态以及修改log级别等。 + ++ **demo**、**test**、**doc**:测试程序、演示程序以及项目资料等。 + ++ 根目录: 客户端与服务端通用的公共模块代码。 + +### VSOCK通信模式 + +如有DPU硬件支持通过vsock与host通信,可选择此方法。 + +如果没有硬件,也可以选择host-vm作为qtfs的client与server进行模拟测试,通信通道为vsock: + +启动vm时为vm配置vsock通道,vm可参考如下配置,增加vsock段置: + +``` + + ... + + + +
+ + ... + +``` + +其他依赖: + + 1. 要求内核版本在5.10或更高版本。 + + 2. 安装内核开发包:yum install kernel-devel json-c-devel。 + +服务端编译安装: + +```bash + 1. cd qtfs_server + 2. make clean && make -j + 3. insmod qtfs_server.ko qtfs_server_vsock_cid=2 qtfs_server_vsock_port=12345 qtfs_log_level=WARN + 4. 配置白名单,将qtfs/config/qtfs/whitelist文件拷贝至/etc/qtfs/下,请手动配置需要的白名单选项,至少需要配置一个Mount白名单才能启动后续服务,任何文件或目录的增删改查操作都需要在白名单中增加对应权限才能正常工作。 + Tips: whitelist文件可从https://gitee.com/openeuler/dpu-utilities/blob/master/qtfs/config/qtfs/whitelist获取 + 5. nohup ./engine 16 1 2 12121 10 12121 2>&1 & + 6. engine参数解释:engine ${number_of_threads} ${uds_proxy_thread_number} ${server_cid_or_ip} ${server_uds_proxy_port} ${client_cid_or_ip} ${client_uds_proxy_port} + Tips: 这里的cid需要根据配置决定,如果host作为server端,则cid固定配置为2,如果vm作为server端,则需要配置为前面xml中的cid字段,本例中为10。 +``` + +客户端安装: + +```bash + 1. cd qtfs + 2. make clean && make -j + 3. insmod qtfs.ko qtfs_server_vsock_cid=2 qtfs_server_vsock_port=12345 qtfs_log_level=WARN + 4. cd ../ipc/ + 5. make clean && make && make install + 6. nohup udsproxyd 1 10 12121 2 12121 2>&1 & + 7. udsproxyd参数解释:udsproxyd ${uds_proxy_thread_number} ${client_cid_or_ip} ${client_uds_proxy_port} ${server_cid_or_ip} ${server_uds_proxy_port} + Tips:这里插入ko的cid和port配置为与server端一致即可,udsproxyd的cid + port与server端交换位置。 +``` + +其他注意事项: + + 1. udsproxyd目前也支持vsock和测试模式两种,使用vsock模式时,不能带UDS_TEST_MODE=1进行编译。 + 2. 如果vsock不通,需要检查host是否插入了vhost_vsock内核模块:modprobe vhost_vsock。 + +### 测试模式 - 网络通信通道 + +首先找两台服务器(或虚拟机)配置内核编译环境: + +1. 要求内核版本在5.10或更高版本。 +2. 安装内核开发包:yum install kernel-devel。 +3. 假设host服务器ip为192.168.10.10,dpu为192.168.10.11。 + +服务端安装: + +```bash + 1. cd qtfs_server + 2. make clean && make -j QTFS_TEST_MODE=1 + 3. 指定测试服务端的ip,ip a a ip_server(例:192.168.10.10)/port dev network(例:ens32),防止机器重启造成的ip变更问题,方便测试 + 4. insmod qtfs_server.ko qtfs_server_ip=x.x.x.x qtfs_server_port=12345 qtfs_log_level=WARN + 5. 配置白名单,将qtfs/config/qtfs/whitelist文件拷贝至/etc/qtfs/下,请手动配置需要的白名单选项,至少需要配置一个Mount白名单才能启动后续服务。任何文件或目录的增删改查操作都需要在白名单中增加对应权限才能正常工作。 + Tips: whitelist文件可从https://gitee.com/openeuler/dpu-utilities/blob/master/qtfs/config/qtfs/whitelist获取 + 6. nohup ./engine 16 1 192.168.10.10 12121 192.168.10.11 12121 2>&1 & + 7. engine参数解释:engine ${number_of_threads} ${uds_proxy_thread_number} ${server_cid_or_ip} ${server_uds_proxy_port} ${client_cid_or_ip} ${client_uds_proxy_port} +``` + + Tips: 该模式暴露网络端口,有可能造成安全隐患,仅能用于功能验证测试,勿用于实际生产环境。 + +客户端安装: + +```bash + 1. cd qtfs + 2. make clean && make -j QTFS_TEST_MODE=1 + 3. 指定测试用户端的ip,ip a a ip_client(例:192.168.10.11)/port dev network(例:ens32),防止机器重启造成的ip变更问题,方便测试 + 3. insmod qtfs.ko qtfs_server_ip=x.x.x.x qtfs_server_port=12345 qtfs_log_level=WARN + 4. cd ../ipc/ + 5. make clean && make UDS_TEST_MODE=1 && make install + 6. nohup udsproxyd 1 192.168.10.11 12121 192.168.10.10 12121 2>&1 & + 7. udsproxyd参数解释:udsproxyd ${uds_proxy_thread_number} ${client_cid_or_ip} ${client_uds_proxy_port} ${server_cid_or_ip} ${server_uds_proxy_port} + Tips:这里插入ko的cid和port配置为与server端一致即可,udsproxyd的cid + port与server端交换位置。 +``` + + Tips: 该模式暴露网络端口,有可能造成安全隐患,仅能用于功能验证测试,勿用于实际生产环境。 + +## 使用说明 + +安装完成后,客户端通过挂载把服务端的文件系统让客户端可见,例如: + +```bash + mount -t qtfs / /root/mnt/ +``` + +客户端进入"/root/mnt"后便可查看到server端/目录下的所有文件,以及对其进行相关操作。此操作受到白名单的控制,需要挂载路径在server端白名单的Mount列表,或者在其子目录下,且后续的查看或读写操作都需要开放对应的白名单项才能进行。 + + Tips:若完成测试环境的配置后,无法通过客户端访问所挂载的客户端文件,可检查是否由防火墙的阻断导致。 + +## qtfs查询及控制工具 + +源码qtinfo目录下提供了qtfs的查询及控制工具qtinfo和qtcfg,该工具的编译过程如下: + +```bash +1. cd qtfs/qtinfo + +2. make role=client 或 make role=server,其中role按照当前节点属性进行设置 +``` + +编译完成后生成qtinfo和qtcfg二进制,可以通过不加任何参数执行该二进制查看其用法。 + +## rexec使用 + +1. rexec工具依赖上述udsproxyd服务,使用udsproxyd提供的uds协同进行通信,请确认udsproxyd正常启动。 + +2. 为rexec_server配置白名单,将qtfs/config/rexec/whitelist文件拷贝至/etc/rexec/下,请手动配置需要的白名单选项,在其中增加允许执行的二进制命令,请注意该白名单应该配置在rexec_server运行的系统上,如果双向运行,则两侧都需要配置,rexec_server服务只接受该白名单列出的二进制拉起执行,不在白名单中的请求会被rexec_server拒绝拉起。 + +3. 为rexec端配置uds白名单(这个白名单只在需要调用rexec二进制的系统中配置,如果是双向则都配置),在udsconnect中增加rexec通信socket所在目录白名单,增加方式有两种: + + 1. 在qtfs_server端可以将/etc/qtfs/whitelist的`[udsconnect]`表项中增加`/var/run/rexec`,修改后需要重新启动engine进程使其生效。 + + 2. 使用前述的qtcfg进行配置:`qtcfg -w udsconnect -x /var/run/rexec`,配置完成后可通过`qtcfg -w udsconnect -z`查询是否生效。qtcfg可以在qtfs client或者server端动态添加白名单,qtfs server端应该在engine拉起后执行。 + +4. 拉起rexec_server作为服务端,无需参数。 + +5. 通过rexec ${your_cmd} 验证rexec功能是否正常。 + + Tips:rexec的远程执行功能支持双向,需要在client和server都拉起rexec_server服务。 + +## 无感卸载场景 + +qtfs可用于DPU管理面无感卸载场景,通过qtfs为卸载进程准备运行时工作目录、系统工作目录,并为卸载后管理进程与主机侧业务进程提供透明的本地通信接口。 + +qtfs提供的协同文件系统、协同IPC等能力尽可能做到系统通用,管理软件仍需要进行少量适配工作。相比通过拆分方案进行管理软件卸载,qtfs提供的无感卸载可以大幅降低业务修改适配的工作量(可将代码修改控制在几百行,拆分方案代码修改可达千行甚至万行级别)。 + +通过这种方案可大幅提升管理面卸载的兼容性,方便后续版本升级;另外该方案具备一定通用性,可适配虚拟化管理面卸载和容器管理面卸载等场景。 + + Tips:不同场景管理面进程使用qtfs进行无感卸载时,仍需要进行代码适配,用户需要具备场景专业知识,对管理代码工具进行适配,并使用合适的qtfs配置。 + +本文档后续章节介绍两个管理面工具无感卸载的推荐场景:[虚拟化管理面DPU无感卸载](libvirt直连聚合环境搭建.md)及[容器管理面DPU无感卸载](./容器管理面直连聚合环境搭建.md)。 + + Tips:上述无感卸载指导文档中提供的libvirt及docker适配patch仅供参考,不可用于商用环境;用户应基于自己的实际场景进行对应代码修改适配。 diff --git a/docs/zh/server/diversified_computing/dpu_offload/scripts/qemu-kvm b/docs/zh/server/diversified_computing/dpu_offload/scripts/qemu-kvm new file mode 100644 index 0000000000000000000000000000000000000000..e869371be109b57f59709fc23bc5b1cb2002cfbf --- /dev/null +++ b/docs/zh/server/diversified_computing/dpu_offload/scripts/qemu-kvm @@ -0,0 +1,3 @@ +#!/bin/bash + +exec /usr/bin/rexec /usr/bin/qemu-kvm $* diff --git a/docs/zh/server/diversified_computing/dpu_offload/scripts/virt_start.sh b/docs/zh/server/diversified_computing/dpu_offload/scripts/virt_start.sh new file mode 100644 index 0000000000000000000000000000000000000000..06ca194b7a639a947b6e395f116beeba7c897459 --- /dev/null +++ b/docs/zh/server/diversified_computing/dpu_offload/scripts/virt_start.sh @@ -0,0 +1,48 @@ +#!/bin/bash +insmod ./qtfs.ko qtfs_server_ip=192.168.10.11 qtfs_log_level=NONE + +systemctl stop libvirtd + +if [ ! -d "/root/new_root/local_proc" ]; then + mkdir -p /root/new_root/local_proc +fi +if [ ! -d "/root/new_root/local" ]; then + mkdir -p /root/new_root/local +fi +mount -t proc proc /root/new_root/local_proc/ +mount -t proc proc /root/new_root/local/proc +mount -t sysfs sysfs /root/new_root/local/sys +mount --bind /var/run/ /root/new_root/var/run/ +mount --bind /var/lib/ /root/new_root/var/lib/ +mount --bind /var/cache/ /root/new_root/var/cache +mount --bind /etc /root/new_root/etc + +mkdir -p /root/new_root/home/VMs/ +mount -t qtfs /home/VMs/ /root/new_root/home/VMs/ + +mount -t qtfs /var/lib/libvirt /root/new_root/var/lib/libvirt + +mount -t devtmpfs devtmpfs /root/new_root/dev/ +mount -t hugetlbfs hugetlbfs /root/new_root/dev/hugepages/ +mount -t mqueue mqueue /root/new_root/dev/mqueue/ +mount -t tmpfs tmpfs /root/new_root/dev/shm + +mount -t sysfs sysfs /root/new_root/sys +mkdir -p /root/new_root/sys/fs/cgroup +mount -t tmpfs tmpfs /root/new_root/sys/fs/cgroup +list="perf_event freezer files net_cls,net_prio hugetlb pids rdma cpu,cpuacct memory devices blkio cpuset" +for i in $list +do + echo $i + mkdir -p /root/new_root/sys/fs/cgroup/$i + mount -t cgroup cgroup -o rw,nosuid,nodev,noexec,relatime,$i /root/new_root/sys/fs/cgroup/$i +done + +## common system dir +mount -t qtfs -o proc /proc /root/new_root/proc +echo "proc" + +mount -t qtfs /sys /root/new_root/sys +echo "cgroup" +mount -t qtfs /dev/pts /root/new_root/dev/pts +mount -t qtfs /dev/vfio /root/new_root/dev/vfio diff --git a/docs/zh/server/diversified_computing/dpu_offload/scripts/virt_umount.sh b/docs/zh/server/diversified_computing/dpu_offload/scripts/virt_umount.sh new file mode 100644 index 0000000000000000000000000000000000000000..4adddec913c23069c6bffddec0bf1770f8c5ce71 --- /dev/null +++ b/docs/zh/server/diversified_computing/dpu_offload/scripts/virt_umount.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +umount /root/new_root/dev/hugepages +umount /root/new_root/etc +umount /root/new_root/home/VMs +umount /root/new_root/local_proc +umount /root/new_root/local/proc +umount /root/new_root/var/lib/libvirt +umount /root/new_root/var/lib +umount /root/new_root/* +umount /root/new_root/dev/pts +umount /root/new_root/dev/mqueue +umount /root/new_root/dev/shm +umount /root/new_root/dev/vfio +umount /root/new_root/dev +rmmod qtfs + +umount /root/new_root/sys/fs/cgroup/* +umount /root/new_root/sys/fs/cgroup +umount /root/new_root/sys diff --git a/docs/zh/server/high_availability/ha/_toc.yaml b/docs/zh/server/high_availability/ha/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5821242eb4d1069a1aefe2a03ff150d5130b807d --- /dev/null +++ b/docs/zh/server/high_availability/ha/_toc.yaml @@ -0,0 +1,7 @@ +isManual: true +label: '' +sections: + - label: HA的安装与部署 + href: ./ha_installation_and_deployment.md + - label: HA使用实例 + href: ./ha_usecase_examples.md diff --git a/docs/zh/server/high_availability/ha/figures/.keep b/docs/zh/server/high_availability/ha/figures/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/zh/server/high_availability/ha/figures/1.png b/docs/zh/server/high_availability/ha/figures/1.png new file mode 100644 index 0000000000000000000000000000000000000000..40af4242eebb440a76c749a8d970d50cd7b89bf4 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/1.png differ diff --git a/docs/zh/server/high_availability/ha/figures/10.png b/docs/zh/server/high_availability/ha/figures/10.png new file mode 100644 index 0000000000000000000000000000000000000000..e588ffbe3d8d7b66d92ae8f2b4bcec7c80d0592c Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/10.png differ diff --git a/docs/zh/server/high_availability/ha/figures/11.png b/docs/zh/server/high_availability/ha/figures/11.png new file mode 100644 index 0000000000000000000000000000000000000000..1989a5bb08155f920363e154e68bb148715c7e9e Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/11.png differ diff --git a/docs/zh/server/high_availability/ha/figures/12.png b/docs/zh/server/high_availability/ha/figures/12.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6346161182d2cfeaf3818d5ec518ddb11c732e Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/12.png differ diff --git a/docs/zh/server/high_availability/ha/figures/13.png b/docs/zh/server/high_availability/ha/figures/13.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7def1fb66c90da62acde799eaffca97e3b5396 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/13.png differ diff --git a/docs/zh/server/high_availability/ha/figures/14.png b/docs/zh/server/high_availability/ha/figures/14.png new file mode 100644 index 0000000000000000000000000000000000000000..3a27a66d57e284775420d467f90dcc02889bbffe Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/14.png differ diff --git a/docs/zh/server/high_availability/ha/figures/15.png b/docs/zh/server/high_availability/ha/figures/15.png new file mode 100644 index 0000000000000000000000000000000000000000..370bea32abcaa8a2b06a1a61c1455d4b35f43474 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/15.png differ diff --git a/docs/zh/server/high_availability/ha/figures/16.png b/docs/zh/server/high_availability/ha/figures/16.png new file mode 100644 index 0000000000000000000000000000000000000000..812ee462669c5263ef4bffc49ca4f9b6af4541c6 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/16.png differ diff --git a/docs/zh/server/high_availability/ha/figures/17.png b/docs/zh/server/high_availability/ha/figures/17.png new file mode 100644 index 0000000000000000000000000000000000000000..36e524b806874fa3788f5e4dcd78350686281107 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/17.png differ diff --git a/docs/zh/server/high_availability/ha/figures/18.png b/docs/zh/server/high_availability/ha/figures/18.png new file mode 100644 index 0000000000000000000000000000000000000000..51b32442980aa60646f77dabd53ade74f55891fe Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/18.png differ diff --git a/docs/zh/server/high_availability/ha/figures/19.png b/docs/zh/server/high_availability/ha/figures/19.png new file mode 100644 index 0000000000000000000000000000000000000000..c9457d09aa9f1662b2c9e4550cdbdb9f57dd020e Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/19.png differ diff --git a/docs/zh/server/high_availability/ha/figures/2.png b/docs/zh/server/high_availability/ha/figures/2.png new file mode 100644 index 0000000000000000000000000000000000000000..97917cc245484a43bec8562757d920a06f123121 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/2.png differ diff --git a/docs/zh/server/high_availability/ha/figures/20.png b/docs/zh/server/high_availability/ha/figures/20.png new file mode 100644 index 0000000000000000000000000000000000000000..b0943189920d7a541d35da27340593ea93f92a17 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/20.png differ diff --git a/docs/zh/server/high_availability/ha/figures/21.png b/docs/zh/server/high_availability/ha/figures/21.png new file mode 100644 index 0000000000000000000000000000000000000000..e590c22c0ea28906b5f4ea7ccbc6ab11e47ad173 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/21.png differ diff --git a/docs/zh/server/high_availability/ha/figures/22.png b/docs/zh/server/high_availability/ha/figures/22.png new file mode 100644 index 0000000000000000000000000000000000000000..03a548b1ffb1f0ad53cfa5387af2721af90bca81 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/22.png differ diff --git a/docs/zh/server/high_availability/ha/figures/23.png b/docs/zh/server/high_availability/ha/figures/23.png new file mode 100644 index 0000000000000000000000000000000000000000..834c492094715cde1c02c91752ecabfe7921ed62 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/23.png differ diff --git a/docs/zh/server/high_availability/ha/figures/24.png b/docs/zh/server/high_availability/ha/figures/24.png new file mode 100644 index 0000000000000000000000000000000000000000..1881e868b74a60888b319576fa38fb4af92ba75c Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/24.png differ diff --git a/docs/zh/server/high_availability/ha/figures/25.png b/docs/zh/server/high_availability/ha/figures/25.png new file mode 100644 index 0000000000000000000000000000000000000000..f38839725d27a3486984d152e5d9de305364fbd2 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/25.png differ diff --git a/docs/zh/server/high_availability/ha/figures/26.png b/docs/zh/server/high_availability/ha/figures/26.png new file mode 100644 index 0000000000000000000000000000000000000000..6d7957119133ecb98b1b6b104e54a3a4647ec2a5 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/26.png differ diff --git a/docs/zh/server/high_availability/ha/figures/27.png b/docs/zh/server/high_availability/ha/figures/27.png new file mode 100644 index 0000000000000000000000000000000000000000..3e4733717fdc5172d6479b393005219e65e96df4 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/27.png differ diff --git a/docs/zh/server/high_availability/ha/figures/28.png b/docs/zh/server/high_availability/ha/figures/28.png new file mode 100644 index 0000000000000000000000000000000000000000..a77772e818e3f6c11acac3b9cfa18bad14a0a48c Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/28.png differ diff --git a/docs/zh/server/high_availability/ha/figures/29.png b/docs/zh/server/high_availability/ha/figures/29.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f58ffe5855295268298448744e5aadbdc55276 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/29.png differ diff --git a/docs/zh/server/high_availability/ha/figures/3.png b/docs/zh/server/high_availability/ha/figures/3.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb76b336957020ed6867d908e0a8bdcfc953c52 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/3.png differ diff --git a/docs/zh/server/high_availability/ha/figures/30.png b/docs/zh/server/high_availability/ha/figures/30.png new file mode 100644 index 0000000000000000000000000000000000000000..d91adefba1753959e90ccf4aa1501ac08d7144bd Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/30.png differ diff --git a/docs/zh/server/high_availability/ha/figures/31.png b/docs/zh/server/high_availability/ha/figures/31.png new file mode 100644 index 0000000000000000000000000000000000000000..0abef09ab438f5f8cfb68090993f55c493b8c15e Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/31.png differ diff --git a/docs/zh/server/high_availability/ha/figures/32.png b/docs/zh/server/high_availability/ha/figures/32.png new file mode 100644 index 0000000000000000000000000000000000000000..d567cfbacc07a9eb46ff2c54a68432f45e034e94 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/32.png differ diff --git a/docs/zh/server/high_availability/ha/figures/33.png b/docs/zh/server/high_availability/ha/figures/33.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5896e2884520672c0bd88d68471b45a09c56fe Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/33.png differ diff --git a/docs/zh/server/high_availability/ha/figures/34.png b/docs/zh/server/high_availability/ha/figures/34.png new file mode 100644 index 0000000000000000000000000000000000000000..81bc9480fbbd81a97c559d7a6a74274deeab2bd1 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/34.png differ diff --git a/docs/zh/server/high_availability/ha/figures/35.png b/docs/zh/server/high_availability/ha/figures/35.png new file mode 100644 index 0000000000000000000000000000000000000000..ab2399847a643a87279337704e23fea7609bb211 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/35.png differ diff --git a/docs/zh/server/high_availability/ha/figures/36.png b/docs/zh/server/high_availability/ha/figures/36.png new file mode 100644 index 0000000000000000000000000000000000000000..536981609b9ae5d32be56bec612f2b3446146184 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/36.png differ diff --git a/docs/zh/server/high_availability/ha/figures/37.png b/docs/zh/server/high_availability/ha/figures/37.png new file mode 100644 index 0000000000000000000000000000000000000000..e39aa03587642dc1f8622fff515b05a9a3085b28 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/37.png differ diff --git a/docs/zh/server/high_availability/ha/figures/38.png b/docs/zh/server/high_availability/ha/figures/38.png new file mode 100644 index 0000000000000000000000000000000000000000..838f5ff0616a83cdf42edb053f4e72b93bfa644e Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/38.png differ diff --git a/docs/zh/server/high_availability/ha/figures/39.png b/docs/zh/server/high_availability/ha/figures/39.png new file mode 100644 index 0000000000000000000000000000000000000000..12a379403d73a47b2fa564120a28fdb58d188963 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/39.png differ diff --git a/docs/zh/server/high_availability/ha/figures/4.png b/docs/zh/server/high_availability/ha/figures/4.png new file mode 100644 index 0000000000000000000000000000000000000000..5078e36aca713706d2cf08a3ebecdc3769951899 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/4.png differ diff --git a/docs/zh/server/high_availability/ha/figures/40.png b/docs/zh/server/high_availability/ha/figures/40.png new file mode 100644 index 0000000000000000000000000000000000000000..bf419894eab852b45604966c62fafa71f051c4df Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/40.png differ diff --git a/docs/zh/server/high_availability/ha/figures/41.png b/docs/zh/server/high_availability/ha/figures/41.png new file mode 100644 index 0000000000000000000000000000000000000000..f94b0ee72e0d4e9277e9b44b4268cfbdb8402104 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/41.png differ diff --git a/docs/zh/server/high_availability/ha/figures/42.png b/docs/zh/server/high_availability/ha/figures/42.png new file mode 100644 index 0000000000000000000000000000000000000000..3182e551c4e4b03885bad6339f1de514b3f55f8c Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/42.png differ diff --git a/docs/zh/server/high_availability/ha/figures/43.jpg b/docs/zh/server/high_availability/ha/figures/43.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26e9244f58ea9800081fd61ae135477f05b21b40 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/43.jpg differ diff --git a/docs/zh/server/high_availability/ha/figures/44.png b/docs/zh/server/high_availability/ha/figures/44.png new file mode 100644 index 0000000000000000000000000000000000000000..c3abaecd6e053272d81e0ad9bd183c6858b4f3c5 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/44.png differ diff --git a/docs/zh/server/high_availability/ha/figures/45.png b/docs/zh/server/high_availability/ha/figures/45.png new file mode 100644 index 0000000000000000000000000000000000000000..86b051acde857c88479714414f721a7f59cca483 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/45.png differ diff --git a/docs/zh/server/high_availability/ha/figures/46.png b/docs/zh/server/high_availability/ha/figures/46.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ec41c87628bf28c9905523f99ae93aebd13614 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/46.png differ diff --git a/docs/zh/server/high_availability/ha/figures/47.jpg b/docs/zh/server/high_availability/ha/figures/47.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf95f03c8ea0f84a878bc63af20972c9da71bc04 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/47.jpg differ diff --git a/docs/zh/server/high_availability/ha/figures/48.png b/docs/zh/server/high_availability/ha/figures/48.png new file mode 100644 index 0000000000000000000000000000000000000000..ef21fa1ce1e2e9848a8dca16e692de673df7c6d7 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/48.png differ diff --git a/docs/zh/server/high_availability/ha/figures/49.png b/docs/zh/server/high_availability/ha/figures/49.png new file mode 100644 index 0000000000000000000000000000000000000000..3b77668e5a4d1bdb3043c473dff9b36fa7144714 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/49.png differ diff --git a/docs/zh/server/high_availability/ha/figures/5.png b/docs/zh/server/high_availability/ha/figures/5.png new file mode 100644 index 0000000000000000000000000000000000000000..2976a745cfaede26594d6daa01cfc18d18b1de8b Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/5.png differ diff --git a/docs/zh/server/high_availability/ha/figures/50.png b/docs/zh/server/high_availability/ha/figures/50.png new file mode 100644 index 0000000000000000000000000000000000000000..b86a55fe4363f56fc18befc9d27025a75ca427ad Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/50.png differ diff --git a/docs/zh/server/high_availability/ha/figures/51.png b/docs/zh/server/high_availability/ha/figures/51.png new file mode 100644 index 0000000000000000000000000000000000000000..d427ac871dba9c32eb4ffe736d5352f8408da533 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/51.png differ diff --git a/docs/zh/server/high_availability/ha/figures/52.png b/docs/zh/server/high_availability/ha/figures/52.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca0a2db05c70bc25f9bb59e82d074f671cfc74e Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/52.png differ diff --git a/docs/zh/server/high_availability/ha/figures/53.png b/docs/zh/server/high_availability/ha/figures/53.png new file mode 100644 index 0000000000000000000000000000000000000000..76fbc34a1d5621b83c2d8c93222766acad33350d Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/53.png differ diff --git a/docs/zh/server/high_availability/ha/figures/54.png b/docs/zh/server/high_availability/ha/figures/54.png new file mode 100644 index 0000000000000000000000000000000000000000..49ecae6f8941a118223f3765c23015df074c4983 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/54.png differ diff --git a/docs/zh/server/high_availability/ha/figures/56.png b/docs/zh/server/high_availability/ha/figures/56.png new file mode 100644 index 0000000000000000000000000000000000000000..36fee795bfe593b6246c8d6c2bddea9386b06f45 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/56.png differ diff --git a/docs/zh/server/high_availability/ha/figures/57.png b/docs/zh/server/high_availability/ha/figures/57.png new file mode 100644 index 0000000000000000000000000000000000000000..539d06b77b058a933cb154c43641d498050986e0 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/57.png differ diff --git a/docs/zh/server/high_availability/ha/figures/58.png b/docs/zh/server/high_availability/ha/figures/58.png new file mode 100644 index 0000000000000000000000000000000000000000..396ca16d873e54505bcdbd41d669366eea7f5dee Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/58.png differ diff --git a/docs/zh/server/high_availability/ha/figures/59.png b/docs/zh/server/high_availability/ha/figures/59.png new file mode 100644 index 0000000000000000000000000000000000000000..9b1de98ac4fe686937ca844d3e9481548a79ce63 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/59.png differ diff --git a/docs/zh/server/high_availability/ha/figures/6.png b/docs/zh/server/high_availability/ha/figures/6.png new file mode 100644 index 0000000000000000000000000000000000000000..275c23872f2353f007371672714902babcc3db53 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/6.png differ diff --git a/docs/zh/server/high_availability/ha/figures/60.jpg b/docs/zh/server/high_availability/ha/figures/60.jpg new file mode 100644 index 0000000000000000000000000000000000000000..033c88aaadd04f7d4058ec2eb5b2c70498319bf7 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/60.jpg differ diff --git a/docs/zh/server/high_availability/ha/figures/61.png b/docs/zh/server/high_availability/ha/figures/61.png new file mode 100644 index 0000000000000000000000000000000000000000..8df17062963a3baf92318a12ec34b1378122687b Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/61.png differ diff --git a/docs/zh/server/high_availability/ha/figures/62.png b/docs/zh/server/high_availability/ha/figures/62.png new file mode 100644 index 0000000000000000000000000000000000000000..ec312d6c0c22018c1745dd866da71ce9be47fbda Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/62.png differ diff --git a/docs/zh/server/high_availability/ha/figures/63.jpg b/docs/zh/server/high_availability/ha/figures/63.jpg new file mode 100644 index 0000000000000000000000000000000000000000..504f7cf59768f6fd1cd73a115d01fbc4e15a02e1 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/63.jpg differ diff --git a/docs/zh/server/high_availability/ha/figures/63.png b/docs/zh/server/high_availability/ha/figures/63.png new file mode 100644 index 0000000000000000000000000000000000000000..86b051acde857c88479714414f721a7f59cca483 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/63.png differ diff --git a/docs/zh/server/high_availability/ha/figures/64.png b/docs/zh/server/high_availability/ha/figures/64.png new file mode 100644 index 0000000000000000000000000000000000000000..cbbd2ede047e735c3766e08b04595f08cd72f5b2 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/64.png differ diff --git a/docs/zh/server/high_availability/ha/figures/7.png b/docs/zh/server/high_availability/ha/figures/7.png new file mode 100644 index 0000000000000000000000000000000000000000..4d397959ac7f6d166ef5a3b7084bd5c3c93b475f Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/7.png differ diff --git a/docs/zh/server/high_availability/ha/figures/8.png b/docs/zh/server/high_availability/ha/figures/8.png new file mode 100644 index 0000000000000000000000000000000000000000..8ade274092d7b3e461c96d7909a9d89d3a944f09 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/8.png differ diff --git a/docs/zh/server/high_availability/ha/figures/9.png b/docs/zh/server/high_availability/ha/figures/9.png new file mode 100644 index 0000000000000000000000000000000000000000..f7b2215404929346f1a814b0b1d6d482559c08b5 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/9.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-add-resource.png b/docs/zh/server/high_availability/ha/figures/HA-add-resource.png new file mode 100644 index 0000000000000000000000000000000000000000..ac24895a1247828d248132f6c789ad8ef51a57e4 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-add-resource.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-apache-show.png b/docs/zh/server/high_availability/ha/figures/HA-apache-show.png new file mode 100644 index 0000000000000000000000000000000000000000..c216500910f75f2de1108f6b618c5c08f4df8bae Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-apache-show.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-apache-suc.png b/docs/zh/server/high_availability/ha/figures/HA-apache-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..23a7aaa702e3e68190ff7e01a5a673aee2c92409 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-apache-suc.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-api.png b/docs/zh/server/high_availability/ha/figures/HA-api.png new file mode 100644 index 0000000000000000000000000000000000000000..f825fe005705d30809d12df97958cff0e5a80135 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-api.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-clone-suc.png b/docs/zh/server/high_availability/ha/figures/HA-clone-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..4b6099ccc88d4f6f907a0c4563e729ab2a4dece1 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-clone-suc.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-clone.png b/docs/zh/server/high_availability/ha/figures/HA-clone.png new file mode 100644 index 0000000000000000000000000000000000000000..1b09ab73849494f4ffd759fa612ae3c241bd9c1d Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-clone.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-corosync.png b/docs/zh/server/high_availability/ha/figures/HA-corosync.png new file mode 100644 index 0000000000000000000000000000000000000000..c4d93242e65c503b6e1b6a457e2517f647984a66 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-corosync.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-firstchoice-cmd.png b/docs/zh/server/high_availability/ha/figures/HA-firstchoice-cmd.png new file mode 100644 index 0000000000000000000000000000000000000000..a265bab07f1d8e46d9d965975be180a8de6c9eb2 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-firstchoice-cmd.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-firstchoice.png b/docs/zh/server/high_availability/ha/figures/HA-firstchoice.png new file mode 100644 index 0000000000000000000000000000000000000000..bd982ddcea55c629c0257fca86051a9ffa77e7b4 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-firstchoice.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-group-new-suc.png b/docs/zh/server/high_availability/ha/figures/HA-group-new-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..437fd01ee83a9a1f65c12838fe56eea8435f6759 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-group-new-suc.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-group-new-suc2.png b/docs/zh/server/high_availability/ha/figures/HA-group-new-suc2.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb933bd761f9808de95a324a50226ff041ebd4f Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-group-new-suc2.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-group-new.png b/docs/zh/server/high_availability/ha/figures/HA-group-new.png new file mode 100644 index 0000000000000000000000000000000000000000..9c914d0cc2e14f3220fc4346175961f129efb37b Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-group-new.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-group-suc.png b/docs/zh/server/high_availability/ha/figures/HA-group-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..2338580343833ebab08627be3a2efbcdb48aef9e Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-group-suc.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-group.png b/docs/zh/server/high_availability/ha/figures/HA-group.png new file mode 100644 index 0000000000000000000000000000000000000000..6897817665dee90c0f8c47c6a3cb4bb09db52d78 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-group.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-home-page.png b/docs/zh/server/high_availability/ha/figures/HA-home-page.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a7a82dc412250d4c0984b3876c6f93c6aca789 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-home-page.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-login.png b/docs/zh/server/high_availability/ha/figures/HA-login.png new file mode 100644 index 0000000000000000000000000000000000000000..65d0ae11ec810da7574ec72bebf6e1b020c94a0d Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-login.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-mariadb-suc.png b/docs/zh/server/high_availability/ha/figures/HA-mariadb-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..6f6756c945121715edc623bd9a848bc48ffeb4ca Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-mariadb-suc.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-mariadb.png b/docs/zh/server/high_availability/ha/figures/HA-mariadb.png new file mode 100644 index 0000000000000000000000000000000000000000..d29587c8609b9d6aefeb07170901361b5ef8402d Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-mariadb.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-nfs-suc.png b/docs/zh/server/high_availability/ha/figures/HA-nfs-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..c0ea6af79e91649f1ad7d97ab6c2a0069a4f4fb8 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-nfs-suc.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-nfs.png b/docs/zh/server/high_availability/ha/figures/HA-nfs.png new file mode 100644 index 0000000000000000000000000000000000000000..f6917938eec2e0431a9891c067475dd0b21c1bd9 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-nfs.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-pacemaker.png b/docs/zh/server/high_availability/ha/figures/HA-pacemaker.png new file mode 100644 index 0000000000000000000000000000000000000000..7681f963f67d2b803fef6fb2c3247384136201f8 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-pacemaker.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-pcs-status.png b/docs/zh/server/high_availability/ha/figures/HA-pcs-status.png new file mode 100644 index 0000000000000000000000000000000000000000..fb150fba9f6258658702b35caacf98076d1fd109 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-pcs-status.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-pcs.png b/docs/zh/server/high_availability/ha/figures/HA-pcs.png new file mode 100644 index 0000000000000000000000000000000000000000..283670d7c3d0961ee1cb41345c2b2a013d7143b0 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-pcs.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-refresh.png b/docs/zh/server/high_availability/ha/figures/HA-refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..c2678c0c2945acbabfbeae0d5de8924a216bbf31 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-refresh.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-vip-suc.png b/docs/zh/server/high_availability/ha/figures/HA-vip-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..313ce56e14f931c78dad4349ed57ab3fd7907f50 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-vip-suc.png differ diff --git a/docs/zh/server/high_availability/ha/figures/HA-vip.png b/docs/zh/server/high_availability/ha/figures/HA-vip.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b417df2e64527d3b29d0289756dfbb01bf66ec Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/HA-vip.png differ diff --git a/docs/zh/server/high_availability/ha/figures/dde-1.png b/docs/zh/server/high_availability/ha/figures/dde-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fb1d5177c39262ed182f10a57fdae850d007eeb1 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/dde-1.png differ diff --git a/docs/zh/server/high_availability/ha/figures/dde-2.png b/docs/zh/server/high_availability/ha/figures/dde-2.png new file mode 100644 index 0000000000000000000000000000000000000000..be5d296937bd17b9646b32c80934aa76738027af Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/dde-2.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-1.png b/docs/zh/server/high_availability/ha/figures/gnome-1.png new file mode 100644 index 0000000000000000000000000000000000000000..b33f802aa6dcf8b23a70fe451830015c614193b3 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-1.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-10.png b/docs/zh/server/high_availability/ha/figures/gnome-10.png new file mode 100644 index 0000000000000000000000000000000000000000..1c7b1465209c7a92db36d1b4c83445ce45e0d187 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-10.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-11.png b/docs/zh/server/high_availability/ha/figures/gnome-11.png new file mode 100644 index 0000000000000000000000000000000000000000..cc534ce5e1b250547dd9eb1db2b3f43a79c00409 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-11.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-12.png b/docs/zh/server/high_availability/ha/figures/gnome-12.png new file mode 100644 index 0000000000000000000000000000000000000000..65de953b821cac6b09b9f0d6623760dc339d867b Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-12.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-13.png b/docs/zh/server/high_availability/ha/figures/gnome-13.png new file mode 100644 index 0000000000000000000000000000000000000000..103370de2f2d81fe4e880f18bb9a3b4546d14840 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-13.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-14.png b/docs/zh/server/high_availability/ha/figures/gnome-14.png new file mode 100644 index 0000000000000000000000000000000000000000..13e1367d6ce006567e69fed8fd334aeb4810196c Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-14.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-15.png b/docs/zh/server/high_availability/ha/figures/gnome-15.png new file mode 100644 index 0000000000000000000000000000000000000000..fb86a36e2eb9c5ccfb3c53b0c49864e73c622ccf Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-15.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-16.png b/docs/zh/server/high_availability/ha/figures/gnome-16.png new file mode 100644 index 0000000000000000000000000000000000000000..9b375517e433740b7e2c27ede1159cda1eb986b8 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-16.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-17.png b/docs/zh/server/high_availability/ha/figures/gnome-17.png new file mode 100644 index 0000000000000000000000000000000000000000..ebfcc9c71afeda1d50b5355f23ec1ea422a17889 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-17.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-18.png b/docs/zh/server/high_availability/ha/figures/gnome-18.png new file mode 100644 index 0000000000000000000000000000000000000000..5d28c8372499dd2b9b71186dee7d4854b5320999 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-18.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-19.png b/docs/zh/server/high_availability/ha/figures/gnome-19.png new file mode 100644 index 0000000000000000000000000000000000000000..bea391d41386ab9b7953b269c44aec6cba4667c5 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-19.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-2.png b/docs/zh/server/high_availability/ha/figures/gnome-2.png new file mode 100644 index 0000000000000000000000000000000000000000..520df0228a38914ca7897dec6dc84e9639b757c0 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-2.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-20.png b/docs/zh/server/high_availability/ha/figures/gnome-20.png new file mode 100644 index 0000000000000000000000000000000000000000..d720a2c215de4172a8051d7e0554c7f6b3d6d043 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-20.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-21.png b/docs/zh/server/high_availability/ha/figures/gnome-21.png new file mode 100644 index 0000000000000000000000000000000000000000..dec78c390a65a1e707a5c9620fa3392e38124430 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-21.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-22.png b/docs/zh/server/high_availability/ha/figures/gnome-22.png new file mode 100644 index 0000000000000000000000000000000000000000..d8564596fd8ada47891a28b8fd97915722b28ff9 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-22.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-23.png b/docs/zh/server/high_availability/ha/figures/gnome-23.png new file mode 100644 index 0000000000000000000000000000000000000000..6fcb86d0b74acd102bc4e19bd483165fca0921bc Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-23.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-24.png b/docs/zh/server/high_availability/ha/figures/gnome-24.png new file mode 100644 index 0000000000000000000000000000000000000000..692929de10b612af7e15ddef689a611b7f4e8693 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-24.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-25.png b/docs/zh/server/high_availability/ha/figures/gnome-25.png new file mode 100644 index 0000000000000000000000000000000000000000..793a5a2d3ec63581902da5d4b8863f9ba33675b8 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-25.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-26.png b/docs/zh/server/high_availability/ha/figures/gnome-26.png new file mode 100644 index 0000000000000000000000000000000000000000..4d3f5418352e644f56a16099a9c77218045dabab Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-26.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-27.png b/docs/zh/server/high_availability/ha/figures/gnome-27.png new file mode 100644 index 0000000000000000000000000000000000000000..908998f4c4624e8b3317a311643123f690153325 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-27.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-28.png b/docs/zh/server/high_availability/ha/figures/gnome-28.png new file mode 100644 index 0000000000000000000000000000000000000000..8b47b2397fa8818dfecbc3c05341e31d4d70a940 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-28.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-29.png b/docs/zh/server/high_availability/ha/figures/gnome-29.png new file mode 100644 index 0000000000000000000000000000000000000000..fc90cb58691e6484b6e263f4e81a1046e3adbed1 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-29.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-3.png b/docs/zh/server/high_availability/ha/figures/gnome-3.png new file mode 100644 index 0000000000000000000000000000000000000000..4d423b13941604a29ff794817ed6fb1d6fea9c1e Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-3.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-30.png b/docs/zh/server/high_availability/ha/figures/gnome-30.png new file mode 100644 index 0000000000000000000000000000000000000000..8f4ab5dcd8ebd61b05a1b129b4c90e342f97e0fd Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-30.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-31.png b/docs/zh/server/high_availability/ha/figures/gnome-31.png new file mode 100644 index 0000000000000000000000000000000000000000..93159341a996153105985451fa6d8391c358b52e Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-31.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-32.png b/docs/zh/server/high_availability/ha/figures/gnome-32.png new file mode 100644 index 0000000000000000000000000000000000000000..c4ca5695e67a4a585f0ff074cd3645a32a9e4e83 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-32.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-33.png b/docs/zh/server/high_availability/ha/figures/gnome-33.png new file mode 100644 index 0000000000000000000000000000000000000000..e0b166e013144ed7e5f26c2b7bd7e8a00ac6a57f Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-33.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-34.png b/docs/zh/server/high_availability/ha/figures/gnome-34.png new file mode 100644 index 0000000000000000000000000000000000000000..dc8653255f8782ab72b8a24eeadff8fe64f88bb1 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-34.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-35.png b/docs/zh/server/high_availability/ha/figures/gnome-35.png new file mode 100644 index 0000000000000000000000000000000000000000..595c8d76ddc857ed9e76d421cf1e755874a6cc4a Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-35.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-36.png b/docs/zh/server/high_availability/ha/figures/gnome-36.png new file mode 100644 index 0000000000000000000000000000000000000000..f5a22198f57d34fe05336d88c6e4b288ed78dc8e Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-36.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-37.png b/docs/zh/server/high_availability/ha/figures/gnome-37.png new file mode 100644 index 0000000000000000000000000000000000000000..1a855eee24e959c3e8bfed371d2f74f93fceda3c Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-37.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-38.png b/docs/zh/server/high_availability/ha/figures/gnome-38.png new file mode 100644 index 0000000000000000000000000000000000000000..e80fcb9c25299130ca94bef2cdce9d5e7f9ba02c Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-38.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-39.png b/docs/zh/server/high_availability/ha/figures/gnome-39.png new file mode 100644 index 0000000000000000000000000000000000000000..29843d242f260cd1b722fdcc13cef645a3679e7f Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-39.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-4.png b/docs/zh/server/high_availability/ha/figures/gnome-4.png new file mode 100644 index 0000000000000000000000000000000000000000..04391e2e926d5195b21d7e05dc5322a0d7646ad6 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-4.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-40.png b/docs/zh/server/high_availability/ha/figures/gnome-40.png new file mode 100644 index 0000000000000000000000000000000000000000..8497bdd58dffe2210fca22d01912f82b5c39fd9c Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-40.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-41.png b/docs/zh/server/high_availability/ha/figures/gnome-41.png new file mode 100644 index 0000000000000000000000000000000000000000..a4357eb95c379dfecc1d627c59eb5da660d42d14 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-41.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-42.png b/docs/zh/server/high_availability/ha/figures/gnome-42.png new file mode 100644 index 0000000000000000000000000000000000000000..bc01808fe7c12d7d433dc1da9367e858027fcce9 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-42.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-43.png b/docs/zh/server/high_availability/ha/figures/gnome-43.png new file mode 100644 index 0000000000000000000000000000000000000000..467e52cf41a32df9c7207417817f906b518c54c3 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-43.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-44.png b/docs/zh/server/high_availability/ha/figures/gnome-44.png new file mode 100644 index 0000000000000000000000000000000000000000..71303b84fce85478ccba02b10f6c0358c5bdc2a0 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-44.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-45.png b/docs/zh/server/high_availability/ha/figures/gnome-45.png new file mode 100644 index 0000000000000000000000000000000000000000..a0927659af30d18715ab8b43266de3f54a3142a0 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-45.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-46.png b/docs/zh/server/high_availability/ha/figures/gnome-46.png new file mode 100644 index 0000000000000000000000000000000000000000..ad2093e67041d656c25a5674a6e4282c804ec6f2 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-46.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-47.png b/docs/zh/server/high_availability/ha/figures/gnome-47.png new file mode 100644 index 0000000000000000000000000000000000000000..9a67dd6b3b0081fa858b4beed0cc40708d5418e9 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-47.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-48.png b/docs/zh/server/high_availability/ha/figures/gnome-48.png new file mode 100644 index 0000000000000000000000000000000000000000..8789fcb96ee2143eae12131b07acf1cfbd82cf41 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-48.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-49.png b/docs/zh/server/high_availability/ha/figures/gnome-49.png new file mode 100644 index 0000000000000000000000000000000000000000..e5df514480c825a5c65b607721d80cf59642b4a1 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-49.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-5.png b/docs/zh/server/high_availability/ha/figures/gnome-5.png new file mode 100644 index 0000000000000000000000000000000000000000..b7148601f06fcee9517864aca19ba3cee863ba33 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-5.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-50.png b/docs/zh/server/high_availability/ha/figures/gnome-50.png new file mode 100644 index 0000000000000000000000000000000000000000..7b1f4678846cb691b144b26f24bc5570961a3d7d Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-50.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-51.png b/docs/zh/server/high_availability/ha/figures/gnome-51.png new file mode 100644 index 0000000000000000000000000000000000000000..10466de4bbd4c7b31654bb1369a9a85a20e88a27 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-51.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-52.png b/docs/zh/server/high_availability/ha/figures/gnome-52.png new file mode 100644 index 0000000000000000000000000000000000000000..16c8191ae59475d46cd7c275ad3841419544397d Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-52.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-53.png b/docs/zh/server/high_availability/ha/figures/gnome-53.png new file mode 100644 index 0000000000000000000000000000000000000000..b968bbd5c5df6148ef26c8cf292e040220987554 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-53.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-54.png b/docs/zh/server/high_availability/ha/figures/gnome-54.png new file mode 100644 index 0000000000000000000000000000000000000000..6f169f432a1ad4290b3fca12b1a835330d922ab0 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-54.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-55.png b/docs/zh/server/high_availability/ha/figures/gnome-55.png new file mode 100644 index 0000000000000000000000000000000000000000..e40794fbf2e23e3496ac7f9352abe84ac943cb8c Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-55.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-56.png b/docs/zh/server/high_availability/ha/figures/gnome-56.png new file mode 100644 index 0000000000000000000000000000000000000000..d66360c2865ba03e7f2959612b2e33061dfad39f Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-56.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-57.png b/docs/zh/server/high_availability/ha/figures/gnome-57.png new file mode 100644 index 0000000000000000000000000000000000000000..f2ffff79898f36e290bb133efc36c7439d089f57 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-57.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-58.png b/docs/zh/server/high_availability/ha/figures/gnome-58.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb30604a6dc2a4194da688830f88d0e596c5be9 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-58.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-59.png b/docs/zh/server/high_availability/ha/figures/gnome-59.png new file mode 100644 index 0000000000000000000000000000000000000000..9b25d253604f353b0bd3ef0c153237d74459ccae Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-59.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-6.png b/docs/zh/server/high_availability/ha/figures/gnome-6.png new file mode 100644 index 0000000000000000000000000000000000000000..3c54d7f40cb5caab2c3cecb9945f9c89a1afe00e Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-6.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-7.png b/docs/zh/server/high_availability/ha/figures/gnome-7.png new file mode 100644 index 0000000000000000000000000000000000000000..fa4b0e178fb0332d334d98e0106746b7bff65449 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-7.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-8.png b/docs/zh/server/high_availability/ha/figures/gnome-8.png new file mode 100644 index 0000000000000000000000000000000000000000..5c39bb44371d94a66c66e053a7f498b46d3a0937 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-8.png differ diff --git a/docs/zh/server/high_availability/ha/figures/gnome-9.png b/docs/zh/server/high_availability/ha/figures/gnome-9.png new file mode 100644 index 0000000000000000000000000000000000000000..00a9ad1a7c94054c9418795c39b29574bfe16bf0 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/gnome-9.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon1.png b/docs/zh/server/high_availability/ha/figures/icon1.png new file mode 100644 index 0000000000000000000000000000000000000000..9bac00355cf4aa57d32287fd4271404f6fd3fd4d Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon1.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon10-o.png b/docs/zh/server/high_availability/ha/figures/icon10-o.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c56d1a64c588d86f8fe510c74e5a7c4cb810d4 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon10-o.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon101-o.svg b/docs/zh/server/high_availability/ha/figures/icon101-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..af1c5d3dc0277a6ea59e71efb6ca97bdfc782e8e --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon101-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon103-o.svg b/docs/zh/server/high_availability/ha/figures/icon103-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..c06c885725c569ab8db1fe7d595a7c65f18c5142 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon103-o.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon105-o.svg b/docs/zh/server/high_availability/ha/figures/icon105-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..36c49949fa569330b761c2d65518f36c10435508 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon105-o.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon107-o.svg b/docs/zh/server/high_availability/ha/figures/icon107-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..fb5a3ea756f6ccb7b3e5c31122a433347a908c96 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon107-o.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon11-o.png b/docs/zh/server/high_availability/ha/figures/icon11-o.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1f2cb7f99b583768c7cbd7e05a57f302dbe8a Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon11-o.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon110-o.svg b/docs/zh/server/high_availability/ha/figures/icon110-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..7958e3f192061592e002e1e8a1bad06ffa86742c --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon110-o.svg @@ -0,0 +1,12 @@ + + + + reboot_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/icon111-o.svg b/docs/zh/server/high_availability/ha/figures/icon111-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..097d16a08d305a8b3f3b2268ab1ea8342e799377 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon111-o.svg @@ -0,0 +1,13 @@ + + + + Right + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/icon112-o.svg b/docs/zh/server/high_availability/ha/figures/icon112-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e51628c2b8b10495f3410d219814286696ea2fd5 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon112-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon116-o.svg b/docs/zh/server/high_availability/ha/figures/icon116-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..4d79cd6dbbbfd3969f4e0ad0ad88e27398853505 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon116-o.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon12-o.png b/docs/zh/server/high_availability/ha/figures/icon12-o.png new file mode 100644 index 0000000000000000000000000000000000000000..f1f0f59dd3879461a0b5bc0632693a4a4124def3 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon12-o.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon120-o.svg b/docs/zh/server/high_availability/ha/figures/icon120-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e895c347d16a200aea46b00428b0b9f1a3c94246 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon120-o.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon122-o.svg b/docs/zh/server/high_availability/ha/figures/icon122-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..7fb014b5fd6097ca37a84d0b6a27dc982d675c8a --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon122-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon124-o.svg b/docs/zh/server/high_availability/ha/figures/icon124-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..960c0ec096c925213f8953398f0e8e5db3cdaed3 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon124-o.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon125-o.svg b/docs/zh/server/high_availability/ha/figures/icon125-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..011c05f4b8f296867cd408a339230323fcbb28dd --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon125-o.svg @@ -0,0 +1,9 @@ + + + tips + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/icon126-o.svg b/docs/zh/server/high_availability/ha/figures/icon126-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e0a43b6b8beb434090ac0dd3a8fd68c023f11fce --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon126-o.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon127-o.svg b/docs/zh/server/high_availability/ha/figures/icon127-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..bed95d35334a8d0151211054236c0bacddcc0dd3 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon127-o.svg @@ -0,0 +1,13 @@ + + + + Up + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/icon128-o.svg b/docs/zh/server/high_availability/ha/figures/icon128-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..aa727f3f5d5883b3fb83a79c4b98e8b5bfe4ade6 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon128-o.svg @@ -0,0 +1,12 @@ + + + + userswitch_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/icon13-o.png b/docs/zh/server/high_availability/ha/figures/icon13-o.png new file mode 100644 index 0000000000000000000000000000000000000000..c05a981b29d8ad11c6682f796f79b4cafd0f088b Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon13-o.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon132-o.svg b/docs/zh/server/high_availability/ha/figures/icon132-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..588ba9d98864ba67a562fa9179f29405f7687aa0 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon132-o.svg @@ -0,0 +1,15 @@ + + + + - + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/icon133-o.svg b/docs/zh/server/high_availability/ha/figures/icon133-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..886d90a83e33497d134bdb3dcc864a5c2df53f20 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon133-o.svg @@ -0,0 +1,13 @@ + + + + + + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/icon134-o.svg b/docs/zh/server/high_availability/ha/figures/icon134-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..784cf383eb0e8f5c7a57a602047be50ad0a3bc05 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon134-o.svg @@ -0,0 +1,15 @@ + + + + = + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/icon135-o.svg b/docs/zh/server/high_availability/ha/figures/icon135-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..cea628a8f5eb92d10661b690242b6de41ca64816 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon135-o.svg @@ -0,0 +1,15 @@ + + + + ~ + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/icon136-o.svg b/docs/zh/server/high_availability/ha/figures/icon136-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..24aa139ab2fefaee20935551f1af5aef473719ed --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon136-o.svg @@ -0,0 +1,12 @@ + + + + poweroff_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/icon14-o.png b/docs/zh/server/high_availability/ha/figures/icon14-o.png new file mode 100644 index 0000000000000000000000000000000000000000..b21deee4d98593d93fb5f72158d2d78f3d3f1cb9 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon14-o.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon15-o.png b/docs/zh/server/high_availability/ha/figures/icon15-o.png new file mode 100644 index 0000000000000000000000000000000000000000..1827a20e9da4d28e35e8ab2eae739b2fec37b385 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon15-o.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon16.png b/docs/zh/server/high_availability/ha/figures/icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..f271594dda9d3ad0f038c9d719dd68c3e82c59f1 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon16.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon17.png b/docs/zh/server/high_availability/ha/figures/icon17.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe58b89347c857920bce25f067fbd11c308e502 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon17.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon18.png b/docs/zh/server/high_availability/ha/figures/icon18.png new file mode 100644 index 0000000000000000000000000000000000000000..1827a20e9da4d28e35e8ab2eae739b2fec37b385 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon18.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon19-o.png b/docs/zh/server/high_availability/ha/figures/icon19-o.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1f2cb7f99b583768c7cbd7e05a57f302dbe8a Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon19-o.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon2.png b/docs/zh/server/high_availability/ha/figures/icon2.png new file mode 100644 index 0000000000000000000000000000000000000000..9101e4b386df065a87d422bc5a0b287528ea5ec7 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon2.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon20.png b/docs/zh/server/high_availability/ha/figures/icon20.png new file mode 100644 index 0000000000000000000000000000000000000000..4de3c7c695893539967245ea5e269b26e2b735be Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon20.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon21.png b/docs/zh/server/high_availability/ha/figures/icon21.png new file mode 100644 index 0000000000000000000000000000000000000000..e7b4320b6ce1fd4adb52525ba2c60983ffb2eed3 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon21.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon22.png b/docs/zh/server/high_availability/ha/figures/icon22.png new file mode 100644 index 0000000000000000000000000000000000000000..43bfa96965ad13e0a34ead3cb1102a76b9346a23 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon22.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon23.png b/docs/zh/server/high_availability/ha/figures/icon23.png new file mode 100644 index 0000000000000000000000000000000000000000..aee221ddaa81d06fa7bd5b89a624da90cd1e53da Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon23.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon24.png b/docs/zh/server/high_availability/ha/figures/icon24.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e5d700431ca1666fe9eda2cefce5dd2f83bdcd Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon24.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon25.png b/docs/zh/server/high_availability/ha/figures/icon25.png new file mode 100644 index 0000000000000000000000000000000000000000..3de0f9476bbee9e89c3b759afbed968f17b5bbcc Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon25.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon26-o.png b/docs/zh/server/high_availability/ha/figures/icon26-o.png new file mode 100644 index 0000000000000000000000000000000000000000..2293a893caf6d89c3beb978598fe7f281e68e7d5 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon26-o.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon27-o.png b/docs/zh/server/high_availability/ha/figures/icon27-o.png new file mode 100644 index 0000000000000000000000000000000000000000..abbab8e40f7e3ca7c2a6f28ff78f08f15117828e Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon27-o.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon28-o.png b/docs/zh/server/high_availability/ha/figures/icon28-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon28-o.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon29-o.png b/docs/zh/server/high_availability/ha/figures/icon29-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon29-o.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon3.png b/docs/zh/server/high_availability/ha/figures/icon3.png new file mode 100644 index 0000000000000000000000000000000000000000..930ee8909e89e3624c581f83d713af271cd96c75 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon3.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon30-o.png b/docs/zh/server/high_availability/ha/figures/icon30-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon30-o.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon31-o.png b/docs/zh/server/high_availability/ha/figures/icon31-o.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon31-o.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon32.png b/docs/zh/server/high_availability/ha/figures/icon32.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon32.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon33.png b/docs/zh/server/high_availability/ha/figures/icon33.png new file mode 100644 index 0000000000000000000000000000000000000000..88ed145b25f6f025ad795ceb012500e0944cb54c Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon33.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon34.png b/docs/zh/server/high_availability/ha/figures/icon34.png new file mode 100644 index 0000000000000000000000000000000000000000..8247f52a3424c81b451ceb318f4a7979a5eddece Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon34.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon35.png b/docs/zh/server/high_availability/ha/figures/icon35.png new file mode 100644 index 0000000000000000000000000000000000000000..7c656e9030b94809a57c7e369921e6a585f3574c Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon35.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon36.png b/docs/zh/server/high_availability/ha/figures/icon36.png new file mode 100644 index 0000000000000000000000000000000000000000..7d29d173e914dfff48245d3d3a4d42575ce2d1db Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon36.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon37.png b/docs/zh/server/high_availability/ha/figures/icon37.png new file mode 100644 index 0000000000000000000000000000000000000000..58be4c621b6638115153e361801deb9ee06634d8 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon37.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon38.png b/docs/zh/server/high_availability/ha/figures/icon38.png new file mode 100644 index 0000000000000000000000000000000000000000..0c861ccb891f4fb5e533eb7f7151a8fce1571f17 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon38.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon39.png b/docs/zh/server/high_availability/ha/figures/icon39.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ba1f347452d0cd1c06c6c51d2cdf5aea5e490b Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon39.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon4.png b/docs/zh/server/high_availability/ha/figures/icon4.png new file mode 100644 index 0000000000000000000000000000000000000000..548dc8b648edb73ff1dd8a0266e8479203e72ca0 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon4.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon40.png b/docs/zh/server/high_availability/ha/figures/icon40.png new file mode 100644 index 0000000000000000000000000000000000000000..9c29dd1e9a1bf22c36abf51cb18fa9e47b455fab Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon40.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon41.png b/docs/zh/server/high_availability/ha/figures/icon41.png new file mode 100644 index 0000000000000000000000000000000000000000..9e8aea527a2119433fffec5a8800ebfa4fa5062f Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon41.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon42-o.png b/docs/zh/server/high_availability/ha/figures/icon42-o.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon42-o.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon42.png b/docs/zh/server/high_availability/ha/figures/icon42.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon42.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon43-o.png b/docs/zh/server/high_availability/ha/figures/icon43-o.png new file mode 100644 index 0000000000000000000000000000000000000000..284bdd551baf25beb4143013402e77a1a4c60ccb Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon43-o.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon44-o.png b/docs/zh/server/high_availability/ha/figures/icon44-o.png new file mode 100644 index 0000000000000000000000000000000000000000..810f4d784ee140dbf562e67a0d3fd391272626a5 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon44-o.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon45-o.png b/docs/zh/server/high_availability/ha/figures/icon45-o.png new file mode 100644 index 0000000000000000000000000000000000000000..3e528ce2c98284f020ae4912a853f5864526396b Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon45-o.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon46-o.png b/docs/zh/server/high_availability/ha/figures/icon46-o.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6a3ca0fe57016f3685981ed518493ceea1c855 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon46-o.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon47-o.png b/docs/zh/server/high_availability/ha/figures/icon47-o.png new file mode 100644 index 0000000000000000000000000000000000000000..6eeaba98d908775bd363a8ffcec27c3b6a214013 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon47-o.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon49-o.svg b/docs/zh/server/high_availability/ha/figures/icon49-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..f2d76acd147ccaf5e493a7c035bb90640af7817c --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon49-o.svg @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon5.png b/docs/zh/server/high_availability/ha/figures/icon5.png new file mode 100644 index 0000000000000000000000000000000000000000..e4206b7b584bf0702c7cb2f03a3a41e20bfba844 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon5.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon50-o.svg b/docs/zh/server/high_availability/ha/figures/icon50-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..05026802be4718205065d6369e14cc0b6ef05bc7 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon50-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon52-o.svg b/docs/zh/server/high_availability/ha/figures/icon52-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..23149c05873259cd39721b8ee9c3ab7db86d64c5 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon52-o.svg @@ -0,0 +1,9 @@ + + + attention + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/icon53-o.svg b/docs/zh/server/high_availability/ha/figures/icon53-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..50e33489ce984b0acfd621da4a8ef837fdf048c1 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon53-o.svg @@ -0,0 +1,11 @@ + + + + previous + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/icon54-o.svg b/docs/zh/server/high_availability/ha/figures/icon54-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..3b599aef4b822c707d2f646405bb00837aed96fd --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon54-o.svg @@ -0,0 +1,18 @@ + + + + Backspace + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/icon56-o.svg b/docs/zh/server/high_availability/ha/figures/icon56-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9f13b6861e3858deec8d57a5301c934acc247069 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon56-o.svg @@ -0,0 +1,19 @@ + + + + Slice 1 + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/icon57-o.svg b/docs/zh/server/high_availability/ha/figures/icon57-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e6fbfa1381b76ab3fcd45652b33267a7f6c69bb7 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon57-o.svg @@ -0,0 +1,11 @@ + + + + titlebutton/close_normal + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/icon58-o.svg b/docs/zh/server/high_availability/ha/figures/icon58-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9746dcacfc8e5d4c4b63233801e37418a190fc8f --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon58-o.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon6.png b/docs/zh/server/high_availability/ha/figures/icon6.png new file mode 100644 index 0000000000000000000000000000000000000000..88ced3587e9a42b145fe11393726f40aba9d1b2c Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon6.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon62-o.svg b/docs/zh/server/high_availability/ha/figures/icon62-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..09f61b446669df2e05a3351d40d8c30879c7b035 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon62-o.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon63-o.svg b/docs/zh/server/high_availability/ha/figures/icon63-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..06c03ed99260ffadc681475dad35610aedf67f83 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon63-o.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon66-o.svg b/docs/zh/server/high_availability/ha/figures/icon66-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..5793b3846b7fe6a5758379591215b16c7f9e1b52 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon66-o.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon68-o.svg b/docs/zh/server/high_availability/ha/figures/icon68-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..a7748052dfa436116d8742dca28f7d90865231ed --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon68-o.svg @@ -0,0 +1,23 @@ + + + + deepin-system-monitor + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/icon69-o.svg b/docs/zh/server/high_availability/ha/figures/icon69-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e21dfd00a32a44ee1c8e3882b4ca8239be04690f --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon69-o.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon7.png b/docs/zh/server/high_availability/ha/figures/icon7.png new file mode 100644 index 0000000000000000000000000000000000000000..05fe8aa38c84ca0c0c99b0b005ddec2f2ba42f4a Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon7.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon70-o.svg b/docs/zh/server/high_availability/ha/figures/icon70-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..b5787a7ffa5ed9519a48c6937c60927fd11fd455 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon70-o.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon71-o.svg b/docs/zh/server/high_availability/ha/figures/icon71-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..669a21f143b06cb45ea3f45f7f071809f2cbc8a8 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon71-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon72-o.svg b/docs/zh/server/high_availability/ha/figures/icon72-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..79067ed9b9ff7912e1742183b461fa056601b9cc --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon72-o.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon73-o.svg b/docs/zh/server/high_availability/ha/figures/icon73-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..cf6292387f5e790db6ebd66184aabcbb39257ee7 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon73-o.svg @@ -0,0 +1,13 @@ + + + + Down + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/icon75-o.svg b/docs/zh/server/high_availability/ha/figures/icon75-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..ef6823ccc19858f57374f0b78ad31514e8311be3 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon75-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon8.png b/docs/zh/server/high_availability/ha/figures/icon8.png new file mode 100644 index 0000000000000000000000000000000000000000..01543c3e0f5e96a023b4e1f0859a03e3a0dafd56 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon8.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon83-o.svg b/docs/zh/server/high_availability/ha/figures/icon83-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..35dd6eacc54a933dc9ebc3f3010edfa7363fecc0 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon83-o.svg @@ -0,0 +1,84 @@ + + + + + + image/svg+xml + + img_upload + + + + + + img_upload + Created with Sketch. + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon84-o.svg b/docs/zh/server/high_availability/ha/figures/icon84-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9bd11b9e7b45b506dd7e1c87d09d545d8f48af06 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon84-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon86-o.svg b/docs/zh/server/high_availability/ha/figures/icon86-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..5da20233309c43d4fc7b315f441cde476c835c67 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon86-o.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon88-o.svg b/docs/zh/server/high_availability/ha/figures/icon88-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..c2570c26575fd14cb5e9d9fe77831d2e8f6c9333 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon88-o.svg @@ -0,0 +1,13 @@ + + + + Left + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/icon9.png b/docs/zh/server/high_availability/ha/figures/icon9.png new file mode 100644 index 0000000000000000000000000000000000000000..a07c9ab8e51decd9a3bca8c969d2ae95bd68512c Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/icon9.png differ diff --git a/docs/zh/server/high_availability/ha/figures/icon90-o.svg b/docs/zh/server/high_availability/ha/figures/icon90-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..79b5e0a141f7969a8f77ae61f4c240de7187afe9 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon90-o.svg @@ -0,0 +1,12 @@ + + + + lock_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/icon92-o.svg b/docs/zh/server/high_availability/ha/figures/icon92-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..21341b64a832e1935252aa82e7a4e0b083c16eae --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon92-o.svg @@ -0,0 +1,12 @@ + + + + logout_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/icon94-o.svg b/docs/zh/server/high_availability/ha/figures/icon94-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..a47044149a02101dbd24a3fdb2f3ead77efca6c1 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon94-o.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon97-o.svg b/docs/zh/server/high_availability/ha/figures/icon97-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..4f4670de29d8c86885b5aa806b2c8cdc6fc16dcb --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon97-o.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/server/high_availability/ha/figures/icon99-o.svg b/docs/zh/server/high_availability/ha/figures/icon99-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e9a3aa60a51404c9390bfbea8d8ff09edc0e2e32 --- /dev/null +++ b/docs/zh/server/high_availability/ha/figures/icon99-o.svg @@ -0,0 +1,11 @@ + + + notes + + + + + + + + \ No newline at end of file diff --git a/docs/zh/server/high_availability/ha/figures/kiran-1.png b/docs/zh/server/high_availability/ha/figures/kiran-1.png new file mode 100644 index 0000000000000000000000000000000000000000..6f17788dce804c004027adfe45628eebffaa48cf Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-1.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-10.png b/docs/zh/server/high_availability/ha/figures/kiran-10.png new file mode 100644 index 0000000000000000000000000000000000000000..18cfa3074af1f4b8d49d064a77b016f24ab8c17c Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-10.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-11.png b/docs/zh/server/high_availability/ha/figures/kiran-11.png new file mode 100644 index 0000000000000000000000000000000000000000..b58fbb7ce8a798d5355855a4ac0638540df74d9e Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-11.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-12.png b/docs/zh/server/high_availability/ha/figures/kiran-12.png new file mode 100644 index 0000000000000000000000000000000000000000..920d0c7112be6bed509773413de36506d748b822 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-12.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-13.png b/docs/zh/server/high_availability/ha/figures/kiran-13.png new file mode 100644 index 0000000000000000000000000000000000000000..473ac4151c65951050800cb73313fee07077a9d6 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-13.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-14.png b/docs/zh/server/high_availability/ha/figures/kiran-14.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba17ddca84d25f112e564b542a971d6e7d4c10a Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-14.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-15.png b/docs/zh/server/high_availability/ha/figures/kiran-15.png new file mode 100644 index 0000000000000000000000000000000000000000..b561a2fccb7f159106065baaf88ff9fa32bba1d8 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-15.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-16.png b/docs/zh/server/high_availability/ha/figures/kiran-16.png new file mode 100644 index 0000000000000000000000000000000000000000..a4d71e812144e74cb854e25f215197368b60017f Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-16.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-17.png b/docs/zh/server/high_availability/ha/figures/kiran-17.png new file mode 100644 index 0000000000000000000000000000000000000000..5f52f0d0885fbcd62af5127df6f464bcd334e2b3 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-17.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-18.png b/docs/zh/server/high_availability/ha/figures/kiran-18.png new file mode 100644 index 0000000000000000000000000000000000000000..bbd1a5dbd99c509d936e51e1bcc5970c2311da9d Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-18.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-19.png b/docs/zh/server/high_availability/ha/figures/kiran-19.png new file mode 100644 index 0000000000000000000000000000000000000000..a9ad75326f5d5463a45b532ae05b110155426083 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-19.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-2.png b/docs/zh/server/high_availability/ha/figures/kiran-2.png new file mode 100644 index 0000000000000000000000000000000000000000..b62c95a0b7d2bcfbc0bbac084ed7df74e5412da5 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-2.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-20.png b/docs/zh/server/high_availability/ha/figures/kiran-20.png new file mode 100644 index 0000000000000000000000000000000000000000..a43f8e2dc5ff4b5445386fd0c703bdf6b1e186ec Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-20.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-21.png b/docs/zh/server/high_availability/ha/figures/kiran-21.png new file mode 100644 index 0000000000000000000000000000000000000000..19c758d585016351a1f26fdac48221bdf0710a53 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-21.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-22.png b/docs/zh/server/high_availability/ha/figures/kiran-22.png new file mode 100644 index 0000000000000000000000000000000000000000..703327a3f511c20cd977ae4cd68552ecb3dd6971 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-22.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-23.png b/docs/zh/server/high_availability/ha/figures/kiran-23.png new file mode 100644 index 0000000000000000000000000000000000000000..ddbbd80be5b926ab3446cbb10c22d892487956f8 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-23.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-24.png b/docs/zh/server/high_availability/ha/figures/kiran-24.png new file mode 100644 index 0000000000000000000000000000000000000000..54e864dcfd194db4b1672c05d3e60eb6acc605d9 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-24.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-25.png b/docs/zh/server/high_availability/ha/figures/kiran-25.png new file mode 100644 index 0000000000000000000000000000000000000000..f64461cc2610fb82db1eb27a5562c2ab0737dcf4 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-25.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-26.png b/docs/zh/server/high_availability/ha/figures/kiran-26.png new file mode 100644 index 0000000000000000000000000000000000000000..2bcd5335c14d3e241b732b2ee6c2adf3effbe652 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-26.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-27.png b/docs/zh/server/high_availability/ha/figures/kiran-27.png new file mode 100644 index 0000000000000000000000000000000000000000..2bcd5335c14d3e241b732b2ee6c2adf3effbe652 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-27.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-28.png b/docs/zh/server/high_availability/ha/figures/kiran-28.png new file mode 100644 index 0000000000000000000000000000000000000000..1650e93b66f11849ed69a9dacd5c9c5f135fc053 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-28.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-29.png b/docs/zh/server/high_availability/ha/figures/kiran-29.png new file mode 100644 index 0000000000000000000000000000000000000000..5d0b225b54dc5da9053aeb6f4b805e59d8685f7f Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-29.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-3.png b/docs/zh/server/high_availability/ha/figures/kiran-3.png new file mode 100644 index 0000000000000000000000000000000000000000..774ba1ea233c20bf3c7ae661e126e5251aef8662 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-3.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-30.png b/docs/zh/server/high_availability/ha/figures/kiran-30.png new file mode 100644 index 0000000000000000000000000000000000000000..ae7f591fdd3da24fdf30b95785cd07c9959ecb2b Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-30.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-31.png b/docs/zh/server/high_availability/ha/figures/kiran-31.png new file mode 100644 index 0000000000000000000000000000000000000000..fc4127dcd736d084ecabe84b40f165f0b07695b2 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-31.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-32.png b/docs/zh/server/high_availability/ha/figures/kiran-32.png new file mode 100644 index 0000000000000000000000000000000000000000..b02d7b1fbdfa58d63618e99085fd5a0ed517ce4d Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-32.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-33.png b/docs/zh/server/high_availability/ha/figures/kiran-33.png new file mode 100644 index 0000000000000000000000000000000000000000..502f5d272b6200b440b1ce916924e44c987f9922 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-33.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-34.png b/docs/zh/server/high_availability/ha/figures/kiran-34.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ad35752dba85a00024170f88702c3398e0872c Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-34.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-35.png b/docs/zh/server/high_availability/ha/figures/kiran-35.png new file mode 100644 index 0000000000000000000000000000000000000000..6c566afea5f485d79ff7de2ccd3d27a24835f14c Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-35.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-36.png b/docs/zh/server/high_availability/ha/figures/kiran-36.png new file mode 100644 index 0000000000000000000000000000000000000000..842470a94fb6864cdd45f2c9971ec73e7866ea88 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-36.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-37.png b/docs/zh/server/high_availability/ha/figures/kiran-37.png new file mode 100644 index 0000000000000000000000000000000000000000..b827be98850a3626f92ed1cd7b6b76f95d761261 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-37.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-38.png b/docs/zh/server/high_availability/ha/figures/kiran-38.png new file mode 100644 index 0000000000000000000000000000000000000000..f0972490115d0965e8e9006abd2e5e96ac2fc37c Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-38.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-39.png b/docs/zh/server/high_availability/ha/figures/kiran-39.png new file mode 100644 index 0000000000000000000000000000000000000000..f833c66c77737fb7cfbe5b4c4af48b0ba7747cea Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-39.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-4.png b/docs/zh/server/high_availability/ha/figures/kiran-4.png new file mode 100644 index 0000000000000000000000000000000000000000..7a6cf9c1f25266c31ddcb76f093bec664d64bac7 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-4.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-40.png b/docs/zh/server/high_availability/ha/figures/kiran-40.png new file mode 100644 index 0000000000000000000000000000000000000000..da430f32720ef8a032e2c16fe9caabd815f8b62f Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-40.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-41.png b/docs/zh/server/high_availability/ha/figures/kiran-41.png new file mode 100644 index 0000000000000000000000000000000000000000..424f50da38c18c12a235ebb56edd6d02ec1638f0 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-41.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-42.png b/docs/zh/server/high_availability/ha/figures/kiran-42.png new file mode 100644 index 0000000000000000000000000000000000000000..a506b0c4e7fd23c393c34e01b26086dae1ea9c62 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-42.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-43.png b/docs/zh/server/high_availability/ha/figures/kiran-43.png new file mode 100644 index 0000000000000000000000000000000000000000..90ca8be50f4343adcc0cc05b1ae7d0f32efcedc2 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-43.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-44.png b/docs/zh/server/high_availability/ha/figures/kiran-44.png new file mode 100644 index 0000000000000000000000000000000000000000..bc38c38001a8428cf18a05e6cd4a8f46b1d633a2 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-44.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-45.png b/docs/zh/server/high_availability/ha/figures/kiran-45.png new file mode 100644 index 0000000000000000000000000000000000000000..fadb655f342f99c669425480ad48733f1dccb2c9 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-45.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-46.png b/docs/zh/server/high_availability/ha/figures/kiran-46.png new file mode 100644 index 0000000000000000000000000000000000000000..096688c85e47acded83be03a7ff69f9d829d956b Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-46.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-47.png b/docs/zh/server/high_availability/ha/figures/kiran-47.png new file mode 100644 index 0000000000000000000000000000000000000000..3faa55c80eead6bfc9e96f59babcd2100392c2e5 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-47.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-48.png b/docs/zh/server/high_availability/ha/figures/kiran-48.png new file mode 100644 index 0000000000000000000000000000000000000000..1e44996d99006ffe793ae29b55035976942ac504 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-48.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-49.png b/docs/zh/server/high_availability/ha/figures/kiran-49.png new file mode 100644 index 0000000000000000000000000000000000000000..000cc37cb59fecc9ea497726f87231df187baf34 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-49.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-5.png b/docs/zh/server/high_availability/ha/figures/kiran-5.png new file mode 100644 index 0000000000000000000000000000000000000000..a27574bb4793e401750fff28e4568403dc489507 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-5.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-50.png b/docs/zh/server/high_availability/ha/figures/kiran-50.png new file mode 100644 index 0000000000000000000000000000000000000000..900efd80a6db6ab00fee3fa519e963f8f0620ba7 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-50.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-6.png b/docs/zh/server/high_availability/ha/figures/kiran-6.png new file mode 100644 index 0000000000000000000000000000000000000000..42c4f0357dfa11b53ca27a4d0d255b67a0f9c5ae Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-6.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-7.png b/docs/zh/server/high_availability/ha/figures/kiran-7.png new file mode 100644 index 0000000000000000000000000000000000000000..254ef11f36d958f6ef7c70853e5f61032f825463 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-7.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-8.png b/docs/zh/server/high_availability/ha/figures/kiran-8.png new file mode 100644 index 0000000000000000000000000000000000000000..29b5845d2fa94cba92719b8649a5e86c926ea911 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-8.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kiran-9.png b/docs/zh/server/high_availability/ha/figures/kiran-9.png new file mode 100644 index 0000000000000000000000000000000000000000..46bcfdd0e1e88ad0f0ade4a3990c3ac5d66060e7 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kiran-9.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kubesphere-console.png b/docs/zh/server/high_availability/ha/figures/kubesphere-console.png new file mode 100644 index 0000000000000000000000000000000000000000..9c93fbeafe366d78bc05dda6e0e673d2dad8874f Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kubesphere-console.png differ diff --git a/docs/zh/server/high_availability/ha/figures/kubesphere.png b/docs/zh/server/high_availability/ha/figures/kubesphere.png new file mode 100644 index 0000000000000000000000000000000000000000..939dcb70202b19c7853cbfd8f27f6e8e4678ce26 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/kubesphere.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-1.png b/docs/zh/server/high_availability/ha/figures/xfce-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0e478b9f10ddf3210d5f5fada2e45329e2d1d028 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-1.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-2.png b/docs/zh/server/high_availability/ha/figures/xfce-2.png new file mode 100644 index 0000000000000000000000000000000000000000..33a946d988d499a1e98cb43968b72119bd48d7a5 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-2.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-3.png b/docs/zh/server/high_availability/ha/figures/xfce-3.png new file mode 100644 index 0000000000000000000000000000000000000000..020356f0c981fac2aafe33c8e997efbf01af9253 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-3.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-4.png b/docs/zh/server/high_availability/ha/figures/xfce-4.png new file mode 100644 index 0000000000000000000000000000000000000000..21369e366322955023b427e7a2ae63fd29b387e5 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-4.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-5.png b/docs/zh/server/high_availability/ha/figures/xfce-5.png new file mode 100644 index 0000000000000000000000000000000000000000..1f7807877f775fe6aa32652a29ef833e48e1a6ee Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-5.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-6.png b/docs/zh/server/high_availability/ha/figures/xfce-6.png new file mode 100644 index 0000000000000000000000000000000000000000..e5376fcfd1737234a885d4d95649cd996005cf0c Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-6.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-7.png b/docs/zh/server/high_availability/ha/figures/xfce-7.png new file mode 100644 index 0000000000000000000000000000000000000000..b7a94df356b7b9f7dca3d305d066ec854406aaab Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-7.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-71.png b/docs/zh/server/high_availability/ha/figures/xfce-71.png new file mode 100644 index 0000000000000000000000000000000000000000..11d1618c907d4bb18de1eb68e42e9b98d92d91c3 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-71.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-8.png b/docs/zh/server/high_availability/ha/figures/xfce-8.png new file mode 100644 index 0000000000000000000000000000000000000000..f6f97d9a173105cb6a72e4b8c48deab25ecac898 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-8.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-81.png b/docs/zh/server/high_availability/ha/figures/xfce-81.png new file mode 100644 index 0000000000000000000000000000000000000000..b97c9a81c2a07efe361e6dc6ee8bed5db445ecfa Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-81.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-811.png b/docs/zh/server/high_availability/ha/figures/xfce-811.png new file mode 100644 index 0000000000000000000000000000000000000000..58233638eca203d917081d6a9ac5003474cbf60b Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-811.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-812.png b/docs/zh/server/high_availability/ha/figures/xfce-812.png new file mode 100644 index 0000000000000000000000000000000000000000..0fc975f75da95dce8a3e5a098d024578335c9426 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-812.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-813.png b/docs/zh/server/high_availability/ha/figures/xfce-813.png new file mode 100644 index 0000000000000000000000000000000000000000..4d399468c74355cbaa765380720cb9561e95f834 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-813.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-814.png b/docs/zh/server/high_availability/ha/figures/xfce-814.png new file mode 100644 index 0000000000000000000000000000000000000000..c09fd6524a20ba04e0fca30307d35fa05e79c1f4 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-814.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-82.png b/docs/zh/server/high_availability/ha/figures/xfce-82.png new file mode 100644 index 0000000000000000000000000000000000000000..170deb5fb43f4e924d5ba4eba94a02c341d31515 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-82.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-821.png b/docs/zh/server/high_availability/ha/figures/xfce-821.png new file mode 100644 index 0000000000000000000000000000000000000000..c5c1f3567dccda3d0d49ae445612d5b9ba27e09a Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-821.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-83.png b/docs/zh/server/high_availability/ha/figures/xfce-83.png new file mode 100644 index 0000000000000000000000000000000000000000..95e4844c0ece09819d3e9f1e8457bbf371b1282e Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-83.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-831.png b/docs/zh/server/high_availability/ha/figures/xfce-831.png new file mode 100644 index 0000000000000000000000000000000000000000..6456dd02f0281a5ec8d752ba5b95be581bcbfa09 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-831.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-832.png b/docs/zh/server/high_availability/ha/figures/xfce-832.png new file mode 100644 index 0000000000000000000000000000000000000000..2932aaacf71fa53f1d0c10340df3aebcc016e991 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-832.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-84.png b/docs/zh/server/high_availability/ha/figures/xfce-84.png new file mode 100644 index 0000000000000000000000000000000000000000..e0435c2edf9f68d193cff036215f32c259d378f0 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-84.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-841.png b/docs/zh/server/high_availability/ha/figures/xfce-841.png new file mode 100644 index 0000000000000000000000000000000000000000..c2c06346d4a296bfbe7836139cd943baa1ce6ea5 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-841.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-842.png b/docs/zh/server/high_availability/ha/figures/xfce-842.png new file mode 100644 index 0000000000000000000000000000000000000000..101bf6923e3780617d33dde04b92232ca7f87b42 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-842.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-85.png b/docs/zh/server/high_availability/ha/figures/xfce-85.png new file mode 100644 index 0000000000000000000000000000000000000000..21b39638fe4c83e0da5cdc69ecad9b7a22718a55 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-85.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-851.png b/docs/zh/server/high_availability/ha/figures/xfce-851.png new file mode 100644 index 0000000000000000000000000000000000000000..893064ca10399a683afbcb3752266d93b0a79a51 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-851.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-86.png b/docs/zh/server/high_availability/ha/figures/xfce-86.png new file mode 100644 index 0000000000000000000000000000000000000000..35e8a99e31e4a49eb64b24cfbab825111e40f709 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-86.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-861.png b/docs/zh/server/high_availability/ha/figures/xfce-861.png new file mode 100644 index 0000000000000000000000000000000000000000..affc46c874991a3b289e15072e06ba6566c099b1 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-861.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-87.png b/docs/zh/server/high_availability/ha/figures/xfce-87.png new file mode 100644 index 0000000000000000000000000000000000000000..47524c21d57c887c3398ea53a675f89e9f92113f Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-87.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-9.png b/docs/zh/server/high_availability/ha/figures/xfce-9.png new file mode 100644 index 0000000000000000000000000000000000000000..5586c4f62cc161665b91a56ad23b2320901901c0 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-9.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-91.png b/docs/zh/server/high_availability/ha/figures/xfce-91.png new file mode 100644 index 0000000000000000000000000000000000000000..ee69879bb4ad66405b045af5e3965e275fe8eabf Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-91.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-911.png b/docs/zh/server/high_availability/ha/figures/xfce-911.png new file mode 100644 index 0000000000000000000000000000000000000000..b49416558e9ab844fda2026b76e2e900ac106842 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-911.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-92.png b/docs/zh/server/high_availability/ha/figures/xfce-92.png new file mode 100644 index 0000000000000000000000000000000000000000..78dd6313c603aad9ebd37fe68e06f98b2a3b331e Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-92.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-921.png b/docs/zh/server/high_availability/ha/figures/xfce-921.png new file mode 100644 index 0000000000000000000000000000000000000000..5eb6f40df9ca73e11b9b9fa5079496ac0c36857b Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-921.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-93.png b/docs/zh/server/high_availability/ha/figures/xfce-93.png new file mode 100644 index 0000000000000000000000000000000000000000..06ac80c152fefbe1ad2ba1c989f6acfbbaf1a992 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-93.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-931.png b/docs/zh/server/high_availability/ha/figures/xfce-931.png new file mode 100644 index 0000000000000000000000000000000000000000..a156e5cf14ae154b93e845ff1bd5bc6ba12c9beb Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-931.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-94.png b/docs/zh/server/high_availability/ha/figures/xfce-94.png new file mode 100644 index 0000000000000000000000000000000000000000..f48064ff5902c4ea740ccba9a1640cbca27b5b72 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-94.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-941.png b/docs/zh/server/high_availability/ha/figures/xfce-941.png new file mode 100644 index 0000000000000000000000000000000000000000..f7904da12dc807836acfb9d6f24b8d9b976a2fdc Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-941.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-95.png b/docs/zh/server/high_availability/ha/figures/xfce-95.png new file mode 100644 index 0000000000000000000000000000000000000000..bda965b15a859e4cccf4b80f62875f79eb3470fd Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-95.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-951.png b/docs/zh/server/high_availability/ha/figures/xfce-951.png new file mode 100644 index 0000000000000000000000000000000000000000..6521a28275d2b63c12b47604c7afc926f7938697 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-951.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-96.png b/docs/zh/server/high_availability/ha/figures/xfce-96.png new file mode 100644 index 0000000000000000000000000000000000000000..29ce24923477065b98cacf603f185113e9959069 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-96.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-961.png b/docs/zh/server/high_availability/ha/figures/xfce-961.png new file mode 100644 index 0000000000000000000000000000000000000000..874fa200f4e63b690261d7827f3c73cf70861b32 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-961.png differ diff --git a/docs/zh/server/high_availability/ha/figures/xfce-962.png b/docs/zh/server/high_availability/ha/figures/xfce-962.png new file mode 100644 index 0000000000000000000000000000000000000000..bb84e35e43e992bc68b053a0da760bd5aa8b0270 Binary files /dev/null and b/docs/zh/server/high_availability/ha/figures/xfce-962.png differ diff --git a/docs/zh/server/high_availability/ha/ha_installation_and_deployment.md b/docs/zh/server/high_availability/ha/ha_installation_and_deployment.md new file mode 100644 index 0000000000000000000000000000000000000000..60b60ad88fd35b4198b7386d2785d9ae2598ff32 --- /dev/null +++ b/docs/zh/server/high_availability/ha/ha_installation_and_deployment.md @@ -0,0 +1,214 @@ +# HA的安装与部署 + +本章介绍如何安装和部署HA高可用集群。 + + +- [HA的安装与部署](#ha的安装与部署) + - [安装与部署](#安装与部署) + - [修改主机名称及/etc/hosts文件](#修改主机名称及etchosts文件) + - [配置yum源](#配置yum源) + - [安装HA软件包组件](#安装ha软件包组件) + - [设置hacluster用户密码](#设置hacluster用户密码) + - [修改`/etc/corosync/corosync.conf`文件](#修改etccorosynccorosyncconf文件) + - [管理服务](#管理服务) + - [关闭防火墙](#关闭防火墙) + - [管理pcs服务](#管理pcs服务) + - [管理pacemaker服务](#管理pacemaker服务) + - [管理corosync服务](#管理corosync服务) + - [节点鉴权](#节点鉴权) + - [访问前端管理平台](#访问前端管理平台) + + +## 安装与部署 + +- 环境准备:需要至少两台安装了openEuler 22.03 LTS SP4的物理机/虚拟机(现以两台为例),安装方法参考《openEuler 22.03 LTS SP4 安装指南》。 + +### 修改主机名称及/etc/hosts文件 + +- **注:两台主机均需要进行以下操作,现以其中一台为例。** + +在使用HA软件之前,需要确认修改主机名并将所有主机名写入/etc/hosts文件中。 + +- 修改主机名 + +```shell +# hostnamectl set-hostname ha1 +``` + +- 编辑`/etc/hosts`文件并写入以下字段 + +```conf +172.30.30.65 ha1 +172.30.30.66 ha2 +``` + +### 配置yum源 + +成功安装系统后,会默认配置好yum源,文件位置存放在`/etc/yum.repos.d/openEuler.repo`文件中,HA软件包会用到以下源: + +```conf +[OS] +name=OS +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/$basearch/RPM-GPG-KEY-openEuler + +[everything] +name=everything +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/$basearch/RPM-GPG-KEY-openEuler + +[EPOL] +name=EPOL +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/$basearch/RPM-GPG-KEY-openEuler +``` + +### 安装HA软件包组件 + +```shell +# yum install -y corosync pacemaker pcs fence-agents fence-virt corosync-qdevice sbd drbd drbd-utils +``` + +### 设置hacluster用户密码 + +```shell +# passwd hacluster +``` + +### 修改`/etc/corosync/corosync.conf`文件 + +```conf +totem { + version: 2 + cluster_name: hacluster + crypto_cipher: none + crypto_hash: none +} +logging { + fileline: off + to_stderr: yes + to_logfile: yes + logfile: /var/log/cluster/corosync.log + to_syslog: yes + debug: on + logger_subsys { + subsys: QUORUM + debug: on + } +} +quorum { + provider: corosync_votequorum + expected_votes: 2 + two_node: 1 + } +nodelist { + node { + name: ha1 + nodeid: 1 + ring0_addr: 172.30.30.65 + } + node { + name: ha2 + nodeid: 2 + ring0_addr: 172.30.30.66 + } + } +``` + +### 管理服务 + +#### 关闭防火墙 + +```shell +# systemctl stop firewalld +``` + +修改/etc/selinux/config文件中SELINUX状态为disabled + +```conf +# SELINUX=disabled +``` + +#### 管理pcs服务 + +- 启动pcs服务: + +```shell +# systemctl start pcsd +``` + +- 查询pcs服务状态: + +```shell +# systemctl status pcsd +``` + +若回显为如下,则服务启动成功。 + +![](./figures/HA-pcs.png) + +#### 管理pacemaker服务 + +- 启动pacemaker服务: + +```shell +# systemctl start pacemaker +``` + +- 查询pacemaker服务状态: + +```shell +# systemctl status pacemaker +``` + +若回显为如下,则服务启动成功。 + +![](./figures/HA-pacemaker.png) + +#### 管理corosync服务 + +- 启动corosync服务: + +```shell +# systemctl start corosync +``` + +- 查询corosync服务状态: + +```shell +# systemctl status corosync +``` + +若回显为如下,则服务启动成功。 + +![](./figures/HA-corosync.png) + +### 节点鉴权 + +- **注:一个节点上执行即可** + +```shell +# pcs host auth ha1 ha2 +``` + +### 访问前端管理平台 + +上述服务启动成功后,打开浏览器(建议使用:Chrome,Firefox),在浏览器导航栏中输入`https://localhost:2224`即可。 + +- 此界面为原生管理平台 + +![](./figures/HA-login.png) + +若安装社区新开发的管理平台请参考此文档。 + +- 下面为社区新开发的管理平台 + +![](./figures/HA-api.png) + +- 下一章将介绍如何快速使用HA高可用集群,以及添加一个实例。请参考[HA的使用实例文档](./HA的使用实例.md\)。 diff --git a/docs/zh/server/high_availability/ha/ha_usecase_examples.md b/docs/zh/server/high_availability/ha/ha_usecase_examples.md new file mode 100644 index 0000000000000000000000000000000000000000..4cca7b2fdbde127e25d0f2414ec5ae45f4470dd7 --- /dev/null +++ b/docs/zh/server/high_availability/ha/ha_usecase_examples.md @@ -0,0 +1,214 @@ +# HA使用实例 + +本章介绍如何快速使用HA高可用集群,以及添加一个实例。若不了解怎么安装,请参考[HA的安装与部署文档](./HA的安装与部署.md\)。 + + + - [HA使用实例](#HA使用与实例) + - [快速使用指南](#快速使用指南) + - [登录页面](#登录页面) + - [主页面](#主页面) + - [导航栏](#导航栏) + - [顶部操作区](#顶部操作区) + - [资源节点列表区](#资源节点列表区) + - [节点操作浮动区](#节点操作浮动区) + - [首选项配置](#首选项配置) + - [添加资源](#添加资源) + - [添加普通资源](#添加普通资源) + - [添加组资源](#添加组资源) + - [添加克隆资源](#添加克隆资源) + - [编辑资源](#编辑资源) + - [设置资源关系](#设置资源关系) + - [高可用mysql实例配置](#高可用mysql实例配置) + - [配置虚拟IP](#配置虚拟ip) + - [配置NFS存储](#配置nfs存储) + - [配置mysql](#配置mysql) + - [添加上述资源为组资源](#添加上述资源为组资源) + + +## 快速使用指南 + +- 以下操作均以社区新开发的管理平台为例。 + +### 登录页面 +用户名为`hacluster`,密码为该用户在主机上设置的密码。 + +![](./figures/HA-api.png) + +### 主页面 +登录系统后显示主页面,主页面由四部分组成:侧边导航栏、顶部操作区、资源节点列表区以及节点操作浮动区。 + +以下将详细介绍这四部分的特点与使用方法。 + +![](./figures/HA-home-page.png) + +#### 导航栏 +侧边导航栏由两部分组成:高可用集群软件名称和 logo 以及系统导航。系统导航由三项组成:【系统】、【集群配置】和【工具】。【系统】是默认选项,也是主页面的对应项,主要展示系统中所有资源的相关信息以及操作入口;【集群配置】下设【首选项配置】和【心跳配置】两项;【工具】下设【日志下载】和【集群快捷操作】两项,点击后以弹出框的形式出现。 + +#### 顶部操作区 +登录用户是静态显示,鼠标滑过用户图标,出现操作菜单项,包括【刷新设置】和【退出登录】两项,点击【刷新设置】,弹出【刷新设置】对话框,包含【刷新设置】选项,可以设置系统的自动刷新模式,包括【不自动刷新】、【每 5 秒刷新】和【每 10 秒刷新】三种选择,默认选择【不自动刷新】、【退出登录】即可注销本次登录,系统将自动跳到登录页面,此时,如果希望继续访问系统,则需要重新进行登录。 + +![](./figures/HA-refresh.png) + +#### 资源节点列表区 +资源节点列表集中展现系统中所有资源的【资源名】、【状态】、【资源类型】、【服务】、【运行节点】等资源信息,以及系统中所有的节点和节点的运行情况等节点信息。同时提供资源的【添加】、【编辑】、【启动】、【停止】、【清理】、【迁移】、【回迁】、【删除】和【关系】操作。 + +#### 节点操作浮动区 +节点操作浮动区域默认是收起的状态,每当点击资源节点列表表头中的节点时,右侧会弹出节点操作扩展区域,如图所示,该区域由收起按钮、节点名称、停止和备用四个部分组成,提供节点的【停止】和【备用】操作。点击区域左上角的箭头,该区域收起。 + +### 首选项配置 +以下操作均可用命令行配置,现只做简单示例,若想使用更多命令可以使用``pcs --help``进行查询。 + +``` +# pcs property set stonith-enabled=false +# pcs property set no-quorum-policy=ignore +``` +``pcs property``查看全部设置 + +![](./figures/HA-firstchoice-cmd.png) + +- 点击侧边导航栏中的【首选项配置】按钮,弹出【首选项配置】对话框。将No Quorum Policy和Stonith Enabled由默认状态改为如下对应状态;修改完成后,点击【确定】按钮完成配置。 + +![](./figures/HA-firstchoice.png) + +#### 添加资源 +##### 添加普通资源 +鼠标点击【添加普通资源】,弹出【创建资源】对话框,其中资源的所有必填配置项均在【基本】页面内,选择【基本】页面内的【资源类型】后会进一步给出该类资源的其他必填配置项以及选填配置项。填写资源配置信息时,对话框右侧会出现灰色文字区域,对当前的配置项进行解释说明。全部必填项配置完毕后,点击【确定】按钮即可创建普通资源,点击【取消】按钮,取消本次添加动作。【实例属性】、【元属性】或者【操作属性】页面中的选填配置项为选填项,不配置不会影响资源的创建过程,可以根据场景需要可选择修改,否则将按照系统默认值处理。 + +下面以apache为例,添加apache资源 +``` +# pcs resource create httpd ocf:heartbeat:apache +``` +查看资源运行状态 +``` +# pcs status +``` + +![](./figures/HA-pcs-status.png) + +- 添加apache资源 + +![](./figures/HA-add-resource.png) +- 若回显为如下,则资源添加成功 + +![](./figures/HA-apache-suc.png) +- 资源创建成功并启动,运行于其中一个节点上,例如ha1;成功访问apache界面。 + +![](./figures/HA-apache-show.png) + +##### 添加组资源 +添加组资源时,集群中需要至少存在一个普通资源。鼠标点击【添加组资源】,弹出【创建资源】对话框。【基本】页面内均为必填项,填写完毕后,点击【确定】按钮,即可完成资源的添加,点击【取消】按钮,取消本次添加动作。 + +- **注:组资源的启动是按照子资源的顺序启动的,所以选择子资源时需要注意按照顺序选择。** + +![](./figures/HA-group.png) + +若回显为如下,则资源添加成功 + +![](./figures/HA-group-suc.png) + +##### 添加克隆资源 +鼠标点击【添加克隆资源】,弹出【创建资源】对话框。【基本】页面内填写克隆对象,资源名称会自动生成,填写完毕后,点击【确定】按钮,即可完成资源的添加,点击【取消】按钮,取消本次添加动作。 + +![](./figures/HA-clone.png) + +若回显为如下,则资源添加成功 + +![](./figures/HA-clone-suc.png) +#### 编辑资源 +- 启动资源:资源节点列表中选中一个目标资源,要求:该资源处于非运行状态。对该资源执行启动动作。 +- 停止资源:资源节点列表中选中一个目标资源,要求:该资源处于运行状态。对该资源执行停止操作。 +- 清理资源:资源节点列表中选中一个目标资源,对该资源执行清理操作。 +- 迁移资源:资源节点列表中选中一个目标资源,要求:该资源为处于运行状态的普通资源或者组资源,执行迁移操作可以将资源迁移到指定节点上运行。 +- 回迁资源:资源节点列表中选中一个目标资源,要求:该资源已经完成迁移动作,执行回迁操作,可以清除该资源的迁移设置,资源重新迁回到原来的节点上运行。 +点击按钮后,列表中该资源项的变化状态与启动资源时一致。 +- 删除资源:资源节点列表中选中一个目标资源,对该资源执行删除操作。 + +#### 设置资源关系 +资源关系即为目标资源设定限制条件,资源的限制条件分为三种:资源位置、资源协同和资源顺序。 +- 资源位置:设置集群中的节点对于该资源的运行级别,由此确定启动或者切换时资源在哪个节点上运行,运行级别按照从高到低的顺序依次为:Master Node、Slave 1。 +- 资源协同:设置目标资源与集群中的其他资源是否运行在同一节点上,同节点资源表示该资源与目标资源必须运行在相同节点上,互斥节点资源表示该资源与目标资源不能运行在相同的节点上。 +- 资源顺序:设置目标资源与集群中的其他资源启动时的先后顺序,前置资源是指目标资源运行之前,该资源必须已经运行;后置资源是指目标资源运行之后,该资源才能运行。 + +## 高可用mysql实例配置 +- 先单独配置三个普通资源,待成功后添加为组资源。 +### 配置虚拟IP +在首页中点击添加-->添加普通资源,并按如下进行配置。 + +![](./figures/HA-vip.png) + +- 资源创建成功并启动,运行于其中一个节点上,例如ha1;可以ping通并连接,登录后可正常执行各种操作;资源切换到ha2运行;能够正常访问。 +- 若回显为如下,则资源添加成功 + +![](./figures/HA-vip-suc.png) + +### 配置NFS存储 +- 另外找一台机器作为nfs服务端进行配置 + +安装软件包 + +``` +# yum install -y nfs-utils rpcbind +``` +关闭防火墙 +``` +# systemctl stop firewalld && systemctl disable firewalld +``` +修改/etc/selinux/config文件中SELINUX状态为disabled +``` +# SELINUX=disabled +``` +启动服务 +``` +# systemctl start rpcbind && systemctl enable rpcbind +# systemctl start nfs-server && systemctl enable nfs-server +``` +服务端创建一个共享目录 +``` +# mkdir -p /test +``` +修改NFS配置文件 +``` +# vim /etc/exports +# /test *(rw,no_root_squash) +``` +重新加载服务 +``` +# systemctl reload nfs +``` + +客户端安装软件包,先把mysql安装上,为了把下面nfs挂载到mysql数据路径 +``` +# yum install -y nfs-utils mariadb-server +``` +在首页中点击添加-->添加普通资源,并按如下进行配置NFS资源。 + +![](./figures/HA-nfs.png) + +- 资源创建成功并启动,运行于其中一个节点上,例如ha1;nfs成功挂载到/var/lib/mysql路径下。资源切换到ha2运行;nfs从ha1节点取消挂载,并自动在ha2节点上挂载成功。 +- 若回显为如下,则资源添加成功 + +![](./figures/HA-nfs-suc.png) + +### 配置mysql +在首页中点击添加-->添加普通资源,并按如下进行配置mysql资源。 + +![](./figures/HA-mariadb.png) + +- 若回显为如下,则资源添加成功 + +![](./figures/HA-mariadb-suc.png) + +### 添加上述资源为组资源 +- 按资源启动顺序添加三个资源 + +在首页中点击添加-->添加组资源,并按如下进行配置组资源。 + +![](./figures/HA-group-new.png) + +- 组资源创建成功并启动,若回显与上述三个普通资源成功现象一致,则资源添加成功 + +![](./figures/HA-group-new-suc.png) + +- 将ha1节点备用,成功迁移到ha2节点,运行正常 + +![](./figures/HA-group-new-suc2.png) \ No newline at end of file diff --git a/docs/zh/server/installation_upgrade/installation/_toc.yaml b/docs/zh/server/installation_upgrade/installation/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8985d1195e70fdbfb7d3b8406ee029c12745c6d2 --- /dev/null +++ b/docs/zh/server/installation_upgrade/installation/_toc.yaml @@ -0,0 +1,29 @@ +isManual: true +label: '' +sections: + - label: FAQ + href: ./faq.md + - label: FAQ + href: ./faq_1.md + - label: 安装指南 + href: ./installation.md + - label: 安装指导 + href: ./installation_guide.md + - label: 安装指导 + href: ./installation_guide_1.md + - label: 安装方式介绍 + href: ./installation_modes.md + - label: 安装方式介绍 + href: ./installation_modes_1.md + - label: 安装在服务器 + href: ./installation_on_servers.md + - label: 安装准备 + href: ./installation_preparations.md + - label: 安装准备 + href: ./installation_preparations_1.md + - label: 安装在树莓派 + href: ./install_pi.md + - label: 参考资料 + href: ./more_resources.md + - label: 使用kickstart自动化安装 + href: ./using_kickstart_for_automatic_installation.md diff --git a/docs/zh/server/installation_upgrade/installation/faq.md b/docs/zh/server/installation_upgrade/installation/faq.md new file mode 100644 index 0000000000000000000000000000000000000000..008603eb23b5e813631042470b41e1cc09a8b8c3 --- /dev/null +++ b/docs/zh/server/installation_upgrade/installation/faq.md @@ -0,0 +1,346 @@ +# FAQ + +## 安装openEuler时选择第二盘位为安装目标,操作系统无法启动 + +### 问题现象 + +安装操作系统时,直接将系统安装到第二块磁盘sdb,重启系统后启动失败。 + +### 原因分析 + +当安装系统到第二块磁盘时,MBR和GRUB会默认安装到第二块磁盘sdb。这样会有下面两种情况: + +1. 如果第一块磁盘中有完整系统,则加载第一块磁盘中的系统启动。 +2. 如果第一块磁盘中没有完好的操作系统,则会导致硬盘启动失败。 + +以上两种情况都是因为BIOS默认从第一块磁盘sda中加载引导程序启动系统,如果sda没有系统,则会导致启动失败。 + +### 解决方法 + +有以下两种解决方案: + +- 当系统处于安装过程中,在选择磁盘(选择第一块或者两块都选择)后,指定引导程序安装到第一块盘sda中。 +- 当系统已经安装完成,若BIOS支持选择从哪个磁盘启动,则可以通过修改BIOS中磁盘启动顺序,尝试重新启动系统。 + +## openEuler开机后进入emergency模式 + +### 问题现象 + +openEuler系统开机后进入emergency模式,如下图所示: + +![](./figures/zh-cn_image_0229291264.jpg) + +### 原因分析 + +操作系统文件系统损坏导致磁盘挂载失败,或者io压力过大导致磁盘挂载超时(超时时间为90秒)。 + +系统异常掉电、物理磁盘io性能低等情况都可能导致该问题。 + +### 解决方法 + +1. 用户直接输入root帐号的密码,登录系统。 +2. 使用fsck工具,检测并修复文件系统,然后重启。 + + > ![](./public_sys-resources/icon-note.gif) **说明:** + > fsck(file system check)用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查。 用户可以通过“fsck.ext3 -h”、“fsck.ext4 -h”命令查看fsck的使用方法。 + +另外,如果用户需要取消磁盘挂载超时时间,可以直接在“/etc/fstab”文件中添加“x-systemd.device-timeout=0”。如下: + +```sh +# /etc/fstab +# Created by anaconda on Mon Sep 14 17:25:48 2015 +# +# Accessible filesystems, by reference, are maintained under '/dev/disk' +# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info +# +/dev/mapper/openEuler-root / ext4 defaults,x-systemd.device-timeout=0 0 0 +UUID=afcc811f-4b20-42fc-9d31-7307a8cfe0df /boot ext4 defaults,x-systemd.device-timeout=0 0 0 +/dev/mapper/openEuler-home /home ext4 defaults 0 0 +/dev/mapper/openEuler-swap swap swap defaults 0 0 +``` + +## 系统中存在无法激活的逻辑卷组时,重装系统失败 + +### 问题现象 + +由于磁盘故障,系统中存在无法激活的逻辑卷组,重装系统出现异常。 + +### 原因分析 + +安装时有激活逻辑卷组的操作,无法激活时会提示异常。 + +### 解决方法 + +重装系统前如果系统中存在无法激活的逻辑卷组,为了避免重装系统过程出现异常,需在重装前将逻辑卷组恢复到正常状态或者清除这些逻辑卷组。举例如下: + +- 恢复逻辑卷组状态 + 1. 使用以下命令清除vg激活状态, 防止出现“Can't open /dev/sdc exclusively mounted filesystem”。 + + ```sh + vgchange -a n testvg32947 + ``` + + 2. 根据备份文件重新创建pv。 + + ```sh + pvcreate --uuid JT7zlL-K5G4-izjB-3i5L-e94f-7yuX-rhkLjL --restorefile /etc/lvm/backup/testvg32947 /dev/sdc + ``` + + 3. 恢复vg信息。 + + ```sh + vgcfgrestore testvg32947 + ``` + + 4. 重新激活vg。 + + ```sh + vgchange -ay testvg32947 + ``` + +- 清除逻辑卷组 + + ```sh + vgchange -a n testvg32947 + vgremove -y testvg32947 + ``` + +## 选择安装源出现异常 + +### 问题现象 + +选择安装源后出现:"Error checking software selection"。 + +### 原因分析 + +这种现象是由于安装源中的软件包依赖存在问题。 + +### 解决方法 + +检查安装源是否存在异常。如果异常,使用新的安装源。 + +## 如何手动开启kdump服务 + +### 问题现象 + +执行systemctl status kdump命令,显示状态信息如下,提示无预留内存。 + +![](./figures/zh-cn_image_0229291280.png) + +### 原因分析 + +kdump服务需要系统预留一段内存用于运行kdump内核,而当前系统没有为kdump服务预留内存,所以无法运行kdump服务。 + +### 解决方法 + +已安装操作系统的场景 + +1. 修改/boot/efi/EFI/openEuler/grub.cfg,添加crashkernel=1024M,high。 +2. 重启系统使配置生效。 +3. 执行如下命令,检查kdump状态: + + ```sh + systemctl status kdump + ``` + + 若回显如下,即kdump的状态为active,说明kdump已使能,操作结束。 + + ![](./figures/zh-cn_image_0229291272.png) + +### 参数说明 + +kdump内核预留内存参数说明如下: + +**表 1** crashkernel参数说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

内核启动参数

+

描述

+

默认值

+

备注

+

crashkernel=X

+

在4G以下的物理内存预留X大小的内存给kdump使用

+

无,用户根据实际情况调整

+

该配置方法只在4G以下内存预留,必须保证4G以下连续可用内存足够预留

+

crashkernel=X@Y

+

在Y起始地址预留X大小的内存给kdump使用

+

无,用户根据实际情况调整

+

需要确保Y起始地址的X大小内存未被其他模块预留

+

crashkernel=X,high

+

在4G以下的物理内存中预留256M大小,在4G以上预留X大小内存给kdump使用

+

无,用户根据实际情况调整,推荐值为1024M,high

+

确保4G以下内存有256M连续可用内存,4G以上有连续X大小内存可预留。实际预留内存大小为256M+X

+

crashkernel=X,low

+

crashkernel=Y,high

+

在4G以下的物理内存中预留X大小,在4G以上预留Y大小内存给kdump使用

+

无,用户根据实际情况调整

+

需要确保4G以下有X大小连续可用内存,4G以上有Y大小连续可用内存。实际预留内存大小为X+Y

+
+ +## 多块磁盘组成逻辑卷安装系统后,再次安装不能只选其中一块磁盘 + +### 问题现象 + +在安装系统时,如果之前的系统选择多块磁盘组成逻辑卷进行安装,再次安装时,如果只选择了其中的一块或几块磁盘,没有全部选择,在保存配置时提示配置错误,如[图1](#fig115949762617)所示。 + +**图 1** 配置错误提示 +![](./figures/Configuration_error_prompt.png) + +### 原因分析 + +之前的逻辑卷包含了多块磁盘,只在一块磁盘上安装会破坏逻辑卷。 + +### 解决方法 + +因为多块磁盘组成逻辑卷相当于一个整体,所以只需要删除对应的卷组即可。 + +1. 按“Ctrl+Alt+F2”可以切换到命令行,执行如下命令找到卷组。 + + ```sh + vgs + ``` + + ![](./figures/zh-cn_image_0231657950.png) + +2. 执行如下命令,删除卷组。 + + ```sh + vgremove euleros + ``` + +3. 执行如下命令,重启安装程序即可生效。 + + ```sh + systemctl restart anaconda + ``` + + > ![](./public_sys-resources/icon-note.gif) **说明:** + > 图形模式下也可以按“Ctrl+Alt+F6”回到图形界面,点击[图1](#fig115949762617)右下角的“Refresh”刷新存储配置生效。 + > +## x86物理机UEFI模式由于Secure Boot安全选项问题无法安装 + +### 问题现象 + +x86物理机安装系统时,由于设置了BIOS选项Secure Boot 为enable(默认是disable),导致系统一直停留在“No bootable device”提示界面,无法继续安装,如[图2](#fig115949762618)所示。 + +**图 2** “No bootable device”提示界面 +![](./figures/No-bootable-device.png) + +### 原因分析 + +开启Secure Boot后,主板会验证引导程序及操作系统 ,若没有用对应的私钥进行签名,则无法通过主板上内置公钥的认证。 + +### 解决方法 + +进入BIOS,设置Secure Boot为disable,重新安装即可。 + +1. 系统启动时,按“F11”,输入密码“Admin@9000”进入BIOS。 + + > ![](./public_sys-resources/icon-note.gif) **说明:** + > 这里的服务器特指华为的泰山服务器,如果是其他服务器,应当自行确认自己的密码。 + > + + ![](./figures/BIOS.png) + +2. 选择进入Administer Secure Boot。 + + ![](./figures/security.png) + +3. 设置Enforce Secure Boot为Disabled。 + + ![](./figures/select.png) + + > ![](./public_sys-resources/icon-note.gif) **说明:** + > 设置Secure Boot Status为Disabled之后,保存退出,重新安装即可。 + > + +## 安装openEuler时,软件选择页面选择“服务器-性能工具”,安装后messages日志有pmie_check报错信息 + +### 问题现象 + +安装系统时软件选择勾选服务器-性能工具,会安装pcp相关软件包,正常安装并重启后,/var/log/messages日志文件中会产生报错:pmie_check failed in /usr/share/pcp/lib/pmie。 + +### 原因分析 + +anaconda不支持在chroot环境中安装selinux策略模块,当安装pcp-selinux时,postin脚本安装pcp相关selinux策略模块执行失败,从而导致重启后产生报错。 + +### 解决办法 + +完成安装并重启后,以下方法选择其一。 + +1. 执行如下命令,安装selinux策略模块pcpupstream。 + + ```sh + /usr/libexec/pcp/bin/selinux-setup /var/lib/pcp/selinux install "pcpupstream" + ``` + +2. 重新安装pcp-selinux。 + + ```sh + sudo dnf reinstall pcp-selinux + ``` + +## 在两块已经安装了系统的磁盘上进行重复选择,并自定义分区时,安装失败 + +### 问题现象 + +用户在安装操作系统过程中,存在两块都已经安装过的磁盘,此时如果先选择一块盘,进行自定义分区,然后点击取消按钮,再选择第二块盘,并进行自定义分区时,会出现安装失败。 + +![](./figures/cancle_disk.png) +![](./figures/custom_paratition.png) + +### 原因分析 + +用户存在两次选择磁盘的操作,当前点击取消后,再选择第二块磁盘,磁盘信息不正确,导致安装失败。 + +### 解决方法 + +直接选择目标磁盘进行自定义分区,请勿频繁取消操作,如果一定要进行取消重选建议重新安装。 + +### issue访问链接 + + + +## 安装LSI MegaRAID卡的物理机kdump无法生成vmcore + +### 问题现象 + +部署好kdump服务后,手动执行`echo c > /proc/sysrq-trigger`命令或由于kernel故障导致kernel宕机,触发kdump启动second kernel过程中,MegaRAID驱动报错“BRCM Debug mfi stat 0x2d,data len requested/completed 0x200/0x0”,报错信息如下图,最终导致无法生成vmcore。 + +![](./figures/Megaraid_IO_Request_uncompleted.png) + +### 原因分析 + +由于默认配置了reset_devices启动参数,second kernel启动过程中会触发设备复位(reset_devices)操作,设备复位操作导致MegaRAID控制器或磁盘状态故障,转储vmcore文件时访问MegaRAID卡的磁盘报错,进而无法生成vmcore。 + +### 解决方法 + +在物理机`/etc/sysconfig/kdump`文件中将second kernel默认启动参数`reset_devices`删除,可以规避second kernel启动过程中由于MegaRAID卡驱动复位设备所致IO请求未完成问题,以成功生成vmcore。 +![](./figures/reset_devices.png) diff --git a/docs/zh/server/installation_upgrade/installation/faq_1.md b/docs/zh/server/installation_upgrade/installation/faq_1.md new file mode 100644 index 0000000000000000000000000000000000000000..359d8c23fe65b0a24fbad4b89396fee9e7b20511 --- /dev/null +++ b/docs/zh/server/installation_upgrade/installation/faq_1.md @@ -0,0 +1,54 @@ +# FAQ + + +- [FAQ](#faq) + - [树莓派启动失败](#树莓派启动失败) + - [nmcli 命令连接 WIFI 失败](#nmcli-命令连接-wifi-失败) + + + +## 树莓派启动失败 + +### 问题现象 + +将 openEuler 发布的树莓派镜像刷写入 SD 卡后,树莓派启动失败。 + +### 原因分析 + +刷写 openEuler 发布的树莓派镜像后,树莓派启动失败,大致有以下几种情况: + +1. 下载的镜像文件不完整,请确保该镜像通过完整性校验。 +2. 镜像写入 SD 卡过程中出现问题,多出现在 Windows 环境下使用应用软件刷写镜像到 SD 卡的情况。 + +### 解决方法 + +将完整的镜像重新刷写入 SD 卡。 + +## nmcli 命令连接 WIFI 失败 + +### 问题现象 + +执行 `nmcli dev wifi connect SSID password PWD` 命令连接 WIFI 失败。例如提示 `Error: Connection activation failed: (7) Secrets were required, but not provided.` 等错误。 + +### 原因分析 + +执行的命令缺少密码。注意,如果密码中包含特殊字符,需要使用单引号将密码括起来。如果使用 nmcli 命令行连接 WIFI 失败,建议使用 nmtui 字符界面进行连接。 + +### 解决方法 + +执行 `nmtui` 命令进入到 nmtui 字符界面,按照以下步骤连接 WIFI。 + +1. 选择 `Edit a connection`,按 `Enter` 进入编辑网络连接窗口。 +2. 按下键盘右方向键选择 `Add`,按 `Enter` 进入新建网络连接窗口。 +3. 连接类型选择 `Wi-Fi` ,然后按下键盘右方向键选择 `Create`,按 `Enter` 进入 WIFI 编辑连接信息的界面。 +4. WIFI 连接信息界面主要需要编辑以下内容,其他信息根据实际情况而定。编辑结束后选择 `OK`,按 `Enter` 完成编辑并回退到编辑网络连接窗口。 + 1. `Profile name` 栏输入该 WIFI 连接的名称,这里可以使用默认名称,如 `Wi-Fi connection 1`; + 2. `Device` 栏输入要使用的无线网卡接口,这里输入 `wlan0`; + 3. `SSID` 栏输入要连接的 WIFI 的 SSID; + 4. `Security` 栏选择 WIFI 密码加密方式,这里根据实际情况选择,例如选择 `WPA & WPA2 Personal`; + 5. `Password` 栏输入 WIFI 密码。 + +5. 选择 `Back` 回退到最初的 nmtui 字符界面。 +6. 选择 `Activate a connection`,按 `Enter` 进入激活网络连接窗口。 +7. 查看添加的 WIFI 连接是否已激活(已激活的连接名称前有 `*` 标记)。如果未激活,选择该 WIFI 连接,然后按下键盘右方向键选择 `Activate`,按 `Enter` 激活该连接。待激活完成后,选择 `Back`,按 `Enter` 退出该激活界面,回退到最初的 nmtui 字符界面。 +8. 选择 `Quit`,然后按下键盘右方向键选择 `OK`,按 `Enter` 退出 nmtui 字符界面。 \ No newline at end of file diff --git a/docs/zh/server/installation_upgrade/installation/figures/Advanced_User_Configuration.png b/docs/zh/server/installation_upgrade/installation/figures/Advanced_User_Configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..29fc332ed3ecdc70b2a031d2633a6ec4ec5a9f0b Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/Advanced_User_Configuration.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/Automatic_installation_complete.png b/docs/zh/server/installation_upgrade/installation/figures/Automatic_installation_complete.png new file mode 100644 index 0000000000000000000000000000000000000000..f2169685ef202bae133ae74fec620ec64aea46df Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/Automatic_installation_complete.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/BIOS.png b/docs/zh/server/installation_upgrade/installation/figures/BIOS.png new file mode 100644 index 0000000000000000000000000000000000000000..d5a96738001c5a910174c030af583bb09ff29ce6 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/BIOS.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/CD-ROM_drive_icon.png b/docs/zh/server/installation_upgrade/installation/figures/CD-ROM_drive_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9e87cfaf1bdee860b3cbc35150decd8db492f8aa Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/CD-ROM_drive_icon.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/Configuration_error_prompt.png b/docs/zh/server/installation_upgrade/installation/figures/Configuration_error_prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..c5802a2b7a750eed8429ec06c7e4919a3d161a9e Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/Configuration_error_prompt.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/Disk_encryption_password.png b/docs/zh/server/installation_upgrade/installation/figures/Disk_encryption_password.png new file mode 100644 index 0000000000000000000000000000000000000000..c76b59d3214da2c55119f0300103be0b9c2d8792 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/Disk_encryption_password.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/Image_dialog_box.png b/docs/zh/server/installation_upgrade/installation/figures/Image_dialog_box.png new file mode 100644 index 0000000000000000000000000000000000000000..e72253b3d16d4388fa051c73b94e8923020ad467 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/Image_dialog_box.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/Installation_source.png b/docs/zh/server/installation_upgrade/installation/figures/Installation_source.png new file mode 100644 index 0000000000000000000000000000000000000000..8da57ce369b566c8b6c5e791f38d508b8a48ee03 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/Installation_source.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/Installation_wizard.png b/docs/zh/server/installation_upgrade/installation/figures/Installation_wizard.png new file mode 100644 index 0000000000000000000000000000000000000000..292b54c8a5348d476cf39d2eaefc967bd4be21c5 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/Installation_wizard.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/Keyboard_layout.png b/docs/zh/server/installation_upgrade/installation/figures/Keyboard_layout.png new file mode 100644 index 0000000000000000000000000000000000000000..c13cca0aeb161d15820790c2c1911d1ccbf1b16d Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/Keyboard_layout.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/Manual_partitioning.png b/docs/zh/server/installation_upgrade/installation/figures/Manual_partitioning.png new file mode 100644 index 0000000000000000000000000000000000000000..4ff41957f520ee0abdf55fbe90cd92dd0ea35f1f Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/Manual_partitioning.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/Megaraid_IO_Request_uncompleted.png b/docs/zh/server/installation_upgrade/installation/figures/Megaraid_IO_Request_uncompleted.png new file mode 100644 index 0000000000000000000000000000000000000000..9f5a9e0f03055c59148830c8f8894196acd6861f Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/Megaraid_IO_Request_uncompleted.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/NetworkandHostName.png b/docs/zh/server/installation_upgrade/installation/figures/NetworkandHostName.png new file mode 100644 index 0000000000000000000000000000000000000000..316fc98aa569fd697458c7341194170065bc22f8 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/NetworkandHostName.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/No-bootable-device-page.png b/docs/zh/server/installation_upgrade/installation/figures/No-bootable-device-page.png new file mode 100644 index 0000000000000000000000000000000000000000..944c658d621f00b18e4aa75eaca420d76c08715c Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/No-bootable-device-page.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/No-bootable-device.png b/docs/zh/server/installation_upgrade/installation/figures/No-bootable-device.png new file mode 100644 index 0000000000000000000000000000000000000000..944c658d621f00b18e4aa75eaca420d76c08715c Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/No-bootable-device.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/Partition_expansion.png b/docs/zh/server/installation_upgrade/installation/figures/Partition_expansion.png new file mode 100644 index 0000000000000000000000000000000000000000..37a6ef7a2371a9a5518f6d2ce0dc6d36fc71fe1b Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/Partition_expansion.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/Setting_the_System_Boot_Option.png b/docs/zh/server/installation_upgrade/installation/figures/Setting_the_System_Boot_Option.png new file mode 100644 index 0000000000000000000000000000000000000000..682f555c3a6da63e1cf6e6eed402e2851c4a7ebb Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/Setting_the_System_Boot_Option.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/Target_installation_position.png b/docs/zh/server/installation_upgrade/installation/figures/Target_installation_position.png new file mode 100644 index 0000000000000000000000000000000000000000..5dcf04a4bfa256efef32a1cf7dd146161030381d Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/Target_installation_position.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/cancle_disk.png b/docs/zh/server/installation_upgrade/installation/figures/cancle_disk.png new file mode 100644 index 0000000000000000000000000000000000000000..ff0e9a143fc14dc725d0b1e770bd54ce874aeec6 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/cancle_disk.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/choice.png b/docs/zh/server/installation_upgrade/installation/figures/choice.png new file mode 100644 index 0000000000000000000000000000000000000000..0e40f5fd8d73dbcbad6bdcec5d56d3883d54023a Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/choice.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/choosesoftware.png b/docs/zh/server/installation_upgrade/installation/figures/choosesoftware.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f4dbfb6de56498a46752cbebe88ab623366160 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/choosesoftware.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/confignetwork1.png b/docs/zh/server/installation_upgrade/installation/figures/confignetwork1.png new file mode 100644 index 0000000000000000000000000000000000000000..f3e96bd5869c1ed59e4723c712a4effac266c6df Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/confignetwork1.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/createuser.png b/docs/zh/server/installation_upgrade/installation/figures/createuser.png new file mode 100644 index 0000000000000000000000000000000000000000..a280f355f07f34e590bfcb5c33a16b2201051857 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/createuser.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/custom_paratition.png b/docs/zh/server/installation_upgrade/installation/figures/custom_paratition.png new file mode 100644 index 0000000000000000000000000000000000000000..0f46bc9fcfbf57cd986661029c6b2c037dac2919 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/custom_paratition.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/dateandtime.png b/docs/zh/server/installation_upgrade/installation/figures/dateandtime.png new file mode 100644 index 0000000000000000000000000000000000000000..31bc653dfc1c7c43e944c486a6b76709958658fb Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/dateandtime.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/installation_overview.png b/docs/zh/server/installation_upgrade/installation/figures/installation_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..f6542ffc0c01cf2489071ebf5addb47f12b0a242 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/installation_overview.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/installation_procedure.png b/docs/zh/server/installation_upgrade/installation/figures/installation_procedure.png new file mode 100644 index 0000000000000000000000000000000000000000..06a9d14a166bdfe86c5eec0be7929a7a99c5ea45 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/installation_procedure.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/installsource.png b/docs/zh/server/installation_upgrade/installation/figures/installsource.png new file mode 100644 index 0000000000000000000000000000000000000000..7f3de07705c40b34364c36194353df5ec94e9596 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/installsource.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/languagesupport.png b/docs/zh/server/installation_upgrade/installation/figures/languagesupport.png new file mode 100644 index 0000000000000000000000000000000000000000..47963880b08e051ab6472a2faee2a64a9a1ae0a1 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/languagesupport.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/reset_devices.png b/docs/zh/server/installation_upgrade/installation/figures/reset_devices.png new file mode 100644 index 0000000000000000000000000000000000000000..70cc2e0138dd48950f4704bd3f1160448d5058a1 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/reset_devices.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/restarticon.png b/docs/zh/server/installation_upgrade/installation/figures/restarticon.png new file mode 100644 index 0000000000000000000000000000000000000000..33bf7cd2e435ff04f3947eb39ba20019b12bf2d2 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/restarticon.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/root_password.png b/docs/zh/server/installation_upgrade/installation/figures/root_password.png new file mode 100644 index 0000000000000000000000000000000000000000..acc7ac215cecfe996a991cf61c69c52d19a06d31 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/root_password.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/security.png b/docs/zh/server/installation_upgrade/installation/figures/security.png new file mode 100644 index 0000000000000000000000000000000000000000..59ac7bfcef796fc32d0127a9d6095d32cb282fb2 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/security.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/select.png b/docs/zh/server/installation_upgrade/installation/figures/select.png new file mode 100644 index 0000000000000000000000000000000000000000..0e40f5fd8d73dbcbad6bdcec5d56d3883d54023a Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/select.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/select_software.png b/docs/zh/server/installation_upgrade/installation/figures/select_software.png new file mode 100644 index 0000000000000000000000000000000000000000..2497183cd538762783fe95b765c867ab169e3423 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/select_software.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/selectlanguage.png b/docs/zh/server/installation_upgrade/installation/figures/selectlanguage.png new file mode 100644 index 0000000000000000000000000000000000000000..4351e637cb673e156864cf5110e68efb3c3e1f2b Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/selectlanguage.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/sourceftp.png b/docs/zh/server/installation_upgrade/installation/figures/sourceftp.png new file mode 100644 index 0000000000000000000000000000000000000000..dc28927b5666f85fd715effa039548dcb4aa8e36 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/sourceftp.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/sourceftps.png b/docs/zh/server/installation_upgrade/installation/figures/sourceftps.png new file mode 100644 index 0000000000000000000000000000000000000000..2becacbc983e0b25d6d49a8fe98a0bb8b15f68f5 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/sourceftps.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/sourcenfs.png b/docs/zh/server/installation_upgrade/installation/figures/sourcenfs.png new file mode 100644 index 0000000000000000000000000000000000000000..82f408f1d07d9b8145a15da1a77ddaaab1002c1b Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/sourcenfs.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/startparam.png b/docs/zh/server/installation_upgrade/installation/figures/startparam.png new file mode 100644 index 0000000000000000000000000000000000000000..661febc759a150367509505577ea7ea216f911be Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/startparam.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291229.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291229.png new file mode 100644 index 0000000000000000000000000000000000000000..d245d48dc07e2b01734e21ec1952e89fa9269bdb Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291229.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291236.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291236.png new file mode 100644 index 0000000000000000000000000000000000000000..a32856aa08e459ed0f51f8fcf4c2f51511c12095 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291236.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291243.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291243.png new file mode 100644 index 0000000000000000000000000000000000000000..2418510f855facae4b47129840894490a1eac7ca Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291243.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291247.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291247.png new file mode 100644 index 0000000000000000000000000000000000000000..d67b599b9ab74017c0800529053befed3efab8a7 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291247.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291264.jpg b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291264.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f0a0658e08010f4f453e558a41e31257783b416 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291264.jpg differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291270.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291270.png new file mode 100644 index 0000000000000000000000000000000000000000..deefef68670d64c131e4c41911a01236158f1dd1 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291270.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291272.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291272.png new file mode 100644 index 0000000000000000000000000000000000000000..e0ad8102bddd886c3bd7a306b088e8a52e2b99c9 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291272.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291280.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291280.png new file mode 100644 index 0000000000000000000000000000000000000000..5754e734c48b23ace2a4fbf1302b820077cd7b71 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291280.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291286.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291286.png new file mode 100644 index 0000000000000000000000000000000000000000..4ffcb081e2c8f82bcc49a65a939f2cd8bd6f949b Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229291286.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229420473.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229420473.png new file mode 100644 index 0000000000000000000000000000000000000000..86c61a4b8e2a5795baff2fc74629924d01d7b97b Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0229420473.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0231657950.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0231657950.png new file mode 100644 index 0000000000000000000000000000000000000000..bea985ef710c57aeba16600067304b1005ad92e8 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_0231657950.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_Installed.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_Installed.png new file mode 100644 index 0000000000000000000000000000000000000000..33d0a04f04cf029e31ea5d8ae44839031e62b675 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_Installed.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_createUsr.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_createUsr.png new file mode 100644 index 0000000000000000000000000000000000000000..4cee49e214e87de21ecea2eea4a943f83cbe7a5b Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_createUsr.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_installSofware.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_installSofware.png new file mode 100644 index 0000000000000000000000000000000000000000..b9a4e5f26f07ba8a30f81d277c5623942bb497bb Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_installSofware.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_installSource.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_installSource.png new file mode 100644 index 0000000000000000000000000000000000000000..3d389473db457b9a19be7dacdd518489ffcfcbd3 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_installSource.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_installdest.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_installdest.png new file mode 100644 index 0000000000000000000000000000000000000000..4209d529e8e9fe7c6994b115406d9f0f54591685 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_installdest.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_language.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_language.png new file mode 100644 index 0000000000000000000000000000000000000000..926764de3579ec3efd00143d87d0a3421c8e53a7 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_language.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_menu.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..5a926240fc432344679691226356b0995e8ecca4 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_menu.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_net.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_net.png new file mode 100644 index 0000000000000000000000000000000000000000..9dac3c51959809b2a1caddd869f947a2aaa2335d Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_net.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_networkConfig.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_networkConfig.png new file mode 100644 index 0000000000000000000000000000000000000000..f63832b0fbe4192c575ea1e7fc390f3a8f2c02df Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_networkConfig.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_ntp.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_ntp.png new file mode 100644 index 0000000000000000000000000000000000000000..c3fe55d693f634bba48ccfc7394ca3cf08cc722a Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_ntp.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_rootpassword.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_rootpassword.png new file mode 100644 index 0000000000000000000000000000000000000000..0eca548547c20a192b65beea2975613c8c78517c Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_rootpassword.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_rootset.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_rootset.png new file mode 100644 index 0000000000000000000000000000000000000000..88fa89f98e11762b72382da6cd25a70aa83031c4 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_rootset.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_software.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_software.png new file mode 100644 index 0000000000000000000000000000000000000000..93eb89226c05c01b7f6e6bffee6e87edaa4b7588 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_software.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_startInstall.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_startInstall.png new file mode 100644 index 0000000000000000000000000000000000000000..5c5a722f855a9f054b7818289e0521b48a73664a Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_startInstall.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_timeNTP.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_timeNTP.png new file mode 100644 index 0000000000000000000000000000000000000000..5ab50811e839af0934ace8a59348c501e20ed8be Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_timeNTP.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_timeZone.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_timeZone.png new file mode 100644 index 0000000000000000000000000000000000000000..d3dba49b4fc51f01dbe8a33edf8234bddee52500 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_timeZone.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_timeZoneCity.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_timeZoneCity.png new file mode 100644 index 0000000000000000000000000000000000000000..82a185c151638ceb3f8b96bbc1ca3fe5f20bacf9 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_timeZoneCity.png differ diff --git a/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_timedate.png b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_timedate.png new file mode 100644 index 0000000000000000000000000000000000000000..b5f0396032c9fb2db64fb3d0cb3ad21ba8da70b4 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/figures/zh-cn_image_text_timedate.png differ diff --git a/docs/zh/server/installation_upgrade/installation/install_pi.md b/docs/zh/server/installation_upgrade/installation/install_pi.md new file mode 100644 index 0000000000000000000000000000000000000000..8481d337ff33f15514737f643fd0b2b6e578a1bf --- /dev/null +++ b/docs/zh/server/installation_upgrade/installation/install_pi.md @@ -0,0 +1,3 @@ +# 安装在树莓派 + +本文是介绍 openEuler 操作系统安装在树莓派的方法,使用本手册的用户需要具备基础的 Linux 系统管理知识。 diff --git a/docs/zh/server/installation_upgrade/installation/installation.md b/docs/zh/server/installation_upgrade/installation/installation.md new file mode 100644 index 0000000000000000000000000000000000000000..73d369e0dabf5156dd4b7d120a8d93331981a7c6 --- /dev/null +++ b/docs/zh/server/installation_upgrade/installation/installation.md @@ -0,0 +1,5 @@ +# 安装指南 + +本文档主要介绍openEuler操作系统安装方法,以指导用户顺利完成openEuler操作系统安装。 + +本文档适用于所有使用openEuler操作系统的用户,特别是初次使用或想了解openEuler的用户,包括系统工程师、管理员及维护人员等。使用本手册的用户需要具备基础的Linux系统管理知识。 diff --git a/docs/zh/server/installation_upgrade/installation/installation_guide.md b/docs/zh/server/installation_upgrade/installation/installation_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..7be98aec239dfeba61b0c641a614a1751457b223 --- /dev/null +++ b/docs/zh/server/installation_upgrade/installation/installation_guide.md @@ -0,0 +1,543 @@ +# 安装指导 + +本章以光盘安装为例介绍安装openEuler,其他安装方式除在启动安装时的引导方式不同外,待启动安装后安装流程相同,在此不再说明。 + +## 启动安装 + +### 使用光盘引导安装 + +在服务器的光驱中加载openEuler安装镜像,重启服务器,具体步骤如下。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>在安装开始前,需要保证服务器启动选项为光驱优先。安装步骤以BMC挂载虚拟光驱进行光盘安装的操作举例。通过物理光驱安装的操作简单,启动安装后的流程相同,在此不再说明。 + +1. 在虚拟界面工具栏中,单击虚拟光驱工具如下图所示。 + + **图 1** 光驱图标 + ![](./figures/CD-ROM_drive_icon.png) + + 弹出镜像对话框,如下图所示。 + + **图 2** 镜像对话框 + ![](./figures/Image_dialog_box.png) + +2. 在镜像对话框中,选择“镜像文件”, 并单击“...”。弹出“打开”对话框。 +3. 选择镜像文件,单击“打开”。然后在镜像对话框中,单击“连接”。当“连接”显示为“断开”后,表示虚拟光驱已连接到服务器。 +4. 在工具栏中,单击重启工具重启设备,如下图所示。 + + **图 3** 重启图标 + ![](./figures/restarticon.png) + +### 安装引导界面 + +系统使用引导介质完成引导后会显示引导菜单。该引导菜单除启动安装程序外还提供一些选项。安装系统时,默认采用“Test this media & install openEuler 22.03-LTS-SP4”方式进行安装。如果要选择默认选项之外的选项,请使用键盘中的“↑”和“↓”方向键进行选择,并在选项为高亮状态时按“Enter”。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- 如果60秒内未按任何键,系统将从默认选项“Test this media & install openEuler 22.03-LTS-SP4”自动进入安装界面。 +>- 安装物理机时,如果使用键盘上下键无法选择启动选项,按“Enter”键无响应,可以单击BMC界面上的鼠标控制图标“![](./figures/zh-cn_image_0229420473.png)”,设置“键鼠复位”。 + +**图 4** 安装引导界面 +![](figures/Installation_wizard.png) + +安装引导选项说明如下: + +- Install openEuler 22.03-LTS-SP4 —— 在您的服务器上使用图形用户界面模式安装。 + +- Test this media & install openEuler 22.03-LTS-SP4 —— 默认选项,在您的服务器上使用图形用户界面模式安装,但在启动安装程序前会进行安装介质的完整性检查。 + +- Troubleshooting —— 问题定位模式,系统无法正常安装时使用。进入问题定位模式后,有如下两个选项。 + - Install openEuler 22.03-LTS-SP4 in basic graphics mode —— 简单图形安装模式,该模式下在系统启动并运行之前不启动视频驱动程序。 + - Rescue the openEuler system —— 救援模式,用于修复系统。该模式下输出定向到 VNC(Virtual Network Computing)或 BMC(Baseboard Management Controller)端,串口不可用。 + - Run a memory test(仅legacy安装模式下存在) —— 用于测试内存是否正常工作,以确定是否因内存问题导致的系统问题。 + - Boot from local drive(仅legacy安装模式下存在) —— 该模式下可以选择本地硬盘启动系统。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- UEFI启动模式下,按“e”进入参数编辑界面;按“c”进入命令行模式。 +>- Legacy启动模式下,按“Tab”进入参数编辑界面;Legacy安装使用syslinux,不走grub,该模式下无法切换到命令行模式。 + +### 图形化模式安装 + +在“安装引导界面”中选择“Test this media & install openEuler 22.03-LTS-SP4”进入图形化模式安装。 + +可以通过键盘操作图形化安装程序。 + +- “Tab”、“shift Tab”:界面控件(按钮、区域框、复选框等)间的移动。 +- “↑”、“↓”方向键:列表里的移动。 +- “←”、“→”方向键:水平工具条和表条间移动。 +- “空格”、“Enter”:选择或删除高亮显示的选项、展开或折叠下拉菜单。 +- “Alt”+“快捷键”:选择快捷键所在的控件,其中快捷键可通过按住Alt高亮(加下划线)显示。 + +## 设置安装程序语言 + +启动安装后,在进入安装程序主界面之前,系统会提示用户设置安装过程中使用的语言。当前默认为英语,用户可根据实际情况进行调整,如[图5](#zh-cn_topic_0186390093_zh-cn_topic_0122145864_fig144630179151)所示,选择“中文”。 + +**图 5** 选择语言 + +![](figures/selectlanguage.png) + +完成设置后,单击“继续”,进入安装设置主界面。 + +如果您想退出安装,可以单击“退出”并在弹出的“您确定要退出安装程序吗?”对话框中单击“是”重新进入“安装引导界面”。 + +## 进入安装界面 + +系统安装程序正常启动后,会进入[图6](#zh-cn_topic_0186390094_zh-cn_topic_0122145883_fig5969171592212)所示的安装设置主界面。用户可以进行时间、语言、安装源、网络、安装位置等相关设置。 + +部分配置项会有告警符号,用户完成该选项配置后,告警符号消失。当界面上不存在告警符号时,用户才能单击“开始安装”进行系统安装。 + +如果您想退出安装,可以单击“退出”并在弹出的“您确定要退出安装程序吗?”对话框中单击“是”重新进入“安装引导界面”。 + +**图 6** 安装信息摘要 +![](figures/installation_overview.png) + +## 设置键盘 + +在“安装信息摘要”页面中选择“键盘”,用户可以在系统中添加或者删除多个键盘布局。 + +- 要查看键盘布局,请在左侧选框中单击选中该键盘布局,然后单击下面的“键盘”按钮。 +- 要测试键盘布局,请在左侧选框中添加键盘布局,然后在右上角键盘图标处进行点击切换为目标键盘,单击右侧文本框内部,输入文本以确认所选键盘布局可正常工作。 + +**图 7** 键盘布局 +![](figures/Keyboard_layout.png) + +设置完成后,请单击左上角“完成”返回“安装信息摘要”页面。 + +## 设置系统语言 + +在“安装信息摘要”页面中选择“语言支持”,设置系统的语言。如[图8](#zh-cn_topic_0186390098_zh-cn_topic_0122145772_fig187301927172619)所示,用户也可根据实际情况进行调整,选择“中文”。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>若选择“中文”,系统安装完成后,使用VNC登录不支持中文显示,使用串口登录支持中文显示,使用SSH登录时是否支持中文显示与使用的SSH客户端有关。若选择“English”,则无影响。 + +**图 8** 语言支持 +![](figures/languagesupport.png) + +设置完成后,请单击左上角“完成”返回“安装信息摘要”页面。 + +## 设置时间和日期 + +在“安装信息摘要”页面中选择“时间和日期”,设置系统的时区、日期、时间等。 + +设置时区时,用户可通过页面顶部的“地区”和“城市”下拉菜单中进行选择,如[图9](#zh-cn_topic_0186390096_zh-cn_topic_0122145900_fig1260162652312)所示。 + +如果您所在城市没有出现在下拉菜单中,请选择同一时区中离您最近的城市。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- 手动设置时区时,请先关闭右上角“网络时间”同步开关。 +>- 如需使用网络时间,请保证网络能连通远程NTP服务器,设置网络具体请参见“[设置网络和主机名](#设置网络和主机名)”。 + +**图 9** 日期和时间 +![](figures/dateandtime.png) + +设置完成后,请单击左上角“完成”返回“安装信息摘要”页面。 + +## 设置安装源 + +在“安装信息摘要”页面中选择“安装源”,指定安装源的位置。 + +- 当使用完整光盘安装时,安装程序会自动探测并显示安装源信息,用户直接使用默认配置即可,不需要进行设置,如[图10](#zh-cn_topic_0186390100_zh-cn_topic_0144427079_fig93633295132)所示。 + + **图 10** 安装源 + + ![](figures/Installation_source.png) + +- 当使用网络源进行安装的时候,需设置网络源的 URL。 + + - http 或 https 方式 + + http 或 https 方式的安装源如下图所示。 输入框内容以实际版本发布的安装源地址为准,如https://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/x86_64/ ,其中openEuler-22.03-LTS-SP4 为版本号,x86_64 为CPU 架构,可根据实际情况输入。 + + ![](figures/installsource.png) + + >![](./public_sys-resources/icon-note.gif) **说明:** + > + >- 如果https服务器使用的是私有证书,则需要在安装引导界面按“e”(UEFI模式下)或“Tab”(Legacy模式下)进入已选选项的参数编辑界面,在参数中增加inst.noverifyssl参数。UEFI模式下inst.noverifyssl参数应加在linux开头的行。 + + + + - ftp 方式 + + ftp 方式的安装源如下图所示,输入框内容根据 ftp 地址输入。 + + ![](figures/sourceftp.png) + + ftp服务器需要用户自己搭建,将iso镜像进行挂载,挂载出的文件拷贝到ftp的共享目录中。 + + - nfs 方式 + + nfs 方式的安装源如下图所示,输入框内容根据 nfs 地址输入。 + + ![](figures/sourcenfs.png) + + nfs服务器需要用户自己搭建,将iso镜像进行挂载,挂载出的文件拷贝到nfs的共享目录中。 + +安装过程中,如果“设置安装源”有疑问,可参考“[选择安装源出现异常](./FAQ.html#选择安装源出现异常)”。 + +设置完成后,请单击左上角“完成”返回“安装信息摘要”页面。 + +## 选择安装软件 + +在“安装信息摘要”页面中选择“软件选择”,指定需要安装的软件包。 + +用户需要根据实际的业务需求,在左侧选择一个“最小安装”,在右侧选择安装环境的附加选项,如[图11](#zh-cn_topic_0186390261_zh-cn_topic_0122145865_fig03031519101414)所示。 + +**图 11** 软件选择 + +![](figures/choosesoftware.png) + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- 在最小安装的环境下,并非安装源中所有的包都会安装。如果用户需要使用的包未安装,可将安装源挂载到本地制作repo源,通过DNF工具单独安装。 +>- 选择“虚拟化主机”时会默认安装虚拟化组件qemu、libvirt、edk2,且可在附加选项处选择是否安装ovs等组件。 + +设置完成后,请单击左上角“完成”返回“安装信息摘要”页面。 + +## 设置安装目的地 + +在“安装信息摘要”页面中选择“安装目的地”,设置操作系统的安装磁盘及分区。 + +在[图12](#fig1195417125015)所示的页面中您可以看到计算机中的本地可用存储设备。 + +**图 12** 安装目标位置 +![](figures/Target_installation_position.png) + +### 存储配置 + +在“安装目标位置”界面,您需要进行存储配置以便对系统分区。您可以手动配置分区,也可以选择让安装程序自动分区。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- 在进行分区时,出于系统性能和安全的考虑,建议您划分如下单独分区:/boot、/var、/var/log 、/var/log/audit、/home、/tmp。 +>- 系统如果配置了swap分区,当系统的物理内存不够用时,会使用swap分区。虽然 swap分区可以增大物理内存大小的限制,但是如果由于内存不足使用到swap分区,会增加系统的响应时间,性能变差。因此在物理内存充足或者性能敏感的系统中,不建议配置swap分区。 +>- 如果需要拆分逻辑卷组则需要选择“自定义”进行手动分区,并在“手动分区”界面单击“卷组”区域中的“修改”按钮重新配置卷组。 + +**自动** + +如果是在未使用过的存储设备中执行全新安装,或者不需要保留该存储设备中的任何数据,建议选择“自动”进行自动分区。设置完成后,请单击“完成”返回“安装信息摘要”页面。 + +**自定义** + +若用户需进行手动分区,选择“自定义”按钮,并单击左上角“完成”,出现手动分区界面。 + +在“手动分区”界面可以通过如下两种方式进行分区,分区完成后如[图13](#fig1277151815248)所示。 + +- 自动创建:在界面单击“点击这里自动创建它们”,系统会根据可用的存储空间,自动分区。 + +- 手动创建:单击“![](./figures/zh-cn_image_0229291243.png)”添加新挂载点,建议每个挂载点的期望容量不超过可用空间。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + >若设置的挂载点期望容量超过了可用空间,系统将剩余的可用空间全部分配给该挂载点。 + +**图 13** 手动分区 +![](figures/Manual_partitioning.png) + +>![](./public_sys-resources/icon-note.gif) **说明:** +> 如果选择非 UEFI 引导,则不需要 /boot/efi 分区。若选择 UEFI 引导,则必须有 /boot/efi 分区。 + +设置完成后,请单击左上角”完成“按钮,弹出“更改摘要”对话框,提示更改产生的变更信息。 + +点击“接受更改”,返回“安装信息摘要”页面。 + +## 设置网络和主机名 + +在“安装信息摘要”页面中选择“网络和主机名”,设置系统的网络功能。 + +安装程序会自动探测可本地访问的接口。探测到的接口列在左侧方框中,右侧显示相应的接口详情,如[图14](#zh-cn_topic_0186390264_zh-cn_topic_0122145831_fig123700157297)所示。用户可以通过页面右上角的开关,来开启或者关闭网络接口。开关默认是关闭状态,若设置安装源选择的是在网络上安装,需要开启开关。用户还可以单击“配置”以配置选中的接口。勾选“自动以优先级连接”选项,即可将该网卡设置为开机自启动,如[图15](#zh-cn_topic_0186390264_zh-cn_topic_0122145831_fig6)所示。 + +用户可在页面下方“主机名”字段输入主机名。主机名可以是完全限定域名(FQDN),其格式为hostname.domainname;也可以是简要主机名,其格式为hostname。 + +**图 14** 网络和主机名 +![](figures/NetworkandHostName.png) + +**图 15** 配置网络 + +![](figures/confignetwork1.png) + +设置完成后,请单击左上角“完成”返回“安装信息摘要”页面。 + +## 设置root密码 + +在“安装信息摘要”页面中选择“根密码”,弹出设置“ROOT密码”界面,如[图16](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1323165793018)所示,根据[密码复杂度](#密码复杂度)输入密码并再次输入密码进行确认。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- root帐户是用来执行关键系统管理任务,不建议您在日常工作及系统访问时使用root帐户。 +> +>- 在“ROOT密码”界面若选择“锁定root帐户”则root帐户将禁用。 + +**图 16** root密码 +![](figures/root_password.png) + +### 密码复杂度 + +用户设置的root用户密码或新创建用户的密码均需要满足密码复杂度要求,否则会导致密码设置或用户创建失败。设置密码的复杂度的要求如下: + +1. 口令长度至少8个字符。 +2. 口令至少包含大写字母、小写字母、数字和特殊字符中的任意3种。 +3. 口令不能和帐号一样。 +4. 口令不能使用字典词汇。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + >在已装好的openEuler环境中,可以通过`cracklib-unpacker /usr/share/cracklib/pw_dict > dictionary.txt`命令导出字典库文件dictionary.txt,用户可以查询密码是否在该字典中。 + +完成设置后,单击左上角的“完成”返回“安装信息摘要”页面。 + +## 创建用户 + +在“安装信息摘要”页面中选择“创建用户”,弹出“创建用户”的界面如[图17](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1237715313319)所示。输入用户名,并设置密码。另外您还可以通过“高级”选项设置用户主目录、用户组等,如[图18](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig128716531312)所示。 + +**图 17** 创建用户 +![](figures/createuser.png) + +**图 18** 高级用户配置 +![](figures/Advanced_User_Configuration.png) + +### 高级设置要求 + +创建用户,默认会创建同名用户组,可以手动设置用户以及用户组ID,高级选项中用户组名请留空(如果填写同名用户组,会导致不能创建用户);如果用户组和用户不同名,请正常填写需要创建的用户组。 + +完成设置后,单击左上角的“完成”返回“安装信息摘要”页面。 + +## 开始安装 + +在安装界面上完成所有必填选项的配置后,界面上的警告会消失。此时,用户可以单击“开始安装”进行系统安装。 + +## 安装过程 + +开始安装后会出现进度页面,显示安装进度及所选软件包写入系统的进度,如[图19](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1590863119306)所示。 + +>![](./figures/zh-cn_image_0229291229.png) +>若系统安装过程中,单击“退出”,或复位、下电服务器,则安装过程被中断,系统将不可用,需要重新进行安装。 + +**图 19** 安装过程 +![](figures/installation_procedure.png) + +## 安装完成 + +安装过程执行完成后,openEuler完成安装,单击“重启系统”后,系统将重新启动。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +> - 如果当前使用物理光盘安装操作系统,且在重启过程中安装光盘没有自动弹出,请手动取出光盘,则可以直接进入openEuler命令行登录界面。 +> - 如果当前使用虚拟光驱安装操作系统,则需要修改服务器的启动项为“硬盘”,然后重启服务器,则可以直接进入openEuler命令行登录界面。 + +## 文本模式安装 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- UEFI启动模式下,选择安装模式,按“e”进入参数编辑界面,在linux启动参数行末尾添加inst.text,按“ctrl+x”,进入文本安装。 +>- Legacy启动模式下,选择安装模式,按“Tab”进入参数编辑界面,添加启动参数inst.text,按回车键,进入文本安装。 +可以通过界面提示操作键盘进行文本程序安装。如【图1】所示。 + +**图 1** 文本菜单 +>![](figures/zh-cn_image_text_menu.png) + +>![](./public_sys-resources/icon-note.gif) **说明:** +[x]表示此项已配置(或者系统默认已配置),可以根据需要进行设置;[!]表示此项未配置,在启动安装前必须完成配置。 + +## 设置系统语言 + +在文本主界面【图1】输入“1”,然后回车,设置系统的语言。用户可根据实际情况进行调整,如[图2](#zh-cn_topic_0186390268_zh-cn_topic_0122145909_fig4782177787260)所示。 + +**图 2** 文本菜单 +>![](figures/zh-cn_image_text_language.png) + +设置完成后,在界面输入“c”,返回安装配置主页面。 + +## 设置时间和日期 + +在文本主界面【图1】输入“2”并回车,进入时间设置,如[图3](#zh-cn_topic_0186390268_zh-cn_topic_0122145909_fig4615555918615)所示。 + +**图 3** 时间设置 +>![](figures/zh-cn_image_text_timedate.png) + +- 时区设置 +在[图3](#zh-cn_topic_0186390268_zh-cn_topic_0122145909_fig4615555918615)中,输入“1”并回车,进入系统时区设置。用户可根据实际情况进行调整,设置系统的时区及城市,如【图4】所示。 + +**图 4** 时区设置 +>![](figures/zh-cn_image_text_timeZone.png) + +选择城市时,因为城市数量多需要分页显示,出现“Press ENTER to continue”提示,请点击回车以显示全部的城市信息,如[图5](#zh-cn_topic_0186390268_zh-cn_topic_0122145909_fig9289965048109)所示。 + +**图 5** 城市设置 +>![](figures/zh-cn_image_text_timeZoneCity.png) + +设置完成后,在界面输入“c”,返回安装配置主页面。 + +- NTP设置 +在[图3](#zh-cn_topic_0186390268_zh-cn_topic_0122145909_fig4615555918615)中,输入“2”并回车,进入NTP设置,如【图6】所示。 + +**图 6** NTP设置 + +>![](figures/zh-cn_image_text_timeNTP.png) + +设置完成后,在界面输入“c”,返回安装配置主页面。 + +## 设置安装源 + +在文本主界面【图1】输入“3”并回车,指定安装源的位置,如[图7](#zh-cn_topic_0186390268_zh-cn_topic_0122145909_fig8095563954238)所示。您可以选择可本地访问的安装源,也可以选择网络位置。 + +**图 7** 安装源设置 + +![](figures/zh-cn_image_text_installSource.png) + +设置完成后,在界面输入“c”,返回安装配置主页面。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- CD/DVD:从挂载光驱获取安装源。 +>- local ISO file:从本地磁盘中获取iso文件。 +>- Network:通过http、https、ftp、nfs获取网路服务器上的安装源。 + +## 选择安装软件 + +在文本主界面【图1】输入“4”并回车,指定需要安装的软件包。如[图8](#zh-cn_topic_0186390268_zh-cn_topic_0122145909_fig2423583527003)所示。 +Minimal Install:最小环境。提供openEuler基本功能,默认为最小环境安装。用户选择安装环境,在界面输入“c”;然后选择已选环境的附加选项“Add-ons”,选择需要安装的软件包。 + +**图 8** 安装源设置 + +![](figures/zh-cn_image_text_installSofware.png) + +不同安装环境的可选附加包会有差异: + +1. Standard:标准。openEuler标准安装。 +2. Container Management:容器管理。用于管理 Linux 容器的工具。 +3. Development Tools:开发工具。基本开发环境。 +4. Headless Management:无图形终端系统管理工具。用于管理无图像终端系统的工具。 +5. Legacy UNIX Compatibility:传统UNIX兼容性。用于从继承UNIX环境中迁移或者可用于该环境的兼容程序。 +6. Network Servers:网络服务器。这些软件包包括基于网络的服务器,例如DHCP、Kerberos和NIS。 +7. Scientific Support:科学计数法支持。用于数学和科学计算以及平行计算的工具。 +8. Security Tools:安全性工具。用于完整性和可信验证的安全性工具。 +9. System Tools:系统工具。这组软件包是各类系统工具的集合,如:连接SMB共享的客户;监控网络交通的工具。 +10. Smart Card Support:智能卡支持。支持使用智能卡验证。 + +设置完成后,在界面输入“c”,返回安装配置主页面。 + +## 设置安装目的地 + +在文本主界面【图1】输入“5”并回车,设置操作系统的安装位置。如[图9](#zh-cn_topic_0186390268_zh-cn_topic_0122145909_fig3928430235799)所示。安装程序会自动探测并显示可用安装位置信息,通常情况下,用户直接使用默认配置即可。 + +**图 9** 安装目的地设置 + +![](figures/zh-cn_image_text_installdest.png) + +- 分区选项 + + - Replace Existing Linux system(s):替换已有系统。只使用已有系统占用的空间,已有系统数据将会被覆盖掉。 + + - Use All Space:使用所有空间。清理系统盘所有数据,安装的系统会占用所有的系统盘空间。 + + - Use Free Space:使用剩余空间。仅在系统盘剩余空间上安装系统,不会清理已有系统的数据。 + + - Manually assign mount points:手动分配挂载点。用户可以手动分配挂载点,但是该功能仅在实验阶段,实际上并不能实现手动分配挂载点的功能。 + +- 分区方案 + + - Standard Partition:标准分区。标准分区可包含文件系统或者 swap 空间,也可为软件 RAID 或者 LVM 物理卷提供容器。 + + - LVM:逻辑卷。逻辑卷管理(LVM)显示一个基本物理存储空间(比如硬盘或者 LUN)的简单裸机视图。可将物理存储中视为物理卷的分区分组成为卷组。可将每个卷组分成多个逻辑卷,每个逻辑卷模拟一个标准磁盘分区。因此,LVM 逻辑卷可作为包含多个物理磁盘的分区使用。 + + - LVM Thin Provisioning:逻辑卷精简配置。使用精简配置,您可以管理可用空间的存储池,也称精简池,可在程序需要时将其分配给任意数量的设备。可在需要时动态扩展精简池以便有效分配存储空间。 + +设置完成后,在界面输入“c”,返回安装配置主页面。 + +>![](./public_sys-resources/icon-note.gif) **说明:** + +- 在进行分区时,出于系统性能和安全的考虑,建议您划分如下单独分区:/boot、/var、/var/log 、/var/log/audit、/home、/tmp。 + +- 系统如果配置了swap分区,当系统的物理内存不够用时,会使用swap分区。虽然 swap分区可以增大物理内存大小的限制,但是如果由于内存不足使用到swap分区,会增加系统的响应时间,性能变差。因此在物理内存充足或者性能敏感的系统中,不建议配置swap分区。同时也需要注意,swap分区的卸载对内存有一定要求,系统的空闲内存(包括当前系统内的可回收内存)大小应该大于当前的swap分区中的所使用内存,否则swap分区的卸载将会失败。 + +- 系统默认从第一块磁盘引导。若本地有两块或更多可用存储设备,建议选择第一块磁盘作为操作系统安装位置,否则可能造成操作系统无法正常启动,详见4.2 安装 openEuler 时选择第二盘位为安装目标,操作系统无法启动。 + +## 设置网络和主机名 + +在文本主界面【图1】输入“6”并回车,设置系统的网络功能。如[图10](#zh-cn_topic_0186390268_zh-cn_topic_0122145909_fig1795569513661)所示。用户可以设置主机名,以及配置网络设备。安装阶段可以不用配置,系统启动之后再进行配置。 + +**图 10** 网络设置 + +![](figures/zh-cn_image_text_net.png) + +- 设置主机名 +选择“1”,输入主机名localhost,然后按回车键,配置网卡。 +由于内核和systemd不接受hostname以“.”符号结尾,请在设置hostname时确保其末尾不是“.”符号,否则会造成设置失败。 +- 配置网卡 +选择“2”,配置网卡信息。如[图11](#zh-cn_topic_0186390268_zh-cn_topic_0122145909_fig8855555707338)所示。 + +**图 11** 网卡配置 + +![](figures/zh-cn_image_text_networkConfig.png) + +1. IPv4 address or "dhcp" for DHCP:配置IPv4的地址,默认值为dhcp,有dhcp服务器分配ip地址。 +2. IPv4 netmask:配置IPv4的掩码。 +3. IPv4 gateway:配置IPv4的网关。 +4. IPv6 address[/prefix] or "auto" for automatic, "dhcp" for DHCP, "ignore" to turn off:配置IPv6地址,默认为auto。 +5. IPv6 default gateway:配置IPv6默认网关。 +6. Nameservers (comma separated):DNS服务器。 +7. Connect automatically after reboot:重启之后自动连接网络。 +8. Apply configuration in installer: 在安装程序中应用该配置。 + +设置完成后,在界面输入“c”,返回安装配置主页面。 + +## 设置root密码 + +在文本主界面【图1】输入“7”并回车,设置root密码。如[图12](#zh-cn_topic_0186390268_zh-cn_topic_0122145909_fig3845102911461)所示。 + +**图 12** root密码设置 +>![](figures/zh-cn_image_text_rootset.png) + +选择“1”,选择SM3加密方式,然后按“c”键,输入密码。也可以默认跳过不选择SM3加密,按“c”键,输入密码。如[图13](#zh-cn_topic_0186390268_zh-cn_topic_0122145909_fig3633420080130)所示。 + +**图 13** 输入root密码 +>![](figures/zh-cn_image_text_rootpassword.png) + +设置完成后,在界面输入“c”,返回安装配置主页面。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- 强制用户在安装系统时设置root密码,否则无法安装通过。 +> +>- root帐户用于执行关键系统管理任务,不建议您在日常工作及系统访问时使用root帐户。 +>- 默认密码加密算法yescrypt,在不支持yescrypt时会调整为SHA512。 +>- 用户在设置root用户密码或者新创建用户密码时,强烈建议按照密码复杂度要求设置。设置弱密码(不符合下文所述复杂度要求的密码)时系统会发出告警并询问是否仍然使用,输入“yes”可以强制设置弱密码,但是弱密码存在较大安全风险,请用户根据实际情况谨慎决策。建议密码的复杂度的要求如下: +> 1. 口令长度至少8个字符。 +> 2. 口令至少包含大写字母、小写字母、数字和特殊字符中的任意3种。 +> 3. 口令不能和帐号一样。 +> 4. 口令不能使用字典词汇。 + +## 创建用户 + +在文本主界面【图1】输入“8”并回车,按照界面提示,创建用户、设置用户全名/用户名、用户密码、是否管理员、属组等信息。如[图14](#zh-cn_topic_0186390268_zh-cn_topic_0122145909_fig7344535785884)所示。 + +**图 14** 创建用户 + +![](./figures/zh-cn_image_text_createUsr.png) + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- 默认密码加密算法yescrypt,在不支持yescrypt时会调整为SHA512。 +>- 用户在新创建用户密码时,需要满足密码复杂度要求,否则会设置失败。设置密码的复杂度的要求如下: +> 1. 口令长度至少8个字符。 +> 2. 口令至少包含大写字母、小写字母、数字和特殊字符中的任意3种。 +> 3. 口令不能和帐号一样。 +> 4. 口令不能使用字典词汇。 + +设置完成后,在界面输入“c”,返回安装配置主页面。 + +## 开始安装 + +在文本主界面【图1】上完成所有必填选项的配置后,界面上的警告[!]会消失,如[图15](#zh-cn_topic_0186390268_zh-cn_topic_0122145909_fig2269035885876)所示。此时,在界面输入“b”,进行系统安装。 + +**图 15** 配置完成 + +>![](./figures/zh-cn_image_text_startInstall.png) + +完成安装,如[图16](#zh-cn_topic_0186390268_zh-cn_topic_0122145909_fig2942971748186)所示。 + +**图 16** 安装完成 + +>![](./figures/zh-cn_image_text_Installed.png) + +安装完成后,点击回车会重启系统。 diff --git a/docs/zh/server/installation_upgrade/installation/installation_guide_1.md b/docs/zh/server/installation_upgrade/installation/installation_guide_1.md new file mode 100644 index 0000000000000000000000000000000000000000..670010ca8f69368492a80913c7d1fc1427415abc --- /dev/null +++ b/docs/zh/server/installation_upgrade/installation/installation_guide_1.md @@ -0,0 +1,176 @@ +# 安装指导 + +本章介绍将“[树莓派镜像刷写入 SD 卡](./安装方式介绍-1.html)”后,启用树莓派的主要过程。 + + +- [安装指导](#安装指导) + - [启动系统](#启动系统) + - [登录系统](#登录系统) + - [配置系统](#配置系统) + - [扩展根目录分区](#扩展根目录分区) + - [连接 WIFI](#连接-wifi) + + + +## 启动系统 + +将刷写镜像后的 SD 卡插入树莓派,通电启用。 + +树莓派硬件相关信息请参考[树莓派官网](https://www.raspberrypi.org/)。 + +## 登录系统 + +登录树莓派有以下两种方式: + +1. 本地登录 + + 树莓派连接显示器(树莓派视频输出接口为 Micro HDMI)、键盘、鼠标后,启动树莓派,可以看到树莓派启动日志输出到显示器上。待树莓派启动成功,输入用户名(root)和密码(openeuler)登录。 + +2. ssh 远程登录 + + 树莓派默认采用 DHCP 的方式自动获取 IP。如果树莓派连接已知路由器,可登录路由器查看,新增的 IP 即为树莓派 IP。例如,树莓派对应 IP 为:192.168.31.109,使用命令 `ssh root@192.168.31.109` 后输入密码 `openeuler`,即可远程登录树莓派。 + +## 配置系统 + +### 扩展根目录分区 + +默认根目录分区空间比较小,在使用之前,需要对分区进行扩容。 + +请按照以下步骤扩展根目录分区: + +1. 在 root 权限下执行 `fdisk -l` 命令查看磁盘分区信息。命令和回显如下: + + ``` + # fdisk -l + Disk /dev/mmcblk0: 14.86 GiB, 15931539456 bytes, 31116288 sectors + Units: sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + Disklabel type: dos + Disk identifier: 0xf2dc3842 + + Device Boot Start End Sectors Size Id Type + /dev/mmcblk0p1 * 8192 593919 585728 286M c W95 FAT32 (LBA) + /dev/mmcblk0p2 593920 1593343 999424 488M 82 Linux swap / Solaris + /dev/mmcblk0p3 1593344 5044223 3450880 1.7G 83 Linux + ``` + + SD 卡对应盘符为 /dev/mmcblk0,包括 3 个分区,分别为: + + - /dev/mmcblk0p1:引导分区 + - /dev/mmcblk0p2:交换分区 + - /dev/mmcblk0p3:根目录分区 + + 这里我们需要将根目录分区 `/dev/mmcblk0p3` 进行扩容。 + +2. 在 root 权限下执行 `fdisk /dev/mmcblk0` 命令进入到交互式命令行界面,按照以下步骤扩展分区,如[图 1](#zh-cn_topic_0151920806_f6ff7658b349942ea87f4521c0256c315)所示。 + + 1. 输入 `p`,查看分区信息。 + + 记录分区 `/dev/mmcblk0p3` 的起始扇区号,即 `/dev/mmcblk0p3` 分区信息中 `Start` 列的值,示例中为 `1593344`。 + + 2. 输入 `d`,删除分区。 + 3. 输入 `3` 或直接按 `Enter`,删除序号为 `3` 的分区,即 `/dev/mmcblk0p3` 分区。 + 4. 输入 `n`,创建新的分区。 + 5. 输入 `p` 或直接按 `Enter`,创建 `Primary` 类型的分区。 + 6. 输入 `3` 或直接按 `Enter`,创建序号为 `3` 的分区,即 `/dev/mmcblk0p3` 分区。 + 7. 输入新分区的起始扇区号,即第 `1` 步中记录的起始扇区号,示例中为 `1593344`。 + + >![](./public_sys-resources/icon-notice.gif) **须知:** + >请勿直接按“Enter”或使用默认参数。 + + 8. 按 `Enter`,使用默认的最后一个扇区号作为新分区的终止扇区号。 + 9. 输入 `N`,不修改扇区标记。 + 10. 输入 `w`,保存分区设置并退出交互式命令行界面。 + + **图 1** 分区扩容 + ![](./figures/Partition_expansion.png) + +3. 在 root 权限下执行 `fdisk -l` 命令查看磁盘分区信息,以确保磁盘分区正确。命令和回显如下: + + ``` + # fdisk -l + Disk /dev/mmcblk0: 14.86 GiB, 15931539456 bytes, 31116288 sectors + Units: sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + Disklabel type: dos + Disk identifier: 0xf2dc3842 + + Device Boot Start End Sectors Size Id Type + /dev/mmcblk0p1 * 8192 593919 585728 286M c W95 FAT32 (LBA) + /dev/mmcblk0p2 593920 1593343 999424 488M 82 Linux swap / Solaris + /dev/mmcblk0p3 1593344 31116287 29522944 14.1G 83 Linux + ``` + +4. 在 root 权限下执行 `resize2fs /dev/mmcblk0p3`,增大未加载的文件系统大小。 +5. 执行 `df -lh` 命令查看磁盘空间信息,以确保根目录分区已扩展。 + + >![](./public_sys-resources/icon-notice.gif) **须知:** + >如果根目录分区未扩展,可执行 `reboot` 命令重启树莓派之后再在 root 权限下执行 `resize2fs /dev/mmcblk0p3`。 + +### 连接 WIFI + +请按照以下步骤连接 WIFI: + +1. 查看 IP 和网卡信息。 + + `ip a` + + 获取无线网卡 wlan0 信息: + + ``` + 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + inet 127.0.0.1/8 scope host lo + valid_lft forever preferred_lft forever + inet6 ::1/128 scope host + valid_lft forever preferred_lft forever + 2: eth0: mtu 1500 qdisc mq state UP group default qlen 1000 + link/ether dc:a6:32:50:de:57 brd ff:ff:ff:ff:ff:ff + inet 192.168.31.109/24 brd 192.168.31.255 scope global dynamic noprefixroute eth0 + valid_lft 41570sec preferred_lft 41570sec + inet6 fe80::cd39:a969:e647:3043/64 scope link noprefixroute + valid_lft forever preferred_lft forever + 3: wlan0: mtu 1500 qdisc fq_codel state DOWN group default qlen 1000 + link/ether e2:e6:99:89:47:0c brd ff:ff:ff:ff:ff:ff + ``` + +2. 扫描可以连接的 WIFI 信息。 + + `nmcli dev wifi` + +3. 连接 WIFI。 + + 在 root 权限下执行 `nmcli dev wifi connect SSID password PWD` 命令连接 WIFI。 + + 其中,`SSID` 为上一步扫描到的可供连接的 WIFI 的 SSID,`PWD` 为对应 WIFI 的密码。例如,`SSID` 为 `openEuler-wifi`,密码为 `12345678`,则连接该 WIFI 命令为:`nmcli dev wifi connect openEuler-wifi password 12345678`,连接成功: + + ``` + Device 'wlan0' successfully activated with '26becaab-4adc-4c8e-9bf0-1d63cf5fa3f1'. + ``` + +4. 查看 IP 和无线网卡信息。 + + `ip a` + + ``` + 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + inet 127.0.0.1/8 scope host lo + valid_lft forever preferred_lft forever + inet6 ::1/128 scope host + valid_lft forever preferred_lft forever + 2: eth0: mtu 1500 qdisc mq state UP group default qlen 1000 + link/ether dc:a6:32:50:de:57 brd ff:ff:ff:ff:ff:ff + inet 192.168.31.109/24 brd 192.168.31.255 scope global dynamic noprefixroute eth0 + valid_lft 41386sec preferred_lft 41386sec + inet6 fe80::cd39:a969:e647:3043/64 scope link noprefixroute + valid_lft forever preferred_lft forever + 3: wlan0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 + link/ether dc:a6:32:50:de:58 brd ff:ff:ff:ff:ff:ff + inet 192.168.31.110/24 brd 192.168.31.255 scope global dynamic noprefixroute wlan0 + valid_lft 43094sec preferred_lft 43094sec + inet6 fe80::394:d086:27fa:deba/64 scope link noprefixroute + valid_lft forever preferred_lft forever + ``` diff --git a/docs/zh/server/installation_upgrade/installation/installation_modes.md b/docs/zh/server/installation_upgrade/installation/installation_modes.md new file mode 100644 index 0000000000000000000000000000000000000000..878e7339179c66cecadb5a406c59a3484bfab775 --- /dev/null +++ b/docs/zh/server/installation_upgrade/installation/installation_modes.md @@ -0,0 +1,217 @@ +# 安装方式介绍 + +>![](./public_sys-resources/icon-notice.gif) **须知:** +>- 硬件服务器仅支持Taishan 200服务器和FusionServer Pro 机架服务器,具体支持的服务器型号可参考“[硬件兼容支持](./安装准备.html#硬件兼容支持)”;虚拟化平台仅支持openEuler自有的虚拟化组件(HostOS为openEuler,虚拟化组件为发布包中的qemu、KVM)创建的虚拟化平台和华为公有云的x86虚拟化平台。 +>- 安装方式当前仅支持光盘、USB盘安装、网络安装、qcow2镜像安装和私有镜像安装。其中仅华为公有云的x86虚拟化平台支持私有镜像安装。 + + +- [安装方式介绍](#安装方式介绍) + - [通过光盘安装](#通过光盘安装) + - [准备安装源](#准备安装源) + - [启动安装](#启动安装) + - [通过USB盘安装](#通过usb盘安装) + - [准备安装源](#准备安装源-1) + - [启动安装](#启动安装-1) + - [使用PXE通过网络安装](#使用pxe通过网络安装) + - [通过qcow2镜像安装](#通过qcow2镜像安装) + - [制作qcow2镜像](#制作qcow2镜像) + - [启动安装](#启动安装-2) + - [通过私有镜像安装](#通过私有镜像安装) + - [制作私有镜像](#制作私有镜像) + - [启动安装](#启动安装-3) + + + +## 通过光盘安装 + +本节介绍如何使用或者制作光盘安装源,并介绍相应的操作步骤,指导用户进行安装。 + +### 准备安装源 + +如果您获取的是系统安装光盘,那么可以直接使用光盘安装系统。如果您获取的是系统ISO镜像,可以通过刻录软件将系统的ISO镜像刻录到DVD中,使用刻录完成的DVD安装系统。 + +### 启动安装 + +根据以下步骤启动安装程序: + +>![](./public_sys-resources/icon-note.gif) **说明:** +>您需要先设置您的系统优先从光盘进行启动引导。以BIOS为例,您需要将“Boot Type Order”中的“CD/DVD-ROM Drive”选项调整到首位。 + +1. 断开所有安装不需要的驱动器(非必须),比如USB。 +2. 启动您的计算机系统。 +3. 在计算机中插入安装光盘。 +4. 重启计算机系统。 + +在短暂的延迟后会出现图形化引导界面,该界面包含不同引导选项。如果您在一分钟内未进行任何操作,安装程序将自动以默认选项开始运行。 + +## 通过USB盘安装 + +本节介绍如何制作USB盘安装源,并介绍基本的操作步骤,指导用户进行安装。 + +### 准备安装源 + +您需要注意USB盘容量的大小,它必须有足够的空间放下整个镜像,建议USB盘空间大于16G。 + +1. 将USB盘连接到该系统中,并执行 dmesg 命令查看相关的日志信息。在该日志的最后可以看到刚刚连接的USB盘所生成的一组信息,应类似如下: + + ``` + [ 170.171135] sd 5:0:0:0: [sdb] Attached SCSI removable disk + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >连接的USB盘名称以sdb进行举例。 + +2. 切换为root用户。使用su命令,需要输入相应的密码。 + + ``` + $ su - root + ``` + +3. 确保USB盘没有被挂载。使用如下命令进行查询: + + ``` + # findmnt /dev/sdb + ``` + + - 如果执行此命令后无输出,表明未挂载,可以继续执行下一步。 + + - 如果输出以下信息,表明USB盘已经自动挂载。 + + ``` + # findmnt /dev/sdb + TARGET SOURCE FSTYPE OPTIONS + /mnt/iso /dev/sdb iso9660 ro,relatime + ``` + + 此时,您需要使用umount命令卸载该设备。 + + ``` + # umount /mnt/iso + ``` + +4. 使用dd命令将ISO安装镜像直接写入USB盘: +>![](./public_sys-resources/icon-note.gif) **说明:** +>如isolinux描述,由mkisofs命令创建的ISO 9660 文件系统会通过BIOS固件启动,但只能从CD、DVD和BD等介质启动。所以在使用dd命令制作x86的启动U盘前需要使用 isohybrid -u your.iso 对iso进行处理,然后正常使用dd命令将iso写入u盘即可。(该问题仅影响x86)。 + + ``` + # dd if=/path/to/image.iso of=/dev/device bs=blocksize + ``` + + 使用您下载的ISO镜像文件的完整路径替换 /path/to/image.iso,使用之前由 dmesg 命令给出的设备名称替换device,同时设置合理的块大小(例如:512k)替换 blocksize,这样可以加快写入进度。 + + 例如:如果该ISO镜像文件位于 /home/testuser/Downloads/openEuler-21.09-aarch64-dvd.iso,同时探测到的设备名称为sdb,则该命令如下: + + ``` + # dd if=/home/testuser/Downloads/openEuler-21.09-aarch64-dvd.iso of=/dev/sdb bs=512k + ``` + +5. 等待镜像写入完成,安全退出USB盘并拔掉。 + + 镜像写入过程中不会有进度显示,当\#号再次出现时,执行如下命令将数据同步写入磁盘。退出root帐户,拔掉USB盘。此时,您可以使用该USB盘作为系统的安装源。 + + ```bash + # sync + ``` + + + + +### 启动安装 + +请根据以下步骤启动安装程序: + +>![](./public_sys-resources/icon-note.gif) **说明:** +>您需要先设置您的系统优先从USB进行启动引导。以BIOS为例,您需要将“Boot Type Order”中的USB选项调整到首位。 + +1. 断开所有安装不需要的驱动器。 +2. 打开您的计算机系统。 +3. 在计算机中插入USB盘。 +4. 重启计算机系统。 + +在短暂的延迟后会出现图形化引导页面,该页面包含不同引导选项。如果您在一分钟内未进行任何操作,安装程序将自动开始安装。 + +## 使用PXE通过网络安装 + +要使用 PXE 引导,您需要正确配置服务器以及您的计算机需支持 PXE 的网络接口。 + +如果目标硬件安装有支持PXE的网络接口卡,我们可以配置它从其他网络系统的文件而不是本地介质(如光盘)来引导计算机并执行Anaconda安装程序。 + +对于PXE网络安装,客户机通过支持PXE的网卡,向网络发送请求DHCP信息的广播,请求IP地址等信息。DHCP服务器给客户机提供一个IP地址和其他网络信息如域名服务器、ftp服务器(它提供启动安装程序所必需的文件)的IP地址或主机名,以及服务器上文件的位置。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>此处不详细讨论tftp、DHCP、http等服务器配置,相关详细配置请参考“[全自动化安装指导](./使用kickstart自动化安装.html#全自动化安装指导)”。 + +## 通过qcow2镜像安装 + +本节介绍如何使用或者制作qcow2镜像,并介绍相应的操作步骤,指导用户进行安装。 + +### 制作qcow2镜像 + +1. 安装qemu-img软件包。 + + ``` + # dnf install -y qemu-img + ``` + +2. 使用qemu-img工具的create命令,创建镜像文件,命令格式为: + + ``` + $ qemu-img create -f -o + ``` + + 其中,各参数含义如下: + + - _imgFormat_ :镜像格式,取值为raw, qcow2等。 + - _fileOption_ :文件选项,用于设置镜像文件的特性,如指定后端镜像文件、压缩、加密等特性。 + - _fileName_ :文件名称。 + - _diskSize_ :磁盘大小,用于指定块磁盘设备的大小,支持的单位有K、M、G、T,分别代表KiB、MiB、GiB、TiB。 + + 例如,创建一个磁盘设备大小为32GB、格式为qcow2的镜像文件openEuler-image.qcow2,命令和回显如下: + + ``` + $ qemu-img create -f qcow2 openEuler-image.qcow2 32G + Formatting 'openEuler-image.qcow2', fmt=qcow2 size=34359738368 cluster_size=65536 lazy_refcounts=off refcount_bits=16 + ``` + + +### 启动安装 + +根据以下步骤启动安装程序: + +1. 准备qcow2镜像文件。 +2. 准备虚拟机网络。 +3. 准备UEFI引导工具集EDK II。 +4. 准备虚拟机XML配置文件。 +5. 创建虚拟机。 +6. 启动虚拟机。 + +各步骤详细的操作请参考《[虚拟化用户指南](./../Virtualization/virtualization.html)》。 + +## 通过私有镜像安装 + +本节介绍如何使用或者制作私有镜像,并介绍相应的操作步骤,指导用户进行安装。 + +### 制作私有镜像 + +制作私有镜像的方法请参见《[镜像服务用户指南](https://support.huaweicloud.com/usermanual-ims/zh-cn_topic_0013901628.html)》。 + +### 启动安装 + +华为公有云的x86虚拟化平台的启动请参见《[弹性云服务器 ECS的用户指南](https://support.huaweicloud.com/wtsnew-ecs/index.html)》。 + + + + + + + + + + + + + + + + + diff --git a/docs/zh/server/installation_upgrade/installation/installation_modes_1.md b/docs/zh/server/installation_upgrade/installation/installation_modes_1.md new file mode 100644 index 0000000000000000000000000000000000000000..2a6ef847feb20e9111d722f2caa88537e870f899 --- /dev/null +++ b/docs/zh/server/installation_upgrade/installation/installation_modes_1.md @@ -0,0 +1,110 @@ +# 安装方式介绍 + +>![](./public_sys-resources/icon-notice.gif) **须知:** +>- 硬件仅支持树莓派 3B/3B+/4B/400。 +>- 采用刷写镜像到 SD 卡方式安装。本章节提供 Windows/Linux/Mac 上刷写镜像的操作方法。 +>- 本章节使用的镜像是参考“[安装准备](./安装准备-1.html)”获取 openEuler 的树莓派版本镜像。 + + + +- [安装方式介绍](#安装方式介绍) + - [Windows 下刷写镜像](#windows-下刷写镜像) + - [格式化 SD 卡](#格式化-sd-卡) + - [写入 SD 卡](#写入-sd-卡) + - [Linux 下刷写镜像](#linux-下刷写镜像) + - [查看磁盘分区信息](#查看磁盘分区信息) + - [卸载 SD 卡挂载点](#卸载-sd-卡挂载点) + - [写入 SD 卡](#写入-sd-卡-1) + - [Mac 下刷写镜像](#mac-下刷写镜像) + - [查看磁盘分区信息](#查看磁盘分区信息-1) + - [卸载 SD 卡挂载点](#卸载-sd-卡挂载点-1) + - [写入 SD 卡](#写入-sd-卡-2) + + + +## Windows 下刷写镜像 + +本节以 Windows 10 为例,介绍如何在 Windows 环境下将镜像刷写到 SD 卡。 + +### 格式化 SD 卡 + +请按照以下步骤格式化 SD 卡: + +1. 下载并安装格式化 SD 卡工具,以下操作以 SD Card Formatter 格式化工具为例。 +2. 打开 SD Card Formatter,在 “Select card” 中选择需要格式化的 SD 卡的盘符。 + + 若 SD 卡之前未安装过镜像,盘符只有一个。在 “Select card” 中选择需要格式化的 SD 卡对应盘符。 + + 若 SD 卡之前安装过镜像,盘符会有一个或多个。例如,SD 卡对应三个盘符:E、G、H。在 “Select card” 中选择需要格式化的 SD 卡对应 boot 分区盘符 E。 + +3. 在 “Formatting options” 中选择格式化方式。默认为 “Quick format”。 +4. 单击“Format”开始格式化。界面通过进度条显示格式化进度。 +5. 格式化完成后会弹出 “Formatting was successfully completed” 的提示框,单击“OK”完成格式化。 + +### 写入 SD 卡 + +>![](./public_sys-resources/icon-notice.gif) **须知:** +>如果获取的是压缩后的镜像文件“openEuler-22.03-LTS-SP4-raspi-aarch64.img.xz”,需要先将压缩文件解压得到 “openEuler-22.03-LTS-SP4-raspi-aarch64.img”镜像文件。 + +请按照以下步骤将“openEuler-22.03-LTS-SP4-raspi-aarch64.img”镜像文件写入 SD 卡: + +1. 下载并安装刷写镜像的工具,以下操作以 Win32 Disk Imager 工具为例。 +2. 右键选择“以管理员身份运行”,打开 Win32 Disk Imager。 +3. 在“映像文件”中选择 img 格式的镜像文件路径。 +4. 在“设备”中选择待写入的 SD 卡盘符。 +5. 单击“写入”。界面通过任务进度条显示写入 SD 卡的进度。 +6. 写入完成后会弹出 “写入成功” 的提示框,单击“OK”完成写入。 + +## Linux 下刷写镜像 + +本节介绍如何在 Linux 环境下将镜像刷写到SD卡。 + +### 查看磁盘分区信息 + +在 root 权限下执行 `fdisk -l` 获取 SD 卡磁盘信息,例如 SD 卡对应磁盘为 /dev/sdb。 + +### 卸载 SD 卡挂载点 + +1. 执行 `df -lh` 命令查看当前已挂载的卷。 +2. 如果 SD 卡对应的分区未挂载,则跳过该步骤;如果 SD 卡对应分区已挂载,如 SD 卡对应的两个分区 /dev/sdb1 和 /dev/sdb3 已挂载,则需要卸载对应分区,在 root 权限下执行以下命令: + + `umount /dev/sdb1` + + `umount /dev/sdb3` + +### 写入 SD 卡 + +1. 如果获取的是压缩后的镜像,需要先执行 `xz -d openEuler-22.03-LTS-SP4-raspi-aarch64.img.xz` 命令将压缩文件解压得到“openEuler-22.03-LTS-SP4-raspi-aarch64.img”镜像文件;否则,跳过该步骤。 +2. 将镜像 `openEuler-22.03-LTS-SP4-raspi-aarch64.img` 刷写入 SD 卡,在 root 权限下执行以下命令: + + `dd bs=4M if=openEuler-22.03-LTS-SP4-raspi-aarch64.img of=/dev/sdb` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >一般情况下,将块大小设置为 4M。如果写入失败或者写入的镜像无法使用,可以尝试将块大小设置为 1M 重新写入,但是设置为 1M 比较耗时。 + +## Mac 下刷写镜像 + +本节介绍如何在 Mac 环境下将镜像刷写到SD卡。 + +### 查看磁盘分区信息 + +在 root 权限下执行 `diskutil list` 获取 SD 卡磁盘信息,例如 SD 卡对应磁盘为 /dev/disk3。 + +### 卸载 SD 卡挂载点 + +1. 执行 `df -lh` 命令查看当前已挂载的卷。 +2. 如果 SD 卡对应的分区未挂载,则跳过该步骤;如果 SD 卡对应分区已挂载,如 SD 卡对应的两个分区 /dev/disk3s1 和 /dev/disk3s3 已挂载,则需要卸载对应分区,在 root 权限下执行以下命令: + + `diskutil umount /dev/disk3s1` + + `diskutil umount /dev/disk3s3` + +### 写入 SD 卡 + +1. 如果获取的是压缩后的镜像,需要先执行 `xz -d openEuler-22.03-LTS-SP4-raspi-aarch64.img.xz` 命令将压缩文件解压得到“openEuler-22.03-LTS-SP4-raspi-aarch64.img”镜像文件;否则,跳过该步骤。 +2. 将镜像 `openEuler-22.03-LTS-SP4-raspi-aarch64.img` 刷入 SD 卡,在 root 权限下执行以下命令: + + `dd bs=4m if=openEuler-22.03-LTS-SP4-raspi-aarch64.img of=/dev/sdb` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >一般情况下,将块大小设置为 4m。如果写入失败或者写入的镜像无法使用,可以尝试将块大小设置为 1m 重新写入,但是设置为 1m 比较耗时。 diff --git a/docs/zh/server/installation_upgrade/installation/installation_on_servers.md b/docs/zh/server/installation_upgrade/installation/installation_on_servers.md new file mode 100644 index 0000000000000000000000000000000000000000..5c112feb9d12020e68916a01fba015125822929e --- /dev/null +++ b/docs/zh/server/installation_upgrade/installation/installation_on_servers.md @@ -0,0 +1,3 @@ +# 安装在服务器 + +本文是介绍 openEuler 操作系统安装在服务器的方法,使用本手册的用户需要具备基础的 Linux 系统管理知识。 diff --git a/docs/zh/server/installation_upgrade/installation/installation_preparations.md b/docs/zh/server/installation_upgrade/installation/installation_preparations.md new file mode 100644 index 0000000000000000000000000000000000000000..b8eb893ce43218ac92aa55ad8fe205bfddb83311 --- /dev/null +++ b/docs/zh/server/installation_upgrade/installation/installation_preparations.md @@ -0,0 +1,108 @@ +# 安装准备 + +介绍安装前需要考虑软硬件兼容性状况,以及相关的配置和准备工作。 + + +## 获取安装源 + +在安装开始前,您需要获取openEuler的发布包和校验文件。 + +请按以下步骤获取openEuler的发布包和校验文件: + +1. 登录[openEuler社区](https://openeuler.org)网站。 +2. 单击“下载”。 +3. 单击“社区发行版”,显示版本列表。 +4. 在版本列表的“openEuler 22.03 LTS SP4”版本处单击“前往下载”按钮,进入openEuler 22.03_LTS_SP4版本下载列表。 +5. 根据实际待安装环境的架构和场景选择需要下载的 openEuler 的发布包和校验文件。 + 1. 若为AArch64架构。 + 1. 单击“AArch64”。 + 2. 若选择本地安装,选择“Offline Standard ISO”或者“Offline Everything ISO”对应的“立即下载”将发布包 “openEuler-22.03-LTS-SP4-aarch64-dvd.iso”下载到本地。 + 3. 若选择网络安装,选择“Network Install ISO”将发布包 “openEuler-22.03-LTS-SP4-netinst-aarch64-dvd.iso”下载到本地。 + 2. 若为x86_64架构。 + 1. 单击“x86_64”。 + 2. 若选择本地安装,选择“Offline Standard ISO”或者“Offline Everything ISO”对应的“立即下载”将发布包 “openEuler-22.03-LTS-SP4-x86_64-dvd.iso”下载到本地。 + 3. 若选择网络安装,选择“Network Install ISO”将发布包 “openEuler-22.03-LTS-SP4-netinst-x86_64-dvd.iso ”下载到本地。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> - 网络安装方式的 ISO 发布包较小,在有网络的安装环境可以选择网络安装方式。 +> - AArch64架构的发布包支持UEFI模式,x86\_64架构的发布包支持UEFI模式和Legacy模式。 + +## 发布包完整性校验 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>本章节以AArch64架构的发布包完整性校验为例,x86\_64架构的发布包完整性校验的操作方法相同。 + +### 简介 + +为了确认软件包在传输过程中由于网络原因或者存储设备原因是否出现下载不完整的问题,在获取到软件包后,需要对软件包的完整性进行校验,通过了校验的软件包才能被部署。 + +这里通过对比校验文件中记录的校验值和手动方式计算的iso文件校验值,判断软件包是否完整。若两个值相同,说明iso文件完整,否则,iso完整性被破坏,请重新获取iso发布包。 + +### 前提条件 + +在校验发布包完整性之前,需要准备如下文件: + +iso文件:openEuler-22.03-LTS-SP4-aarch64-dvd.iso。 + +校验文件:ISO对应完整性校验值,复制保存对应的ISO值。 + +### 操作指导 + +文件完整性校验操作步骤如下: + +1. 计算文件的sha256校验值。执行命令如下: + + ``` + $ sha256sum openEuler-22.03-LTS-SP4-aarch64-dvd.iso + ``` + + 命令执行完成后,输出校验值。 + +2. 判断步骤1计算的校验值与刚刚复制的SHA256的值是否一致。 + + 如果校验值一致说明iso文件完整性没有破坏,如果校验值不一致则可以确认文件完整性已被破坏,需要重新获取。 + +## 物理机的安装要求 + +若需要在物理机环境上安装openEuler操作系统,则物理机需要满足如下的硬件兼容性和最小硬件要求。 + +### 硬件兼容支持 + +openEuler安装时,应注意硬件兼容性方面的问题,当前已支持的服务器类型请参考[兼容性列表](https://www.openeuler.org/zh/compatibility/)。 + +### 最小硬件要求 + +openEuler所需的最小硬件要求如[表2](#tff48b99c9bf24b84bb602c53229e2541)所示。 + +**表 2** 最小硬件要求 + +| 部件名称 | 最小硬件要求 | +| :---- | :---- | +| 架构 | AArch64或x86_64 | +| CPU | 2*CPU (1 core) | +| 内存 | 不小于4GB(为了获得更好的应用体验,建议不小于8GB) | +| 硬盘 | 不小于32GB(为了获得更好的应用体验,建议不小于120GB) | + +## 虚拟机的安装要求 + +若需要在虚拟机环境上安装openEuler操作系统,则虚拟机需要满足如下的虚拟化平台兼容性和最小虚拟化要求。 + +### 虚拟化平台兼容性 + +openEuler安装时,应注意虚拟化平台兼容性的问题,当前已支持的虚拟化平台为: + +- openEuler自有的虚拟化组件(HostOS为openEuler,虚拟化组件为发布包中的qemu、KVM)创建的虚拟化平台。 +- 华为公有云的x86虚拟化平台。 + +### 最小虚拟化空间要求 + +openEuler所需的最小虚拟化空间要求如[表3](#tedf1812a7c43420faa8a4ed0424c18ef)所示。 + +**表 3** 最小虚拟化空间要求 + +| 部件名称 | 最小虚拟化空间要求 | +| :---- | :---- | +| 架构 | AArch64或x86_64 | +| CPU | 1个CPU | +| 内存 | 不小于4GB(为了获得更好的应用体验,建议不小于8GB) | +| 硬盘 | 不小于32GB(为了获得更好的应用体验,建议不小于120GB) | diff --git a/docs/zh/server/installation_upgrade/installation/installation_preparations_1.md b/docs/zh/server/installation_upgrade/installation/installation_preparations_1.md new file mode 100644 index 0000000000000000000000000000000000000000..1c33bcf771767376562a7fbd0ac9bf5d055157a4 --- /dev/null +++ b/docs/zh/server/installation_upgrade/installation/installation_preparations_1.md @@ -0,0 +1,113 @@ +# 安装准备 + +介绍安装前需要考虑软硬件兼容性状况,以及相关的配置和准备工作。 + + +- [安装准备](#安装准备) + - [获取安装源](#获取安装源) + - [镜像完整性校验](#镜像完整性校验) + - [简介](#简介) + - [前提条件](#前提条件) + - [操作指导](#操作指导) + - [安装要求](#安装要求) + - [硬件兼容支持](#硬件兼容支持) + - [最小硬件要求](#最小硬件要求) + + + +## 获取安装源 + +在安装开始前,您需要获取 openEuler 发布的树莓派镜像及其校验文件。 + +1. 登录[openEuler Repo](https://repo.openeuler.org/)网站。 +2. 单击选择 openEuler 22.03 LTS SP4 版本。 +3. 单击“raspi_img”,进入树莓派镜像的下载列表。 +4. 单击“openEuler-22.03-LTS-SP4-raspi-aarch64.img.xz”,将 openEuler 发布的树莓派镜像下载到本地。 +5. 单击“openEuler-22.03-LTS-SP4-raspi-aarch64.img.xz.sha256sum”,将 openEuler 发布的树莓派镜像的校验文件下载到本地。 + +## 镜像完整性校验 + +### 简介 + +为了防止软件包在传输过程中由于网络原因或者存储设备原因出现下载不完整的问题,在获取到软件包后,需要对软件包的完整性进行校验,通过了校验的软件包才能部署。 + +这里通过对比校验文件中记录的校验值和手动方式计算的文件校验值,判断软件包是否完整。若两个值相同,说明下载的文件完整,否则,下载的文件完整性被破坏,请重新获取软件包。 + +### 前提条件 + +在校验镜像文件的完整性之前,需要准备如下文件: + +镜像文件:openEuler-22.03-LTS-SP4-raspi-aarch64.img.xz + +校验文件:openEuler-22.03-LTS-SP4-raspi-aarch64.img.xz.sha256sum + +### 操作指导 + +文件完整性校验操作步骤如下: + +1. 获取校验文件中的校验值。执行命令如下: + + ``` + $ cat openEuler-22.03-LTS-SP4-raspi-aarch64.img.xz.sha256sum + ``` + +2. 计算文件的 sha256 校验值。执行命令如下: + + ``` + $ sha256sum openEuler-22.03-LTS-SP4-raspi-aarch64.img.xz + ``` + + 命令执行完成后,输出校验值。 + +3. 对比步骤 1 和步骤 2 计算的校验值是否一致。 + + 如果校验值一致说明下载的文件完整性没有破坏,如果校验值不一致则可以确认文件完整性已被破坏,需要重新获取。 + +## 安装要求 + +在树莓派环境上安装 openEuler 操作系统,则树莓派需要满足如下的硬件兼容性和最小硬件要求。 + +### 硬件兼容支持 + +openEuler 树莓派版本镜像目前支持树莓派 3B/3B+/4B/400。 + +### 最小硬件要求 + +openEuler 树莓派版本镜像所需的最小硬件要求如[表1](#tff48b99c9bf24b84bb602c53229e2542)所示。 + +**表 1** 最小硬件要求 + + + + + + + + + + + + + + + + + + + + + + +

部件名称

+

最小硬件要求

+

说明

+

树莓派版本

+
  • 树莓派 3B
  • 树莓派 3B+
  • 树莓派 4B
  • 树莓派 400
+

-

+

内存

+

不小于 2GB(为了获得更好的应用体验,建议至少 4GB)

+

-

+

硬盘

+

为了获得更好的应用体验,建议不小于 8GB

+

-

+
diff --git a/docs/zh/server/installation_upgrade/installation/more_resources.md b/docs/zh/server/installation_upgrade/installation/more_resources.md new file mode 100644 index 0000000000000000000000000000000000000000..88fcb77473ace2fcc598ab5e29a547436d7bda6e --- /dev/null +++ b/docs/zh/server/installation_upgrade/installation/more_resources.md @@ -0,0 +1,4 @@ +# 参考资料 + +- 如何构建树莓派镜像文件 +- 如何使用树莓派 \ No newline at end of file diff --git a/docs/zh/server/installation_upgrade/installation/public_sys-resources/icon-caution.gif b/docs/zh/server/installation_upgrade/installation/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/public_sys-resources/icon-caution.gif differ diff --git a/docs/zh/server/installation_upgrade/installation/public_sys-resources/icon-danger.gif b/docs/zh/server/installation_upgrade/installation/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/public_sys-resources/icon-danger.gif differ diff --git a/docs/zh/server/installation_upgrade/installation/public_sys-resources/icon-note.gif b/docs/zh/server/installation_upgrade/installation/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/server/installation_upgrade/installation/public_sys-resources/icon-notice.gif b/docs/zh/server/installation_upgrade/installation/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/server/installation_upgrade/installation/public_sys-resources/icon-tip.gif b/docs/zh/server/installation_upgrade/installation/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/public_sys-resources/icon-tip.gif differ diff --git a/docs/zh/server/installation_upgrade/installation/public_sys-resources/icon-warning.gif b/docs/zh/server/installation_upgrade/installation/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/installation_upgrade/installation/public_sys-resources/icon-warning.gif differ diff --git a/docs/zh/server/installation_upgrade/installation/using_kickstart_for_automatic_installation.md b/docs/zh/server/installation_upgrade/installation/using_kickstart_for_automatic_installation.md new file mode 100644 index 0000000000000000000000000000000000000000..da90c41c2c9c851eca6262d952263d376c89f7e3 --- /dev/null +++ b/docs/zh/server/installation_upgrade/installation/using_kickstart_for_automatic_installation.md @@ -0,0 +1,363 @@ +# 使用kickstart自动化安装 + + + +- [使用kickstart自动化安装](#使用kickstart自动化安装) + - [总体介绍](#总体介绍) + - [概述](#概述) + - [优缺点对比](#优缺点对比) + - [背景知识](#背景知识) + - [半自动化安装指导](#半自动化安装指导) + - [环境要求](#环境要求) + - [操作步骤](#操作步骤) + - [全自动化安装指导](#全自动化安装指导) + - [环境要求](#环境要求-1) + - [操作步骤](#操作步骤-1) + + + +## 总体介绍 + +### 概述 + +用户可以使用kickstart工具进行openEuler系统的自动化安装,包括如下两种方式: + +- 半自动化安装:安装人员不需要手动设定操作系统的键盘、语言、分区等具体属性(通过kickstart实现自动化),但是需要手动指定kickstart文件的位置。 +- 全自动化安装:实现操作系统的安装过程全自动化。 + +### 优缺点对比 + +使用kickstart工具进行半自动化安装和全自动化安装的优缺点对比如[表1](#table1388812373315)所示,用户可以自行选择安装方式。 + +**表 1** 优缺点对比 + + + + + + + + + + + + + + + + +

安装方式

+

优点

+

缺点

+

半自动化安装

+

不需要准备tftp,pxe,dhcp等服务

+

需要手动指定kickstart文件的位置

+

全自动化安装

+

操作系统的全自动化安装

+

需要配置tftp,dhcp,pxe等服务

+
+ +### 背景知识 + +**kickstart** + +kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录典型的需要人工干预填写的各种参数,并生成一个配置文件(ks.cfg),在安装过程中,安装程序首先会查找ks配置文件,如果查找到合适的参数,就采用所找到的参数;如果未找到合适的参数,便需要安装者手工设定。所以,如果kickstart文件涵盖了安装过程中需要设定的所有参数,安装者只需要告诉安装程序从何处获取ks.cfg文件,就能实现系统安装的自动化。 + +kickstart 安装提供一个安装过程自动化的方法,可以是部分自动化,也可以是完全自动化。 + +kickstart 采用开源 [pykickstart](https://github.com/pykickstart/pykickstart)来对ks.cfg文件进行语法解析。 + +**PXE** + +PXE(Pre-boot Execution Environment,预启动执行环境),工作于Client/Server的网络模式,支持PXE的客户端在启动过程中,能够从DHCP服务器获取IP结合TFTP(Trivial File Transfer Protocol)等协议可以实现客户端的网络引导和安装。 + +**TFTP** + +TFTP(Trivial File Transfer Protocol,简单文件传输协议),该协议用来实现客户机与服务器之间的简单文件传输,它提供不复杂、开销不大的文件传输服务。 + +## 半自动化安装指导 + +### 环境要求 + +使用kickstart进行openEuler系统的半自动化安装的环境要求如下: + +- 物理机/虚拟机(虚拟机创建可参考对应厂商的资料): 包括使用kickstart工具进行自动化安装的计算机和被安装的计算机。 +- httpd: 存放kickstart文件。 +- ISO: openEuler-{版本号}-{架构}-dvd.iso。下文中均以openEuler-22.03-LTS-SP4-aarch64-dvd.iso作为示例。 + +### 操作步骤 + +使用kickstart进行openEuler系统的半自动化安装的操作步骤如下: + +**环境准备** + +>![](./public_sys-resources/icon-note.gif) **说明:** +>安装之前,请确保http服务器的防火墙处于关闭状态。关闭防火墙可参照如下命令: +> +>```shell +>iptables -F +>``` + +1. httpd的安装与服务启动。 + + ```shell + # dnf install httpd -y + # systemctl start httpd + # systemctl enable httpd + ``` + +2. kickstart文件的准备。 + + ```shell + # mkdir /var/www/html/ks + # vim /var/www/html/ks/openEuler-ks.cfg ===>根据已安装openEuler系统自动生成的anaconda-ks.cfg修改得到 + ==================================== + ***以下内容需要根据实际需求进行修改*** + #version=DEVEL + ignoredisk --only-use=sda + autopart --type=lvm + # Partition clearing information + clearpart --none --initlabel + # Use graphical install + graphical + # Use CDROM installation media + cdrom + # Keyboard layouts + keyboard --vckeymap=cn --xlayouts='cn' + # System language + lang zh_CN.UTF-8 + + # Network information + network --bootproto=dhcp --device=enp4s0 --ipv6=auto --activate + network --hostname=openeuler.com + # Root password + rootpw --iscrypted $6$fQE83lxEZ48Or4zc$j7/PlUMHn29yTjCD4Fi44WTZL/RzVGxJ/7MGsZMl6QfE3KjIVT7M4UrhFXbafvRq2lUddAFcyWHd5WRmXfEK20 + # Run the Setup Agent on first boot + firstboot --enable + # Do not configure the X Window System + skipx + # System services + services --disabled="chronyd" + # System timezone + timezone Asia/Shanghai --isUtc--nontp + + %packages + @^minimal-environment + @standard + + %end + + %post + #enable kdump + sed -i "s/ ro / ro crashkernel=1024M,high /" /boot/efi/EFI/openEuler/grub.cfg + %end + ===================================== + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >密码密文生成方式: + > + >```shell + ># python3 + >Python 3.7.0 (default, Apr 1 2019, 00:00:00) + >[GCC 7.3.0] on linux + >Type "help", "copyright", "credits" or "license" for more information. + >>>> import crypt + >>>> passwd = crypt.crypt("myPasswd") + >>>> print (passwd) + >$6$63c4tDmQGn5SDayV$mZoZC4pa9Jdt6/ALgaaDq6mIExiOO2EjzomB.Rf6V1BkEMJDcMddZeGdp17cMyc9l9ML9ldthytBEPVcnboR/0 + >``` + +3. 将ISO镜像文件挂载到需要安装openEuler计算机的光驱上。 + + 另外,也可以选择NFS等网络安装,kickstart文件中需要指定安装源位置(默认是cdrom)。 + +**安装系统** + +1. 启动系统进入安装选择界面。 + 1. 在“[启动安装](./../installation/installation_guide.md#启动安装)”中的“安装引导界面”中选择“Install openEuler 22.03-LTS-SP4”,并按下“e”键。 + 2. 启动参数中追加“inst.ks=http://{server_ip}/ks/openEuler-ks.cfg”。 + + ![](./figures/startparam.png) + + 3. 按“Ctrl+x”,开始系统的自动安装。 + +2. 确认系统安装完毕。 + + 系统安装完毕以后会自动重启,如果优先从光驱启动,会再次进入到安装界面,此时关闭计算机,调整启动顺序(优先从硬盘启动)。 + + ![](./figures/Automatic_installation_complete.png) + +## 全自动化安装指导 + +### 环境要求 + +使用kickstart进行openEuler系统的全自动化安装的环境要求如下: + +- 物理机/虚拟机(虚拟机创建可参考对应厂商的资料):包括使用kickstart工具进行自动化安装的计算机和被安装的计算机。 +- httpd:存放kickstart文件。 +- tftp:提供vmlinuz和initrd文件。 +- dhcpd/pxe:提供DHCP服务。 +- ISO: openEuler-{版本号}-{架构}-dvd.iso。下文中均以openEuler-22.03-LTS-SP4-aarch64-dvd.iso作为示例。 + +### 操作步骤 + +使用kickstart进行openEuler系统的全自动化安装的操作步骤如下: + +**环境准备** + +>![](./public_sys-resources/icon-note.gif) **说明:** +>安装之前,请确保http服务器的防火墙处于关闭状态。关闭防火墙可参照如下命令: +> +>```shell +>iptables -F +>``` + +1. httpd的安装与服务启动。 + + ```shell + # dnf install httpd -y + # systemctl start httpd + # systemctl enable httpd + ``` + +2. tftp的安装与配置。 + + ```shell + # dnf install tftp-server xinetd -y + # vim /etc/xinetd.d/tftp + service tftp + { + socket_type = dgram + protocol = udp + wait = yes + user = root + server = /usr/sbin/in.tftpd + server_args = -s /var/lib/tftpboot + disable = no + per_source = 11 + cps = 100 2 + flags = IPv4 + } + # systemctl start tftp + # systemctl enable tftp + # systemctl start xinetd + # systemctl status xinetd + # systemctl enable xinetd + ``` + +3. 安装源的制作。 + + ```shell + # mount openEuler-22.03-LTS-SP4-aarch64-dvd.iso /mnt + # cp -r /mnt/* /var/www/html/openEuler/ + ``` + +4. 设置和修改kickstart配置文件 openEuler-ks.cfg,参考[3](#zh-cn_topic_0151920754_l1692f6b9284e493683ffa2ef804bc7ca)安装源的目录,此处选择http安装源。 + + ```shell + #vim /var/www/html/ks/openEuler-ks.cfg + ==================================== + ***以下内容根据实际需求进行修改*** + #version=DEVEL + ignoredisk --only-use=sda + autopart --type=lvm + # Partition clearing information + clearpart --none --initlabel + # Use graphical install + graphical + # Keyboard layouts + keyboard --vckeymap=cn --xlayouts='cn' + # System language + lang zh_CN.UTF-8 + #Use http installation source + url --url=http://192.168.122.1/openEuler/ + %post + #enable kdump + sed -i "s/ ro / ro crashkernel=1024M,high /" /boot/efi/EFI/openEuler/grub.cfg + %end + ... + ``` + +5. 修改pxe配置文件grub.cfg, 可参考如下内容(注意:openEuler当前不支持bls格式的cfg文件,如果架构是x86_64,请将grubaa64.efi替换成grubx64.efi)。 + + ```shell + # cp -r /mnt/images/pxeboot/* /var/lib/tftpboot/ + # cp /mnt/EFI/BOOT/grubaa64.efi /var/lib/tftpboot/ + # cp /mnt/EFI/BOOT/grub.cfg /var/lib/tftpboot/ + # ls /var/lib/tftpboot/ + grubaa64.efi grub.cfg initrd.img TRANS.TBL vmlinuz + # vim /var/lib/tftpboot/grub.cfg + set default="1" + + function load_video { + if [ x$feature_all_video_module = xy ]; then + insmod all_video + else + insmod efi_gop + insmod efi_uga + insmod ieee1275_fb + insmod vbe + insmod vga + insmod video_bochs + insmod video_cirrus + fi + } + + load_video + set gfxpayload=keep + insmod gzio + insmod part_gpt + insmod ext2 + + set timeout=60 + + + ### BEGIN /etc/grub.d/10_linux ### + menuentry 'Install openEuler 22.03-LTS-SP4' --class red --class gnu-linux --class gnu --class os { + set root=(tftp,192.168.122.1) + linux /vmlinuz ro inst.geoloc=0 console=ttyAMA0 console=tty0 rd.iscsi.waitnet=0 inst.ks=http://192.168.122.1/ks/openEuler-ks.cfg + initrd /initrd.img + } + ``` + +6. DHCP的配置(可以使用dnsmasq代替,如果架构是x86_64,请将grubaa64.efi替换成grubx64.efi)。 + + ```shell + # dnf install dhcp -y + # + # vim /etc/dhcp/dhcpd.conf + # + # DHCP Server Configuration file. + # see /usr/share/doc/dhcp-server/dhcpd.conf.example + # see dhcpd.conf(5) man page + # + ddns-update-style interim; + ignore client-updates; + filename "grubaa64.efi";    # pxelinux 启动文件位置; + next-server 192.168.122.1;  # (重要)TFTP Server 的IP地址; + subnet 192.168.122.0 netmask 255.255.255.0 { + option routers 192.168.122.1; # 网关地址 + option subnet-mask 255.255.255.0; # 子网掩码 + range dynamic-bootp 192.168.122.50 192.168.122.200; # 动态ip范围 + default-lease-time 21600; + max-lease-time 43200; + } + # systemctl start dhcpd + # systemctl enable dhcpd + ``` + +**安装系统** + +1. 在“Start boot option”界面按下“F2”选择从网络pxe启动,开始自动化安装。 + + ![](./figures/zh-cn_image_0229291270.png) + + ![](./figures/zh-cn_image_0229291286.png) + + ![](./figures/zh-cn_image_0229291247.png) + +2. 进入系统全自动化安装界面。 +3. 确认系统安装完毕。 + + ![](./figures/Automatic_installation_complete.png) diff --git a/docs/zh/server/maintenance/common_skills/_toc.yaml b/docs/zh/server/maintenance/common_skills/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0a2e4a36306c1d69405ddfe5e20790c79efa82ee --- /dev/null +++ b/docs/zh/server/maintenance/common_skills/_toc.yaml @@ -0,0 +1,7 @@ +isManual: true +label: '' +sections: + - label: 常用技能 + href: ./common_configurations.md + - label: 信息收集 + href: ./information_collection.md diff --git a/docs/zh/server/maintenance/common_skills/common_configurations.md b/docs/zh/server/maintenance/common_skills/common_configurations.md new file mode 100644 index 0000000000000000000000000000000000000000..62e256d598dc6048794fdf0992cf8a135da08474 --- /dev/null +++ b/docs/zh/server/maintenance/common_skills/common_configurations.md @@ -0,0 +1,563 @@ +# 常用技能 + +- [常用技能](#常用技能) + - [配置网络](#配置网络) + - [管理RPM包](#管理rpm包) + - [配置SSH](#配置ssh) + +## 配置网络 + +1. 配置IP地址 + + 使用IP命令为接口配置地址,**interface-name**为网卡名称。 + + ```shell + ip addr [ add | del ] address dev interface-name + ``` + +2. 配置静态地址 + + ```shell + # 配置静态IP地址 + ip address add 192.168.0.10/24 dev enp3s0 + + # 查看配置结果,在root权限使用如下命令 + ip addr show dev enp3s0 + + # 结果如下 + 2: enp3s0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 + link/ether 52:54:00:aa:ad:4a brd ff:ff:ff:ff:ff:ff + inet 192.168.202.248/16 brd 192.168.255.255 scope global dynamic noprefixroute enp3s0 + valid_lft 9547sec preferred_lft 9547sec + inet 192.168.0.10/24 scope global enp3s0 + valid_lft forever preferred_lft forever + inet6 fe80::32e8:cc22:9db2:f4d4/64 scope link noprefixroute + valid_lft forever preferred_lft forever + ``` + +3. 配置静态路由 + + 静态路由,可使用 `ip route add` 命令**在路由表中添加**,使用 `ip route del` 命令删除。常用的 `ip route` 命令格式如下: + + ```shell + ip route [ add | del | change | append | replace ] destination-address + ``` + + - **在主机地址中添加一个静态路由**,在 root 权限下,使用以下命令格式: + + ```shell + ip route add 192.168.2.1 via 10.0.0.1 [dev interface-name] + ``` + + - **在网络中添加一个静态路由**,在root权限下运行以下命令格式: + + ```shell + ip route add 192.168.2.0/24 via 10.0.0.1 [dev interface-name] + ``` + +4. 通过ifcfg文件配置网络 + + 通过在root权限下**修改ifcfg文件**实现,在/etc/sysconfig/network-scripts/目录中生成名为ifcfg-enp4s0的文件中,修改参数配置,示例如下: + + ```shell + TYPE=Ethernet + PROXY_METHOD=none + BROWSER_ONLY=no + BOOTPROTO=none + IPADDR=192.168.0.10 + PREFIX=24 + DEFROUTE=yes + IPV4_FAILURE_FATAL=no + IPV6INIT=yes + IPV6_AUTOCONF=yes + IPV6_DEFROUTE=yes + IPV6_FAILURE_FATAL=no + IPV6_ADDR_GEN_MODE=stable-privacy + NAME=enp4s0static + UUID=xx + DEVICE=enp4s0 + ONBOOT=yes + ``` + +## 管理RPM包 + +**RPM**的全名是**Red Hat Package Manager**,本意是Red Hat 软件包管理。在**openEuler、Fedora 、Redhat、Mandriva、SuSE、YellowDog**等主流发行版本,以及在这些版本基础上二次开发出来的发行版采用。 + + **RPM**以数据库记录的方式将需要的软件安装到Linux主机的一套管理程序,特点是将要安装的软件**先编译并打包**,通过包装好的软件中默认的数据库记录,记录这个软件在安装的时候需要的依赖属性模块,在用户的Linux主机安装时,**RPM**会先根据软件里的记录数据,查询Linux主机的依赖属性软件是否满足: + +- 若满足则予以安装。 +- 若不满足则不安装。 + +安装时将该软件的信息全部写入RPM的数据库中以便后续查询、验证与卸载。 + +![zh-cn_other_0000001337581224](./images/zh-cn_other_0000001337581224.jpeg) + +1. rpm包默认安装路径 + + 通常情况下,**RPM**采用系统默认的安装路径(默认安装路径可以通过命令查询,后续章节中将会详细介绍),所有安装文件都会按照类别分散到如下表格所示的目录中。 + + **表 1** RPM安装路径及其含义 + + |安装路径|含义| + |--|--| + |/etc/|配置文件安装目录。| + |/usr/bin/|可执行命令安装目录。| + |/usr/lib/|程序所使用的函数库保存位置。| + |/usr/share/doc|基本软件使用手册保存位置。| + |/usr/share/man/|帮助文件保存位置。| + + **注意:** RPM包支持手动指定安装路径,但此方式不推荐使用。通过手动指定安装路径后,所有的安装文件会集中安装到指定位置,且系统中用来查询安装路径的命令也无法使用(需手动配置才能被系统识别)。 + +2. rpm命令选项 + + **操作1. 软件包RPM签名检查** + + Linux机器安装RPM包之前,需要检查GPG签名,确保签名的完整性和来源无问题后,使用RPM命令中的以下选项来验证有效性。 + + ```shell + rpm --checksig nano-2.3.1-10.el7.x86_64.rpm + ``` + + **操作2. 安装RPM包** + + Linux系统中安装RPM包时,请在rpm命令中使用 **-i** 选项。 + + ```shell + rpm -ivh nano-2.3.1-10.el7.x86_64.rpm + ``` + + - **-i** : 安装软件包 + - **-v**: 详细信息 + - **-h**: 套件安装时列出标记 + + **操作3. 查询已安装的RPM包** + + 查询Linux系统中已经安装的RPM包(dnf),可以在rpm命令中使用 **-q** 选项。 + + ```shell + rpm -q dnf + ``` + + - **-q:** 查询操作 + + 如果系统未安装给定的包,会出现以下错误信息。 + + ```shell + # rpm -q dnf + package dnf is not installed + ``` + + **操作4. 查询所有已安装的RPM包** + + 查询Linux系统中安装的所有RPM包,请在rpm命令中使用 **-qa** 选项。 + + ```shell + # rpm -qa + dracut-config-rescue-055-7.oe2203SP4.x86_64 + parted-3.5-1.oe2203SP4.x86_64 + irqbalance-1.8.0-9.oe2203SP4.x86_64 + ...... + ``` + + **注意**:一般在使用 **-qa** 选项时,会配合管道符 “|” 一起使用,提升查找的准确率。 + + **操作5. 查看已安装的RPM包详细信息** + + 在rpm命令中使用 **-qi** 选项来验证系统中安装的RPM包的详细信息。 + + ```shell + # rpm -qi python3 + Name : python3 + Version : 3.9.9 + Release : 24.oe2203SP4 + Architecture: x86_64 + Install Date: Wed 05 Jul 2023 08:30:23 PM CST + Group : Unspecified + Size : 35916839 + License : Python-2.0 + Signature : RSA/SHA1, Wed 28 Jun 2023 01:11:59 PM CST, Key ID d557065eb25e7f66 + Source RPM : python3-3.9.9-24.oe2203SP4.x86_64.rpm + Build Date : Wed 28 Jun 2023 01:11:59 PM CST + Build Host : obs-worker1639015616-x86-0001 + Packager : http://openeuler.org + Vendor : http://openeuler.org + URL : https://www.python.org/ + Summary : Interpreter of the Python3 programming language + Description : + Python combines remarkable power with very clear syntax. It has modules, + classes, exceptions, very high level dynamic data types, and dynamic + typing. There are interfaces to many system calls and libraries, as well + as to various windowing systems. New built-in modules are easily written + in C or C++ (or other languages, depending on the chosen implementation). + Python is also usable as an extension language for applications written + in other languages that need easy-to-use scripting or automation interfaces. + + This package Provides python version 3. + ``` + + **操作6. 查看未安装的RPM包所有文件** + + 查看未安装的RPM包的文件列表,可以在rpm命令中使用 **-qlp** 选项。 + + ```shell + # rpm -qlp pkgship-2.2.0-10.oe2203SP4.noarch.rpm + /etc/ima/digest_lists.tlv/0-metadata_list-compact_tlv-pkgship-2.2.0-10.oe2203SP4.noarch + /etc/ima/digest_lists/0-metadata_list-compact-pkgship-2.2.0-10.oe2203SP4.noarch + /etc/pkgship/auto_install_pkgship_requires.sh + /etc/pkgship/conf.yaml + /etc/pkgship/package.ini + ...... + ``` + + **操作7. 查看未安装的RPM包依赖项** + + 查看未安装的RPM包编译的依赖包列表,可以在rpm命令中使用 **-qRp** 选项。 + + ```shell + # rpm -qRp pkgship-2.2.0-10.oe2203SP4.noarch.rpm + /bin/bash + /bin/sh + /usr/bin/python3 + config(pkgship) = 2.2.0-10.oe2203SP4 + python3 + python3-Flask-Limiter + ...... + ``` + + **操作8. 验证所有已安装的RPM包** + + 验证已安装的RPM包时,将包中安装的文件信息与**rpm数据库**中存储的包元数据中获取的文件的信息进行比较,可以通过在rpm命令中使用 **-Va** 选项。 + + ```shell + # rpm -Va + S.5....T. c /root/.bashrc + .......T. c /etc/yum.repos.d/openEuler.repo + S.5....T. c /etc/issue + S.5....T. c /etc/issue.net + S.5....T. c /etc/csh.login + S.5....T. c /etc/profile + .M....G.. g /var/log/lastlog + .M....... c /boot/grub2/grubenv + ...... + ``` + + rpm -Va命令相关输出字段及其含义: + + |字段|含义| + |--|--| + |S|文件长度发生变化。| + |M|文件的访问权限或文件类型发生变化。| + |5|MD5校验和发生变化。| + |D|设备节点的属性发生变化。| + |L|文件的符号链接发生变化。| + |U|文件/子目录/ 设备节点的owner发生变化。| + |G|文件/子目录/ 设备节点的group发生变化。| + |T|文件最后一次的修改时间发生变化。| + + **操作9. 查看特定文件的RPM包** + + 在Linux上找到一个提供特定二进制文件的RPM包,可以在rpm命令中使用 **-qf** 选项。 + + ```shell + # rpm -qf /usr/share/doc/pkgship + pkgship-2.2.0-10.oe2203SP4.noarch.rpm + ``` + + **操作10. 查看已安装RPM包中的文件** + + 查看特定RPM包的安装文件列表,可以在rpm命令中使用 **-ql** 选项。 + + ```shell + # rpm -ql dnf + /etc/bash_completion.d/dnf + /etc/ima/digest_lists.tlv/0-metadata_list-compact_tlv-dnf-4.14.0-14.oe2203SP4.noarch + /etc/ima/digest_lists/0-metadata_list-compact-dnf-dnf-4.14.0-14.oe2203SP4.noarch + /usr/bin/dnf + /usr/lib/systemd/system/dnf-makecache.service + /usr/lib/systemd/system/dnf-makecache.timer + /usr/share/doc/dnf + /usr/share/doc/dnf/AUTHORS + /usr/share/doc/dnf/README.rst + /usr/share/licenses/dnf + /usr/share/licenses/dnf/COPYING + /usr/share/licenses/dnf/PACKAGE-LICENSING + /var/cache/dnf + ``` + + **操作11. 查看最近安装的RPM包** + + Linux是一个多用户操作系统,在使用过程中,其他用户可能已经安装了部分软件包。如需在系统中找到最近安装的包,可以在rpm命令中使用 **-qa** **--last** 选项。 + + ```shell + # rpm -qa --last + ntp-4.2.8p15-11.oe2203SP4.x86_64 + ntpstat-0.6-4.oe2203SP4.noarch + ntp-help-4.2.8p15-11.oe2203SP4.noarch + ``` + + **操作12. 只查看已安装RPM包的文档** + + 可以从Linux Man页面获得任何命令的帮助(**/usr/share/doc/Package\_Name-Version\_Number/docs**\* 文档存放路径),查看安装的RPM包相关联的文档列表,请在rpm命令中使用 **-qdf** 选项,并输入**二进制文件路径**。 + + ```shell + # rpm -qdf /usr/bin/grep + /usr/share/doc/grep/NEWS + /usr/share/doc/grep/README + /usr/share/doc/grep/THANKS + /usr/share/doc/grep/TODO + /usr/share/info/grep.info.gz + /usr/share/man/man1/egrep.1.gz + /usr/share/man/man1/fgrep.1.gz + /usr/share/man/man1/grep.1.gz + ``` + + **操作13. 升级已安装的RPM包** + + 通过使用 **-Uvh** 选项和rpm命令,可以轻松地将已经安装的rpm包升级到最新版本。 + + ```shell + # rpm -Uvh pkgship-2.2.0-10.oe2203SP4.noarch.rpm + Preparing... ################################# [100%] + ``` + + **注意**:升级安装的RPM包时,会删除旧RPM包,安装新RPM包。 + + **操作14. 移除已安装的RPM包** + + 删除安装在系统上的rpm包,请在rpm命令中使用 **-ev** 或 **-e** 选项。 + + ```shell + rpm -ev pkgship + ``` + + **操作15. 重建损坏的RPM数据库** + + 在尝试使用**yum update**命令更新系统时,可能会收到一条错误消息(**RPM数据库已损坏**),如果收到该信息,请在RPM命令中使用 **--rebuilddb** 选项。 + + ```shell + rm /var/lib/rpm/__db* + rpm --rebuilddb + ``` + + **操作16. 检查特定包的漏洞是否已修复** + + 可以通过在rpm命令中使用 **--changelog** 选项并输入相应的**CVE**来实现。 + + ```shell + rpm -q --changelog python-2.6.6 | grep -i "CVE-2019-9636" + ``` + + **操作17. 导入RPM GPG密钥** + + 默认情况下,当向Linux系统添加新的存储库时,GPG密钥将自动导入。同时,也可在RPM命令中添加 **--import** 手动导入RPM GPG密钥,用于从存储库下载时检查包的完整性。 + + ```shell + rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-OpenEuler-22.03-LTS-SP4 + ``` + +3. dnf命令 + + dnf命令及其相关概述 + + |命令|概述| + |--|--| + |repolist|显示已配置的软件repo源。| + |install|Linux上安装单个或多个软件包。| + |upgrade|升级Linux上的一个或多个软件包。| + |list|列出一个或一组软件包。| + |info|显示关于软件包或软件包组的详细信息。| + |updateinfo|显示关于包的公告信息。| + |search|在软件包详细信息中搜索指定字符串。| + |check-update|检查是否有软件包升级。| + |remove|从系统中移除一个或多个软件包。| + |reinstall|重装一个包。| + |downgrade|降级软件包。| + |autoremove|删除所有原先因为依赖关系安装的不需要的软件包。| + |distro-sync|同步已经安装的软件包到最新可用版本。| + |makecache|创建元数据缓存。| + |repository-package|对指定仓库中的所有软件包运行命令。| + |provides|查找提供指定内容的软件包。| + |group|显示或使用组信息。| + |history|显示或使用事务历史。| + |clean|删除已缓存的数据。| + + **操作1. 已配置的软件repo** + + 显示已配置的软件仓库,默认添加 **--enabled** 选项(显示启用的仓库)。 + + ```shell + # dnf repolist --enabled + repo id repo name + EPOL EPOL + OS OS + debuginfo debuginfo + everything everything + pkgship_elasticsearch Elasticsearch repositor + source source + update update + ``` + + - **--all**: 显示所有的软件仓库 + - **--disabled**: 显示被禁用的软件仓库 + - **--enabled**: 显示已经启用的仓库(默认) + + **操作2. 安装单个或多个软件包** + + 通过**install** 命令可以安装RPM包。 + + ```shell + # dnf install 软件包 + ``` + + 安装软件包的过程中可能会存在**冲突**的包或**无法安装**的包,可以在命令中增加 **--allowerasing** 来替换冲突的软件包或 **--skip-broken** 来跳过无法安装的软件包。 + + ```shell + # dnf install 软件包 [软件包 ...] --allowerasing --skip-broken + ``` + + 当使用dnf安装软件包时,通过添加 **--installroot** 设置软件包安装的根目录。 + + ```shell + # dnf install 软件包 --installroot 软件包安装的根目录 + ``` + + 需要临时指定特定的repo源安装时,可以添加 **--setopt=reposdir=** 选项来指定repo源的加载目录。 + + ```shell + # dnf install 软件包 --setopt=reposdir=repo源的加载目录 + ``` + + 在安装选项时,不需要交互式确认时,可以通过添加 **-y** 或 **--assumeyes** 使需要安装的软件包全部自动应答为**是**。 + + ```shell + # dnf install 软件包 -y + ``` + + 指定特定的repo源安装rpm包时,可以通过指定 **--repo** 或 **--enablerepo** 选项。为了达到相同的效果,也可以通过使用 **--disablerepo** 选项来禁用匹配的repo源,此处推荐您使用--repo选项来安装RPM包。 + + ```shell + # dnf install 软件包 --repo=repo源 + ``` + + **操作3. 重新安装软件包** + + 系统上的软件包需要执行重新安装操作时,可以执行`reinstall`命令。 + + ```shell + # dnf reinstall 软件包 + ``` + + **操作4. 升级一个或多个软件包** + + - 通过**upgrade**或 **update**升级Linux上的一个或多个软件包。 + + ```shell + # dnf upgrade 软件包 [软件包 ...] + # dnf update 软件包 [软件包 ...] + ``` + + **操作5. 软件包降级** + + 当软件包版本过高发生兼容性问题时,可以采用降级的方式解决。 + + ```shell + # dnf downgrade 软件包 + ``` + + **操作6. 列出一个或一组软件包** + + 罗列系统中已安装的软件包和配置的repo仓中存在的软件包列表,可以使用 `list` 命令。 + + ```shell + # dnf list + ``` + + 可以通过添加选项过滤显示的包列表 + + - **--all**: 显示所有的软件包(默认) + - **--available**: 只显示可用的软件包 + - **--installed**: 只显示已安装的软件包 + - **--extras**: 只显示额外的软件包 + - **--updates**: 只显示需要被升级的软件包 + - **--upgrades**: 只显示需要被升级的软件包 + - **--autoremove**: 只显示需要被删除的软件包 + - **--recent**: 限制最近被改变的软件包 + + **操作7. 查看软件包详细信息** + + 查看软件包的详细信息时,可以使用`info` 命令。 + + ```shell + # dnf info 软件包 + ``` + + **操作8. 搜索软件包** + + 如需在系统中安装软件包,但不确定软件包全称时,可使用`search`命令查找匹配的包。 + + ```shell + # dnf search 软件包 + ``` + + **操作9. 卸载一个或多个软件包** + + 删除已过期或重复的软件包时,可使用`remove`命令移除一个软件包。 + + ```shell + # dnf remove 软件包 + ``` + + - **--duplicates**: 删除已安装(重复)的软件包 + - **--oldinstallonly**: 移除过期的“仅安装”软件包 + + **操作10. 自动删除因为依赖关系安装的软件包** + + 删除因为依赖关系安装的不需要的软件包时,可使用`autoremove`命令。 + + ```shell + # dnf autoremove 软件包 + ``` + +## 配置SSH + +1. SSH服务介绍 + + **SSH(Secure Shell)**是目前较可靠,专为远程登录会话和其他网络服务**提供安全性保障**的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。透过SSH可以对所有传输的数据进行加密,并防止DNS欺骗和IP欺骗。OpenSSH是SSH协议的免费开源实现。 + +2. 配置SSH服务 + + ```shell + # 打开并修改/etc/ssh/sshd_config文件 + vi /etc/ssh/sshd_config + + # 重新启动SSH服务 + systemctl restart sshd + + # 检查SSH服务状态 + systemctl status sshd + ``` + +3. SSH服务配置文件主要选项 + + ```shell + # 指定SSH协议版本(Specify SSH Protocol Version) + Protocol 2 + + # 允许的用户(Allowed Users) + AllowUsers xxx + + # 被拒绝的用户(Denied Users) + DenyUser root + + # 配置会话超时(Configure Session Timeout) + ClientAliveInterval 120 + + # 禁用SSH根登录(Disable SSH Root Login) + PermitRootLogin no + + # 配置或更改SSH端口号(Configure or Change SSH Port Number) + Port 1234 + + # 禁用SSH密码身份验证 (Disable SSH Password Authentication) + PasswordAuthentication no + ``` diff --git a/docs/zh/server/maintenance/common_skills/images/c50cb9df64f4659787c810167c89feb4_1884x257.png b/docs/zh/server/maintenance/common_skills/images/c50cb9df64f4659787c810167c89feb4_1884x257.png new file mode 100644 index 0000000000000000000000000000000000000000..01081f25627731c56764c196e3fae32d55bc7023 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/c50cb9df64f4659787c810167c89feb4_1884x257.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001321685172.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001321685172.png new file mode 100644 index 0000000000000000000000000000000000000000..a98265bdf251608c0ff394fefe545cd3192bdb28 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001321685172.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001322112990.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001322112990.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4b32bf2b36595abe10f2550cda5714bc355553 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001322112990.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001322219840.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001322219840.png new file mode 100644 index 0000000000000000000000000000000000000000..48b28664df46ddf9aa38c7570bb9e9edb8080ac9 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001322219840.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001322372918.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001322372918.png new file mode 100644 index 0000000000000000000000000000000000000000..5424367c9bc564e713220ba87f963096881833b8 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001322372918.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001322379488.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001322379488.png new file mode 100644 index 0000000000000000000000000000000000000000..8b18cdca066be43b74443498edc5500ea9e1e608 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001322379488.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001335457246.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001335457246.png new file mode 100644 index 0000000000000000000000000000000000000000..325d6a8ce097db0b92b1a883bc4b3d4ad0bc6a49 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001335457246.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001335816300.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001335816300.png new file mode 100644 index 0000000000000000000000000000000000000000..619f0c33503cd27d92f227216c722d554b9132f2 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001335816300.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001336448570.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001336448570.png new file mode 100644 index 0000000000000000000000000000000000000000..4bd494d78d83fef2e8a89c80e17c9b6db892a2e9 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001336448570.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001336729664.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001336729664.png new file mode 100644 index 0000000000000000000000000000000000000000..4d73507cceab2e0b123d6864d9f86c86eb1eee2f Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001336729664.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337000118.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337000118.png new file mode 100644 index 0000000000000000000000000000000000000000..37131647778506f24be4ff401392a9cc209a36eb Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337000118.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337039920.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337039920.png new file mode 100644 index 0000000000000000000000000000000000000000..40c07e9b6ec27cdbe47d39788736b892f1174cc8 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337039920.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337051916.jpg b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337051916.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a2083b7783041884394f796222352d8772ada6cc Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337051916.jpg differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337053248.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337053248.png new file mode 100644 index 0000000000000000000000000000000000000000..8859f37749a4f8a4394e24ddfb54fc473e8c10c2 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337053248.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337172594.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337172594.png new file mode 100644 index 0000000000000000000000000000000000000000..4e806f83c57880543a777807778f14eeb0105aba Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337172594.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337212144.jpg b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337212144.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6f0874250475f598efa7375516109b540918fb8 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337212144.jpg differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337260780.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337260780.png new file mode 100644 index 0000000000000000000000000000000000000000..09d521d933f5fa0caacc592ea92acee959786051 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337260780.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337268560.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337268560.png new file mode 100644 index 0000000000000000000000000000000000000000..663f67428487d88e23aa9c3291c31399fec2f2c3 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337268560.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337268820.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337268820.png new file mode 100644 index 0000000000000000000000000000000000000000..cd1732ee870a6dde0acc54642f34793933ce3356 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337268820.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337419960.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337419960.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b493bf1e57f130e122b59e99ff45cd44539dad Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337419960.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337420372.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337420372.png new file mode 100644 index 0000000000000000000000000000000000000000..2300bcd7426748236fd48b85688bd3d1fa3315df Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337420372.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337422904.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337422904.png new file mode 100644 index 0000000000000000000000000000000000000000..01e250c6f7cbb64abe0b136cd80fda7ae68b629d Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337422904.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337424024.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337424024.png new file mode 100644 index 0000000000000000000000000000000000000000..6532d98885f756c6704bc4bacc0f9133d78405a7 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337424024.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337424304.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337424304.png new file mode 100644 index 0000000000000000000000000000000000000000..9ecb384ed58458c24d8e3ae729c4de197b982b86 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337424304.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337427216.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337427216.png new file mode 100644 index 0000000000000000000000000000000000000000..8633dbdd658f98501dfc91a704395260f2d4df3c Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337427216.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337427392.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337427392.png new file mode 100644 index 0000000000000000000000000000000000000000..74f5cb24520c94de8628b2e64e6916c563f9f5a2 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337427392.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337533690.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337533690.png new file mode 100644 index 0000000000000000000000000000000000000000..1f02d9b155754a113347a54a7d35ba9b060175a8 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337533690.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337536842.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337536842.png new file mode 100644 index 0000000000000000000000000000000000000000..5a9ee2c989638c9a6aad3fcfb35bb9b9f2d4683c Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337536842.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337579708.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337579708.png new file mode 100644 index 0000000000000000000000000000000000000000..5cd8ed939434e6447dd55679eeaa3756d861751f Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337579708.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337580216.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337580216.png new file mode 100644 index 0000000000000000000000000000000000000000..5516b8d261b769287c74cf860a6708fcde6bbb8a Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337580216.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337584296.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337584296.png new file mode 100644 index 0000000000000000000000000000000000000000..fa76ecb59018fb154ffe1d9f6da1484d652f3ac1 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337584296.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337696078.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337696078.png new file mode 100644 index 0000000000000000000000000000000000000000..3864852e345eaf01794042feaa85b012b8af71de Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337696078.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337740252.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337740252.png new file mode 100644 index 0000000000000000000000000000000000000000..fd83fb600a54ab8bc39ee2ae54210be8b6c48973 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337740252.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337740540.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337740540.png new file mode 100644 index 0000000000000000000000000000000000000000..b8e25128a47dccaed733fc192f52f2ca7828e516 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337740540.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337747132.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337747132.png new file mode 100644 index 0000000000000000000000000000000000000000..41ea7d47f5fe5fca46816d93cb08b5da00abc0ad Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337747132.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337748300.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337748300.png new file mode 100644 index 0000000000000000000000000000000000000000..32488dc1740408834954cf8d57a2843d98f09c2e Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337748300.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337748528.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337748528.png new file mode 100644 index 0000000000000000000000000000000000000000..f2d62c85c844c2756f4d27a48711560dfb9615ea Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001337748528.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001372249333.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001372249333.png new file mode 100644 index 0000000000000000000000000000000000000000..48cd37225954e212cb3e159acc137866d8edc362 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001372249333.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001372748125.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001372748125.png new file mode 100644 index 0000000000000000000000000000000000000000..5f6326b9415cf766dd8379dbadd5aa1a0dc6861f Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001372748125.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001372821865.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001372821865.png new file mode 100644 index 0000000000000000000000000000000000000000..21e8dad1cd90755440cf858523b12c036a91e1ad Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001372821865.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001372824637.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001372824637.png new file mode 100644 index 0000000000000000000000000000000000000000..aefb5d83c079e6718ef88fd934b4b496cdc29565 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001372824637.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001373373585.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001373373585.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e5e47c9beca2c7c7630d78916f80eda652b52a Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001373373585.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001373379529.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001373379529.png new file mode 100644 index 0000000000000000000000000000000000000000..daa40b49e679668905632f25ff42bf8599ba0ead Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001373379529.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001384808269.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001384808269.png new file mode 100644 index 0000000000000000000000000000000000000000..be18ecef3a149d5742f18535552f66f26ab34832 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001384808269.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001385585749.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001385585749.png new file mode 100644 index 0000000000000000000000000000000000000000..c13604ab7095c2a7717bde1384f0aea3d53f69e3 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001385585749.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001385611905.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001385611905.png new file mode 100644 index 0000000000000000000000000000000000000000..8c233e40a21e678ddf4115c2e2e80c96e25a60ce Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001385611905.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001385905845.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001385905845.png new file mode 100644 index 0000000000000000000000000000000000000000..a6cb8bc4a188ef444919d71f7f16baa06422788b Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001385905845.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001386149037.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001386149037.png new file mode 100644 index 0000000000000000000000000000000000000000..da73fead24d8805bb43287f53c757e80ff0d597f Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001386149037.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001386699925.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001386699925.png new file mode 100644 index 0000000000000000000000000000000000000000..cf5b13b35e65ed0143a01a5bcad1e11eaddaded7 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001386699925.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387293085.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387293085.png new file mode 100644 index 0000000000000000000000000000000000000000..7f56b020949c53d018eba016952c2409f0d7dca9 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387293085.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387413509.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387413509.png new file mode 100644 index 0000000000000000000000000000000000000000..2245427058fc31f3e5d7f40062c0551936a67199 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387413509.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387413793.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387413793.png new file mode 100644 index 0000000000000000000000000000000000000000..aa649bf7215662819766d897513fb711d9d1e7f8 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387413793.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387415629.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387415629.png new file mode 100644 index 0000000000000000000000000000000000000000..01189358354090591de6580f8ef88ef78ddba3a1 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387415629.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387691985.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387691985.png new file mode 100644 index 0000000000000000000000000000000000000000..31c3096fa837c1b397ab2fe27acdd87e2cec36de Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387691985.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387692269.jpg b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387692269.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b79e3ddf78520277046b933c4662c6b72f45ab85 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387692269.jpg differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387692893.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387692893.png new file mode 100644 index 0000000000000000000000000000000000000000..49ea515d834b58d4ded14c55a6a2b07034d76137 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387692893.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387755969.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387755969.png new file mode 100644 index 0000000000000000000000000000000000000000..b2daa95d6b757e7bd443d8fd961922f248dd6853 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387755969.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387780357.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387780357.png new file mode 100644 index 0000000000000000000000000000000000000000..1aab3b8be2cd0c906253d70036a9fee3050a1055 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387780357.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387784693.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387784693.png new file mode 100644 index 0000000000000000000000000000000000000000..62a40117a892ba6c163be81bce1d198c2920f0e9 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387784693.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387787605.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387787605.png new file mode 100644 index 0000000000000000000000000000000000000000..8c1893e16fb929f77bb6b9a70cb25d3479dd684c Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387787605.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387855149.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387855149.png new file mode 100644 index 0000000000000000000000000000000000000000..731e957c367cb05e4229f53cf97dcee2cde69dff Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387855149.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387857005.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387857005.png new file mode 100644 index 0000000000000000000000000000000000000000..872f5c9eb05169831df4ba49d017629e8a943c64 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387857005.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387902849.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387902849.png new file mode 100644 index 0000000000000000000000000000000000000000..ffe2043c199308ed2033e3eb02a0662a65141ece Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387902849.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387907229.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387907229.png new file mode 100644 index 0000000000000000000000000000000000000000..084fbea1aee4d09b1e623c66b4f07641c7a0208d Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387907229.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387908045.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387908045.png new file mode 100644 index 0000000000000000000000000000000000000000..1fca645598e7a67da6e75b98c44f3c9a740be374 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387908045.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387908453.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387908453.png new file mode 100644 index 0000000000000000000000000000000000000000..b97804a0a575fd18235e7a0c7e4f2d0183e3b460 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387908453.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387961737.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387961737.png new file mode 100644 index 0000000000000000000000000000000000000000..ae4ddce8cf2629b811e9711c61186b3efa4dfe3c Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001387961737.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388020197.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388020197.png new file mode 100644 index 0000000000000000000000000000000000000000..1816e1e068ee0294677ebb357ffd158a14bb86cf Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388020197.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388024321.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388024321.png new file mode 100644 index 0000000000000000000000000000000000000000..da3ba54203ded0093b7c2b5308de0e2afd85a146 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388024321.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388024397.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388024397.png new file mode 100644 index 0000000000000000000000000000000000000000..4e4531dd19dc703399c9d4dd0e95236fa9a064c8 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388024397.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388028161.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388028161.png new file mode 100644 index 0000000000000000000000000000000000000000..b3beb92520c34ba771d096a8a146fb2c5b5edbb7 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388028161.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388028537.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388028537.png new file mode 100644 index 0000000000000000000000000000000000000000..ffb244306787c397ef4a9f4d9c3eb504172d3777 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388028537.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388184025.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388184025.png new file mode 100644 index 0000000000000000000000000000000000000000..cbce6fe1e32c547426319923c0fdb13e95554b99 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388184025.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388187249.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388187249.png new file mode 100644 index 0000000000000000000000000000000000000000..0ac83f21e269d909e550b68cb0bdc6347c05dcac Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388187249.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388187325.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388187325.png new file mode 100644 index 0000000000000000000000000000000000000000..02dbdf218da2cb1c844dfc13a463875df5124d48 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388187325.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388188365.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388188365.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe3bfb48446bab88e3e622b9f8066383f269590 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388188365.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388241577.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388241577.png new file mode 100644 index 0000000000000000000000000000000000000000..8dacb6e343ea4c750904fa090bb99213e012379d Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388241577.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388972645.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388972645.png new file mode 100644 index 0000000000000000000000000000000000000000..e32606925f4bb4380b262d9f946d4cd106202b87 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001388972645.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001389098425.png b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001389098425.png new file mode 100644 index 0000000000000000000000000000000000000000..c63903009ab9ba454f169250632dbec1b3c94467 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_image_0000001389098425.png differ diff --git a/docs/zh/server/maintenance/common_skills/images/zh-cn_other_0000001337581224.jpeg b/docs/zh/server/maintenance/common_skills/images/zh-cn_other_0000001337581224.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2c019b828bdf9c699f203f09ba3542968ff21262 Binary files /dev/null and b/docs/zh/server/maintenance/common_skills/images/zh-cn_other_0000001337581224.jpeg differ diff --git a/docs/zh/server/maintenance/common_skills/information_collection.md b/docs/zh/server/maintenance/common_skills/information_collection.md new file mode 100644 index 0000000000000000000000000000000000000000..5df97181b7f3d74b655dc23461f64f8e39290521 --- /dev/null +++ b/docs/zh/server/maintenance/common_skills/information_collection.md @@ -0,0 +1,191 @@ +# 信息收集 + +- [信息收集](#信息收集) + - [查看OS信息](#查看os信息) + - [查看硬件信息](#查看硬件信息) + - [查看软件信息](#查看软件信息) + - [查看OS日志](#查看os日志) + +## 查看OS信息 + +(1)查看操作系统版本信息,可用下面3个命令进行查询: + +命令1,如下: + +```shell +cat /etc/openEuler-latest +``` + +命令2,如下: + +```shell +cat /etc/os-release +``` + +命令3,如下: + +```shell +cat /etc/openEuler-release +``` + +(2)查看内核版本信息 + +```shell +uname -a +``` + +## 查看硬件信息 + +(1)查看CPU的统计信息 + +```shell +lscpu +``` + +(2)查看CPU相关参数 + +```shell +cat /proc/cpuinfo +``` + +(3)查看系统内存信息 + +```shell +cat /proc/meminfo +``` + +(4)查看内存信息 + +```shell +dmidecode -t memory +``` + +(5)查看硬盘和分区分布 + +```shell +lsblk +``` + +(6)看硬盘和分区的详细信息 + +```shell +fdisk -l +``` + +(7)查看网卡硬件信息 + +```shell +lspci | grep -i 'eth' +``` + +(8)查看所有网络接口 + +```shell +ip a 或 ifconfig -a +``` + +(9)查看某个网络接口的详细信息 + +```shell +ethtool enp7s0 (以enp7s0为例) +``` + +(10)查看pci信息 + +```shell +lspci +``` + +(11)查看设备树 + +```shell +lspci -t +``` + +(12)查看BIOS信息 + +```shell +[root@openEuler ~]# dmidecode -t bios +# dmidecode 3.4 +Getting SMBIOS data from sysfs. +SMBIOS 3.0.0 present. + +Handle 0x0000, DMI type 0, 26 bytes +BIOS Information + Vendor: EFI Development Kit II / OVMF + Version: 0.0.0 + Release Date: 02/06/2015 + Address: 0xE8000 + Runtime Size: 96 kB + ROM Size: 64 kB + Characteristics: + BIOS characteristics not supported + Targeted content distribution is supported + UEFI is supported\ + System is a virtual machine + BIOS Revision: 0.0 +``` + +## 查看软件信息 + +(1)查看软件包的详细信息 + +```shell +rpm -qi systemd(以systemd为例) +``` + +(2)查看软件包提供的模块 + +```shell +rpm -q --provides (以systemd为例) +``` + +(3)查看所有已安装软件包 + +```shell +rpm -qa (以systemd为例) +``` + +(4)查看软件包文件列表 + +```shell +rpm -ql (以python3-rpm为例) +``` + +## 查看OS日志 + +(1)查看系统启动后的信息和错误日志 + +```shell +cat /var/log/messages +``` + +(2)查看安全相关的日志信息 + +```shell +cat /var/log/secure +``` + +(3)查看邮件相关的日志信息 + +```shell +cat /var/log/maillog +``` + +(4)查看定时任务相关的日志信息 + +```shell +cat /var/log/cron +``` + +(5)查看UUCP和news设备相关的日志信息 + +```shell +cat /var/log/spooler +``` + +(6)查看系统启动日志消息 + +```shell +cat /var/log/boot.log +``` diff --git a/docs/zh/server/maintenance/common_tools/_toc.yaml b/docs/zh/server/maintenance/common_tools/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..02a8223f32ea5e73b2bee724412d3c547842a88b --- /dev/null +++ b/docs/zh/server/maintenance/common_tools/_toc.yaml @@ -0,0 +1,5 @@ +isManual: true +label: '' +sections: + - label: 常用工具 + href: ./commonly_used_tools.md diff --git a/docs/zh/server/maintenance/common_tools/commonly_used_tools.md b/docs/zh/server/maintenance/common_tools/commonly_used_tools.md new file mode 100644 index 0000000000000000000000000000000000000000..e33e4b8094e3e15779a4854d6af7bfe18ea56233 --- /dev/null +++ b/docs/zh/server/maintenance/common_tools/commonly_used_tools.md @@ -0,0 +1,201 @@ +# 常用工具 + +- [常用工具](#常用工具) + - [ftrace](#ftrace) + - [strace](#strace) + - [kdump](#kdump) + +## ftrace + +1. ftrace:是一个针对linux kernel内核空间的debug工具,内核中会提供trace events供用户追踪。而ftrace则可以将events抓取出来,让用户能够直观地看到这些事件,同时也可以追踪内核的函数。 +2. ftrace的配置和使用:要使用ftrace,需要**将其相关的依赖编译进内核**,openEuler已经默认编译了ftrace选项,如果没开启可以在menuconfig里选择Kernel hacking -\> Tracers -\> Trace syscalls开启,同时还要**编译debugfs**,选择Kernel hacking -\> Generic Kernel Debugging Instruments -\> Debug Filesystem。 + +- **ftrace的功能配置** + +ftrace通过debugfs向用户空间提供访问接口,内核配置debugfs后,会创建/sys/kernel/debug目录,debugfs文件系统就是挂载到该目录。如果内核支持ftrace相关的配置项后,会在debugfs下创建一个tracing目录,debugfs文件系统会挂载到该目录,该目录内容如下图所示: + +![](./images/zh-cn_image_0000001322372918.png) + +- **ftrace debugfs接口介绍** + +用户可看到ftrace通过debugfs文件系统提供的一些控制和输出文件,如下对常用的文件做简单说明: + + available_tracers:可用的跟踪程序 + + current_tracer:正在运行的跟踪程序 + + available_events:列举了系统所有可用的trace events + + events:该目录对events按模块做了区分。 + + set_event:列举当前要追踪的events + + tracing_on:用于控制跟踪打开或停止,echo 0 \> tracing\_on表示关闭,1表示打开 + + trace:查看跟踪数据 + +- **可用的跟踪程序** + +![zh-cn_image_0000001373373585](./images/zh-cn_image_0000001373373585.png) + + function:一个无需参数的函数调用跟踪程序 + + function_graph:一个使用子调用的函数调用跟踪程序 + +- **追踪event** + +```shell +# 先注明要追踪ras的arm_event +echo ras:arm_event > /sys/kernel/debug/tracing/set_event + +# 这个文件可以看到event的具体格式,会打印什么字段 +cat /sys/kernel/debug/tracing/events/ras/arm_event/format + +# 启动追踪 +echo 1 > /sys/kernel/debug/tracing/tracing_on + +# 观察trace的输出 +tail -f /sys/kernel/debug/tracing/trace +``` + +![c50cb9df64f4659787c810167c89feb4_1884x257](./images/c50cb9df64f4659787c810167c89feb4_1884x257.png) + +- **追踪内核函数入参** + +选择跟踪mmap,其对应系统调用do\_mmap,选择输出addr入参。 + +![zh-cn_image_0000001373379529](./images/zh-cn_image_0000001373379529.png) + +```shell +# 通过kprobe跟踪 +echo 'p:probe1 do_mmap addr=%x1' > kprobe_events + +# 启用kprobe +echo 1 > events/kprobes/probe1/enable + +# 启动追踪 +echo 1 > tracing_on + +# 查看trace数据 +``` + +![zh-cn_image_0000001322379488](./images/zh-cn_image_0000001322379488.png) + +- **追踪函数调用** + +```shell +# 选择追踪类型 +echo function_graph > current_tracer + +# 设置过滤进程pid +echo set_ftrace_pid + +# 开始追踪 +echo 1 > tracing_on + +# 查看trace数据 +``` + +![zh-cn_image_0000001322219840](./images/zh-cn_image_0000001322219840.png) + +## strace + +strace命令是一个诊断、调试工具,可以通过使用strace对应用的系统调用及信号传递来进行分析,从而达到解决问题或了解应用执行过程的目的。 + +可以通过`strace -h`来查看strace提供了哪些功能。 + +![zh-cn_image_0000001322112990](./images/zh-cn_image_0000001322112990.png) + +最常用的使用方式(追踪xx命令,跟踪forks,打印时间,结果输出到output文件中)。 + +```shell +strace -f -tt -o output xx +``` + +## kdump + +1. crash/kdump原理介绍 + + kdump是系统运行在某个时间点的内存状态的快照,便于运维人员debug分析系统挂掉的原因,常用于系统宕机和panic。 + + 大致流程如下: + + ![zh-cn_image_0000001321685172](./images/zh-cn_image_0000001321685172.png) + +2. 相关工具安装配置 + + ```shell + # 使用yum安装相应软件包 + yum install kernel-debuginfo-$(uname -r) kexec-tools crash -y + + # 设置crashkernel预留内存大小 + vim /etc/default/grub + ``` + + ![zh-cn_image_0000001372821865](./images/zh-cn_image_0000001372821865.png) + + ```shell + # 重新生成grub配置文件 + grub2-mkconfig -o /boot/efi/EFI/openEuler/grub.cfg + reboot + + # 启动kdump服务 + systemctl start kdump #启动kdump + systemctl enable kdump #设置开机启动 + ``` + +3. crash触发 + + 步骤1. 内核具备默认配置,当硬锁和oops的时候会触发panic。 + + ![zh-cn_image_0000001372824637](./images/zh-cn_image_0000001372824637.png) + + 步骤2. 用户可以修改该配置,以下相关命令可使配置生效一次,重启后失效。 + + ```shell + # 设置软锁触发panic + echo 1 > /proc/sys/kernel/softlockup_panic + + # 设置kernel遇到OOM触发panic + echo 1 > /proc/sys/vm/panic_on_oom + + # 进程出现hang时引发panic + echo 1 > /proc/sys/kernel/hung_task_panic + + # 进程hangtask机制超时时间设置 + echo 60 > /proc/sys/kernel/kernel.hung_task_timeout_secs + ``` + + 步骤3. 如需要重启自动重启配置,将下列参数写入/etc/sysctl.conf文件,执行sysctl -p生效。 + + ```shell + kernel.hung_task_panic=1 + kernel.hung_task_timeout_secs=60 + kernel.softlockup_panic=1 + vm.panic_on_oom=1 + ``` + +4. crash分析 + + 步骤1. 开启crash调试。 + + 步骤2. 生成的vmcore文件一般会在“/var/crash/IP地址-时间”目录下。 + + 步骤3. 执行如下命令即可进入crash调试。 + + ```shell + crash {vmcore文件} {调试内核vmlinux} + ``` + + ![zh-cn_image_0000001372748125](./images/zh-cn_image_0000001372748125.png) + + crash调试命令格式为 command args,command为需要执行的命令,args为部分调试命令需要的参数。 + + |命令|用途| + |--|--| + |help|打印命令的help信息,可展示支持命令,也可查看具体命令的help信息,如 help bt。| + |bt|打印函数调用栈信息。| + |log|打印系统消息缓冲区,可追加参数,如log。 | + |ps|显示进程的状态,>表示进程为活跃状态。| + |dis|对给定函数或者地址进行反汇编,如dis -l [func]。 | + |mount|展示当前的文件系统信息| diff --git a/docs/zh/server/maintenance/common_tools/images/c50cb9df64f4659787c810167c89feb4_1884x257.png b/docs/zh/server/maintenance/common_tools/images/c50cb9df64f4659787c810167c89feb4_1884x257.png new file mode 100644 index 0000000000000000000000000000000000000000..01081f25627731c56764c196e3fae32d55bc7023 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/c50cb9df64f4659787c810167c89feb4_1884x257.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001321685172.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001321685172.png new file mode 100644 index 0000000000000000000000000000000000000000..a98265bdf251608c0ff394fefe545cd3192bdb28 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001321685172.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001322112990.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001322112990.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4b32bf2b36595abe10f2550cda5714bc355553 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001322112990.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001322219840.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001322219840.png new file mode 100644 index 0000000000000000000000000000000000000000..48b28664df46ddf9aa38c7570bb9e9edb8080ac9 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001322219840.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001322372918.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001322372918.png new file mode 100644 index 0000000000000000000000000000000000000000..5424367c9bc564e713220ba87f963096881833b8 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001322372918.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001322379488.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001322379488.png new file mode 100644 index 0000000000000000000000000000000000000000..8b18cdca066be43b74443498edc5500ea9e1e608 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001322379488.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001335457246.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001335457246.png new file mode 100644 index 0000000000000000000000000000000000000000..325d6a8ce097db0b92b1a883bc4b3d4ad0bc6a49 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001335457246.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001335816300.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001335816300.png new file mode 100644 index 0000000000000000000000000000000000000000..619f0c33503cd27d92f227216c722d554b9132f2 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001335816300.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001336448570.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001336448570.png new file mode 100644 index 0000000000000000000000000000000000000000..4bd494d78d83fef2e8a89c80e17c9b6db892a2e9 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001336448570.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001336729664.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001336729664.png new file mode 100644 index 0000000000000000000000000000000000000000..4d73507cceab2e0b123d6864d9f86c86eb1eee2f Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001336729664.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337000118.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337000118.png new file mode 100644 index 0000000000000000000000000000000000000000..37131647778506f24be4ff401392a9cc209a36eb Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337000118.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337039920.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337039920.png new file mode 100644 index 0000000000000000000000000000000000000000..40c07e9b6ec27cdbe47d39788736b892f1174cc8 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337039920.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337051916.jpg b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337051916.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a2083b7783041884394f796222352d8772ada6cc Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337051916.jpg differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337053248.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337053248.png new file mode 100644 index 0000000000000000000000000000000000000000..8859f37749a4f8a4394e24ddfb54fc473e8c10c2 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337053248.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337172594.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337172594.png new file mode 100644 index 0000000000000000000000000000000000000000..4e806f83c57880543a777807778f14eeb0105aba Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337172594.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337212144.jpg b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337212144.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6f0874250475f598efa7375516109b540918fb8 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337212144.jpg differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337260780.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337260780.png new file mode 100644 index 0000000000000000000000000000000000000000..09d521d933f5fa0caacc592ea92acee959786051 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337260780.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337268560.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337268560.png new file mode 100644 index 0000000000000000000000000000000000000000..663f67428487d88e23aa9c3291c31399fec2f2c3 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337268560.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337268820.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337268820.png new file mode 100644 index 0000000000000000000000000000000000000000..cd1732ee870a6dde0acc54642f34793933ce3356 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337268820.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337419960.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337419960.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b493bf1e57f130e122b59e99ff45cd44539dad Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337419960.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337420372.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337420372.png new file mode 100644 index 0000000000000000000000000000000000000000..2300bcd7426748236fd48b85688bd3d1fa3315df Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337420372.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337422904.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337422904.png new file mode 100644 index 0000000000000000000000000000000000000000..01e250c6f7cbb64abe0b136cd80fda7ae68b629d Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337422904.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337424024.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337424024.png new file mode 100644 index 0000000000000000000000000000000000000000..6532d98885f756c6704bc4bacc0f9133d78405a7 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337424024.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337424304.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337424304.png new file mode 100644 index 0000000000000000000000000000000000000000..9ecb384ed58458c24d8e3ae729c4de197b982b86 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337424304.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337427216.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337427216.png new file mode 100644 index 0000000000000000000000000000000000000000..8633dbdd658f98501dfc91a704395260f2d4df3c Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337427216.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337427392.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337427392.png new file mode 100644 index 0000000000000000000000000000000000000000..74f5cb24520c94de8628b2e64e6916c563f9f5a2 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337427392.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337533690.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337533690.png new file mode 100644 index 0000000000000000000000000000000000000000..1f02d9b155754a113347a54a7d35ba9b060175a8 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337533690.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337536842.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337536842.png new file mode 100644 index 0000000000000000000000000000000000000000..5a9ee2c989638c9a6aad3fcfb35bb9b9f2d4683c Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337536842.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337579708.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337579708.png new file mode 100644 index 0000000000000000000000000000000000000000..5cd8ed939434e6447dd55679eeaa3756d861751f Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337579708.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337580216.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337580216.png new file mode 100644 index 0000000000000000000000000000000000000000..5516b8d261b769287c74cf860a6708fcde6bbb8a Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337580216.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337584296.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337584296.png new file mode 100644 index 0000000000000000000000000000000000000000..fa76ecb59018fb154ffe1d9f6da1484d652f3ac1 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337584296.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337696078.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337696078.png new file mode 100644 index 0000000000000000000000000000000000000000..3864852e345eaf01794042feaa85b012b8af71de Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337696078.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337740252.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337740252.png new file mode 100644 index 0000000000000000000000000000000000000000..fd83fb600a54ab8bc39ee2ae54210be8b6c48973 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337740252.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337740540.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337740540.png new file mode 100644 index 0000000000000000000000000000000000000000..b8e25128a47dccaed733fc192f52f2ca7828e516 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337740540.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337747132.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337747132.png new file mode 100644 index 0000000000000000000000000000000000000000..41ea7d47f5fe5fca46816d93cb08b5da00abc0ad Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337747132.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337748300.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337748300.png new file mode 100644 index 0000000000000000000000000000000000000000..32488dc1740408834954cf8d57a2843d98f09c2e Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337748300.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337748528.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337748528.png new file mode 100644 index 0000000000000000000000000000000000000000..f2d62c85c844c2756f4d27a48711560dfb9615ea Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001337748528.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001372249333.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001372249333.png new file mode 100644 index 0000000000000000000000000000000000000000..48cd37225954e212cb3e159acc137866d8edc362 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001372249333.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001372748125.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001372748125.png new file mode 100644 index 0000000000000000000000000000000000000000..5f6326b9415cf766dd8379dbadd5aa1a0dc6861f Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001372748125.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001372821865.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001372821865.png new file mode 100644 index 0000000000000000000000000000000000000000..21e8dad1cd90755440cf858523b12c036a91e1ad Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001372821865.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001372824637.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001372824637.png new file mode 100644 index 0000000000000000000000000000000000000000..aefb5d83c079e6718ef88fd934b4b496cdc29565 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001372824637.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001373373585.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001373373585.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e5e47c9beca2c7c7630d78916f80eda652b52a Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001373373585.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001373379529.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001373379529.png new file mode 100644 index 0000000000000000000000000000000000000000..daa40b49e679668905632f25ff42bf8599ba0ead Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001373379529.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001384808269.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001384808269.png new file mode 100644 index 0000000000000000000000000000000000000000..be18ecef3a149d5742f18535552f66f26ab34832 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001384808269.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001385585749.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001385585749.png new file mode 100644 index 0000000000000000000000000000000000000000..c13604ab7095c2a7717bde1384f0aea3d53f69e3 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001385585749.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001385611905.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001385611905.png new file mode 100644 index 0000000000000000000000000000000000000000..8c233e40a21e678ddf4115c2e2e80c96e25a60ce Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001385611905.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001385905845.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001385905845.png new file mode 100644 index 0000000000000000000000000000000000000000..a6cb8bc4a188ef444919d71f7f16baa06422788b Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001385905845.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001386149037.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001386149037.png new file mode 100644 index 0000000000000000000000000000000000000000..da73fead24d8805bb43287f53c757e80ff0d597f Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001386149037.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001386699925.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001386699925.png new file mode 100644 index 0000000000000000000000000000000000000000..cf5b13b35e65ed0143a01a5bcad1e11eaddaded7 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001386699925.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387293085.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387293085.png new file mode 100644 index 0000000000000000000000000000000000000000..7f56b020949c53d018eba016952c2409f0d7dca9 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387293085.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387413509.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387413509.png new file mode 100644 index 0000000000000000000000000000000000000000..2245427058fc31f3e5d7f40062c0551936a67199 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387413509.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387413793.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387413793.png new file mode 100644 index 0000000000000000000000000000000000000000..aa649bf7215662819766d897513fb711d9d1e7f8 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387413793.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387415629.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387415629.png new file mode 100644 index 0000000000000000000000000000000000000000..01189358354090591de6580f8ef88ef78ddba3a1 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387415629.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387691985.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387691985.png new file mode 100644 index 0000000000000000000000000000000000000000..31c3096fa837c1b397ab2fe27acdd87e2cec36de Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387691985.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387692269.jpg b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387692269.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b79e3ddf78520277046b933c4662c6b72f45ab85 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387692269.jpg differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387692893.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387692893.png new file mode 100644 index 0000000000000000000000000000000000000000..49ea515d834b58d4ded14c55a6a2b07034d76137 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387692893.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387755969.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387755969.png new file mode 100644 index 0000000000000000000000000000000000000000..b2daa95d6b757e7bd443d8fd961922f248dd6853 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387755969.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387780357.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387780357.png new file mode 100644 index 0000000000000000000000000000000000000000..1aab3b8be2cd0c906253d70036a9fee3050a1055 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387780357.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387784693.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387784693.png new file mode 100644 index 0000000000000000000000000000000000000000..62a40117a892ba6c163be81bce1d198c2920f0e9 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387784693.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387787605.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387787605.png new file mode 100644 index 0000000000000000000000000000000000000000..8c1893e16fb929f77bb6b9a70cb25d3479dd684c Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387787605.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387855149.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387855149.png new file mode 100644 index 0000000000000000000000000000000000000000..731e957c367cb05e4229f53cf97dcee2cde69dff Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387855149.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387857005.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387857005.png new file mode 100644 index 0000000000000000000000000000000000000000..872f5c9eb05169831df4ba49d017629e8a943c64 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387857005.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387902849.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387902849.png new file mode 100644 index 0000000000000000000000000000000000000000..ffe2043c199308ed2033e3eb02a0662a65141ece Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387902849.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387907229.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387907229.png new file mode 100644 index 0000000000000000000000000000000000000000..084fbea1aee4d09b1e623c66b4f07641c7a0208d Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387907229.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387908045.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387908045.png new file mode 100644 index 0000000000000000000000000000000000000000..1fca645598e7a67da6e75b98c44f3c9a740be374 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387908045.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387908453.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387908453.png new file mode 100644 index 0000000000000000000000000000000000000000..b97804a0a575fd18235e7a0c7e4f2d0183e3b460 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387908453.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387961737.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387961737.png new file mode 100644 index 0000000000000000000000000000000000000000..ae4ddce8cf2629b811e9711c61186b3efa4dfe3c Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001387961737.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388020197.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388020197.png new file mode 100644 index 0000000000000000000000000000000000000000..1816e1e068ee0294677ebb357ffd158a14bb86cf Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388020197.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388024321.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388024321.png new file mode 100644 index 0000000000000000000000000000000000000000..da3ba54203ded0093b7c2b5308de0e2afd85a146 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388024321.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388024397.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388024397.png new file mode 100644 index 0000000000000000000000000000000000000000..4e4531dd19dc703399c9d4dd0e95236fa9a064c8 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388024397.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388028161.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388028161.png new file mode 100644 index 0000000000000000000000000000000000000000..b3beb92520c34ba771d096a8a146fb2c5b5edbb7 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388028161.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388028537.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388028537.png new file mode 100644 index 0000000000000000000000000000000000000000..ffb244306787c397ef4a9f4d9c3eb504172d3777 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388028537.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388184025.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388184025.png new file mode 100644 index 0000000000000000000000000000000000000000..cbce6fe1e32c547426319923c0fdb13e95554b99 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388184025.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388187249.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388187249.png new file mode 100644 index 0000000000000000000000000000000000000000..0ac83f21e269d909e550b68cb0bdc6347c05dcac Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388187249.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388187325.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388187325.png new file mode 100644 index 0000000000000000000000000000000000000000..02dbdf218da2cb1c844dfc13a463875df5124d48 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388187325.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388188365.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388188365.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe3bfb48446bab88e3e622b9f8066383f269590 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388188365.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388241577.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388241577.png new file mode 100644 index 0000000000000000000000000000000000000000..8dacb6e343ea4c750904fa090bb99213e012379d Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388241577.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388972645.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388972645.png new file mode 100644 index 0000000000000000000000000000000000000000..e32606925f4bb4380b262d9f946d4cd106202b87 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001388972645.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001389098425.png b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001389098425.png new file mode 100644 index 0000000000000000000000000000000000000000..c63903009ab9ba454f169250632dbec1b3c94467 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_image_0000001389098425.png differ diff --git a/docs/zh/server/maintenance/common_tools/images/zh-cn_other_0000001337581224.jpeg b/docs/zh/server/maintenance/common_tools/images/zh-cn_other_0000001337581224.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2c019b828bdf9c699f203f09ba3542968ff21262 Binary files /dev/null and b/docs/zh/server/maintenance/common_tools/images/zh-cn_other_0000001337581224.jpeg differ diff --git a/docs/zh/server/maintenance/gala/_toc.yaml b/docs/zh/server/maintenance/gala/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2ab11dbb2c2a6ed9b7e53c960164514ee58dc415 --- /dev/null +++ b/docs/zh/server/maintenance/gala/_toc.yaml @@ -0,0 +1,9 @@ +isManual: true +label: '' +sections: + - label: gala-anteater使用手册 + href: ./using_gala_anteater.md + - label: '**gala-gopher使用手册**' + href: ./using_gala_gopher.md + - label: gala-spider使用手册 + href: ./using_gala_spider.md diff --git "a/docs/zh/server/maintenance/gala/figures/a-ops\350\275\257\344\273\266\346\236\266\346\236\204.png" "b/docs/zh/server/maintenance/gala/figures/a-ops\350\275\257\344\273\266\346\236\266\346\236\204.png" new file mode 100644 index 0000000000000000000000000000000000000000..047c6f1bfe3e38c66d34285563d910f6f3bd07e1 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/a-ops\350\275\257\344\273\266\346\236\266\346\236\204.png" differ diff --git a/docs/zh/server/maintenance/gala/figures/chakanyuqi.png b/docs/zh/server/maintenance/gala/figures/chakanyuqi.png new file mode 100644 index 0000000000000000000000000000000000000000..bbead6a91468d5dee570cfdc66faf9a4ab155d7c Binary files /dev/null and b/docs/zh/server/maintenance/gala/figures/chakanyuqi.png differ diff --git a/docs/zh/server/maintenance/gala/figures/chaxunshijipeizhi.png b/docs/zh/server/maintenance/gala/figures/chaxunshijipeizhi.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f6e450fc0e1e246492ca71a6fcd8db572eb469 Binary files /dev/null and b/docs/zh/server/maintenance/gala/figures/chaxunshijipeizhi.png differ diff --git a/docs/zh/server/maintenance/gala/figures/chuangjianyewuyu.png b/docs/zh/server/maintenance/gala/figures/chuangjianyewuyu.png new file mode 100644 index 0000000000000000000000000000000000000000..4f5b8de2d2c4ddb9bfdfba1ac17258a834561e2d Binary files /dev/null and b/docs/zh/server/maintenance/gala/figures/chuangjianyewuyu.png differ diff --git "a/docs/zh/server/maintenance/gala/figures/gala-gopher\346\210\220\345\212\237\345\220\257\345\212\250\347\212\266\346\200\201.png" "b/docs/zh/server/maintenance/gala/figures/gala-gopher\346\210\220\345\212\237\345\220\257\345\212\250\347\212\266\346\200\201.png" new file mode 100644 index 0000000000000000000000000000000000000000..ab16e9d3661db3fd4adc6c605b2d2d08e79fdc1c Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/gala-gopher\346\210\220\345\212\237\345\220\257\345\212\250\347\212\266\346\200\201.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/gala-spider\350\275\257\344\273\266\346\236\266\346\236\204\345\233\276.png" "b/docs/zh/server/maintenance/gala/figures/gala-spider\350\275\257\344\273\266\346\236\266\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..c5a0768be63a98ef7ccc4a56996a8c715f7090af Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/gala-spider\350\275\257\344\273\266\346\236\266\346\236\204\345\233\276.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/gopher\350\275\257\344\273\266\346\236\266\346\236\204\345\233\276.png" "b/docs/zh/server/maintenance/gala/figures/gopher\350\275\257\344\273\266\346\236\266\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..f151965a21d11dd7a3e215cc4ef23d70d059f4b1 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/gopher\350\275\257\344\273\266\346\236\266\346\236\204\345\233\276.png" differ diff --git a/docs/zh/server/maintenance/gala/figures/group.PNG b/docs/zh/server/maintenance/gala/figures/group.PNG new file mode 100644 index 0000000000000000000000000000000000000000..584fd1f7195694a3419482cace2a71fa1cd9a3ec Binary files /dev/null and b/docs/zh/server/maintenance/gala/figures/group.PNG differ diff --git a/docs/zh/server/maintenance/gala/figures/icon-note.gif b/docs/zh/server/maintenance/gala/figures/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/server/maintenance/gala/figures/icon-note.gif differ diff --git a/docs/zh/server/maintenance/gala/figures/shanchupeizhi.png b/docs/zh/server/maintenance/gala/figures/shanchupeizhi.png new file mode 100644 index 0000000000000000000000000000000000000000..cfea2eb44f7b8aa809404b8b49b4bd2e24172568 Binary files /dev/null and b/docs/zh/server/maintenance/gala/figures/shanchupeizhi.png differ diff --git "a/docs/zh/server/maintenance/gala/figures/spider\346\213\223\346\211\221\345\205\263\347\263\273\345\233\276.png" "b/docs/zh/server/maintenance/gala/figures/spider\346\213\223\346\211\221\345\205\263\347\263\273\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..5823a116f384801e1197350f151b4d04ef519ac4 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/spider\346\213\223\346\211\221\345\205\263\347\263\273\345\233\276.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/syscare\347\203\255\350\241\245\344\270\201\347\212\266\346\200\201\345\233\276.png" "b/docs/zh/server/maintenance/gala/figures/syscare\347\203\255\350\241\245\344\270\201\347\212\266\346\200\201\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..bbd0600fc5c913198dfe1e1bf2aba9c652576a98 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/syscare\347\203\255\350\241\245\344\270\201\347\212\266\346\200\201\345\233\276.png" differ diff --git a/docs/zh/server/maintenance/gala/figures/tianjianode.png b/docs/zh/server/maintenance/gala/figures/tianjianode.png new file mode 100644 index 0000000000000000000000000000000000000000..d68f5e12a62548f2ec59374bda9ab07f43b8b5cb Binary files /dev/null and b/docs/zh/server/maintenance/gala/figures/tianjianode.png differ diff --git a/docs/zh/server/maintenance/gala/figures/xinzengpeizhi.png b/docs/zh/server/maintenance/gala/figures/xinzengpeizhi.png new file mode 100644 index 0000000000000000000000000000000000000000..18d71c2e099c19b5d28848eec6a8d11f29ccee27 Binary files /dev/null and b/docs/zh/server/maintenance/gala/figures/xinzengpeizhi.png differ diff --git a/docs/zh/server/maintenance/gala/figures/zhuangtaichaxun.png b/docs/zh/server/maintenance/gala/figures/zhuangtaichaxun.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d0b3294bf6e0eeec50a2c2f8c5059bdc256376 Binary files /dev/null and b/docs/zh/server/maintenance/gala/figures/zhuangtaichaxun.png differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/.DS_Store" "b/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/.DS_Store" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/app\350\257\246\346\203\205.jpg" "b/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/app\350\257\246\346\203\205.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..bd179be46c9e711d7148ee44dc56f4a7a02f56bf Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/app\350\257\246\346\203\205.jpg" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\344\277\256\346\224\271\346\250\241\345\236\213.png" "b/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\344\277\256\346\224\271\346\250\241\345\236\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..23ff4e5fddb87ac157b1002a70c47d9b4c76b873 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\344\277\256\346\224\271\346\250\241\345\236\213.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\210\233\345\273\272\345\267\245\344\275\234\346\265\201.jpg" "b/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\210\233\345\273\272\345\267\245\344\275\234\346\265\201.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..1a2b45e860914a1ac0cfb6908b02fb5cad4cbd60 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\210\233\345\273\272\345\267\245\344\275\234\346\265\201.jpg" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\221\212\350\255\246.jpg" "b/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\221\212\350\255\246.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..89ac88e154275d4be8179d773e7093f2357f425f Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\221\212\350\255\246.jpg" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\221\212\350\255\246\347\241\256\350\256\244.jpg" "b/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\221\212\350\255\246\347\241\256\350\256\244.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..57844f772853c541f7a1328b007a9b6ae4d5caf0 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\221\212\350\255\246\347\241\256\350\256\244.jpg" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\221\212\350\255\246\350\257\246\346\203\205.jpg" "b/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\221\212\350\255\246\350\257\246\346\203\205.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..5b4830b47897a0d51be28238a879a70b1de9ca3b Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\221\212\350\255\246\350\257\246\346\203\205.jpg" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\267\245\344\275\234\346\265\201.jpg" "b/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\267\245\344\275\234\346\265\201.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..17fb5b13034e1fc5276c68583fed1952415b0b5f Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\267\245\344\275\234\346\265\201.jpg" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\267\245\344\275\234\346\265\201\350\257\246\346\203\205.jpg" "b/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\267\245\344\275\234\346\265\201\350\257\246\346\203\205.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..458e023847bb2ad1f198f5a2dd1691748038137e Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\267\245\344\275\234\346\265\201\350\257\246\346\203\205.jpg" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\272\224\347\224\250.png" "b/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\272\224\347\224\250.png" new file mode 100644 index 0000000000000000000000000000000000000000..aa34bb909ee7c86a95126c13fa532ce93410a931 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\272\224\347\224\250.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/.DS_Store" "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/.DS_Store" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/CVE\350\257\246\346\203\205\347\225\214\351\235\242.png" "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/CVE\350\257\246\346\203\205\347\225\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..05859540cb88e11bd8dedaeb8e03253254574c40 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/CVE\350\257\246\346\203\205\347\225\214\351\235\242.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/cve\345\210\227\350\241\250.png" "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/cve\345\210\227\350\241\250.png" new file mode 100644 index 0000000000000000000000000000000000000000..f556e0e7e3c4096a89597cb08ba29133375aab07 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/cve\345\210\227\350\241\250.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\270\212\344\274\240\345\256\211\345\205\250\345\205\254\345\221\212.png" "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\270\212\344\274\240\345\256\211\345\205\250\345\205\254\345\221\212.png" new file mode 100644 index 0000000000000000000000000000000000000000..801c7f917d717499c86708b419101be3773348ac Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\270\212\344\274\240\345\256\211\345\205\250\345\205\254\345\221\212.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\270\273\346\234\272\345\210\227\350\241\250\347\225\214\351\235\242.png" "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\270\273\346\234\272\345\210\227\350\241\250\347\225\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..0719bb8c0b71d0503d5d3a7d8e9e83da71169c64 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\270\273\346\234\272\345\210\227\350\241\250\347\225\214\351\235\242.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\270\273\346\234\272\350\257\246\346\203\205.png" "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\270\273\346\234\272\350\257\246\346\203\205.png" new file mode 100644 index 0000000000000000000000000000000000000000..21c9468ce4378bcadf537e543c756cf7a1347499 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\270\273\346\234\272\350\257\246\346\203\205.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\273\273\345\212\241\345\210\227\350\241\250.png" "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\273\273\345\212\241\345\210\227\350\241\250.png" new file mode 100644 index 0000000000000000000000000000000000000000..9cfd080d1a658544c559e83429a14b35dc931fc6 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\273\273\345\212\241\345\210\227\350\241\250.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\273\273\345\212\241\350\257\246\346\203\205.png" "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\273\273\345\212\241\350\257\246\346\203\205.png" new file mode 100644 index 0000000000000000000000000000000000000000..7ca43b0a82b7c4dd3e43a5e46cf3b4a79d55d033 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\273\273\345\212\241\350\257\246\346\203\205.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\277\256\345\244\215\344\273\273\345\212\241\346\212\245\345\221\212.png" "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\277\256\345\244\215\344\273\273\345\212\241\346\212\245\345\221\212.png" new file mode 100644 index 0000000000000000000000000000000000000000..b9acfbcd7d8e3b2b551c8bb9700142dfba681afe Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\277\256\345\244\215\344\273\273\345\212\241\346\212\245\345\221\212.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\345\233\236\346\273\232\344\273\273\345\212\241\350\257\246\346\203\205.png" "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\345\233\236\346\273\232\344\273\273\345\212\241\350\257\246\346\203\205.png" new file mode 100644 index 0000000000000000000000000000000000000000..6bc8cc31e05d06dbd5ee4c0f62f281683db048da Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\345\233\236\346\273\232\344\273\273\345\212\241\350\257\246\346\203\205.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\346\267\273\345\212\240repo\346\272\220.png" "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\346\267\273\345\212\240repo\346\272\220.png" new file mode 100644 index 0000000000000000000000000000000000000000..3bf992f586f7fb4d87bc01cc29f961755a315c9d Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\346\267\273\345\212\240repo\346\272\220.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\346\274\217\346\264\236\346\211\253\346\217\217.png" "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\346\274\217\346\264\236\346\211\253\346\217\217.png" new file mode 100644 index 0000000000000000000000000000000000000000..f73ccaf984e8ab55f8b78f7da5a570ce43685221 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\346\274\217\346\264\236\346\211\253\346\217\217.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\347\224\237\346\210\220\344\277\256\345\244\215\344\273\273\345\212\241.png" "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\347\224\237\346\210\220\344\277\256\345\244\215\344\273\273\345\212\241.png" new file mode 100644 index 0000000000000000000000000000000000000000..b183298d96b8ced8954852540c891310aeda05be Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\347\224\237\346\210\220\344\277\256\345\244\215\344\273\273\345\212\241.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\347\224\237\346\210\220\345\233\236\346\273\232\344\273\273\345\212\241.png" "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\347\224\237\346\210\220\345\233\236\346\273\232\344\273\273\345\212\241.png" new file mode 100644 index 0000000000000000000000000000000000000000..c8aa813bc228326b3e8db19e303e03507873a893 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\347\224\237\346\210\220\345\233\236\346\273\232\344\273\273\345\212\241.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\347\224\237\346\210\220\347\203\255\350\241\245\344\270\201\347\247\273\351\231\244\344\273\273\345\212\241.png" "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\347\224\237\346\210\220\347\203\255\350\241\245\344\270\201\347\247\273\351\231\244\344\273\273\345\212\241.png" new file mode 100644 index 0000000000000000000000000000000000000000..8ccebe84f60b21737414b2cb3f972472114a40c5 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\347\224\237\346\210\220\347\203\255\350\241\245\344\270\201\347\247\273\351\231\244\344\273\273\345\212\241.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\350\256\276\347\275\256repo\346\272\220.png" "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\350\256\276\347\275\256repo\346\272\220.png" new file mode 100644 index 0000000000000000000000000000000000000000..619cc6d42b646df3d9c4e601f40a6ec452712668 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\350\256\276\347\275\256repo\346\272\220.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\351\202\256\344\273\266\351\200\232\347\237\245.png" "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\351\202\256\344\273\266\351\200\232\347\237\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..34b1d4095b8c017f3c66ebfb3c44d114bc8d6ca7 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\351\202\256\344\273\266\351\200\232\347\237\245.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\347\203\255\350\241\245\344\270\201\347\212\266\346\200\201\345\233\276.png" "b/docs/zh/server/maintenance/gala/figures/\347\203\255\350\241\245\344\270\201\347\212\266\346\200\201\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..f5f8a3a95705145787e7aaf9c8d1fff404892240 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\347\203\255\350\241\245\344\270\201\347\212\266\346\200\201\345\233\276.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/.DS_Store" "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/.DS_Store" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\345\210\227\350\241\250.png" "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\345\210\227\350\241\250.png" new file mode 100644 index 0000000000000000000000000000000000000000..b8f0a87e00d73961907167fcbe43d82b60caf445 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\345\210\227\350\241\250.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\256\241\347\220\206-\346\267\273\345\212\240.png" "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\256\241\347\220\206-\346\267\273\345\212\240.png" new file mode 100644 index 0000000000000000000000000000000000000000..ce25657a0627e9dfc3dc9ebf323e086103c2ecdf Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\256\241\347\220\206-\346\267\273\345\212\240.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\273\204\345\206\205\344\270\273\346\234\272\346\237\245\347\234\213.png" "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\273\204\345\206\205\344\270\273\346\234\272\346\237\245\347\234\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..2f2e2e67a98a16e1ad464c794a8ef45ebb229d7f Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\273\204\345\206\205\344\270\273\346\234\272\346\237\245\347\234\213.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\273\204\347\256\241\347\220\206\345\210\227\350\241\250.png" "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\273\204\347\256\241\347\220\206\345\210\227\350\241\250.png" new file mode 100644 index 0000000000000000000000000000000000000000..94c9b65719050b79d2cdb9d1e8f67c459925cda7 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\273\204\347\256\241\347\220\206\345\210\227\350\241\250.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\274\226\350\276\221\347\225\214\351\235\242.png" "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\274\226\350\276\221\347\225\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..7e4f0da4e88da6f18495a4fb23bd400d0da0a8da Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\274\226\350\276\221\347\225\214\351\235\242.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\350\257\246\346\203\205.png" "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\350\257\246\346\203\205.png" new file mode 100644 index 0000000000000000000000000000000000000000..1ee8f7bb2456efe6318074f46f5008da355a2cb1 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\350\257\246\346\203\205.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\345\267\245\344\275\234\345\217\260.png" "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\345\267\245\344\275\234\345\217\260.png" new file mode 100644 index 0000000000000000000000000000000000000000..a916eebf306cca9ffa54f733143a0ac2c44313a4 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\345\267\245\344\275\234\345\217\260.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\211\271\351\207\217\346\267\273\345\212\240-\346\226\207\344\273\266\350\247\243\346\236\220.png" "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\211\271\351\207\217\346\267\273\345\212\240-\346\226\207\344\273\266\350\247\243\346\236\220.png" new file mode 100644 index 0000000000000000000000000000000000000000..31684136510cfe6248adf9b8cd086140ab5b26ef Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\211\271\351\207\217\346\267\273\345\212\240-\346\226\207\344\273\266\350\247\243\346\236\220.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\211\271\351\207\217\346\267\273\345\212\240-\346\267\273\345\212\240\347\273\223\346\236\234.png" "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\211\271\351\207\217\346\267\273\345\212\240-\346\267\273\345\212\240\347\273\223\346\236\234.png" new file mode 100644 index 0000000000000000000000000000000000000000..df3991eb16d32d9f2296fbb36873ff26bc82fa18 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\211\271\351\207\217\346\267\273\345\212\240-\346\267\273\345\212\240\347\273\223\346\236\234.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\211\271\351\207\217\346\267\273\345\212\240\344\270\273\346\234\272.png" "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\211\271\351\207\217\346\267\273\345\212\240\344\270\273\346\234\272.png" new file mode 100644 index 0000000000000000000000000000000000000000..c83daeeb5f8a4d9ab4f40e3debbe7a96f427ce74 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\211\271\351\207\217\346\267\273\345\212\240\344\270\273\346\234\272.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\214\207\346\240\207\346\263\242\345\275\242.png" "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\214\207\346\240\207\346\263\242\345\275\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..5ab697c8f9c292097356a26140750f7f615c5d81 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\214\207\346\240\207\346\263\242\345\275\242.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\217\222\344\273\266\345\274\200\345\205\263.png" "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\217\222\344\273\266\345\274\200\345\205\263.png" new file mode 100644 index 0000000000000000000000000000000000000000..4bde1fd7330491fda6f4ed73a2be2e8c0bfabc8d Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\217\222\344\273\266\345\274\200\345\205\263.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\267\273\345\212\240\344\270\273\346\234\272\347\273\204.png" "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\267\273\345\212\240\344\270\273\346\234\272\347\273\204.png" new file mode 100644 index 0000000000000000000000000000000000000000..2890e4934ba903324ea134d3ebee85307665270e Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\267\273\345\212\240\344\270\273\346\234\272\347\273\204.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\347\231\273\351\231\206\347\225\214\351\235\242.png" "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\347\231\273\351\231\206\347\225\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..24f94c0a9ff05897b01786aa4bc8adfe4bc8db09 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\347\231\273\351\231\206\347\225\214\351\235\242.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/chakanyuqi.png" "b/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/chakanyuqi.png" new file mode 100644 index 0000000000000000000000000000000000000000..bbead6a91468d5dee570cfdc66faf9a4ab155d7c Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/chakanyuqi.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/chaxunshijipeizhi.png" "b/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/chaxunshijipeizhi.png" new file mode 100644 index 0000000000000000000000000000000000000000..d5f6e450fc0e1e246492ca71a6fcd8db572eb469 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/chaxunshijipeizhi.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/chuangjianyewuyu.png" "b/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/chuangjianyewuyu.png" new file mode 100644 index 0000000000000000000000000000000000000000..8849a2fc81dbd14328c6c66c53033164a0b67b52 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/chuangjianyewuyu.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/conf_file_trace.png" "b/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/conf_file_trace.png" new file mode 100644 index 0000000000000000000000000000000000000000..e1e518157f8def332adfa5516b37fdb89768499c Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/conf_file_trace.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/peizhitongbu.png" "b/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/peizhitongbu.png" new file mode 100644 index 0000000000000000000000000000000000000000..c8c229bf41b27f1fe6629106957fd5e47851096d Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/peizhitongbu.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/shanchupeizhi.png" "b/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/shanchupeizhi.png" new file mode 100644 index 0000000000000000000000000000000000000000..cfea2eb44f7b8aa809404b8b49b4bd2e24172568 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/shanchupeizhi.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/tianjianode.png" "b/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/tianjianode.png" new file mode 100644 index 0000000000000000000000000000000000000000..d68f5e12a62548f2ec59374bda9ab07f43b8b5cb Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/tianjianode.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/xinzengpeizhi.png" "b/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/xinzengpeizhi.png" new file mode 100644 index 0000000000000000000000000000000000000000..18d71c2e099c19b5d28848eec6a8d11f29ccee27 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/xinzengpeizhi.png" differ diff --git "a/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/zhuangtaichaxun.png" "b/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/zhuangtaichaxun.png" new file mode 100644 index 0000000000000000000000000000000000000000..a3d0b3294bf6e0eeec50a2c2f8c5059bdc256376 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/figures/\351\205\215\347\275\256\346\272\257\346\272\220/zhuangtaichaxun.png" differ diff --git a/docs/zh/server/maintenance/gala/image/45515A7F-0EC2-45AA-9B58-AB92DE9B0979.png b/docs/zh/server/maintenance/gala/image/45515A7F-0EC2-45AA-9B58-AB92DE9B0979.png new file mode 100644 index 0000000000000000000000000000000000000000..c810b26ad0c052960dfdf4bfd78e9224ce465318 Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/45515A7F-0EC2-45AA-9B58-AB92DE9B0979.png differ diff --git "a/docs/zh/server/maintenance/gala/image/ACC\347\232\204hotpatchmetadata\346\226\207\344\273\266\347\244\272\344\276\213.png" "b/docs/zh/server/maintenance/gala/image/ACC\347\232\204hotpatchmetadata\346\226\207\344\273\266\347\244\272\344\276\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..790df6fd5781ca008124cff14635165a71abf126 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/image/ACC\347\232\204hotpatchmetadata\346\226\207\344\273\266\347\244\272\344\276\213.png" differ diff --git a/docs/zh/server/maintenance/gala/image/E574E637-0BF3-4F3B-BAE6-04ECBD09D151.png b/docs/zh/server/maintenance/gala/image/E574E637-0BF3-4F3B-BAE6-04ECBD09D151.png new file mode 100644 index 0000000000000000000000000000000000000000..6ef6ef9bd126e6c2007389065bbecc1cfdd97f5b Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/E574E637-0BF3-4F3B-BAE6-04ECBD09D151.png differ diff --git a/docs/zh/server/maintenance/gala/image/EF5E0132-6E5C-4DD1-8CB5-73035278E233.png b/docs/zh/server/maintenance/gala/image/EF5E0132-6E5C-4DD1-8CB5-73035278E233.png new file mode 100644 index 0000000000000000000000000000000000000000..a2a29d2e1b62f7df409e87d03f2525ba8355f77e Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/EF5E0132-6E5C-4DD1-8CB5-73035278E233.png differ diff --git a/docs/zh/server/maintenance/gala/image/hotpatch-fix-pr.png b/docs/zh/server/maintenance/gala/image/hotpatch-fix-pr.png new file mode 100644 index 0000000000000000000000000000000000000000..d10fd1ec44416f6b59cfd21cca8721d001f7ed19 Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/hotpatch-fix-pr.png differ diff --git a/docs/zh/server/maintenance/gala/image/hotpatch-pr-1.png b/docs/zh/server/maintenance/gala/image/hotpatch-pr-1.png new file mode 100644 index 0000000000000000000000000000000000000000..1dc5269655c51b355d3cd89b71c6688fbb0d8d5d Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/hotpatch-pr-1.png differ diff --git a/docs/zh/server/maintenance/gala/image/hotpatch-pr-success.png b/docs/zh/server/maintenance/gala/image/hotpatch-pr-success.png new file mode 100644 index 0000000000000000000000000000000000000000..48ea807e03c0f8e6efbceacbbc583c6ac3b3c865 Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/hotpatch-pr-success.png differ diff --git a/docs/zh/server/maintenance/gala/image/hotpatch-pr.png b/docs/zh/server/maintenance/gala/image/hotpatch-pr.png new file mode 100644 index 0000000000000000000000000000000000000000..159fd2b7bc76e002554722d1f0f12070a2bd2e19 Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/hotpatch-pr.png differ diff --git a/docs/zh/server/maintenance/gala/image/hotpatch-xml.PNG b/docs/zh/server/maintenance/gala/image/hotpatch-xml.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f1916620d3cc7b1c29059bcc5513fdc7ee94127b Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/hotpatch-xml.PNG differ diff --git a/docs/zh/server/maintenance/gala/image/image-20230525193235084.png b/docs/zh/server/maintenance/gala/image/image-20230525193235084.png new file mode 100644 index 0000000000000000000000000000000000000000..9850a11a0dcfeed69099635f3147a2230fe6faa5 Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/image-20230525193235084.png differ diff --git a/docs/zh/server/maintenance/gala/image/image-20230525193254541.png b/docs/zh/server/maintenance/gala/image/image-20230525193254541.png new file mode 100644 index 0000000000000000000000000000000000000000..73bfbaa15a2584611ac06839965eca2869b89991 Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/image-20230525193254541.png differ diff --git a/docs/zh/server/maintenance/gala/image/image-20230527165206707.png b/docs/zh/server/maintenance/gala/image/image-20230527165206707.png new file mode 100644 index 0000000000000000000000000000000000000000..7d7f0992fc048777340678974d38b3c193269385 Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/image-20230527165206707.png differ diff --git a/docs/zh/server/maintenance/gala/image/image-20230527165700642.png b/docs/zh/server/maintenance/gala/image/image-20230527165700642.png new file mode 100644 index 0000000000000000000000000000000000000000..2c4500cb54ba0225704020160d72b4aaf265d3f7 Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/image-20230527165700642.png differ diff --git a/docs/zh/server/maintenance/gala/image/image-20230527165823568.png b/docs/zh/server/maintenance/gala/image/image-20230527165823568.png new file mode 100644 index 0000000000000000000000000000000000000000..7b26b545bc7d37f09eca7736f30d2eb3a6062890 Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/image-20230527165823568.png differ diff --git a/docs/zh/server/maintenance/gala/image/image-20230527165845170.png b/docs/zh/server/maintenance/gala/image/image-20230527165845170.png new file mode 100644 index 0000000000000000000000000000000000000000..9719210a961a18b639d56cbf88b8586370930b4c Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/image-20230527165845170.png differ diff --git a/docs/zh/server/maintenance/gala/image/image-20230527165922876.png b/docs/zh/server/maintenance/gala/image/image-20230527165922876.png new file mode 100644 index 0000000000000000000000000000000000000000..56ff3380d12b9c1002881eca98e32a49cc292b9a Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/image-20230527165922876.png differ diff --git a/docs/zh/server/maintenance/gala/image/image-20230527170343909.png b/docs/zh/server/maintenance/gala/image/image-20230527170343909.png new file mode 100644 index 0000000000000000000000000000000000000000..57c343360f278b2f67b77d37114a1f567a3ce63a Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/image-20230527170343909.png differ diff --git a/docs/zh/server/maintenance/gala/image/image-20230607161425282.png b/docs/zh/server/maintenance/gala/image/image-20230607161425282.png new file mode 100644 index 0000000000000000000000000000000000000000..d2fbca2a23e80edff661d05065987ede1cc7e8af Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/image-20230607161425282.png differ diff --git a/docs/zh/server/maintenance/gala/image/image-20230607163358749.png b/docs/zh/server/maintenance/gala/image/image-20230607163358749.png new file mode 100644 index 0000000000000000000000000000000000000000..191c36b65058ce8dea6bb2f1fe10a85b0177f2cf Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/image-20230607163358749.png differ diff --git a/docs/zh/server/maintenance/gala/image/image-20230607172021782.png b/docs/zh/server/maintenance/gala/image/image-20230607172021782.png new file mode 100644 index 0000000000000000000000000000000000000000..d25c3ebfb1aefe5d8f36b0b153afa64efd88dd63 Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/image-20230607172021782.png differ diff --git a/docs/zh/server/maintenance/gala/image/image-20230612113428096.png b/docs/zh/server/maintenance/gala/image/image-20230612113428096.png new file mode 100644 index 0000000000000000000000000000000000000000..48b59b5e6cb4043703de96066c8d67e85eed4f16 Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/image-20230612113428096.png differ diff --git a/docs/zh/server/maintenance/gala/image/image-20230612113626330.png b/docs/zh/server/maintenance/gala/image/image-20230612113626330.png new file mode 100644 index 0000000000000000000000000000000000000000..9d3621022deb02b267c3eb29315a7fe33c1f095e Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/image-20230612113626330.png differ diff --git a/docs/zh/server/maintenance/gala/image/image-20230908163402743.png b/docs/zh/server/maintenance/gala/image/image-20230908163402743.png new file mode 100644 index 0000000000000000000000000000000000000000..c17667178689c6384a039bf0f8025ea7eb360236 Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/image-20230908163402743.png differ diff --git a/docs/zh/server/maintenance/gala/image/image-20230908163914778.png b/docs/zh/server/maintenance/gala/image/image-20230908163914778.png new file mode 100644 index 0000000000000000000000000000000000000000..a06c7e49b32286ceec9ff0e9a08f73a76c179daf Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/image-20230908163914778.png differ diff --git a/docs/zh/server/maintenance/gala/image/image-20230908164216528.png b/docs/zh/server/maintenance/gala/image/image-20230908164216528.png new file mode 100644 index 0000000000000000000000000000000000000000..15fbc694603837095244451d4f5d7e7af70789be Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/image-20230908164216528.png differ diff --git "a/docs/zh/server/maintenance/gala/image/openEuler\344\273\223\350\257\204\350\256\272.png" "b/docs/zh/server/maintenance/gala/image/openEuler\344\273\223\350\257\204\350\256\272.png" new file mode 100644 index 0000000000000000000000000000000000000000..29223cbddc39f8fcc0b725a3ed83495709e05f78 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/image/openEuler\344\273\223\350\257\204\350\256\272.png" differ diff --git a/docs/zh/server/maintenance/gala/image/patch-file.PNG b/docs/zh/server/maintenance/gala/image/patch-file.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f587a48c2be945beaadecf44a6d711da14be50c6 Binary files /dev/null and b/docs/zh/server/maintenance/gala/image/patch-file.PNG differ diff --git "a/docs/zh/server/maintenance/gala/image/src-openEuler\344\273\223\350\257\204\350\256\272.png" "b/docs/zh/server/maintenance/gala/image/src-openEuler\344\273\223\350\257\204\350\256\272.png" new file mode 100644 index 0000000000000000000000000000000000000000..ba3a44433117f0a23fc6048cd3b093fe6af7250c Binary files /dev/null and "b/docs/zh/server/maintenance/gala/image/src-openEuler\344\273\223\350\257\204\350\256\272.png" differ diff --git "a/docs/zh/server/maintenance/gala/image/\345\220\214\346\204\217\345\220\210\345\205\245pr.png" "b/docs/zh/server/maintenance/gala/image/\345\220\214\346\204\217\345\220\210\345\205\245pr.png" new file mode 100644 index 0000000000000000000000000000000000000000..2c2e2dd78242f538c21809614e917bef769256ba Binary files /dev/null and "b/docs/zh/server/maintenance/gala/image/\345\220\214\346\204\217\345\220\210\345\205\245pr.png" differ diff --git "a/docs/zh/server/maintenance/gala/image/\345\220\257\345\212\250\347\203\255\350\241\245\344\270\201\345\267\245\347\250\213\346\265\201\347\250\213.png" "b/docs/zh/server/maintenance/gala/image/\345\220\257\345\212\250\347\203\255\350\241\245\344\270\201\345\267\245\347\250\213\346\265\201\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..2914c3eef44bb3d3528686b44157a5f9276da9c6 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/image/\345\220\257\345\212\250\347\203\255\350\241\245\344\270\201\345\267\245\347\250\213\346\265\201\347\250\213.png" differ diff --git "a/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201issue\345\210\235\345\247\213\345\206\205\345\256\271.png" "b/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201issue\345\210\235\345\247\213\345\206\205\345\256\271.png" new file mode 100644 index 0000000000000000000000000000000000000000..044be7ccd001ddc2bb69ba53b34f3c2a72511f39 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201issue\345\210\235\345\247\213\345\206\205\345\256\271.png" differ diff --git "a/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201issue\345\233\236\345\241\253.png" "b/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201issue\345\233\236\345\241\253.png" new file mode 100644 index 0000000000000000000000000000000000000000..779c2fddcb02968358492e70f6aa9261be26fe48 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201issue\345\233\236\345\241\253.png" differ diff --git "a/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201issue\351\223\276\346\216\245\345\222\214pr\351\223\276\346\216\245.png" "b/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201issue\351\223\276\346\216\245\345\222\214pr\351\223\276\346\216\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..d97fbd1fbb5a20b97ec88989f3c7a0776bb9cdc0 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201issue\351\223\276\346\216\245\345\222\214pr\351\223\276\346\216\245.png" differ diff --git "a/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\345\210\266\344\275\234\345\244\261\350\264\245.png" "b/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\345\210\266\344\275\234\345\244\261\350\264\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..3acf2e93550e4962d0a5f927fd6fd0460a64b889 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\345\210\266\344\275\234\345\244\261\350\264\245.png" differ diff --git "a/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\345\210\266\344\275\234\347\273\223\346\236\234.png" "b/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\345\210\266\344\275\234\347\273\223\346\236\234.png" new file mode 100644 index 0000000000000000000000000000000000000000..5b167be8a40762823223ccdd700d5b62f7e1aa38 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\345\210\266\344\275\234\347\273\223\346\236\234.png" differ diff --git "a/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\347\232\204chroot\347\216\257\345\242\203.png" "b/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\347\232\204chroot\347\216\257\345\242\203.png" new file mode 100644 index 0000000000000000000000000000000000000000..a96a4d229b54b301bbf4e7f7a2c41ea1e9faf43d Binary files /dev/null and "b/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\347\232\204chroot\347\216\257\345\242\203.png" differ diff --git "a/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\350\247\246\345\217\221\346\265\201\347\250\213.png" "b/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\350\247\246\345\217\221\346\265\201\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..d77335d0097f7504f0c37dd8aca1691d9f1f0a23 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\350\247\246\345\217\221\346\265\201\347\250\213.png" differ diff --git "a/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201\344\273\223\346\217\220pr\350\257\264\346\230\216.png" "b/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201\344\273\223\346\217\220pr\350\257\264\346\230\216.png" new file mode 100644 index 0000000000000000000000000000000000000000..aa74c2859588ff2a49d6341dd2a2ac6fe2049eac Binary files /dev/null and "b/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201\344\273\223\346\217\220pr\350\257\264\346\230\216.png" differ diff --git "a/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201\350\207\252\351\252\214\344\270\213\350\275\275\351\223\276\346\216\245.png" "b/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201\350\207\252\351\252\214\344\270\213\350\275\275\351\223\276\346\216\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..404ac733fae66bda9ceac2d6c2fa18897c58dc70 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201\350\207\252\351\252\214\344\270\213\350\275\275\351\223\276\346\216\245.png" differ diff --git "a/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201\350\207\252\351\252\214\345\214\205\344\270\213\350\275\275\351\223\276\346\216\245.png" "b/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201\350\207\252\351\252\214\345\214\205\344\270\213\350\275\275\351\223\276\346\216\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..6d32e8874e8e5e7f7fb5c350fca0063da9a77176 Binary files /dev/null and "b/docs/zh/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201\350\207\252\351\252\214\345\214\205\344\270\213\350\275\275\351\223\276\346\216\245.png" differ diff --git a/docs/zh/server/maintenance/gala/using_gala_anteater.md b/docs/zh/server/maintenance/gala/using_gala_anteater.md new file mode 100644 index 0000000000000000000000000000000000000000..df8ffc1f37b5e63b851184076940ceba41e72ec3 --- /dev/null +++ b/docs/zh/server/maintenance/gala/using_gala_anteater.md @@ -0,0 +1,220 @@ +# gala-anteater使用手册 + +gala-anteater是一款基于AI的操作系统异常检测平台。主要提供时序数据预处理、异常点发现、异常上报等功能。基于线下预训练、线上模型的增量学习与模型更新,能够很好地适用于多维多模态数据故障诊断。 + +本文主要介绍如何部署和使用gala-anteater服务,检测训练集群中的慢节点/慢卡。 + +## 安装 + +挂载repo源: + +```basic +[everything] +name=everything +baseurl=http://121.36.84.172/dailybuild/EBS-openEuler-22.03-LTS-SP4/EBS-openEuler-22.03-LTS-SP4/everything/$basearch/ +enabled=1 +gpgcheck=0 +priority=1 + +[EPOL] +name=EPOL +baseurl=http://repo.openeuler.org/EBS-openEuler-22.03-LTS-SP4/EPOL/main/$basearch/ +enabled=1 +gpgcheck=0 +priority=1 + +``` + +安装gala-anteater: + +```bash +yum install gala-anteater +``` + +## 配置 + +>![](./figures/icon-note.gif)**说明:** +> +>gala-anteater采用配置的config文件设置参数启动,配置文件位置: /etc/gala-anteater/config/gala-anteater.yaml。 + +### 配置文件默认参数 + +```yaml +Global: + data_source: "prometheus" + +Arangodb: + url: "http://localhost:8529" + db_name: "spider" + +Kafka: + server: "192.168.122.100" + port: "9092" + model_topic: "gala_anteater_hybrid_model" + rca_topic: "gala_cause_inference" + meta_topic: "gala_gopher_metadata" + group_id: "gala_anteater_kafka" + # auth_type: plaintext/sasl_plaintext, please set "" for no auth + auth_type: "" + username: "" + password: "" + +Prometheus: + server: "localhost" + port: "9090" + steps: "5" + +Aom: + base_url: "" + project_id: "" + auth_type: "token" + auth_info: + iam_server: "" + iam_domain: "" + iam_user_name: "" + iam_password: "" + ssl_verify: 0 + +Schedule: + duration: 1 + +Suppression: + interval: 10 +``` + +| 参数 | 含义 | 默认值 | +| ----------- | ------------------------------------------------------------ | ---------------------------- | +| Global | 全局配置 | 字典类型 | +| data_source | 设置数据来源 | "prometheus" | +| Arangodb | Arangodb图数据库配置信息 | 字典类型 | +| url | 图数据库Arangodb的ip地址 | "http://localhost:8529" | +| db_name | 图数据库名 | "spider" | +| Kafka | kafka配置信息 | 字典类型 | +| server | Kafka Server的ip地址,根据安装节点ip配置 | "192.168.122.100" | +| port | Kafka Server的port,如:9092 | "9092" | +| model_topic | 故障检测结果上报topic | "gala_anteater_hybrid_model" | +| rca_topic | 根因定位结果上报topic | "gala_cause_inference" | +| meta_topic | gopher采集指标数据topic | "gala_gopher_metadata" | +| group_id | kafka设置组名 | "gala_anteater_kafka" | +| Prometheus | 数据源prometheus配置信息 | 字典类型 | +| server | Prometheus Server的ip地址,根据安装节点ip配置 | "localhost" | +| port | Prometheus Server的port,如:9090 | "9090" | +| steps | 指标采样间隔 | "5" | +| Schedule | 循环调度配置信息 | 字典类型 | +| duration | 异常检测模型执行频率(单位:分),每x分钟,检测一次 | 1 | +| Suppression | 告警抑制配置信息 | 字典类型 | +| interval | 告警抑制间隔(单位: 分),表示距离上一次告警x分钟内相同告警过滤 | 10 | + +## 启动 + +执行如下命令启动gala-anteater + +```shell +systemctl start gala-anteater +``` + +>![](./figures/icon-note.gif)**说明:** +> +>gala-anteater支持启动一个进程实例,启动多个会导致内存占用过大,日志混乱。 + +### 查询gala-anteater服务慢节点检测执行状态 + +若日志显示如下内容,说明慢节点正常运行,启动日志也会保存到当前运行目录下`/var/log/gala-anteater/gala-anteater.log`文件中。 + +```log +2024-12-02 16:25:20,727 - INFO - anteater - Groups-0, metric: npu_chip_info_hbm_used_memory, start detection. +2024-12-02 16:25:20,735 - INFO - anteater - Metric-npu_chip_info_hbm_used_memory single group has data 8. ranks: [0, 1, 2, 3, 4, 5, 6, 7] +2024-12-02 16:25:20,739 - INFO - anteater - work on npu_chip_info_hbm_used_memory, slow_node_detection start. +2024-12-02 16:25:21,128 - INFO - anteater - time_node_compare result: []. +2024-12-02 16:25:21,137 - INFO - anteater - dnscan labels: [-1 0 0 0 -1 0 -1 -1] +2024-12-02 16:25:21,139 - INFO - anteater - dnscan labels: [-1 0 0 0 -1 0 -1 -1] +2024-12-02 16:25:21,141 - INFO - anteater - dnscan labels: [-1 0 0 0 -1 0 -1 -1] +2024-12-02 16:25:21,142 - INFO - anteater - space_nodes_compare result: []. +2024-12-02 16:25:21,142 - INFO - anteater - Time and space aggregated result: []. +2024-12-02 16:25:21,144 - INFO - anteater - work on npu_chip_info_hbm_used_memory, slow_node_detection end. + +2024-12-02 16:25:21,144 - INFO - anteater - Groups-0, metric: npu_chip_info_aicore_current_freq, start detection. +2024-12-02 16:25:21,153 - INFO - anteater - Metric-npu_chip_info_aicore_current_freq single group has data 8. ranks: [0, 1, 2, 3, 4, 5, 6, 7] +2024-12-02 16:25:21,157 - INFO - anteater - work on npu_chip_info_aicore_current_freq, slow_node_detection start. +2024-12-02 16:25:21,584 - INFO - anteater - time_node_compare result: []. +2024-12-02 16:25:21,592 - INFO - anteater - dnscan labels: [0 0 0 0 0 0 0 0] +2024-12-02 16:25:21,594 - INFO - anteater - dnscan labels: [0 0 0 0 0 0 0 0] +2024-12-02 16:25:21,597 - INFO - anteater - dnscan labels: [0 0 0 0 0 0 0 0] +2024-12-02 16:25:21,598 - INFO - anteater - space_nodes_compare result: []. +2024-12-02 16:25:21,598 - INFO - anteater - Time and space aggregated result: []. +2024-12-02 16:25:21,598 - INFO - anteater - work on npu_chip_info_aicore_current_freq, slow_node_detection end. + +2024-12-02 16:25:21,598 - INFO - anteater - Groups-0, metric: npu_chip_roce_tx_err_pkt_num, start detection. +2024-12-02 16:25:21,607 - INFO - anteater - Metric-npu_chip_roce_tx_err_pkt_num single group has data 8. ranks: [0, 1, 2, 3, 4, 5, 6, 7] +2024-12-02 16:25:21,611 - INFO - anteater - work on npu_chip_roce_tx_err_pkt_num, slow_node_detection start. +2024-12-02 16:25:22,040 - INFO - anteater - time_node_compare result: []. +2024-12-02 16:25:22,040 - INFO - anteater - Skip space nodes compare. +2024-12-02 16:25:22,040 - INFO - anteater - Time and space aggregated result: []. +2024-12-02 16:25:22,040 - INFO - anteater - work on npu_chip_roce_tx_err_pkt_num, slow_node_detection end. + +2024-12-02 16:25:22,041 - INFO - anteater - accomplishment: 1/9 +2024-12-02 16:25:22,041 - INFO - anteater - accomplishment: 2/9 +2024-12-02 16:25:22,041 - INFO - anteater - accomplishment: 3/9 +2024-12-02 16:25:22,041 - INFO - anteater - accomplishment: 4/9 +2024-12-02 16:25:22,042 - INFO - anteater - accomplishment: 5/9 +2024-12-02 16:25:22,042 - INFO - anteater - accomplishment: 6/9 +2024-12-02 16:25:22,042 - INFO - anteater - accomplishment: 7/9 +2024-12-02 16:25:22,042 - INFO - anteater - accomplishment: 8/9 +2024-12-02 16:25:22,042 - INFO - anteater - accomplishment: 9/9 +2024-12-02 16:25:22,043 - INFO - anteater - SlowNodeDetector._execute costs 1.83 seconds! +2024-12-02 16:25:22,043 - INFO - anteater - END! +``` + +## 异常检测输出数据 + +gala-anteater如果检测到异常点,会将结果输出至kafka的model_topic,输出数据格式如下: + +```json +{ + "Timestamp": 1730732076935, + "Attributes": { + "resultCode": 201, + "compute": false, + "network": false, + "storage": true, + "abnormalDetail": [{ + "objectId": "-1", + "serverIp": "96.13.19.31", + "deviceInfo": "96.13.19.31:8888*-1", + "kpiId": "gala_gopher_disk_wspeed_kB", + "methodType": "TIME", + "kpiData": [], + "relaIds": [], + "omittedDevices": [] + }], + "normalDetail": [], + "errorMsg": "" + }, + "SeverityText": "WARN", + "SeverityNumber": 13, + "is_anomaly": true +} +``` + +## 输出字段说明 + +| 输出字段 | 单位 | 含义 | +| -------------- | ------ | ----------------------------------------------------- | +| Timestamp | ms | 检测到故障上报的时刻 | +| resultCode | int | 故障码,201表示故障,200表示无故障 | +| compute | bool | 故障类型是否为计算类型 | +| network | bool | 故障类型是否为网络类型 | +| storage | bool | 故障类型是否为存储类型 | +| abnormalDetail | list | 表示故障的细节 | +| objectId | int | 故障对象id,-1表示节点故障,0-7表示具体的故障卡号 | +| serverIp | string | 故障对象ip | +| deviceInfo | string | 详细的故障信息 | +| kpiId | string | 检测到故障的算法类型,"TIME", "SPACE" | +| kpiData | list | 故障时序数据,需开关打开,默认关闭 | +| relaIds | list | 故障卡关联的正常卡,表示在”SPACE“算法下对比的正常卡号 | +| omittedDevices | list | 忽略显示的卡号 | +| normalDetail | list | 正常卡的时序数据 | +| errorMsg | string | 错误信息 | +| SeverityText | string | 错误类型,表示"WARN", "ERROR" | +| SeverityNumber | int | 错误等级 | +| is_anomaly | bool | 表示是否故障 | diff --git a/docs/zh/server/maintenance/gala/using_gala_gopher.md b/docs/zh/server/maintenance/gala/using_gala_gopher.md new file mode 100644 index 0000000000000000000000000000000000000000..1de5fc59f14e02efdbc6fca490d867e6ff3ed67b --- /dev/null +++ b/docs/zh/server/maintenance/gala/using_gala_gopher.md @@ -0,0 +1,228 @@ +# **gala-gopher使用手册** + +gala-gopher作为数据采集模块提供OS级的监控能力,支持动态加载 /卸载探针,可无侵入式地集成第三方探针,快速扩展监控范围。 + +本章介绍如何部署和使用gala-gopher服务。 + +## 安装 + +挂载repo源: + +```basic +[oe-22.03-lts-SP4-everything] # openEuler 22.03-LTS-SP4 官方发布源 +name=oe-2203-lts-SP4-everything +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/x86_64/ +enabled=1 +gpgcheck=0 +priority=1 + +[oe-22.03-lts-SP4-epol-update] # openEuler 22.03-LTS-SP4 Update 官方发布源 +name=oe-22.03-lts-SP4-epol-update +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/update/main/x86_64/ +enabled=1 +gpgcheck=0 +priority=1 + +[oe-22.03-lts-SP4-epol-main] # openEuler 22.03-LTS-SP4 EPOL 官方发布源 +name=oe-22.03-lts-SP4-epol-main +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/main/x86_64/ +enabled=1 +gpgcheck=0 +priority=1 +``` + +安装gala-gopher: + +```bash +# yum install gala-gopher +``` + +## 配置 + +### 配置介绍 + +gala-gopher配置文件为`/opt/gala-gopher/gala-gopher.conf`,该文件配置项说明如下(省略无需用户配置的部分)。 + +如下配置可以根据需要进行修改: + +- global:gala-gopher全局配置信息。 + - log_file_name:gala-gopher日志文件名。 + - log_level: gala-gopher日志级别(暂未开放此功能)。 + - pin_path:ebpf探针共享map存放路径(建议维持默认配置)。 +- metric:指标数据metrics输出方式配置。 + - out_channel:metrics输出通道,支持配置web_server|kafka,配置为空则输出通道关闭。 + - kafka_topic:若输出通道为kafka,此为topic配置信息。 +- event:异常事件event输出方式配置。 + - out_channel:event输出通道,支持配置logs|kafka,配置为空则输出通道关闭。 + - kafka_topic:若输出通道为kafka,此为topic配置信息。 +- meta:元数据metadata输出方式配置。 + - out_channel:metadata输出通道,支持logs|kafka,配置为空则输出通道关闭。 + - kafka_topic:若输出通道为kafka,此为topic配置信息。 +- imdb:cache缓存规格配置。 + - max_tables_num:最大的cache表个数,/opt/gala-gopher/meta目录下每个meta对应一个表。 + - max_records_num:每张cache表最大记录数,通常每个探针在一个观测周期内产生至少1条观测记录。 + - max_metrics_num:每条观测记录包含的最大的metric指标个数。 + - record_timeout:cache表老化时间,若cache表中某条记录超过该时间未刷新则删除记录,单位为秒。 +- web_server:输出通道web_server配置。 + - port:监听端口。 +- kafka:输出通道kafka配置。 + - kafka_broker:kafka服务器的IP和port。 +- logs:输出通道logs配置。 + - metric_dir:metrics指标数据日志路径。 + - event_dir:异常事件数据日志路径。 + - meta_dir:metadata元数据日志路径。 + - debug_dir:gala-gopher运行日志路径。 +- probes:native探针配置。 + - name:探针名称,要求与native探针名一致,如example.probe 探针名为example。 + - param :探针启动参数,支持的参数详见[启动参数介绍表](#启动参数介绍)。 + - switch:探针是否启动,支持配置 on | off。 +- extend_probes :第三方探针配置。 + - name:探针名称。 + - command:探针启动命令。 + - param:探针启动参数,支持的参数详见[启动参数介绍表](#启动参数介绍)。 + - start_check:switch为auto时,需要根据start_check执行结果判定探针是否需要启动。 + - switch:探针是否启动,支持配置on | off | auto,auto会根据start_check判定结果决定是否启动探针。 + +### 启动参数介绍 + +| 参数项 | 含义 | +| ------ | ------------------------------------------------------------ | +| -l | 是否开启异常事件上报 | +| -t | 采样周期,单位为秒,默认配置为探针5s上报一次数据 | +| -T | 延迟时间阈值,单位为ms,默认配置为0ms | +| -J | 抖动时间阈值,单位为ms,默认配置为0ms | +| -O | 离线时间阈值,单位为ms,默认配置为0ms | +| -D | 丢包阈值,默认配置为0(个) | +| -F | 配置为`task`表示按照`task_whitelist.conf`过滤,配置为具体进程的pid表示仅监控此进程 | +| -P | 指定每个探针加载的探测程序范围,目前tcpprobe、taskprobe探针涉及 | +| -U | 资源利用率阈值(上限),默认为0% | +| -L | 资源利用率阈值(下限),默认为0% | +| -c | 指示探针(tcp)是否标识client_port,默认配置为0(否) | +| -N | 指定探针(ksliprobe)的观测进程名,默认配置为NULL | +| -p | 指定待观测进程的二进制文件路径,比如nginx_probe,通过 -p /user/local/sbin/nginx指定nginx文件路径,默认配置为NULL | +| -w | 筛选应用程序监控范围,如-w /opt/gala-gopher/task_whitelist.conf,用户可将需要监控的程序名写入task_whitelist.conf中,默认配置为NULL表示不筛选 | +| -n | 指定某个网卡挂载tc ebpf,默认配置为NULL表示所有网卡均挂载,示例: -n eth0 | + +### 配置文件示例 + +- 配置选择数据输出通道: + + ```yaml + metric = + { + out_channel = "web_server"; + kafka_topic = "gala_gopher"; + }; + + event = + { + out_channel = "kafka"; + kafka_topic = "gala_gopher_event"; + }; + + meta = + { + out_channel = "kafka"; + kafka_topic = "gala_gopher_metadata"; + }; + ``` + +- 配置kafka和webServer: + + ```yaml + web_server = + { + port = 8888; + }; + + kafka = + { + kafka_broker = ":9092"; + }; + ``` + +- 选择开启的探针,示例如下: + + ```yaml + probes = + ( + { + name = "system_infos"; + param = "-t 5 -w /opt/gala-gopher/task_whitelist.conf -l warn -U 80"; + switch = "on"; + }, + ); + extend_probes = + ( + { + name = "tcp"; + command = "/opt/gala-gopher/extend_probes/tcpprobe"; + param = "-l warn -c 1 -P 7"; + switch = "on"; + } + ); + ``` + +## 启动 + +配置完成后,执行如下命令启动gala-gopher。 + +```bash +# systemctl start gala-gopher.service +``` + +查询gala-gopher服务状态。 + +```bash +# systemctl status gala-gopher.service +``` + +若显示结果如下,说明服务启动成功。需要关注开启的探针是否已启动,如果探针线程不存在,请检查配置文件及gala-gopher运行日志文件。 + +![gala-gopher成功启动状态](./figures/gala-gopher成功启动状态.png) + +> 说明:gala-gopher部署和运行均需要root权限。 + +## 使用方法 + +### 外部依赖软件部署 + +![gopher软件架构图](./figures/gopher软件架构图.png) + +如上图所示,绿色部分为gala-gopher的外部依赖组件。gala-gopher会将指标数据metrics输出到prometheus,将元数据metadata、异常事件event输出到kafka,灰色部分的gala-anteater和gala-spider会从prometheus和kafka获取数据。 + +> 说明:安装kafka、prometheus软件包时,需要从官网获取安装包进行部署。 + +### 输出数据 + +- **指标数据metrics** + + Prometheus Server内置了Express Browser UI,用户可以通过PromQL查询语句查询指标数据内容。详细教程参见官方文档:[Using the expression browser](https://prometheus.io/docs/prometheus/latest/getting_started/#using-the-expression-browser)。示例如下: + + 指定指标名称为`gala_gopher_tcp_link_rcv_rtt`,UI显示的指标数据为: + + ```basic + gala_gopher_tcp_link_rcv_rtt{client_ip="x.x.x.165",client_port="1234",hostname="openEuler",instance="x.x.x.172:8888",job="prometheus",machine_id="1fd3774xx",protocol="2",role="0",server_ip="x.x.x.172",server_port="3742",tgid="1516"} 1 + ``` + +- **元数据metadata** + + 可以直接从kafka消费topic为`gala_gopher_metadata`的数据来看。示例如下: + + ```bash + # 输入请求 + ./bin/kafka-console-consumer.sh --bootstrap-server x.x.x.165:9092 --topic gala_gopher_metadata + # 输出数据 + {"timestamp": 1655888408000, "meta_name": "thread", "entity_name": "thread", "version": "1.0.0", "keys": ["machine_id", "pid"], "labels": ["hostname", "tgid", "comm", "major", "minor"], "metrics": ["fork_count", "task_io_wait_time_us", "task_io_count", "task_io_time_us", "task_hang_count"]} + ``` + +- **异常事件event** + + 可以直接从kafka消费topic为`gala_gopher_event`的数据来看。示例如下: + + ```bash + # 输入请求 + ./bin/kafka-console-consumer.sh --bootstrap-server x.x.x.165:9092 --topic gala_gopher_event + # 输出数据 + {"timestamp": 1655888408000, "meta_name": "thread", "entity_name": "thread", "version": "1.0.0", "keys": ["machine_id", "pid"], "labels": ["hostname", "tgid", "comm", "major", "minor"], "metrics": ["fork_count", "task_io_wait_time_us", "task_io_count", "task_io_time_us", "task_hang_count"]} + ``` diff --git a/docs/zh/server/maintenance/gala/using_gala_spider.md b/docs/zh/server/maintenance/gala/using_gala_spider.md new file mode 100644 index 0000000000000000000000000000000000000000..71b416d578a014d89273af0797d2f6516e282e34 --- /dev/null +++ b/docs/zh/server/maintenance/gala/using_gala_spider.md @@ -0,0 +1,541 @@ +# gala-spider使用手册 + +本章主要介绍如何部署和使用gala-spider和gala-inference。 + +## gala-spider + +gala-spider 提供 OS 级别的拓扑图绘制功能,它将定期获取 gala-gopher (一个 OS 层面的数据采集软件)在某个时间点采集的所有观测对象的数据,并计算它们之间的拓扑关系,最终将生成的拓扑图保存到图数据库 arangodb 中。 + +### 安装 + +挂载 yum 源: + +```basic +[oe-22.03-lts-SP4-everything] # openEuler 22.03-LTS-SP4 官方发布源 +name=oe-2203-lts-SP4-everything +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/x86_64/ +enabled=1 +gpgcheck=0 +priority=1 + +[oe-22.03-lts-SP4-epol-update] # openEuler 22.03-LTS-SP4 Update 官方发布源 +name=oe-22.03-lts-SP4-epol-update +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/update/main/x86_64/ +enabled=1 +gpgcheck=0 +priority=1 + +[oe-22.03-lts-SP4-epol-main] # openEuler 22.03-LTS-SP4 EPOL 官方发布源 +name=oe-22.03-lts-SP4-epol-main +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/main/x86_64/ +enabled=1 +gpgcheck=0 +priority=1 +``` + +安装 gala-spider: + +```sh +# yum install gala-spider +``` + +### 配置 + +#### 配置文件说明 + +gala-spider 配置文件为 `/etc/gala-spider/gala-spider.yaml` ,该文件配置项说明如下。 + +- global:全局配置信息。 + - data_source:指定观测指标采集的数据库,当前只支持 prometheus。 + - data_agent:指定观测指标采集代理,当前只支持 gala_gopher。 +- spider:spider配置信息。 + - log_conf:日志配置信息。 + - log_path:日志文件路径。 + - log_level:日志打印级别,值包括 DEBUG/INFO/WARNING/ERROR/CRITICAL 。 + - max_size:日志文件大小,单位为兆字节(MB)。 + - backup_count:日志备份文件数量。 +- storage:拓扑图存储服务的配置信息。 + - period:存储周期,单位为秒,表示每隔多少秒存储一次拓扑图。 + - database:存储的图数据库,当前只支持 arangodb。 + - db_conf:图数据库的配置信息。 + - url:图数据库的服务器地址。 + - db_name:拓扑图存储的数据库名称。 +- kafka:kafka配置信息。 + - server:kafka服务器地址。 + - metadata_topic:观测对象元数据消息的topic名称。 + - metadata_group_id:观测对象元数据消息的消费者组ID。 +- prometheus:prometheus数据库配置信息。 + - base_url:prometheus服务器地址。 + - instant_api:单个时间点采集API。 + - range_api:区间采集API。 + - step:采集时间步长,用于区间采集API。 + +#### 配置文件示例 + +```yaml +global: + data_source: "prometheus" + data_agent: "gala_gopher" + +prometheus: + base_url: "http://localhost:9090/" + instant_api: "/api/v1/query" + range_api: "/api/v1/query_range" + step: 1 + +spider: + log_conf: + log_path: "/var/log/gala-spider/spider.log" + # log level: DEBUG/INFO/WARNING/ERROR/CRITICAL + log_level: INFO + # unit: MB + max_size: 10 + backup_count: 10 + +storage: + # unit: second + period: 60 + database: arangodb + db_conf: + url: "http://localhost:8529" + db_name: "spider" + +kafka: + server: "localhost:9092" + metadata_topic: "gala_gopher_metadata" + metadata_group_id: "metadata-spider" +``` + +### 启动 + +1. 通过命令启动。 + + ```sh + # spider-storage + ``` + +2. 通过 systemd 服务启动。 + + ```sh + # systemctl start gala-spider + ``` + +### 使用方法 + +#### 外部依赖软件部署 + +gala-spider 运行时需要依赖多个外部软件进行交互。因此,在启动 gala-spider 之前,用户需要将gala-spider依赖的软件部署完成。下图为 gala-spider 项目的软件依赖图。 + +![gala-spider软件架构图](./figures/gala-spider软件架构图.png) + +其中,右侧虚线框内为 gala-spider 项目的 2 个功能组件,绿色部分为 gala-spider 项目直接依赖的外部组件,灰色部分为 gala-spider 项目间接依赖的外部组件。 + +- **spider-storage**:gala-spider 核心组件,提供拓扑图存储功能。 + 1. 从 kafka 中获取观测对象的元数据信息。 + 2. 从 Prometheus 中获取所有的观测实例信息。 + 3. 将生成的拓扑图存储到图数据库 arangodb 中。 +- **gala-inference**:gala-spider 核心组件,提供根因定位功能。它通过订阅 kafka 的异常 KPI 事件触发异常 KPI 的根因定位流程,并基于 arangodb 获取的拓扑图来构建故障传播图,最终将根因定位的结果输出到 kafka 中。 +- **prometheus**:时序数据库,gala-gopher 组件采集的观测指标数据会上报到 prometheus,再由 gala-spider 做进一步处理。 +- **kafka**:消息中间件,用于存储 gala-gopher 上报的观测对象元数据信息,异常检测组件上报的异常事件,以及 cause-inference 组件上报的根因定位结果。 +- **arangodb**:图数据库,用于存储 spider-storage 生成的拓扑图。 +- **gala-gopher**:数据采集组件,请提前部署gala-gopher。 +- **arangodb-ui**:arangodb 提供的 UI 界面,可用于查询拓扑图。 + +gala-spider 项目中的 2 个功能组件会作为独立的软件包分别发布。 + +​ **spider-storage** 组件对应本节中的 gala-spider 软件包。 + +​ **gala-inference** 组件对应 gala-inference 软件包。 + +gala-gopher软件的部署参见[gala-gopher使用手册](gala-gopher使用手册.md),此处只介绍 arangodb 的部署。 + +当前使用的 arangodb 版本是 3.8.7 ,该版本对运行环境有如下要求: + +- 只支持 x86 系统 +- gcc10 以上 + +arangodb 官方部署文档参见:[arangodb部署](https://www.arangodb.com/docs/3.9/deployment.html) 。 + +arangodb 基于 rpm 的部署流程如下: + +1. 配置 yum 源。 + + ```basic + [oe-22.03-lts-SP4-everything] # openEuler 22.03-LTS-SP4 官方发布源 + name=oe-2203-lts-SP4-everything + baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/x86_64/ + enabled=1 + gpgcheck=0 + priority=1 + + [oe-22.03-lts-SP4-epol-main] # openEuler 22.03-LTS-SP4 EPOL 官方发布源 + name=oe-22.03-lts-SP4-epol-main + baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/main/x86_64/ + enabled=1 + gpgcheck=0 + priority=1 + ``` + +2. 安装 arangodb3。 + + ```sh + # yum install arangodb3 + ``` + +3. 配置修改。 + + arangodb3 服务器的配置文件路径为 `/etc/arangodb3/arangod.conf` ,需要修改如下的配置信息: + + - endpoint:配置 arangodb3 的服务器地址。 + - authentication:访问 arangodb3 服务器是否需要进行身份认证,当前 gala-spider 还不支持身份认证,故此处将authentication设置为 false。 + + 示例配置如下: + + ```yaml + [server] + endpoint = tcp://0.0.0.0:8529 + authentication = false + ``` + +4. 启动 arangodb3。 + + ```sh + # systemctl start arangodb3 + ``` + +#### gala-spider配置项修改 + +依赖软件启动后,需要修改 gala-spider 配置文件的部分配置项内容。示例如下: + +配置 kafka 服务器地址: + +```yaml +kafka: + server: "localhost:9092" +``` + +配置 prometheus 服务器地址: + +```yaml +prometheus: + base_url: "http://localhost:9090/" +``` + +配置 arangodb 服务器地址: + +```yaml +storage: + db_conf: + url: "http://localhost:8529" +``` + +#### 启动服务 + +运行 `systemctl start gala-spider` 。查看启动状态可执行 `systemctl status gala-spider` ,输出如下信息说明启动成功。 + +```sh +[root@openEuler ~]# systemctl status gala-spider +● gala-spider.service - a-ops gala spider service + Loaded: loaded (/usr/lib/systemd/system/gala-spider.service; enabled; vendor preset: disabled) + Active: active (running) since Tue 2022-08-30 17:28:38 CST; 1 day 22h ago + Main PID: 2263793 (spider-storage) + Tasks: 3 (limit: 98900) + Memory: 44.2M + CGroup: /system.slice/gala-spider.service + └─2263793 /usr/bin/python3 /usr/bin/spider-storage +``` + +#### 输出示例 + +用户可以通过 arangodb 提供的 UI 界面来查询 gala-spider 输出的拓扑图。使用流程如下: + +1. 在浏览器输入 arangodb 服务器地址,如: ,进入 arangodb 的 UI 界面。 + +2. 界面右上角切换至 `spider` 数据库。 + +3. 在 `Collections` 面板可以看到在不同时间段存储的观测对象实例的集合、拓扑关系的集合,如下图所示: + + ![spider拓扑关系图](./figures/spider拓扑关系图.png) + +4. 可进一步根据 arangodb 提供的 AQL 查询语句查询存储的拓扑关系图,详细教程参见官方文档: [aql文档](https://www.arangodb.com/docs/3.8/aql/)。 + +## gala-inference + +gala-inference 提供异常 KPI 根因定位能力,它将基于异常检测的结果和拓扑图作为输入,根因定位的结果作为输出,输出到 kafka 中。gala-inference 组件在 gala-spider 项目下进行归档。 + +### 安装 + +挂载 yum 源: + +```basic +[oe-22.03-lts-SP4-everything] # openEuler 22.03-LTS-SP4 官方发布源 +name=oe-2203-lts-SP4-everything +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/x86_64/ +enabled=1 +gpgcheck=0 +priority=1 + +[oe-22.03-lts-SP4-epol-update] # openEuler 22.03-LTS-SP4 Update 官方发布源 +name=oe-22.03-lts-SP4-epol-update +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/update/main/x86_64/ +enabled=1 +gpgcheck=0 +priority=1 + +[oe-22.03-lts-SP4-epol-main] # openEuler 22.03-LTS-SP4 EPOL 官方发布源 +name=oe-22.03-lts-SP4-epol-main +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/main/x86_64/ +enabled=1 +gpgcheck=0 +priority=1 +``` + +安装 gala-inference: + +```sh +# yum install gala-inference +``` + +### 配置 + +#### 配置文件说明 + +gala-inference 配置文件 `/etc/gala-inference/gala-inference.yaml` 配置项说明如下。 + +- inference:根因定位算法的配置信息。 + - tolerated_bias:异常时间点的拓扑图查询所容忍的时间偏移,单位为秒。 + - topo_depth:拓扑图查询的最大深度。 + - root_topk:根因定位结果输出前 K 个根因指标。 + - infer_policy:根因推导策略,包括 dfs 和 rw 。 + - sample_duration:指标的历史数据的采样周期,单位为秒。 + - evt_valid_duration:根因定位时,有效的系统异常指标事件周期,单位为秒。 + - evt_aging_duration:根因定位时,系统异常指标事件的老化周期,单位为秒。 +- kafka:kafka配置信息。 + - server:kafka服务器地址。 + - metadata_topic:观测对象元数据消息的配置信息。 + - topic_id:观测对象元数据消息的topic名称。 + - group_id:观测对象元数据消息的消费者组ID。 + - abnormal_kpi_topic:异常 KPI 事件消息的配置信息。 + - topic_id:异常 KPI 事件消息的topic名称。 + - group_id:异常 KPI 事件消息的消费者组ID。 + - abnormal_metric_topic:系统异常指标事件消息的配置信息。 + - topic_id:系统异常指标事件消息的topic名称。 + - group_id:系统异常指标事件消息的消费者组ID。 + - consumer_to:消费系统异常指标事件消息的超时时间,单位为秒。 + - inference_topic:根因定位结果输出事件消息的配置信息。 + - topic_id:根因定位结果输出事件消息的topic名称。 +- arangodb:arangodb图数据库的配置信息,用于查询根因定位所需要的拓扑子图。 + - url:图数据库的服务器地址。 + - db_name:拓扑图存储的数据库名称。 +- log_conf:日志配置信息。 + - log_path:日志文件路径。 + - log_level:日志打印级别,值包括 DEBUG/INFO/WARNING/ERROR/CRITICAL。 + - max_size:日志文件大小,单位为兆字节(MB)。 + - backup_count:日志备份文件数量。 +- prometheus:prometheus数据库配置信息,用于获取指标的历史时序数据。 + - base_url:prometheus服务器地址。 + - range_api:区间采集API。 + - step:采集时间步长,用于区间采集API。 + +#### 配置文件示例 + +```yaml +inference: + # 异常时间点的拓扑图查询所容忍的时间偏移,单位:秒 + tolerated_bias: 120 + topo_depth: 10 + root_topk: 3 + infer_policy: "dfs" + # 单位: 秒 + sample_duration: 600 + # 根因定位时,有效的异常指标事件周期,单位:秒 + evt_valid_duration: 120 + # 异常指标事件的老化周期,单位:秒 + evt_aging_duration: 600 + +kafka: + server: "localhost:9092" + metadata_topic: + topic_id: "gala_gopher_metadata" + group_id: "metadata-inference" + abnormal_kpi_topic: + topic_id: "gala_anteater_hybrid_model" + group_id: "abn-kpi-inference" + abnormal_metric_topic: + topic_id: "gala_anteater_metric" + group_id: "abn-metric-inference" + consumer_to: 1 + inference_topic: + topic_id: "gala_cause_inference" + +arangodb: + url: "http://localhost:8529" + db_name: "spider" + +log: + log_path: "/var/log/gala-inference/inference.log" + # log level: DEBUG/INFO/WARNING/ERROR/CRITICAL + log_level: INFO + # unit: MB + max_size: 10 + backup_count: 10 + +prometheus: + base_url: "http://localhost:9090/" + range_api: "/api/v1/query_range" + step: 5 +``` + +### 启动 + +1. 通过命令启动。 + + ```sh + # gala-inference + ``` + +2. 通过 systemd 服务启动。 + + ```sh + # systemctl start gala-inference + ``` + +### 使用方法 + +#### 依赖软件部署 + +gala-inference 的运行依赖和 gala-spider一样,请参见[外部依赖软件部署](#外部依赖软件部署)。此外,gala-inference 还间接依赖 [gala-spider](#gala-spider) 和 [gala-anteater](gala-anteater使用手册.md) 软件的运行,请提前部署gala-spider和gala-anteater软件。 + +#### 配置项修改 + +修改 gala-inference 的配置文件中部分配置项。示例如下: + +配置 kafka 服务器地址: + +```yaml +kafka: + server: "localhost:9092" +``` + +配置 prometheus 服务器地址: + +```yaml +prometheus: + base_url: "http://localhost:9090/" +``` + +配置 arangodb 服务器地址: + +```yaml +arangodb: + url: "http://localhost:8529" +``` + +#### 启动服务 + +直接运行 `systemctl start gala-inference` 即可。可通过执行 `systemctl status gala-inference` 查看启动状态,如下打印表示启动成功。 + +```sh +[root@openEuler ~]# systemctl status gala-inference +● gala-inference.service - a-ops gala inference service + Loaded: loaded (/usr/lib/systemd/system/gala-inference.service; enabled; vendor preset: disabled) + Active: active (running) since Tue 2022-08-30 17:55:33 CST; 1 day 22h ago + Main PID: 2445875 (gala-inference) + Tasks: 10 (limit: 98900) + Memory: 48.7M + CGroup: /system.slice/gala-inference.service + └─2445875 /usr/bin/python3 /usr/bin/gala-inference +``` + +#### 输出示例 + +当异常检测模块 gala-anteater 检测到 KPI 异常后,会将对应的异常 KPI 事件输出到 kafka 中,gala-inference 会一直监测该异常 KPI 事件的消息,如果收到异常 KPI 事件的消息,就会触发根因定位。根因定位会将定位结果输出到 kafka 中,用户可以在 kafka 服务器中查看根因定位的输出结果,基本步骤如下: + +1. 若通过源码安装 kafka ,需要进入 kafka 的安装目录下。 + + ```sh + cd /root/kafka_2.13-2.8.0 + ``` + +2. 执行消费 topic 的命令获取根因定位的输出结果。 + + ```sh + ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic gala_cause_inference + ``` + + 输出示例如下: + + ```json + { + "Timestamp": 1661853360000, + "event_id": "1661853360000_1fd37742xxxx_sli_12154_19", + "Atrributes": { + "event_id": "1661853360000_1fd37742xxxx_sli_12154_19" + }, + "Resource": { + "abnormal_kpi": { + "metric_id": "gala_gopher_sli_rtt_nsec", + "entity_id": "1fd37742xxxx_sli_12154_19", + "timestamp": 1661853360000, + "metric_labels": { + "machine_id": "1fd37742xxxx", + "tgid": "12154", + "conn_fd": "19" + } + }, + "cause_metrics": [ + { + "metric_id": "gala_gopher_proc_write_bytes", + "entity_id": "1fd37742xxxx_proc_12154", + "metric_labels": { + "__name__": "gala_gopher_proc_write_bytes", + "cmdline": "/opt/redis/redis-server x.x.x.172:3742", + "comm": "redis-server", + "container_id": "5a10635e2c43", + "hostname": "openEuler", + "instance": "x.x.x.172:8888", + "job": "prometheus", + "machine_id": "1fd37742xxxx", + "pgid": "12154", + "ppid": "12126", + "tgid": "12154" + }, + "timestamp": 1661853360000, + "path": [ + { + "metric_id": "gala_gopher_proc_write_bytes", + "entity_id": "1fd37742xxxx_proc_12154", + "metric_labels": { + "__name__": "gala_gopher_proc_write_bytes", + "cmdline": "/opt/redis/redis-server x.x.x.172:3742", + "comm": "redis-server", + "container_id": "5a10635e2c43", + "hostname": "openEuler", + "instance": "x.x.x.172:8888", + "job": "prometheus", + "machine_id": "1fd37742xxxx", + "pgid": "12154", + "ppid": "12126", + "tgid": "12154" + }, + "timestamp": 1661853360000 + }, + { + "metric_id": "gala_gopher_sli_rtt_nsec", + "entity_id": "1fd37742xxxx_sli_12154_19", + "metric_labels": { + "machine_id": "1fd37742xxxx", + "tgid": "12154", + "conn_fd": "19" + }, + "timestamp": 1661853360000 + } + ] + } + ] + }, + "SeverityText": "WARN", + "SeverityNumber": 13, + "Body": "A cause inferring event for an abnormal event" + } + ``` diff --git a/docs/zh/server/maintenance/images/c50cb9df64f4659787c810167c89feb4_1884x257.png b/docs/zh/server/maintenance/images/c50cb9df64f4659787c810167c89feb4_1884x257.png new file mode 100644 index 0000000000000000000000000000000000000000..01081f25627731c56764c196e3fae32d55bc7023 Binary files /dev/null and b/docs/zh/server/maintenance/images/c50cb9df64f4659787c810167c89feb4_1884x257.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001321685172.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001321685172.png new file mode 100644 index 0000000000000000000000000000000000000000..a98265bdf251608c0ff394fefe545cd3192bdb28 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001321685172.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001322112990.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001322112990.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4b32bf2b36595abe10f2550cda5714bc355553 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001322112990.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001322219840.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001322219840.png new file mode 100644 index 0000000000000000000000000000000000000000..48b28664df46ddf9aa38c7570bb9e9edb8080ac9 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001322219840.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001322372918.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001322372918.png new file mode 100644 index 0000000000000000000000000000000000000000..5424367c9bc564e713220ba87f963096881833b8 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001322372918.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001322379488.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001322379488.png new file mode 100644 index 0000000000000000000000000000000000000000..8b18cdca066be43b74443498edc5500ea9e1e608 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001322379488.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001335457246.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001335457246.png new file mode 100644 index 0000000000000000000000000000000000000000..325d6a8ce097db0b92b1a883bc4b3d4ad0bc6a49 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001335457246.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001335816300.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001335816300.png new file mode 100644 index 0000000000000000000000000000000000000000..619f0c33503cd27d92f227216c722d554b9132f2 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001335816300.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001336448570.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001336448570.png new file mode 100644 index 0000000000000000000000000000000000000000..4bd494d78d83fef2e8a89c80e17c9b6db892a2e9 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001336448570.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001336729664.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001336729664.png new file mode 100644 index 0000000000000000000000000000000000000000..4d73507cceab2e0b123d6864d9f86c86eb1eee2f Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001336729664.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337000118.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337000118.png new file mode 100644 index 0000000000000000000000000000000000000000..37131647778506f24be4ff401392a9cc209a36eb Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337000118.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337039920.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337039920.png new file mode 100644 index 0000000000000000000000000000000000000000..40c07e9b6ec27cdbe47d39788736b892f1174cc8 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337039920.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337051916.jpg b/docs/zh/server/maintenance/images/zh-cn_image_0000001337051916.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a2083b7783041884394f796222352d8772ada6cc Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337051916.jpg differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337053248.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337053248.png new file mode 100644 index 0000000000000000000000000000000000000000..8859f37749a4f8a4394e24ddfb54fc473e8c10c2 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337053248.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337172594.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337172594.png new file mode 100644 index 0000000000000000000000000000000000000000..4e806f83c57880543a777807778f14eeb0105aba Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337172594.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337212144.jpg b/docs/zh/server/maintenance/images/zh-cn_image_0000001337212144.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6f0874250475f598efa7375516109b540918fb8 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337212144.jpg differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337260780.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337260780.png new file mode 100644 index 0000000000000000000000000000000000000000..09d521d933f5fa0caacc592ea92acee959786051 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337260780.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337268560.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337268560.png new file mode 100644 index 0000000000000000000000000000000000000000..663f67428487d88e23aa9c3291c31399fec2f2c3 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337268560.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337268820.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337268820.png new file mode 100644 index 0000000000000000000000000000000000000000..cd1732ee870a6dde0acc54642f34793933ce3356 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337268820.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337419960.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337419960.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b493bf1e57f130e122b59e99ff45cd44539dad Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337419960.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337420372.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337420372.png new file mode 100644 index 0000000000000000000000000000000000000000..2300bcd7426748236fd48b85688bd3d1fa3315df Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337420372.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337422904.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337422904.png new file mode 100644 index 0000000000000000000000000000000000000000..01e250c6f7cbb64abe0b136cd80fda7ae68b629d Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337422904.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337424024.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337424024.png new file mode 100644 index 0000000000000000000000000000000000000000..6532d98885f756c6704bc4bacc0f9133d78405a7 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337424024.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337424304.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337424304.png new file mode 100644 index 0000000000000000000000000000000000000000..9ecb384ed58458c24d8e3ae729c4de197b982b86 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337424304.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337427216.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337427216.png new file mode 100644 index 0000000000000000000000000000000000000000..8633dbdd658f98501dfc91a704395260f2d4df3c Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337427216.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337427392.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337427392.png new file mode 100644 index 0000000000000000000000000000000000000000..74f5cb24520c94de8628b2e64e6916c563f9f5a2 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337427392.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337533690.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337533690.png new file mode 100644 index 0000000000000000000000000000000000000000..1f02d9b155754a113347a54a7d35ba9b060175a8 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337533690.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337536842.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337536842.png new file mode 100644 index 0000000000000000000000000000000000000000..5a9ee2c989638c9a6aad3fcfb35bb9b9f2d4683c Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337536842.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337579708.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337579708.png new file mode 100644 index 0000000000000000000000000000000000000000..5cd8ed939434e6447dd55679eeaa3756d861751f Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337579708.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337580216.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337580216.png new file mode 100644 index 0000000000000000000000000000000000000000..5516b8d261b769287c74cf860a6708fcde6bbb8a Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337580216.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337584296.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337584296.png new file mode 100644 index 0000000000000000000000000000000000000000..fa76ecb59018fb154ffe1d9f6da1484d652f3ac1 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337584296.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337696078.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337696078.png new file mode 100644 index 0000000000000000000000000000000000000000..3864852e345eaf01794042feaa85b012b8af71de Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337696078.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337740252.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337740252.png new file mode 100644 index 0000000000000000000000000000000000000000..fd83fb600a54ab8bc39ee2ae54210be8b6c48973 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337740252.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337740540.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337740540.png new file mode 100644 index 0000000000000000000000000000000000000000..b8e25128a47dccaed733fc192f52f2ca7828e516 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337740540.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337747132.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337747132.png new file mode 100644 index 0000000000000000000000000000000000000000..41ea7d47f5fe5fca46816d93cb08b5da00abc0ad Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337747132.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337748300.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337748300.png new file mode 100644 index 0000000000000000000000000000000000000000..32488dc1740408834954cf8d57a2843d98f09c2e Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337748300.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001337748528.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001337748528.png new file mode 100644 index 0000000000000000000000000000000000000000..f2d62c85c844c2756f4d27a48711560dfb9615ea Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001337748528.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001372249333.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001372249333.png new file mode 100644 index 0000000000000000000000000000000000000000..48cd37225954e212cb3e159acc137866d8edc362 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001372249333.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001372748125.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001372748125.png new file mode 100644 index 0000000000000000000000000000000000000000..5f6326b9415cf766dd8379dbadd5aa1a0dc6861f Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001372748125.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001372821865.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001372821865.png new file mode 100644 index 0000000000000000000000000000000000000000..21e8dad1cd90755440cf858523b12c036a91e1ad Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001372821865.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001372824637.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001372824637.png new file mode 100644 index 0000000000000000000000000000000000000000..aefb5d83c079e6718ef88fd934b4b496cdc29565 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001372824637.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001373373585.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001373373585.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e5e47c9beca2c7c7630d78916f80eda652b52a Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001373373585.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001373379529.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001373379529.png new file mode 100644 index 0000000000000000000000000000000000000000..daa40b49e679668905632f25ff42bf8599ba0ead Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001373379529.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001384808269.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001384808269.png new file mode 100644 index 0000000000000000000000000000000000000000..be18ecef3a149d5742f18535552f66f26ab34832 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001384808269.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001385585749.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001385585749.png new file mode 100644 index 0000000000000000000000000000000000000000..c13604ab7095c2a7717bde1384f0aea3d53f69e3 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001385585749.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001385611905.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001385611905.png new file mode 100644 index 0000000000000000000000000000000000000000..8c233e40a21e678ddf4115c2e2e80c96e25a60ce Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001385611905.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001385905845.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001385905845.png new file mode 100644 index 0000000000000000000000000000000000000000..a6cb8bc4a188ef444919d71f7f16baa06422788b Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001385905845.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001386149037.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001386149037.png new file mode 100644 index 0000000000000000000000000000000000000000..da73fead24d8805bb43287f53c757e80ff0d597f Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001386149037.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001386699925.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001386699925.png new file mode 100644 index 0000000000000000000000000000000000000000..cf5b13b35e65ed0143a01a5bcad1e11eaddaded7 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001386699925.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001387293085.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001387293085.png new file mode 100644 index 0000000000000000000000000000000000000000..7f56b020949c53d018eba016952c2409f0d7dca9 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001387293085.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001387413509.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001387413509.png new file mode 100644 index 0000000000000000000000000000000000000000..2245427058fc31f3e5d7f40062c0551936a67199 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001387413509.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001387413793.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001387413793.png new file mode 100644 index 0000000000000000000000000000000000000000..aa649bf7215662819766d897513fb711d9d1e7f8 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001387413793.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001387415629.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001387415629.png new file mode 100644 index 0000000000000000000000000000000000000000..01189358354090591de6580f8ef88ef78ddba3a1 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001387415629.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001387691985.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001387691985.png new file mode 100644 index 0000000000000000000000000000000000000000..31c3096fa837c1b397ab2fe27acdd87e2cec36de Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001387691985.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001387692269.jpg b/docs/zh/server/maintenance/images/zh-cn_image_0000001387692269.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b79e3ddf78520277046b933c4662c6b72f45ab85 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001387692269.jpg differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001387692893.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001387692893.png new file mode 100644 index 0000000000000000000000000000000000000000..49ea515d834b58d4ded14c55a6a2b07034d76137 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001387692893.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001387755969.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001387755969.png new file mode 100644 index 0000000000000000000000000000000000000000..b2daa95d6b757e7bd443d8fd961922f248dd6853 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001387755969.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001387780357.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001387780357.png new file mode 100644 index 0000000000000000000000000000000000000000..1aab3b8be2cd0c906253d70036a9fee3050a1055 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001387780357.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001387784693.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001387784693.png new file mode 100644 index 0000000000000000000000000000000000000000..62a40117a892ba6c163be81bce1d198c2920f0e9 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001387784693.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001387787605.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001387787605.png new file mode 100644 index 0000000000000000000000000000000000000000..8c1893e16fb929f77bb6b9a70cb25d3479dd684c Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001387787605.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001387855149.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001387855149.png new file mode 100644 index 0000000000000000000000000000000000000000..731e957c367cb05e4229f53cf97dcee2cde69dff Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001387855149.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001387857005.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001387857005.png new file mode 100644 index 0000000000000000000000000000000000000000..872f5c9eb05169831df4ba49d017629e8a943c64 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001387857005.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001387902849.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001387902849.png new file mode 100644 index 0000000000000000000000000000000000000000..ffe2043c199308ed2033e3eb02a0662a65141ece Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001387902849.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001387907229.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001387907229.png new file mode 100644 index 0000000000000000000000000000000000000000..084fbea1aee4d09b1e623c66b4f07641c7a0208d Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001387907229.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001387908045.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001387908045.png new file mode 100644 index 0000000000000000000000000000000000000000..1fca645598e7a67da6e75b98c44f3c9a740be374 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001387908045.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001387908453.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001387908453.png new file mode 100644 index 0000000000000000000000000000000000000000..b97804a0a575fd18235e7a0c7e4f2d0183e3b460 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001387908453.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001387961737.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001387961737.png new file mode 100644 index 0000000000000000000000000000000000000000..ae4ddce8cf2629b811e9711c61186b3efa4dfe3c Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001387961737.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001388020197.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001388020197.png new file mode 100644 index 0000000000000000000000000000000000000000..1816e1e068ee0294677ebb357ffd158a14bb86cf Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001388020197.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001388024321.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001388024321.png new file mode 100644 index 0000000000000000000000000000000000000000..da3ba54203ded0093b7c2b5308de0e2afd85a146 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001388024321.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001388024397.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001388024397.png new file mode 100644 index 0000000000000000000000000000000000000000..4e4531dd19dc703399c9d4dd0e95236fa9a064c8 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001388024397.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001388028161.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001388028161.png new file mode 100644 index 0000000000000000000000000000000000000000..b3beb92520c34ba771d096a8a146fb2c5b5edbb7 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001388028161.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001388028537.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001388028537.png new file mode 100644 index 0000000000000000000000000000000000000000..ffb244306787c397ef4a9f4d9c3eb504172d3777 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001388028537.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001388184025.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001388184025.png new file mode 100644 index 0000000000000000000000000000000000000000..cbce6fe1e32c547426319923c0fdb13e95554b99 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001388184025.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001388187249.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001388187249.png new file mode 100644 index 0000000000000000000000000000000000000000..0ac83f21e269d909e550b68cb0bdc6347c05dcac Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001388187249.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001388187325.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001388187325.png new file mode 100644 index 0000000000000000000000000000000000000000..02dbdf218da2cb1c844dfc13a463875df5124d48 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001388187325.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001388188365.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001388188365.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe3bfb48446bab88e3e622b9f8066383f269590 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001388188365.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001388241577.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001388241577.png new file mode 100644 index 0000000000000000000000000000000000000000..8dacb6e343ea4c750904fa090bb99213e012379d Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001388241577.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001388972645.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001388972645.png new file mode 100644 index 0000000000000000000000000000000000000000..e32606925f4bb4380b262d9f946d4cd106202b87 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001388972645.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_image_0000001389098425.png b/docs/zh/server/maintenance/images/zh-cn_image_0000001389098425.png new file mode 100644 index 0000000000000000000000000000000000000000..c63903009ab9ba454f169250632dbec1b3c94467 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_image_0000001389098425.png differ diff --git a/docs/zh/server/maintenance/images/zh-cn_other_0000001337581224.jpeg b/docs/zh/server/maintenance/images/zh-cn_other_0000001337581224.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2c019b828bdf9c699f203f09ba3542968ff21262 Binary files /dev/null and b/docs/zh/server/maintenance/images/zh-cn_other_0000001337581224.jpeg differ diff --git a/docs/zh/server/maintenance/kernel_live_upgrade/_toc.yaml b/docs/zh/server/maintenance/kernel_live_upgrade/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8c65b644551f71d478d526716413add4c7b9334f --- /dev/null +++ b/docs/zh/server/maintenance/kernel_live_upgrade/_toc.yaml @@ -0,0 +1,9 @@ +isManual: true +label: '' +sections: + - label: 安装与部署 + href: ./installation_and_deployment.md + - label: 内核热升级用户指南 + href: ./kernel_live_upgrade.md + - label: 使用方法 + href: ./usage_guide.md diff --git a/docs/zh/server/maintenance/kernel_live_upgrade/faq.md b/docs/zh/server/maintenance/kernel_live_upgrade/faq.md new file mode 100644 index 0000000000000000000000000000000000000000..d031344810332c60b4ae7ff2327693e76ab397b6 --- /dev/null +++ b/docs/zh/server/maintenance/kernel_live_upgrade/faq.md @@ -0,0 +1,27 @@ +1. 执行nvwa update后未升级 + + 原因:保留现场或者内核替换过程中出现错误。 + + 解决方法:查看日志,找出错误原因。 + +2. 开启加速特性后,nvwa执行命令失败 + + 原因:nvwa提供了诸多加速特性,包括quick kexec,pin memory,cpu park等等。这些特性都涉及到cmdline的配置和内存的分配,在选取内存时,通过cat /proc/iomemory确保选取的内存没有与其他程序冲突。必要时,通过dmesg查看使能特性后是否存在错误日志。 + +3. 热升级后,相关现场未被恢复 + + 原因:首先检查nvwa服务是否运行,运行情况下,可能存在两种情况,一种是服务恢复失败,一种是进程恢复失败。 + + 解决方法:通过service nvwa status查看nvwa的日志,如果是服务启动失败,首先确认是否使能了该服务,再通过systemd查看对应服务的日志。进一步的日志,去criu_dir指定的路径对应命名的进程/服务文件夹中。其中dump.log为保存现场产生的日志,restore.log为恢复现场产生的。 + +4. 恢复失败,日志显示Can't fork for 948: File exists + + 原因:内核热升级工具在恢复程序过程中,发现程序的pid已经被占用。 + + 解决方法:当前内核没有提供保留pid的机制,相关策略正在开发,预计会在将来的内核版本中解决这一限制,当前仅能手动重启相关进程。 + +5. 使用nvwa去保存和恢复简单程序(hello world),显示失败或者程序未在执行 + + 原因: criu使用存在诸多限制。 + + 解决办法:查看nvwa的日志,如果显示是criu相关的错误,去相应的目录下检查dump.log或者restore.log,criu相关的使用限制,可以参考[wiki](https://criu.org/What_cannot_be_checkpointed)。 \ No newline at end of file diff --git a/docs/zh/server/maintenance/kernel_live_upgrade/installation_and_deployment.md b/docs/zh/server/maintenance/kernel_live_upgrade/installation_and_deployment.md new file mode 100644 index 0000000000000000000000000000000000000000..b18f12e5771bfe313f4ee54b1c8db136a9c29469 --- /dev/null +++ b/docs/zh/server/maintenance/kernel_live_upgrade/installation_and_deployment.md @@ -0,0 +1,186 @@ +# 安装与部署 + +本章介绍如何安装和部署内核热升级工具。 + + + +- [安装与部署](#安装与部署) + - [软硬件要求](#软硬件要求) + - [硬件要求](#硬件要求) + - [软件要求](#软件要求) + - [环境准备](#环境准备) + - [安装内核热升级工具](#安装内核热升级工具) + - [部署内核热升级工具](#部署内核热升级工具) + - [配置介绍](#配置介绍) + - [使能内核热升级工具](#使能内核热升级工具) + + + +## 软硬件要求 + +### 硬件要求 + +- 当前仅支持arm64架构 + +### 软件要求 + +- 操作系统:openEuler 22.03-LTS-SP4 + +## 环境准备 + +- 安装openEuler系统,安装方法参考 《[openEuler 22.03-LTS-SP4 安装指南](./../../installation_upgrade/installation/installation_guide.md)》。 + +- 安装内核热升级工具需要使用root权限。 + +## 安装内核热升级工具 + +本章介绍内核热升级工具的安装方法。 + +安装内核热升级工具的操作步骤如下: + +1. 挂载openEuler的iso文件。 + + ```shell + # mount openEuler-22.03-LTS-SP4-aarch64-dvd.iso /mnt + ``` + +2. 配置本地yum源。 + + ```shell + # vi /etc/yum.repos.d/local.repo + ``` + + 配置内容如下所示: + + ```shell + [local] + name=local + baseurl=file:///mnt + gpgcheck=1 + enabled=1 + ``` + +3. 将RPM数字签名的GPG公钥导入系统。 + + ```shell + # rpm --import /mnt/RPM-GPG-KEY-openEuler + ``` + +4. 安装内核热升级工具。 + + ```shell + # yum install nvwa -y + ``` + +5. 验证是否安装成功,命令和回显如下,则表示安装成功。 + + ```shell + # rpm -qa | grep nvwa + nvwa-xxx + ``` + +## 部署内核热升级工具 + +本章介绍内核热升级工具的配置部署: + +### 配置介绍 + +内核热升级工具的配置文件位于/etc/nvwa,配置文件包括: + +- nvwa-restore.yaml + + 该配置文件用于指导内核热升级工具在内核热升级过程中如何保存和恢复现场,具体配置如下: + + - pids + + pids用于指明nvwa热升级过程中需要保留和恢复的进程,此处的进程通过进程号(pid)进行标识,需要注意的是,nvwa管理的进程在nvwa服务启动后,会被自动恢复。 + + - services + + services用于指明nvwa热升级过程中需要保留和恢复的服务。与pids的区别在于,内核热升级工具可以直接保存和恢复进程的状态,对于服务,内核热升级工具则需要依赖systemd进行相关操作。此处的服务名称,应该使用systemd中使用的服务名称。需要注意的是,对于nvwa管理的服务,是否要在nvwa启动时自动恢复,取决于systemd中有没有使能该服务,且当前支持的服务类型只有notify和oneshot。 + + - restore_net + + restore_net用于指明是否需要内核热升级工具保存和恢复网络配置,如果网络配置有误,有可能导致恢复后网络不可用,默认关闭。 + + - enable_quick_kexec + + enable_quick_kexec用于指明是否需要使能quick kexec特性,quick kexec是nvwa社区推出的,加速内核重启过程的一个特性。使用该特性,需要在cmdline中,加入"quickkexec=128M"。128指分配给quick kexec特性的内存大小,该内存将用于在升级过程中加载kernel和initramfs,因此大小需要大于升级过程中涉及到的kernel,initramfs大小之和。该特性默认关闭。 + + - enable_pin_memory + + enable_pin_memory用于指明是否需要使能pin memory特性,pin memory是nvwa社区推出的,加速进程保存恢复过程的一个特性。pin_memory特性暂不支持多进程应用备份恢复,使用该特性,需要在cmdline中,加入"max_pin_pid_num=10 redirect_space_size=2M pinmemory=200M@0x640000000"。 + + 其中,max_pin_pid_num代表支持pin memory恢复的最大进程数目,redirect_space_size代表pin memory过程中重定向物理页所需要的预留内存空间,建议配置为pin memory总预留内存的1/100,pinmemory指明这段内存的起点和大小。从0x640000000开始的200M空间,是pin memory使用的全部内存空间,这段空间不应该被其他程序使用。 + +- nvwa-restore.yaml的配置示例 + + ```yaml + pids: + - 14109 + services: + - redis + restore_net: false + enable_quick_kexec: true + enable_pin_memory: true + ``` + +- nvwa-server.yaml + + 该文件包含了内核热升级工具运行过程中,需要使用到的配置信息,具体如下: + + - criu_dir + + 用于指明内核热升级工具在保存现场过程中,存储产生的信息文件夹路径。需要注意的是,这些信息可能会占用较大的磁盘空间。 + + - criu_exe + + 用于指明内核热升级工具使用的criu可执行文件路径,除非是对criu进行调测,一般不建议修改。 + + - kexec_exe + + 用于指明内核热升级工具使用的kexec可执行文件路径,除非是对kexec进行调测,一般不建议修改。 + + - systemd_etc + + 用于指明覆盖systemd配置过程中,使用到的文件夹路径。该路径由systemd决定,一般不需要修改。 + + - log_dir + + 存放内核热升级工具产生的log信息,log模块当前未启用。内核热升级工具日志信息的查看,参考[使用方法-产生的日志信息](./usage_guide.md#产生的日志信息)。 + +- nvwa-server.yaml的配置示例 + + ```yaml + criu_dir: /var/nvwa/running/ + criu_exe: /usr/sbin/criu + kexec_exe: /usr/sbin/kexec + systemd_etc: /etc/systemd/system/ + log_dir: /etc/nvwa/log/ + ``` + +## 使能内核热升级工具 + +内核热升级工具的运行依赖配置文件,配置文件修改后应该重新运行内核热升级工具程序。 + +安装成功后,可以通过systemd的相关命令来操作内核热升级工具。 + +- 使能nvwa。 + + ```shell + systemctl enable nvwa + ``` + +- 启动nvwa。 + + ```shell + systemctl start nvwa + ``` + +- 查看nvwa服务状态及相关信息。 + + ```shell + service nvwa status + ``` + +- 更多用法参考systemd用法。 diff --git a/docs/zh/server/maintenance/kernel_live_upgrade/kernel_live_upgrade.md b/docs/zh/server/maintenance/kernel_live_upgrade/kernel_live_upgrade.md new file mode 100644 index 0000000000000000000000000000000000000000..2fcf094e0af704aa1e977a30651b662ec735b8bd --- /dev/null +++ b/docs/zh/server/maintenance/kernel_live_upgrade/kernel_live_upgrade.md @@ -0,0 +1,14 @@ +# 内核热升级用户指南 + +本文档介绍openEuler系统内核热升级特性的安装部署和使用方法,openEuler的内核热替换特性通过快速重启内核和程序热迁移实现,我们提供了一个用户态工具以自动化这一过程。 + +本文档适用于使用openEuler系统并希望了解和使用内核热升级的社区开发者、开源爱好者以及相关合作伙伴。使用人员需要具备基础的Linux操作系统知识。 + +## 使用场景 + +内核热升级的目标,是实现在秒级的端到端时延下,实现进程运行现场的保存和恢复。 + +使用场景通常符合以下两个条件: + +1. 内核由于漏洞修复,版本更新等原因,需要重新启动。 +2. 运行在内核之上的业务能够在内核重启后快速恢复状态。 diff --git a/docs/zh/server/maintenance/kernel_live_upgrade/usage_guide.md b/docs/zh/server/maintenance/kernel_live_upgrade/usage_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..73c7b85aa79818c30dc9210e579b32a54859c07d --- /dev/null +++ b/docs/zh/server/maintenance/kernel_live_upgrade/usage_guide.md @@ -0,0 +1,107 @@ +# 使用方法 + + + +- [命令用法](#命令用法) +- [使用限制](#使用限制) +- [加速特性说明及使用](#加速特性说明及使用) +- [产生的日志信息](#产生的日志信息) + + + +## 命令用法 + +- nvwa help + + 打印帮助信息,打印的信息如下: + + ```shell + NAME: + nvwa - a tool used for openEuler kernel update. + + USAGE: + nvwa [global options] command [command options] [arguments...] + + VERSION: + 0.1 + + COMMANDS: + update specify kernel version for nvwa to update + init init nvwa running environment + help, h Shows a list of commands or help for one command + + GLOBAL OPTIONS: + --help, -h show help (default: false) + --version, -v print the version (default: false) + ``` + +- nvwa update \ + + 热升级到内核某一版本,nvwa会去/boot目录下寻找内核镜像和ramfs,kernel的命名格式需为vmlinuz-\, rootfs命名格式需为initramfs-\.img + + 需要注意的是,升级过程有可能会失败,如果失败,部分被dump的进程或者服务,将停止运行。 + +- nvwa init + + 清除nvwa产生的现场信息以及对systemd的配置修改,用于nvwa执行前或者执行失败后,对现场进行清理。 + +## 使用限制 + +1. 对于需要通过nvwa保存的service,其配置中需要设置标准输出(StandardOutput)和错误输出(StandardError),以redis为例: + + ```shell + [Unit] + Description=Redis persistent key-value database + After=network.target + [Service] + ExecStart=/usr/bin/redis-server /etc/redis.conf --supervised systemd + Type=notify + User=redis + Group=redis + RuntimeDirectory=redis + RuntimeDirectoryMode=0755 + StandardOutput=file:/root/log1.log + StandardError=file:/root/log2.log + [Install] + WantedBy=multi-user.target + ``` + +2. 使用加速特性需要修改cmdline以及分配合适的内存,参见[此处](#加速特性说明及使用) + +3. 运行过程中需要关闭SELINUX + + 理论上,仅需要在执行nvwa update之后和系统重启nvwa恢复现场这段时间前关闭。稳妥起见,建议全程关闭SELINUX。 + +## 加速特性说明及使用 + +1. cpu park(加速内核重启过程) + + cpu park,是在使用kexec过程,使cpu进入一种忙等的状态,更快的响应主核发送的中断请求,减少状态的变化。 + + 使用cpu park,需要在cmdline中加入"cpuparkmem=0x200000000",其中0x200000000是一段未被其他程序使用的内存起始地址,cpuparkmem将占用从该地址开始,size为1M左右的内存空间。 + + 需要注意的是,在内存允许的情况下,此处的地址选择,建议范围在4G(0x100000000)之后,前4G通常被系统各组件预留,容易冲突。 + +2. quick kexec(加速内核启动过程) + + quick kexec,是对kexec加载镜像过程中的一种加速。 + + 使用quick kexec,需要在配置文件中使能相关选项,更多信息参考<<安装与部署>>(配置介绍)。 + +3. pin_memory(加速现场保存恢复过程) + + pin memory,是对criu进行现场保存恢复过程中的一种加速。 + + 使用pin memory,需要在配置文件中使能相关选项,更多信息参考<<安装与部署>>(配置介绍)。 + +## 产生的日志信息 + +内核热升级工具产生的日志分为两部分: + +- 运行过程产生的日志 + + 通过service nvwa status查看。 + +- 保留现场过程中产生的日志 + + 日志位于criu_dir指定的路径对应命名的进程/服务文件夹中。 diff --git a/docs/zh/server/maintenance/sysmonitor/_toc.yaml b/docs/zh/server/maintenance/sysmonitor/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..088f65ac09aa7bb977d157e1adf170a31cf45608 --- /dev/null +++ b/docs/zh/server/maintenance/sysmonitor/_toc.yaml @@ -0,0 +1,5 @@ +isManual: true +label: '' +sections: + - label: sysmonitor + href: ./sysmonitor_user_guide.md diff --git "a/docs/zh/server/maintenance/sysmonitor/figures/sysmonitor\345\212\237\350\203\275\345\210\227\350\241\250.png" "b/docs/zh/server/maintenance/sysmonitor/figures/sysmonitor\345\212\237\350\203\275\345\210\227\350\241\250.png" new file mode 100644 index 0000000000000000000000000000000000000000..701e925d66a8771774e1bb38fdf70edd982913bf Binary files /dev/null and "b/docs/zh/server/maintenance/sysmonitor/figures/sysmonitor\345\212\237\350\203\275\345\210\227\350\241\250.png" differ diff --git a/docs/zh/server/maintenance/sysmonitor/sysmonitor_user_guide.md b/docs/zh/server/maintenance/sysmonitor/sysmonitor_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..bc5cb0da066acd2d1fb602915fe10dc707380443 --- /dev/null +++ b/docs/zh/server/maintenance/sysmonitor/sysmonitor_user_guide.md @@ -0,0 +1,803 @@ +# sysmonitor + +## 介绍 + +System Monitor Daemon + +sysmonitor 负责监控 OS 系统运行过程中的异常,将监控到的异常记录到系统日志(`/var/log/sysmonitor.log`)中。sysmonitor 以服务的形式提供,可以通过 `systemctl start|stop|restart|reload sysmonitor` 启动、关闭、重启、重载服务。建议产品部署 sysmonitor 调测软件,便于定位系统异常问题。 + +![](./figures/sysmonitor功能列表.png) + +### 注意事项 + +- sysmonitor 不支持并发执行。 +- 各配置文件须合法配置,否则可能造成监控框架异常。 +- sysmonitor 服务操作和配置文件修改,日志查询需要 root 权限。root 用户具有系统最高权限,在使用 root 用户进行操作时,请严格按照操作指导进行操作,避免不规范操作造成系统管理及安全风险。 + +### 配置总览 + +sysmonitor 有一个主配置文件(`/etc/sysconfig/sysmonitor`),用于配置各监控项的监控周期、是否需要监控。配置项的=和"之间不能有空格,如`PROCESS_MONITOR="on"`。 + +配置说明 + +| 配置项 | 配置项说明 | 是否必配 | 默认值 | +| ------------------------- | ------------------------------------------------------------ | -------- | -------------------------------------- | +| PROCESS_MONITOR | 设定是否开启关键进程监控,on为开启,off为关闭 | 否 | on | +| PROCESS_MONITOR_PERIOD | 设置关键进程监控的周期,单位秒 | 否 | 3s | +| PROCESS_RECALL_PERIOD | 关键进程恢复失败后再次尝试拉起周期,单位分,取值范围为1到1440之间的整数 | 否 | 1min | +| PROCESS_RESTART_TIMEOUT | 关键进程服务异常恢复过程中超时时间,单位秒,取值范围为30至300之间的整数 | 否 | 90s | +| PROCESS_ALARM_SUPRESS_NUM | 设置关键进程监控配置使用告警命令上报告警时的告警抑制次数,取值范围为正整数 | 否 | 5 | +| FILESYSTEM_MONITOR | 设定是否开启 ext3/ext4 文件系统监控,on 为开启,off 为关闭 | 否 | on | +| DISK_MONITOR | 设定是否开启磁盘分区监控,on为开启,off 为关闭 | 否 | on | +| DISK_MONITOR_PERIOD | 设定磁盘监控周期,单位秒 | 否 | 60s | +| INODE_MONITOR | 设定是否开启磁盘 inode 监控,on 为开启, off 为关闭 | 否 | on | +| INODE_MONITOR_PERIOD | 设定磁盘 inode 监控周期,单位秒 | 否 | 开启 | +| NETCARD_MONITOR | 设定是否开启网卡监控,on 为开启, off 为关闭 | 否 | on | +| FILE_MONITOR | 设定是否开启文件监控,on为开启, off 为关闭 | 否 | on | +| CPU_MONITOR | 设定是否开启 cpu 监控,on 为开启, off 为关闭 | 否 | on | +| MEM_MONITOR | 设定是否开启内存监控,on 为开启, off 为关闭 | 否 | on | +| PSCNT_MONITOR | 设定是否开启进程数监控,on为开启,off 为关闭 | 否 | on | +| FDCNT_MONITOR | 设定是否开启 fd 总数监控,on 为开启,off 为关闭 | 否 | on | +| CUSTOM_DAEMON_MONITOR | 用户自定义的 daemon类型的监控项,on为开启,off为关闭 | 否 | on | +| CUSTOM_PERIODIC_MONITOR | 用户自定义的 periodic 类型的监控项,on为开启, off 为关闭 | 否 | on | +| IO_DELAY_MONITOR | 本地磁盘 IO 延时监控开关,on 为开启,off 为关闭 | 否 | off | +| PROCESS_FD_NUM_MONITOR | 设定是否开启单个进程句柄数监控,on为开启,off 为关闭 | 否 | on | +| PROCESS_MONITOR_DELAY | sysmonitor 启动时,是否等待所有的监控项都正常,on为等待,off为不等待 | 否 | on | +| NET_RATE_LIMIT_BURST | 网卡监控路由信息打印抑制频率,即一秒内打印多少条日志 | 否 | 5
有效范围是 0-100,默认为5 | +| FD_MONITOR_LOG_PATH | 文件句柄监控日志文件 | 否 | 默认配置路径为 /var/log/sysmonitor.log | +| ZOMBIE_MONITOR | 僵尸进程监控开关 | 否 | off | +| CHECK_THREAD_MONITOR | 内部线程自愈开关,on为开启,off为关闭 | 否 | on
若不配置,默认值为开启 | +| CHECK_THREAD_FAILURE_NUM | 内部线程自愈的周期检查次数 | 否 | 默认值为3,范围为【2,10】 | + +- 修改 `/etc/sysconfig/sysmonitor` 配置文件后,需要重启 sysmonitor 服务生效。 +- 配置文件中,如果某一项没有配置,默认为监控项开启。 +- 内部线程自愈开启后,当监控项子线程卡住,且超过配置的周期检查次数,会重启 sysmonitor 服务,进行恢复,会重新加载配置,对于配置的关键进程监控和自定义监控,会重新拉起执行。如果对于用户使用有影响,可以选择关闭该功能。 + +### 命令参考 + +- 启动监控服务 + +``` shell +systemctl start sysmonitor +``` + +- 关闭监控服务 + +``` shell +systemctl stop sysmonitor +``` + +- 重启监控服务 + +``` shell +systemctl restart sysmonitor +``` + +- 修改监控项的配置文件后,重载监控服务可使修改后的配置动态生效 + +``` shell +systemctl reload sysmonitor +``` + +### 监控日志 + +在默认情况下,为了防止 sysmonitor.log 文件过大,提供了切分转储日志的机制。日志将被转储到磁盘目录下,这样就能够保持一定量的日志。 + +配置文件为`/etc/rsyslog.d/sysmonitor.conf`,因为增加了 rsyslog 配置文件,第一次安装 sysmonitor 后,需要重启 rsyslog 服务生效 sysmonitor 日志配置。 + +```sh +$template sysmonitorformat,"%TIMESTAMP:::date-rfc3339%|%syslogseverity-text%|%msg%\n" + +$outchannel sysmonitor, /var/log/sysmonitor.log, 2097152, /usr/libexec/sysmonitor/sysmonitor_log_dump.sh +if ($programname == 'sysmonitor' and $syslogseverity <= 6) then { +:omfile:$sysmonitor;sysmonitorformat +stop +} + +if ($msg contains 'Time has been changed') then { +:omfile:$sysmonitor;sysmonitorformat +stop +} + +if ($programname == 'sysmonitor' and $syslogseverity > 6) then { +/dev/null +stop +} +``` + +## ext3/ext4 文件系统监控 + +### 简介 + +当文件系统出现故障时会导致 IO 操作异常从而引发操作系统一系列问题。通过文件系统故障检测及时发现,以便于系统管理员或用户及时处理故障,修复问题。 + +### 配置文件说明 + +无 + +### 异常日志 + +对于增加了 errors=remount-ro 挂载选项的文件系统,如果监控到 ext3/ext4文件系统故障,sysmonitor.log 中打印异常信息示例如下: + +```sh +info|sysmonitor[127]: loop0 filesystem error. Remount filesystem read-only. +``` + +其他异常场景下,如果监控到 ext3/ext4 文件系统故障,sysmonitor.log 中打印异常信息示例如下: + +```sh +info|sysmonitor[127]: fs_monitor_ext3_4: loop0 filesystem error. flag is 1879113728. +``` + +## 关键进程监控 + +### 简介 + +定期监控系统中关键进程,当系统内关键进程异常退出时,自动尝试恢复关键进程。如果恢复失败并需要告警,可上报告警。系统管理员能被及时告知进程异常退出事件,以及进程是否被恢复拉起。问题定位人员能从日志中定位进程异常退出的时间。 + +### 配置文件说明 + +配置目录为`/etc/sysmonitor/process`, 每个进程或模块一个配置文件。 + +```sh +USER=root +NAME=irqbalance +RECOVER_COMMAND=systemctl restart irqbalance +MONITOR_COMMAND=systemctl status irqbalance +STOP_COMMAND=systemctl stop irqbalance +``` + +各配置项如下: + +| 配置项 | 配置项说明 | 是否必配 | 默认值 | +| ---------------------- | ------------------------------------------------------------ | -------- | --------------------------------------------------- | +| NAME | 进程或模块名 | 是 | 无 | +| RECOVER_COMMAND | 恢复命令 | 否 | 无 | +| MONITOR_COMMAND | 监控命令
命令返回值为0视为进程正常,命令返回大于 0视为进程异常 | 否 | pgrep -f $(which xxx) "xxx"为NAME字段中配置的进程名 | +| STOP_COMMAND | 停止命令 | 否 | 无 | +| USER | 用户名
使用指定的用户执行、监控、恢复、停止命令或脚本 | 否 | 如果配置项为空,则默认使用 root | +| CHECK_AS_PARAM | 参数传递开关
开关设置为 on 时,在执行 RECOVER_COMMAND 命令时,会将 MONITOR_COMMAND 的返回值作为入参,传给 RECOVER_COMMAND 命令或脚本。 开关为 off 或其他时,功能关闭 | 否 | 无 | +| MONITOR_MODE | 监控模式
- 配置为 parallel,并行监控
- 配置为 serial,串行监控 | 否 | serial | +| MONITOR_PERIOD | 监控周期
- 并行监控监控周期
- 监控模块配置为 serial,该配置项不生效 | 否 | 3 | +| USE_CMD_ALARM | 告警模式
配置为 on 或 ON,则使用告警命令上报告警 | 否 | 无 | +| ALARM_COMMAND | 上报告警命令 | 否 | 无 | +| ALARM_RECOVER_COMMAND | 恢复告警命令 | 否 | 否 | + +- 修改关键进程监控的配置文件后,须执行 `systemctl reload sysmonitor`, 新的配置在一个监控周期后生效。 +- 恢复命令和监控命令不阻塞,否则会造成关键进程监控线程异常。 +- 当恢复命令执行超过 90 s时,会调用停止命令终止进程。 +- 当恢复命令配置为空或不配置时,监控命令检查到关键进程异常时,不会尝试进行拉起。 +- 当关键进程异常时,并且尝试拉起三次都不成功,最终会按照全局配置文件中配置的 PROCESS_RECALL_PERIOD 周期进行拉起。 +- 当监控的进程不是 daemon 进程,MONITOR_COMMAND 必配。 +- 若配置的关键服务在当前系统上不存在,则该监控不会生效,日志中会有相应提示;其他配置项,出现致命性错误,将使用默认配置,不报错。 +- 配置文件权限为 600,监控项建议为 systemd 中的 service类型(如 MONITOR_COMMAND=systemctl status irqbalance), 若监控的为进程,请确保 NAME 字段为绝对路径。 +- sysmonitor 重启(restart)、重载(reload)、退出(stop)都不会影响所监控的进程或服务。 +- 若 USE_CMD_ALARM 的配置为 on,ALARM_COMMAND、ALARM_RECOVER_COMMAND 的配置由用户保障。ALARM_COMMAND、ALARM_RECOVER_COMMAND 为空或没有配置,则不上报告警。 +- 对于用户自行配置的命令,如监控命令,恢复命令,停止命令,上报告警命令,恢复告警命令等,命令的安全性由用户保证。命令由 root 权限执行,建议脚本命令权限设置为仅供 root 使用,避免普通用户提权风险。 +- 配置监控命令的长度不大于200,大于 200,添加进程监控失败。 +- 当恢复命令配置为 systemd 的重启服务命令时(如`RECOVER_COMMAND=systemctl restart irqbalance`),需注意是否与开源 systemd 恢复服务的机制冲突,否则可能会影响关键进程异常后的行为模式。 +- 由 sysmonitor 恢复拉起的进程将和 sysmonitor 服务在同一个 Cgroup 当中,无法单独进行资源限制,因此建议优先使用开源 systemd 机制进行恢复。 + +### 异常日志 + +- 配置 RECOVER_COMMAND + + 如果监控到进程或模块异常,/var/log/sysmonitor.log 中打印异常信息示例如下: + + ```sh + info|sysmonitor[127]: irqbalance is abnormal, check cmd return 1, use "systemctl restart irqbalance" to recover + ``` + + 如果监控到进程或模块恢复正常,/var/log/sysmonitor.log 中打印日志示例如下: + + ```h + info|sysmonitor[127]: irqbalance is recovered + ``` + +- 不配置 RECOVER_COMMAND + + 如果监控到进程或模块异常,/var/log/sysmonitor.log 中打印异常信息示例如下: + + ```h + info|sysmonitor[127]: irqbalance is abnormal, check cmd return 1, recover cmd is null, will not recover + ``` + + 如果监控到进程或模块恢复正常,/var/log/sysmonitor.log 中打印日志示例如下: + + ```h + info|sysmonitor[127]: irqbalance is recovered + ``` + +## 文件监控 + +### 简介 + +系统关键文件被意外删除后,会导致系统运行异常甚至崩溃。通过文件监控可以及时获知系统中关键文件被删除或者有恶意文件被添加,以便管理员和用户及时获知并处理故障。 + +### 配置文件说明 + +配置文件为 `/etc/sysmonitor/file`。每个监控配置项为一行,监控配置项包含两个内容:监控文件(目录)和监控事件。监控文件(目录)是绝对路径,监控文件(目录)和监控事件中间由一个或多个空格隔开。 + +配置文件支持在`/etc/sysmonitor/file.d` 目录下增加文件监控项配置,配置方法与 `/etc/sysmoitor/file` 相同。 + +- 由于日志长度限制,建议配置的文件和目录绝对路径长度小于 223。如果配置的监控对象绝对路径长度超过223,可能会有日志打印不完整的现象出现。 + +- 请用户自行确保监控文件路径正确,如果配置文件不存在或路径错误则无法监控到该文件。 + +- 由于系统路径长度限制,监控的文件或目录绝对路径长度必须小于 4096。 + +- 支持监控目录和常规文件,/proc 和 /proc/* /dev和/dev/* /sys和/sys/* 管道文件 socket 文件等均不支持监控。 + +- /var/log 和 /var/log/* 均只支持删除事件。 + +- 当配置文件中存在多个相同路径的时候,以第一条合法配置为准,其他相同配置均不生效。在日志文件中可以查看到其他相同配置被忽略的提示。 + +- 不支持对软链接配置监控;当配置硬链接文件的删除事件时,需删除该文件和它的全部硬链接才会打印文件删除事件。 + +- 当文件添加监控成功及监控的事件发生时,监控日志打印的是配置文件中路径的绝对路径。 + +- 目前暂不支持目录递归监控,只能监控配置文件中的目录,子目录不会监控。 + +- 监控文件(目录)采用了位图的方式配置要监控的事件,对文件或目录进行监控的事件位图如下所示: + +```sh + ------------------------------- + | 11~32 | 10 | 9 | 1~8 | + ------------------------------- +``` + +事件位图每一位代表一个事件,第N位如果置1,则表示监控第n位对应的事件;如果第 n 位置 0,则表示不监控第 n 位对应的事件。监控位图对应的 16 进制数,即是写到配置文件中的监控事件项。 + +| 配置项 | 配置项说明 | 是否必配 | +| ------ | ------------------ | -------- | +| 1~8 | 保留 | 否 | +| 9 | 文件、目录添加事件 | 是 | +| 10 | 文件、目录删除事件 | 是 | +| 11~32 | 保留 | 否 | + +- 修改文件监控的配置文件后,须执行`systemctl reload sysmonitor`,新的配置在最多 60 秒后生效。 +- 监控事件需要严格遵守上述规则,如果配置有误,则无法监控;如果配置项中监控事件为空,则默认只监控删除事件,即 0x200。 +- 文件或目录删除后,只有当所有打开该文件的进程都停止后才会上报删除事件。 +- 监控的文件通过 vi、sed 等操作修改后会在监控日志中打印 File "XXX" may have been changed。 +- 文件监控目前实现了对添加和删除事件的监控,即第9位和第10位有效,其他位为保留位,暂不生效。如果配置了保留位,监控日志会提示监控事件配置错误。 + +**示例** + +配置对 /home 下子目录的增加和删除事件监控,低12 位位图为:001100000000,则可以配置如下: + +```sh +/home 0x300 +``` + +配置对 /etc/ssh/sshd_config 文件的删除事件监控,低12位位图为:001000000000,则可以配置如下: + +```sh +/etc/sshd/sshd_config 0x200 +``` + +### 异常日志 + +如果监控文件有配置的事件发生,/var/log/sysmonitor.log 中打印日志示例如下: + +```sh +info|sysmonitor[127]: 1 events queued +info|sysmonitor[127]: 1th events handled +info|sysmonitor[127]: Subfile "111" under "/home" was added. +``` + +## 磁盘分区监控 + +### 简介 + +定期监控系统中挂载的磁盘分区空间,当磁盘分区使用率大于或等于用户设置的告警阈值时,记录磁盘空间告警。当磁盘分区使用率小于用户设置的告警恢复阈值时,记录磁盘空间恢复告警。 + +### 配置文件说明 + +配置文件为 `/etc/sysmonitor/disk`。 + +```sh +DISK="/var/log" ALARM="90" RESUME="80" +DISK="/" ALARM="95" RESUME="85" +``` + +| 配置项 | 配置项说明 | 是否必配 | 默认值 | +| ------ | ---------------------- | -------- | ------ | +| DISK | 磁盘挂载目录名 | 是 | 无 | +| ALARM | 整数,磁盘空间告警阈值 | 否 | 90 | +| RESUME | 整数,磁盘空间恢复阈值 | 否 | 80 | + +- 修改磁盘空间监控的配置文件后,须执行 systemctl reload sysmonitor,新的配置在一个监控周期后生效。 +- 重复配置的挂载目录,最后一个配置项生效。 +- ALARM 值应该大于 RESUME 值。 +- 只能针对挂载点或被挂载点的磁盘分区做监控。 +- 在 CPU 和 IO 高压场景下,df 命令执行超时,会导致磁盘利用率获取不到。 +- 当多个挂载点对应同一个磁盘分区时,以挂载点为准来上报告警。 + +### 异常日志 + +如果监控到磁盘空间告警,`/var/log/sysmonitor.log`中打印信息示例如下: + +```sh +warning|sysmonitor[127]: report disk alarm, /var/log used:90% alarm:90% +info|sysmonitor[127]: report disk recovered, /var/log used:4% resume:10% +``` + +## 网卡状态监控 + +### 简介 + +系统运行过程中可能出现人为原因或异常而导致网卡状态或 IP 发生改变,对网卡状态和 IP 变化进行监控,以便及时感知到异常并方便定位异常原因。 + +### 配置文件说明 + +配置文件为 `/etc/sysmonitor/network`。 + +```sh +#dev event +eth1 UP +``` + +各配置项说明如下表 +| 配置项 | 配置项说明 | 是否必配 | 默认值 | +| ------ | ------------------------------------------------------------ | -------- | ------------------------------------------------- | +| dev | 网卡名 | 是 | 无 | +| event | 侦听事件,可取 UP, DOWN,NEWADDR, DELADDR.
- UP: 网卡 UP
- DOWN: 网卡 DOWN
- NEWADDR: 增加 ip 地址
- DELADDR: 删除 ip 地址 | 否 | 若侦听事件为空则 UP,DOWN,NEWADDR,DELADDR都监控 | + +- 修改网卡监控的配置文件后,执行 `systemctl reload sysmonitor`,新的配置生效。 +- 不支持虚拟网卡 UP 和 DOWN 状态监控。 +- 请确保网卡监控的配置文件每行少于 4096 个字符,若超过4096个字符会在监控日志中打印配置错误的提示信息。 +- 默认监控所有网卡的所有事件信息,即不配置任何网卡,默认监控所有网卡的 UP,DOWN,NEWADDR,DELADDR 事件。 +- 如果配置网卡,不配置事件,则默认监控改网卡的所有事件。 +- 增加路由信息,默认一秒五条,可通过/etc/sysconfig/sysmonitor 的 NET_RATE_LIMIT_BURST 配置选项配置一秒钟打印路由信息数量。 + +### 异常日志 + +如果监控到配置的网卡事件,`/var/log/sysmonitor.log` 中打印信息示例如下: + +```sh +info|sysmonitor[127]: lo: ip[::1] prefixlen[128] is added, comm: (ostnamed)[1046], parent comm: syst emd[1] +info|sysmonitor[127]: lo: device is up, comm: (ostnamed)[1046], parent comm: systemd[1] + +``` + +如果监控到路由事件, `/var/log/sysmonitor.log` 中打印信息示例如下: + +```sh + +info|sysmonitor[881]: Fib4 replace table=255 192.168.122.255/32, comm: daemon-init[1724], parent com m: systemd[1] +info|sysmonitor[881]: Fib4 replace table=254 192.168.122.0/24, comm: daemon-init[1724], parent comm: systemd[1] +info|sysmonitor[881]: Fib4 replace table=255 192.168.122.0/32, comm: daemon-init[1724], parent comm: systemd[1] +info|sysmonitor[881]: Fib6 replace fe80::5054:ff:fef6:b73e/128, comm: kworker/1:3[209], parent comm: kthreadd[2] + +``` + +## cpu 监控 + +### 简介 + +监控系统全局或指定域内 cpu 的占用情况,当 cpu 使用率超出用户设置的告警阈值时,执行用户配置的日志收集命令。 + +### 配置文件说明 + +配置文件为`/etc/sysmonitor/cpu`。 + +当监控系统全局 cpu 时,配置文件示例如下: + +```sh +# cpu usage alarm percent +ALARM="90" + +# cpu usage alarm resume percent +RESUME="80" + +# monitor period (second) +MONITOR_PERIOD="60" + +# stat period (second) +STAT_PERIOD="300" + +# command executed when cpu usage exceeds alarm percent +REPORT_COMMAND="" +``` + +当监控系统指定域 cpu 时,配置文件示例如下: + +```sh +# monitor period (second) +MONITOR_PERIOD="60" + +# stat period (second) +STAT_PERIOD="300" + +DOMAIN="0,1" ALARM="90" RESUME="80" +DOMAIN="2,3" ALARM="50" RESUME="40" + +# command executed when cpu usage exceeds alarm percent +REPORT_COMMAND="" +``` + +| 配置项 | 配置项说明 | 是否必配 | 默认值 | +| -------------- | ------------------------------------------------------------ | -------- | ------ | +| ALARM | 大于0,cpu 使用率告警阈值 | 否 | 90 | +| RESUME | 大于等于0,cpu 使用率恢复阈值 | 否 | 80 | +| MONITOR_PERIOD | 监控周期(秒),取值大于0 | 否 | 60 | +| STAT_PERIOD | 统计周期(秒),取值大于0 | 否 | 300 | +| DOMAIN | 域内的 cpu 信号,cpu 号均以十进制数字表示
- 可以通过列举方式指定,cpu 号之间通过逗号分隔,例如:1,2,3。也可以通过范围方式指定,格式 X-Y(X- 每个监控域单独一个配置项,每个项支持最多配置 256 个 cpu,域内以及域之间 cpu 号均不能重复 | 否 | 无 | +| REPORT_COMMAND | cpu 使用率超过告警阈值后的日志收集命令 | 否 | 无 | + +- 修改 cpu 监控的配置文件后,须执行 systemctl reload sysmonitor, 新的配置在一个监控周期后生效。 +- ALARM 值应该大于 RESUME 值。 +- 当配置监控 cpu 域后,不再对系统全局 cpu 平均使用率进行监控,单独配置的 ALARM、RESUME 值不生效。 +- 如果某个监控域的配置存在非法,则整个 cpu 监控不执行。 +- DOMAIN 内配置的 cpu 必须全部处于在线工作状态,否则对该域的监控无法正常进行。 +- REPORT_COMMAND 项的命令不能包含 &、;、> 等不安全字符且总长度不能超过 159个字符,否则命令无法生效。 +- REPORT_COMMAND 项的命令安全性、有效性由用户自己保证,sysmonitor 只负责以 root 用户执行该命令。 +- REPORT_COMMAND 项的命令不能阻塞,当该命令执行时间超过 60s后,sysmonitor 会强行终止执行。 +- 每轮监控即使有多个域 cpu 使用率超过阈值,REPORT_COMMAND 也仅会执行一次。 + +### 异常日志 + +如果监控到全局 cpu 使用率告警或恢复且配置了日志收集命令,`/var/log/sysmonitor.log` 中打印信息示例如下: + +```sh +info|sysmonitor[127]: CPU usage alarm: 91.3% +info|sysmonitor[127]: cpu monitor: execute REPORT_COMMAND[sysmoniotrcpu] sucessfully +info|sysmonitor[127]: CPU usage resume 70.1% +``` + +如果监控到某个域的 cpu 平均使用率告警或恢复且配置了日志收集命令,`/var/log/sysmonitor.log` 中打印信息示例如下: + +```sh +info|sysmonitor[127]: CPU 1,2,3 usage alarm: 91.3% +info|sysmonitor[127]: cpu monitor: execute REPORT_COMMAND[sysmoniotrcpu] sucessfully +info|sysmonitor[127]: CPU 1,2,3 usage resume 70.1% +``` + +## 内存监控 + +### 简介 + +监控系统内存占用情况,当内存使用率超出或低于阈值时,记录日志。 + +### 配置文件说明 + +配置文件为 `/etc/sysmonitor/memory`。 + +```sh +# memory usage alarm percent +ALARM="90" + +# memory usage alarm resume percent +RESUME="80" + +# monitor period(second) +PERIOD="60" +``` + +### 配置项说明 + +| 配置项 | 配置项说明 | 是否必配 | 默认值 | +| ------ | ----------------------------- | -------- | ------ | +| ALARM | 大于0,内存占用率告警阈值 | 否 | 90 | +| RESUME | 大于等于0,内存占用率恢复阈值 | 否 | 80 | +| PERIOD | 监控周期(秒),取值大于 0 | 否 | 60 | + +- 修改内存监控的配置文件后,须执行 `systemctl reload sysmonitor`,新的配置在一个监控周期后生效。 +- ALARM 值应该大于 RESUME值。 +- 取三个监控周期的内存占用的平均值,来作为是否上报发生告警或恢复告警的依据。 + +### 异常日志 + +如果监控到内存告警,sysmonitor 获取 `/proc/meminfo`信息,打印到`/var/log/sysmonitor.log` 中,信息如下: + +```sh +info|sysmonitor[127]: memory usage alarm: 90% +info|sysmonitor[127]:---------------show /proc/meminfo: --------------- +info|sysmonitor[127]:MemTotal: 3496388 kB +info|sysmonitor[127]:MemFree: 2738100 kB +info|sysmonitor[127]:MemAvailable: 2901888 kB +info|sysmonitor[127]:Buffers: 165064 kB +info|sysmonitor[127]:Cached: 282360 kB +info|sysmonitor[127]:SwapCached: 4492 kB +...... +info|sysmonitor[127]:---------------show_memory_info end. --------------- +``` + +sysmonitor 有如下打印信息时,表示 sysmonitor 会调用 "echo m > /proc/sysrq-trigger" 命令导出内存分配的信息(可以在 /var/log/messages 中进行查看)。 + +```sh +info|sysmonitor[127]: sysrq show memory ifno in message。 +``` + +告警恢复时,打印信息如下: + +```sh +info|sysmonitor[127]: memory usage resume: 4.6% +``` + +## 进程数/线程数监控 + +### 简介 + +监控系统进程数目和线程数目,当进程总数或线程总数超出或低于阈值时,记录日志或上报告警。 + +### 配置文件说明 + +配置文件为 `/etc/sysmonitor/pscnt`。 + +```sh +# number of processes(include threads) when alarm occur +ALARM="1600" + +# number of processes(include threads) when alarm resume +RESUME="1500" + +# monitor period(second) +PERIOD="60" + +# process count usage alarm percent +ALARM_RATIO="90" + +# process count usage resume percent +RESUME_RATIO="80" + +# print top process info with largest num of threads when threads alarm +# (range: 0-1024, default: 10, monitor for thread off:0) +SHOW_TOP_PROC_NUM="10" +``` + +| 配置项 | 配置项说明 | 是否必配 | 默认值 | +| ----------------- | ------------------------------------------------------------ | -------- | ------ | +| ALARM | 大于 0 的整数,进程总数告警阈值 | 否 | 1600 | +| RESUME | 大于等于0的整数,进程总数恢复阈值 | 否 | 1500 | +| PERIOD | 监控周期(秒),取值大于0 | 否 | 60 | +| ALARM_RATIO | 大于0小于等于100的值,可以为小数。进程使用率告警阈值 | 否 | 90 | +| RESUME_RATIO | 大于等于0小于100的值,可以为小数。进程使用率恢复阈值,必须必告警阈值小。 | 否 | 80 | +| SHOW_TOP_PROC_NUM | 使用线程数量最新 TOP 的进程信息 | 否 | 10 | + +- 修改进程数监控的配置文件后,须执行`systemctl reload sysmonitor`,新的配置在一个监控周期后生效。 +- ALARM 值应该大于 RESUME 值。 +- 进程数告警产生阈值取 ALARM 值与 `/proc/sys/kernel/pid_max` 的 ALARM_RATIO 中的最大值,告警恢复阈值取 RESUME 值与 `/proc/sys/kernel/pid_max` 的 RESUME_RATIO 中的最大值。 +- 线程数告警产生阈值取 ALARM 值与 `/proc/sys/kernel/threads-max` 的 ALARM_RATIO 中的最大值,告警恢复阈值取 RESUME 值与 `/proc/sys/kernel/threads-max` 的 RESUME_RATIO 中的最大值。 +- SHOW_TOP_PROC_NUM 的取值范围为0-1024,为0时,表示不启用线程监控;当设置值较大时,如 1024,在环境中产生线程告警,且告警阈值较高时,会有性能影响,建议设置为默认值 10 及更小值,若影响较大,建议设置为 0,不启动线程监控。 +- 线程监控启动时,由 `/etc/sysconfig/sysmonitor` 中 `PSCNT_MONITOR` 项和 `/etc/sysmonitor/pscnt` 中 `SHOW_TOP_PROC_NUM` 项设置。 + - `PSCNT_MONITOR` 为 on,且 `SHOW_TOP_PROC_NUM` 设置为合法值时,为启动。 + - `PSCNT_MONITOR` 为 on, `SHOW_TOP_PROC_NUM` 为 0时,为关闭。 + - `PSCNT_MONITOR`为 off,为关闭。 +- 进程数量告警时,增加打印系统句柄使用信息和内存信息(/proc/meminfo)。 +- 线程数量告警时,会记录线程总数信息,TOP 进程信息,当前环境进程数量信息,系统句柄数信息,内存信息(/proc/meminfo)。 +- 监控项监控周期到达前,若系统出现资源不足(如线程数超过系统最大线程数),则监控告警本身将由于资源受限无法正常运行,进而无法进行告警。 + +### 异常日志 + +如果监控到进程数告警,`/var/log/sysmonitor.log` 中打印信息示例如下: + +```sh +info|sysmonitor[127]:---------------process count alarm start: --------------- +info|sysmonitor[127]: process count alarm:1657 +info|sysmonitor[127]: process count alarm, show sys fd count: 2592 +info|sysmonitor[127]: process count alarm, show mem info +info|sysmonitor[127]:---------------show /proc/meminfo: --------------- +info|sysmonitor[127]:MemTotal: 3496388 kB +info|sysmonitor[127]:MemFree: 2738100 kB +info|sysmonitor[127]:MemAvailable: 2901888 kB +info|sysmonitor[127]:Buffers: 165064 kB +info|sysmonitor[127]:Cached: 282360 kB +info|sysmonitor[127]:SwapCached: 4492 kB +...... +info|sysmonitor[127]:---------------show_memory_info end. --------------- +info|sysmonitor[127]:---------------process count alarm end: --------------- + +``` + +如果监控到进程数恢复告警,`/var/log/sysmonitor.log` 中打印信息示例如下: + +```sh +info|sysmonitor[127]: process count resume: 1200 +``` + +如果监控到线程数告警,`/var/log/sysmonitor.log` 中打印信息示例如下: + +```sh +info|sysmonitor[127]:---------------threads count alarm start: --------------- +info|sysmonitor[127]:threads count alarm: 273 +info|sysmonitor[127]:open threads most 10 processes is [top1:pid=1756900,openthreadsnum=13,cmd=/usr/bin/sysmonitor --daemon] +info|sysmonitor[127]:open threads most 10 processes is [top2:pid=3130,openthreadsnum=13,cmd=/usr/lib/gassproxy -D] +..... +info|sysmonitor[127]:---------------threads count alarm end. --------------- +``` + +## 系统句柄总数监控 + +### 简介 + +监控系统文件句柄(fd)数目,当系统文件句柄总数超过或低于阈值时,记录日志。 + +### 配置文件说明 + +配置文件为 `/etc/sysmonitor/sys_fd_conf`。 + +```sh +# system fd usage alarm percent +SYS_FD_ALARM="80" +# system fd usage alarm resume percent +SYS_FD_RESUME="70" +# monitor period (second) +SYS_FD_PERIOD="600" +``` + +配置项说明: + +| 配置项 | 配置项说明 | 是否必配 | 默认值 | +| ------------- | --------------------------------------------------------- | -------- | ------ | +| SYS_FD_ALARM | 大于0小于100的整数,fd总数与系统最大 fd数百分比的告警阈值 | 否 | 80% | +| SYS_FD_RESUME | 大于0小于100的整数,fd 总数与系统最大fd数百分比的恢复阈值 | 否 | 70% | +| SYS_FD_PERIOD | 监控周期(秒),取值为100~86400 之间的整数 | 否 | 600 | + +- 修改fd 总数监控的配置文件后,须执行 `systemctl reload sysmonitor`,新的配置在一个监控周期后生效。 +- `SYS_FD_ALARM` 值应该大于 `SYS_FD_RESUME` 值,当配置非法时,会使用默认值,并打印日志。 + +### 异常日志 + +如果监控到 fd 总数告警,在监控日志中打印告警。`/var/log/sysmonitor.log` 中打印信息示例如下: + +```sh +info|sysmonitor[127]: sys fd count alarm: 259296 +``` + +系统句柄使用告警时,会打印前三个使用句柄数最多的进程: + +```sh +info|sysmonitor[127]:open fd most three processes is:[top1:pid=23233,openfdnum=5000,cmd=/home/openfile] +info|sysmonitor[127]:open fd most three processes is:[top2:pid=23267,openfdnum=5000,cmd=/home/openfile] +info|sysmonitor[127]:open fd most three processes is:[top3:pid=30144,openfdnum=5000,cmd=/home/openfile] +``` + +## 磁盘 inode 监控 + +### 简介 + +定期监控系统中挂载的磁盘分区 inode,当磁盘分区 inode 使用率大于或等于用户设置的告警阈值,记录磁盘 inode 告警。发生告警后,当磁盘分区 inode 使用率小于用户设置的告警恢复阈值,记录磁盘 inode 恢复告警。 + +### 配置文件说明 + +配置文件为 `/etc/sysmonitor/inode`。 + +```sh +DISK="/" +DISK="/var/log" +``` + +| 配置项 | 配置项说明 | 是否必配 | 默认值 | +| ------ | ------------------------- | -------- | ------ | +| DISK | 磁盘挂载目录名 | 是 | 无 | +| ALARM | 整数,磁盘 inode 告警阈值 | 否 | 90 | +| RESUME | 整数,磁盘 inode 恢复阈值 | 否 | 80 | + +- 修改磁盘 inode 监控的配置文件后,须执行 `systemctl reload sysmonitor`,新的配置在一个监控周期后生效。 +- 重复配置的挂载目录,最后一个配置项生效。 +- ALARM 值应该大于 RESUME 值。 +- 只能针对挂载点或被挂载的磁盘分区做监控。 +- 在 CPU 和 IO 高压场景下,df 执行命令超时,会导致磁盘 inode 利用率获取不到。 +- 当多个挂载点对应同一个磁盘分区,以挂载点为准来上报告警。 + +### 异常日志 + +如果监控到磁盘 inode 告警,`/var/log/sysmonitor.log`中打印信息示例如下: + +```sh +info|sysmonitor[4570]:report disk inode alarm, /var/log used:90% alarm:90% +info|sysmonitor[4570]:report disk inode recovered, /var/log used:79% alarm:80% +``` + +## 本地磁盘 io 延时监控 + +### 简介 + +每5秒读取一次本地磁盘 io 延时数据,每五分钟对在该五分钟内60组数据进行统计,如果有多于30次(一半)的数据大于配置的最大 IO 延时数据,则记录该磁盘的 IO 延时过大日志。 + +### 配置文件说明 + +配置文件为 `/etc/sysmonitor/iodelay`。 + +```sh +DELAY_VALUE="500" +``` + +| 配置项 | 配置项说明 | 是否必配 | 默认值 | +| ----------- | -------------------- | -------- | ------ | +| DELAY_VALUE | 磁盘 IO 延时的最大值 | 是 | 500 | + +### 异常日志 + +如果监控到本地磁盘 IO 延时过大告警,`/var/log/sysmonitor.log` 中打印信息示例如下: + +```sh +info|sysmonitor[127]:local disk sda IO delay is too large, I/O delay threshold is 70. +info|sysmonitor[127]:disk is sda, io delay data: 71 72 75 87 99 29 78 ...... +``` + +如果监控到本地磁盘 IO 延时告警恢复,`/var/log/sysmonitor.log` 中打印信息示例如下: + +```sh +info|sysmonitor[127]:local disk sda IO delay is normal, I/O delay threshold is 70. +info|sysmonitor[127]:disk is sda, io delay data: 11 22 35 8 9 29 38 ...... +``` + +## 僵尸进程监控 + +### 简介 + +监控系统僵尸进程数量,大于告警阈值,记录告警日志。当系统僵尸进程数小于恢复阈值时,告警恢复。 + +### 配置文件说明 + +配置文件为`/etc/sysmonitor/zombie`。 + +```sh +# Ceiling zombie process counts of alarm +ALARM="500" + +# Floor zombie process counts of resume +RESUME="400" + +# Periodic (second) +PERIOD="600" +``` + +| 配置项 | 配置项说明 | 是否必配 | 默认值 | +| ------ | ------------------------------- | -------- | ------ | +| ALARM | 大于0,僵尸进程个数告警阈值 | 否 | 500 | +| RESUME | 大于等于0,僵尸进程个数恢复阈值 | 否 | 400 | +| PERIOD | 监控周期(秒),取值大于0 | 否 | 60 | + +### 异常日志 + +如果监控到僵尸进程个数告警,`/var/log/sysmonitor.log`中打印信息如下: + +```sh +info|sysmonitor[127]: zombie process count alarm: 600 +info|sysmonitor[127]: zombie process count resume: 100 +``` + +## 自定义监控 + +### 简介 + +用户可以自定义监控项,监控框架读取配置文件内容,解析配置文件各监控属性,在监控框架里调用用户要执行的监控动作。监控模块仅提供监控框架,不感知用户在监控的内容以及如何监控,不负责上报告警。 + +### 配置文件说明 + +配置文件位于`/etc/sysmonitor.d/`路径下,每个进程或模块对应一个配置文件。 + +```sh +MONITOR_SWITCH="on" +TYPE="periodic" +EXECSTART="/usr/sbin/iomonitor_daemon" +PERIOD="1800" +``` + +| 配置项 | 配置项说明 | 是否必配 | 默认值 | +| -------------- | ------------------------------------------------------------ | --------------------- | ------ | +| MONITOR_SWITCH | 监控开关 | 否 | off | +| TYPE | 自定义监控项的类型
daemon:后台运行
periodic:周期运行 | 是 | 无 | +| EXECSTART | 执行监控命令 | 是 | 无 | +| ENVIROMENTFILE | 环境变量存放文件 | 否 | 无 | +| PERIOD | 若 type 为 periodic 类型,此为必配项,为自定义监控的周期,取值为大于0的整数 | periodic 类型为必配项 | 无 | + +- 配置文件名称,环境变量文件名称,加上绝对路径总长度不能超过127个字符。环境变量文件必须为绝对路径和实际路径,不能是软链接路径。 +- EXECSTART项的命令总长度不能超过159个字符,关键字段配置不能有空格。 +- 周期性监控的执行命令不能超时,否则对自定义监控框架产生影响。 +- 目前支持配置的环境变量最多为256个。 +- daemon 类型的自定义监控每间隔10s会统一查询是否有 reload 命令下发,或者是否有 daemon 进程异常退出;如果有reload 命令下发,需要等待 10s 后才会重新加载新的配置,如果有 daemon 进程异常退出,需要等待 10s才会重新拉起。 +- ENVIROMENTFLE 对应的文件中的内容发生变化,如新增环境变量,或环境变量的值发生变化,需要重启 sysmonitor 服务,新的环境变量才能生效。 +- `/etc/sysmonitor.d/`目录下的配置文件权限建议为 600, EXECSTART 项中若只配置了执行文件,则执行文件的权限建议为 550。 +- daemon 进程异常退出后,sysmonitor 会重新加载该 daemon进程的配置文件。 + +### 异常日志 + +如果 daemon 类型监控项异常退出,/var/log/sysmonitor.log 中会有如下记录: + +```sh +info|sysmonitor[127]: custom daemon monitor: child process[11609] name unetwork_alarm exit code[127],[1] times. +``` diff --git a/docs/zh/server/maintenance/troubleshooting/_toc.yaml b/docs/zh/server/maintenance/troubleshooting/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e29f50bc462469cb81a770b4c892097ec365456a --- /dev/null +++ b/docs/zh/server/maintenance/troubleshooting/_toc.yaml @@ -0,0 +1,5 @@ +isManual: true +label: '' +sections: + - label: 故障应急处理 + href: ./troubleshooting.md diff --git a/docs/zh/server/maintenance/troubleshooting/images/c50cb9df64f4659787c810167c89feb4_1884x257.png b/docs/zh/server/maintenance/troubleshooting/images/c50cb9df64f4659787c810167c89feb4_1884x257.png new file mode 100644 index 0000000000000000000000000000000000000000..01081f25627731c56764c196e3fae32d55bc7023 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/c50cb9df64f4659787c810167c89feb4_1884x257.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001321685172.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001321685172.png new file mode 100644 index 0000000000000000000000000000000000000000..a98265bdf251608c0ff394fefe545cd3192bdb28 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001321685172.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001322112990.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001322112990.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4b32bf2b36595abe10f2550cda5714bc355553 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001322112990.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001322219840.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001322219840.png new file mode 100644 index 0000000000000000000000000000000000000000..48b28664df46ddf9aa38c7570bb9e9edb8080ac9 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001322219840.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001322372918.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001322372918.png new file mode 100644 index 0000000000000000000000000000000000000000..5424367c9bc564e713220ba87f963096881833b8 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001322372918.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001322379488.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001322379488.png new file mode 100644 index 0000000000000000000000000000000000000000..8b18cdca066be43b74443498edc5500ea9e1e608 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001322379488.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001335457246.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001335457246.png new file mode 100644 index 0000000000000000000000000000000000000000..325d6a8ce097db0b92b1a883bc4b3d4ad0bc6a49 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001335457246.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001335816300.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001335816300.png new file mode 100644 index 0000000000000000000000000000000000000000..619f0c33503cd27d92f227216c722d554b9132f2 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001335816300.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001336448570.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001336448570.png new file mode 100644 index 0000000000000000000000000000000000000000..4bd494d78d83fef2e8a89c80e17c9b6db892a2e9 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001336448570.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001336729664.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001336729664.png new file mode 100644 index 0000000000000000000000000000000000000000..4d73507cceab2e0b123d6864d9f86c86eb1eee2f Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001336729664.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337000118.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337000118.png new file mode 100644 index 0000000000000000000000000000000000000000..37131647778506f24be4ff401392a9cc209a36eb Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337000118.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337039920.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337039920.png new file mode 100644 index 0000000000000000000000000000000000000000..40c07e9b6ec27cdbe47d39788736b892f1174cc8 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337039920.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337051916.jpg b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337051916.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a2083b7783041884394f796222352d8772ada6cc Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337051916.jpg differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337053248.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337053248.png new file mode 100644 index 0000000000000000000000000000000000000000..8859f37749a4f8a4394e24ddfb54fc473e8c10c2 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337053248.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337172594.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337172594.png new file mode 100644 index 0000000000000000000000000000000000000000..4e806f83c57880543a777807778f14eeb0105aba Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337172594.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337212144.jpg b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337212144.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6f0874250475f598efa7375516109b540918fb8 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337212144.jpg differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337260780.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337260780.png new file mode 100644 index 0000000000000000000000000000000000000000..09d521d933f5fa0caacc592ea92acee959786051 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337260780.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337268560.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337268560.png new file mode 100644 index 0000000000000000000000000000000000000000..663f67428487d88e23aa9c3291c31399fec2f2c3 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337268560.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337268820.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337268820.png new file mode 100644 index 0000000000000000000000000000000000000000..cd1732ee870a6dde0acc54642f34793933ce3356 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337268820.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337419960.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337419960.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b493bf1e57f130e122b59e99ff45cd44539dad Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337419960.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337420372.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337420372.png new file mode 100644 index 0000000000000000000000000000000000000000..2300bcd7426748236fd48b85688bd3d1fa3315df Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337420372.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337422904.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337422904.png new file mode 100644 index 0000000000000000000000000000000000000000..01e250c6f7cbb64abe0b136cd80fda7ae68b629d Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337422904.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337424024.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337424024.png new file mode 100644 index 0000000000000000000000000000000000000000..6532d98885f756c6704bc4bacc0f9133d78405a7 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337424024.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337424304.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337424304.png new file mode 100644 index 0000000000000000000000000000000000000000..9ecb384ed58458c24d8e3ae729c4de197b982b86 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337424304.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337427216.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337427216.png new file mode 100644 index 0000000000000000000000000000000000000000..8633dbdd658f98501dfc91a704395260f2d4df3c Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337427216.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337427392.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337427392.png new file mode 100644 index 0000000000000000000000000000000000000000..74f5cb24520c94de8628b2e64e6916c563f9f5a2 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337427392.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337533690.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337533690.png new file mode 100644 index 0000000000000000000000000000000000000000..1f02d9b155754a113347a54a7d35ba9b060175a8 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337533690.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337536842.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337536842.png new file mode 100644 index 0000000000000000000000000000000000000000..5a9ee2c989638c9a6aad3fcfb35bb9b9f2d4683c Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337536842.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337579708.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337579708.png new file mode 100644 index 0000000000000000000000000000000000000000..5cd8ed939434e6447dd55679eeaa3756d861751f Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337579708.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337580216.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337580216.png new file mode 100644 index 0000000000000000000000000000000000000000..5516b8d261b769287c74cf860a6708fcde6bbb8a Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337580216.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337584296.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337584296.png new file mode 100644 index 0000000000000000000000000000000000000000..fa76ecb59018fb154ffe1d9f6da1484d652f3ac1 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337584296.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337696078.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337696078.png new file mode 100644 index 0000000000000000000000000000000000000000..3864852e345eaf01794042feaa85b012b8af71de Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337696078.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337740252.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337740252.png new file mode 100644 index 0000000000000000000000000000000000000000..fd83fb600a54ab8bc39ee2ae54210be8b6c48973 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337740252.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337740540.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337740540.png new file mode 100644 index 0000000000000000000000000000000000000000..b8e25128a47dccaed733fc192f52f2ca7828e516 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337740540.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337747132.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337747132.png new file mode 100644 index 0000000000000000000000000000000000000000..41ea7d47f5fe5fca46816d93cb08b5da00abc0ad Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337747132.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337748300.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337748300.png new file mode 100644 index 0000000000000000000000000000000000000000..32488dc1740408834954cf8d57a2843d98f09c2e Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337748300.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337748528.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337748528.png new file mode 100644 index 0000000000000000000000000000000000000000..f2d62c85c844c2756f4d27a48711560dfb9615ea Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001337748528.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001372249333.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001372249333.png new file mode 100644 index 0000000000000000000000000000000000000000..48cd37225954e212cb3e159acc137866d8edc362 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001372249333.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001372748125.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001372748125.png new file mode 100644 index 0000000000000000000000000000000000000000..5f6326b9415cf766dd8379dbadd5aa1a0dc6861f Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001372748125.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001372821865.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001372821865.png new file mode 100644 index 0000000000000000000000000000000000000000..21e8dad1cd90755440cf858523b12c036a91e1ad Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001372821865.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001372824637.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001372824637.png new file mode 100644 index 0000000000000000000000000000000000000000..aefb5d83c079e6718ef88fd934b4b496cdc29565 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001372824637.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001373373585.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001373373585.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e5e47c9beca2c7c7630d78916f80eda652b52a Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001373373585.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001373379529.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001373379529.png new file mode 100644 index 0000000000000000000000000000000000000000..daa40b49e679668905632f25ff42bf8599ba0ead Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001373379529.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001384808269.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001384808269.png new file mode 100644 index 0000000000000000000000000000000000000000..be18ecef3a149d5742f18535552f66f26ab34832 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001384808269.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001385585749.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001385585749.png new file mode 100644 index 0000000000000000000000000000000000000000..c13604ab7095c2a7717bde1384f0aea3d53f69e3 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001385585749.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001385611905.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001385611905.png new file mode 100644 index 0000000000000000000000000000000000000000..8c233e40a21e678ddf4115c2e2e80c96e25a60ce Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001385611905.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001385905845.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001385905845.png new file mode 100644 index 0000000000000000000000000000000000000000..a6cb8bc4a188ef444919d71f7f16baa06422788b Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001385905845.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001386149037.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001386149037.png new file mode 100644 index 0000000000000000000000000000000000000000..da73fead24d8805bb43287f53c757e80ff0d597f Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001386149037.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001386699925.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001386699925.png new file mode 100644 index 0000000000000000000000000000000000000000..cf5b13b35e65ed0143a01a5bcad1e11eaddaded7 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001386699925.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387293085.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387293085.png new file mode 100644 index 0000000000000000000000000000000000000000..7f56b020949c53d018eba016952c2409f0d7dca9 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387293085.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387413509.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387413509.png new file mode 100644 index 0000000000000000000000000000000000000000..2245427058fc31f3e5d7f40062c0551936a67199 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387413509.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387413793.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387413793.png new file mode 100644 index 0000000000000000000000000000000000000000..aa649bf7215662819766d897513fb711d9d1e7f8 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387413793.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387415629.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387415629.png new file mode 100644 index 0000000000000000000000000000000000000000..01189358354090591de6580f8ef88ef78ddba3a1 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387415629.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387691985.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387691985.png new file mode 100644 index 0000000000000000000000000000000000000000..31c3096fa837c1b397ab2fe27acdd87e2cec36de Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387691985.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387692269.jpg b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387692269.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b79e3ddf78520277046b933c4662c6b72f45ab85 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387692269.jpg differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387692893.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387692893.png new file mode 100644 index 0000000000000000000000000000000000000000..49ea515d834b58d4ded14c55a6a2b07034d76137 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387692893.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387755969.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387755969.png new file mode 100644 index 0000000000000000000000000000000000000000..b2daa95d6b757e7bd443d8fd961922f248dd6853 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387755969.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387780357.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387780357.png new file mode 100644 index 0000000000000000000000000000000000000000..1aab3b8be2cd0c906253d70036a9fee3050a1055 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387780357.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387784693.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387784693.png new file mode 100644 index 0000000000000000000000000000000000000000..62a40117a892ba6c163be81bce1d198c2920f0e9 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387784693.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387787605.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387787605.png new file mode 100644 index 0000000000000000000000000000000000000000..8c1893e16fb929f77bb6b9a70cb25d3479dd684c Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387787605.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387855149.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387855149.png new file mode 100644 index 0000000000000000000000000000000000000000..731e957c367cb05e4229f53cf97dcee2cde69dff Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387855149.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387857005.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387857005.png new file mode 100644 index 0000000000000000000000000000000000000000..872f5c9eb05169831df4ba49d017629e8a943c64 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387857005.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387902849.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387902849.png new file mode 100644 index 0000000000000000000000000000000000000000..ffe2043c199308ed2033e3eb02a0662a65141ece Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387902849.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387907229.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387907229.png new file mode 100644 index 0000000000000000000000000000000000000000..084fbea1aee4d09b1e623c66b4f07641c7a0208d Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387907229.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387908045.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387908045.png new file mode 100644 index 0000000000000000000000000000000000000000..1fca645598e7a67da6e75b98c44f3c9a740be374 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387908045.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387908453.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387908453.png new file mode 100644 index 0000000000000000000000000000000000000000..b97804a0a575fd18235e7a0c7e4f2d0183e3b460 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387908453.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387961737.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387961737.png new file mode 100644 index 0000000000000000000000000000000000000000..ae4ddce8cf2629b811e9711c61186b3efa4dfe3c Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001387961737.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388020197.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388020197.png new file mode 100644 index 0000000000000000000000000000000000000000..1816e1e068ee0294677ebb357ffd158a14bb86cf Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388020197.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388024321.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388024321.png new file mode 100644 index 0000000000000000000000000000000000000000..da3ba54203ded0093b7c2b5308de0e2afd85a146 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388024321.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388024397.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388024397.png new file mode 100644 index 0000000000000000000000000000000000000000..4e4531dd19dc703399c9d4dd0e95236fa9a064c8 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388024397.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388028161.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388028161.png new file mode 100644 index 0000000000000000000000000000000000000000..b3beb92520c34ba771d096a8a146fb2c5b5edbb7 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388028161.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388028537.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388028537.png new file mode 100644 index 0000000000000000000000000000000000000000..ffb244306787c397ef4a9f4d9c3eb504172d3777 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388028537.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388184025.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388184025.png new file mode 100644 index 0000000000000000000000000000000000000000..cbce6fe1e32c547426319923c0fdb13e95554b99 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388184025.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388187249.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388187249.png new file mode 100644 index 0000000000000000000000000000000000000000..0ac83f21e269d909e550b68cb0bdc6347c05dcac Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388187249.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388187325.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388187325.png new file mode 100644 index 0000000000000000000000000000000000000000..02dbdf218da2cb1c844dfc13a463875df5124d48 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388187325.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388188365.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388188365.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe3bfb48446bab88e3e622b9f8066383f269590 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388188365.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388241577.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388241577.png new file mode 100644 index 0000000000000000000000000000000000000000..8dacb6e343ea4c750904fa090bb99213e012379d Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388241577.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388972645.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388972645.png new file mode 100644 index 0000000000000000000000000000000000000000..e32606925f4bb4380b262d9f946d4cd106202b87 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001388972645.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001389098425.png b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001389098425.png new file mode 100644 index 0000000000000000000000000000000000000000..c63903009ab9ba454f169250632dbec1b3c94467 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_image_0000001389098425.png differ diff --git a/docs/zh/server/maintenance/troubleshooting/images/zh-cn_other_0000001337581224.jpeg b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_other_0000001337581224.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2c019b828bdf9c699f203f09ba3542968ff21262 Binary files /dev/null and b/docs/zh/server/maintenance/troubleshooting/images/zh-cn_other_0000001337581224.jpeg differ diff --git a/docs/zh/server/maintenance/troubleshooting/troubleshooting.md b/docs/zh/server/maintenance/troubleshooting/troubleshooting.md new file mode 100644 index 0000000000000000000000000000000000000000..a16a2d3b6cc5ae815c7011a3cb43ffa3bc6befa0 --- /dev/null +++ b/docs/zh/server/maintenance/troubleshooting/troubleshooting.md @@ -0,0 +1,101 @@ +# 故障应急处理 + +- [故障应急处理](#故障应急处理) + - [触发kdump重启](#触发kdump重启) + - [强制重启](#强制重启) + - [重启网络](#重启网络) + - [修复文件系统](#修复文件系统) + - [手动dropcache](#手动dropcache) + - [救援模式和单用户模式](#救援模式和单用户模式) + +## 触发kdump重启 + +```shell +# 向sysrq文件中写入1, 开启SysRq功能,开启该功能后,内核会响应任何操作。 +echo 1 > /proc/sys/kernel/sysrq + +# 让系统崩溃 +echo c > /proc/sysrq-trigger +``` + +## 强制重启 + +强制重启有以下两种方式: + +1.手动重启OS。 + +```shell +reboot -f +``` + +2.通过iBMC强制上下电。 + +![zh-cn_image_0000001372249333](./images/zh-cn_image_0000001372249333.png) + +## 重启网络 + +openEuler使用**NetworkManager**来管理网络,执行下面命令即可重启网络。 + +```shell +systemctl restart NetworkManager +``` + +## 修复文件系统 + +当系统强行上下电重启后,文件系统可能受到损坏,系统启动时会自动检查并修复文件系统,当文件系统没有自动修复成功时,便需要手动使用**fsck**进行扫描和修复。 + +```shell +# 此时一般会进入救援模式,在日志中查看是哪个文件系统路径损坏。 +journalctl -xb +# 修复前检查该分区是否已经挂载 +cat /proc/mounts +# 卸载该目录 +umount xx +# 若无法卸载,**kill**占用该目录的进程 +lsof | grep xxx +kill xxx +# 执行fsck命令进行修复,过程中需要输入yes or no +fsck -y /dev/xxx +``` + +## 手动dropcache + +```shell +#当N数值不同时,可以达到不同的清理目的。根据linux内核文档建议,在清理前先执行sync(因为drop操作不会释放任何脏对象,而sync命令将所有未写的系统缓冲区写到磁盘中,包含已修改的inodes、已延迟的块I/O和读写映射文件,这样可以减少脏对象,从而让更多对象可以被释放。) +echo N > /proc/sys/vm/drop_caches + +#释放pagecache +echo 1 > /proc/sys/vm/drop_caches + +#释放dentries和inodes +echo 2 > /proc/sys/vm/drop_caches + +#释放pagecache, dentries和inodes +echo 3 > /proc/sys/vm/drop_caches +``` + +## 救援模式和单用户模式 + +- 救援模式 + + 挂载openEuler 22.03 LTS SP4镜像进入救援模式。 + + 1. 选择Troubleshooting。 + 2. 选择Rescue a openEuler system。 + 3. 按提示操作进行。 + + 1)Continue + + 2)Read-only mount + + 3)Skip to shell + + 4)Quit(Reboot) + +- 单用户模式 + + 在登录界面,输入字母e,进入grub界面,在linux行加入init=/bin/sh,按`ctrl+x`进入界面。 + + 1. 执行`mount -o remount,rw /`。 + 2. 执行修改密码等操作。 + 3. exit退出。 diff --git a/docs/zh/server/menmory_storage/etmem/_toc.yaml b/docs/zh/server/menmory_storage/etmem/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4a77be4e1281cba5070928ee860a42295a9dc374 --- /dev/null +++ b/docs/zh/server/menmory_storage/etmem/_toc.yaml @@ -0,0 +1,5 @@ +isManual: true +label: '' +sections: + - label: etmem + href: ./etmem_user_guide.md diff --git a/docs/zh/server/menmory_storage/etmem/etmem_user_guide.md b/docs/zh/server/menmory_storage/etmem/etmem_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..a30657e9300c2d5e27b24f63dd491027140088d2 --- /dev/null +++ b/docs/zh/server/menmory_storage/etmem/etmem_user_guide.md @@ -0,0 +1,796 @@ +# etmem + +## 介绍 + +随着CPU算力的发展,尤其是ARM核成本的降低,内存成本和内存容量成为约束业务成本和性能的核心痛点,因此如何节省内存成本,如何扩大内存容量成为存储迫切要解决的问题。 + +etmem内存分级扩展技术,通过DRAM+内存压缩/高性能存储新介质形成多级内存存储,对内存数据进行分级,将分级后的内存冷数据从内存介质迁移到高性能存储介质中,达到内存容量扩展的目的,从而实现内存成本下降。 + +etmem软件包运行的工具主要分为etmem客户端和etmemd服务端。etmemd服务端工具,运行后常驻,其中实现了目的进程的内存冷热识别及淘汰等功能。etmem客户端工具,调用时运行一次,根据命令参数的不同,控制etmemd服务端响应不同的操作。 + +## 编译教程 + +1. 下载etmem源码。 + + ```bash + $ git clone https://gitee.com/openeuler/etmem.git + ``` + +2. 编译和运行依赖。 + + etmem的编译和运行依赖于libboundscheck组件。 + + 安装命令: + + ```bash + $ yum -y install libboundscheck + ``` + + 通过rpm包进行确认是否安装: + + ```bash + rpm -qa |grep libboundscheck + ``` + +3. 编译。 + + ```bash + $ cd etmem + + $ mkdir build + + $ cd build + + $ cmake .. + + $ make + ``` + +## 注意事项 + +### 运行依赖 + +etmem作为内存扩展工具,需要依赖于内核态的特性支持,为了可以识别内存访问情况和支持主动将内存写入swap分区来达到内存垂直扩展的需求,etmem在运行时需要插入`etmem_scan`和`etmem_swap`模块: + +```bash +modprobe etmem_scan +modprobe etmem_swap +``` + +### 权限限制 + +运行etmem进程需要root权限,root用户具有系统最高权限,在使用root用户进行操作时,请严格按照操作指导进行操作,避免其他操作造成系统管理及安全风险。 + +### 使用约束 + +- etmem的客户端和服务端需要在同一个服务器上部署,不支持跨服务器通信的场景。 +- etmem仅支持扫描进程名小于或等于15个字符长度的目标进程。在使用进程名时,支持的进程名有效字符为:“字母”, “数字”,特殊字符“./%-_”以及上述三种的组合,其余组合认为是非法字符。 +- 在使用AEP介质进行内存扩展的时候,依赖于系统可以正确识别AEP设备并将AEP设备初始化为`numa node`。并且配置文件中的`vm_flags`字段只能配置为`ht`。 +- 引擎私有命令仅针对对应引擎和引擎下的任务有效,比如cslide所支持的`showhostpages`和`showtaskpages`。 +- 第三方策略实现代码中,`eng_mgt_func`接口中的`fd`不能写入`0xff`和`0xfe`字。 +- 支持在一个工程内添加多个不同的第三方策略动态库,以配置文件中的`eng_name`来区分。 +- 禁止并发扫描同一个进程。 +- 未加载`etmem_scan`和`etmem_swap` ko时,禁止使用`/proc/xxx/idle_pages`和`/proc/xxx/swap_pages`文件。 +- etmem对应配置文件,其权限要求为属主为root用户,且权限为600或400,配置文件大小不超过10M。 +- etmem在进行第三方策略注入时,第三方策略的`so`权限要求为属主为root用户,且权限为500或700。 + +## 使用说明 + +### etmem配置文件 + +在运行etmem进程之前,需要管理员预先规划哪些进程需要做内存扩展,将进程信息配置到etmem配置文件中,并配置内存扫描的周期、扫描次数、内存冷热阈值等信息。 + +配置文件的示例文件在源码包中,放置在`/etc/etmem`文件路径下,按照功能划分为3个示例文件: + +```text +/etc/etmem/cslide_conf.yaml +/etc/etmem/slide_conf.yaml +/etc/etmem/thirdparty_conf.yaml +``` + +示例内容分别为: + +```sh +#slide引擎示例 +#slide_conf.yaml +[project] +name=test +loop=1 +interval=1 +sleep=1 +sysmem_threshold=50 +swapcache_high_vmark=10 +swapcache_low_vmark=6 + +[engine] +name=slide +project=test + +[task] +project=test +engine=slide +name=background_slide +type=name +value=mysql +T=1 +max_threads=1 +swap_threshold=10g +swap_flag=yes + +#cslide引擎示例 +#cslide_conf.yaml +[engine] +name=cslide +project=test +node_pair=2,0;3,1 +hot_threshold=1 +node_mig_quota=1024 +node_hot_reserve=1024 + +[task] +project=test +engine=cslide +name=background_cslide +type=pid +name=23456 +vm_flags=ht +anon_only=no +ign_host=no + +#thirdparty引擎示例 +#thirdparty_conf.yaml +[engine] +name=thirdparty +project=test +eng_name=my_engine +libname=/usr/lib/etmem_fetch/my_engine.so +ops_name=my_engine_ops +engine_private_key=engine_private_value + +[task] +project=test +engine=my_engine +name=background_third +type=pid +value=12345 +task_private_key=task_private_value +``` + +配置文件各字段说明: + +| 配置项 | 配置项含义 | 是否必需 | 是否有参数 | 参数范围 | 示例说明 | +|-----------|---------------------|------|-------|------------|-----------------------------------------------------------------| +| [project] | project公用配置段起始标识 | 否 | 否 | NA | project参数的开头标识,表示下面的参数直到另外的[xxx]或文件结尾为止的范围内均为project section的参数 | +| name | project的名字 | 是 | 是 | 64个字以内的字符串 | 用来标识project,engine和task在配置时需要指定要挂载到的project | +| loop | 内存扫描的循环次数 | 是 | 是 | 1~120 | loop=3 //扫描3次 | +| interval | 每次内存扫描的时间间隔 | 是 | 是 | 1~1200 | interval=5 //每次扫描之间间隔5s | +| sleep | 每个内存扫描+操作的大周期之间时间间隔 | 是 | 是 | 1~1200 | sleep=10 //每次大周期之间间隔10s | +| sysmem_threshold| slide engine的配置项,系统内存换出阈值 | 否 | 是 | 0~100 | sysmem_threshold=50 //系统内存剩余量小于50%时,etmem才会触发内存换出| +| swapcache_high_wmark| slide engine的配置项,swacache可以占用系统内存的比例,高水线 | 否 | 是 | 1~100 | swapcache_high_wmark=5 //swapcache内存占用量可以为系统内存的5%,超过该比例,etmem会触发swapcache回收
注: swapcache_high_wmark需要大于swapcache_low_wmark| +| swapcache_low_wmark| slide engine的配置项,swacache可以占用系统内存的比例,低水线 | 否 | 是 | [1~swapcache_high_wmark) | swapcache_low_wmark=3 //触发swapcache回收后,系统会将swapcache内存占用量回收到低于3%| +| [engine] | engine公用配置段起始标识 | 否 | 否 | NA | engine参数的开头标识,表示下面的参数直到另外的[xxx]或文件结尾为止的范围内均为engine section的参数 | +| project | 声明所在的project | 是 | 是 | 64个字以内的字符串 | 已经存在名字为test的project,则可以写为project=test | +| engine | 声明所在的engine | 是 | 是 | slide/cslide/thridparty | 声明使用的是slide或cslide或thirdparty策略 | +| node_pair | cslide engine的配置项,声明系统中AEP和DRAM的node pair | engine为cslide时必须配置 | 是 | 成对配置AEP和DRAM的node号,AEP和DRAM之间用逗号隔开,每对pair之间用分号隔开 | node_pair=2,0;3,1 | +| hot_threshold | cslide engine的配置项,声明内存冷热水线的阈值 | engine为cslide时必须配置 | 是 | 大于等于0,小于等于INT_MAX的整数 | hot_threshold=3 //访问次数小于3的内存会被识别为冷内存 | +|node_mig_quota|cslide engine的配置项,流控,声明每次DRAM和AEP互相迁移时单向最大流量|engine为cslide时必须配置|是|大于等于0,小于等于INT_MAX的整数|node_mig_quota=1024 //单位为MB,AEP到DRAM或DRAM到AEP搬迁一次最大1024M| +|node_hot_reserve|cslide engine的配置项,声明DRAM中热内存的预留空间大小|engine为cslide时必须配置|是|大于等于0,小于等于INT_MAX的整数|node_hot_reserve=1024 //单位为MB,当所有虚拟机热内存大于此配置值时,热内存也会迁移到AEP中| +|eng_name|thirdparty engine的配置项,声明engine自己的名字,供task挂载|engine为thirdparty时必须配置|是|64个字以内的字符串|eng_name=my_engine //对此第三方策略engine挂载task时,task中写明engine=my_engine| +|libname|thirdparty engine的配置项,声明第三方策略的动态库的地址,绝对地址|engine为thirdparty时必须配置|是|256个字以内的字符串|libname=/user/lib/etmem_fetch/code_test/my_engine.so| +|ops_name|thirdparty engine的配置项,声明第三方策略的动态库中操作符号的名字|engine为thirdparty时必须配置|是|256个字以内的字符串|ops_name=my_engine_ops //第三方策略实现接口的结构体的名字| +|engine_private_key|thirdparty engine的配置项,预留给第三方策略自己解析私有参数的配置项,选配|否|否|根据第三方策略私有参数自行限制|根据第三方策略私有engine参数自行配置| +| [task] | task公用配置段起始标识 | 否 | 否 | NA | task参数的开头标识,表示下面的参数直到另外的[xxx]或文件结尾为止的范围内均为task section的参数 | +| project | 声明所挂的project | 是 | 是 | 64个字以内的字符串 | 已经存在名字为test的project,则可以写为project=test | +| engine | 声明所挂的engine | 是 | 是 | 64个字以内的字符串 | 所要挂载的engine的名字 | +| name | task的名字 | 是 | 是 | 64个字以内的字符串 | name=background1 //声明task的名字是backgound1 | +| type | 目标进程识别的方式 | 是 | 是 | pid/name | pid代表通过进程号识别,name代表通过进程名称识别 | +| value | 目标进程识别的具体字段 | 是 | 是 | 实际的进程号/进程名称 | 与type字段配合使用,指定目标进程的进程号或进程名称,由使用者保证配置的正确及唯一性 | +| T | engine为slide的task配置项,声明内存冷热水线的阈值 | engine为slide时必须配置 | 是 | 0~loop * 3 | T=3 //访问次数小于3的内存会被识别为冷内存 | +| max_threads | engine为slide的task配置项,etmemd内部线程池最大线程数,每个线程处理一个进程/子进程的内存扫描+操作任务 | 否 | 是 | 1~2 * core数 + 1,默认为1 | 对外部无表象,控制etmemd服务端内部处理线程个数,当目标进程有多个子进程时,配置越大,并发执行的个数也多,但占用资源也越多 | +| vm_flags | engine为cslide的task配置项,通过指定flag扫描的vma,不配置此项时扫描则不会区分 | 否 | 是 | 256长度以内的字符串,不同flag以空格隔开 | vm_flags=ht //扫描flags为ht(大页)的vma内存 | +| anon_only | engine为cslide的task配置项,标识是否只扫描匿名页 | 否 | 是 | yes/no | anon_only=no //配置为yes时只扫描匿名页,配置为no时非匿名页也会扫描 | +| ign_host | engine为cslide的task配置项,标识是否忽略host上的页表扫描信息 | 否 | 是 | yes/no | ign_host=no //yes为忽略,no为不忽略 | +| task_private_key | engine为thirdparty的task配置项,预留给第三方策略的task解析私有参数的配置项,选配 | 否 | 否 | 根据第三方策略私有参数自行限制 | 根据第三方策略私有task参数自行配置 | +| swap_threshold |slide engine的配置项,进程内存换出阈值 | 否 | 是 | 进程可用内存绝对值 | swap_threshold=10g //进程占用内存在低于10g时不会触发换出。
当前版本下,仅支持g/G作为内存绝对值单位。与sysmem_threshold配合使用,仅系统内存低于阈值时,进行白名单中进程阈值判断 | +| swap_flag|slide engine的配置项,进程指定内存换出 | 否 | 是 | yes/no | swap_flag=yes//使能进程指定内存换出 | + +### etmemd服务端启动 + +在使用etmem提供的服务时,首先根据需要修改相应的配置文件,然后运行etmemd服务端,常驻在系统中来操作目标进程的内存。除了支持在命令行中通过二进制来启动etmemd的进程外,还可以通过配置`service`文件来使etmemd服务端通过`systemctl`方式拉起,此场景需要通过`mode-systemctl`参数来指定支持。 + +#### 使用方法 + +可以通过下列示例命令启动etmemd的服务端: + +```bash +etmemd -l 0 -s etmemd_socket +``` + +或者: + +```bash +etmemd --log-level 0 --socket etmemd_socket +``` + +其中`-l`的`0`和`-s`的`etmemd_socket`是用户自己输入的参数,参数具体含义参考以下列表: + +#### 命令行参数说明 + +| 参数 | 参数含义 | 是否必须 | 是否有参数 | 参数范围 | 示例说明 | +| --------------- | ---------------------------------- | -------- | ---------- | --------------------- | ------------------------------------------------------------ | +| -l或\-\-log-level | etmemd日志级别 | 否 | 是 | 0~3 | 0:debug级别
1:info级别
2:warning级别
3:error级别
只有大于等于配置的级别才会打印到/var/log/message文件中 | +| -s或\-\-socket | etmemd监听的名称,用于与客户端交互 | 是 | 是 | 107个字符之内的字符串 | 指定服务端监听的名称 | +| -m或\-\-mode-systemctl| 指定通过systemctl方式来拉起stmemd服务| 否| 否| NA| service文件中需要指定-m参数| +| -h或\-\-help | 帮助信息 | 否 | 否 | NA | 执行时带有此参数会打印后退出 | + +### 通过etmem客户端添加或者删除工程/引擎/任务 + +#### 场景描述 + +1)管理员创建etmem的project/engine/task(一个工程可包含多个etmem engine,一个engine可以包含多个任务)。 + +2)管理员删除已有的etmem project/engine/task(删除工程前,会自动先停止该工程中的所有任务)。 + +#### 使用方法 + +在etmemd服务端正常运行后,通过etmem客户端,通过第二个参数指定为obj,来进行创建或删除动作,对project/engine/task则是通过配置文件中配置的内容来进行识别和区分。 + +- 添加对象: + + ```bash + etmem obj add -f /etc/etmem/slide_conf.yaml -s etmemd_socket + ``` + + 或 + + ```bash + etmem obj add --file /etc/etmem/slide_conf.yaml --socket etmemd_socket + ``` + +- 删除对象: + + ```bash + etmem obj del -f /etc/etmem/slide_conf.yaml -s etmemd_socket + ``` + + 或 + + ```bash + etmem obj del --file /etc/etmem/slide_conf.yaml --socket etmemd_socket + ``` + +#### 命令行参数说明 + +| 参数 | 参数含义 | 是否必须 | 是否有参数 | 示例说明 | +| ------------ | ------------------------------------------------------------ | -------- | ---------- | -------------------------------------------------------- | +| -f或\-\-file | 指定对象的配置文件 | 是 | 是 | 需要指定路径名称 | +| -s或\-\-socket | 与etmemd服务端通信的socket名称,需要与etmemd启动时指定的保持一致 | 是 | 是 | 必须配置,在有多个etmemd时,由管理员选择与哪个etmemd通信 | + +### 通过etmem客户端查询/启动/停止工程 + +#### 场景描述 + +在已经通过`etmem obj add`添加工程之后,在还未调用`etmem obj del`删除工程之前,可以对etmem的工程进行启动和停止。 + +1)管理员启动已添加的工程。 + +2)管理员停止已启动的工程。 + +在管理员调用`obj del`删除工程时,如果工程已经启动,则会自动停止。 + +#### 使用方法 + +对于已经添加成功的工程,可以通过`etmem project`的命令来控制工程的启动和停止,命令示例如下: + +- 查询工程: + + ```bash + etmem project show -n test -s etmemd_socket + ``` + + 或 + + ```bash + etmem project show --name test --socket etmemd_socket + ``` + +- 启动工程: + + ```bash + etmem project start -n test -s etmemd_socket + ``` + + 或 + + ```bash + etmem project start --name test --socket etmemd_socket + ``` + +- 停止工程: + + ```bash + etmem project stop -n test -s etmemd_socket + ``` + + 或 + + ```bash + etmem project stop --name test --socket etmemd_socket + ``` + +- 打印帮助: + + ```bash + etmem project help + ``` + +#### 命令行参数说明 + +| 参数 | 参数含义 | 是否必须 | 是否有参数 | 示例说明 | +| ------------ | ------------------------------------------------------------ | -------- | ---------- | -------------------------------------------------------- | +| -n或\-\-name | 指定project名称 | 是 | 是 | project名称,与配置文件一一对应 | +| -s或\-\-socket | 与etmemd服务端通信的socket名称,需要与etmemd启动时指定的保持一致 | 是 | 是 | 必须配置,在有多个etmemd时,由管理员选择与哪个etmemd通信 | + +### 通过etmem客户端,支持内存阈值换出以及指定内存换出 + +当前支持的策略中,只有slide策略支持私有的功能特性。 + +- 进程或系统内存阈值换出。 + +为了获得业务的极致性能,需要考虑etmem内存扩展进行内存换出的时机;当系统可用内存足够,系统内存压力不大时,不进行内存交换;当进程占用内存不高时,不进行内存交换;提供系统内存换出阈值控制以及进程内存换出阈值控制。 + +- 进程指定内存换出。 + +在存储环境下,具有IO时延敏感型业务进程,上述进程内存不希望进行换出,因此提供一种机制,由业务指定可换出内存。 + +针对进程或系统内存阈值换出,进程指定内存换出功能,可以在配置文件中添加`sysmem_threshold`,`swap_threshold`,`swap_flag`参数,示例如下,具体含义请参考etmem配置文件说明章节。 + +```sh +#slide_conf.yaml +[project] +name=test +loop=1 +interval=1 +sleep=1 +sysmem_threshold=50 + +[engine] +name=slide +project=test + +[task] +project=test +engine=slide +name=background_slide +type=name +value=mysql +T=1 +max_threads=1 +swap_threshold=10g +swap_flag=yes +``` + +#### 系统内存阈值换出 + +配置文件中`sysmem_threshold`用于指示系统内存阈值换出功能,`sysmem_threshold`取值范围为0-100,如果配置文件中设定了`sysmem_threshold`,那么只有系统内存剩余量低于该比例时,etmem才会触发内存换出流程。 + +示例使用方法如下: + +1. 参考示例编写配置文件,配置文件中填写`sysmem_threshold`参数,例如`sysmem_threshold=20`。 +2. 启动服务端,并通过服务端添加,启动工程。 + + ```bash + etmemd -l 0 -s monitor_app & + etmem obj add -f etmem_config -s monitor_app + etmem project start -n test -s monitor_app + etmem project show -s monitor_app + ``` + +3. 观察内存换出结果,只有系统可用内存低于20%时,etmem才会触发内存换出。 + +#### 进程内存阈值换出 + +配置文件中`swap_threshold`用于指示进程内存阈值换出功能,`swap_threshold`为进程内存占用量绝对值(格式为"数字+单位g/G"),如果配置文件中设定了`swap_threshold`,那么该进程内存占用量在小于该设定的可用内存量时,etmem不会针对该进程触发换出流程。 + +示例使用方法如下: + +1. 参考示例编写配置文件,配置文件中填写`swap_threshold`参数,例如`swap_threshold=5g`。 +2. 启动服务端,并通过服务端添加,启动工程。 + + ```bash + etmemd -l 0 -s monitor_app & + etmem obj add -f etmem_config -s monitor_app + etmem project start -n test -s monitor_app + etmem project show -s monitor_app + ``` + +3. 观察内存换出结果,只有进程占用内存绝对值高于5G时,etmem才会触发内存换出。 + +#### 进程指定内存换出 + +配置文件中`swap_flag`用于指示进程指定内存换出功能,`swap_flag`取值仅有两个:`yes/no`,如果配置文件中设定了`swap_flag`为no或者未配置,那么etmem换出功能无变化,如果`swap_flag`设定为yes,那么etmem仅仅换出进程指定的内存。 + +示例使用方法如下: + +1. 参考示例编写配置文件,配置文件中填写`swap_flag`参数,例如`swap_flag=yes`。 +2. 业务进程对需要进行换出的内存打标记。 + + ```bash + madvise(addr_start, addr_len, MADV_SWAPFLAG) + ``` + +3. 启动服务端,并通过服务端添加,启动工程。 + + ```bash + etmemd -l 0 -s monitor_app & + etmem obj add -f etmem_config -s monitor_app + etmem project start -n test -s monitor_app + etmem project show -s monitor_app + ``` + +4. 观察内存换出结果,只有进程打标记的部分内存会被换出,其余内存保留在DRAM中,不会被换出。 + +针对进程指定页面换出的场景中,在原扫描接口`idle_pages`中添加`ioctl`命令字的形式,来确认不带有特定标记的vma不进行扫描与换出操作。 + +扫描管理接口: + +- 函数原型。 + + ```c + ioctl(fd, cmd, void *arg); + ``` + +- 输入参数。 + 1. fd:文件描述符,通过open调用在/proc/pid/idle_pages下打开文件获得。 + + 2. cmd:控制扫描行为,当前支持如下cmd: + VMA_SCAN_ADD_FLAGS:新增vma指定内存换出标记,仅扫描带有特定标记的VMA。 + VMA_SCAN_REMOVE_FLAGS:删除新增的VMA指定内存换出标记。 + + 3. args:int指针参数,传递具体标记掩码,当前仅支持如下参数: + VMA_SCAN_FLAG:在etmem_scan.ko扫描模块开始扫描前,会调用接口walk_page_test接口判断vma地址是否符合扫描要求,此标记置位时,会仅扫描带有特定换出标记的vma地址段,而忽略其他vma地址。 + +- 返回值。 + 1. 成功,返回0。 + 2. 失败,返回非0。 + +- 注意事项。 + 所有不支持的标记都会被忽略,但是不会返回错误。 + +### 通过etmem客户端,支持swapcache内存回收指令 + +用户态etmem发起内存淘汰回收操作,通过`write procfs`接口与内核态的内存回收模块交互,内存回收模块解析用户态下发的虚拟地址,获取地址对应的page页面,并调用内核原生接口将该page对应内存进行换出回收,在内存换出的过程中,swapcache会占用部分系统内存,为进一步节约内存,添加swapcache内存回收功能。 + +针对swapcache内存回收功能,可以在配置文件中添加`swapcache_high_wmark`,`swapcache_low_wmark`参数。 + +- `swapcache_high_wmark`: swapcache可以占用系统内存的高水位线。 +- `swapcache_low_wmark`:swapcache可以占用系统内存的低水位线。 + +在etmem进行一轮内存换出后,会进行swapcache占用系统内存比例的检查,当占用比例超过高水位线后,会通过`swap_pages`下发`ioctl`命令,触发swapcache内存回收,并回收到低水位线停止。 + +配置参数示例如下,具体请参考etmem配置文件相关章节: + +```sh +#slide_conf.yaml +[project] +name=test +loop=1 +interval=1 +sleep=1 +swapcache_high_vmark=5 +swapcache_low_vmark=3 + +[engine] +name=slide +project=test + +[task] +project=test +engine=slide +name=background_slide +type=name +value=mysql +T=1 +max_threads=1 +``` + +针对swap换出场景中,需要通过swapcache内存回收进一步节约内存,在原内存换出接口`swap_pages`中通过添加`ioctl`接口的方式,来提供swapcache水线的设定以及swapcache内存占用量回收的启动与关闭。 + +- 函数原型。 + + ```c + ioctl(fd, cmd, void *arg); + ``` + +- 输入参数。 + + ```text + 1. fd:文件描述符,通过open调用在/proc/pid/idle_pages下打开文件获得 + + 2. cmd:控制扫描行为,当前支持如下cmd: + RECLAIM_SWAPCACHE_ON:启动swapcache内存换出 + RECLAIM_SWAPCACHE_OFF:关闭swapcache内存换出 + SET_SWAPCACHE_WMARK:设定swapcache内存水线 + + 3. args:int指针参数,传递具体标记掩码,当前仅支持如下参数: + 参数用来传递swapcache水线具体值 + ``` + +- 返回值。 + + ```text + 1. 成功,返回0。 + 2. 失败,返回非0。 + ``` + +- 注意事项 + + ```text + 所有不支持的标记都会被忽略,但是不会返回错误 + ``` + +### 通过etmem客户端,执行引擎私有命令或功能 + +当前支持的策略中,只有cslide策略支持私有的命令。 + +- `showtaskpages`。 +- `showhostpages`。 + +针对使用此策略引擎的engine和engine所有的task,可以通过这两个命令分别查看task相关的页面访问情况和虚拟机的host上系统大页的使用情况。 + +示例命令如下: + +```bash +etmem engine showtaskpages <-t task_name> -n proj_name -e cslide -s etmemd_socket + +etmem engine showhostpages -n proj_name -e cslide -s etmemd_socket +``` + +**注意** :`showtaskpages`和`showhostpages`仅支持引擎使用cslide的场景。 + +#### 命令行参数说明 + +| 参数 | 参数含义 | 是否必须 | 是否有参数 | 示例说明 | +|----|------|------|-------|------| +|-n或\-\-proj_name| 指定project的名字| 是| 是| 指定已经存在,所需要执行的project的名字| +|-s或\-\-socket| 与etmemd服务端通信的socket名称,需要与etmemd启动时指定的保持一致| 是| 是| 必须配置,在有多个etmemd时,由管理员选择与哪个etmemd通信| +|-e或\-\-engine| 指定执行的引擎的名字| 是| 是| 指定已经存在的,所需要执行的引擎的名字| +|-t或\-\-task_name| 指定执行的任务的名字| 否| 是| 指定已经存在的,所需要执行的任务的名字| + +### 支持kernel swap功能开启与关闭 + +针对swap换出到磁盘场景,当etmem用于内存扩展时,用户可以选择是否同时开启内核swap功能。用户可以关闭内核原生swap机制,以免原生swap机制换出不应被换出的内存,导致用户态进程出现问题。 + +通过提供sys接口实现上述控制,在`/sys/kernel/mm/swap`目录下创建`kobj`对象,对象名为`kernel_swap_enable`,默认为`true`,用于控制kernel swap的启动与关闭。 + +具体示例如下: + +```sh +#开启kernel swap +echo true > /sys/kernel/mm/swap/kernel_swap_enbale +或者 +echo 1 > /sys/kernel/mm/swap/kernel_swap_enbale + +#关闭kernel swap +echo false > /sys/kernel/mm/swap/kernel_swap_enbale +或者 +echo 0 > /sys/kernel/mm/swap/kernel_swap_enbale + +``` + +### etmem支持随系统自启动 + +#### 场景描述 + +etmemd支持由用户配置`systemd`配置文件后,以`fork`模式作为`systemd`服务被拉起运行。 + +#### 使用方法 + +编写`service`配置文件,来启动etmemd,必须使用-m参数来指定此模式,例如: + +```bash +etmemd -l 0 -s etmemd_socket -m +``` + +#### 命令行参数说明 + +| 参数 | 参数含义 | 是否必须 | 是否有参数 | 参数范围 | 示例说明 | +|----------------|------------|------|-------|------|-----------| +| -l或\-\-log-level | etmemd日志级别 | 否 | 是 | 0~3 | 0:debug级别;1:info级别;2:warning级别;3:error级别;只有大于等于配置的级别才会打印到/var/log/message文件中| +| -s或\-\-socket |etmemd监听的名称,用于与客户端交互 | 是 | 是| 107个字符之内的字符串| 指定服务端监听的名称| +|-m或\-\-mode-systemctl | etmemd作为service被拉起时,命令中需要指定此参数来支持 | 否 | 否 | NA | NA | +| -h或\-\-help | 帮助信息 | 否 |否 |NA |执行时带有此参数会打印后退出| + +### etmem支持第三方内存扩展策略 + +#### 场景描述 + +etmem支持用户注册第三方内存扩展策略,同时提供扫描模块动态库,运行时通过第三方策略淘汰算法淘汰内存。 + +用户使用etmem所提供的扫描模块动态库并实现对接etmem所需要的结构体中的接口。 + +#### 使用方法 + +用户使用自己实现的第三方扩展淘汰策略,主要需要按下面步骤进行实现和操作: + +1. 按需调用扫描模块提供的扫描接口。 + +2. 按照etmem头文件中提供的函数模板来实现各个接口,最终封装成结构体。 + +3. 编译出第三方扩展淘汰策略的动态库。 + +4. 在配置文件中按要求声明类型为thirdparty的engine。 + +5. 将动态库的名称和接口结构体的名称按要求填入配置文件中task对应的字段。 + +其他操作步骤与使用etmem的其他engine类似。 + +接口结构体模板: + +```c +struct engine_ops { + +/* 针对引擎私有参数的解析,如果有,需要实现,否则置NULL */ + +int (*fill_eng_params)(GKeyFile *config, struct engine *eng); + +/* 针对引擎私有参数的清理,如果有,需要实现,否则置NULL */ + +void (*clear_eng_params)(struct engine *eng); + +/* 针对任务私有参数的解析,如果有,需要实现,否则置NULL */ + +int (*fill_task_params)(GKeyFile *config, struct task *task); + +/* 针对任务私有参数的清理,如果有,需要实现,否则置NULL */ + +void (*clear_task_params)(struct task *tk); + +/* 启动任务的接口 */ + +int (*start_task)(struct engine *eng, struct task *tk); + +/* 停止任务的接口 */ + +void (*stop_task)(struct engine *eng, struct task *tk); + +/* 填充pid相关私有参数 */ + +int (*alloc_pid_params)(struct engine *eng, struct task_pid **tk_pid); + +/* 销毁pid相关私有参数 */ + +void (*free_pid_params)(struct engine *eng, struct task_pid **tk_pid); + +/* 第三方策略自身所需要的私有命令支持,如果没有,置为NULL */ + +int (*eng_mgt_func)(struct engine *eng, struct task *tk, char *cmd, int fd); + +}; +``` + +扫描模块对外接口说明: + +| 接口名称 |接口描述| +| ------------ | --------------------- | +| etmemd_scan_init | scan模块初始化| +| etmemd_scan_exit | scan模块析构| +| etmemd_get_vmas | 获取需要扫描的vma| +| etmemd_free_vmas | 释放etmemd_get_vmas扫描到的vma| +| etmemd_get_page_refs | 扫描vmas中的页面| +| etmemd_free_page_refs | 释放etmemd_get_page_refs获取到的页访问信息链表| + +针对扫描虚拟机的场景中,在原扫描接口`idle_pages`中添加`ioctl`接口的方式,来提供区分扫描`ept`的粒度和是否忽略host上页访问标记的机制。 + +针对进程指定页面换出的场景中,在原扫描接口`idle_pages`中添加`ioctl`命令字的形式,来确认不带有特定标记的vma不进行扫描和换出操作。 + +扫描管理接口: + +- 函数原型。 + + ```c + ioctl(fd, cmd, void *arg); + ``` + +- 输入参数。 + + ```text + 1. fd:文件描述符,通过open调用在/proc/pid/idle_pages下打开文件获得 + + 2. cmd:控制扫描行为,当前支持如下cmd: + IDLE_SCAN_ADD_FLAG:新增一个扫描标记 + IDLE_SCAM_REMOVE_FLAGS:删除一个扫描标记 + VMA_SCAN_ADD_FLAGS:新增vma指定内存换出标记,仅扫描带有特定标记的VMA + VMA_SCAN_REMOVE_FLAGS:删除新增的VMA指定内存换出标记 + + 3. args:int指针参数,传递具体标记掩码,当前仅支持如下参数: + SCAN_AS_HUGE:扫描ept页表时,按照2M大页粒度扫描页是否被访问过。此标记未置位时,按照ept页表自身粒度扫描 + SCAN_IGN_HUGE:扫描虚拟机时,忽略host侧页表上的访问标记。此标记未置位时,不会忽略host侧页表上的访问标记。 + VMA_SCAN_FLAG:在etmem_scan.ko扫描模块开始扫描前,会调用接口walk_page_test接口判断vma地址是否符合扫描要求,此标记置位时,会仅扫描带有特定换出标记的vma地址段,而忽略其他vma地址 + ``` + +- 返回值。 + + ```text + 1. 成功,返回0 + 2. 失败,返回非0 + ``` + +- 注意事项。 + + ```text + 所有不支持的标记都会被忽略,但是不会返回错误 + ``` + +配置文件示例如下所示,具体含义请参考配置文件说明章节: + +```sh +#thirdparty +[engine] + +name=thirdparty + +project=test + +eng_name=my_engine + +libname=/user/lib/etmem_fetch/code_test/my_engine.so + +ops_name=my_engine_ops + +engine_private_key=engine_private_value + +[task] + +project=test + +engine=my_engine + +name=background1 + +type=pid + +value=1798245 + +task_private_key=task_private_value +``` + + **注意** : + +1、用户需使用etmem所提供的扫描模块动态库并实现对接etmem所需要的结构体中的接口。 + +2、`eng_mgt_func`接口中的`fd`不能写入`0xff`和`0xfe`字。 + +3、支持在一个工程内添加多个不同的第三方策略动态库,以配置文件中的`eng_name`来区分。 + +### etmem客户端和服务端帮助说明 + +通过下列命令可以打印etmem服务端帮助说明: + +```bash +etmemd -h +``` + +或: + +```bash +etmemd --help +``` + +通过下列命令可以打印etmem客户端帮助说明: + +```bash +etmem help +``` + +通过下列命令可以打印etmem客户端操作工程/引擎/任务相关帮助说明: + +```bash +etmem obj help +``` + +通过下列命令可以打印etmem客户端对项目相关帮助说明: + +```bash +etmem project help +``` diff --git a/docs/zh/server/menmory_storage/lvm/_toc.yaml b/docs/zh/server/menmory_storage/lvm/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..52c3f8b31122b79e9257f1a13a6d6de97d2e1828 --- /dev/null +++ b/docs/zh/server/menmory_storage/lvm/_toc.yaml @@ -0,0 +1,5 @@ +isManual: true +label: '' +sections: + - label: 使用LVM管理硬盘 + href: ./managing_drives_through_lvm.md diff --git a/docs/zh/server/menmory_storage/lvm/managing_drives_through_lvm.md b/docs/zh/server/menmory_storage/lvm/managing_drives_through_lvm.md new file mode 100644 index 0000000000000000000000000000000000000000..737d9ff87810c3df02c6c9deb6c0f3e1313c80d3 --- /dev/null +++ b/docs/zh/server/menmory_storage/lvm/managing_drives_through_lvm.md @@ -0,0 +1,574 @@ +# 使用LVM管理硬盘 + + + +- [使用LVM管理硬盘](#使用lvm管理硬盘) + - [LVM简介](#lvm简介) + - [基本概念](#基本概念) + - [安装](#安装) + - [管理物理卷](#管理物理卷) + - [创建物理卷](#创建物理卷) + - [查看物理卷](#查看物理卷) + - [修改物理卷属性](#修改物理卷属性) + - [删除物理卷](#删除物理卷) + - [管理卷组](#管理卷组) + - [创建卷组](#创建卷组) + - [查看卷组](#查看卷组) + - [修改卷组属性](#修改卷组属性) + - [扩展卷组](#扩展卷组) + - [收缩卷组](#收缩卷组) + - [删除卷组](#删除卷组) + - [管理逻辑卷](#管理逻辑卷) + - [创建逻辑卷](#创建逻辑卷) + - [查看逻辑卷](#查看逻辑卷) + - [调整逻辑卷大小](#调整逻辑卷大小) + - [扩展逻辑卷](#扩展逻辑卷) + - [收缩逻辑卷](#收缩逻辑卷) + - [删除逻辑卷](#删除逻辑卷) + - [创建并挂载文件系统](#创建并挂载文件系统) + - [创建文件系统](#创建文件系统) + - [手动挂载文件系统](#手动挂载文件系统) + - [自动挂载文件系统](#自动挂载文件系统) + + + +## LVM简介 + +LVM是逻辑卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制。LVM通过在硬盘和文件系统之间添加一个逻辑层,来为文件系统屏蔽下层硬盘分区布局,提高硬盘分区管理的灵活性。 + +使用LVM管理硬盘的基本过程如下: + +1. 将硬盘创建为物理卷。 +2. 将多个物理卷组合成卷组。 +3. 在卷组中创建逻辑卷。 +4. 在逻辑卷之上创建文件系统。 + +通过LVM管理硬盘之后,文件系统不再受限于硬盘的大小,可以分布在多个硬盘上,也可以动态扩容。 + +### 基本概念 + +- 物理存储介质(The physical media):指系统的物理存储设备,如硬盘,系统中为/dev/hda、/dev/sda等等,是存储系统最低层的存储单元。 + +- 物理卷(Physical Volume,PV):指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备\(如RAID\),是LVM的基本存储逻辑块。物理卷包括一个特殊的标签,该标签默认存放在第二个 512 字节扇区,但也可以将标签放在最开始的四个扇区之一。该标签包含物理卷的随机唯一识别符(UUID),记录块设备的大小和LVM元数据在设备中的存储位置。 + +- 卷组(Volume Group,VG):由物理卷组成,屏蔽了底层物理卷细节。可在卷组上创建一个或多个逻辑卷且不用考虑具体的物理卷信息。 + +- 逻辑卷(Logical Volume,LV):卷组不能直接用,需要划分成逻辑卷才能使用。逻辑卷可以格式化成不同的文件系统,挂载后直接使用。 + +- 物理块(Physical Extent,PE):物理卷以大小相等的“块”为单位存储,块的大小与卷组中逻辑卷块的大小相同。 + +- 逻辑块(Logical Extent,LE):逻辑卷以“块”为单位存储,在一卷组中的所有逻辑卷的块大小是相同的。 + +## 安装 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>openEuler操作系统默认已安装LVM。可通过**rpm -qa | grep lvm2**命令查询,若打印信息中包含“lvm2”信息,则表示已安装LVM,可跳过本章节内容;若无任何打印信息,则表示未安装,可参考本章节内容进行安装。 + +1. 配置本地yum源,详细信息请参考[搭建repo服务器](./../../administration/administrator/configuring_the_repo_server.md)。 +2. 清除缓存。 + + ```shell + $ dnf clean all + ``` + +3. 创建缓存。 + + ```shell + $ dnf makecache + ``` + +4. 在root权限下安装LVM。 + + ```shell + # dnf install lvm2 + ``` + +5. 查看安装后的rpm包。 + + ```shell + $ rpm -qa | grep lvm2 + ``` + +## 管理物理卷 + +### 创建物理卷 + +可在root权限下通过pvcreate命令创建物理卷。 + +```shell +pvcreate [option] devname ... +``` + +其中: + +- option:命令参数选项。常用的参数选项有: + - -f:强制创建物理卷,不需要用户确认。 + - -u:指定设备的UUID。 + - -y:所有的问题都回答“yes”。 + +- devname:指定要创建的物理卷对应的设备名称。如果需要批量创建,可以填写多个设备名称,中间以空格间隔。 + +示例1:将/dev/sdb、/dev/sdc创建为物理卷。 + +```shell +# pvcreate /dev/sdb /dev/sdc +``` + +示例2:将/dev/sdb1、/dev/sdb2创建为物理卷。 + +```shell +# pvcreate /dev/sdb1 /dev/sdb2 +``` + +### 查看物理卷 + +可在root权限通过pvdisplay命令查看物理卷的信息,包括:物理卷名称、所属的卷组、物理卷大小、PE大小、总PE数、可用PE数、已分配的PE数和UUID。 + +```shell +pvdisplay [option] devname +``` + +其中: + +- option:命令参数选项。常用的参数选项有: + - -s:以短格式输出。 + - -m:显示PE到LE的映射。 + +- devname:指定要查看的物理卷对应的设备名称。如果不指定物理卷名称,则显示所有物理卷的信息。 + +示例:显示物理卷/dev/sdb的基本信息。 + +```shell +# pvdisplay /dev/sdb +``` + +### 修改物理卷属性 + +可在root权限下通过pvchange命令修改物理卷的属性。 + +```shell +pvchange [option] pvname ... +``` + +其中: + +- option:命令参数选项。常用的参数选项有: + - -u:生成新的UUID。 + - -x:是否允许分配PE。 + +- pvname:指定要修改属性的物理卷对应的设备名称。如果需要批量修改,可以填写多个设备名称,中间以空格间隔。 + +示例:禁止分配/dev/sdb物理卷上的PE。没有加入卷组的物理卷执行pvdisplay命令显示Allocatable属性为NO,需要加入卷组才能成功修改该属性。 + +```shell +# pvchange -x n /dev/sdb +``` + +### 删除物理卷 + +可在root权限下通过pvremove命令删除物理卷。 + +```shell +pvremove [option] pvname ... +``` + +其中: + +- option:命令参数选项。常用的参数选项有: + - -f:强制删除物理卷,不需要用户确认。 + - -y:所有的问题都回答“yes”。 + +- pvname:指定要删除的物理卷对应的设备名称。如果需要批量删除,可以填写多个设备名称,中间以空格间隔。 + +示例:删除物理卷/dev/sdb。如果物理卷已经加入卷组,需要先删除卷组或者从卷组中移除,再删除物理卷。 + +```shell +# pvremove /dev/sdb +``` + +## 管理卷组 + +### 创建卷组 + +可在root权限下通过vgcreate命令创建卷组。 + +```shell +vgcreate [option] vgname pvname ... +``` + +其中: + +- option:命令参数选项。常用的参数选项有: + - -l:卷组上允许创建的最大逻辑卷数。 + - -p:卷组中允许添加的最大物理卷数。 + - -s:卷组上的物理卷的PE大小。 + +- vgname:要创建的卷组名称。 +- pvname:要加入到卷组中的物理卷名称。 + +示例:创建卷组vg1,并且将物理卷/dev/sdb和/dev/sdc添加到卷组中。 + +```shell +# vgcreate vg1 /dev/sdb /dev/sdc +``` + +### 查看卷组 + +可在root权限下通过vgdisplay命令查看卷组的信息。 + +```shell +vgdisplay [option] [vgname] +``` + +其中: + +- option:命令参数选项。常用的参数选项有: + - -s:以短格式输出。 + - -A:仅显示活动卷组的属性。 + +- vgname:指定要查看的卷组名称。如果不指定卷组名称,则显示所有卷组的信息。 + +示例:显示卷组vg1的基本信息。 + +```shell +# vgdisplay vg1 +``` + +### 修改卷组属性 + +可在root权限下通过vgchange命令修改卷组的属性。 + +```shell +vgchange [option] vgname +``` + +其中: + +- option:命令参数选项。常用的参数选项有: + - -a:设置卷组的活动状态。 + +- vgname:指定要修改属性的卷组名称。 + +示例:将卷组vg1状态修改为活动。 + +```shell +# vgchange -ay vg1 +``` + +### 扩展卷组 + +可在root权限下通过vgextend命令动态扩展卷组。它通过向卷组中添加物理卷来增加卷组的容量。 + +```shell +vgextend [option] vgname pvname ... +``` + +其中: + +- option:命令参数选项。常用的参数选项有: + - -d:调试模式。 + - -t:仅测试。 + +- vgname:要扩展容量的卷组名称。 +- pvname:要加入到卷组中的物理卷名称。 + +示例:向卷组vg1中添加物理卷/dev/sdb。 + +```shell +# vgextend vg1 /dev/sdb +``` + +### 收缩卷组 + +可在root权限下通过vgreduce命令删除卷组中的物理卷来减少卷组容量。不能删除卷组中剩余的最后一个物理卷。 + +```shell +vgreduce [option] vgname pvname ... +``` + +其中: + +- option:命令参数选项。常用的参数选项有: + - -a:如果命令行中没有指定要删除的物理卷,则删除所有的空物理卷。 + - \-\-removemissing:删除卷组中丢失的物理卷,使卷组恢复正常状态。 + +- vgname:要收缩容量的卷组名称。 +- pvname:要从卷组中删除的物理卷名称。 + +示例:从卷组vg1中移除物理卷/dev/sdb2。 + +```shell +# vgreduce vg1 /dev/sdb2 +``` + +### 删除卷组 + +可在root权限下通过vgremove命令删除卷组。 + +```shell +vgremove [option] vgname +``` + +其中: + +- option:命令参数选项。常用的参数选项有: + - -f:强制删除卷组,不需要用户确认。 + +- vgname:指定要删除的卷组名称。 + +示例:删除卷组vg1。 + +```shell +# vgremove vg1 +``` + +## 管理逻辑卷 + +### 创建逻辑卷 + +可在root权限下通过lvcreate命令创建逻辑卷。 + +```shell +lvcreate [option] vgname +``` + +其中: + +- option:命令参数选项。常用的参数选项有: + - -L:指定逻辑卷的大小,单位为“kKmMgGtT”字节。 + - -l:指定逻辑卷的大小(LE数)。 + - -n:指定要创建的逻辑卷名称。 + - -s:创建快照。 + +- vgname:要创建逻辑卷的卷组名称。 + +示例1:在卷组vg1中创建10G大小的逻辑卷。 + +```shell +# lvcreate -L 10G vg1 +``` + +示例2:在卷组vg1中创建200M的逻辑卷,并命名为lv1。 + +```shell +# lvcreate -L 200M -n lv1 vg1 +``` + +### 查看逻辑卷 + +可在root权限下通过lvdisplay命令查看逻辑卷的信息,包括逻辑卷空间大小、读写状态和快照信息等属性。 + +```shell +lvdisplay [option] [lvname] +``` + +其中: + +- option:命令参数选项。常用的参数选项有: + + - -v:显示LE到PE的映射。 + +- lvname:指定要显示属性的逻辑卷对应的设备文件。如果省略,则显示所有的逻辑卷属性。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + >逻辑卷对应的设备文件保存在卷组目录下,例如:在卷组vg1上创建一个逻辑卷lv1,则此逻辑卷对应的设备文件为/dev/vg1/lv1。 + +示例:显示逻辑卷lv1的基本信息。 + +```shell +# lvdisplay /dev/vg1/lv1 +``` + +### 调整逻辑卷大小 + +可在root权限下通过lvresize命令调整LVM逻辑卷的空间大小,可以增大空间和缩小空间。使用lvresize命令调整逻辑卷空间大小和缩小空间时需要谨慎,因为有可能导致数据丢失。 + +```shell +lvresize [option] vgname +``` + +其中: + +- option:命令参数选项。常用的参数选项有: + - -L:指定逻辑卷的大小,单位为“kKmMgGtT”字节。 + - -l:指定逻辑卷的大小(LE数)。 + - -f:强制调整逻辑卷大小,不需要用户确认。 + +- lvname:指定要调整的逻辑卷名称。 + +示例1:为逻辑卷/dev/vg1/lv1增加200M空间。 + +```shell +# lvresize -L +200 /dev/vg1/lv1 +``` + +示例2:为逻辑卷/dev/vg1/lv1减少200M空间。 + +```shell +# lvresize -L -200 /dev/vg1/lv1 +``` + +### 扩展逻辑卷 + +可在root权限下通过lvextend命令动态在线扩展逻辑卷的空间大小,而不中断应用程序对逻辑卷的访问。 + +```shell +lvextend [option] lvname +``` + +其中: + +- option:命令参数选项。常用的参数选项有: + - -L:指定逻辑卷的大小,单位为“kKmMgGtT”字节。 + - -l:指定逻辑卷的大小(LE数)。 + - -f:强制调整逻辑卷大小,不需要用户确认。 + +- lvname:指定要扩展空间的逻辑卷的设备文件。 + +示例:为逻辑卷/dev/vg1/lv1增加100M空间。 + +```shell +# lvextend -L +100M /dev/vg1/lv1 +``` + +### 收缩逻辑卷 + +可在root权限下通过lvreduce命令减少逻辑卷占用的空间大小。使用lvreduce命令收缩逻辑卷的空间大小有可能会删除逻辑卷上已有的数据,所以在操作前必须进行确认。 + +```shell +lvreduce [option] lvname +``` + +其中: + +- option:命令参数选项。常用的参数选项有: + - -L:指定逻辑卷的大小,单位为“kKmMgGtT”字节。 + - -l:指定逻辑卷的大小(LE数)。 + - -f:强制调整逻辑卷大小,不需要用户确认。 + +- lvname:指定要扩展空间的逻辑卷的设备文件。 + +示例:将逻辑卷/dev/vg1/lv1的空间减少100M。 + +```shell +# lvreduce -L -100M /dev/vg1/lv1 +``` + +### 删除逻辑卷 + +可在root权限下通过lvremove命令删除逻辑卷。如果逻辑卷已经使用mount命令加载,则不能使用lvremove命令删除。必须使用umount命令卸载后,逻辑卷方可被删除。 + +```shell +lvremove [option] lvname +``` + +其中: + +- option:命令参数选项。常用的参数选项有: + - -f:强制删除逻辑卷,不需要用户确认。 + +- lvname:指定要删除的逻辑卷设备文件名。 + +示例:删除逻辑卷/dev/vg1/lv1。 + +```shell +# lvremove /dev/vg1/lv1 +``` + +## 创建并挂载文件系统 + +在创建完逻辑卷之后,需要在逻辑卷之上创建文件系统并挂载文件系统到相应目录下。 + +### 创建文件系统 + +可在root权限下通过mkfs命令创建文件系统。 + +```shell +mkfs [option] lvname +``` + +其中: + +- option:命令参数选项。常用的参数选项有: + - -t:指定创建的linux系统类型,如ext2,ext3,ext4等等,默认类型为ext2。 + +- lvname:指定要创建的文件系统对应的逻辑卷设备文件名。 + +示例:在逻辑卷/dev/vg1/lv1上创建ext4文件系统。 + +```shell +# mkfs -t ext4 /dev/vg1/lv1 +``` + +### 手动挂载文件系统 + +手动挂载的文件系统仅在当时有效,一旦操作系统重启则会不存在。 + +可在root权限下通过mount命令挂载文件系统。 + +```shell +mount lvname mntpath +``` + +其中: + +- lvname:指定要挂载文件系统的逻辑卷设备文件名。 +- mntpath:挂载路径。 + +示例:将逻辑卷/dev/vg1/lv1挂载到/mnt/data目录。 + +```shell +# mount /dev/vg1/lv1 /mnt/data +``` + +### 自动挂载文件系统 + +手动挂载的文件系统在操作系统重启之后会不存在,需要重新手动挂载文件系统。但若在手动挂载文件系统后在root权限下进行如下设置,可以实现操作系统重启后文件系统自动挂载文件系统。 + +1. 执行blkid命令查询逻辑卷的UUID,逻辑卷以/dev/vg1/lv1为例。 + + ```shell + # blkid /dev/vg1/lv1 + ``` + + 查看打印信息,打印信息中包含如下内容,其中 _uuidnumber_ 是一串数字,为UUID, _fstype_ 为文件系统。 + + /dev/vg1/lv1: UUID=" _uuidnumber_ " TYPE=" _fstype_ " + +2. 执行**vi /etc/fstab**命令编辑fstab文件,并在最后加上如下内容: + + ```shell + UUID=uuidnumber mntpath fstype defaults 0 0 + ``` + + 内容说明如下: + + - 第一列:UUID,此处填写[1](#li65701520154311)查询的 _uuidnumber_ 。 + - 第二列:文件系统的挂载目录 _mntpath_ 。 + - 第三列:文件系统的文件格式,此处填写[1](#li65701520154311)查询的 _fstype_ 。 + - 第四列:挂载选项,此处以“defaults”为例。 + - 第五列:备份选项,设置为“1”时,系统自动对该文件系统进行备份;设置为“0”时,不进行备份。此处以“0”为例。 + - 第六列:扫描选项,设置为“1”时,系统在启动时自动对该文件系统进行扫描;设置为“0”时,不进行扫描。此处以“0”为例。 + +3. 验证自动挂载功能。 + 1. 执行umount命令卸载文件系统,逻辑卷以/dev/vg1/lv1为例。 + + ```shell + # umount /dev/vg1/lv1 + ``` + + 2. 执行如下命令,将/etc/fstab文件所有内容重新加载。 + + ```shell + # mount -a + ``` + + 3. 执行如下命令,查询文件系统挂载信息,挂载目录以/mnt/data为例。 + + ```shell + # mount | grep /mnt/data + ``` + + 查看打印信息,若信息中包含如下信息表示自动挂载功能生效。 + + /dev/vg1/lv1 on /mnt/data diff --git a/docs/zh/server/menmory_storage/lvm/public_sys-resources/icon-caution.gif b/docs/zh/server/menmory_storage/lvm/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/menmory_storage/lvm/public_sys-resources/icon-caution.gif differ diff --git a/docs/zh/server/menmory_storage/lvm/public_sys-resources/icon-danger.gif b/docs/zh/server/menmory_storage/lvm/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/menmory_storage/lvm/public_sys-resources/icon-danger.gif differ diff --git a/docs/zh/server/menmory_storage/lvm/public_sys-resources/icon-note.gif b/docs/zh/server/menmory_storage/lvm/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/server/menmory_storage/lvm/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/server/menmory_storage/lvm/public_sys-resources/icon-notice.gif b/docs/zh/server/menmory_storage/lvm/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/server/menmory_storage/lvm/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/server/menmory_storage/lvm/public_sys-resources/icon-tip.gif b/docs/zh/server/menmory_storage/lvm/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/zh/server/menmory_storage/lvm/public_sys-resources/icon-tip.gif differ diff --git a/docs/zh/server/menmory_storage/lvm/public_sys-resources/icon-warning.gif b/docs/zh/server/menmory_storage/lvm/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/menmory_storage/lvm/public_sys-resources/icon-warning.gif differ diff --git a/docs/zh/server/menmory_storage/public_sys-resources/icon-caution.gif b/docs/zh/server/menmory_storage/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/menmory_storage/public_sys-resources/icon-caution.gif differ diff --git a/docs/zh/server/menmory_storage/public_sys-resources/icon-danger.gif b/docs/zh/server/menmory_storage/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/menmory_storage/public_sys-resources/icon-danger.gif differ diff --git a/docs/zh/server/menmory_storage/public_sys-resources/icon-note.gif b/docs/zh/server/menmory_storage/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/server/menmory_storage/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/server/menmory_storage/public_sys-resources/icon-notice.gif b/docs/zh/server/menmory_storage/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/server/menmory_storage/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/server/menmory_storage/public_sys-resources/icon-tip.gif b/docs/zh/server/menmory_storage/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/zh/server/menmory_storage/public_sys-resources/icon-tip.gif differ diff --git a/docs/zh/server/menmory_storage/public_sys-resources/icon-warning.gif b/docs/zh/server/menmory_storage/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/menmory_storage/public_sys-resources/icon-warning.gif differ diff --git a/docs/zh/server/network/gazelle/Gazelle_for_opengauss_acceleration.md b/docs/zh/server/network/gazelle/Gazelle_for_opengauss_acceleration.md new file mode 100644 index 0000000000000000000000000000000000000000..1a25d4d16d74a427ae4e96390a6aaaeae9e8b1de --- /dev/null +++ b/docs/zh/server/network/gazelle/Gazelle_for_opengauss_acceleration.md @@ -0,0 +1,497 @@ +# Gazelle 加速openGauss使用说明 + +## 背景介绍 + +openGauss是一款高性能数据库,Gazelle作为一款高性能用户态协议栈,能够大幅提高应用的网络I/O吞吐能力。通过使用Gazelle加速openGauss,可有效提高openGauss性能。 +gazelle在openGauss单机场景中,能够提升15%的性能,一主一备场景中,能够提升5%的性能。 + +## 功能约束 + +- 当前验证使用的openGauss版本是openGauss 6.0.0(LTS)版本,其他版本未做过验证,可能不支持。 +- 当前gazelle验证通过openGauss单机、一主一备场景的加速使能,其他场景未做过验证,可能不支持。 +- Gazelle不支持端口复用:如果在用户态协议栈的IP上使用了某个端口,其他IP不能再使用这个端口。 + +## 用户态环境搭建 + +### 前置条件 + +1. 数据库安装完成以及完成内核态数据库正常启动。内核态具体可参考:[openGauss官网](https://opengauss.org/zh/download/) +2. 安装gazelle及依赖 + + ```sh + yum -y install gazelle dpdk libconfig numactl libboundscheck libcap + ``` + +3. benchmark 安装使用可参考 [benchmarkSql使用](https://opengauss.org/zh/blogs/optimize/opengauss-tpcc.html) + +### Gazelle环境配置 + +通过以下命令查看支持的大页大小。 + +```shell +ll /sys/kernel/mm/hugepages/ +``` + +一般来说,每个numa节点需要设置2-3G的大页内存。通常为4个numa节点,即需要8-12G的大页内存。根据支持的大页大小设置大页数量。 + +例如加入`hugepages-1048576kB`(1G)的大页,这里选择的是20个大页。对应内存为20GB,足够分配使用。需要保证数量为4的倍数。这个数值不宜过大,过大时会占据过多操作系统内存。 + +```shell +echo 20 > /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages + +#设置完成之后,在本地创建磁盘挂载: +mkdir /mnt/hugepages-1G +mount -t hugetlbfs -o pagesize=1G nodev /mnt/hugepages-1G + +#加载ko +modprobe vfio enable_unsafe_noiommu_mode=1 +modprobe vfio-pci +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>Gazelle部署详见[Gazelle用户指南](https://gitee.com/openeuler/gazelle/blob/master/doc/user-guide.md)
+>不同网卡绑定用户态方法详见[Gazelle网卡支持及使用](https://gitee.com/openeuler/gazelle/blob/master/doc/nic-support.md) + +### 配置lstack.conf文件 + +使用对应数据库用户编写lstack.conf,即保证用户具备该文件的访问权限。 + +几个关键配置项说明及修改点: + +- dpdk_args + +`3096,3096,3096,3096`为每个numa设置的内存大小。这里设置3GB。 + +`/mnt/hugepages-1G`修改为大页环境配置中设置的路径。 + +- num_cpus + +`30,31,62,63,94,95,126,127`:lstack设置的网络中断核。这里设置的是每个numa的最后两个CPU号。一共使用8个中断。 + +- app_bind_numa + +该参数决定是否将epoll/poll线程绑定到对应的numa节点上。需设置为0,即不绑定。gazelle绑核策略与gauss绑核策略冲突,此处使用gauss绑核策略。 + +- host_addr、mask_addr、gateway_addr、devices + +获取需要的网卡ip信息。一般通过使用`ip addr show`命令查看,即可获取所需信息。gateway_addr一般是ip将最后一位改为1。可以通过`route -n`查看gateway。 +需要配置的网卡信息: + +host_addr:20.20.20.119 + +mask_addr:255.255.255.0 + +gateway_addr:20.20.20.1 + +devices:78:b4:6a:40:16:30 + +执行`ip addr show`命令后截取的网卡信息: + +```sh + 8: enp7s0: mtu 1500 qdisc mq state UP group default qlen 1000 + link/ether 78:b4:6a:40:16:30 brd ff:ff:ff:ff:ff:ff + inet 20.20.20.149/24 brd 20.20.20.255 scope global enp7s0 + valid_lft forever preferred_lft forever +``` + +- app_exclude_cpus + +排除的CPU编号。openGauss采用CPU0作为xlog写入线程。采用`app_exclude_cpus="0"`这个方式排除对CPU0的绑核处理。 + +- listen_shadow + +是否使用影子fd监听,0为关闭,1为开启。单listen线程,多协议栈线程时使能。此处需要开启。 + +配置文件参考实例: + +```shell +dpdk_args=["--socket-mem", "3096,3096,3096,3096", "--huge-dir", "/mnt/hugepages-1G", "--proc-type", "primary", "--legacy-mem"] + +use_ltran=0 +kni_switch=0 + +low_power_mode=0 + +#needed mbuf count = tcp_conn_count * mbuf_count_per_conn +tcp_conn_count = 1500 +mbuf_count_per_conn = 350 + +# send ring size, default is 32, max is 2048 +send_ring_size = 32 + +# 0: when send ring full, send return +# 1: when send ring full, alloc mbuf from mempool to send data +expand_send_ring = 0 + +#protocol stack thread per loop params +#read data form protocol stack into recv_ring +read_connect_number = 4 +#process rpc msg number +rpc_number = 4 +#read nic pkts number +nic_read_number = 128 + +#each cpu core start a protocol stack thread. +num_cpus="30,31,62,63,94,95,126,127" + +#app worker thread bind to numa in epoll/poll. +app_bind_numa=0 +#app main thread affinity set by dpdk. +main_thread_affinity=0 + +host_addr="20.20.20.119" +mask_addr="255.255.255.0" +gateway_addr="20.20.20.1" +devices="78:b4:6a:40:16:31" + +udp_enable=0 +#0: use rss rule +#1: use tcp tuple rule to specify packet to nic queue +tuple_filter=0 + +#tuple_filter=1, below cfg valid +num_process=1 +process_numa="0,1" +process_idx=0 + +#tuple_filer=0, below cfg valid +listen_shadow=1 +#exclude cpu +app_exclude_cpus="0" +``` + +## 提权 + +对gaussdb二进制、liblstack.so提权,对ls命令提权。 + +```shell +#对gaussdb二进制提权 +sudo setcap 'cap_chown,cap_dac_override,cap_dac_read_search,cap_sys_rawio,cap_net_admin,cap_net_raw,cap_sys_admin+eip' `which gaussdb` +#对liblstack.so提权 +sudo chmod u+s /usr/lib64/liblstack.so +#对ls命令提权 +setcap 'cap_chown,cap_dac_override,cap_dac_read_search,cap_sys_rawio,cap_net_admin,cap_net_raw,cap_sys_admin+eip' $(which ls) +``` + +提权之后的gaussdb不会再从LD_LIBRARY_PATH中查找动态库路径,因此还需要配置全局动态库路径:`vim /etc/ld.so.conf.d/opengauss.conf`。将实际的动态库对应路径内容写入。 + +```shell +/home/code/openGauss-server/dest/lib +``` + +## 必要路径权限 + +需要修改大页内存对应的文件路径权限和liblstack.so权限,允许用户访问。 + +```shell +chown -R 777 /mnt/ +chmod 777 /usr/lib64/liblstack.so +``` + +还需要确保编写的lstack.conf文件也具备用户访问权限。 + +## 数据库测试 + +### 必要信息准备 + +首先数据库测试需要至少一块NVME硬盘用于数据存储。 + +本地测试为HINIC网卡。 + +一些信息可以下面这些命令查询,假设网卡名为:enp8s0。 + +```shell +# PCI查询: + ethtool -i enp8s0 | grep bus-info +``` + +### 切换用户态网卡 + +该操作会导致该网卡无法使用。请使用BMC机器操作,或者具备双网口的环境操作。否则环境会不可用。 +使用root用户切换网卡为用户态网卡。该操作会停止该网卡并用dpdk接管。如果使用该网卡建立ssh连接,会直接断开连接。 + +```shell +#PCI=0000:08:00.0 +#NET_DEVICE=enp8s0 +ifconfig enp8s0 down +sudo modprobe vfio enable_unsafe_noiommu_mode=1 +sudo echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode +sudo dpdk-devbind -b vfio-pci 0000:08:00.0 +``` + +### 启动数据库 + +openGauss 配置文件修改: + +在openGauss数据库的配置文件‘postgresql.conf’ 追加参数:[追加参数文件](#gauss_config) + +数据库配置 postgresql.conf文件修改,需要需根据实际情况修改线程池相关参数,以及增加数据配置文件中性能参数。 + +```shell +# 此参数为 openGauss 绑定cpu 个数, 如 openGauss 绑定 1-29 32-61 64-93 96-125 共计 4 numa 分区,119 个 cpu, 线程数为 cpu 的整数倍,以4倍为例,为 476 +thread_pool_attr = '476,4,(cpubind:1-29,32-61,64-93,96-125)' + +# 此参数在使用 gazelle 加速时打开此选项 +enable_gazelle_performance_mode=on +``` + +环境清理: +为避免后台缓存和后台信号量对测试有影响,需要清理下对应的数据。 + +```shell +ipcs -m | awk '$2 ~/[0-9]+/ {print $2}' | while read s; do ipcrm -m $s; done +ipcs -s | awk '$2 ~/[0-9]+/ {print $2}' | while read s; do ipcrm -s $s; done +echo 3 > /proc/sys/vm/drop_caches +``` + +启动数据库: + +```shell +# 设置Gazelle 配置文件路径 +LSTACK_CONF_PATH=/usr1/gazelle/gazelle_conf/lstack.conf +# 启动 Gazelle 加速 gaussdb, 已启动 openGauss 下dn1 数据库节点为例 +LD_PRELOAD=liblstack.so GAZELLE_BIND_PROCNAME=gaussdb LSTACK_CONF_PATH=$LSTACK_CONF_PATH /home/opengauss/software/openGauss/bin/gaussdb -D /home/opengauss/software/openGauss/data/dn1 +``` + +### 启动TPCC测试 + +客户端需要根据实际情况配置网络中断,此处以配置20个中断为例,对应的bind_irq.sh文件: + +```shell +intf=enp4s0 + +ethtool -G ${intf} rx 1024 tx 1024 +ethtool -K ${intf} lro on +ethtool -L ${intf} combined ${combined} + +irq_list=`cat /proc/interrupts | grep $intf | awk {'print $1'} | tr -d ":"` +irq_array_net=($irq_list) + +cpu_array_irq=(27 28 29 30 31 59 60 61 62 63 91 92 93 94 95 123 124 125 126 127) + +for (( i=0;i<20;i++)) +do + echo "${cpu_array_irq[$i]}" > /proc/irq/${irq_array_net[$i]}/smp_affinity_list +done + +for j in ${irq_array_net[@]} +do + cat /proc/irq/$j/smp_affinity_list +done +``` + +benchmark客户端需要根据实际情况修改并发数。 +通常修改为postgresql.conf配置文件中cpubind参数,核数量的倍数如1-29,32-61,64-93,96-125核数为119,取4倍得714,则将并发数修改为714: + +```shell +terminals=714 +``` + +### 恢复 + +1. 停止数据库。 +2. 使用root切换回内核态网卡。 + +将用户态网卡切换为内核态网卡: + +```shell +#PCI=0000:08:00.0 +#NET_DEVICE=enp8s0 +#IP=20.20.20.119 +sudo dpdk-devbind -u 0000:08:00.0 +sudo dpdk-devbind -b hinic 0000:08:00.0 +sudo ifconfig enp8s0 20.20.20.119 netmask 255.255.255.0 +``` + +### 测试结论 + +在单机测试中,实测TPCC性能大致提升15%左右。 + + +## openGauss文件配置参考 +postgresql.conf配置文件:打开postgresql.conf文件后,在文件末尾追加如下内容(IP需根据实际ip更改): + +```shell +max_connections = 4096 +allow_concurrent_tuple_update = true +audit_enabled = off +checkpoint_segments = 1024 +checkpoint_timeout = 15min +cstore_buffers = 16MB +enable_alarm = off +enable_codegen = false +enable_data_replicate = off +full_page_writes = off +max_files_per_process = 100000 +max_prepared_transactions = 2048 +shared_buffers = 350GB +#max_process_memory = 100GB +use_workload_manager = off +wal_buffers = 1GB +work_mem = 1MB +log_min_messages = FATAL +transaction_isolation = 'read committed' +default_transaction_isolation = 'read committed' +synchronous_commit = on +fsync = on +maintenance_work_mem = 2GB +vacuum_cost_limit = 10000 +autovacuum = on +autovacuum_mode = vacuum +autovacuum_max_workers = 20 +autovacuum_naptime = 5s +autovacuum_vacuum_cost_delay = 10 +#xloginsert_locks = 48 +update_lockwait_timeout = 20min + +enable_mergejoin = off +enable_nestloop = off +#----- +enable_hashjoin = off +#enable_cbm_tracking = off +enable_bitmapscan = on +enable_material = off + +wal_log_hints = off +log_duration = off +checkpoint_timeout = 15min +autovacuum_vacuum_scale_factor = 0.1 +autovacuum_analyze_scale_factor = 0.02 +enable_save_datachanged_timestamp = false + +# enable_stat_send = off +# enable_commandid_send = off +log_timezone = 'PRC' +timezone = 'PRC' +lc_messages = 'C' +lc_monetary = 'C' +lc_numeric = 'C' +lc_time = 'C' + +enable_thread_pool = on + +enable_double_write = on + +enable_incremental_checkpoint = on +enable_opfusion = on +instr_unique_sql_count=0 +advance_xlog_file_num = 100 +numa_distribute_mode = 'all' + +track_activities = off +enable_instr_track_wait = off +enable_instr_rt_percentile = off +track_counts = off +track_sql_count = off +enable_instr_cpu_timer = off + +plog_merge_age = 0 + +# numa_excluded_cpus = '29,30,31,61,62,63,93,94,95,125,126,127' +# numa_excluded_cpus = '28,29,30,31,60,61,62,63,92,93,94,95,124,125,126,127' + +#enable_crc_check = off +session_timeout = 0 + +enable_instance_metric_persistent = off +enable_logical_io_statistics = off +enable_page_lsn_check = off +enable_user_metric_persistent = off +enable_xlog_prune = off + +enable_resource_track = off +instr_unique_sql_count=0 + +remote_read_mode = non_authentication +client_min_messages = ERROR +log_min_messages = FATAL +enable_asp = off +enable_bbox_dump = off +bgwriter_flush_after = 32 +#gs_clean_timeout = '300s' +#minimum_pool_size = 200 +wal_keep_segments = 1025 + + +#scan_fusion +enable_bitmapscan = off +enable_seqscan = off + +track_activities='off' +enable_resource_track='off' +enable_instr_rt_percentile='off' +enable_instr_cpu_timer='off' +# bypass_workload_manager='off' +enable_asp='off' + +enable_thread_pool = on +xloginsert_locks=16 +checkpoint_segments=8000 + +enable_stmt_track=false + +data_replicate_buffer_size=128MB + +#bgwriter_thread_num = 1 + +bgwriter_delay = 5s +incremental_checkpoint_timeout = 5min +pagewriter_thread_num = 2 +candidate_buf_percent_target = 0.3 +pagewriter_sleep = 100ms + +standby_shared_buffers_fraction = 0.9 + +#replconninfo1 = 'localhost=20.20.20.58 localport=21131 localheartbeatport=21135 localservice=21134 remotehost=20.20.20.64 remoteport=21131 remoteheartbeatport=21135 remoteservice=21134' + +# 2020-12-20 +enable_incremental_checkpoint = on +checkpoint_segments = '4096' +checkpoint_timeout = 50min +#enable_thread_pool = off + +max_process_memory = 240GB +shared_buffers = 180GB + +wal_level = archive +hot_standby = off + +wal_receiver_buffer_size = 256MB +walsender_max_send_size = 32MB + + +# 2021-03-16 +xloginsert_locks = 8 +wal_file_init_num = 30 +#xlog_idle_flushes_before_sleep = 500000000 +walwriter_sleep_threshold = 50000 +wal_writer_delay = 150 + +undo_zone_count = 0 + +walwriter_cpu_bind = 0 +checkpoint_segments = 32768 + +local_syscache_threshold = 16MB +enable_cachedplan_mgr = off +enable_global_syscache = off + +time_record_level = 1 +enable_beta_opfusion = on + +#wal_file_init_num = 10000 +#advance_xlog_file_num = 50000 +light_comm = on +enable_indexscan_optimization = on + +hot_standby = off + +checkpoint_segments = 3000 +advance_xlog_file_num = 100000 +thread_pool_attr = '476,4,(cpubind:1-29,32-61,64-93,96-125)' +enable_gazelle_performance_mode=on + +#------------------------------------------------------------------------------ +wal_file_init_num = 40000 +advance_xlog_file_num = 100000 +``` diff --git a/docs/zh/server/network/gazelle/Gazelle_for_redis_acceleration.md b/docs/zh/server/network/gazelle/Gazelle_for_redis_acceleration.md new file mode 100644 index 0000000000000000000000000000000000000000..24fc97844a7537ef39a727d03f1b2561a77f6057 --- /dev/null +++ b/docs/zh/server/network/gazelle/Gazelle_for_redis_acceleration.md @@ -0,0 +1,341 @@ +# Gazelle加速redis + +## 背景介绍 + + Gazelle是一款高性能用户态协议栈。它基于DPDK在用户态直接读写网卡报文,共享大页内存传递报文,使用轻量级LwIP协议栈。能够大幅提高应用的网络I/O吞吐能力。专注于数据库网络性能加速,如MySQL、redis等。 + +Gazelle相比于内核协议栈在redis测试中有明显的提升,以arm架构、8u32g规格、ovs+dpdk虚拟机的set和get测试为例,测是结果如下,set提升约1.7倍,get提升约1.5倍,其中测试连接数为1k,包长为默认包长3。 + +```sh +#kernel +redis-benchmark -h 192.168.1.127 -p 6379 -c 1000 -n 10000000 -r 10000000 -t set,get --threads 12 +#set +Summary: + throughput summary: 132402.98 requests per second + latency summary (msec): + avg min p50 p95 p99 max + 7.474 1.376 7.207 9.399 14.255 30.879 +#get +Summary: + throughput summary: 142834.69 requests per second + latency summary (msec): + avg min p50 p95 p99 max + 6.919 1.384 6.663 8.751 13.311 24.207 +``` + +```sh +#gazelle +redis-benchmark -h 192.168.1.127 -p 6379 -c 1000 -n 10000000 -r 10000000 -t set,get --threads 12 +#set +Summary: + throughput summary: 359389.03 requests per second + latency summary (msec): + avg min p50 p95 p99 max + 2.736 0.240 2.735 2.895 3.127 9.471 +#get +Summary: + throughput summary: 359401.97 requests per second + latency summary (msec): + avg min p50 p95 p99 max + 2.752 0.488 2.751 2.903 3.135 16.671 +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>不同的硬件配置及组网环境会影响性能提升的效果,上述测试结果仅供参考。 + +## 功能约束 + +- 当前仅支持IPV4,IPV6暂不支持。 +- 并发数限制最大为2w。 +- 当前不支持gazelle多进程,即一个节点上不能用gazelle启动多个redis server。 +- redis主从集群中,内核态日志反复打印主从重连日志,用户态只打印一次,此为正常现象,无功能影响。原因:一个内核态主节点下线后,表现为从节点尝试连接主节点,发送SYN报文,主节点处于TIME_WAIT状态回复RST报文关闭连接,以此反复。一个用户态主节点下线后,由于gazelle+redis退出后连接完全关闭,未处于TIME_WAIT状态,从节点尝试连接主节点,发送SYN报文,主节点不会回复RST报文,所以gazellectl lstack show ip -c查询时,会存在一个处于SYN_SENT状态的连接。 + +## Gazelle加速redis测试步骤 + +### 环境要求 + +#### 硬件 + +单机测试需要服务端(Server)、客户端(Client)各一台;
+主从模式测试至少两台服务端(一主一从)、一台客户端;
+哨兵模式测试至少两台redis服务端(一主一从)、两台哨兵服务端、一台客户端;
+集群模式测试至少六台redis服务端(三主三从)、一台客户端。
+ +#### 软件 + +[redis软件包下载](https://download.redis.io/releases/),本次使用版本为redis-6.2.9。 + +### Server端部署 + +#### 关闭测试影响项 + +```sh +#关闭防火墙 +systemctl stop iptables +systemctl stop firewalld +``` + +#### 编译安装redis + +```sh +tar zxvf redis-6.2.9.tar.gz +cd redis-6.2.9/ +make clean +make -j 32 +make install +``` + +#### gazelle运行环境部署 + +- 安装gazelle及依赖 + +```sh +yum -y install gazelle dpdk libconfig numactl libboundscheck libcap +``` + +- 修改/etc/gazelle/lstack.conf配置文件中参数如下,其他配置参数可保持默认值。 + +| 配置项 | 值 | 描述 | +| ------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| dpdk_args | ["--socket-mem", "2400,0,0,0", "--huge-dir", "/mnt/hugepages-lstack", "--proc-type", "primary"] | 配置cpu和网卡所在的numa使用2400M内存(可根据并发数减少);如果cpu和网卡不在一个numa上,则对应numa都需要配置内存;如果是mlx网卡,需要追加配置"-d", "librte_net_mlx5.so" | +| num_cpus | "2" | 选择一个cpu绑定lstack | +| mbuf_count_per_conn| 34 | 每个连接需要的mbuf数量 | +| tcp_conn_count | 20000 | redis测试最大并发数 | + +```sh +#服务端分配大页 +mkdir -p /mnt/hugepages-lstack +chmod -R 700 /mnt/hugepages-lstack +mount -t hugetlbfs nodev /mnt/hugepages-lstack -o pagesize=2M #不能重复操作,否则大页被占用不能释放 +echo 2048 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages #根据实际选择pagesize +cat /sys/devices/system/node/node0/hugepages/hugepages-2048kB/free_hugepages #查询对应node上实际可用的大页内存 + +#服务端加载ko(mlx网卡可跳过此步骤) +modprobe vfio enable_unsafe_noiommu_mode=1 +modprobe vfio-pci + +#服务端绑定网卡到用户态(mlx网卡可跳过此步骤) +ip link set enp4s0 down +dpdk-devbind -b vfio-pci enp4s0 + +#gazelle部署完成,待app部署 +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>Gazelle部署详见[Gazelle用户指南](https://gitee.com/openeuler/gazelle/blob/master/doc/user-guide.md)
+>不同网卡绑定用户态方法详见[Gazelle网卡支持及使用](https://gitee.com/openeuler/gazelle/blob/master/doc/nic-support.md) + +#### redis服务端部署 + +redis环境部署包括单机部署、主从模式部署、哨兵模式部署和集群模式部署,所有场景的redis server的redis.conf文件,均需要做如下配置: + +```sh +#关闭保护模式 +protected-mode no +#gazelle暂不支持此参数进行后台运行 +daemonize no +#开启AOF持久化,redis单机测试可不配置 +appendonly yes +``` + +##### redis单机部署 + +redis单机测试包含一台server,部署好gazelle和redis后,可以直接启动gazelle+redis服务 + +```sh +LD_PRELOAD=/usr/lib64/liblstack.so GAZELLE_BIND_PROCNAME=redis-server redis-server /root/redis-6.2.9/redis.conf +``` + +##### redis主从模式部署 + +主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。redis主从模式包括至少两台server,配置方法有两种:
+ +主从配置方式1
+从节点redis.conf配置文件中添加如下配置,然后分别启动redis主从节点 + +```sh +#192.168.1.127 6379为主节点服务的ip和port +slaveof 192.168.1.127 6379 +``` + +```sh +LD_PRELOAD=/usr/lib64/liblstack.so GAZELLE_BIND_PROCNAME=redis-server redis-server /root/redis-6.2.9/redis.conf +``` + +主从配置方式2
+完成主从节点通用配置修改后,启动redis主从节点(此时还没有建立主从关系),在客户端执行以下命令 + +```sh +redis-cli -h 192.168.1.127 slaveof NO ONE #主节点 +redis-cli -h 192.168.1.128 slaveof 192.168.1.127 6379 #从节点 +``` + +主从信息查询
+ +```sh +[root@openEuler redis-6.2.9]# redis-cli -h 192.168.1.127 info Replication +# Replication +role:master +connected_slaves:1 +slave0:ip=192.168.1.128,port=6379,state=online,offset=780,lag=0 +...... +``` + +```sh +[root@openEuler redis-6.2.9]# redis-cli -h 192.168.1.128 info Replication +# Replication +role:slave +master_host:192.168.1.127 +master_port:6379 +master_link_status:up +...... +``` + +##### redis哨兵模式部署 + +哨兵模式基于主从复制模式,只是引入了哨兵来监控与自动处理故障。主从切换技术的方法是:当服务器宕机后,需要手动一台从机切换为主机,这需要人工干预,不仅费时费力而且还会造成一段时间内服务不可用。为了解决主从复制的缺点,就有了哨兵机制。redis哨兵模式测试至少需要两台redis服务端和两台哨兵服务端。 + +- 按照主从模式部署方法将两台redis服务端启动
+- 在两台哨兵服务端安装部署redis,分别修改sentinel.conf配置文件 + +```sh +protected-mode no #关闭保护模式 +daemonize yes #后台运行,日志记录在logfile +logfile "/var/log/sentinel.log" #指定日志存放路径 +sentinel monitor mymaster 192.168.1.127 6379 1 #该主节点的名称是mymaster,监控master的ip、端口,1是至少需要1个哨兵节点同意,才能判定主节点故障并进行故障转移 +sentinel down-after-milliseconds mymaster 30000 #判断服务器down掉的时间周期,默认30000毫秒(30秒) +sentinel failover-timeout mymaster 50000 #故障节点的最大超时时间为50000 +``` + +- 启动哨兵(内核态启动),查询哨兵信息 + +```sh +[root@openEuler redis-6.2.9]#redis-sentinel sentinel.conf +[root@openEuler redis-6.2.9]#ps -ef|grep redis-sentinel +root 5961 1 0 13:36 ? 00:00:00 redis-sentinel *:26379 [sentinel] +[root@openEuler redis-6.2.9]#redis-cli -p 26379 info sentinel +# Sentinel +sentinel_masters:1 +sentinel_tilt:0 +sentinel_running_scripts:0 +sentinel_scripts_queue_length:0 +sentinel_simulate_failure_flags:0 +master0:name=mymaster,status=ok,address=192.168.1.127:6379,slaves=2,sentinels=3 +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>redis server和redis 哨兵不可以在同一个节点上,否则无法正常主备切换;
+>redis 哨兵暂不支持用户态启动。 + +##### redis集群模式部署 + +单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,其作用是提供在多个Redis节点间共享数据的程序集。redis集群测试至少需要六台redis服务端。 + +- 在六台redis服务端安装部署redis,分别修改redis.conf配置文件 + +```sh +protected-mode no #关闭保护模式 +daemonize no #前台运行 +bind 0.0.0.0 +port 6379 #redis部署在不同的虚机上,ip不一样,端口可以保持默认 +appendonly yes #开启aof持久化 +cluster-enabled yes #开启集群模式 +cluster-config-file nodes.conf #集群模式的配置文件名称,无需手动创建,由集群自动维护 +cluster-node-timeout 5000 #集群中节点之间心跳超时时间 +``` + +- 分别启动六台redis服务端
+ +```sh +LD_PRELOAD=/usr/lib64/liblstack.so GAZELLE_BIND_PROCNAME=redis-server redis-server /root/redis-6.2.9/redis.conf +``` + +- 在客户端执行命令创建集群,同意集群中master与slave节点的分配情况 + +```sh +[root@openEuler redis-6.2.9]#redis-cli --cluster create --cluster-replicas 1 192.168.1.127:6379 192.168.1.128:6379 192.168.1.129:6379 192.168.1.130:6379 192.168.1.131:6379 192.168.1.132:6379 +>>> Performing hash slots allocation on 6 nodes... +...... +Can I set the above configuration? (type 'yes' to accept): yes +>>> Nodes configuration updated +>>> Assign a different config epoch to each node +>>> Sending CLUSTER MEET messages to join the cluster +Waiting for the cluster to join +... +>>> Performing Cluster Check (using node 192.168.1.127:6379) +...... +[OK] All nodes agree about slots configuration. +>>> Check for open slots... +>>> Check slots coverage... +[OK] All 16384 slots covered. #hash slots分配OK则集群创建成功 + +#redis-cli --cluster:代表集群操作命令;create:代表是创建集群;--cluster-replicas 1 :指定集群中每个master的副本个数为1 +#此时节点总数 ÷ (replicas + 1) 得到的就是master的数量n。因此节点列表中的前n个节点就是master,其它节点都是slave节点,随机分配到不同master +``` + +- 查询集群信息
+ +集群中任意一个正常运行的server都可以作为切入点 + +```sh +#查看集群状态信息 +[root@openEuler redis-6.2.9]# redis-cli -h 192.168.1.127 cluster info +cluster_state:ok #如果这里是fail,可以看下hash slots分配失败 +cluster_slots_assigned:16384 +cluster_slots_ok:16384 +cluster_slots_pfail:0 +cluster_slots_fail:0 +...... +``` + +```sh +#查看集群的主从关系 +[root@openEuler redis-6.2.9]# redis-cli -h 192.168.1.128 cluster nodes +514b35aaa5035d489b60a0e8f8fb01d1c20734ce 192.168.1.129:6379@16379 slave 50aa44a1e4a6a0c75cf2f9b20055bfaa77d1b163 0 1724919619916 1 connected +50aa44a1e4a6a0c75cf2f9b20055bfaa77d1b163 192.168.1.127:6379@16379 master - 0 1724919617960 1 connected 0-5460 +a94402ca747ead08e4b93ff975dfbe995068ecbf 192.168.1.130:6379@16379 slave 0a569e1ac4e373a22abcbf6ce6b8118fba3d4d6e 0 1724919618000 3 connected +8c4040a4fa8456044acad2518dc45b8236ba44c4 192.168.1.128:6379@16379 myself,slave 44a96161651c8383fb4966c6dde45d400fe2a203 0 1724919617000 2 connected +0a569e1ac4e373a22abcbf6ce6b8118fba3d4d6e 192.168.1.132:6379@16379 master - 0 1724919618975 3 connected 10923-16383 +44a96161651c8383fb4966c6dde45d400fe2a203 192.168.1.131:6379@16379 master - 0 1724919619617 2 connected 5461-10922 +#可以看出127、131、132是master节点,128、129、130为slave节点,且可以通过slave后的node id找到其对应的master节点 +``` + +### Client部署redis-benchmark工具 + +- 编译安装 + +redis-benchmark为redis自带的测试工具,与服务端一样编译安装redis即可。 + +- 测试命令 + +```sh +#单机、主从模式、哨兵模式 +#set,get +redis-benchmark -h 192.168.1.127 -p 6379 -c 1000 -n 10000000 -d 3 -r 10000000 -t set,get --threads 12 +#其中,-h:指定redis服务端地址;-p:指定redis服务端端口;-c:指定客户端并发连接数;-n:指定请求总数;-t:指定测试命令;-d:指定数据包大小 +#主从模式和哨兵模式下,由于默认配置了slave-read-only yes,从节点redis只能执行get命令。 +``` + +```sh +#集群模式 +#set,get +redis-benchmark -h 192.168.1.127 -p 6379 -c 1000 -n 10000000 -d 3 -r 10000000 -t set,get --threads 12 --cluster +#-h只需指定集群中任意一个可用节点即可 +``` + +### Gazelle加速redis成功日志样例 + +```sh +[root@openEuler redis-6.2.9]# LD_PRELOAD=/usr/lib64/liblstack.so GAZELLE_BIND_PROCNAME=redis-server redis-server redis.conf +LSTACK[2555459]: LD_PRELOAD ok +dpdk argv: --socket-mem 2400,0,0,0 --huge-dir /mnt/hugepages-lstack --proc-type primary +LSTACK[2555459]: cfg_init success +#dpdk启动log省略,环境不同存在差异 +...... +#gazelle打印init success则启动成功 +LSTACK: gazelle_stack_thread:533 stack_00 init success +LSTACK: gazelle_network_init:328 gazelle_network_init success +#redis启动log省略,与内核态redis启动log相同 +``` + +启动成功后,可以在客户端ping lstack.conf中配置的用户态ip,ping通则gazelle加速redis部署成功。 diff --git a/docs/zh/server/network/gazelle/Gazelle_single_nic_user_guide.md b/docs/zh/server/network/gazelle/Gazelle_single_nic_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..4d597e33823b170228975cacc94bc6dc034f8db7 --- /dev/null +++ b/docs/zh/server/network/gazelle/Gazelle_single_nic_user_guide.md @@ -0,0 +1,191 @@ +# Gazelle单网卡功能使用说明 + +## 背景介绍 + +目前使用 Gazelle 进行应用程序进行加速时,只能处理应用程序使用端口的报文,对网卡接收到的其他报文(如运维命令ssh 等),无法进行处理。 + +### 功能介绍 + +对于网卡接收到的所有报文,在 Gazelle 内部进行分流处理。分流原则如下:对于Gazelle 记录端口的报文在 Gazelle 处理后送到应用程序,对未记录端口的报文转送到内核。 + +举例:当Gazelle 加速redis时,Gazelle 会在启动时记录redis监听的端口6379。当Gazelle 收到网卡的报文后,进行每个报文进行判断,对于目的端口是6379 的报文送到Gazelle,其余的报文送到内核进行处理。 + +### 使用说明 + +#### 虚机场景 + +1. 安装dpdk Gazelle 配置大页 + + ```shell + yum install -y dpdk gazelle + echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages + mkdir -p /mnt/hugepages-lstack + chmod -R 700 /mnt/hugepages-lstack + mount -t hugetlbfs nodev /mnt/hugepages-lstack + ``` + + 详细步骤可参考:[挂载大页内存](https://gitee.com/openeuler/Gazelle/blob/master/doc/user-guide.md#3-%E5%A4%A7%E9%A1%B5%E5%86%85%E5%AD%98%E9%85%8D%E7%BD%AE) + +2. dpdk 绑定网卡 + + 以网卡绑定 igb_uio 为例 + + ```shell + cd /lib/modules + my_var=$(find /lib/modules/ -name igb_uio.ko) + modprobe uio + # 加载ko + insmod ${my_var} + #使用igb_uio + dpdk-devbind -b igb_uio enp3s0 + ``` + + 详细步骤可参考: [dpdk绑定网卡](https://gitee.com/openeuler/Gazelle/blob/master/doc/user-guide.md#2-dpdk%E7%BB%91%E5%AE%9A%E7%BD%91%E5%8D%A1) + +3. 修改Gazelle配置文件 + + ```shell + flow_bifurcation=1 # 打开分流开关 + ``` + +4. 加速应用程序,启动Gazelle 以加速 redis 为例 + + ```shell + LD_PRELOAD=/usr/lib64/liblstack.so Gazelle_BIND_PROCNAME=redis-server /root/redis-server /root/redis.conf + ``` + +#### 容器场景 + +1. 安装dpdk、配置大页、dpdk 绑定网卡 同上述章节虚拟场景配置 +2. 安装 docker + + ```shell + yum install -y docker + ``` + +3. 导入镜像 + + ```shell + docker load -i openEuler-docker.x86_64.tar.xz + ``` + +##### host模式 + +1. 启动容器 + + ```shell + docker run -d -it --privileged -v /lib/modules:/lib/modules -v /mnt:/mnt -v /dev:/dev -v /sys/bus/pci/drivers:/sys/bus/pci/drivers -v /sys/kernel/mm/hugepages:/sys/kernel/mm/hugepages -v /sys/devices/system/node:/sys/devices/system/node -v /dev:/dev openeuler-22.03-lts-sp4 bash + ``` + + ```shell + docker 启动映射文件解释 + -v /lib/modules:/lib/modules 映射内核模块 + -v /mnt:/mnt 映射外部存储设备 文件系统 + -v /dev:/dev 映射内核设备 + -v /sys/bus/pci/drivers:/sys/bus/pci/drivers 映射驱动文件 + -v /sys/kernel/mm/hugepages:/sys/kernel/mm/hugepages 映射大页信息 + -v /sys/devices/system/node:/sys/devices/system/node 映射节点信息 + ``` + +2. 进入容器 + + ```shell + docker exec -it xxxxx bash + ``` + +3. 安装dpdk Gazelle + + ```shell + yum install -y dpdk gazele + ``` + +4. 修改配置文件 + + ```shell + flow_bifurcation=1 # 打开分流开关 + devices="52:54:00:de:2a:57" # 修改mac地址为 dpdk绑定的网卡地址 + ``` + +5. 启动Gazelle + 以加速 redis 为例 + + ```shell + LD_PRELOAD=/usr/lib64/liblstack.so Gazelle_BIND_PROCNAME=redis-server /root/redis-server /root/redis.conf + ``` + +##### VF 直通模式 + +1. 启动容器 + + ```shell + docker run -d -it --network host --privileged -v /lib/modules:/lib/modules -v \ + /mnt:/mnt -v /dev:/dev -v /sys/bus/pci/drivers:/sys/bus/pci/drivers -v \ + /sys/kernel/mm/hugepages:/sys/kernel/mm/hugepages -v \ + /sys/devices/system/node:/sys/devices/system/node -v /dev:/dev \ + openeuler-22.03-lts-sp4 bash + ``` + +2. 配置VF 直通网卡 + + ```shell + echo 2 > /sys/class/net/enp130s0f1/device/sriov_numvfs + docker ps + PID=$(docker inspect -f '{{.State.Pid}}' 容器名称) + mkdir -p /var/run/netns + ln -s /proc/PID/ns/net /var/run/netns/PID + ip link set enp129s0f1v0 netns PID + ``` + +3. 进入容器 + + ```shell + docker exec -it xxx bash + ``` + +4. 安装dpdk Gazelle + + ```shell + yum install -y dpdk gazele + ``` + +5. 修改配置文件 + + ```shell + flow_bifurcation=1 # 打开分流开关 + devices="52:54:00:de:2a:57" # 修改mac地址为VF直通的网卡 + ``` + +6. 启动Gazelle + 以加速 redis 为例 + + ```shell + LD_PRELOAD=/usr/lib64/liblstack.so Gazelle_BIND_PROCNAME=redis-server /root/redis-server /root/redis.conf + ``` + +### 功能限制 + +1. 同节点通信(用户态服务端+内核态客户端 或者 用户态客户端+ 内核态服务端)只支持TCP协议,UDP 协议暂不支持。 +2. 不支持和kni 功能同时开启。 +3. 对不携带端口的报文无法做到分流。 +4. 开启此功能后,性能会下降 2% 左右。 +5. 虚拟环境及容器环境需要支持`ip a`命令查询网卡信息。若不支持此命令,可能影响虚拟网卡IPV6地址状态,进而影响IPV6通信。 + +### 已支持运维命令 + ++ ifconfig ++ tcpdump ++ ifconfig ++ ftp/sftp ++ sar ++ netstat + ++ ssh -- 需开启ssh 登录,若未开启可按照下面方式开启 + +```shell +[root@eb2936ebeaaf ~]# yum install openssh-server +[root@eb2936ebeaaf ~]# vim /etc/ssh/sshd_config +Port 22 # 开启端口 +PubkeyAuthentication yes # 修改登录验证方式 +[root@eb2936ebeaaf ~]# /usr/sbin/sshd # 启动ssh服务 +[root@eb2936ebeaaf ~]# netstat -pant | grep sshd # 查询 ssh 服务是否开启 +``` diff --git a/docs/zh/server/network/gazelle/_toc.yaml b/docs/zh/server/network/gazelle/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..43468248fc0aa6ba4f5e6a428d6ba581d4e7c29a --- /dev/null +++ b/docs/zh/server/network/gazelle/_toc.yaml @@ -0,0 +1,11 @@ +isManual: true +label: '' +sections: + - label: Gazelle 加速openGauss使用说明 + href: ./Gazelle_for_opengauss_acceleration.md + - label: Gazelle加速redis + href: ./Gazelle_for_redis_acceleration.md + - label: Gazelle单网卡功能使用说明 + href: ./Gazelle_single_nic_user_guide.md + - label: 用户态协议栈Gazelle用户指南 + href: ./gazelle_user_guide.md diff --git a/docs/zh/server/network/gazelle/gazelle_user_guide.md b/docs/zh/server/network/gazelle/gazelle_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..25a79f43d8218f0628d63fdd6d3283849a001d6c --- /dev/null +++ b/docs/zh/server/network/gazelle/gazelle_user_guide.md @@ -0,0 +1,356 @@ +# 用户态协议栈Gazelle用户指南 + +## 简介 + +Gazelle是一款高性能用户态协议栈。它基于DPDK(Data Plane Development Kit,数据平面开发工具集)在用户态直接读写网卡报文,共享大页内存传递报文,使用轻量级LwIP协议栈。能够大幅提高应用的网络I/O吞吐能力。专注于数据库网络性能加速,如MySQL、redis等。 + +- 高性能 + 报文零拷贝,无锁,灵活scale-out,自适应调度。 +- 通用性 + 完全兼容POSIX,零修改,适用不同类型的应用。 + +单进程且网卡支持多队列时,只需使用liblstack.so,以缩短报文路径。其余场景使用ltran进程分发报文到各个线程。 + +## 安装 + +配置openEuler的yum源,直接使用yum命令安装。 + +```sh +yum install dpdk +yum install libconfig +yum install numactl +yum install libboundscheck +yum install libpcap +yum install gazelle +``` + +>说明: +dpdk 版本要求在21.11-2及其以上。 + +## 使用方法 + +配置运行环境,使用Gazelle加速应用程序步骤如下: + +### 1. 使用root权限安装ko + +根据实际情况选择使用ko,提供虚拟网口、绑定网卡到用户态功能。 +若使用虚拟网口功能,则使用rte_kni.ko。 + +```sh +modprobe rte_kni carrier="on" +``` + +配置NetworkManager不托管kni网卡。 + +```sh +[root@localhost ~]# cat /etc/NetworkManager/conf.d/99-unmanaged-devices.conf +[keyfile] +unmanaged-devices=interface-name:kni +[root@localhost ~]# systemctl reload NetworkManager +``` + +网卡从内核驱动绑为用户态驱动的ko,根据实际情况选择一种。 + +```sh +#若IOMMU能使用 +modprobe vfio-pci + +#若IOMMU不能使用,且VFIO支持noiommu +modprobe vfio enable_unsafe_noiommu_mode=1 +modprobe vfio-pci + +#其他情况 +modprobe igb_uio +``` + +>说明: +可根据机器BIOS配置,查看是否启用IOMMU。 + +### 2. dpdk绑定网卡 + +将网卡绑定到步骤1选择的驱动。为用户态网卡驱动提供网卡资源访问接口。 + +```sh +#使用vfio-pci +dpdk-devbind -b vfio-pci enp3s0 + +#使用igb_uio +dpdk-devbind -b igb_uio enp3s0 +``` + +### 3. 大页内存配置 + +Gazelle使用大页内存提高效率。使用root权限配置系统预留大页内存,可选用任意页大小。因每页内存都需要一个fd,使用内存较大时,建议使用1G的大页,避免占用过多fd。 +根据实际情况,选择一种页大小,配置足够的大页内存即可。配置大页操作如下: + +```sh +#配置2M大页内存:在node0上配置 2M * 1024 = 2G +echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages + +#配置1G大页内存:在node0上配置1G * 5 = 5G +echo 5 > /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages +``` + +>说明: +cat查询实际预留页个数,连续内存不足时可能比预期少。 + +### 4. 挂载大页内存 + +创建两个目录,分别给lstack进程、ltran进程访问大页内存使用。操作步骤如下: + +```sh +mkdir -p /mnt/hugepages-ltran +mkdir -p /mnt/hugepages-lstack +chmod -R 700 /mnt/hugepages-ltran +chmod -R 700 /mnt/hugepages-lstack + +mount -t hugetlbfs nodev /mnt/hugepages-ltran -o pagesize=2M +mount -t hugetlbfs nodev /mnt/hugepages-lstack -o pagesize=2M +``` + +>说明: +/mnt/hugepages-ltran和/mnt/hugepages-lstack必须挂载同样pagesize的大页。 + +### 5. 应用程序使用Gazelle + +有两种使用Gazelle方法,根据需要选择其一。 + +- 重新编译应用程序,替换sockets接口 + +```sh +#makefile中添加Gazelle的Makefile +-include /etc/gazelle/lstack.Makefile + +#编译添加LSTACK_LIBS变量 +gcc test.c -o test ${LSTACK_LIBS} +``` + +- 使用LD_PRELOAD加载Gazelle库 + +GAZELLE_BIND_PROCNAME环境变量指定进程名,LD_PRELOAD指定Gazelle库路径。 + +```sh +GAZELLE_BIND_PROCNAME=test LD_PRELOAD=/usr/lib64/liblstack.so ./test +``` + +### 6. 配置文件 + +- lstack.conf用于指定lstack的启动参数,默认路径为/etc/gazelle/lstack.conf,配置文件参数如下: + +|选项|参数格式|说明| +|:---|:---|:---| +|dpdk_args|--socket-mem(必需)
--huge-dir(必需)
--proc-type(必需)-d
"--vdev","net_af_xdp,iface=ipvlan0,queue_count=1"|dpdk初始化参数,参考dpdk说明
-d参数加载指定so库文件。
"net_af_xdp,iface=ipvlan0,queue_count=1"用于支持使用native xdp的方式接管网口流量,将数据包输送给用户态,"ipvlan0"为需要挂在xdp进行流量收发的网卡名。| +|listen_shadow| 0/1 | 是否使用影子fd监听。单listen线程,多协议栈线程时使能。| +|use_ltran| 0/1 | 是否使用ltran 。| +|num_cpus|"0,2,4 ..."|lstack线程绑定的cpu编号,编号的数量为lstack线程个数(小于等于网卡多队列数量)。可按NUMA选择cpu。| +|low_power_mode|0/1|是否开启低功耗模式,暂不支持。| +|kni_switch|0/1|rte_kni开关,默认为0。只有不使用ltran时才能开启。| +|flow_bifurcation |0/1|分流开关,对gazelle 未监听的端口转到内核进行处理 ,默认为0| +|unix_prefix|"string"|gazelle进程间通信使用的unix socket文件前缀字符串,默认为空,和需要通信的ltran.conf的unix_prefix或gazellectl的-u参数配置一致。不能含有特殊字符,最大长度为128。| +|host_addr|"192.168.xx.xx"|协议栈的IP地址,也是应用程序的IP地址。| +|mask_addr|"255.255.xx.xx"|掩码地址。| +|gateway_addr|"192.168.xx.1"|网关地址。| +|devices|"aa:bb:cc:dd:ee:ff"|网卡通信的mac地址,需要与ltran.conf的bond_macs配置一致。| +|app_bind_numa|0/1|应用的epoll和poll线程是否绑定到协议栈所在的numa,默认值是1,即绑定。| +|send_connect_number|4|设置为正整数,表示每次协议栈循环中发包处理的连接个数。| +|read_connect_number|4|设置为正整数,表示每次协议栈循环中收包处理的连接个数。| +|rpc_number|4|设置为正整数,表示每次协议栈循环中rpc消息处理的个数。| +|nic_read_num|128|设置为正整数,表示每次协议栈循环中从网卡读取的数据包的个数。| +|mbuf_pool_size|1024000|设置为小于5120000的正整数,表示初始化时申请的mbuf地址池大小,需要根据网卡硬件支持进行合理配置,配置过小会启动失败。| +|stack_interrupt|0/1|是否开启中断模式,默认为0(关闭),置为1,则开启中断模式。| +|stack_num|0-320|设置自动绑定numa的stack数量,0为不使用此功能。该参数开启后会根据tcp_conn_count、mbuf_count_per_conn等参数自动计算并配置大页内存。该参数优先级高于num_cpus,当num_cpus和stack_num都配置时,stack_num优先生效;当num_cpus和stack_num都未配置时,stack_num会自动设置为1。当前只支持xdp模式,且只支持单stack线程,即stack_num<=1。| + +lstack.conf示例: + +```sh +dpdk_args=["--socket-mem", "2048,0,0,0", "--huge-dir", "/mnt/hugepages-lstack", "--proc-type", "primary", "--legacy-mem", "--map-perfect"] + +use_ltran=1 +kni_switch=0 +flow_bifurcation=0 +low_power_mode=0 + +num_cpus="2,22" + +host_addr="192.168.1.10" +mask_addr="255.255.255.0" +gateway_addr="192.168.1.1" +devices="aa:bb:cc:dd:ee:ff" + +send_connect_number=4 +read_connect_number=4 +rpc_number=4 +nic_read_num=128 +mbuf_pool_size=1024000 +``` + +- ltran.conf用于指定ltran启动的参数,默认路径为/etc/gazelle/ltran.conf。使用ltran时,lstack.conf内配置use_ltran=1,配置参数如下: + +|选项|参数格式|说明| +|:---|:---|:---| +|forward_kit|"dpdk"|指定网卡收发模块。
保留字段,目前未使用。| +|forward_kit_args|-l
--socket-mem(必需)
--huge-dir(必需)
--proc-TYPE(必需)
--legacy-mem(必需)
--map-perfect(必需)
-d|dpdk初始化参数,参考dpdk说明。
--map-perfect为扩展特性,用于防止dpdk占用多余的地址空间,保证ltran有额外的地址空间分配给lstack。
-d参数加载指定so库文件。| +|kni_switch|0/1|rte_kni开关,默认为0。| +|unix_prefix|"string"|gazelle进程间通信使用的unix socket文件前缀字符串,默认为空,和需要通信的lstack.conf的unix_prefix或gazellectl的-u参数配置一致。| +|dispatch_max_clients|n|ltran支持的最大client数。
lstack的协议栈线程总数不大于32。| +|dispatch_subnet|192.168.xx.xx|子网掩码,表示ltran能识别的IP所在子网网段。参数为样例,子网按实际值配置。| +|dispatch_subnet_length|n|子网长度,表示ltran能识别的子网长度,例如length为4时,192.168.1.1-192.168.1.16。| +|bond_mode|n|bond模式,目前只支持Active Backup(Mode1),取值为1。| +|bond_miimon|n|bond链路监控时间,单位为ms,取值范围为1到2^64 - 1 - (1000 * 1000)。| +|bond_ports|"0x01"|使用的dpdk网卡,0x01表示第一块。| +|bond_macs|"aa:bb:cc:dd:ee:ff"|绑定的网卡mac地址,需要跟kni的mac地址保持一致。| +|bond_mtu|n|最大传输单元,默认是1500,不能超过1500,最小值为68,不能低于68。| + +ltran.conf示例: + +```sh +forward_kit_args="-l 0,1 --socket-mem 1024,0,0,0 --huge-dir /mnt/hugepages-ltran --proc-type primary --legacy-mem --map-perfect --syslog daemon" +forward_kit="dpdk" + +kni_switch=0 + +dispatch_max_clients=30 +dispatch_subnet="192.168.1.0" +dispatch_subnet_length=8 + +bond_mode=1 +bond_mtu=1500 +bond_miimon=100 +bond_macs="aa:bb:cc:dd:ee:ff" +bond_ports="0x1" + +tcp_conn_scan_interval=10 +``` + +### 7. 启动应用程序 + +- 启动ltran进程 + 单进程且网卡支持多队列,则直接使用网卡多队列分发报文到各线程,不启动ltran进程,lstack.conf的use_ltran配置为0。 +启动ltran时不使用--config-file指定配置文件,则使用默认路径/etc/gazelle/ltran.conf。 + +```sh +ltran --config-file ./ltran.conf +``` + +- 启动应用程序 + 启动应用程序前不使用环境变量LSTACK_CONF_PATH指定配置文件,则使用默认路径/etc/gazelle/lstack.conf。 + +```sh +export LSTACK_CONF_PATH=./lstack.conf +LD_PRELOAD=/usr/lib64/liblstack.so GAZELLE_BIND_PROCNAME=redis-server redis-server redis.conf +``` + +### 8. API + +Gazelle wrap应用程序POSIX接口,应用程序无需修改代码。 + +### 9. 调测命令 + +- 不使用ltran模式时不支持gazellectl ltran xxx命令,以及gazellectl lstack show {ip | pid} -r命令。 + +```sh +Usage: gazellectl [-h | help] + or: gazellectl ltran {quit | show | set} [LTRAN_OPTIONS] [time] [-u UNIX_PREFIX] + or: gazellectl lstack {show | set} {ip | pid} [LSTACK_OPTIONS] [time] [-u UNIX_PREFIX] + + quit ltran process exit + + where LTRAN_OPTIONS := + show ltran all statistics + -r, rate show ltran statistics per second + -i, instance show ltran instance register info + -b, burst show ltran NIC packet len per second + -l, latency show ltran latency + set: + loglevel {error | info | debug} set ltran loglevel + + where LSTACK_OPTIONS := + show lstack all statistics + -r, rate show lstack statistics per second + -s, snmp show lstack snmp + -c, connetct show lstack connect + -l, latency show lstack latency + set: + loglevel {error | info | debug} set lstack loglevel + lowpower {0 | 1} set lowpower enable + [time] measure latency time default 1S +``` + +-u参数指定gazelle进程间通信的unix socket前缀,和需要通信的ltran.conf或lstack.conf的unix_prefix配置一致。 + +**抓包工具** +gazelle使用的网卡由dpdk接管,因此普通的tcpdump无法抓到gazelle的数据包。作为替代,gazelle使用dpdk-tools软件包中提供的gazelle-pdump作为数据包捕获工具,它使用dpdk的多进程模式和lstack/ltran进程共享内存。在ltran模式下,gazelle-pdump只能抓取和网卡直接通信的ltran的数据包,通过tcpdump的数据包过滤,可以过滤特定lstack的数据包。详细使用方法可参见:[使用pdump抓包](https://gitee.com/openeuler/gazelle/blob/master/doc/pdump.md)。 + +### 10. 使用注意 + +#### 1. dpdk配置文件的位置 + +如果是root用户,dpdk启动后的配置文件将会放到/var/run/dpdk目录下; +如果是非root用户,dpdk配置文件的路径将由环境变量XDG_RUNTIME_DIR决定。 + +- 如果XDG_RUNTIME_DIR为空,dpdk配置文件放到/tmp/dpdk目录下。 +- 如果XDG_RUNTIME_DIR不为空,dpdk配置文件放到变量XDG_RUNTIME_DIR下。 +- 注意有些机器会默认设置XDG_RUNTIME_DIR。 + +#### 2. retbleed漏洞补丁影响gazelle性能 + +- 内核在5.10.0-60.57.0.85版本合入retbleed漏洞补丁,该补丁导致X86架构下gazelle性能下降,可以在启动参数内增加**retbleed=off mitigations=off** 来规避此CVE带来的性能损耗,用户可以根据自身产品特性来选择是否规避,出于安全考虑,默认是不规避的。 +- 测试场景为发送端内核态,接收端用户态ltran模式,收发1024字节,性能由17000Mb/s下降至5000Mb/s。 +- 受影响的版本包括openEuler-22.03-LTS(内核版本高于等于5.10.0-60.57.0.85) 及其之后的SP版本。 +- 具体详情可参考:。 + +## 约束限制 + +使用 Gazelle 存在一些约束限制: + +### 功能约束 + +- 不支持accept阻塞模式或者connect阻塞模式。 +- 最多支持1500个TCP连接。 +- 当前仅支持TCP、UDP、IGMPv2、ICMP、ARP、IPv4 协议。 +- 在对端ping Gazelle时,要求指定报文长度小于等于14000B。 +- 不支持使用透明大页。 +- ltran不支持使用多种类型的网卡混合组bond。 +- ltran的bond1主备模式,只支持链路层故障主备切换(例如网线断开),不支持物理层故障主备切换(例如网卡下电、拔网卡)。 +- 虚拟机网卡不支持多队列。 +- 使能UDP协议时需要开启kni,除非网卡驱动同时支持用户态和内核态,比如mlx5网卡。 +- 中断模式:容器场景仅支持ipvlan网口,使用xdp模式进行收发包;不支持共线程模式;不支持hinic 1822网卡、不支持bond网卡和使用igb_uio驱动的virtio网卡。由于唤醒次数增加,导致性能优化效果略有下降。 +- XDP模式:仅支持ipvlan的l2模式网口,仅支持单网口单队列,需要内核开启xdp支持;单网卡功能无法使能,不支持非用户态流量转发。 +- 容器资源自动化部署:需开启xdp,不支持多队列。 + +### 操作约束 + +- 提供的命令行、配置文件默认root权限。非root用户使用,需先提权以及修改文件所有者。 +- 将用户态网卡绑回到内核驱动,必须先退出Gazelle。 +- 大页内存不支持在挂载点里创建子目录重新挂载。 +- ltran需要最低大页内存为1GB。 +- 每个应用实例协议栈线程最低大页内存为800MB 。 +- 仅支持64位系统。 +- 构建x86版本的Gazelle使用了-march=native选项,基于构建环境的CPU(Intel® Xeon® Gold 5118 CPU @ 2.30GHz指令集进行优化。要求运行环境CPU支持 SSE4.2、AVX、AVX2、AVX-512 指令集。 +- 最大IP分片数为10(ping 最大包长14790B),TCP协议不使用IP分片。 +- sysctl配置网卡rp_filter参数为1,否则可能不按预期使用Gazelle协议栈,而是依然使用内核协议栈。 +- 不使用ltran模式,KNI网口不可配置只支持本地通讯使用,且需要启动前配置NetworkManager不管理KNI网卡。 +- 虚拟KNI网口的IP及mac地址,需要与lstack.conf配置文件保持一致 。 + +## 注意事项 + +用户根据使用场景评估使用Gazelle。 + +### 共享内存 + +- 现状 + 大页内存 mount 至 /mnt/hugepages-lstack 目录,进程初始化时在 /mnt/hugepages-lstack 目录下创建文件,每个文件对应一个大页,并 mmap 这些文件。ltran 在收到 lstask 的注册信息后,根据大页内存配置信息页 mmap 目录下文件,实现大页内存共享。 + ltran 在 /mnt/hugepages-ltran 目录的大页内存同理。 +- 当前消减措施 + 大页文件权限 600,只有 OWNER 用户才能访问文件,默认 root 用户,支持配置成其他用户; + 大页文件有 DPDK 文件锁,不能直接写或者映射。 +- 注意 + 属于同一用户的恶意进程模仿DPDK实现逻辑,通过大页文件共享大页内存,写破坏大页内存,导致Gazelle程序crash。建议用户下的进程属于同一信任域。 + +### 流量限制 + +Gazelle没有做流量限制,用户有能力发送最大网卡限速流量的报文到网络,可能导致网络流量拥塞。 + +### 进程仿冒 + +合法注册到ltran的两个lstack进程,进程A可仿冒进程B发送仿冒消息给ltran,修改ltran的转发控制信息,造成进程B通讯异常,进程B报文转发给进程A信息泄露等问题。建议lstack进程都为可信任进程。 diff --git a/docs/zh/server/network/gazelle/public_sys-resources/icon-caution.gif b/docs/zh/server/network/gazelle/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/network/gazelle/public_sys-resources/icon-caution.gif differ diff --git a/docs/zh/server/network/gazelle/public_sys-resources/icon-danger.gif b/docs/zh/server/network/gazelle/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/network/gazelle/public_sys-resources/icon-danger.gif differ diff --git a/docs/zh/server/network/gazelle/public_sys-resources/icon-note.gif b/docs/zh/server/network/gazelle/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/server/network/gazelle/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/server/network/gazelle/public_sys-resources/icon-notice.gif b/docs/zh/server/network/gazelle/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/server/network/gazelle/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/server/network/gazelle/public_sys-resources/icon-tip.gif b/docs/zh/server/network/gazelle/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/zh/server/network/gazelle/public_sys-resources/icon-tip.gif differ diff --git a/docs/zh/server/network/gazelle/public_sys-resources/icon-warning.gif b/docs/zh/server/network/gazelle/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/network/gazelle/public_sys-resources/icon-warning.gif differ diff --git a/docs/zh/server/network/network_config/_toc.yaml b/docs/zh/server/network/network_config/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..80d1eeff1b0dbacd476da2a684ef84d3edd9b664 --- /dev/null +++ b/docs/zh/server/network/network_config/_toc.yaml @@ -0,0 +1,5 @@ +isManual: true +label: '' +sections: + - label: 配置网络 + href: ./network_configuration.md diff --git a/docs/zh/server/network/network_config/network_configuration.md b/docs/zh/server/network/network_config/network_configuration.md new file mode 100644 index 0000000000000000000000000000000000000000..c59e4ac518bfe3c5693d3635f210be4dfd8e1c7a --- /dev/null +++ b/docs/zh/server/network/network_config/network_configuration.md @@ -0,0 +1,1354 @@ +# 配置网络 + + + +- [配置网络](#配置网络) + - [配置 IP](#配置-ip) + - [使用nmcli命令](#使用nmcli命令) + - [使用ip命令](#使用ip命令) + - [通过ifcfg文件配置网络](#通过ifcfg文件配置网络) + - [配置主机名](#配置主机名) + - [简介](#简介) + - [使用hostnamectl配置主机名](#使用hostnamectl配置主机名) + - [使用nmcli配置主机名](#使用nmcli配置主机名) + - [配置网络绑定](#配置网络绑定) + - [使用nmcli](#使用nmcli) + - [使用命令行](#使用命令行) + - [IPv6使用差异说明(vs IPv4)](#ipv6使用差异说明vs-ipv4) + - [约束限制](#约束限制) + - [配置说明](#配置说明) + - [FAQ](#faq) + + + +## 配置 IP + +### 使用nmcli命令 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>使用nmcli命令配置的网络配置可以立即生效且系统重启后配置也不会丢失。 + +#### nmcli介绍 + +nmcli是NetworkManager的一个命令行工具,它提供了使用命令行配置由NetworkManager管理网络连接的方法。nmcli命令的基本格式为: + +```shell + nmcli [OPTIONS] OBJECT { COMMAND | help } +``` + +其中,OBJECT选项可以是general、networking、radio、connection或device等。在日常使用中,最常使用的是-t, \-\-terse(用于脚本)、-p, \-\-pretty选项(用于用户)及-h, \-\-help选项,用户可以使用“ nmcli help”获取更多参数及使用信息。 + +```shell +$ nmcli help +``` + +常用命令使用举例如下: + +- 显示NetworkManager状态: + + ```shell + $ nmcli general status + ``` + +- 显示所有连接: + + ```shell + $ nmcli connection show + ``` + +- 只显示当前活动连接,如下所示添加 -a, \-\-active: + + ```shell + $ nmcli connection show --active + ``` + +- 显示由NetworkManager识别到的设备及其状态: + + ```shell + $ nmcli device status + ``` + +- 使用nmcli工具启动和停止网络接口,在root权限下执行如下命令: + + ```shell + # nmcli connection up id enp3s0 + # nmcli device disconnect enp3s0 + ``` + +#### 设备管理 + +##### 连接到设备 + +使用如下命令,NetworkManager将连接到对应网络设备,尝试找到合适的连接配置,并激活配置。 + +```shell +# nmcli device connect "$IFNAME" +``` + +>如果不存在相应的配置连接,NetworkManager将创建并激活具有默认设置的新配置文件。 + +##### 断开设备连接 + +使用如下命令,NetworkManager将断开设备连接,并防止设备自动激活。 + +```shell +# nmcli device disconnect "$IFNAME" +``` + +#### 设置网络连接 + +列出目前可用的网络连接: + +```shell +$ nmcli con show + + +NAME UUID TYPE DEVICE +enp4s0 5afce939-400e-42fd-91ee-55ff5b65deab ethernet enp4s0 +enp3s0 c88d7b69-f529-35ca-81ab-aa729ac542fd ethernet enp3s0 +virbr0 ba552da6-f014-49e3-91fa-ec9c388864fa bridge virbr0 +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>输出结果中的NAME字段代表连接ID(名称)。 + +添加一个网络连接会生成相应的配置文件,并与相应的设备关联。检查可用的设备,方法如下: + +```shell +$ nmcli dev status + +DEVICE TYPE STATE CONNECTION +enp3s0 ethernet connected enp3s0 +enp4s0 ethernet connected enp4s0 +virbr0 bridge connected virbr0 +lo loopback unmanaged -- +virbr0-nic tun unmanaged -- +``` + +##### 配置动态IP连接 + +###### 配置IP + +要使用 DHCP 分配网络时,可以使用动态IP配置添加网络配置文件,命令格式如下: + +```shell +nmcli connection add type ethernet con-name connection-name ifname interface-name +``` + +例如创建名为net-test的动态连接配置文件,在root权限下使用以下命令: + +```shell +# nmcli connection add type ethernet con-name net-test ifname enp3s0 +Connection 'net-test' (a771baa0-5064-4296-ac40-5dc8973967ab) successfully added. +``` + +NetworkManager 会将参数 connection.autoconnect 设定为 yes,并将设置保存到 “/etc/sysconfig/network-scripts/ifcfg-net-test”文件中,在该文件中会将 ONBOOT 设置为 yes。 + +###### 激活连接并检查状态 + +在root权限下使用以下命令激活网络连接: + +```shell +# nmcli con up net-test +Connection successfully activated (D-Bus active path:/org/freedesktop/NetworkManager/ActiveConnection/5) +``` + +检查这些设备及连接的状态,使用以下命令: + +```shell +$ nmcli device status + +DEVICE TYPE STATE CONNECTION +enp4s0 ethernet connected enp4s0 +enp3s0 ethernet connected net-test +virbr0 bridge connected virbr0 +lo loopback unmanaged -- +virbr0-nic tun unmanaged -- +``` + +##### 配置静态IP连接 + +###### 配置IP + +添加静态 IPv4 配置的网络连接,可使用以下命令: + +```shell +nmcli connection add type ethernet con-name connection-name ifname interface-name ip4 address gw4 address +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>如果要添加 IPv6 地址和网关信息,使用 ip6 和 gw6 选项。 + +例如创建名为 net-static的静态连接配置文件,在root权限下使用以下命令: + +```shell +# nmcli con add type ethernet con-name net-static ifname enp3s0 ip4 192.168.0.10/24 gw4 192.168.0.254 +``` + +还可为该设备同时指定 IPv6 地址和网关,示例如下: + +```shell +# nmcli con add type ethernet con-name test-lab ifname enp3s0 ip4 192.168.0.10/24 gw4 192.168.0.254 ip6 abbe::**** gw6 2001:***::* +Connection 'net-static' (63aa2036-8665-f54d-9a92-c3035bad03f7) successfully added. +``` + +NetworkManager 会将其内部参数 ipv4.method 设定为 manual,将 connection.autoconnect 设定为yes,并将设置写入 /etc/sysconfig/network-scripts/ifcfg-my-office 文件,其中会将对应 BOOTPROTO 设定为 none,将 ONBOOT 设定为 yes。 + +设定两个 IPv4 DNS 服务器地址,在root权限下使用以下命令: + +```shell +# nmcli con mod net-static ipv4.dns "*.*.*.* *.*.*.*" +``` + +设置两个 IPv6 DNS 服务器地址,在root权限下使用以下命令: + +```shell +# nmcli con mod net-static ipv6.dns "2001:4860:4860::**** 2001:4860:4860::****" +``` + +###### 激活连接并检查状态 + +激活新的网络连接,在root权限下使用以下命令: + +```shell +# nmcli con up net-static ifname enp3s0 +Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6) +``` + +检查这些设备及连接的状态,使用以下命令: + +```shell +$ nmcli device status + +DEVICE TYPE STATE CONNECTION +enp4s0 ethernet connected enp4s0 +enp3s0 ethernet connected net-static +virbr0 bridge connected virbr0 +lo loopback unmanaged -- +virbr0-nic tun unmanaged -- +``` + +查看配置的连接详情,使用以下命令(使用 -p, \-\-pretty 选项在输出结果中添加标题和分段): + +```shell +$ nmcli -p con show net-static +=============================================================================== +Connection profile details (net-static ) +=============================================================================== +connection.id: net-static +connection.uuid: b9f18801-6084-4aee-af28-c8f0598ff5e1 +connection.stable-id: -- +connection.type: 802-3-ethernet +connection.interface-name: enp3s0 +connection.autoconnect: yes +connection.autoconnect-priority: 0 +connection.autoconnect-retries: -1 (default) +connection.multi-connect: 0 (default) +connection.auth-retries: -1 +connection.timestamp: 1578988781 +connection.read-only: no +connection.permissions: -- +connection.zone: -- +connection.master: -- +connection.slave-type: -- +connection.autoconnect-slaves: -1 (default) +connection.secondaries: -- +connection.gateway-ping-timeout: 0 +connection.metered: unknown +connection.lldp: default +connection.mdns: -1 (default) +connection.llmnr: -1 (default) +``` + +##### 添加 Wi-Fi 连接 + +有两种方式添加Wi-Fi 连接。 + +**方法1,通过网络接口连接wifi** + +连接到由SSID或BSSID指定的wifi网络。命令如下,该命令找到匹配的连接或创建一个连接,然后在设备上激活它。 + +```shell +$ nmcli device wifi connect "$SSID" password "$PASSWORD" ifname "$IFNAME" +$ nmcli --ask device wifi connect "$SSID" +``` + +**方法2,通过配置文件连接Wi-Fi** + +1. 使用以下命令查看可用 Wi-Fi 访问点: + + ```shell + $ nmcli dev wifi list + ``` + +2. 使用以下命令生成使用的静态 IP 配置,但允许自动 DNS 地址分配的 Wi-Fi 连接: + + ```shell + $ nmcli con add con-name Wifi ifname wlan0 type wifi ssid MyWifi ip4 192.168.100.101/24 gw4 192.168.100.1 + ``` + +3. 请使用以下命令设定 WPA2 密码,例如 “answer”: + + ```shell + $ nmcli con modify Wifi wifi-sec.key-mgmt wpa-psk + $ nmcli con modify Wifi wifi-sec.psk answer + ``` + +4. 使用以下命令更改 Wi-Fi 状态: + + ```shell + $ nmcli radio wifi [ on | off ] + ``` + +##### 更改属性 + +请使用以下命令检查具体属性,比如 mtu: + +```shell +$ nmcli connection show id 'Wifi ' | grep mtu +802-11-wireless.mtu: auto +``` + +使用如下命令更改设置的属性: + +```shell +$ nmcli connection modify id 'Wifi ' 802-11-wireless.mtu 1350 +``` + +使用如下命令确认更改: + +```shell +$ nmcli connection show id 'Wifi ' | grep mtu +802-11-wireless.mtu: 1350 +``` + +#### 配置静态路由 + +- 使用nmcli命令为网络连接配置静态路由,使用命令如下: + + ```shell + $ nmcli connection modify enp3s0 +ipv4.routes "192.168.122.0/24 10.10.10.1" + ``` + +- 使用编辑器配置静态路由,使用如下命令: + + ```shell + $ nmcli con edit type ethernet con-name enp3s0 + ===| nmcli interactive connection editor |=== + Adding a new '802-3-ethernet' connection + Type 'help' or '?' for available commands. + Type 'describe [.]' for detailed property description. + You may edit the following settings: connection, 802-3-ethernet (ethernet), 802-1x, ipv4, ipv6, dcb + nmcli> set ipv4.routes 192.168.122.0/24 10.10.10.1 + nmcli> + nmcli> save persistent + Saving the connection with 'autoconnect=yes'. That might result in an immediate activation of the connection. + Do you still want to save? [yes] yes + Connection 'enp3s0' (1464ddb4-102a-4e79-874a-0a42e15cc3c0) successfully saved. + nmcli> quit + ``` + +### 使用ip命令 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>使用ip命令配置的网络配置可以立即生效但系统重启后配置会丢失。 + +#### 配置IP地址 + +使用ip命令为接口配置地址,命令格式如下,其中 _interface-name_ 为网络接口名。 + +```shell +ip addr [ add | del ] address dev interface-name +``` + +##### 配置静态地址 + +在root权限下,配置静态IP地址,使用示例如下: + +```shell +# ip address add 192.168.0.10/24 dev enp3s0 +``` + +查看配置结果,在root权限使用如下命令: + +```shell +# ip addr show dev enp3s0 +2: enp3s0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 + link/ether 52:54:00:aa:ad:4a brd ff:ff:ff:ff:ff:ff + inet 192.168.202.248/16 brd 192.168.255.255 scope global dynamic noprefixroute enp3s0 + valid_lft 9547sec preferred_lft 9547sec + inet 192.168.0.10/24 scope global enp3s0 + valid_lft forever preferred_lft forever + inet6 fe80::32e8:cc22:9db2:f4d4/64 scope link noprefixroute + valid_lft forever preferred_lft forever +``` + +##### 配置多个地址 + +ip 命令支持为同一接口分配多个地址,可在root权限下重复多次使用 ip 命令实现分配多个地址。使用示例如下: + +```shell +# ip address add 192.168.2.223/24 dev enp4s0 +# ip address add 192.168.4.223/24 dev enp4s0 +# ip addr + +3: enp4s0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 + link/ether 52:54:00:aa:da:e2 brd ff:ff:ff:ff:ff:ff + inet 192.168.203.12/16 brd 192.168.255.255 scope global dynamic noprefixroute enp4s0 + valid_lft 8389sec preferred_lft 8389sec + inet 192.168.2.223/24 scope global enp4s0 + valid_lft forever preferred_lft forever + inet 192.168.4.223/24 scope global enp4s0 + valid_lft forever preferred_lft forever + inet6 fe80::1eef:5e24:4b67:f07f/64 scope link noprefixroute + valid_lft forever preferred_lft forever +``` + +#### 配置静态路由 + +如果需要静态路由,可使用 ip route add 命令在路由表中添加,使用 ip route del 命令删除。最常使用的 ip route 命令格式如下: + +```shell +ip route [ add | del | change | append | replace ] destination-address +``` + +在root权限下使用 ip route 命令显示当前的 IP 路由表。示例如下: + +```shell +# ip route + +default via 192.168.0.1 dev enp3s0 proto dhcp metric 100 +default via 192.168.0.1 dev enp4s0 proto dhcp metric 101 +192.168.0.0/16 dev enp3s0 proto kernel scope link src 192.168.202.248 metric 100 +192.168.0.0/16 dev enp4s0 proto kernel scope link src 192.168.203.12 metric 101 +192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown +``` + +在主机地址中添加一个静态路由,在 root 权限下,使用以下命令格式: + +```shell +ip route add 192.168.2.1 via 10.0.0.1 [dev interface-name] +``` + +其中 192.168.2.1 是用点分隔的十进制符号中的 IP 地址,10.0.0.1 是下一个跃点,_interface-name_ 是进入下一个跃点的退出接口。 + +要在网络中添加一个静态路由,即代表 IP 地址范围的 IP 地址,请在root权限下运行以下命令格式: + +```shell +ip route add 192.168.2.0/24 via 10.0.0.1 [dev interface-name] +``` + +其中 192.168.2.1 是目标网络的 IP 地址,10.0.0.1 是网络前缀,_interface-name_ 为网络接口名。 + +### 通过ifcfg文件配置网络 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>通过ifcfg文件配置的网络配置不会立即生效,需要在root权限下执行**ifup interface-name**命令以激活网络配置后才生效(interface-name处填写具体的网络接口名)。 + +#### 配置静态网络 + +以enp4s0网络接口进行静态网络设置为例,通过在root权限下修改ifcfg文件实现,在/etc/sysconfig/network-scripts/目录中生成名为ifcfg-enp4s0的文件中,修改参数配置,示例如下: + +```shell +TYPE=Ethernet +PROXY_METHOD=none +BROWSER_ONLY=no +BOOTPROTO=none +IPADDR=192.168.0.10 +GATEWAY=192.168.0.1 +PREFIX=24 +DEFROUTE=yes +IPV4_FAILURE_FATAL=no +IPV6INIT=yes +IPV6_AUTOCONF=yes +IPV6_DEFROUTE=yes +IPV6_FAILURE_FATAL=no +IPV6_ADDR_GEN_MODE=stable-privacy +NAME=enp4s0static +UUID=08c3a30e-c5e2-4d7b-831f-26c3cdc29293 +DEVICE=enp4s0 +ONBOOT=yes +``` + +#### 配置动态网络 + +要通过ifcfg文件为em1接口配置动态网络,请按照如下操作在/etc/sysconfig/network-scripts/目录中生成名为 ifcfg-em1 的文件,示例如下: + +```shell +DEVICE=em1 +BOOTPROTO=dhcp +ONBOOT=yes +``` + +要配置一个向DHCP服务器发送不同的主机名的接口,请在ifcfg文件中新增一行内容,如下所示: + +```shell +DHCP_HOSTNAME=hostname +``` + +要配置忽略由DHCP服务器发送的路由,防止网络服务使用从DHCP服务器接收的DNS服务器更新/etc/resolv.conf。请在ifcfg文件中新增一行内容,如下所示: + +```shell +PEERDNS=no +``` + +要配置一个接口使用具体DNS服务器,请将参数PEERDNS=no,并在ifcfg文件中添加以下行: + +```shell +DNS1=ip-address +DNS2=ip-address +``` + +其中ip-address是DNS服务器的地址。这样就会让网络服务使用指定的DNS服务器更新/etc/resolv.conf。 + +#### 配置默认网关 + +在确定默认网关时,首先解析 /etc/sysconfig/network 文件,然后解析 ifcfg 文件 ,将最后读取的 GATEWAY 的取值作为路由表中的默认路由。 + +在动态网络环境中,使用 NetworkManager 管理主机时,建议设置为由 DHCP 来分配。 + +## 配置主机名 + +### 简介 + +hostname有三种类型:static、transient和pretty。 + +- static:静态主机名,可由用户自行设置,并保存在/etc/hostname 文件中。 +- transient:动态主机名,由内核维护,初始是 static 主机名,默认值为“localhost”。可由DHCP或mDNS在运行时更改。 +- pretty:灵活主机名,允许使用自由形式(包括特殊/空白字符)进行设置。静态/动态主机名遵从域名的通用限制。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>static和transient主机名只能包含a-z、A-Z、0-9、“-”、“\_”和“.”,不能在开头或结尾处使用句点,不允许使用两个相连的句点,大小限制为 64 个字符。 + +### 使用hostnamectl配置主机名 + +#### 查看所有主机名 + +查看当前的主机名,使用如下命令: + +```shell +$ hostnamectl status +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>如果命令未指定任何选项,则默认使用status选项。 + +#### 设定所有主机名 + +在root权限下,设定系统中的所有主机名,使用如下命令: + +```shell +# hostnamectl set-hostname name +# exec bash +``` + +#### 设定特定主机名 + +在root权限下,通过不同的参数来设定特定主机名,使用如下命令: + +```shell +# hostnamectl set-hostname name [option...] +``` + +其中option可以是\-\-pretty、\-\-static、\-\-transient中的一个或多个选项。 + +如果\-\-static或\-\-transient与\-\-pretty选项一同使用时,则会将static和transient主机名简化为pretty主机名格式,使用“-”替换空格,并删除特殊字符。 + +当设定pretty主机名时,如果主机名中包含空格或单引号,需要使用引号。命令示例如下: + +```shell +# hostnamectl set-hostname "Stephen's notebook" --pretty +``` + +#### 清除特定主机名 + +要清除特定主机名,并将其还原为默认形式,在root权限下,使用如下命令: + +```shell +# hostnamectl set-hostname "" [option...] +``` + +其中 "" 是空白字符串,option是\-\-pretty、\-\-static和\-\-transient中的一个或多个选项。 + +#### 远程更改主机名 + +在远程系统中运行hostnamectl命令时,要使用-H,\-\-host 选项,在root权限下使用如下命令: + +```shell +# hostnamectl set-hostname -H [username]@hostname new_hostname +``` + +其中hostname是要配置的远程主机,username为自选项,new\_hostname为新主机名。hostnamectl会通过SSH连接到远程系统。 + +### 使用nmcli配置主机名 + +查询static主机名,使用如下命令: + +```shell +$ nmcli general hostname +``` + +在root权限下,将static主机名设定为host-server,使用如下命令: + +```shell +# nmcli general hostname host-server +``` + +要让系统hostnamectl感知到static主机名的更改,在root权限下,重启hostnamed服务,使用如下命令: + +```shell +# systemctl restart systemd-hostnamed +``` + +## 配置网络绑定 + +### 使用nmcli + +- 创建名为mybond0的绑定,使用示例如下: + + ```shell + $ nmcli con add type bond con-name mybond0 ifname mybond0 mode active-backup + ``` + +- 添加从属接口,使用示例如下: + + ```shell + $ nmcli con add type bond-slave ifname enp3s0 master mybond0 + ``` + + 要添加其他从属接口,重复上一个命令,并在命令中使用新的接口,使用示例如下: + + ```shell + $ nmcli con add type bond-slave ifname enp4s0 master mybond0 + Connection 'bond-slave-enp4s0' (05e56afc-b953-41a9-b3f9-0791eb49f7d3) successfully added. + ``` + +- 要启动绑定,则必须首先启动从属接口,使用示例如下: + + ```shell + $ nmcli con up bond-slave-enp3s0 + Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/14) + ``` + + ```shell + $ nmcli con up bond-slave-enp4s0 + Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/15) + ``` + + 现在可以启动绑定,使用示例如下: + + ```shell + $ nmcli con up mybond0 + Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/16) + ``` + +### 使用命令行 + +#### 检查是否已安装Bonding内核模块 + +在系统中默认已加载相应模块。要载入绑定模块,可在root权限下使用如下命令: + +```shell +# modprobe --first-time bonding +``` + +显示该模块的信息,可在root权限下使用如下命令: + +```shell +# modinfo bonding +``` + +更多命令请在root权限下使用modprobe \-\-help查看。 + +#### 创建频道绑定接口 + +要创建绑定接口,可在root权限下通过在 /etc/sysconfig/network-scripts/ 目录中创建名为 ifcfg-bondN 的文件(使用接口号码替换 N,比如 0)。 + +根据要绑定接口类型的配置文件来编写相应的内容,比如网络接口。接口配置文件示例如下: + +```text +DEVICE=bond0 +NAME=bond0 +TYPE=Bond +BONDING_MASTER=yes +IPADDR=192.168.1.1 +PREFIX=24 +ONBOOT=yes +BOOTPROTO=none +BONDING_OPTS="bonding parameters separated by spaces" +``` + +#### 创建从属接口 + +创建频道绑定接口后,必须在从属接口的配置文件中添加 MASTER 和 SLAVE 指令。 + +例如将两个网络接口enp3s0 和 enp4s0 以频道方式绑定,其配置文件示例分别如下: + +```text +TYPE=Ethernet +NAME=bond-slave-enp3s0 +UUID=3b7601d1-b373-4fdf-a996-9d267d1cac40 +DEVICE=enp3s0 +ONBOOT=yes +MASTER=bond0 +SLAVE=yes +``` + +```text +TYPE=Ethernet +NAME=bond-slave-enp4s0 +UUID=00f0482c-824f-478f-9479-abf947f01c4a +DEVICE=enp4s0 +ONBOOT=yes +MASTER=bond0 +SLAVE=yes +``` + +#### 激活频道绑定 + +要激活绑定,则需要启动所有从属接口。请在root权限下,运行以下命令: + +```text +# ifup enp3s0 +Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7) +``` + +```text +# ifup enp4s0 +Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/8) +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>对于已经处于“up”状态的接口,请首先使用“ifdown _enp3s0_ ”命令修改状态为down,其中 _enp3s0_ 为实际网卡名称。 + +完成后,启动所有从属接口以便启动绑定(不将其设定为 “down”)。 + +要让 NetworkManager 感知到系统所做的修改,在每次修改后,请在root权限下,运行以下命令: + +```shell +# nmcli con load /etc/sysconfig/network-scripts/ifcfg-device +``` + +查看绑定接口的状态,请在root权限下运行以下命令: + +```shell +# ip link show + +1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 +2: enp3s0: mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 + link/ether 52:54:00:aa:ad:4a brd ff:ff:ff:ff:ff:ff +3: enp4s0: mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 + link/ether 52:54:00:aa:da:e2 brd ff:ff:ff:ff:ff:ff +4: virbr0: mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000 + link/ether 86:a1:10:fb:ef:07 brd ff:ff:ff:ff:ff:ff +5: virbr0-nic: mtu 1500 qdisc fq_codel master virbr0 state DOWN mode DEFAULT group default qlen 1000 + link/ether 52:54:00:29:35:4c brd ff:ff:ff:ff:ff:ff +``` + +#### 创建多个绑定 + +系统会为每个绑定创建一个频道绑定接口,包括 BONDING\_OPTS 指令。使用这个配置方法可让多个绑定设备使用不同的配置。请按照以下操作创建多个频道绑定接口: + +- 创建多个 ifcfg-bondN 文件,文件中包含 BONDING\_OPTS 指令,让网络脚本根据需要创建绑定接口。 +- 创建或编辑要绑定的现有接口配置文件,添加 SLAVE 指令。 +- 使用 MASTER 指令工具在频道绑定接口中分配要绑定的接口,即从属接口。 + +以下是频道绑定接口配置文件示例: + +```text +DEVICE=bondN +NAME=bondN +TYPE=Bond +BONDING_MASTER=yes +IPADDR=192.168.1.1 +PREFIX=24 +ONBOOT=yes +BOOTPROTO=none +BONDING_OPTS="bonding parameters separated by spaces" +``` + +在这个示例中,使用绑定接口的号码替换 N。例如要创建两个接口,则需要使用正确的 IP 地址创建两个配置文件 ifcfg-bond0 和 ifcfg-bond1。 + +## IPv6使用差异说明(vs IPv4) + +### 约束限制 + +- chrony支持全局地址(global address),不支持链路本地地址(link-local address)。 +- Firefox支持通过http/https协议访问全局地址(global address),不支持链路本地地址(link-local address)。 + +### 配置说明 + +#### 设置接口设备MTU值 + +##### 概述 + +IPv6场景中会发现整个路由路径中的最小mtu的值作为当前链接的PMTU的值,源端根据PMTU的值确定是否进行分片发送,而在整个路径中的其他设备将不再需要进行分片处理,从而可以降低中间路由设备的负载大小。其中IPv6 PMTU设置的最小值为1280。 + +##### 设置接口设备的mtu + +如果在配置了IPv6地址的接口上设置mtu的值小于1280(IPv6 PMTU设置的最小值),则会导致该接口的IPv6地址被删除。并且无法再次添加IPv6地址。所以在IPv6场景中,对接口设备的mtu的配置一定要大于等于1280。 +请在root权限下运行如下命令查看具体现象: + +```shell +# ip addr show enp3s0 +3: enp3s0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 + link/ether 52:54:00:62:xx:xx brd ff:ff:ff:ff:xx:xx + inet 10.41.125.236/16 brd 10.41.255.255 scope global noprefixroute dynamic enp3s0 + valid_lft 38663sec preferred_lft 38663sec + inet6 2001:222::2/64 scope global + valid_lft forever preferred_lft forever +``` + +```shell +# ip link set dev enp3s0 mtu 1200 +# ip addr show enp3s0 +3: enp3s0: mtu 1200 qdisc pfifo_fast state UP group default qlen 1000 + link/ether 52:54:00:62:xx:xx brd ff:ff:ff:ff:xx:xx + inet 10.41.125.236/16 brd 10.41.255.255 scope global noprefixroute dynamic enp3s0 + valid_lft 38642sec preferred_lft 38642sec +``` + +```shell +# ip addr add 2001:222::2/64 dev enp3s0 +RTNETLINK answers: No buffer space available +``` + +```shell +# ip link set dev enp3s0 mtu 1500 +# ip addr show enp3s0 +3: enp3s0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 + link/ether 52:54:00:62:xx:xx brd ff:ff:ff:ff:xx:xx + inet 10.41.125.236/16 brd 10.41.255.255 scope global noprefixroute dynamic enp3s0 + valid_lft 38538sec preferred_lft 38538sec +``` + +```shell +# ip addr add 2001:222::2/64 dev enp3s0 +# ip addr show enp3s0 +3: enp3s0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 + link/ether 52:54:00:62:xx:xx brd ff:ff:ff:ff:xx:xx + inet 10.41.125.236/16 brd 10.41.255.255 scope global noprefixroute dynamic enp3s0 + valid_lft 38531sec preferred_lft 38531sec + inet6 2001:222::2/64 scope global + valid_lft forever preferred_lft forever +``` + +#### 有状态自动配置IPv6地址 + +##### 概述 + +IPv6与IPv4都可以在root权限下通过DHCP的方式获得IP地址。IPv6地址有两种配置方式:无状态自动配置和有状态自动配置。 + +- 无状态自动配置 + + 不需要DHCP服务进行管理,设备根据网络RA(路由公告)获得网络前缀,或者link-local地址为固定fe80::。而接口ID则根据ifcfg配置IPV6\_ADDR\_GEN\_MODE的具体设置来进行自动获得: + + 1. IPv6\_ADDR\_GEN\_MODE="stable-privacy" 则根据设备及网络环境来确定一个随机接口ID。 + 2. IPv6\_ADDR\_GEN\_MODE="EUI64" 则根据设备MAC地址来确定接口ID。 + +- 有状态自动配置:需要DHCP服务器进行管理分配,服从DHCPv6协议来从DHCPv6服务器端租赁IPv6地址。 + + 在有状态自动配置IPv6地址时,DHCPv6服务端可以通过客户端设置的vendor class将客户端进行分类,不同类别分配不同地址段的IPv6地址。在IPv4场景中,客户端可以直接用dhclient的-V选项来设置vendor-class-identifier,DHCP服务端在配置文件中根据vendor-class-identifier来对客户端进行分类处理。而IPv6场景中,如果使用同样的方法对客户端分类,则分类并不会生效。 + + ```shell + dhclient -6 -V + ``` + + 这是由于DHCPv6和DHCP协议存在较大差异,DHCPv6的可选项中使用vendor-class-option替代了DHCP中的vendor-class-identifier。而dhclient的-V选项并不能设置vendor-class-option。 + +##### 有状态自动配置IPv6地址时dhclient设置vendor class方法 + +- 在客户端使用配置文件方式添加对vendor class的设置,使用方法如下: + + 客户端配置文件(/etc/dhcp/dhclient6.conf),文件位置可以自定义,在使用时需要通过dhclient -cf选项来指定配置文件: + + ```text + option dhcp6.vendor-class code 16 = {integer 32, integer 16, string}; + interface "enp3s0" { + send dhcp6.vendor-class ; + } + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >- \,32位整型数字,企业标识号,企业通过IANA注册。 + >- \,16位整型数字,vendor class字符串长度。 + >- \,要设置的vendor class字符串,例如:“HWHW”。 + + 客户端使用方法: + + ```shell + dhclient -6 -cf /etc/dhcp/dhclient6.conf + ``` + +- DHCPv6服务端配置文件(/etc/dhcp/dhcpd6.conf),需要dhcpd -cf选项来指定该配置文件: + + ```text + option dhcp6.vendor-class code 16 = {integer 32, integer 16, string}; + subnet6 fc00:4:12:ffff::/64 { + class "hw" { + match if substring ( option dhcp6.vendor-class, 6, 10 ) = "HWHW"; + } + pool6 { + allow members of "hw"; + range6 fc00:4:12:ffff::ff10 fc00:4:12:ffff::ff20; + } + pool6 { + allow unknown clients; + range6 fc00:4:12:ffff::100 fc00:4:12:ffff::120; + } + } + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >substring \( option dhcp6.vendor-class, 6, 10 \) 其中子字符串的开始位置为6,因为前面包含4个字节的和2个字节的。而子字符串的结束位置为:6+。这里vendor class string为“HWHW”,字符串的长度为4,所以子字符串的结束位置为6+4=10。用户可以根据实际需要来确定及相应的。 + + 服务端使用方法: + + ```shell + dhcpd -6 -cf /etc/dhcp/dhcpd6.conf + ``` + +#### 内核支持socket相关系统调用 + +##### 概述 + +IPv6地址长度扩展到128比特,所以有足够的IPv6地址可供分配使用。同时IPv6头相比IPv4头进行了简化,并增强了IPv6的自动配置功能。IPv6地址分为单播地址,组播地址和任意播地址。常用的单播地址又包含:链路本地地址(link-local address),唯一本地地址(Unique local address)和全局地址(global address)。由于IPv6的全局地址十分充足,唯一本地地址一般不被使用(其前身为站点本地地址(site-local address),已于2004年被废弃)。当前主要使用的单播地址为:链路本地地址(link-local address)和全局地址(global address)。当前内核支持socket系统调用,在使用单播地址的链路本地地址和全局地址时存在差异。 + +##### link-local地址和global地址在socket调用时的差异 + +RFC 2553: Basic Socket Interface Extensions for IPv6 定义sockaddr\_in6的数据结构如下: + +```text +struct sockaddr_in6 { + uint8_t sin6_len; /* length of this struct */ + sa_family_t sin6_family; /* AF_INET6 */ + in_port_t sin6_port; /* transport layer port # */ + uint32_t sin6_flowinfo; /* IPv6 flow information */ + struct in6_addr sin6_addr; /* IPv6 address */ + uint32_t sin6_scope_id; /* set of interfaces for a scope */ +}; +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>sin6\_scope\_id: 32位整型,对于链路本地地址(link-local address),对于链路范围的sin6\_addr,它可以用来标识指定的接口索引号。如果是站点范围的sin6\_addr,则用来作为站点的标识符(站点本地地址已被抛弃)。 + +在使用link-local地址进行socket通信时,在构造目的地址时,需要指定该地址所对应的接口索引号。一般可以通过if\_nametoindex函数将接口名转化为接口索引号。具体方式如下: + +```text +int port = 1234; +int sk_fd; +int iff_index = 0; +char iff_name[100] = "enp3s0"; +char * ll_addr[100] = "fe80::123:456:789"; +struct sockaddr_in6 server_addr; + +memset(&server_addr,0,sizeof(structsockaddr_in6)); +iff_index=if_nametoindex(iff_name); + +server_addr.sin6_family=AF_INET6; +server_addr.sin6_port=htons(port); +server_addr.sin6_scope_id=iff_index; +inet_pton(AF_INET6, ll_addr, &(server_addr.sin6_addr)); + +sk_fd=socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP); +connect(sk_fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr_in6)); +``` + +#### IPv4的dhclient守护进程持久化配置 + +##### 概述 + +通过NetworkManager服务来管理网络服务时,如果接口ifcfg-配置文件中配置了DHCP方式获得IP地址,则相应地NetworkManager服务会拉起dhclient守护进程来通过DHCP协议方式来从DHCP服务器获取IP地址。 + +dhclient提供了"-1"选项来决定dhclient进程在未获得DHCP服务响应时,是会不断持久化尝试请求地址还是会尝试时间超时后退出。针对IPv4的dhclient守护进程,可以在ifcfg-配置文件中设置PERSISTENT\_DHCLIENT来决定是否设置IPv4的dhclient进程的持久化。 + +##### 约束限制 + +1. 当dhclient进程在运行中被杀死,network服务无法自动将其拉起,可靠性需要用户自己保障。 +2. 配置了持久化选项PERSISTENT\_DHCLIENT,需要确保有相应的DHCP服务器。如果在拉起network时无可用DHCP服务器,dhclient进程不断尝试发送请求包但无回应,则会导致network服务卡死直到network服务超时失败。由于network服务在拉起多个网卡的IPv4 dhclient进程时,是通过串行的方式来拉起的。如果有网卡配置了持久化而DHCP服务器没有准备好,则会导致network服务在给该网卡获取IPv4地址超时卡死,进而导致后续网卡无法获得IPv4/IPv6地址。 + +以上两种约束限制是特殊的应用场景,需要用户自己进行可靠性保障。 + +##### IPv4 DHCP和IPv6 DHCPv6方式获取地址的配置差异 + +可以通过配置接口ifcfg-参数来分别实现IPv4和IPv6通过DHCP/DHCPv6协议来动态获取IP地址,具体配置说明如下: + +```text +BOOTPROTO=none|bootp|dhcp +DHCPV6C=yes|no +PERSISTENT_DHCLIENT=yes|no|1|0 +``` + +- BOOTPROTO: none表示静态配置IPv4地址,bootp|dhcp则会拉起DHCP dhclient来动态获取IPv4地址。 +- DHCPV6C: no表示静态配置IPv6地址,yes则会拉起DHCPv6 dhclient来动态获取IPv6地址。 +- PERSISTENT\_DHCLIENT:no|0表示IPv4的dhclient进程配置为“非持久化”,当dhclient向DHCP服务器发送一次请求报文而无响应,则会间隔一段时间后退出,退出值为2。yes|1则表示IPv4的dhclient进程配置为“持久化”,dhclient会向DHCP服务器反复发送请求报文。**如果没有配置PERSISTENT\_DHCLIENT项,则IPv4的dhclient会默认设置为“持久化”**。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + >PERSISTENT\_DHCLIENT配置只针对IPv4生效,对IPv6相关dhclient -6进程不生效,IPv6默认不进行持久化配置。 + +#### iproute相关命令配置IPv4与IPv6时的差异说明 + +##### 概述 + +由于IPv4和IPv6是两个不同的协议标准,iproute相关命令在使用方法上存在一定的差异。本章节主要梳理iproute包中用户经常使用到命令在IPv4和IPv6使用方面的差异,从而可以更好地指导用户使用iproute包中相关命令。 + +iproute相关命令均需要在root权限下运行。 + +##### IPv6地址的生命周期 + + + + + + + + + + + + + + + + + + + +

IPv6状态

+

解释

+

tentative

+

临时状态:刚添加地址还处于地址重复检测DAD过程。

+

preferred

+

首选状态:完成DAD过程,没有收到相应的NA报文,表示该地址没有冲突。

+

deprecated

+

弃用状态:地址有一定的使用时限(valid_lft和preferred_lft),preferred_lft到期后地址会变化deprecated状态。

+

该状态下的地址不能用于创建新的连接,但是原有的连接可以继续使用。

+

invalid

+

无效状态:使用时限超过preferred_lft一段时间后仍然没有成功进行租约续约,则valid_lft时间到后地址状态会被设置为invalid,表示该地址不可以再被使用。

+
+ +其他说明: + +- preferred\_lft:preferred lifetime,地址为首选状态的寿命,preferred\_lft没有到期的地址可以用于正常通信使用,若有多个preferred地址则按照内核具体机制选择地址。 +- valid\_lft: valid lifetime,地址有效的寿命,在\[preferred\_lft, valid\_lft\]时间段内该地址不能被用于新建连接,已经创建的连接继续有效。 + +##### ip link 命令 + +命令: + +```shell +ip link set IFNAME mtu MTU +``` + +IPv6中PMTU的最小值为1280,如果mtu值设置小于1280则会导致IPv6地址丢失。其他设备无法ping通该IPv6地址。 + +##### ip addr命令 + +1. 命令: + + ```shell + ip [-6] addr add IFADDR dev IFNAME + ``` + + 添加IPv6地址可以选择添加-6选项也可以不添加,ip addr命令会根据具体地址类型来判断是ipv4地址还是IPv6地址。 + + 如果指定“-6”选项,但是IFADDR 是ipv4地址则会有错误返回。 + +2. 命令: + + ```shell + ip [-6] addr add IFADDR dev IFNAME [home|nodad] + ``` + + \[home|nodad\] 选项只针对IPv6地址有效。 + + - home:将该地址指定为RFC 6275中定义的家庭地址。(这是移动节点从家庭链路获取的地址, 是移动节点的永久地址,如果移动节点保持在相同的归属链路中,则各种实体之间的通信照常进行。) + - nodad:配置该项(仅限IPv6)添加此地址时不执行重复地址检测DAD(RFC 4862)。如果一台设备上多个接口通过nodad配置了多个相同的IPv6地址,则会按照接口顺序使用该IPv6地址。同一个接口上不能添加一个nodad一个非nodad的相同IPv6地址。因为两个地址是一样的,所以会报“RTNETLINK answers: File exists”。 + +3. 命令: + + ```shell + ip [-6] addr del IFADDR dev IFNAME + ``` + + 删除IPv6地址可以选择添加-6选项也可以不添加,ip addr del命令会根据具体地址类型来判断是ipv4地址还是IPv6地址。 + +4. 命令: + + ```shell + ip [-6] addr show dev IFNAME [tentative|-tentative|deprecated|-deprecated|dadfailed|-dadfailed|temporary] + ``` + + - 不指定-6选项,则会同时打印IPv4和IPv6地址。指定-6选项则只打印IPv6地址。 + - \[tentative|-tentative|deprecated|-deprecated|dadfailed|-dadfailed|temporary\],这些选项只针对IPv6,可以根据IPv6地址状态对地址进行筛选查看。 + 1. tentative:(仅限IPv6)仅列出尚未通过重复地址检测的地址。 + 2. -tentative:(仅限IPv6)仅列出当前未处于重复地址检测过程中的地址。 + 3. deprecated:(仅限IPv6)仅列出已弃用的地址。 + 4. -deprecated:(仅限IPv6)仅列出未弃用的地址。 + 5. dadfailed:(仅限IPv6)仅列出重复地址检测失败的地址。 + 6. -dadfailed:(仅限IPv6)仅列出未重复地址检测失败的地址。 + 7. temporary:(仅限IPv6)仅列出临时地址。 + +##### ip route命令 + +1. 命令: + + ```shell + ip [-6] route add ROUTE [mtu lock MTU] + ``` + + - -6选项:添加IPv6路由可以选择添加-6选项也可以不添加,ip route命令会根据具体地址类型来判断是IPv4地址还是IPv6地址。 + + - mtu lock MTU:锁定路由的MTU值。如果不锁定MTU,则MTU的值则可能在PMTUD过程中被内核改变。如果锁定MTU,则不会尝试PMTUD,所有IPv4包都将不设置DF位发出,IPv6包则会按照MTU进行分段处理。 + +2. 命令: + + ```shell + ip [-6] route del ROUTE + ``` + + 删除IPv6路由可以选择添加-6选项也可以不添加,ip route命令会根据具体地址类型来判断是IPv4地址还是IPv6地址。 + +##### ip rule命令 + +1. 命令: + + ```shell + ip [-6] rule list + ``` + + -6选项:设置-6选项打印IPv6的策略路由,不设置-6选项打印IPv4的策略路由。所以需要根据具体协议类型来配置-6选项。 + +2. 命令: + + ```shell + ip [-6] rule [add|del] [from|to] ADDR table TABLE pref PREF + ``` + + -6选项:IPv6相关的策略路由表项需要设置-6选项,否则会报错:“Error: Invalid source address.”。相应地,IPv4相关的策略路由表项不可以设置-6选项,否则会报错:“Error: Invalid source address.”。 + +#### NetworkManager服务配置差异说明 + +##### 概述 + +NetworkManager服务使用ifup/ifdown的逻辑接口定义进行高级网络设置。其参数大多数都是在/etc/sysconfig/network和/etc/sysconfig/network-scripts/ifcfg-两个配置文件设置。前者为全局设置,后者为指定网卡的设置,当两者有冲突时,后者生效。 + +##### 配置差异说明 + +其中在/etc/sysconfig/network下的配置差异有: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

IPv4

+

IPv6

+

含义说明

+

NA

+

IPV6FORWARDING=yes|no

+

IPv6转发,默认不转发。

+

NA

+

IPV6_AUTOCONF=yes|no

+

IPv6转发打开是no,否则是yes。

+

NA

+

IPV6_ROUTER=yes|no

+

IPv6转发打开是yes,否则是no。

+

NA

+

IPV6_AUTOTUNNEL=yes|no

+

指定Tunnel为自动隧道模式,默认是no。

+

GATEWAY

+

IPV6_DEFAULTGW=<IPv6 address[%interface]> (optional)

+

在IPv6中设置默认网关。

+

NA

+

IPV6_DEFAULTDEV=<interface> (optional)

+

指定默认转发的网卡。

+

NA

+

IPV6_RADVD_PIDFILE=<pid-file> (optional)

+

默认ipv6_radvd_pid路径:/var/run/radvd/radvd.pid。

+

NA

+

IPV6_RADVD_TRIGGER_ACTION=startstop|reload|restart|SIGHUP (optional)

+

radvd默认触发动作。

+
+ +而在/etc/sysconfig/network-scripts/ifcfg-下的差异主要有: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

IPv4

+

IPv6

+

含义说明

+

IPADDRn

+

IPV6ADDR=<IPv6 address>[/<prefix length>]

+

ip地址。

+

PREFIXn

+

NA

+

网络前缀,网络别名和ppp无效,优先级高于NETMASK。

+

NETMASKn

+

NA

+

子网掩码,仅用于别名和ppp。

+

GATEWAY

+

IPV6_DEFAULTGW=<IPv6 address[%interface]> (optional)

+

默认网关。

+

MTU

+

IPV6_MTU=<MTU of link> (optional)

+

默认MTU。

+

IPV4_FAILURE_FATAL=yes|no

+

IPV6_FAILURE_FATAL

+

默认值是no。若设置为yes,dhclient失败ifup-eth会直接退出。

+

NA

+

IPV6_PRIVACY=rfc3041

+

默认禁用。

+

NA

+

IPV6INIT=yes|no

+

默认开启IPv6。

+

NA

+

IPV6FORWARDING=yes|no

+

默认关闭,已废弃。

+
+ +### FAQ + +#### iscsi-initiator-utils不支持登录fe80 IPv6地址 + +##### 问题现象 + +客户端通过IPv6登录iscsi服务端时,使用如“iscsiadm -m node -p ipv6address -l”的命令格式登录,如果是全局地址(global address),直接替换将命令范例中的“ipv6address”替换为全局地址即可;但如果是链路本地地址(link-local address,fe80开头的IPv6地址)则无法使用,因为iscsi-initiator-utils目前机制还不支持用链路本地地址(link-local address)地址登录iscsi服务端。 + +##### 原因分析 + +如果使用格式如“iscsiadm -m node -p fe80::xxxx -l”登录,会登录超时返回,这是因为使用链路本地地址必须指定接口,否则使用iscsi\_io\_tcp\_connect函数调用connect函数会失败,并且产生标准错误码22。 + +如果使用格式如“iscsiadm -m node -p fe80::xxxx%enp3s0 -l”登录时,iscsi\_addr\_match函数会将地址“fe80::xxxx%enp3s0”与服务端返回的node信息中的地址“fe80::xxxx”对比,对比结果不匹配,导致登录失败。 + +因此,**iscsi-initiator-utils目前机制还不支持用链路本地地址(link-local address)登录iscsi服务端**。 + +#### 网卡down掉之后,IPv6地址丢失 + +##### 问题现象 + +通过ip link down+up网卡或ifconfig down+up网卡命令,将网卡down掉之后再上线,查看网卡上配置的ip地址,发现ipv4地址不丢失,而配置的IPv6地址丢失。 + +##### 原因分析 + +内核中的处理逻辑为如果网卡设置为down状态,会清空所有IPv4及IPv6地址,将网卡重新up之后,ipv4地址自动恢复,网卡上自动配置的IPv6链路本地地址也会恢复,但是其他IPv6地址默认会丢失。如果需要保留这些IPv6地址,可以通过“sysctl -w net.ipv6.conf.<网卡名\>.keep\_addr\_on\_down=1”来实现。 + +#### bond口已具有多个IPv6地址时,添加或删除IPv6地址耗时过久 + +##### 问题现象 + +下列方式配置或删除(包括flush)IPv6地址,X为动态变化的低16位,并且配置在bond口时,耗时会随已配置的IPv6地址数量成倍增加。例如由4个物理网卡组成的bond口添加IPv6地址时,单线程添加删除3000个IPv6地址均需大概5分钟,而普通物理网卡耗时在10秒内。 + +```shell +ip a add/del 192:168::18:X/64 dev DEVICE +``` + +##### 原因分析 + +bond口在添加IPv6地址时,会生成IPv6组播地址,并进行同步到所有的物理网卡上,此耗时会随IPv6数量增加而增加,导致耗时过长。 + +##### 解决方法 + +IPv6的组播地址是由IPv6地址的低24位与33-33-ff组合生成,组播地址过多会导致添加删除耗时增加,如果生成的组播地址为少量,耗时不会受此影响。 + +建议添加IPv6地址时,可保持低24位一致,保持高位变动,单网卡中仅需一个网段的一个地址即可与外部正常通信,此配置更符合常规使用。 + +#### Rsyslog在IPv4和IPv6混合使用场景中日志传输延迟 + +##### 问题现象 + +rsyslog客户端配置文件同时配置IPv4和IPv6地址,且端口配置相同的情况下,服务端收集log时会概率性出现日志打印延迟。 + +##### 原因分析 + +延迟是因为rsyslog内部存在缓冲队列机制,默认情况下需要缓冲区队列达到一定数量才会写入文件。 + +##### 解决方法 + +可在root权限下通过配置Direct模式,关闭缓冲队列机制解决该问题。在rsyslog远程传输服务端的/etc/rsyslog.d目录下新增的远程传输配置文件中,最开头增加如下配置: + +```shell +$ActionQueueType Direct +$MainMsgQueueType Direct +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- Direct模式减少队列大小为1,所以在队列中会保留1条日志到下次日志打印; +>- Direct模式会降低服务器端的rsyslog性能。 diff --git a/docs/zh/server/network/network_config/public_sys-resources/icon-caution.gif b/docs/zh/server/network/network_config/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/network/network_config/public_sys-resources/icon-caution.gif differ diff --git a/docs/zh/server/network/network_config/public_sys-resources/icon-danger.gif b/docs/zh/server/network/network_config/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/network/network_config/public_sys-resources/icon-danger.gif differ diff --git a/docs/zh/server/network/network_config/public_sys-resources/icon-note.gif b/docs/zh/server/network/network_config/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/server/network/network_config/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/server/network/network_config/public_sys-resources/icon-notice.gif b/docs/zh/server/network/network_config/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/server/network/network_config/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/server/network/network_config/public_sys-resources/icon-tip.gif b/docs/zh/server/network/network_config/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/zh/server/network/network_config/public_sys-resources/icon-tip.gif differ diff --git a/docs/zh/server/network/network_config/public_sys-resources/icon-warning.gif b/docs/zh/server/network/network_config/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/network/network_config/public_sys-resources/icon-warning.gif differ diff --git a/docs/zh/server/performance/cpu_optimization/_toc.yaml b/docs/zh/server/performance/cpu_optimization/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f799e01e59b5a9d76c8a380c50f37b3ba257ec8c --- /dev/null +++ b/docs/zh/server/performance/cpu_optimization/_toc.yaml @@ -0,0 +1,7 @@ +isManual: true +label: '' +sections: + - label: FUSE fastpath特性说明和使用指南 + href: ./fuse_acceleration_feature_guide.md + - label: 使用KAE加速引擎 + href: ./using_the_kae.md diff --git a/docs/zh/server/performance/cpu_optimization/figures/D1376B2A-D036-41C4-B852-E8368F363B5E-1.png b/docs/zh/server/performance/cpu_optimization/figures/D1376B2A-D036-41C4-B852-E8368F363B5E-1.png new file mode 100644 index 0000000000000000000000000000000000000000..900cdc07c1f0e844bc48fe2342e83c91a23c24ec Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/D1376B2A-D036-41C4-B852-E8368F363B5E-1.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/D1376B2A-D036-41C4-B852-E8368F363B5E.png b/docs/zh/server/performance/cpu_optimization/figures/D1376B2A-D036-41C4-B852-E8368F363B5E.png new file mode 100644 index 0000000000000000000000000000000000000000..900cdc07c1f0e844bc48fe2342e83c91a23c24ec Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/D1376B2A-D036-41C4-B852-E8368F363B5E.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/PostgreSql_architecture.png b/docs/zh/server/performance/cpu_optimization/figures/PostgreSql_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..f780ad9cb56378e7baa3497da68ca1610a6dfadb Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/PostgreSql_architecture.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/RA-arch-1.png b/docs/zh/server/performance/cpu_optimization/figures/RA-arch-1.png new file mode 100644 index 0000000000000000000000000000000000000000..bc55e411637b825b0ce44a7efca08f7e52e0fa70 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/RA-arch-1.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/RA-arch-2.png b/docs/zh/server/performance/cpu_optimization/figures/RA-arch-2.png new file mode 100644 index 0000000000000000000000000000000000000000..7effbaf881ffe42823142561b9135237989d7153 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/RA-arch-2.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/TPCM.png b/docs/zh/server/performance/cpu_optimization/figures/TPCM.png new file mode 100644 index 0000000000000000000000000000000000000000..290bdb3471b46dca3e9f0c0907c3855367bd5b65 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/TPCM.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/creat_datadisk.png b/docs/zh/server/performance/cpu_optimization/figures/creat_datadisk.png new file mode 100644 index 0000000000000000000000000000000000000000..0dfd6a2802184af6d809c485191ea52452cf28d5 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/creat_datadisk.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/creat_datadisk1.png b/docs/zh/server/performance/cpu_optimization/figures/creat_datadisk1.png new file mode 100644 index 0000000000000000000000000000000000000000..0dfd6a2802184af6d809c485191ea52452cf28d5 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/creat_datadisk1.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/etmem-system-architecture.png b/docs/zh/server/performance/cpu_optimization/figures/etmem-system-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..1e077e00f44c0404526a4742d49c6e866601eee1 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/etmem-system-architecture.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/ima_digest_list_update.png b/docs/zh/server/performance/cpu_optimization/figures/ima_digest_list_update.png new file mode 100644 index 0000000000000000000000000000000000000000..771067e31cee84591fbb914d7be4e8c576d7f5d2 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/ima_digest_list_update.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/ima_performance.gif b/docs/zh/server/performance/cpu_optimization/figures/ima_performance.gif new file mode 100644 index 0000000000000000000000000000000000000000..72fad8a8333f7357c64a160c1d1c174c31201eaa Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/ima_performance.gif differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/ima_verification.png b/docs/zh/server/performance/cpu_optimization/figures/ima_verification.png new file mode 100644 index 0000000000000000000000000000000000000000..d022b9d4ea08d4af386c7b76ca28115ad90e5451 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/ima_verification.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/logical_architectureofMariaDB.png b/docs/zh/server/performance/cpu_optimization/figures/logical_architectureofMariaDB.png new file mode 100644 index 0000000000000000000000000000000000000000..8caa189a6fbf37bf4e9fd863c2ebb24e25547789 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/logical_architectureofMariaDB.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/login.png b/docs/zh/server/performance/cpu_optimization/figures/login.png new file mode 100644 index 0000000000000000000000000000000000000000..d15c2cad98fba16320d587f3c7b0c80f435c5d3a Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/login.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/nginx_deployed_success.png b/docs/zh/server/performance/cpu_optimization/figures/nginx_deployed_success.png new file mode 100644 index 0000000000000000000000000000000000000000..9ffb2c142defbd690e5407659116bf8e5582ba73 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/nginx_deployed_success.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/nginx_start_failed.png b/docs/zh/server/performance/cpu_optimization/figures/nginx_start_failed.png new file mode 100644 index 0000000000000000000000000000000000000000..c8b855453433796265de42d7ffd0189c7ff9be2b Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/nginx_start_failed.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/nginx_start_success.png b/docs/zh/server/performance/cpu_optimization/figures/nginx_start_success.png new file mode 100644 index 0000000000000000000000000000000000000000..bc6929772fd98fac3494b4436f26910b09818cb7 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/nginx_start_success.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/postgres.png b/docs/zh/server/performance/cpu_optimization/figures/postgres.png new file mode 100644 index 0000000000000000000000000000000000000000..e7fc36882718587ec949133fe9892185cb4c2158 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/postgres.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/top_display.png b/docs/zh/server/performance/cpu_optimization/figures/top_display.png new file mode 100644 index 0000000000000000000000000000000000000000..2d77d3dc2934763b5da896a827b9805da34d1c09 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/top_display.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/trusted_chain.png b/docs/zh/server/performance/cpu_optimization/figures/trusted_chain.png new file mode 100644 index 0000000000000000000000000000000000000000..034f0f092f41fb500ee4122339c447d10d4138ec Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/trusted_chain.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0229622729.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0229622729.png new file mode 100644 index 0000000000000000000000000000000000000000..a32856aa08e459ed0f51f8fcf4c2f51511c12095 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0229622729.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0229622789.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0229622789.png new file mode 100644 index 0000000000000000000000000000000000000000..d245d48dc07e2b01734e21ec1952e89fa9269bdb Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0229622789.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0230050789.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0230050789.png new file mode 100644 index 0000000000000000000000000000000000000000..0b785be2a026fe059c6ee41700a971a11cfff7ae Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0230050789.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143176.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143176.png new file mode 100644 index 0000000000000000000000000000000000000000..300165189e6d3e8fa356f3d463cfc627c2ece0e2 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143176.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143177.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143177.png new file mode 100644 index 0000000000000000000000000000000000000000..ccafce4b0c58a4da0a9f7aece335ede24e5030c0 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143177.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143178.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143178.png new file mode 100644 index 0000000000000000000000000000000000000000..bff125f096215e91b28ee6deacde6d886e5b21eb Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143178.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143180.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143180.png new file mode 100644 index 0000000000000000000000000000000000000000..52f5644f9c985bcc39c0d146006dd9136140bc01 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143180.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143181.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143181.png new file mode 100644 index 0000000000000000000000000000000000000000..d3698e6c0e021a56be46b9f4944c858a425eb66c Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143181.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143183.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143183.png new file mode 100644 index 0000000000000000000000000000000000000000..55ffdfa2616ee259543c1539e46c3e05f9335354 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143183.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143185.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143185.png new file mode 100644 index 0000000000000000000000000000000000000000..bff125f096215e91b28ee6deacde6d886e5b21eb Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143185.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143187.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143187.png new file mode 100644 index 0000000000000000000000000000000000000000..52f5644f9c985bcc39c0d146006dd9136140bc01 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143187.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143189.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143189.png new file mode 100644 index 0000000000000000000000000000000000000000..7656f3aa5f5907f1e9f981c0cb5d44d4fcb84ef3 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143189.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143191.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143191.png new file mode 100644 index 0000000000000000000000000000000000000000..a82d1bcb2b719e3a372f63ae099cb5d52a93b536 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143191.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143193.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143193.png new file mode 100644 index 0000000000000000000000000000000000000000..94614045bddb0871b44d2f6603402f914871ad61 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143193.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143195.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143195.png new file mode 100644 index 0000000000000000000000000000000000000000..05011dbabe2d245c37ec68de646851bf955a2361 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143195.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143196.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143196.png new file mode 100644 index 0000000000000000000000000000000000000000..9bdbac969920af77721980804bd1c5433bea5bc9 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143196.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143197.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143197.png new file mode 100644 index 0000000000000000000000000000000000000000..5ea4eec4002374096d8ac18eb973ed3bf874b632 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143197.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143198.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143198.png new file mode 100644 index 0000000000000000000000000000000000000000..7d6360c150495d204da4b069e6dc62677580888f Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231143198.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231563132.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231563132.png new file mode 100644 index 0000000000000000000000000000000000000000..bb801a9471f3f3541ba96491654f25e2df9ce8bf Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231563132.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231563134.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231563134.png new file mode 100644 index 0000000000000000000000000000000000000000..398d15376d29d3aa406abb2e7e065d4625428c4d Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231563134.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231563135.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231563135.png new file mode 100644 index 0000000000000000000000000000000000000000..785977142a6bf0e1c1815b82dea73d75fa206a75 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231563135.png differ diff --git a/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231563136.png b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231563136.png new file mode 100644 index 0000000000000000000000000000000000000000..c274db4d0ca9d8758267a916e19fdef4aa22d0ba Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/figures/zh-cn_image_0231563136.png differ diff --git a/docs/zh/server/performance/cpu_optimization/fuse_acceleration_feature_guide.md b/docs/zh/server/performance/cpu_optimization/fuse_acceleration_feature_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..4d73fc1ee6a3d9d0e2c8efd440adab0e26dabc40 --- /dev/null +++ b/docs/zh/server/performance/cpu_optimization/fuse_acceleration_feature_guide.md @@ -0,0 +1,107 @@ +# FUSE fastpath特性说明和使用指南 + +## 介绍 + +FUSE(Filesystem in Userspace)允许非 root 用户在用户空间创建自己的文件系统,开发者不必修改内核代码,也无需内核模块开发经验,就能够快速实现新的、自定义的文件系统。FUSE 具有简化文件系统开发、扩展文件系统能力、提升安全性和稳定性的优点,但由于对 IO 性能的影响较大,其使用有所受限。为了提高 FUSE 的性能,openEuler 为 FUSE 提供了 fastpath 特性,该特性通过预创建线程绑核、共享内存、快速进程切换等功能实现了单线程和多线程下 FUSE 的加速。具体而言,有如下 3 项技术: + +1. 当挂载用户态文件系统时,就在每个 cpu 上都创建 1 个对应的 FUSE daemon,并将其绑定到对应的 CPU 上。当用户进程下发 IO 后,直接唤起同一 CPU 上的 FUSE daemon,这减少了创建和销毁线程的开销,同时可以尽可能利用 CPU 的 cache (用户进程和 FUSE daemon 通常会访问同样的内存)。每个线程绑核后相当于有了一个 percpu 的变量,不同 CPU 上的用户进程下发 IO 后不会互相竞争锁,提高了并行性。 +2. Fuse内核模块与FUSE daemon间创建一块共享内存,将FUSE的头信息直接放入到共享内存中,避免了寻址和复制部分的开销。 +3. 通过快速线程切换技术,可以在内核中显式地切换 CPU 上运行的线程,无需常规的线程切换流程,实现更高的 CPU 利用率。 + +## 使用方式 + +### 环境要求 + +- 硬件要求:ARM64架构处理器。 +- 软件要求:目前 FUSE fastpath 特性仅在 openEuler 22.03 LTS SP4 上提供,且需要内核态和用户态的配合。使能 fastpath 特性要求内核最低版本为 5.10.0-264.0.0;用户态部分目前仅对 libfuse 进行了适配,要求 fuse3 软件包的最低版本为 3.10.5-11。开发者可以在 openEuler 的 update 源中获取到更新的软件包。 + +### 使用方法 + +#### 动态库链接 + +fastpath 特性用户态部分以 fuse3 软件包中的 libfuse 动态库形式提供。对于使用 libfuse 动态库的用户态文件系统,链接时可以使用如下方式: + +```bash +gcc program.o -L/path/to/lib -lfuse -o program +``` + +对于已经编译为二进制的用户态文件系统,开发者可以通过如下命令查看当前链接的动态库: + +```bash +ldd /path/to/binary +``` + +若当前链接的动态库并非目标版本,可以使用如下方法: + +- 方法一:更新 `/etc/ld.so.conf` + + 打开或创建一个新的配置文件,例如 `/etc/d.so.conf.d/newlib.conf`,并添加库所在路径: + + ```bash + /path/to/lib + ``` + + 运行以下命令更新缓存: + + ```bash + sudo ldconfig + ``` + +- 方法二:设置 LD_LIBRARY_PATH + + 可以通过设置环境变量 LD_LIBRARY_PATH 来指定库的路径。这种方法不需要管理员权限,但只对当前会话有效。 + + ```bash + export LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH + ``` + +#### 适配和使能 + +确定链接到正确版本的动态库后,开发者可以通过在创建 fuse session 时增加参数的方式使能 fastpath,具体而言,包括以下3个配置: + +- use_fastpath:使能 fastpath,即上述的预创建线程绑核、共享内存、快速进程切换功能。 +- no_interrupt:不处理 interrupt 请求。 +- no_forget:不处理 forget 请求。 + +no_forget 和 no_interrupt 可以提升性能,但会造成部分功能缺失,需确定用户态文件系统不会使用这两类请求时再启用,否则可能造成问题。 + +需要注意的是,增加参数是指在使用 libfuse 中创建 fuse session 的函数 fuse_session_new 时传入的参数,而非使用挂载所需用户态文件系统的二进制时增加的参数,具体的适配方式因具体的用户态文件系统而异。以libfuse自带的演示demo ( [passthrough_hp](https://github.com/libfuse/libfuse/blob/fuse-3.10.5/example/passthrough_hp.cc) ) 为例,其代码需做如下适配: + +```diff +diff --git a/example/passthrough_hp.cc b/example/passthrough_hp.cc +index 872fc73..1f96820 100644 +--- a/example/passthrough_hp.cc ++++ b/example/passthrough_hp.cc +@@ -1146,7 +1146,10 @@ static cxxopts::ParseResult parse_options(int argc, char **argv) { + ("help", "Print help") + ("nocache", "Disable all caching") + ("nosplice", "Do not use splice(2) to transfer data") +- ("single", "Run single-threaded"); ++ ("single", "Run single-threaded") ++ ("nointerrupt", "Do not process interrupt request") ++ ("noforget", "Do not process forget request") ++ ("usefastpath", "use fastpath"); + + // FIXME: Find a better way to limit the try clause to just + // opt_parser.parse() (cf. https://github.com/jarro2783/cxxopts/issues/146) +@@ -1225,7 +1228,10 @@ int main(int argc, char *argv[]) { + if (fuse_opt_add_arg(&args, argv[0]) || + fuse_opt_add_arg(&args, "-o") || + fuse_opt_add_arg(&args, "default_permissions,fsname=hpps") || +- (options.count("debug-fuse") && fuse_opt_add_arg(&args, "-odebug"))) ++ (options.count("debug-fuse") && fuse_opt_add_arg(&args, "-odebug")) || ++ (options.count("nointerrupt") && fuse_opt_add_arg(&args, "-ono_interrupt")) || ++ (options.count("noforget") && fuse_opt_add_arg(&args, "-ono_forget")) || ++ (options.count("usefastpath") && fuse_opt_add_arg(&args, "-ouse_fastpath"))) + errx(3, "ERROR: Out of memory"); + + fuse_lowlevel_ops sfs_oper {}; +``` + +挂载方式: + +```bash +passthrough_hp --usefastpath /path/to/src /path/to/mnt +``` + +参数 `--usefastpath` 进入 passthrough_hp 后会被解析为 `-ouse_fastpath` 参数,用于创建新的 fuse session,带有该参数的 session 后续在挂载和创建 FUSE daemon 时会使能fastpath。 diff --git a/docs/zh/server/performance/cpu_optimization/public_sys-resources/icon-caution.gif b/docs/zh/server/performance/cpu_optimization/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/public_sys-resources/icon-caution.gif differ diff --git a/docs/zh/server/performance/cpu_optimization/public_sys-resources/icon-danger.gif b/docs/zh/server/performance/cpu_optimization/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/public_sys-resources/icon-danger.gif differ diff --git a/docs/zh/server/performance/cpu_optimization/public_sys-resources/icon-note.gif b/docs/zh/server/performance/cpu_optimization/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/server/performance/cpu_optimization/public_sys-resources/icon-notice.gif b/docs/zh/server/performance/cpu_optimization/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/server/performance/cpu_optimization/public_sys-resources/icon-tip.gif b/docs/zh/server/performance/cpu_optimization/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/public_sys-resources/icon-tip.gif differ diff --git a/docs/zh/server/performance/cpu_optimization/public_sys-resources/icon-warning.gif b/docs/zh/server/performance/cpu_optimization/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/performance/cpu_optimization/public_sys-resources/icon-warning.gif differ diff --git a/docs/zh/server/performance/cpu_optimization/using_the_kae.md b/docs/zh/server/performance/cpu_optimization/using_the_kae.md new file mode 100644 index 0000000000000000000000000000000000000000..76b313aa1e916edcf1dc366fe4c5cf01fa1ca3a3 --- /dev/null +++ b/docs/zh/server/performance/cpu_optimization/using_the_kae.md @@ -0,0 +1,650 @@ +# 使用KAE加速引擎 + +## 简介 + +KAE加速引擎为openEuler的一个软件加速库,搭载在Kunpeng 920处理器上联合提供硬件加速引擎功能,包含了对称加密、非对称加密和数字签名,用于加速SSL/TLS应用,可以显著降低处理器消耗,提高处理器效率。此外,用户通过OpenSSL标准接口可实现业务快速迁移。 + +KAE加速引擎支持以下算法: + +- 摘要算法SM3,支持异步模式。 +- 对称加密算法SM4,支持异步模式,支持CTR/XTS/CBC模式。 +- 对称加密算法AES,支持异步模式,支持ECB/CTR/XTS/CBC模式。 +- 非对称算法RSA,支持异步模式,支持 Key Sizes 1024/2048/3072/4096。 +- 密钥协商算法DH,支持异步模式,支持 Key Sizes 768/1024/1536/2048/3072/4096。 + +## 应用场景 + +KAE加速引擎主要有以下应用场景,如[表1](#table11915824163418)所示。 + +**表 1** 应用场景 + + + + + + + + + + + + + + + + + + + +

场景

+

数据

+

大数据

+

流数据

+

数据加密

+

块数据

+

智能安防

+

视频流数据

+

Web服务

+

握手连接

+
+ +## 安装、升级和卸载 + +### 安装加速器软件包 + +#### 安装前准备 + +##### 环境要求 + +- TaiShan 200服务器,开启加速引擎功能 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- 需要导入加速器许可证,具体操作请参考《[TaiShan 机架服务器 iBMC \(V500及以上\) 用户指南](https://support.huawei.com/enterprise/zh/doc/EDOC1100121687)》中“许可证管理”章节。 +>- 物理机场景使用加速器需要关闭SMMU,具体操作请参考《[TaiShan 200服务器BIOS参数参考](https://support.huawei.com/enterprise/zh/doc/EDOC1100088653)》。 + +- CPU:Kunpeng 920 +- 操作系统:openEuler-22.03_LTS_SP4-aarch64-dvd.iso + +##### KAE加速引擎软件说明 + +**表 2** 加速引擎的rpm软件包 + + + + + + + + + + + + + + + + +

软件包名称

+

软件包说明

+

kae_driver-版本号-1.OS类型.aarch64.rpm

+

加速器驱动,包含内容:uacce.ko、hisi_qm.ko、hisi_sec2.ko、hisi_hpre.ko内核模块

+

支持:SM3/SM4/AES/RSA/DH算法

+

libwd-版本号-1.OS类型.aarch64.rpm

+

包含内容:libwd.so动态链接库

+

提供接口给KAE引擎

+

libkae-版本号-1.OS类型.aarch64.rpm

+

依赖:libwd rpm包

+

包含内容:libkae.so动态库

+

支持:SM3/SM4/AES/RSA/DH等算法

+
+ +#### 安装加速器软件包 + +##### 前提条件 + +- 已在本地安装远程SSH登录工具。 +- 已安装openEuler操作系统。 +- RPM工具能正常使用。 +- 已安装OpenSSL 1.1.1a或以上版本。 + + 使用如下命令查询OpenSSL的版本号: + + - openssl version + +##### 安装步骤 + +1. 以root帐号登录openEuler OS命令行界面。 +2. 新建目录用于存放加速器引擎软件包。 +3. 使用SSH远程登录工具,将所有加速引擎软件包拷贝到已建好的目录下。 +4. 在存放加速引擎软件包目录下,使用**rpm -ivh**命令安装加速器引擎软件包。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + >由于libkae包的安装依赖libwd包,所以libwd的安装必须先于libkae。 + + ``` + rpm -ivh uacce*.rpm hisi*.rpm libwd-*.rpm libkae*.rpm + ``` + +5. 使用**rpm -qa**命令,查看加速器软件包是否已正常安装到系统内。使用**rpm -ql**命令,查看软件包的文件是否正确。示例如下。 + + ``` + rpm -qa|grep -E "hisi|uacce|libwd|libkae" + ``` + +6. 重启系统或通过命令行手动依次加载加速器引擎驱动到内核,并查看是否加载成功。 + + ``` + # modprobe uacce + # lsmod | grep uacce + # modprobe hisi_qm + # lsmod | grep hisi_qm + # modprobe hisi_qm + # modprobe hisi_sec2 #加载hisi_sec2驱动时将根据/etc/modprobe.d/hisi_sec2.conf 下的配置文件加载到内核 + # modprobe hisi_hpre #加载hisi_hpre驱动时将根据/etc/modprobe.d/hisi_hpre.conf 下的配置文件加载到内核 + ``` + +##### 设置环境变量 + +通过以下命令导出环境变量:如果用户指定安装路径,则下面/usr/local应根据实际安装路径进行修改。 + +``` +export OPENSSL_ENGINES=/usr/local/lib/engines-1.1 +``` + +##### 安装后检查 + +执行**rpm -qa**命令查看加速器引擎软件包是否安装成功。 + +打印信息中包含“ _软件包名-版本号-_ ”表示该软件包安装成功。示例如下。 + +``` +rpm -qa|grep -E "hisi|uacce|libwd|libkae" +``` + +#### 安装后操作 + +##### OpenSSL加速器引擎测试 + +用户可以通过以下命令测试部分加速器功能。 + +- 使用OpenSSL的软件算法测试RSA性能。 + + ``` + linux-rmw4:/usr/local/bin # ./openssl speed -elapsed rsa2048 + ... + sign verify sign/s verify/s + rsa 2048 bits 0.001384s 0.000035s 724.1 28365.8. + ``` + +- 使用KAE引擎测试RSA性能。 + + ``` + linux-rmw4:/usr/local/bin # ./openssl speed -elapsed -engine kae rsa2048 + .... + sign verify sign/s verify/s + rsa 2048 bits 0.000355s 0.000022s 2819.0 45478.4 + ``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>使用KAE引擎加速后签名性能从724.1sign/s提升到2819sign/s。 + +- 使用OpenSSL的软件算法测试异步RSA性能。 + + ``` + linux-rmw4:/usr/local/bin # ./openssl speed -elapsed -async_jobs 36 rsa2048 + .... + sign verify sign/s verify/s + rsa 2048 bits 0.001318s 0.000032s 735.7 28555 + ``` + +- 使用KAE引擎测试异步RSA性能。 + + ``` + linux-rmw4:/usr/local/bin # ./openssl speed -engine kae -elapsed -async_jobs 36 rsa2048 + .... + sign verify sign/s verify/s + rsa 2048 bits 0.000018s 0.000009s 54384.1 105317.0 + ``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>使用KAE引擎加速后异步RSA签名性能从735.7 sign/s提升到 54384.1sign/s。 + +- 使用OpenSSL的软件算法测试SM4 CBC模式性能。 + + ``` + linux-rmw4:/usr/local/bin # ./openssl speed -elapsed -evp sm4-cbc + You have chosen to measure elapsed time instead of user CPU time. + .... + Doing sm4-cbc for 3s on 10240 size blocks: 2196 sm4-cbc's in 3.00s .... + type 51200 bytes 102400 bytes1048576 bytes2097152 bytes4194304 bytes8388608 bytes + sm4-cbc 82312.53k 85196.80k 85284.18k 85000.85k 85284.18k 85261.26k + ``` + +- 使用KAE引擎测试SM4 CBC模式性能。 + + ``` + linux-rmw4:/usr/local/bin # ./openssl speed -elapsed -engine kae -evp sm4-cbc + engine "kae" set. + You have chosen to measure elapsed time instead of user CPU time. + ... + Doing sm4-cbc for 3s on 1048576 size blocks: 11409 sm4-cbc's in 3.00s + ... + type 51200 bytes 102400 bytes1048576 bytes2097152 bytes4194304 bytes8388608 bytes + sm4-cbc 383317.33k 389427.20k 395313.15k 392954.73k 394264.58k 394264.58k + ``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>使用KAE加速后SM4 CBC模式在输入数据块大小为8M时,性能从82312.53k/s提升到383317.33k/s。 + +- 使用OpenSSL的软件算法测试SM3模式性能。 + + ```shell + linux-rmw4:/usr/local/bin # ./openssl speed -elapsed -evp sm3 + You have chosen to measure elapsed time instead of user CPU time. + Doing sm3 for 3s on 102400 size blocks: 1536 sm3's in 3.00s + .... + type 51200 bytes 102400 bytes1048576 bytes2097152 bytes4194304 bytes8388608 bytes + sm3 50568.53k 52428.80k 52428.80k 52428.80k 52428.80k 52428.80k + ``` + +- 使用KAE引擎测试SM3模式性能。 + + ```shell + linux-rmw4:/usr/local/bin # ./openssl speed -elapsed -engine kae -evp sm3 + engine "kae" set. + You have chosen to measure elapsed time instead of user CPU time. + Doing sm3 for 3s on 102400 size blocks: 19540 sm3's in 3.00s + .... + type 51200 bytes 102400 bytes 1048576 bytes 2097152 bytes 4194304 bytes 8388608 bytes + sm3 648243.20k 666965.33k 677030.57k 678778.20k 676681.05k 668292.44k + ``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>使用KAE加速后SM3算法在输入数据块大小为8M时,从52428.80 k/s提升到668292.44k/s。 + +- 使用OpenSSL软件算法测试AES算法CBC模式异步性能。 + + ```shell + linux-rmw4:/usr/local/bin # ./openssl speed -elapsed -evp aes-128-cbc -async_jobs 4 + You have chosen to measure elapsed time instead of user CPU time. + Doing aes-128-cbc for 3s on 51200 size blocks: 65773 aes-128-cbc's in 3.00s + Doing aes-128-cbc for 3s on 102400 size blocks: 32910 aes-128-cbc's in 3.00s + .... + type 51200 bytes 102400 bytes1048576 bytes2097152 bytes4194304 bytes8388608 bytes + aes-128-cbc 1122525.87k 1123328.00k 1120578.22k 1121277.27k 1119879.17k 1115684.86k + ``` + +- 使用的KEA引擎测试AES算法CBC模式异步性能。 + + ```shell + linux-rmw4:/usr/local/bin # ./openssl speed -elapsed -evp aes-128-cbc -async_jobs 4 -engine kae + engine "kae" set. + You have chosen to measure elapsed time instead of user CPU time. + Doing aes-128-cbc for 3s on 51200 size blocks: 219553 aes-128-cbc's in 3.00s + Doing aes-128-cbc for 3s on 102400 size blocks: 117093 aes-128-cbc's in 3.00s + .... + type 51200 bytes 102400 bytes1048576 bytes2097152 bytes4194304 bytes8388608 bytes + aes-128-cbc 3747037.87k 3996774.40k 1189085.18k 1196774.74k 1196979.11k 1199570.94k + ``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- AES仅支持数据长度为256KB及以下场景的异步使用。 +>- 使用KAE加速后AES算法在输入数据块为100K大小时,从1123328.00k/s提升到3996774.40 k/s 。 + +### 升级加速器软件包 + +#### 使用场景 + +当需要更新加速器软件版本时可以使用**rpm -Uvh**方式进行升级。 + +#### 操作步骤 + +1. 从openEuler社区下载最新版本的加速引擎软件包。 +2. 使用SSH远程登录工具,以root帐号进入Linux操作系统命令行界面。 +3. 将下载下来的最新版本的软件包都放在某个路径下。 +4. 在存放软件包的路径下使用**rpm -Uvh**命令升级加速器驱动包及引擎库包。示例如下。 + + 命令和信息回显如下所示。 + + ![](./figures/zh-cn_image_0231143189.png) + + ![](./figures/zh-cn_image_0231143191.png) + +5. 使用**rpm -qa**命令查询是否升级成功。确认查询到的版本是最新的升级后版本。 + + ![](./figures/zh-cn_image_0231143193.png) + + ![](./figures/zh-cn_image_0231143195.png) + +6. 重启系统或通过命令行手动卸载旧版本驱动,然后加载新版本驱动,并查看是否加载成功。 + + ```shell + 卸载旧驱动 + # lsmod | grep uacce + uacce 262144 3 hisi_hpre,hisi_sec2,hisi_qm + # + # rmmod hisi_hpre + # rmmod hisi_sec2 + # rmmod hisi_qm + # rmmod uacce + # lsmod | grep uacce + # + 加载新驱动 + # modprobe uacce + # modprobe hisi_qm + # modprobe hisi_sec2 #加载hisi_sec2驱动时将根据/etc/modprobe.d/hisi_sec2.conf 下的配置文件加载到内核 + # modprobe hisi_hpre #加载hisi_hpre驱动时将根据/etc/modprobe.d/hisi_hpre.conf 下的配置文件加载到内核 + # lsmod | grep uacce + uacce 36864 3 hisi_sec2,hisi_qm,hisi_hpre + ``` + +### 卸载加速器软件包 + +#### 使用场景 + +用户不再使用加速引擎软件,或进行新版本加速引擎软件的安装。 + +#### 操作步骤 + +1. 使用SSH远程登录工具,以root帐号进入Linux操作系统命令行界面。 +2. 重启系统或通过命令行手动将已加载到内核的驱动卸载掉,并查看是否卸载成功。 + + ```shell + # lsmod | grep uacce + uacce 36864 3 hisi_sec2,hisi_qm,hisi_hpre + # rmmod hisi_hpre + # rmmod hisi_sec2 + # rmmod hisi_qm + # rmmod uacce + # lsmod | grep uacce + # + ``` + +3. 通过**rpm -e**命令卸载加速引擎软件包。示例如下。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + >由于存在依赖关系,卸载libwd前须先卸载libkae引擎软件包。 + + ![](./figures/zh-cn_image_0231143196.png) + + ![](./figures/zh-cn_image_0231143197.png) + +4. 使用**rpm -qa |grep**软件包名命令查询是否卸载成功。 + + ![](./figures/zh-cn_image_0231143198.png) + +## 日志查询 + +加速器引擎涉及日志信息如[表3](#table52821836)所示。 + +**表 3** 日志信息 + + + + + + + + + + + + + + + + +

目录

+

文件名

+

文件内容说明

+

/var/log/

+

kae.log

+

OpenSSL引擎日志默认打印等级为error级别,如需要设置日志级别按照如下操作:

+
  1. export KAE_CONF_ENV=/var/log/
  2. 在/var/log/下创建文件kae.cnf
  3. 在kae.cnf 文件中设置如下:

    [LogSection]

    +

    debug_level=error #取值内容none/error/info/warning/debug

    +
+
说明:

正常情况下不建议开启info或debug级别日志,否则会导致加速器性能的下降。

+
+

/var/log/

+

message/syslog

+
  • 内核日志路径为/var/log/message。
+
说明:

或通过dmesg > /var/log/dmesg.log日志收集内核相关日志,包含驱动及内核态日志。

+
+
+ +## 加速引擎的应用 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>如果用户未购买引擎许可证,建议用户不要通过kae引擎调用相应算法,否则可能会影响openSSL加密算法的性能。 +> +### KAE引擎使用示例代码 + +```c +#include + +#include + +/* OpenSSL headers */ + +#include + +#include + +#include + +#include + +int main(int argc, char **argv) + +{ + + /* Initializing OpenSSL */ + + SSL_load_error_strings(); + + ERR_load_BIO_strings(); + + OpenSSL_add_all_algorithms(); + + /*You can use ENGINE_by_id Function to get the handle of the Huawei Accelerator Engine*/ + + ENGINE *e = ENGINE_by_id("kae"); + + /*使能加速器异步功能,可选配置,设置为“0”表示不使能,设置为“1”表示使能,默认使能异步功能*/ + + ENGINE_ctrl_cmd_string(e, "KAE_CMD_ENABLE_ASYNC", "1", 0) + + ENGINE_init(e); + + + RSA *rsa = RSA_new_method(e);#指定引擎用于RSA加解密 + + /*The user code*/ + + …… + +; + + ENGINE_free(e); + +; + +} +``` + +### 通过OpenSSL配置文件openssl.cnf使用KAE引擎 + +新建openssl.cnf 需要添加如下配置信息 + +```cnf +openssl_conf=openssl_def +[openssl_def] +engines=engine_section +[engine_section] +kae=kae_section +[kae_section] +engine_id=kae +dynamic_path=/usr/local/lib/engines-1.1/kae.so +KAE_CMD_ENABLE_ASYNC=1 # 0表示不使能异步功能,1表示使能异步功能,默认使能 +default_algorithms=ALL +init=1 +``` + +导出OPENSSL\_CONF环境变量: + +```shell +export OPENSSL_CONF=/home/app/openssl.cnf #该路径为openssl.cnf存放路径 +``` + +使用OpenSSL配置文件示例如下: + +```c +#include + +#include + +/* OpenSSL headers */ + +#include + +#include + +#include + +#include + +int main(int argc, char **argv) + +{ + + /* Initializing OpenSSL */ + + SSL_load_error_strings(); + + ERR_load_BIO_strings(); + +#Load openssl configure + +OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, NULL); OpenSSL_add_all_algorithms(); + + /*You can use ENGINE_by_id Function to get the handle of the Huawei Accelerator Engine*/ + + ENGINE *e = ENGINE_by_id("kae"); + + /*The user code*/ + + …… + +; + + ENGINE_free(e); + +; +} +``` + +## 故障处理 + +### 初始化失败 + +#### 故障现象 + +加速器引擎没有完全加载成功。 + +#### 处理步骤 + +1. 检查加速器驱动是否加载成功,运行lsmod 命令查看uacce.ko、qm.ko 、sgl.ko 、hisi\_sec2.ko 、hisi\_hpre.ko 、hisi\_zip.ko、 hisi\_rde.ko是否在位。 + + ```shell + # lsmod | grep uacce + uacce 262144 2 hisi_hpre,hisi_qm,hisi_sec2,hisi_zip,hisi_rde + ``` + +2. 检查/usr/lib64(RPM方式安装时目录)或者/usr/local/lib(源码方式安装时目录)和OpenSSL安装目录是否有加速器引擎库,且建立正确的软链接。 + + ```shell + [root@localhost home]# ll /usr/local/lib/engines-1.1/ |grep kae + #查询kae是否正确安装并建立软链接,如果有正确安装显示如下内容 + # ll /usr/local/lib/engines-1.1/ |grep kae + lrwxrwxrwx. 1 root root 22 Nov 12 02:33 kae.so -> kae.so.1.0.1 + lrwxrwxrwx. 1 root root 22 Nov 12 02:33 kae.so.0 -> kae.so.1.0.1 + -rwxr-xr-x. 1 root root 112632 May 25 2019 kae.so.1.0.1 + [root@localhost home]# + [root@localhost home]# ll /usr/lib64/ | grep libwd + #查询libwd是否正确安装并建立软链接,如果有正确安装显示如下内容 + lrwxrwxrwx. 1 root root 14 Nov 12 02:33 libwd.so -> libwd.so.1.0.1 + lrwxrwxrwx. 1 root root 14 Nov 12 02:33 libwd.so.0 -> libwd.so.1.0.1 + -rwxr-xr-x. 1 root root 137120 May 25 2019 libwd.so.1.0.1 + [root@localhost home]# + ``` + +3. 检查OpenSSL引擎库的路径是否能通过export命令进行导出。 + + ```shell + # echo $OPENSSL_ENGINES + # export OPENSSL_ENGINES=/usr/local/lib/engines-1.1 + # echo $OPENSSL_ENGINES + /usr/local/lib/engines-1.1 + ``` + +### 安装完加速器引擎之后,查找不到加速器设备 + +#### 故障现象 + +安装完加速器引擎之后,查找不到加速器设备。 + +#### 解决方法 + +1. 检查虚拟文件系统下是否有相应设备。正常情况下有如下相应的加速器设备。 + + ```shell + # ls -al /sys/class/uacce/ + total 0 + lrwxrwxrwx. 1 root root 0 Nov 14 03:45 hisi_hpre-2 -> ../../devices/pci0000:78/0000:78:00.0/0000:79:00.0/uacce/hisi_hpre-2 + lrwxrwxrwx. 1 root root 0 Nov 14 03:45 hisi_hpre-3 -> ../../devices/pci0000:b8/0000:b8:00.0/0000:b9:00.0/uacce/hisi_hpre-3 + lrwxrwxrwx. 1 root root 0 Nov 17 22:09 hisi_rde-4 -> ../../devices/pci0000:78/0000:78:01.0/uacce/hisi_rde-4 + lrwxrwxrwx. 1 root root 0 Nov 17 22:09 hisi_rde-5 -> ../../devices/pci0000:b8/0000:b8:01.0/uacce/hisi_rde-5 + lrwxrwxrwx. 1 root root 0 Nov 14 08:39 hisi_sec-0 -> ../../devices/pci0000:74/0000:74:01.0/0000:76:00.0/uacce/hisi_sec-0 + lrwxrwxrwx. 1 root root 0 Nov 14 08:39 hisi_sec-1 -> ../../devices/pci0000:b4/0000:b4:01.0/0000:b6:00.0/uacce/hisi_sec-1 + lrwxrwxrwx. 1 root root 0 Nov 17 22:09 hisi_zip-6 -> ../../devices/pci0000:74/0000:74:00.0/0000:75:00.0/uacce/hisi_zip-6 + lrwxrwxrwx. 1 root root 0 Nov 17 22:09 hisi_zip-7 -> ../../devices/pci0000:b4/0000:b4:00.0/0000:b5:00.0/uacce/hisi_zip-7 + ``` + +2. 若要使用hpre设备但是在[1](#li1760055514614)中未查询到,请按[初始化失败](#初始化失败)排查加速器软件是否已正确安装。 +3. 若[2](#li1600175515610)已确认加速器软件正确安装,请排查通过lspci命令查看物理设备是否存在。 + + ```shell + # lspci | grep HPRE + 79:00.0 Network and computing encryption device: Huawei Technologies Co., Ltd. HiSilicon HPRE Engine (rev 21) + b9:00.0 Network and computing encryption device: Huawei Technologies Co., Ltd. HiSilicon HPRE Engine (rev 21) + ## lspci | grep SEC + 76:00.0 Network and computing encryption device: Huawei Technologies Co., Ltd. HiSilicon SEC Engine (rev 21) + b6:00.0 Network and computing encryption device: Huawei Technologies Co., Ltd. HiSilicon SEC Engine (rev 21) + ## lspci | grep RDE + 78:01.0 RAID bus controller: Huawei Technologies Co., Ltd. HiSilicon RDE Engine (rev 21) + b8:01.0 RAID bus controller: Huawei Technologies Co., Ltd. HiSilicon RDE Engine (rev 21) + ## lspci | grep ZIP + 75:00.0 Processing accelerators: Huawei Technologies Co., Ltd. HiSilicon ZIP Engine (rev 21) + b5:00.0 Processing accelerators: Huawei Technologies Co., Ltd. HiSilicon ZIP Engine (rev 21) + # + ``` + +4. 若[3](#li1560012551369)未查询到相应的物理设备,请确认以下,不分先后: + - 确认是否已导入加速器许可证,若未导入,请参考《[TaiShan 机架服务器 iBMC \(V500及以上\) 用户指南](https://support.huawei.com/enterprise/zh/doc/EDOC1100121687)》中“许可证管理”章节,导入加速器许可证。导入加速器许可证之后,需要掉电重启iBMC,使能License。 + - 确认iBMC和BIOS版本是否支持加速器特性。 + +### 升级加速器驱动失败 + +#### 故障现象 + +升级加速器驱动后,重启系统驱动版本仍为旧版本。 + +#### 可能原因 + +在升级加速器驱动前,系统更新了其他驱动包,这些驱动包可能重新更新了引导文件系统initramfs,将未升级前的加速器驱动一起更新到了initramfs文件系统中。例如系统更新了网卡驱动,或者人为更新了initramfs文件系统,导致系统重启时优先从initramfs文件系统中加载加速器驱动。 + +#### 处理步骤 + +升级加速器驱动版本后,通过执行dracut \-\-force命令重新更新initramfs文件系统。 diff --git a/docs/zh/server/performance/overall/system_resource/_toc.yaml b/docs/zh/server/performance/overall/system_resource/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8efe54c11470d2423173e953703b86d6ab2b55bb --- /dev/null +++ b/docs/zh/server/performance/overall/system_resource/_toc.yaml @@ -0,0 +1,5 @@ +isManual: true +label: '' +sections: + - label: 系统资源与性能 + href: ./system_resources_and_performance.md diff --git a/docs/zh/server/performance/overall/system_resource/images/c50cb9df64f4659787c810167c89feb4_1884x257.png b/docs/zh/server/performance/overall/system_resource/images/c50cb9df64f4659787c810167c89feb4_1884x257.png new file mode 100644 index 0000000000000000000000000000000000000000..01081f25627731c56764c196e3fae32d55bc7023 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/c50cb9df64f4659787c810167c89feb4_1884x257.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001321685172.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001321685172.png new file mode 100644 index 0000000000000000000000000000000000000000..a98265bdf251608c0ff394fefe545cd3192bdb28 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001321685172.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001322112990.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001322112990.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4b32bf2b36595abe10f2550cda5714bc355553 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001322112990.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001322219840.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001322219840.png new file mode 100644 index 0000000000000000000000000000000000000000..48b28664df46ddf9aa38c7570bb9e9edb8080ac9 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001322219840.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001322372918.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001322372918.png new file mode 100644 index 0000000000000000000000000000000000000000..5424367c9bc564e713220ba87f963096881833b8 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001322372918.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001322379488.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001322379488.png new file mode 100644 index 0000000000000000000000000000000000000000..8b18cdca066be43b74443498edc5500ea9e1e608 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001322379488.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001335457246.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001335457246.png new file mode 100644 index 0000000000000000000000000000000000000000..325d6a8ce097db0b92b1a883bc4b3d4ad0bc6a49 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001335457246.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001335816300.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001335816300.png new file mode 100644 index 0000000000000000000000000000000000000000..619f0c33503cd27d92f227216c722d554b9132f2 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001335816300.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001336448570.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001336448570.png new file mode 100644 index 0000000000000000000000000000000000000000..4bd494d78d83fef2e8a89c80e17c9b6db892a2e9 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001336448570.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001336729664.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001336729664.png new file mode 100644 index 0000000000000000000000000000000000000000..4d73507cceab2e0b123d6864d9f86c86eb1eee2f Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001336729664.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337000118.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337000118.png new file mode 100644 index 0000000000000000000000000000000000000000..37131647778506f24be4ff401392a9cc209a36eb Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337000118.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337039920.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337039920.png new file mode 100644 index 0000000000000000000000000000000000000000..40c07e9b6ec27cdbe47d39788736b892f1174cc8 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337039920.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337051916.jpg b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337051916.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a2083b7783041884394f796222352d8772ada6cc Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337051916.jpg differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337053248.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337053248.png new file mode 100644 index 0000000000000000000000000000000000000000..8859f37749a4f8a4394e24ddfb54fc473e8c10c2 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337053248.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337172594.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337172594.png new file mode 100644 index 0000000000000000000000000000000000000000..4e806f83c57880543a777807778f14eeb0105aba Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337172594.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337212144.jpg b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337212144.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6f0874250475f598efa7375516109b540918fb8 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337212144.jpg differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337260780.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337260780.png new file mode 100644 index 0000000000000000000000000000000000000000..09d521d933f5fa0caacc592ea92acee959786051 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337260780.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337268560.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337268560.png new file mode 100644 index 0000000000000000000000000000000000000000..663f67428487d88e23aa9c3291c31399fec2f2c3 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337268560.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337268820.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337268820.png new file mode 100644 index 0000000000000000000000000000000000000000..cd1732ee870a6dde0acc54642f34793933ce3356 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337268820.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337419960.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337419960.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b493bf1e57f130e122b59e99ff45cd44539dad Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337419960.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337420372.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337420372.png new file mode 100644 index 0000000000000000000000000000000000000000..2300bcd7426748236fd48b85688bd3d1fa3315df Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337420372.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337422904.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337422904.png new file mode 100644 index 0000000000000000000000000000000000000000..01e250c6f7cbb64abe0b136cd80fda7ae68b629d Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337422904.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337424024.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337424024.png new file mode 100644 index 0000000000000000000000000000000000000000..6532d98885f756c6704bc4bacc0f9133d78405a7 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337424024.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337424304.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337424304.png new file mode 100644 index 0000000000000000000000000000000000000000..9ecb384ed58458c24d8e3ae729c4de197b982b86 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337424304.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337427216.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337427216.png new file mode 100644 index 0000000000000000000000000000000000000000..8633dbdd658f98501dfc91a704395260f2d4df3c Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337427216.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337427392.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337427392.png new file mode 100644 index 0000000000000000000000000000000000000000..74f5cb24520c94de8628b2e64e6916c563f9f5a2 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337427392.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337533690.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337533690.png new file mode 100644 index 0000000000000000000000000000000000000000..1f02d9b155754a113347a54a7d35ba9b060175a8 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337533690.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337536842.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337536842.png new file mode 100644 index 0000000000000000000000000000000000000000..5a9ee2c989638c9a6aad3fcfb35bb9b9f2d4683c Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337536842.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337579708.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337579708.png new file mode 100644 index 0000000000000000000000000000000000000000..5cd8ed939434e6447dd55679eeaa3756d861751f Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337579708.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337580216.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337580216.png new file mode 100644 index 0000000000000000000000000000000000000000..5516b8d261b769287c74cf860a6708fcde6bbb8a Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337580216.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337584296.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337584296.png new file mode 100644 index 0000000000000000000000000000000000000000..fa76ecb59018fb154ffe1d9f6da1484d652f3ac1 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337584296.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337696078.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337696078.png new file mode 100644 index 0000000000000000000000000000000000000000..3864852e345eaf01794042feaa85b012b8af71de Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337696078.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337740252.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337740252.png new file mode 100644 index 0000000000000000000000000000000000000000..fd83fb600a54ab8bc39ee2ae54210be8b6c48973 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337740252.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337740540.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337740540.png new file mode 100644 index 0000000000000000000000000000000000000000..b8e25128a47dccaed733fc192f52f2ca7828e516 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337740540.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337747132.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337747132.png new file mode 100644 index 0000000000000000000000000000000000000000..41ea7d47f5fe5fca46816d93cb08b5da00abc0ad Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337747132.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337748300.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337748300.png new file mode 100644 index 0000000000000000000000000000000000000000..32488dc1740408834954cf8d57a2843d98f09c2e Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337748300.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337748528.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337748528.png new file mode 100644 index 0000000000000000000000000000000000000000..f2d62c85c844c2756f4d27a48711560dfb9615ea Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001337748528.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001372249333.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001372249333.png new file mode 100644 index 0000000000000000000000000000000000000000..48cd37225954e212cb3e159acc137866d8edc362 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001372249333.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001372748125.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001372748125.png new file mode 100644 index 0000000000000000000000000000000000000000..5f6326b9415cf766dd8379dbadd5aa1a0dc6861f Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001372748125.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001372821865.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001372821865.png new file mode 100644 index 0000000000000000000000000000000000000000..21e8dad1cd90755440cf858523b12c036a91e1ad Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001372821865.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001372824637.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001372824637.png new file mode 100644 index 0000000000000000000000000000000000000000..aefb5d83c079e6718ef88fd934b4b496cdc29565 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001372824637.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001373373585.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001373373585.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e5e47c9beca2c7c7630d78916f80eda652b52a Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001373373585.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001373379529.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001373379529.png new file mode 100644 index 0000000000000000000000000000000000000000..daa40b49e679668905632f25ff42bf8599ba0ead Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001373379529.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001384808269.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001384808269.png new file mode 100644 index 0000000000000000000000000000000000000000..be18ecef3a149d5742f18535552f66f26ab34832 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001384808269.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001385585749.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001385585749.png new file mode 100644 index 0000000000000000000000000000000000000000..c13604ab7095c2a7717bde1384f0aea3d53f69e3 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001385585749.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001385611905.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001385611905.png new file mode 100644 index 0000000000000000000000000000000000000000..8c233e40a21e678ddf4115c2e2e80c96e25a60ce Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001385611905.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001385905845.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001385905845.png new file mode 100644 index 0000000000000000000000000000000000000000..a6cb8bc4a188ef444919d71f7f16baa06422788b Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001385905845.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001386149037.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001386149037.png new file mode 100644 index 0000000000000000000000000000000000000000..da73fead24d8805bb43287f53c757e80ff0d597f Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001386149037.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001386699925.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001386699925.png new file mode 100644 index 0000000000000000000000000000000000000000..cf5b13b35e65ed0143a01a5bcad1e11eaddaded7 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001386699925.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387293085.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387293085.png new file mode 100644 index 0000000000000000000000000000000000000000..7f56b020949c53d018eba016952c2409f0d7dca9 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387293085.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387413509.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387413509.png new file mode 100644 index 0000000000000000000000000000000000000000..2245427058fc31f3e5d7f40062c0551936a67199 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387413509.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387413793.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387413793.png new file mode 100644 index 0000000000000000000000000000000000000000..aa649bf7215662819766d897513fb711d9d1e7f8 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387413793.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387415629.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387415629.png new file mode 100644 index 0000000000000000000000000000000000000000..01189358354090591de6580f8ef88ef78ddba3a1 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387415629.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387691985.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387691985.png new file mode 100644 index 0000000000000000000000000000000000000000..31c3096fa837c1b397ab2fe27acdd87e2cec36de Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387691985.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387692269.jpg b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387692269.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b79e3ddf78520277046b933c4662c6b72f45ab85 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387692269.jpg differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387692893.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387692893.png new file mode 100644 index 0000000000000000000000000000000000000000..49ea515d834b58d4ded14c55a6a2b07034d76137 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387692893.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387755969.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387755969.png new file mode 100644 index 0000000000000000000000000000000000000000..b2daa95d6b757e7bd443d8fd961922f248dd6853 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387755969.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387780357.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387780357.png new file mode 100644 index 0000000000000000000000000000000000000000..1aab3b8be2cd0c906253d70036a9fee3050a1055 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387780357.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387784693.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387784693.png new file mode 100644 index 0000000000000000000000000000000000000000..62a40117a892ba6c163be81bce1d198c2920f0e9 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387784693.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387787605.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387787605.png new file mode 100644 index 0000000000000000000000000000000000000000..8c1893e16fb929f77bb6b9a70cb25d3479dd684c Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387787605.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387855149.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387855149.png new file mode 100644 index 0000000000000000000000000000000000000000..731e957c367cb05e4229f53cf97dcee2cde69dff Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387855149.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387857005.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387857005.png new file mode 100644 index 0000000000000000000000000000000000000000..872f5c9eb05169831df4ba49d017629e8a943c64 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387857005.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387902849.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387902849.png new file mode 100644 index 0000000000000000000000000000000000000000..ffe2043c199308ed2033e3eb02a0662a65141ece Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387902849.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387907229.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387907229.png new file mode 100644 index 0000000000000000000000000000000000000000..084fbea1aee4d09b1e623c66b4f07641c7a0208d Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387907229.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387908045.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387908045.png new file mode 100644 index 0000000000000000000000000000000000000000..1fca645598e7a67da6e75b98c44f3c9a740be374 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387908045.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387908453.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387908453.png new file mode 100644 index 0000000000000000000000000000000000000000..b97804a0a575fd18235e7a0c7e4f2d0183e3b460 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387908453.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387961737.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387961737.png new file mode 100644 index 0000000000000000000000000000000000000000..ae4ddce8cf2629b811e9711c61186b3efa4dfe3c Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001387961737.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388020197.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388020197.png new file mode 100644 index 0000000000000000000000000000000000000000..1816e1e068ee0294677ebb357ffd158a14bb86cf Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388020197.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388024321.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388024321.png new file mode 100644 index 0000000000000000000000000000000000000000..da3ba54203ded0093b7c2b5308de0e2afd85a146 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388024321.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388024397.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388024397.png new file mode 100644 index 0000000000000000000000000000000000000000..4e4531dd19dc703399c9d4dd0e95236fa9a064c8 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388024397.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388028161.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388028161.png new file mode 100644 index 0000000000000000000000000000000000000000..b3beb92520c34ba771d096a8a146fb2c5b5edbb7 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388028161.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388028537.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388028537.png new file mode 100644 index 0000000000000000000000000000000000000000..ffb244306787c397ef4a9f4d9c3eb504172d3777 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388028537.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388184025.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388184025.png new file mode 100644 index 0000000000000000000000000000000000000000..cbce6fe1e32c547426319923c0fdb13e95554b99 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388184025.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388187249.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388187249.png new file mode 100644 index 0000000000000000000000000000000000000000..0ac83f21e269d909e550b68cb0bdc6347c05dcac Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388187249.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388187325.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388187325.png new file mode 100644 index 0000000000000000000000000000000000000000..02dbdf218da2cb1c844dfc13a463875df5124d48 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388187325.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388188365.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388188365.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe3bfb48446bab88e3e622b9f8066383f269590 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388188365.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388241577.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388241577.png new file mode 100644 index 0000000000000000000000000000000000000000..8dacb6e343ea4c750904fa090bb99213e012379d Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388241577.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388972645.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388972645.png new file mode 100644 index 0000000000000000000000000000000000000000..e32606925f4bb4380b262d9f946d4cd106202b87 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001388972645.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001389098425.png b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001389098425.png new file mode 100644 index 0000000000000000000000000000000000000000..c63903009ab9ba454f169250632dbec1b3c94467 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_image_0000001389098425.png differ diff --git a/docs/zh/server/performance/overall/system_resource/images/zh-cn_other_0000001337581224.jpeg b/docs/zh/server/performance/overall/system_resource/images/zh-cn_other_0000001337581224.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2c019b828bdf9c699f203f09ba3542968ff21262 Binary files /dev/null and b/docs/zh/server/performance/overall/system_resource/images/zh-cn_other_0000001337581224.jpeg differ diff --git a/docs/zh/server/performance/overall/system_resource/system_resources_and_performance.md b/docs/zh/server/performance/overall/system_resource/system_resources_and_performance.md new file mode 100644 index 0000000000000000000000000000000000000000..552190781cf4e732059c6965cfa2edde7a9b631d --- /dev/null +++ b/docs/zh/server/performance/overall/system_resource/system_resources_and_performance.md @@ -0,0 +1,344 @@ +# 系统资源与性能 + +- [系统资源与性能](#系统资源与性能) + - [CPU](#cpu) + - [内存](#内存) + - [I/O](#io) + +## CPU + +- [基本概念](#基本概念) +- [定界定位思路](#定界定位思路) +- [常用CPU性能分析工具](#常用cpu性能分析工具) + +### 基本概念 + +中央处理器(Central Processing Unit,简称CPU)是计算机的主要设备之一,其功能是解释计算机指令以及处理计算机软件中的数据。 + +1. 物理核:可以真实看到的CPU核,有独立的电路元件以及L1、L2缓存,可以独立地执行指令。一个CPU可以有多个物理核。 +2. 逻辑核:在同一个物理核内,逻辑层面上存在的核。一般一个物理核对应一个线程,但是如果开启了超线程,当超线程数量为n时,一个物理核可以分成n个逻辑核。 +可以通过lscpu命令查看服务器中有多少个CPU,每个CPU中有几个物理核,以及每个CPU有几个逻辑核。 + +### 定界定位思路 + +### 常用CPU性能分析工具 + +1. uptime:可用于**打印系统平均负载**,最后三个数字表示系统在过去1分钟、5分钟和15分钟内的平均负载情况,可以判断平均负载的变化趋势。 +平均负载大于CPU数量时表示CPU不足以服务线程,部分线程在等待;平均负载小于CPU数量,代表当前还有余量。 + + ![zh-cn_image_0000001384808269](./images/zh-cn_image_0000001384808269.png) + +2. vmstat:可以**动态地了解系统资源的使用情况**,以及查看系统中是哪一个环节最占用系统资源。 +通过**vmstat -h**命令可以查看命令详解参数。 + 例如: + + ```shell + #使用vmstat进行监测,每隔1秒刷新一次 + vmstat 1 + ``` + + ![](./images/zh-cn_image_0000001385585749.png) + 在命令的输出信息中,各字段所代表的含义如下: + + |字段|含义| + |--|--| + |procs|进程信息字段。| + |memory|内存信息字段。| + |swap|交换分区信息字段。| + |io|磁盘读/写信息字段。| + |system|系统信息字段。| + |cpu|CPU信息字段。-us:非内核进程消耗 CPU 运算时间的百分比。-sy:内核进程消耗 CPU 运算时间的百分比。-id:空闲。-wa:等待 I/O 所消耗的 CPU 百分比。-st:被虚拟机所盗用的 CPU 百分比。| + +3. sar:可用于**分析系统性能**,可以用来观察当前的活动以及配置,用以归档和报告历史统计信息。 + 例如: + + ```shell + # 安装sysstat + yum install -y sysstat + + # 查看系统CPU的整体负载情况,每3秒统计一次,共统计5次 + sar -u 3 5 + ``` + + 回显信息如下: + + ```shell + [root@openEuler ~]# sar -u 3 5 + Linux 5.10.0-153.12.0.92.oe2203SP4.aarch64 (openEuler) 05/20/2023 _aarch64_ (4 CPU) + + 04:38:27 PM CPU %user %nice %system %iowait %steal %idle + 04:38:30 PM all 0.00 0.00 0.00 0.00 0.00 100.00 + 04:38:33 PM all 0.00 0.00 0.33 0.00 0.00 99.67 + 04:38:36 PM all 0.00 0.00 0.00 0.00 0.00 100.00 + 04:38:39 PM all 0.08 0.00 0.00 0.00 0.00 99.92 + 04:38:42 PM all 0.00 0.00 0.08 0.00 0.00 99.92 + Average: all 0.02 0.00 0.08 0.00 0.00 99.90 + ``` + + 在命令的输出信息中,各字段所代表的含义如下: + + |字段|含义| + |--|--| + |%user|用户模式下消耗的 CPU 时间的比例。| + |%nice|通过 nice 改变了进程调度优先级的进程,在用户模式下消耗的 CPU 时间的比例。| + |%system|系统模式下消耗的 CPU 时间的比例。| + |%iowait|CPU 等待磁盘 I/O 导致空闲状态消耗的时间比例。| + |%steal|利用操作系统等虚拟化技术,等待其他虚拟CPU计算占用的时间比例。| + |%idle|CPU空闲时间比例。| + +4. ps:可用于**查看正在运行的进程**。 + + ```shell + # 查看系统中所有的进程,以及查看进程的父进程的 PID 和进程优先级 + ps -le + ``` + + ![zh-cn_image_0000001337039920](./images/zh-cn_image_0000001337039920.png) + + ```shell + # 查看当前shell产生的进程 + ps -l + ``` + + ![zh-cn_image_0000001385611905](./images/zh-cn_image_0000001385611905.png) + +5. top:可以**动态地持续监听进程的运行状态,显示最消耗CPU的进程**。 + + ```shell + top + ``` + + ![zh-cn_image_0000001335457246](./images/zh-cn_image_0000001335457246.png) + +## 内存 + +- [基本概念](#基本概念) +- [定位定界思路](#定位定界思路) +- [常用内存分析工具/方式](#常用内存分析工具方式) + +### 基本概念 + +**内存**是计算机的重要组成部件,用于暂时存放CPU中的运算数据,以及与硬件等外部存储器交换的数据。特别地,**非统一内存访问架构**(non-uniform memory access,简称NUMA)是一种为多处理器的电脑设计的内存架构,**内存访问时间取决于内存相对于处理器的位置**。在NUMA下,处理器访问本地内存的速度比非本地内存速度(内存位于另一个处理器,或者是处理器之间共享的内存)快。 + +### 定位定界思路 + +### 常用内存分析工具/方式 + +1. free:可用于**显示系统内存状态**。 + + 例如: + + ```shell + # 显示系统内存状态,以MB单位显示 + free -m + ``` + + ![zh-cn_image_0000001386699925](./images/zh-cn_image_0000001386699925.png) + + 在命令的输出信息中,各字段所代表的含义如下: + + |标识|含义| + |--|--| + |total|总内存数。| + |used|已经使用的内存数。| + |free|空闲的内存数。| + |shared|多个进程共享的内存总数。| + |buff/cache|缓冲和缓存内存总数。| + |available|估计有多少内存可用于启动新应用程序,而不交换。| + +2. vmstat:可以**动态地监控系统内存**,查看系统内存的使用情况。 + + 例如: + + ```shell + # 监测系统内存,显示活跃和非活跃内存 + vmstat -a + ``` + + ![zh-cn_image_0000001388972645](./images/zh-cn_image_0000001388972645.png) + + 在命令的输出信息中,与内存相关的memory字段所代表的含义如下: + + |字段|含义| + |--|--| + |memory|内存信息字段。-swpd:虚拟内存的使用情况,单位为 KB。-free:空闲的内存容量,单位为 KB。-inact:非活跃的内存容量,单位为 KB。-active:活跃的内存容量,单位为 KB。| + +3. sar:可用于**监控系统的内存使用情况**。 + + 例如: + + ```shell + # 系统内存在采样时间内的使用情况,每2秒统计一次,统计 3 次 + sar -r 2 3 + ``` + + 回显信息如下: + + ```shell + [root@openEuler ~]# sar -r 2 3 + Linux 5.10.0-153.12.0.92.oe2203SP4.aarch64 (openEuler) 05/20/2023 _aarch64_ (4 CPU) + + 04:56:08 PM kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commint kbactive kbinact kbdirty + 04:56:10 PM 324264 2250588 188320 6.98 143160 1772412 787944 11.52 474668 1588704 0 + 04:56:12 PM 324264 2250588 188320 6.98 143160 1772412 787944 11.52 474668 1588704 0 + 04:56:14 PM 324296 2250620 188388 6.98 143160 1772412 787944 11.52 474668 1588772 0 + Average: 324275 2250599 188309 6.98 143160 1772412 787944 11.52 474668 1588727 0 + + 在命令的输出信息中,各字段所代表的含义如下: + + |字段|含义| + |--|--| + |kbmemfree|内存的未使用空间。| + |kbmemused|内存的已使用空间。| + |%memused|已使用空间的百分比。| + |kbbuffers|缓冲区的数据存取量。| + |kbcached|系统全域的数据存取量。| + +4. numactl:可用于**查看NUMA节点配置和状态**。 + + 例如: + + ```shell + # 查看当前的NUMA配置 + numactl -H + ``` + + ![zh-cn_image_0000001337000118](./images/zh-cn_image_0000001337000118.png) + + 服务器共划分为1个NUMA节点。每个节点包含4个CPU core,每个节点的内存大小约为6GB。 + 同时,该命令还给出了不同节点间的距离,距离越远,跨NUMA内存访问的延时越大。应用程序运行时应减少跨NUMA访问内存。 + + numastat:可用于**观察各个NUMA节点的状态** + + ```shell + # 观察NUMA节点的状态 + numastat + ``` + + ![zh-cn_image_0000001337172594](./images/zh-cn_image_0000001337172594.png) + + numastat命令输出字段及其含义如下: + + |标识|含义| + |--|--| + |numa_hit|节点内CPU核访问本地内存的次数。| + |numa_miss|节点内核访问其他节点内存的次数。| + |numa_foreign|初始分配在本地,最后分配在其他节点的页数量。每个numa_foreign对应numa_miss事件。| + |interleave_hit|interleave策略页成功分配到这个节点。| + |local_node|该节点的进程成功在这个节点上分配内存访问的大小。| + |other_node|该节点的进程在其他节点上分配的内存访问大小。| + +## I/O + +- [基本概念](#基本概念) +- [定位定界思路](#定位定界思路) +- [常用I/O性能分析工具](#常用io性能分析工具) + +### 基本概念 + +**I/O**表示输入(Input)/输出(Output),输入指系统接收信号或数据的操作,输出指从系统发出信号或数据的操作。对于CPU 和主存储器的组合,**任何信息传入或传出 CPU/内存组合,就会被认为是 I/O**。 + +### 定位定界思路 + +### 常用I/O性能分析工具 + +1. iostat:可以**汇报所有在线磁盘的统计信息**。 + +例如: + +```shell +# 详细显示磁盘信息,以KB为单位显示,以100秒为周期统计(命令本身不会主动停止,需要执行Ctrl+C手动停止) +iostat -d -k -x 100 + +# 详细显示磁盘信息,以KB为单位显示,以1秒为周期统计,总共统计100s +iostat -d -k -x 1 100 +``` + +回显信息如下: + +```shell +[root@openEuler ~]# iostat -d -k -x 1 100 +Linux 5.10.0-153.12.0.92.oe2203SP4.aarch64 (openEuler) 05/20/2023 _aarch64_ (4 CPU) + +Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wKB/s wrqm/s %wrqm w_await wareq-sz d/s dKB/s drqm/s %drqm d_await dareq-sz f/s f_await aqu-sz %util +dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + +在命令的输出信息中,各字段所代表的含义如下: + +|字段|含义| +|--|--| +|Device|监测设备名称。| +|r/s|设备每秒完成的读取请求数(合并后)。| +|rKB/s|每秒从磁盘读取KB数。| +|rrqm/s|每秒合并放入请求队列的读操作数。| +|%rrqm|读取请求在发送到设备之前合并在一起的百分比。| +|r_await|每个读请求耗费的平均时间。| +|rareq-sz|向设备发出的读取请求的平均大小(以KB为单位)。| +|w/s|设备每秒完成的写入请求数(合并后)。| +|wKB/s|每秒写入磁盘KB数。| +|wrqm/s|每秒合并放入请求队列的写操作数。| +|%wrqm|写入请求在发送到设备之前合并在一起的百分比。| +|w_await|每个写请求耗费的平均时间。| +|wareq-sz|向设备发出的写入请求的平均大小(以KB为单位)。| +|d/s|设备每秒完成的丢弃请求数。| +|dKB/s|每秒为设备丢弃的扇区(KB)数。| +|drqm/s|每秒合并到设备排队的丢弃请求数。| +|%drqm|丢弃请求在发送到设备之前合并在一起的百分比。| +|d_await|向要服务的设备发出丢弃请求的平均时间。| +|dareq-sz|向设备发出的丢弃请求的平均大小(以KB为单位)。| +|f/s|设备每秒完成的刷新请求数(合并后)。| +|f_await|向要服务的设备发出的刷新请求的平均时间。| +|aqu-sz|向设备发出的请求的平均队列长度。| +|%util|用于I/O操作时间的百分比,即使用率。| + +2. sar:可用于**查看系统磁盘的读写性能**。 + +例如: + +```shell +# 显示系统所有硬盘设备在采样时间内的使用状态,每3秒统计一次,统计5次 +sar -d 3 5 +``` + +回显信息如下: + +```shell +[root@openEuler ~]# sar -d 3 5 +Linux 5.10.0-153.12.0.92.oe2203SP4.aarch64 (openEuler) 05/20/2023 _aarch64_ (4 CPU) + +04:38:27 PM DVE tps rkB/s wkB/s dkB/s areq-sz aqu-sz await %util +04:38:30 PM vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +04:38:33 PM dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +04:38:36 PM dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + +在命令的输出信息中,各字段所代表的含义如下: + +|标识|含义| +|--|--| +|tps|表示每秒完成的磁盘事务数量,其中事务可以是读取或写入操作。| +|rKB/s|每秒从设备读取的KB数。| +|wKB/s|每秒写入设备的KB数。| +|dKB/s|设备每秒丢弃的KB数。| +|areq-sz|向设备发出的I/O请求的平均大小(KB)。| +|aqu-sz|向设备发出的请求的平均队列长度。| +|await|向要服务的设备发出的I/O请求的平均时间。| +|%util|向设备发出I/O请求的已用时间百分比(设备的带宽利用率)。| + +3. vmstat + +```shell +# 使用vmstat进行监测,报告磁盘相关统计信息 +vmstat -d +``` + +![zh-cn_image_0000001389098425](./images/zh-cn_image_0000001389098425.png) + +在命令的输出信息中,各字段所代表的含义如下: + +|字段|含义| +|--|--| +|reads|-total:已成功完成的读取总数。-merged:分组读取(导致一次I/O)。-sectors:扇区读取成功。-ms:读取花费的毫秒数。| +|writes|-total:已成功完成的写入总数。-merged:分组写入(导致一次I/O)。-sectors:写入成功的扇区。-ms:写入所花费的毫秒数。| +|IO|-cur:正在进行的 I/O 数。-sec:I/O 所花费的秒数。| diff --git a/docs/zh/server/performance/system_optimization/atune/_toc.yaml b/docs/zh/server/performance/system_optimization/atune/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..10648873f40e2b7350de1ac077bda592fbfea14a --- /dev/null +++ b/docs/zh/server/performance/system_optimization/atune/_toc.yaml @@ -0,0 +1,11 @@ +isManual: true +label: '' +sections: + - label: 附录 + href: ./appendix.md + - label: 认识A-Tune + href: ./getting_to_know_a_tune.md + - label: 安装与部署 + href: ./installation_and_deloyment.md + - label: 使用方法 + href: ./usage_instructions.md diff --git a/docs/zh/server/performance/system_optimization/atune/appendix.md b/docs/zh/server/performance/system_optimization/atune/appendix.md new file mode 100644 index 0000000000000000000000000000000000000000..e2823caa826e4ca030bcf93ba656b6fe97ff9842 --- /dev/null +++ b/docs/zh/server/performance/system_optimization/atune/appendix.md @@ -0,0 +1,27 @@ +# 附录 + + +- [附录](#附录) + - [术语和缩略语](#术语和缩略语) + + + +## 术语和缩略语 + +**表 1** 术语表 + + + + + + + + + + + +

术语

+

含义

+

profile

+

优化项集合,最佳的参数配置

+
diff --git a/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0213178479.png b/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0213178479.png new file mode 100644 index 0000000000000000000000000000000000000000..d245d48dc07e2b01734e21ec1952e89fa9269bdb Binary files /dev/null and b/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0213178479.png differ diff --git a/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0213178480.png b/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0213178480.png new file mode 100644 index 0000000000000000000000000000000000000000..a32856aa08e459ed0f51f8fcf4c2f51511c12095 Binary files /dev/null and b/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0213178480.png differ diff --git a/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0214540398.png b/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0214540398.png new file mode 100644 index 0000000000000000000000000000000000000000..cea2292307b57854aa629ec102a5bc1b16d244a0 Binary files /dev/null and b/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0214540398.png differ diff --git a/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0227497000.png b/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0227497000.png new file mode 100644 index 0000000000000000000000000000000000000000..db9b5ce8b6d211d54ea36930504cca415ddfb8ca Binary files /dev/null and b/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0227497000.png differ diff --git a/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0227497343.png b/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0227497343.png new file mode 100644 index 0000000000000000000000000000000000000000..aecf293846ebd12f15b9a3fb5fdc2618d9d527dc Binary files /dev/null and b/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0227497343.png differ diff --git a/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0231122163.png b/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0231122163.png new file mode 100644 index 0000000000000000000000000000000000000000..0a19e61233edce44c9ccfa4d8bb806238babb187 Binary files /dev/null and b/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0231122163.png differ diff --git a/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0245342444.png b/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0245342444.png new file mode 100644 index 0000000000000000000000000000000000000000..10f0fceb42c00c80ef49decdc0c480eb04c2ca6d Binary files /dev/null and b/docs/zh/server/performance/system_optimization/atune/figures/zh-cn_image_0245342444.png differ diff --git a/docs/zh/server/performance/system_optimization/atune/getting_to_know_a_tune.md b/docs/zh/server/performance/system_optimization/atune/getting_to_know_a_tune.md new file mode 100644 index 0000000000000000000000000000000000000000..66aad780f633ce1f160ec252c16d14d7a4f2f3d7 --- /dev/null +++ b/docs/zh/server/performance/system_optimization/atune/getting_to_know_a_tune.md @@ -0,0 +1,520 @@ +# 认识A-Tune + + + +- [认识A-Tune](#认识A-Tune) + - [简介](#简介) + - [架构](#架构) + - [支持特性与业务模型](#支持特性与业务模型) + + + +## 简介 + +操作系统作为衔接应用和硬件的基础软件,如何调整系统和应用配置,充分发挥软硬件能力,从而使业务性能达到最优,对用户至关重要。然而,运行在操作系统上的业务类型成百上千,应用形态千差万别,对资源的要求各不相同。当前硬件和基础软件组成的应用环境涉及高达7000多个配置对象,随着业务复杂度和调优对象的增加,调优所需的时间成本呈指数级增长,导致调优效率急剧下降,调优成为了一项极其复杂的工程,给用户带来巨大挑战。 + +其次,操作系统作为基础设施软件,提供了大量的软硬件管理能力,每种能力适用场景不尽相同,并非对所有的应用场景都通用有益,因此,不同的场景需要开启或关闭不同的能力,组合使用系统提供的各种能力,才能发挥应用程序的最佳性能。 + +另外,实际业务场景成千上万,计算、网络、存储等硬件配置也层出不穷,实验室无法遍历穷举所有的应用和业务场景,以及不同的硬件组合。 + +为了应对上述挑战,openEuler推出了A-Tune。 + +A-Tune是一款基于AI开发的系统性能优化引擎,它利用人工智能技术,对业务场景建立精准的系统画像,感知并推理出业务特征,进而做出智能决策,匹配并推荐最佳的系统参数配置组合,使业务处于最佳运行状态。 + +![](./figures/zh-cn_image_0227497000.png) + +## 架构 + +A-Tune核心技术架构如下图,主要包括智能决策、系统画像和交互系统三层。 + +- 智能决策层:包含感知和决策两个子系统,分别完成对应用的智能感知和对系统的调优决策。 +- 系统画像层:主要包括自动特征工程和两层分类模型,自动特征工程用于业务特征的自动选择,两层分类模型用于业务模型的学习和分类。 +- 交互系统层:用于各类系统资源的监控和配置,调优策略执行在本层进行。 + +![](./figures/zh-cn_image_0227497343.png) + +## 支持特性与业务模型 + +### 支持特性 + +A-Tune支持的主要特性、特性成熟度以及使用建议请参见[表1](#table1919220557576)。 + +**表 1** 特性成熟度 + + + + + + + + + + + + + + + + + + + + +

特性

+

成熟度

+

使用建议

+

11大类15款应用负载类型自动优化

+

已测试

+

试用

+

自定义profile和业务模型

+

已测试

+

试用

+

参数自调优

+

已测试

+

试用

+
+ +### 支持业务模型 + +根据应用的负载特征,A-Tune将业务分为11大类,各类型的负载特征和A-Tune支持的应用请参见[表2](#table2819164611311)。 + +**表 2** 支持的业务类型和应用 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

业务大类

+
+

业务类型

+
+

瓶颈点

+
+

支持的应用

+
+

待规划的应用

+
+

default

+
+

默认类型

+
+

算力、内存、网络、IO各维度资源使用率都不高

+
+

N/A

+
+

 N/A

+
+

webserver

+
+

web应用

+
+

算力瓶颈、网络瓶颈

+
+

NginxApache Traffic Server

+
+

 N/A

+
+

database

+
+

数据库

+
+

算力瓶颈、内存瓶颈、IO瓶颈

+
+

MongodbMysqlPostgresqlMariadb

+
+

 N/A

+
+

big-data

+
+

大数据

+
+

算力瓶颈、内存瓶颈

+
+

N/A

+
+

Hadoop-hdfsHadoop-spark

+
+

middleware

+
+

中间件框架

+
+

算力瓶颈、网络瓶颈

+
+

Dubbo

+
+

 N/A

+
+

in-memory-database

+
+

内存数据库

+
+

内存瓶颈、IO瓶颈

+
+

Redis

+
+

 N/A

+
+

basic-test-suite

+
+

基础测试套

+
+

算力瓶颈、内存瓶颈

+
+

SPECCPU2006SPECjbb2015

+
+

 N/A

+
+

hpc

+
+

人类基因组

+
+

算力瓶颈、内存瓶颈、IO瓶颈

+
+

Gatk4

+
+

 N/A

+
+

storage

+
+

存储

+
+

网络瓶颈、IO瓶颈

+
+

N/A

+
+

Ceph

+
+

virtualization

+
+

虚拟化

+
+

算力瓶颈、内存瓶颈、IO瓶颈

+
+

Consumer-cloudMariadb

+
+

 N/A

+
+

docker

+
+

容器

+
+

算力瓶颈、内存瓶颈、IO瓶颈

+
+

Mariadb

+
+

 N/A

+
diff --git a/docs/zh/server/performance/system_optimization/atune/installation_and_deloyment.md b/docs/zh/server/performance/system_optimization/atune/installation_and_deloyment.md new file mode 100644 index 0000000000000000000000000000000000000000..86ef6623e15b3ece51a5419bda680d151f41f450 --- /dev/null +++ b/docs/zh/server/performance/system_optimization/atune/installation_and_deloyment.md @@ -0,0 +1,350 @@ +# 安装与部署 + +本章介绍如何安装和部署A-Tune。 + + + +- [安装与部署](#安装与部署) + - [软硬件要求](#软硬件要求) + - [环境准备](#环境准备) + - [安装A-Tune](#安装a-tune) + - [安装模式介绍](#安装模式介绍) + - [安装操作](#安装操作) + - [部署A-Tune](#部署a-tune) + - [配置介绍](#配置介绍) + - [启动A-Tune](#启动a-tune) + - [启动A-Tune engine](#启动a-tune-engine) + + + +## 软硬件要求 + +### 硬件要求 + +- 鲲鹏920处理器 + +### 软件要求 + +- 操作系统:openEuler 22.03 LTS SP4 + +## 环境准备 + +- 安装openEuler系统,安装方法参考 《[openEuler 22.03 LTS SP4安装指南](./../../../installation_upgrade/installation/installation_guide.md)》。 + +- 安装A-Tune需要使用root权限。 + +## 安装A-Tune + +本节介绍A-Tune的安装模式和安装方法。 + +### 安装模式介绍 + +A-Tune支持单机模式和分布式模式安装: + +- 单机模式 + + client和server安装到同一台机器上。 + +- 分布式模式 + + client和server分别安装在不同的机器上。 + +两种安装模式的简单图示如下: + +![](./figures/zh-cn_image_0231122163.png) + +### 安装操作 + +安装A-Tune的操作步骤如下: + +1. 挂载openEuler的iso文件。 + + ```shell + # mount openEuler-22.03-LTS-SP4-aarch64-dvd.iso /mnt + ``` + +2. 配置本地yum源。 + + ```shell + # vim /etc/yum.repos.d/local.repo + ``` + + 配置内容如下所示: + + ```shell + [local] + name=local + baseurl=file:///mnt + gpgcheck=1 + enabled=1 + ``` + +3. 将RPM数字签名的GPG公钥导入系统。 + + ```shell + # rpm --import /mnt/RPM-GPG-KEY-openEuler + ``` + +4. 安装A-Tune服务端。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + >本步骤会同时安装服务端和客户端软件包,对于单机部署模式,请跳过**步骤5**。 + + ```shell + # yum install atune -y + # yum install atune-engine -y + ``` + +5. 若为分布式部署,请安装A-Tune客户端。 + + ```shell + # yum install atune-client -y + ``` + +6. 验证是否安装成功。命令和回显如下表示安装成功。 + + ```shell + # rpm -qa | grep atune + atune-client-xxx + atune-db-xxx + atune-xxx + atune-engine-xxx + ``` + +## 部署A-Tune + +本节介绍A-Tune的配置部署。 + +### 配置介绍 + +A-Tune配置文件/etc/atuned/atuned.cnf的配置项说明如下: + +- A-Tune服务启动配置 + + 可根据需要进行修改。 + + - protocol:系统gRPC服务使用的协议,unix或tcp,unix为本地socket通信方式,tcp为socket监听端口方式。默认为unix。 + - address:系统gRPC服务的侦听地址,默认为unix socket,若为分布式部署,需修改为侦听的ip地址。 + - port:系统gRPC服务的侦听端口,范围为0\~65535未使用的端口。如果protocol配置是unix,则不需要配置。 + - connect:若为集群部署时,A-Tune所在节点的ip列表,ip地址以逗号分隔。 + - rest_host:系统rest service的侦听地址,默认为localhost。 + - rest_port:系统rest service的侦听端口,范围为0~65535未使用的端口,默认为8383。 + - engine_host:与系统atune engine service链接的地址。 + - engine_port:与系统atune engine service链接的端口。 + - sample_num:系统执行analysis流程时采集样本的数量,默认为20。 + - interval:系统执行analysis流程时采集样本的间隔时间,默认为5s。 + - grpc_tls:系统gRPC的SSL/TLS证书校验开关,默认不开启。开启grpc_tls后,atune-adm命令在使用前需要设置以下环境变量方可与服务端进行通讯: + - export ATUNE_TLS=yes + - export ATUNED_CACERT=<客户端CA证书路径> + - export ATUNED_CLIENTCERT=<客户端证书路径> + - export ATUNED_CLIENTKEY=<客户端密钥路径> + - export ATUNED_SERVERCN=server + - tlsservercafile:gRPC服务端CA证书路径。 + - tlsservercertfile:gRPC服务端证书路径。 + - tlsserverkeyfile:gRPC服务端密钥路径。 + - rest_tls:系统rest service的SSL/TLS证书校验开关,默认开启。 + - tlsrestcacertfile:系统rest service的服务端CA证书路径。 + - tlsrestservercertfile:系统rest service的服务端证书路径 + - tlsrestserverkeyfile:系统rest service的服务端密钥路径。 + - engine_tls:系统atune engine service的SSL/TLS证书校验开关,默认开启。 + - tlsenginecacertfile:系统atune engine service的客户端CA证书路径。 + - tlsengineclientcertfile:系统atune engine service的客户端证书路径 + - tlsengineclientkeyfile:系统atune engine service的客户端密钥路径。 + +- system信息 + + system为系统执行相关的优化需要用到的参数信息,必须根据系统实际情况进行修改。 + + - disk:执行analysis流程时需要采集的对应磁盘的信息或执行磁盘相关优化时需要指定的磁盘。 + - network:执行analysis时需要采集的对应的网卡的信息或执行网卡相关优化时需要指定的网卡。 + - user:执行ulimit相关优化时用到的用户名。目前只支持root用户。 + +- 日志信息 + + 根据情况修改日志的级别,默认为info级别,日志信息打印在/var/log/messages中。 + +- monitor信息 + + 为系统启动时默认采集的系统硬件信息。 + +- tuning信息 + + tuning为系统进行离线调优时需要用到的参数信息。 + + - noise:高斯噪声的评估值。 + - sel_feature:控制离线调优参数重要性排名输出的开关,默认关闭。 + +### 配置示例 + +```shell +#################################### server ############################### + # atuned config + [server] + # the protocol grpc server running on + # ranges: unix or tcp + protocol = unix + + # the address that the grpc server to bind to + # default is unix socket /var/run/atuned/atuned.sock + # ranges: /var/run/atuned/atuned.sock or ip address + address = /var/run/atuned/atuned.sock + + # the atune nodes in cluster mode, separated by commas + # it is valid when protocol is tcp + # connect = ip01,ip02,ip03 + + # the atuned grpc listening port + # the port can be set between 0 to 65535 which not be used + # port = 60001 + + # the rest service listening port, default is 8383 + # the port can be set between 0 to 65535 which not be used + rest_host = localhost + rest_port = 8383 + + # the tuning optimizer host and port, start by engine.service + # if engine_host is same as rest_host, two ports cannot be same + # the port can be set between 0 to 65535 which not be used + engine_host = localhost + engine_port = 3838 + + # when run analysis command, the numbers of collected data. + # default is 20 + sample_num = 20 + + # interval for collecting data, default is 5s + interval = 5 + + # enable gRPC authentication SSL/TLS + # default is false + # grpc_tls = false + # tlsservercafile = /etc/atuned/grpc_certs/ca.crt + # tlsservercertfile = /etc/atuned/grpc_certs/server.crt + # tlsserverkeyfile = /etc/atuned/grpc_certs/server.key + + # enable rest server authentication SSL/TLS + # default is true + rest_tls = true + tlsrestcacertfile = /etc/atuned/rest_certs/ca.crt + tlsrestservercertfile = /etc/atuned/rest_certs/server.crt + tlsrestserverkeyfile = /etc/atuned/rest_certs/server.key + + # enable engine server authentication SSL/TLS + # default is true + engine_tls = true + tlsenginecacertfile = /etc/atuned/engine_certs/ca.crt + tlsengineclientcertfile = /etc/atuned/engine_certs/client.crt + tlsengineclientkeyfile = /etc/atuned/engine_certs/client.key + + + #################################### log ############################### + [log] + # either "debug", "info", "warn", "error", "critical", default is "info" + level = info + + #################################### monitor ############################### + [monitor] + # with the module and format of the MPI, the format is {module}_{purpose} + # the module is Either "mem", "net", "cpu", "storage" + # the purpose is "topo" + module = mem_topo, cpu_topo + + #################################### system ############################### + # you can add arbitrary key-value here, just like key = value + # you can use the key in the profile + [system] + # the disk to be analysis + disk = sda + + # the network to be analysis + network = enp189s0f0 + + user = root + + #################################### tuning ############################### + # tuning configs + [tuning] + noise = 0.000000001 + sel_feature = false +``` + +A-Tune engine配置文件/etc/atuned/engine.cnf的配置项说明如下: + +- A-Tune engine服务启动配置 + + 可根据需要进行修改。 + + - engine_host:系统atune engine service的监听地址,默认为localhost。 + - engine_port:系统atune engine service的监听端口,范围为0~65535未使用的端口,默认为3838。 + - engine_tls:系统atune engine service的SSL/TLS证书校验开关,默认开启。 + - tlsenginecacertfile:系统atune engine service的服务端CA证书路径。 + - tlsengineservercertfile:系统atune engine service的服务端证书路径 + - tlsengineserverkeyfile:系统atune engine service的服务端密钥路径。 + +- 日志信息 + + 根据情况修改日志的级别,默认为info级别,日志信息打印在/var/log/messages中。 + +### 配置示例 + +```shell + #################################### engine ############################### + [server] + # the tuning optimizer host and port, start by engine.service + # if engine_host is same as rest_host, two ports cannot be same + # the port can be set between 0 to 65535 which not be used + engine_host = localhost + engine_port = 3838 + + # enable engine server authentication SSL/TLS + # default is true + engine_tls = true + tlsenginecacertfile = /etc/atuned/engine_certs/ca.crt + tlsengineservercertfile = /etc/atuned/engine_certs/server.crt + tlsengineserverkeyfile = /etc/atuned/engine_certs/server.key + + #################################### log ############################### + [log] + # either "debug", "info", "warn", "error", "critical", default is "info" + level = info +``` + +## 启动A-Tune + +A-Tune安装完成后,需要启动A-Tune服务才能使用。 + +- 启动atuned服务: + + ```shell + # systemctl start atuned + ``` + +- 查询atuned服务状态: + + ```shell + # systemctl status atuned + ``` + + 若回显为如下,则服务启动成功。 + + ![](./figures/zh-cn_image_0214540398.png) + +## 启动A-Tune engine + +若需要使用AI相关的功能,需要启动A-Tune engine服务才能使用。 + +- 启动atune-engine服务: + + ```shell + # systemctl start atune-engine + ``` + +- 查询atune-engine服务状态: + + ```shell + # systemctl status atune-engine + ``` + + 若回显为如下,则服务启动成功。 + + ![](./figures/zh-cn_image_0245342444.png) diff --git a/docs/zh/server/performance/system_optimization/atune/public_sys-resources/icon-caution.gif b/docs/zh/server/performance/system_optimization/atune/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/performance/system_optimization/atune/public_sys-resources/icon-caution.gif differ diff --git a/docs/zh/server/performance/system_optimization/atune/public_sys-resources/icon-danger.gif b/docs/zh/server/performance/system_optimization/atune/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/performance/system_optimization/atune/public_sys-resources/icon-danger.gif differ diff --git a/docs/zh/server/performance/system_optimization/atune/public_sys-resources/icon-note.gif b/docs/zh/server/performance/system_optimization/atune/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/server/performance/system_optimization/atune/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/server/performance/system_optimization/atune/public_sys-resources/icon-notice.gif b/docs/zh/server/performance/system_optimization/atune/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/server/performance/system_optimization/atune/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/server/performance/system_optimization/atune/public_sys-resources/icon-tip.gif b/docs/zh/server/performance/system_optimization/atune/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/zh/server/performance/system_optimization/atune/public_sys-resources/icon-tip.gif differ diff --git a/docs/zh/server/performance/system_optimization/atune/public_sys-resources/icon-warning.gif b/docs/zh/server/performance/system_optimization/atune/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/performance/system_optimization/atune/public_sys-resources/icon-warning.gif differ diff --git a/docs/zh/server/performance/system_optimization/atune/usage_instructions.md b/docs/zh/server/performance/system_optimization/atune/usage_instructions.md new file mode 100644 index 0000000000000000000000000000000000000000..d51d61c2fa3816e8d97986c4a0a34535630ba4f1 --- /dev/null +++ b/docs/zh/server/performance/system_optimization/atune/usage_instructions.md @@ -0,0 +1,1107 @@ +# 使用方法 + +用户可以通过命令行客户端atune-adm使用A-Tune提供的功能。本章介绍A-Tune客户端包含的功能和使用方法。 + + + +- [使用方法](#使用方法) + - [总体说明](#总体说明) + - [查询负载类型](#查询负载类型) + - [list](#list) + - [分析负载类型并自优化](#分析负载类型并自优化) + - [analysis](#analysis) + - [自定义模型](#自定义模型) + - [define](#define) + - [collection](#collection) + - [train](#train) + - [undefine](#undefine) + - [查询profile](#查询profile) + - [info](#info) + - [更新profile](#更新profile) + - [update](#update) + - [激活profile](#激活profile) + - [profile](#profile) + - [回滚profile](#回滚profile) + - [rollback](#rollback) + - [更新数据库](#更新数据库) + - [upgrade](#upgrade) + - [系统信息查询](#系统信息查询) + - [check](#check) + - [参数自调优](#参数自调优) + - [tuning](#tuning) + + + +## 总体说明 + +- 使用A-Tune需要使用root权限。 +- atune-adm支持的命令可以通过 **atune-adm help/--help/-h** 查询。 +- 使用方法中所有命令的使用举例都是在单机部署模式下,如果是在分布式部署模式下,需要指定服务器IP和端口号,例如: + + ```sh + # atune-adm -a 192.168.3.196 -p 60001 list + ``` + +- define、update、undefine、collection、train、upgrade不支持远程执行。 +- 命令格式中,\[ \] 表示参数可选,<\> 表示参数必选,具体参数由实际情况确定。 + +## 查询负载类型 + +### list + +### 功能描述 + +查询系统当前支持的profile,以及当前处于active状态的profile。 + +### 命令格式 + +**atune-adm list** + +### 使用示例 + +```sh +# atune-adm list + +Support profiles: ++------------------------------------------------+-----------+ +| ProfileName | Active | ++================================================+===========+ +| arm-native-android-container-robox | false | ++------------------------------------------------+-----------+ +| basic-test-suite-euleros-baseline-fio | false | ++------------------------------------------------+-----------+ +| basic-test-suite-euleros-baseline-lmbench | false | ++------------------------------------------------+-----------+ +| basic-test-suite-euleros-baseline-netperf | false | ++------------------------------------------------+-----------+ +| basic-test-suite-euleros-baseline-stream | false | ++------------------------------------------------+-----------+ +| basic-test-suite-euleros-baseline-unixbench | false | ++------------------------------------------------+-----------+ +| basic-test-suite-speccpu-speccpu2006 | false | ++------------------------------------------------+-----------+ +| basic-test-suite-specjbb-specjbb2015 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-hdfs-dfsio-hdd | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-hdfs-dfsio-ssd | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-bayesian | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-kmeans | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql1 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql10 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql2 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql3 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql4 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql5 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql6 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql7 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql8 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql9 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-tersort | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-wordcount | false | ++------------------------------------------------+-----------+ +| cloud-compute-kvm-host | false | ++------------------------------------------------+-----------+ +| database-mariadb-2p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| database-mariadb-4p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| database-mongodb-2p-sysbench | false | ++------------------------------------------------+-----------+ +| database-mysql-2p-sysbench-hdd | false | ++------------------------------------------------+-----------+ +| database-mysql-2p-sysbench-ssd | false | ++------------------------------------------------+-----------+ +| database-postgresql-2p-sysbench-hdd | false | ++------------------------------------------------+-----------+ +| database-postgresql-2p-sysbench-ssd | false | ++------------------------------------------------+-----------+ +| default-default | false | ++------------------------------------------------+-----------+ +| docker-mariadb-2p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| docker-mariadb-4p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| hpc-gatk4-human-genome | false | ++------------------------------------------------+-----------+ +| in-memory-database-redis-redis-benchmark | false | ++------------------------------------------------+-----------+ +| middleware-dubbo-dubbo-benchmark | false | ++------------------------------------------------+-----------+ +| storage-ceph-vdbench-hdd | false | ++------------------------------------------------+-----------+ +| storage-ceph-vdbench-ssd | false | ++------------------------------------------------+-----------+ +| virtualization-consumer-cloud-olc | false | ++------------------------------------------------+-----------+ +| virtualization-mariadb-2p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| virtualization-mariadb-4p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| web-apache-traffic-server-spirent-pingpo | false | ++------------------------------------------------+-----------+ +| web-nginx-http-long-connection | true | ++------------------------------------------------+-----------+ +| web-nginx-https-short-connection | false | ++------------------------------------------------+-----------+ + +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>Active为true表示当前激活的profile,示例表示当前激活的profile是web-nginx-http-long-connection。 + +## 分析负载类型并自优化 + +### analysis + +### 功能描述 + +采集系统的实时统计数据进行负载类型识别,并进行自动优化。 + +### 命令格式 + +**atune-adm analysis** \[command options\] \[APP_NAME\] + +### 参数说明 + +- OPTIONS + + + + + + + + + + + + + + +

参数

+

描述

+

--model, -m

+

用户自训练产生的新模型

+

--characterization, -c

+

使用默认的模型进行应用识别,不进行自动优化

+
+ +### 使用示例 + +- 使用默认的模型进行应用识别 + + ```sh + # atune-adm analysis --characterization + ``` + +- 使用默认的模型进行应用识别,并进行自动优化 + + ```sh + # atune-adm analysis + ``` + +- 使用自训练的模型进行应用识别 + + ```sh + # atune-adm analysis --model /usr/libexec/atuned/analysis/models/new-model.m + ``` + +## 自定义模型 + +A-Tune支持用户定义并学习新模型。定义新模型的操作流程如下: + +1. 用define命令定义一个新应用的profile +2. 用collection命令收集应用对应的系统数据 +3. 用train命令训练得到模型 + +### define + +### 功能描述 + +添加用户自定义的应用场景,及对应的profile优化项。 + +### 命令格式 + +**atune-adm define** \ \ \ \ + +### 使用示例 + +新增一个profile,service_type的名称为test_service,application_name的名称为test_app,scenario_name的名称为test_scenario,优化项的配置文件为example.conf。 + +```sh +# atune-adm define test_service test_app test_scenario ./example.conf +``` + +example.conf 可以参考如下方式书写(以下各优化项非必填,仅供参考),也可通过**atune-adm info**查看已有的profile是如何书写的。 + +```sh + [main] + # list its parent profile + [kernel_config] + # to change the kernel config + [bios] + # to change the bios config + [bootloader.grub2] + # to change the grub2 config + [sysfs] + # to change the /sys/* config + [systemctl] + # to change the system service status + [sysctl] + # to change the /proc/sys/* config + [script] + # the script extension of cpi + [ulimit] + # to change the resources limit of user + [schedule_policy] + # to change the schedule policy + [check] + # check the environment + [tip] + # the recommended optimization, which should be performed manunaly +``` + +### collection + +### 功能描述 + +采集业务运行时系统的全局资源使用情况以及OS的各项状态信息,并将收集的结果保存到csv格式的输出文件中,作为模型训练的输入数据集。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- 本命令依赖采样工具perf,mpstat,vmstat,iostat,sar。 +>- CPU型号目前仅支持鲲鹏920,可通过dmidecode -t processor检查CPU型号。 + +### 命令格式 + +**atune-adm collection** + +### 参数说明 + +- OPTIONS + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

描述

+

--filename, -f

+

生成的用于训练的csv文件名:名称-时间戳.csv

+

--output_path, -o

+

生成的csv文件的存放路径,需提供绝对路径

+

--disk, -b

+

业务运行时实际使用的磁盘,如/dev/sda

+

--network, -n

+

业务运行时使用的网络接口,如eth0

+

--app_type, -t

+

标记业务的应用类型,作为训练时使用的标签

+

--duration, -d

+

业务运行时采集数据的时间,单位秒,默认采集时间1200秒

+

--interval,-i

+

采集数据的时间间隔,单位秒,默认采集间隔5秒

+
+ +### 使用示例 + +```shell +# atune-adm collection --filename name --interval 5 --duration 1200 --output_path /home/data --disk sda --network eth0 --app_type test_type +``` + +### train + +### 功能描述 + +使用采集的数据进行模型的训练。训练时至少采集两种应用类型的数据,否则训练会出错。 + +### 命令格式 + +**atune-adm train** + +### 参数说明 + +- OPTIONS + + + + + + + + + + + + + +

参数

+

描述

+

--data_path, -d

+

存放模型训练所需的csv文件的目录

+

--output_file, -o

+

训练生成的新模型

+
+ +### 使用示例 + +使用data目录下的csv文件作为训练输入,生成的新模型new-model.m存放在model目录下。 + +```shell +# atune-adm train --data_path /home/data --output_file /usr/libexec/atuned/analysis/models/new-model.m +``` + +### undefine + +### 功能描述 + +删除用户自定义的profile。 + +### 命令格式 + +**atune-adm undefine** + +### 使用示例 + +删除自定义的profile。 + +```shell +# atune-adm undefine test_service-test_app-test_scenario +``` + +## 查询profile + +### info + +### 功能描述 + +查看对应的profile内容。 + +### 命令格式 + +**atune-adm info** + +### 使用示例 + +查看web-nginx-http-long-connection的profile内容: + +```shell +# atune-adm info web-nginx-http-long-connection + +*** web-nginx-http-long-connection: + +# +# nginx http long connection A-Tune configuration +# +[main] +include = default-default + +[kernel_config] +#TODO CONFIG + +[bios] +#TODO CONFIG + +[bootloader.grub2] +iommu.passthrough = 1 + +[sysfs] +#TODO CONFIG + +[systemctl] +sysmonitor = stop +irqbalance = stop + +[sysctl] +fs.file-max = 6553600 +fs.suid_dumpable = 1 +fs.aio-max-nr = 1048576 +kernel.shmmax = 68719476736 +kernel.shmall = 4294967296 +kernel.shmmni = 4096 +kernel.sem = 250 32000 100 128 +net.ipv4.tcp_tw_reuse = 1 +net.ipv4.tcp_syncookies = 1 +net.ipv4.ip_local_port_range = 1024 65500 +net.ipv4.tcp_max_tw_buckets = 5000 +net.core.somaxconn = 65535 +net.core.netdev_max_backlog = 262144 +net.ipv4.tcp_max_orphans = 262144 +net.ipv4.tcp_max_syn_backlog = 262144 +net.ipv4.tcp_timestamps = 0 +net.ipv4.tcp_synack_retries = 1 +net.ipv4.tcp_syn_retries = 1 +net.ipv4.tcp_fin_timeout = 1 +net.ipv4.tcp_keepalive_time = 60 +net.ipv4.tcp_mem = 362619 483495 725238 +net.ipv4.tcp_rmem = 4096 87380 6291456 +net.ipv4.tcp_wmem = 4096 16384 4194304 +net.core.wmem_default = 8388608 +net.core.rmem_default = 8388608 +net.core.rmem_max = 16777216 +net.core.wmem_max = 16777216 + +[script] +prefetch = off +ethtool = -X {network} hfunc toeplitz + +[ulimit] +{user}.hard.nofile = 102400 +{user}.soft.nofile = 102400 + +[schedule_policy] +#TODO CONFIG + +[check] +#TODO CONFIG + +[tip] +SELinux provides extra control and security features to linux kernel. Disabling SELinux will improve the performance but may cause security risks. = kernel +disable the nginx log = application +``` + +## 更新profile + +用户根据需要更新已有profile。 + +### update + +### 功能描述 + +将已有profile中原来的优化项更新为new.conf中的内容。 + +### 命令格式 + +**atune-adm update** + +### 使用示例 + +更新名为test_service-test_app-test_scenario的profile优化项为new.conf。 + +```shell +# atune-adm update test_service-test_app-test_scenario ./new.conf +``` + +## 激活profile + +### profile + +### 功能描述 + +手动激活profile,使其处于active状态。 + +### 命令格式 + +**atune-adm profile** + +### 参数说明 + +profile名参考list命令查询结果。 + +### 使用示例 + +激活web-nginx-http-long-connection对应的profile配置。 + +```sh +# atune-adm profile web-nginx-http-long-connection +``` + +## 回滚profile + +### rollback + +### 功能描述 + +回退当前的配置到系统的初始配置。 + +### 命令格式 + +**atune-adm rollback** + +### 使用示例 + +```sh +# atune-adm rollback +``` + +## 更新数据库 + +### upgrade + +### 功能描述 + +更新系统的数据库。 + +### 命令格式 + +**atune-adm upgrade** + +### 参数说明 + +- DB\_FILE + + 新的数据库文件路径 + +### 使用示例 + +数据库更新为new\_sqlite.db。 + +```sh +# atune-adm upgrade ./new_sqlite.db +``` + +## 系统信息查询 + +### check + +### 功能描述 + +检查系统当前的cpu、bios、os、网卡等信息。 + +### 命令格式 + +**atune-adm check** + +### 使用示例 + +```sh +# atune-adm check + cpu information: + cpu:0 version: Kunpeng 920-6426 speed: 2600000000 HZ cores: 64 + cpu:1 version: Kunpeng 920-6426 speed: 2600000000 HZ cores: 64 + system information: + DMIBIOSVersion: 0.59 + OSRelease: 4.19.36-vhulk1906.3.0.h356.eulerosv2r8.aarch64 + network information: + name: eth0 product: HNS GE/10GE/25GE RDMA Network Controller + name: eth1 product: HNS GE/10GE/25GE Network Controller + name: eth2 product: HNS GE/10GE/25GE RDMA Network Controller + name: eth3 product: HNS GE/10GE/25GE Network Controller + name: eth4 product: HNS GE/10GE/25GE RDMA Network Controller + name: eth5 product: HNS GE/10GE/25GE Network Controller + name: eth6 product: HNS GE/10GE/25GE RDMA Network Controller + name: eth7 product: HNS GE/10GE/25GE Network Controller + name: docker0 product: +``` + +## 参数自调优 + +A-Tune提供了最佳配置的自动搜索能力,免去人工反复做参数调整、性能评价的调优过程,极大地提升最优配置的搜寻效率。 + +### tuning + +### 功能描述 + +使用指定的项目文件对参数进行动态空间的搜索,找到当前环境配置下的最优解。 + +### 命令格式 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>在运行命令前,需要满足如下条件: +> +>- 服务端的yaml配置文件已经编辑完成并放置于 atuned服务下 ****/etc/atuned/tuning/**** 的目录中。 +>- 客户端的yaml配置文件已经编辑完成并放置于atuned客户端任意目录下。 + +**atune-adm tuning** \[OPTIONS\] + +### 参数说明 + +- OPTIONS + + + + + + + + + + + + + + + + + + + + +

参数

+

描述

+

--restore, -r

+

恢复tuning优化前的初始配置

+

--project, -p

+

指定需要恢复的yaml文件中的项目名称

+

--restart, -c

+

基于历史调优结果进行调优

+

--detail, -d

+

打印tuning过程的详细信息

+
+ + >![](./public_sys-resources/icon-note.gif) **说明:** + >当使用参数时,-p参数后需要跟具体的项目名称且必须指定该项目yaml文件。 + +- PROJECT\_YAML:客户端yaml配置文件。 + +### 配置说明 + +**表 1** 服务端yaml文件 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

配置名称

+

配置说明

+

参数类型

+

取值范围

+

project

+

项目名称。

+

字符串

+

-

+

startworkload

+

待调优服务的启动脚本。

+

字符串

+

-

+

stopworkload

+

待调优服务的停止脚本。

+

字符串

+

-

+

maxiterations

+

最大调优迭代次数,用于限制客户端的迭代次数。一般来说,调优迭代次数越多,优化效果越好,但所需时间越长。用户必须根据实际的业务场景进行配置。

+

整型

+

>10

+

object

+

需要调节的参数项及信息。

+

object 配置项请参见表2

+

-

+

-

+
+ +**表 2** object项配置说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

配置名称

+

配置说明

+

参数类型

+

取值范围

+

name

+

待调参数名称

+

字符串

+

-

+

desc

+

待调参数描述

+

字符串

+

-

+

get

+

查询参数值的脚本

+

-

+

-

+

set

+

设置参数值的脚本

+

-

+

-

+

needrestart

+

参数生效是否需要重启业务

+

枚举

+

"true", "false"

+

type

+

参数的类型,目前支持discrete, continuous两种类型,对应离散型、连续型参数

+

枚举

+

"discrete", "continuous"

+

dtype

+

该参数仅在type为discrete类型时配置,目前支持int, float, string类型

+

枚举

+

int, float, string

+

scope

+

参数设置范围,仅在type为discrete且dtype为int或float时或者type为continuous时生效

+

整型/浮点型

+

用户自定义,取值在该参数的合法范围

+

step

+

参数值步长,dtype为int或float时使用

+

整型/浮点型

+

用户自定义

+

items

+

参数值在scope定义范围之外的枚举值,dtype为int或float时使用

+

整型/浮点型

+

用户自定义,取值在该参数的合法范围

+

options

+

参数值的枚举范围,dtype为string时使用

+

字符串

+

用户自定义,取值在该参数的合法范围

+
+ +**表 3** 客户端yaml文件配置说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

配置名称

+

配置说明

+

参数类型

+

取值范围

+

project

+

项目名称,需要与服务端对应配置文件中的project匹配

+

字符串

+

-

+

engine

+

调优算法

+

字符串

+

"random", "forest", "gbrt", "bayes", "extraTrees"

+

iterations

+

调优迭代次数

+

整型

+

>=10

+

random_starts

+

随机迭代次数

+

整型

+

<iterations

+

feature_filter_engine

+

参数搜索算法,用于重要参数选择,该参数可选

+

字符串

+

"lhs"

+

feature_filter_cycle

+

参数搜索轮数,用于重要参数选择,该参数配合feature_filter_engine使用

+

整型

+

-

+

feature_filter_iters

+

每轮参数搜索的迭代次数,用于重要参数选择,该参数配合feature_filter_engine使用

+

整型

+

-

+

split_count

+

调优参数取值范围中均匀选取的参数个数,用于重要参数选择,该参数配合feature_filter_engine使用

+

整型

+

-

+

benchmark

+

性能测试脚本

+

-

+

-

+

evaluations

+

性能测试评估指标

+

evaluations 配置项请参见表4

+

-

+

-

+
+ +**表 4** evaluations项配置说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

配置名称

+

配置说明

+

参数类型

+

取值范围

+

name

+

评价指标名称

+

字符串

+

-

+

get

+

获取性能评估结果的脚本

+

-

+

-

+

type

+

评估结果的正负类型,positive代表最小化性能值,negative代表最大化对应性能值

+

枚举

+

"positive","negative"

+

weight

+

该指标的权重百分比,0-100

+

整型

+

0-100

+

threshold

+

该指标的最低性能要求

+

整型

+

用户指定

+
+ +### 配置示例 + +服务端yaml文件配置示例: + +```Conf +project: "compress" +maxiterations: 500 +startworkload: "" +stopworkload: "" +object : + - + name : "compressLevel" + info : + desc : "The compresslevel parameter is an integer from 1 to 9 controlling the level of compression" + get : "cat /root/A-Tune/examples/tuning/compress/compress.py | grep 'compressLevel=' | awk -F '=' '{print $2}'" + set : "sed -i 's/compressLevel=\\s*[0-9]*/compressLevel=$value/g' /root/A-Tune/examples/tuning/compress/compress.py" + needrestart : "false" + type : "continuous" + scope : + - 1 + - 9 + dtype : "int" + - + name : "compressMethod" + info : + desc : "The compressMethod parameter is a string controlling the compression method" + get : "cat /root/A-Tune/examples/tuning/compress/compress.py | grep 'compressMethod=' | awk -F '=' '{print $2}' | sed 's/\"//g'" + set : "sed -i 's/compressMethod=\\s*[0-9,a-z,\"]*/compressMethod=\"$value\"/g' /root/A-Tune/examples/tuning/compress/compress.py" + needrestart : "false" + type : "discrete" + options : + - "bz2" + - "zlib" + - "gzip" + dtype : "string" +``` + +客户端yaml文件配置示例: + +```yaml +project: "compress" +engine : "gbrt" +iterations : 20 +random_starts : 10 + +benchmark : "python3 /root/A-Tune/examples/tuning/compress/compress.py" +evaluations : + - + name: "time" + info: + get: "echo '$out' | grep 'time' | awk '{print $3}'" + type: "positive" + weight: 20 + - + name: "compress_ratio" + info: + get: "echo '$out' | grep 'compress_ratio' | awk '{print $3}'" + type: "negative" + weight: 80 +``` + +### 使用示例 + +- 进行tuning调优 + + ```sh + # atune-adm tuning --project compress --detail compress_client.yaml + ``` + +- 恢复tuning调优前的初始配置,compress为yaml文件中的项目名称 + + ```sh + # atune-adm tuning --restore --project compress + ``` diff --git a/docs/zh/server/quickstart/_toc.yaml b/docs/zh/server/quickstart/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6e7effa7c03eaa8dc0c2acdf0bf148fd379b20c6 --- /dev/null +++ b/docs/zh/server/quickstart/_toc.yaml @@ -0,0 +1,5 @@ +isManual: true +label: '' +sections: + - label: 快速入门 + href: ./quick_start.md diff --git a/docs/zh/server/quickstart/figures/Advanced_User_Configuration.png b/docs/zh/server/quickstart/figures/Advanced_User_Configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..29fc332ed3ecdc70b2a031d2633a6ec4ec5a9f0b Binary files /dev/null and b/docs/zh/server/quickstart/figures/Advanced_User_Configuration.png differ diff --git a/docs/zh/server/quickstart/figures/CD-ROM_drive_icon.png b/docs/zh/server/quickstart/figures/CD-ROM_drive_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9e87cfaf1bdee860b3cbc35150decd8db492f8aa Binary files /dev/null and b/docs/zh/server/quickstart/figures/CD-ROM_drive_icon.png differ diff --git a/docs/zh/server/quickstart/figures/Image_dialog_box.png b/docs/zh/server/quickstart/figures/Image_dialog_box.png new file mode 100644 index 0000000000000000000000000000000000000000..e72253b3d16d4388fa051c73b94e8923020ad467 Binary files /dev/null and b/docs/zh/server/quickstart/figures/Image_dialog_box.png differ diff --git a/docs/zh/server/quickstart/figures/Installation_Overview.png b/docs/zh/server/quickstart/figures/Installation_Overview.png new file mode 100644 index 0000000000000000000000000000000000000000..f6542ffc0c01cf2489071ebf5addb47f12b0a242 Binary files /dev/null and b/docs/zh/server/quickstart/figures/Installation_Overview.png differ diff --git a/docs/zh/server/quickstart/figures/Installation_Procedure.png b/docs/zh/server/quickstart/figures/Installation_Procedure.png new file mode 100644 index 0000000000000000000000000000000000000000..06a9d14a166bdfe86c5eec0be7929a7a99c5ea45 Binary files /dev/null and b/docs/zh/server/quickstart/figures/Installation_Procedure.png differ diff --git a/docs/zh/server/quickstart/figures/Installation_wizard.png b/docs/zh/server/quickstart/figures/Installation_wizard.png new file mode 100644 index 0000000000000000000000000000000000000000..292b54c8a5348d476cf39d2eaefc967bd4be21c5 Binary files /dev/null and b/docs/zh/server/quickstart/figures/Installation_wizard.png differ diff --git a/docs/zh/server/quickstart/figures/Setting_the_System_Boot_Option.png b/docs/zh/server/quickstart/figures/Setting_the_System_Boot_Option.png new file mode 100644 index 0000000000000000000000000000000000000000..682f555c3a6da63e1cf6e6eed402e2851c4a7ebb Binary files /dev/null and b/docs/zh/server/quickstart/figures/Setting_the_System_Boot_Option.png differ diff --git a/docs/zh/server/quickstart/figures/Target_installation_position.png b/docs/zh/server/quickstart/figures/Target_installation_position.png new file mode 100644 index 0000000000000000000000000000000000000000..5dcf04a4bfa256efef32a1cf7dd146161030381d Binary files /dev/null and b/docs/zh/server/quickstart/figures/Target_installation_position.png differ diff --git a/docs/zh/server/quickstart/figures/choosesoftware.png b/docs/zh/server/quickstart/figures/choosesoftware.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f4dbfb6de56498a46752cbebe88ab623366160 Binary files /dev/null and b/docs/zh/server/quickstart/figures/choosesoftware.png differ diff --git a/docs/zh/server/quickstart/figures/createuser.png b/docs/zh/server/quickstart/figures/createuser.png new file mode 100644 index 0000000000000000000000000000000000000000..a280f355f07f34e590bfcb5c33a16b2201051857 Binary files /dev/null and b/docs/zh/server/quickstart/figures/createuser.png differ diff --git a/docs/zh/server/quickstart/figures/restarticon.png b/docs/zh/server/quickstart/figures/restarticon.png new file mode 100644 index 0000000000000000000000000000000000000000..33bf7cd2e435ff04f3947eb39ba20019b12bf2d2 Binary files /dev/null and b/docs/zh/server/quickstart/figures/restarticon.png differ diff --git a/docs/zh/server/quickstart/figures/root_password.png b/docs/zh/server/quickstart/figures/root_password.png new file mode 100644 index 0000000000000000000000000000000000000000..acc7ac215cecfe996a991cf61c69c52d19a06d31 Binary files /dev/null and b/docs/zh/server/quickstart/figures/root_password.png differ diff --git a/docs/zh/server/quickstart/figures/selectlanguage.png b/docs/zh/server/quickstart/figures/selectlanguage.png new file mode 100644 index 0000000000000000000000000000000000000000..4351e637cb673e156864cf5110e68efb3c3e1f2b Binary files /dev/null and b/docs/zh/server/quickstart/figures/selectlanguage.png differ diff --git a/docs/zh/server/quickstart/figures/zh-cn_image_0229420473.png b/docs/zh/server/quickstart/figures/zh-cn_image_0229420473.png new file mode 100644 index 0000000000000000000000000000000000000000..86c61a4b8e2a5795baff2fc74629924d01d7b97b Binary files /dev/null and b/docs/zh/server/quickstart/figures/zh-cn_image_0229420473.png differ diff --git a/docs/zh/server/quickstart/public_sys-resources/icon-caution.gif b/docs/zh/server/quickstart/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/quickstart/public_sys-resources/icon-caution.gif differ diff --git a/docs/zh/server/quickstart/public_sys-resources/icon-danger.gif b/docs/zh/server/quickstart/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/quickstart/public_sys-resources/icon-danger.gif differ diff --git a/docs/zh/server/quickstart/public_sys-resources/icon-note.gif b/docs/zh/server/quickstart/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/server/quickstart/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/server/quickstart/public_sys-resources/icon-notice.gif b/docs/zh/server/quickstart/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/server/quickstart/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/server/quickstart/public_sys-resources/icon-tip.gif b/docs/zh/server/quickstart/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/zh/server/quickstart/public_sys-resources/icon-tip.gif differ diff --git a/docs/zh/server/quickstart/public_sys-resources/icon-warning.gif b/docs/zh/server/quickstart/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/quickstart/public_sys-resources/icon-warning.gif differ diff --git a/docs/zh/server/quickstart/quick_start.md b/docs/zh/server/quickstart/quick_start.md new file mode 100644 index 0000000000000000000000000000000000000000..91f12d92b379df47d5caf91cd59b595be5288b63 --- /dev/null +++ b/docs/zh/server/quickstart/quick_start.md @@ -0,0 +1,257 @@ +# 快速入门 + +本文档以TaiShan 200服务器上安装openEuler 22.03_LTS_SP4 为例,旨在指导用户快速地安装和使用openEuler操作系统,更详细的安装要求和安装方法请参考《[安装指南](./../Installation/installation.html)》。 + + +- [快速入门](#快速入门) + - [安装要求](#安装要求) + - [获取安装源](#获取安装源) + - [发布包完整性校验](#发布包完整性校验) + - [启动安装](#启动安装) + - [安装](#安装) + - [查看系统信息](#查看系统信息) + + + +## 安装要求 + +- 硬件兼容支持 + 支持的服务器类型如[表1](#table14948632047)所示。 + **表 1** 支持的服务器类型 + + | 服务器形态 | 服务器名称 | 服务器型号 | + | :---- | :---- |:---- | + | 机架服务器| TaiShan 200 | 2280均衡型 | + | 机架服务器 | FusionServer Pro 机架服务器 | FusionServer Pro 2288H V5

说明:
服务器要求配置Avago 3508 RAID控制卡和启用LOM-X722网卡。| +- 最小硬件要求 + 最小硬件要求如[表2](#tff48b99c9bf24b84bb602c53229e2541)所示。 + **表 2** 最小硬件要求 + + | 部件名称 | 最小硬件要求 | 说明 | + | :---- | :---- |:---- | + | 架构 |
  • AArch64
  • x86_64
|
  • 支持Arm的64位架构。
  • 支持Intel的x86 64位架构。
| + | CPU |
  • 华为鲲鹏920系列CPU
  • Intel® Xeon®处理器
| - | + | 内存 | 不小于4GB(为了获得更好的应用体验,建议不小于8GB) | - | + | 硬盘 | 为了获得更好的应用体验,建议不小于120GB |
  • 支持IDE、SATA、SAS等接口的硬盘。
  • 用DIF功能的NVME盘,需要对应驱动支持,如果无法使用,请联系硬件厂商。
| + +## 获取安装源 + +请按以下步骤获取openEuler的发布包和校验文件: + +1. 登录[openEuler社区](https://openeuler.org)网站。 +2. 单击“下载”。 +3. 单击“社区发行版”,显示版本列表。 +4. 在版本列表的“openEuler 22.03 LTS SP4”版本处单击“前往下载”按钮,进入openEuler 22.03_LTS_SP4版本下载列表。 +5. 根据实际待安装环境的架构和场景选择需要下载的 openEuler 的发布包和校验文件。 + 1. 若为AArch64架构。 + 1. 单击“AArch64”。 + 2. 若选择本地安装,选择“Offline Standard ISO”或者“Offline Everything ISO”对应的“立即下载”将发布包 “openEuler-22.03-LTS-SP4-aarch64-dvd.iso”下载到本地。 + 3. 若选择网络安装,选择“Network Install ISO”将发布包 “openEuler-22.03-LTS-SP4-netinst-aarch64-dvd.iso”下载到本地。 + 2. 若为x86_64架构。 + 1. 单击“x86_64”。 + 2. 若选择本地安装,选择“Offline Standard ISO”或者“Offline Everything ISO”对应的“立即下载”将发布包 “openEuler-22.03-LTS-SP4-x86_64-dvd.iso”下载到本地。 + 3. 若选择网络安装,选择“Network Install ISO”将发布包 “openEuler-22.03-LTS-SP4-netinst-x86_64-dvd.iso ”下载到本地。 + +## 发布包完整性校验 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>此处以AArch64架构的发布包完整性校验为例,x86\_64架构的发布包完整性校验的操作方法相同。 + +### 简介 + +为了防止软件包在传输过程中由于网络原因或者存储设备原因出现下载不完整的问题,在获取到软件包后,可按以下步骤将获取到的openEuler的软件包进行完整性校验。 + +### 前提条件 + +在校验发布包完整性之前,需要准备如下文件: + +iso文件:openEuler-22.03-LTS-SP4-aarch64-dvd.iso + +校验文件:ISO对应完整性校验值,复制保存对应的ISO值 + +### 操作指导 + +文件完整性校验操作步骤如下: + +1. 计算文件的sha256校验值。执行命令如下: + + ```shell + $ sha256sum openEuler-22.03-LTS-SP4-aarch64-dvd.iso + ``` + + 命令执行完成后,输出校验值。 + +2. 对比步骤1计算的校验值与对刚刚复制的SHA256的值是否一致。 + + 如果校验值一致说明iso文件完整性没有破坏,如果校验值不一致则可以确认文件完整性已被破坏,需要重新获取。 + +## 启动安装 + +1. 登录服务器iBMC Web界面。具体方法请参考《[TaiShan 200 服务器 用户指南 \(型号 2280\)](https://support.huawei.com/enterprise/zh/doc/EDOC1100088652)》。 +2. 在上方标题栏中,选择“配置”,在左侧导航树中选择“系统启动项”,显示“系统启动项”界面。 + + 将“优先引导介质”设置为“光驱”,选择“单次有效”,并单击“保存”以保存配置。如[图1](#fig1011938131018)所示。 + + **图 1** 设置系统启动项
+ ![alt 图片](./figures/Setting_the_System_Boot_Option.png) + +3. 在上方标题栏中,选择“远程控制”,在左侧导航树中选择“远程控制”,显示“远程控制”界面。 + + 根据实际情况选择一个集成远程控制台以进入远程虚拟控制台,如选择“Java集成远程控制台\(共享\)”。 + +4. 在虚拟界面工具栏中,单击虚拟光驱工具如下图所示。 + + **图 2** 光驱图标 + ![alt 图片](./figures/CD-ROM_drive_icon.png) + + 弹出镜像对话框,如下图所示。 + + **图 3** 镜像对话框 + ![alt 图片](./figures/Image_dialog_box.png) + +5. 在镜像对话框中,选择“镜像文件”, 并单击“浏览”, 弹出“打开”对话框。 +6. 选择镜像文件,单击“打开”。然后在镜像对话框中,单击“连接”。当“连接”显示为“断开”后,表示虚拟光驱已连接到服务器。 +7. 在工具栏中,单击重启工具,弹出对话框,单击“强制重启”重启设备,如下图所示。 + + **图 4** 重启图标 + ![alt 图片](./figures/restarticon.png) + +8. 设备重启后进入到openEuler操作系统安装引导界面,如[图5](#fig1648754873314)所示。 + >![alt 图片](./public_sys-resources/icon-note.gif) **说明:** + > + >- 如果60秒内未按任何键,系统将从默认选项“Test this media & install openEuler 22.03-LTS-SP4”自动进入安装界面。 + >- 安装物理机时,如果使用键盘上下键无法选择启动选项,按“Enter”键无响应,可以单击BMC界面上的鼠标控制图标“![alt 图片](./figures/zh-cn_image_0229420473.png)”,设置“键鼠复位”。 + + **图 5** 安装引导界面 + ![alt 图片](figures/Installation_wizard.png) +9. 在安装引导界面,按“Enter”,进入默认选项“Test this media & install openEuler 22.03-LTS-SP4”的图形化安装界面。 + +## 安装 + +进入图形化安装界面后,按如下步骤进行安装。 + +1. 设置安装语言,默认为英语,用户可根据实际情况进行调整,如[图6](#fig874344811484)所示,选择“中文”。 + + **图 6** 选择语言 + ![alt 图片](figures/selectlanguage.png) +2. 在安装概览界面,根据实际情况设置各配置项。 + **图 7** 安装概览 + ![alt 图片](figures/Installation_Overview.png) + + - 配置项有告警符号的,表示用户必须完成该选项配置后,告警符号消失,才能进行下一步操作。 + - 配置项无告警符号的,表示该配置项已有默认配置。 + - 所有配置项均无告警符号时用户才能单击“开始安装”进行系统安装。 + + 1. 选择“软件选择”,设置“软件选择”配置项。 + 用户需要根据实际的业务需求,在左侧选择一个“最小安装”,在右侧选择安装环境的附加选项,如[图8](#fig1133717611109)所示。 + **图 8** 软件选择 + ![alt 图片](figures/choosesoftware.png) + + >![alt 图片](./public_sys-resources/icon-note.gif) **说明:** + > + >- 在最小安装的环境下,并非安装源中所有的包都会安装。如果用户需要使用的包未安装,可将安装源挂载到本地制作repo源,通过DNF工具单独安装。 + >- 选择“虚拟化主机”时会默认安装虚拟化组件qemu、libvirt、edk2,且可在附加选项处选择是否安装ovs等组件。 + + 设置完成后,请单击左上角“完成”返回“安装概览”页面。 + 2. 选择“安装目的地”,设置“安装目的地”配置项。 + 在安装位置页面中,您可以选择计算机中的本地可用存储设备。 + + >![alt 图片](./public_sys-resources/icon-notice.gif) **须知:** + > + >- 由于很多服务器BIOS内置NVMe驱动程序版本较低,不支持NVMe的数据保护特性(数据保护:将磁盘扇区格式化为512+N或4096+N字节)。所以,在选择合适的存储介质时,建议不要选择开启数据保护特性的NVMe SSD存储介质作为系统盘,否则可能出现操作系统无法引导等问题。 + >- 用户可以选择优先咨询服务器厂商关于BIOS是否支持开启数据保护特性的NVMe磁盘作为系统盘。如果您无法确认BIOS是否支持,则不推荐使用NVMe安装操作系统,或者选择关闭NVMe盘的数据保护功能实现操作系统安装。 + + 您还需要进行存储配置以便对系统分区。您可以手动配置分区,也可以选择让安装程序自动分区。如果是在未使用过的存储设备中执行全新安装,或者不需要保留该存储设备中任何数据,建议选择“自动”进行自动分区。如[图9](#fig153381468101)所示。 + + **图 9** 安装目标位置 + + ![alt 图片](figures/Target_installation_position.png) + + >![alt 图片](./public_sys-resources/icon-note.gif) **说明:** + > + >- 在进行分区时,出于系统性能和安全的考虑,建议您划分如下单独分区:/boot、/var、/var/log 、/var/log/audit、/home、/tmp。 + >- 系统如果配置了swap分区,当系统的物理内存不够用时,会使用swap分区。虽然swap分区可以增大物理内存大小的限制,但是如果由于内存不足使用到swap分区,会增加系统的响应时间,性能变差。因此在物理内存充足或者性能敏感的系统中,不建议配置swap分区。 + >- 如果需要拆分逻辑卷组则需要选择“自定义”进行手动分区,并在“手动分区”界面单击“卷组”区域中的“修改”按钮重新配置卷组。 + + 设置完成后,请单击左上角“完成”返回“安装概览”页面。 + 3. 选择“根密码”,设置“根密码”配置项。 + 在“ROOT密码”页面中,如[图10](#fig_root_password)所示,根据[密码复杂度](#password_complexity)输入密码并再次输入密码进行确认。 + + >![alt 图片](./public_sys-resources/icon-note.gif) **说明:** + > + >- root帐户是用来执行关键系统管理任务,不建议您在日常工作及系统访问时使用root帐户。 + >- 在“ROOT密码”界面若选择“锁定root帐户”则root帐户将禁用。 + + **密码复杂度** + 用户设置的root用户密码或新创建用户的密码均需要满足密码复杂度要求,否则会导致密码设置或用户创建失败。设置密码的复杂度的要求如下: + 1. 口令长度至少8个字符。 + 2. 口令至少包含大写字母、小写字母、数字和特殊字符中的任意3种。 + 3. 口令不能和帐号一样。 + 4. 口令不能使用字典词汇。 + + >![alt 图片](./public_sys-resources/icon-note.gif) **说明:** + > 在已装好的openEuler环境中,可以通过`cracklib-unpacker /usr/share/cracklib/pw_dict > dictionary.txt`命令导出字典库文件dictionary.txt,用户可以查询密码是否在该字典中。 + + **图 10** root密码 + ![alt 图片](figures/root_password.png) + + 设置完成后,单击左上角的“完成”返回“安装概览”页面。 + + 4. 选择“创建用户”,设置“创建用户”配置项。 + 在创建用户的界面如[图11](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1237715313319)所示。输入用户名,并设置密码,其中密码复杂度要求与root密码复杂度要求一致。另外您还可以通过“高级”选项设置用户主目录、用户组等,如[图12](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig128716531312)所示。 + + **图 11** 创建用户 + ![alt 图片](figures/createuser.png) + + **图 12** 高级用户配置 + ![alt 图片](figures/Advanced_User_Configuration.png) + 完成设置后,单击左上角的“完成”返回“安装概览”页面。 + + 5. 设置其他配置项,其他配置项可以使用默认配置。 + +3. 单击“开始安装”进行系统安装,如[图13](#fig1717019357392)所示。 + **图 13** 开始安装 + ![alt 图片](figures/Installation_Procedure.png) +4. 安装完成后重启系统。 + openEuler完成安装后,单击“重启系统”按钮,系统将重新启动。 + +## 查看系统信息 + +系统安装完成并重启后直接进入系统命令行登录界面,输入安装过程中设置的用户和密码,进入openEuler操作系统,查看如下系统信息。若需要进行系统管理和配置操作,请参考《[管理员指南](https://openeuler.org/zh/docs/22.03_LTS_SP4/docs/Administration/administration.html)》。 + +- 查看系统信息 + + ```shell + # cat /etc/os-release + NAME="openEuler" + VERSION="22.03 (LTS-SP4)" + ID="openEuler" + VERSION_ID="22.03" + PRETTY_NAME="openEuler 22.03 (LTS-SP4)" + ANSI_COLOR="0;31" + ``` + +- 查看系统相关的资源信息 + 查看CPU信息 + + ```shell + # lscpu + ``` + + 查看内存信息 + + ```shell + # free + ``` + + 查看磁盘信息 + + ```shell + # fdisk -l + ``` + +- 查看IP地址 + + ```shell + # ip addr + ``` diff --git a/docs/zh/server/releasenotes/README.md b/docs/zh/server/releasenotes/README.md new file mode 100644 index 0000000000000000000000000000000000000000..25ad935c1123ff0398218e974b9589aa79f9eaf4 --- /dev/null +++ b/docs/zh/server/releasenotes/README.md @@ -0,0 +1,43 @@ +# 组件分类 + +**应用和基础服务** + 包括Application && Base-service + +**编程语言和编译器** + 包括Programming-language && Compiler && sig-golang && sig-perl-modules && sig-python-modules + +**运行时和中间件** + 包括Runtime && sig-ai-bigdata && sig-ROS && DB + +**虚拟化和容器** + 包括Virt && oVirt && iSulad && Docker && sig-android-middleware + +**集群管理** + 包括sig-Ha && sig-Kubernetes + +**内核** + 包括Kernel + +**安全** + 包括SIG-Security_facility && sig-bounds_checking_function + +**硬件和芯片使能** + sig-RaspberryPi && sig-RISC-V && sig-Compatibility-Infra + +**文件系统** + 包括Storage & sig-ceph + +**计算和加速库** + 包括Computing && kae + +**网络** + 包括Network && dpdk && sig-REDF + +**桌面** + 包括Desktop && sig-mate-desktop && sig-UKUI && xfce && GNOME && sig-DDE + +**系统工具** + 包括System-tool && A-Tune && dev-utils && sig-EasyLife + +**其他** + 包括other && private diff --git a/docs/zh/server/releasenotes/_toc.yaml b/docs/zh/server/releasenotes/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..08098194df84210c6f0fad9125ce3ebab9730a3f --- /dev/null +++ b/docs/zh/server/releasenotes/_toc.yaml @@ -0,0 +1,33 @@ +isManual: true +label: '' +sections: + - label: openEuler账号清单 + href: ./account_list.md + - label: 致谢 + href: ./acknowledgment.md + - label: 参与贡献 + href: ./contribution.md + - label: CVE漏洞 + href: ./cve.md + - label: 简介 + href: ./introduction.md + - label: 关键特性 + href: ./key_features.md + - label: 已知问题 + href: ./known_issues.md + - label: 系统安装 + href: ./os_installation.md + - label: 组件分类 + href: ./README.md + - label: 发行说明 + href: ./release_notes.md + - label: 已修复问题 + href: ./resoluved_issues.md + - label: 源代码 + href: ./source_code.md + - label: 法律声明 + href: ./terms_of_use.md + - label: 用户须知 + href: ./user_notice.md + - label: 版本发行说明 + href: ./zh-cn_bookmap_0225720059.md diff --git a/docs/zh/server/releasenotes/account_list.md b/docs/zh/server/releasenotes/account_list.md new file mode 100644 index 0000000000000000000000000000000000000000..18eb62ba235f7607e302196ea3923734f0336c62 --- /dev/null +++ b/docs/zh/server/releasenotes/account_list.md @@ -0,0 +1,6 @@ +# openEuler账号清单 + +| 用户名 | 默认密码 | 用户用途 | 用户状态 | 登录方式 | 备注 | +|--- |--- | --- | --- |--- |--- | +| root | openEuler12#$| 虚拟机镜像默认用户 | 启用 | 远程登录 | 登录使用openEuler虚拟机镜像安装的虚拟机。 | +| root | openEuler#12 | 登录GRUB2 | 启用 | 本地登录、远程登录 | GRUB (GRand UnifiedBootloader) 是操作系统启动管理器,用来引导不同系统(如Windows、Linux)。
GRUB2是GRUB的升级版。系统启动时,可以通过GRUB2界面修改启动参数。为了确保系统的启动参数不被任意修改,需要对GRUB2界面进行加密,仅在输入正确的GRUB2口令时才能修改。 | diff --git a/docs/zh/server/releasenotes/acknowledgment.md b/docs/zh/server/releasenotes/acknowledgment.md new file mode 100644 index 0000000000000000000000000000000000000000..1bbe74bfc69de3609389419b1156abe4135b73ec --- /dev/null +++ b/docs/zh/server/releasenotes/acknowledgment.md @@ -0,0 +1,3 @@ +# 致谢 + +我们衷心地感谢参与和协助openEuler项目的所有成员。是你们的辛勤付出使得版本顺利发布,也为openEuler更好地发展提供可能。 diff --git a/docs/zh/server/releasenotes/contribution.md b/docs/zh/server/releasenotes/contribution.md new file mode 100644 index 0000000000000000000000000000000000000000..54d0593e196ae76e20771177bb79c95f5ca020f1 --- /dev/null +++ b/docs/zh/server/releasenotes/contribution.md @@ -0,0 +1,21 @@ +# 参与贡献 + +作为openEuler用户,你可以通过多种方式协助openEuler社区。参与社区贡献的方法请参见[贡献攻略](https://www.openeuler.org/zh/community/contribution/),这里简单列出部分方式供参考。 + +## 特别兴趣小组 + +openEuler将拥有共同兴趣的人们聚在一起,组成了不同的特别兴趣小组(SIG)。当前已有的SIG请参见[SIG列表](https://www.openeuler.org/zh/sig/sig-list/)。 + +我们欢迎并鼓励你加入已有的SIG或创建新的SIG,创建方法请参见[SIG管理指南](https://gitee.com/openeuler/community/blob/master/zh/technical-committee/governance/)。 + +## 邮件列表和任务 + +欢迎你积极地帮助用户解决在[邮件列表](https://www.openeuler.org/zh/community/mailing-list/)和issue任务(包括[代码仓任务](https://gitee.com/organizations/openeuler/issues)和[软件包仓任务](https://gitee.com/organizations/src-openeuler/issues)) 中提出的问题。另外,我们也欢迎你提出问题。这些都将帮助openEuler社区更好地发展。 + +## 文档 + +你不仅可以通过提交代码参与社区贡献,我们也欢迎你反馈遇到的问题、困难,或者对文档易用性、完整性的改进建议等。例如获取软件或文档过程中的问题,使用系统过程中的难点。欢迎关注并改进[openEuler社区](https://openeuler.org/zh/)的文档模块。 + +## IRC + +openEuler也在IRC开辟了频道,作为提供社区支持和交互的额外渠道。详情请参见[openEuler IRC](https://gitee.com/openeuler/community/tree/master/zh/communication)。 diff --git a/docs/zh/server/releasenotes/cve.md b/docs/zh/server/releasenotes/cve.md new file mode 100644 index 0000000000000000000000000000000000000000..e826e0f56506b3ac239843c6a6bf0d607691b318 --- /dev/null +++ b/docs/zh/server/releasenotes/cve.md @@ -0,0 +1,3 @@ +# CVE漏洞 + +版本涉及的CVE可通过[CVE列表](https://www.openeuler.org/zh/security/cve)查询。 diff --git a/docs/zh/server/releasenotes/introduction.md b/docs/zh/server/releasenotes/introduction.md new file mode 100644 index 0000000000000000000000000000000000000000..68034a1783281e2f821dca9c765296370813dbf2 --- /dev/null +++ b/docs/zh/server/releasenotes/introduction.md @@ -0,0 +1,4 @@ +# 简介 + +openEuler是一款开源操作系统。当前openEuler内核源于Linux,支持鲲鹏及其他多种处理器,能够充分释放计算芯片的潜能,是由全球开源贡献者构建的高效、稳定、安全的开源操作系统,适用于数据库、大数据、云计算、人工智能等应用场景。同时,openEuler是一个面向全球的操作系统开源社区,通过社区合作,打造创新平台,构建支持多处理器架构、统一和开放的操作系统,推动软硬件应用生态繁荣发展。 + diff --git a/docs/zh/server/releasenotes/key_features.md b/docs/zh/server/releasenotes/key_features.md new file mode 100644 index 0000000000000000000000000000000000000000..4ade4f8326513d20e0787e96a1fcd5c0035fbbf5 --- /dev/null +++ b/docs/zh/server/releasenotes/key_features.md @@ -0,0 +1,147 @@ +# 关键特性 + +## AI专项 + + 智能时代,操作系统需要面向AI不断演进。一方面,在操作系统开发、部署、运维全流程以AI加持,让操作系统更智能;另一方面,openEuler已支持Arm,x86,RISC-V等全部主流通用计算架构,在智能时代,openEuler也率先支持NVIDIA、昇腾等主流AI处理器,成为使能多样性算力的首选。 + +- **OS for AI**:openEuler兼容NVIDIA、Ascend等主流算力平台的软件栈,为用户提供高效的开发运行环境。通过将不同AI算力平台的软件栈进行容器化封装,即可简化用户部署过程,提供开箱即用的体验。同时,openEuler也提供丰富的AI框架,方便大家快速在openEuler上使用AI能力。 + - openEuler已兼容CANN、CUDA等硬件SDK,以及TensorFlow、PyTorch等相应的AI框架软件,支持AI应用在openEuler上高效开发与运行。 + - openEuler AI软件栈容器化封装优化环境部署过程,并面向不同场景提供以下三类容器镜像。 + 1. SDK镜像:以openEuler为基础镜像,安装相应硬件平台的SDK,如Ascend平台的CANN或NVIDIA的CUDA软件。 + 2. AI框架镜像:以SDK镜像为基础,安装AI框架软件,如PyTorch或TensorFlow。 + 3. 模型应用镜像:在AI框架镜像的基础上,包含完整的工具链和模型应用。 + + 相关使用方式请参考《[openEuler AI 容器镜像用户指南](https://gitee.com/openeuler/docs/blob/stable2-22.03_LTS_SP4/docs/zh/docs/AI/AI%E5%AE%B9%E5%99%A8%E9%95%9C%E5%83%8F%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D%97.md)》。 + +- **AI for OS**:当前,欧拉和AI深度结合,一方面使用基础大模型,基于大量欧拉操作系统的代码和数据,训练出EulerCopilot,初步实现代码辅助生成、智能问题智能分析、系统辅助运维等功能,让openEuler更智能。EulerCopilot-智能问答:EulerCopilot智能问答平台目前支持web和智能shell两个入口。 + + 1. Web入口:操作简单,可咨询操作系统相关基础知识,openEuler动态数据、openEuler运维问题解决方案、openEuler项目介绍与使用指导等等。 + 2. 智能Shell入口:自然语言和openEuler交互,启发式的运维。 + + 相关使用方式请参考《[EulerCopilot-智能问答使用指南](https://gitee.com/openeuler/docs/blob/stable2-22.03_LTS_SP4/docs/zh/docs/AI/EulerCopilot-%E6%99%BA%E8%83%BD%E9%97%AE%E7%AD%94%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97.md)》。 + +## AI for Compiler + +AI For Compiler框架接受编译器相关信息作为输入,在框架内部进行编译器信息解析和ONNX环境准备之后,向ONNX模型发送推理请求。ONNX模型将根据编译器信息进行推理,并将推理结果返回AI For Compiler框架。AI For Compiler框架对推理结果进行解析、处理,将处理后的结果返回编译器,用于指导多种优化手段的实施。 + +## openEuler Embedded + + openEuler Embedded 围绕工业和机器人领域持续深耕,通过行业项目垂直打通,不断完善和丰富嵌入式技术栈和生态。openEuler 22.03 LTS SP4 Embedded 支持嵌入式虚拟化弹性底座,提供 Jailhouse 虚拟化方案、openAMP 轻量化混合部署方案,用户可以根据自己的使用场景选择最优的部署方案。同时支持 ROS humble 版本,集成 ros-core、ros-base、SLAM 等核心软件包,满足 ROS2 运行时要求。未来 openEuler Embedded 将协同 openEuler 社区生态伙伴、用户、开发者,逐步扩展支持 RISC-V、龙芯等芯片架构,丰富工业中间件、ROS 中间件、仿真系统等能力,打造嵌入式领域操作系统解决方案。 + +- **南向生态**: openEuler Embedded 22.03 LTS SP4当前主要支持 ARM64、x86-64 两种芯片架构,未来openEuler Embedded Linux还将支持龙芯、飞腾等芯片。 +- **嵌入式弹性虚拟化底座** :openEuler Embedded的弹性虚拟化底座是为了在多核片上系统(SoC, System On Chip)上实现多个操作系统共同运行的一系列技术的集合,包含了裸金属、嵌入式虚拟化、轻量级容器、LibOS、可信执行环境(TEE)、异构部署等多种实现形态。 +- **混合关键性部署框架**: openEuler Embedded打造了构建在融合弹性底座之上混合关键性部署框架,并命名为MICA(MIxed CriticAlity),旨在通过一套统一的框架屏蔽下层弹性底座形态的不同,从而实现Linux和其他OS运行时便捷地混合部署。依托硬件上的多核能力使得通用的Linux和专用的实时操作系统有效互补,从而达到全系统兼具两者的特点,并能够灵活开发、灵活部署。 +- **北向生态**:600+嵌入式领域常用软件包的构建;支持ROS2 humble版本,集成ros-core、ros-base、SLAM 等核心包,并提供软实时能力,软实时中断响应时延微秒级。 +- **UniProton硬实时系统**:是一款实时操作系统,具备极致的低时延和灵活的混合关键性部署特性,可以适用于工业控制场景,既支持微控制器 MCU,也支持算力强的多核 CPU。目前关键能力如下: + - 支持Cortex-M、Arm64、x86_64架构,支持M4、RK3568、RK3588、x86_64、Hi3093、树莓派4B。 + - 支持树莓派4B、Hi3093、RK3588、x86_64设备上通过裸金属模式和openEuler Embedded Linux混合部署。 + - 支持通过gdb在openEuler Embedded Linux侧远程调试。 + - 支持890+ POSIX接口,支持文件系统、设备管理、shell控制台和网络。 + +## openEuler 内核新特性 + +openEuler 22.03 LTS SP4 基于 Linux Kernel 5.10 构建,在此基础上,同时吸收了社区高版本的有益特性及社区创新特性。 + +### 体系结构 + +- 支持CPU在线巡检:静默数据损坏(SDC)可能导致数据丢失和数据被破坏。通过执行巡检指令,发现存在静默故障的核,提前对故障核进行隔离,避免出现更严重的故障,提高系统可靠性。 +- 自适应NUMA特性:随着摩尔定律放缓,硬件架构Scale-up的收益空间收窄,需要解决资源“locality”的问题,Scale-out是硬件架构的主要发展方向。对于NUMA架构而言,跨NUMA访存时延相比本地访存时延大大增加,而linux操作系统以吞吐为中心,强调负载均衡,打破全局跨NUMA访存最优的状态。本特性是以业务亲缘关系为中心的负载均衡机制:突破Linux调度模型中负载均衡的约束,以亲缘关系为中心,在资源未达到瓶颈时,将具有亲缘关系的任务packing在一起,减少跨NUMA访存。 + + 主要技术点包含如下: + 1. 感知亲缘关系:通过软硬协同,感知线程间网络、内存的亲缘关系。 + 2. 感知资源瓶颈:基于NUMA维度的资源瓶颈感知,感知NUMA资源是否达到瓶颈。 + 3. 优化选核和负载均衡机制:基于可编程调度的框架,突破linux原有负载均衡约束,决策NUMA内还是NUMA 间调度,在没有资源瓶颈前提下,将具有亲缘关系的任务调度到相同NUMA上。 + +- xfs atomic write特性:数据库(如MySQL的InnoDB存储引擎)使用Doublewrite机制,写2次16KB数据到磁盘,来保护故障场景下数据不受部分写损坏的影响。xfs atomic write特性基于硬件的原子写能力,通过保证用户态软件发起的Direct IO原子性写入磁盘,可以替代数据库Doublewrite机制,以减少IO写数量,提升数据库的写入性能。 + +- 增强核隔离特性:在HPC场景,由于每个线程会频繁进行同步,OS背景噪声对性能的影响会随着节点数增多逐步放大,OS背景噪声包括背景守护进程、外设中断、内核背景线程等。增强核隔离特性将系统CPU分为housekeeping CPU和non-housekeeping CPU,将OS背景噪声集中在housekeeping CPU上,non-housekeeping CPU只运行业务计算任务,通过减少业务运行时背景噪声的干扰,提升业务性能。non-housekeeping CPU可以通过启动参数nohz_full和isolcpus指定,增加enhanced_isolcpus参数后可以进一步消除磁盘IO的噪声干扰。详情可参考文档 [kernel-parameters.txt](https://gitee.com/openeuler/kernel/blob/openEuler-22.03-LTS/Documentation/admin-guide/kernel-parameters.txt)。 + +### 调度 + +支持功耗感知调度:在面向业务层面收集访存带宽,CPU负载等数据,确保业务关键线程资源得到满足。引入物理拓扑,调压域感知新的维度,减少单DIE调频、单DIE调压带来的调频降功耗的局限,保障在低负载下能最小化功耗。具体如下: + +1. 根据物理拓扑构建逃逸通道,根据CPU负载和访存带宽瓶颈自动调节节能级别,低负载集中业务减少功耗,高负载扩散业务的策略保证QOS。 +2. 定时器收集负载,带宽等信息,感知访存带宽,避免跨DIE访问。 +3. OS新增调压域、idle静态功耗感知、业务标签等机制,实现智能感知调频、CPU idle、DVFS,来优化业务性能。 +4. 提供一套任务标签化的机制来为每个用户态进程来标注自己的QoS等级,并且支持将标记为不同优先等级的任务分别绑定到不同的分区上进行调度,以此来保证业务QoS,每个QoS的功耗策略也可以通过cpufreq模块进行配置,以达到不影响业务QoS的前提下保障节能的需求。 + +### 内存 + +- **cgroup粒度的KSM使能增强**:通过memory.ksm接口为memcg中的进程使能KSM时,仅配置已在memcg中的进程,后续新加入memcg的进程不会自动使能KSM,需要重新调用该接口使能。该特性支持memcg的KSM状态位,向memory.ksm接口写入1后,新加入memcg的进程自动使能KSM,简化了为进程使能KSM的操作。 +- **支持地址随机化区域指定**:内核增加CONFIG_NOKASLR_MEM_RANGE选项,允许用户指定至多4个物理内存区域,系统在启动时避开这4个内存区域进行物理地址随机化。arm64和x86_64架构的物理地址随机化支持从启动参数指定不随机化的范围,避免跟kdump预留内存冲突,解决内存多占用导致内存不足问题。 +- **bufferio限速自动绑定memcg和blkcg**:该特性由美团贡献到openEuler社区。当前,cgroup v1中的子系统独立,无法协同工作,如blkio cgroup在限制资源时无法感知memory cgroup中的资源使用,需手动创建映射关系。改进特性允许在内核态自动绑定同一进程的blkio cgroup和memory cgroup映射关系。用户可在编译阶段通过CONFIG_CGROUP_V1_BIND_BLKCG_MEMCG开关选择启用,也可在系统运行时通过sysctl_bind_memcg_blkcg_enable动态开关调整。 + +### 虚拟化 + +- **KVM TDP MMU**:该特性由Intel贡献到openEuler社区,是Linux 5.10之后,内存虚拟化领域中用于提升KVM可扩展性的一个改进方案。相对于传统的KVM MMU,TDP MMU提供了更高效的并发Page Fault处理机制,从而使得KVM对大型虚拟机(多vCPU,大内存)有了更好的支持。同时,通过采用新的EPT/NPT遍历接口,KVM TDP MMU摒弃了传统内存虚拟化中对rmap数据结构的依赖,使得主机内存有了更好的利用率。继openEuler 22.03-SP3中提供了Linux 5.10至5.15版本的KVM TDP MMU支持之后,openEuler 22.03-SP4版本增加了Linux 5.15至6.2版本间对KVM MMU的后续优化和bugfix,如提供优化大幅降低KVM MMU unloading的次数以及unloading的流程,优化KVM MMU page fault的处理流程,以及memslot更新时的相关优化等。 +- **Dirty ring**:该特性由麒麟软件贡献到openEuler社区。原始内核中对vcpu访问内存⻚的统计是通过dirty bitmap来实现的,dirty bitmap的统计粒度是⼀个kvm_mem_slot。而dirty ring的统计粒度更细,可以精确到⼀个vcpu甚⾄⼀个内存⻚,并且统计可以在⽤⼾空间进⾏,dirty ring的扩展性较好,可以在⼤内存规格的虚机上开启此特性。 + +## NestOS 容器操作系统 + +NestOS是在openEuler社区孵化的云底座操作系统,集成了rpm-ostree支持、ignition配置等技术。采用双根文件系统、原子化更新的设计思路,使用nestos-assembler快速集成构建,并针对K8S、OpenStack等平台进行适配,优化容器运行底噪,使系统具备十分便捷的集群组建能力,可以更安全的运行大规模的容器化工作负载。 + +1. **开箱即用的容器平台**:NestOS集成适配了iSulad、Docker、Podman等主流容器引擎,为用户提供轻量级、定制化的云场景OS。 +2. **简单易用的配置过程**:NestOS通过ignition技术,可以以相同的配置方便地完成大批量集群节点的安装配置工作。 +3. **安全可靠的包管理**:NestOS使用rpm-ostree进行软件包管理,搭配openEuler软件包源,确保原子化更新的安全稳定状态。 +4. **友好可控的更新机制**:NestOS使用zincati提供自动更新服务,可实现节点自动更新与重新引导,实现集群节点有序升级而服务不中断。 +5. **紧密配合的双根文件系统**:NestOS采用双根文件系统的设计实现主备切换,确保NestOS运行期间的完整性与安全性。 + +## 机密计算远程证明服务:远程证明TEE插件框架 + +随着机密计算的逐渐成熟,机密计算硬件众多,信任根及远程证明差异,成为阻塞TEE之间建立信任关系的关键,构建远程证明统一框架,提供证明代理、TEE插件框架等组件,实现不同TEE证明报告统一验证流程。 + +- 当前版本证明代理支持鲲鹏Trustzone、virtCCA证明报告获取。 +- TEE报告校验插件框架支持运行时兼容鲲鹏Trustzone、virtCCA证明报告验证,并支持证明代理集成TEE报告校验插件框架,实现无证明服务时的点对点验证。 + +## DPU 场景 vDPA 新增支持磁盘,并支持配置vDPA网卡和磁盘的虚机热迁移 + +内核态vDPA框架,为设备虚拟化提供了一种性能与直通持平,且支持跨硬件厂商热迁移的方案。新增对于DPU卡形态的硬件支持,支持DPU卡呈现给前端主机的网络/存储设备,接入通用vDPA框架,并支持热迁移。 + +DPU场景vDPA需求继承openEuler 2203 LTS SP1/SP3支持vDPA网卡设备以及支持vDPA网卡直通热迁移特性。新增支持对于DPU卡形态呈现存储设备的支持,并继承支持vDPA磁盘直通热迁移特性。详细范围说明如下: + +- 支持虚拟机配置vDPA磁盘作为数据盘。 +- 支持虚拟机热插拔vDPA磁盘。 +- 支持同时配置vDPA网卡和vDPA磁盘热迁移。 + +## virtCCA 机密虚机特性合入 + +virtCCA机密虚机特性在TEE侧实现机密虚机能力,实现现有普通虚机中的软件栈无缝迁移到机密环境中。 + +基于Arm CCA标准接口,在Trustzone固件基础上构建TEE虚拟化管理模块,实现机密虚机间的内存隔离、上下文管理、生命周期管理和页表管理等机制,支持客户应用无缝迁移到机密计算环境中。 + +**技术约束:** + +1. 机密虚机每次启动需要对Guest Kernel等内存信息进行度量,因此不支持reboot能力. +2. 基于安全性考虑,宿主机BIOS中CPU超线程需要关闭。 + +## PowerAPI 功耗管理统一API + +PowerAPI是一组用于支持系统功率管理的 API,它们提供了一种标准化方法来管理系统的功率使用情况,包括监控,调整和优化系统的功率消耗。这些 API 可以帮助系统管理员更好地管理系统的能源消耗,从而提升系统的效率和可靠性,并减少能源成本。 + +PowerAPI含pwrapis服务程序和libpwrapi.so动态库。PowerAPI实际上是对OS提供的各类接口的统一封装,方便上层管理软件对功耗进行统一管理,其目标为: + +- 屏蔽底层sci/sysfs/procs/impi等接口差异,屏蔽平台差异。 +- 屏蔽功耗管理场景下,root特权需求(如集群代理Agent不要求采用root用户运行)。 + +**PowerAPI接口已提供功能:** + +- 数据采集:系统功耗、CPU利用率、LLC cache Miss等。 +- CPU调频、CPU休眠管理。 +- 瓦特调度管理、分域调度管理 。 + +## eagle 实现整机能耗管理 + +Eagle(Energy Aware intelliGent scheduler)智能功耗感知调节器是一个以提升能效为目标的调优服务。用户可通过配置策略的方式,让eagle实现整机功耗管理,进而提升能效,实现降本增效。Eagle基于PowerAPI构建,实现基于策略的能效调优。 + +1. **调优策略**:用户可根据业务情况,定制调优策略。 +2. **智能场景感知功耗调节**:eagle通过powerapi实时感知并结合场景特点(CPU密集/访存密集/时延敏感),应用优先级,通过智能调度、调频、Turbo、休眠等调节手段,保证业务体验的前提下,自适应地实现能效最优。 + - 基于能效域的智能调度:通过划分能效域,按需激活资源、均衡调度、智能Turbo等实现能效最优。 + - 性能损失可控的调频:通过实时感知业务性能变化,严格控制CPU调频导致的性能下降。 + - 更精确的智能休眠:实时感知业务特点,制定更适合业务的CPU、外设休眠策略。 + - 多维度功耗封顶控制:在功耗限额下,通过多维度、多设备的控制,保证高优先级应用的前提下,实现能效最优。 + - 基于预测的风扇调速: 通过建模,智能预测整机热变化,风扇提前响应,提升整机热可靠性,节省能耗。 +3. **人机交互**:管理员可通过eagle-CLI实时监控系统状态,或对调优策略等进行配置。 + +## gala-ragdoll 支持配置变更溯源 + +利用ragdoll内部插件ragdoll-filetrace可以实现对配置文件的实时监控,当配置文件被修改的时候,会抓取操作文件的系统调用的信息保存到mysql数据库表中,ragdoll通过接口形式将数据库的数据提供给aops-hermes,用户可以在页面端查看配置文件的变更信息,比如:修改时间,修改方式,进程名称。目前可以支持监控系统中常用文本编辑工具,比如vi/vim、sed、echo、mv等。 diff --git a/docs/zh/server/releasenotes/known_issues.md b/docs/zh/server/releasenotes/known_issues.md new file mode 100644 index 0000000000000000000000000000000000000000..135b5f8b8c69e619838713a581839f4fa384832a --- /dev/null +++ b/docs/zh/server/releasenotes/known_issues.md @@ -0,0 +1,12 @@ +# 已知问题 + +已知问题请参见[表1](#tableyizhiwenti)。 + +**表 1** 已知问题列表 + +|ISSUE ID|ISSUE 路径|问题描述|关联仓库| +|-|-|-|-| +| I9SUAT | | 【22.03_SP4_RC1_epol】【arm\x86】smartpqi安装过程有报错信息 | SmartHBA-2100-8i-driver | +| I9SUFH | | 【22.03_SP4_RC1_epol】【arm\x86】smartpqi卸载过程有报错信息 | SmartHBA-2100-8i-driver | +| I9T8KS | | 【22.03_SP4_RC1_epol】【arm\x86】smartpqi升级过程存在报错信息 | SmartHBA-2100-8i-driver | +| I9UXE5 | | 【22.03_SP4_RC2_everything】opengauss升级失败 | opengauss-server | diff --git a/docs/zh/server/releasenotes/os_installation.md b/docs/zh/server/releasenotes/os_installation.md new file mode 100644 index 0000000000000000000000000000000000000000..dc5dc583118f52b31d4207f5fbf171494ac0dd2e --- /dev/null +++ b/docs/zh/server/releasenotes/os_installation.md @@ -0,0 +1,323 @@ +# 系统安装 + +## 发布件 + +openEuler发布件包括[ISO发布包](http://repo.openeuler.org/openEuler-22.03-LTS-SP4/ISO/)、[虚拟机镜像](http://repo.openeuler.org/openEuler-22.03-LTS-SP4/virtual_machine_img/)、[容器镜像](http://repo.openeuler.org/openEuler-22.03-LTS-SP4/docker_img/)、[嵌入式镜像](http://repo.openeuler.org/openEuler-22.03-LTS-SP4/embedded_img/)和[repo源](http://repo.openeuler.org/openEuler-22.03-LTS-SP4/)。 + +**表 1** 发布ISO列表 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

描述

+

openEuler-22.03-LTS-SP4-aarch64-dvd.iso

+

AArch64架构的基础安装ISO,包含了运行最小系统的核心组件

+

openEuler-22.03-LTS-SP4-everything-aarch64-dvd.iso

+

AArch64架构的全量安装ISO,包含了运行完整系统所需的全部组件

+

openEuler-22.03-LTS-SP4-everything-debug-aarch64-dvd.iso

+

AArch64架构下openEuler的调试ISO,包含了调试所需的符号表信息

+

openEuler-22.03-LTS-SP4-x86_64-dvd.iso

+

x86_64架构的基础安装ISO,包含了运行最小系统的核心组件

+

openEuler-22.03-LTS-SP4-everything-x86_64-dvd.iso

+

x86_64架构的全量安装ISO,包含了运行完整系统所需的全部组件

+

openEuler-22.03-LTS-SP4-everything-debuginfo-x86_64-dvd.iso

+

x86_64架构下openEuler的调试ISO,包含了调试所需的符号表信息

+

openEuler-22.03-LTS-SP4-source-dvd.iso

+

openEuler源码ISO

+

openEuler-22.03-LTS-SP4-edge-aarch64-dvd.iso

+

AArch64架构的边缘ISO,包含了运行最小系统的核心组件

+

openEuler-22.03-LTS-SP4-edge-x86_64-dvd.iso

+

x86_64架构的边缘ISO,包含了运行最小系统的核心组件

+

openEuler-22.03-LTS-loongarch64-dvd-beta4.iso

+

loong架构的基础安装ISO,包含了运行最小系统的核心组件

+

openEuler-22-03-LTS-ppc64le-dvd-alpha.iso

+

ppc64le架构的基础安装ISO,包含了运行最小系统的核心组件

+

openEuler-Server-OS-isoe-sw_64-20221227.iso

+

sw_64架构的基础安装ISO,包含了运行最小系统的核心组件

+
+ +**表 2** 虚拟机镜像 + + + + + + + + + + + + + + +

名称

+

描述

+

openEuler-22.03-LTS-SP4-aarch64.qcow2.xz

+

AArch64架构下openEuler虚拟机镜像

+

openEuler-22.03-LTS-SP4-x86_64.qcow2.xz

+

x86_64架构下openEuler虚拟机镜像

+
+ +>![](./public_sys-resources/icon-note.gif) **说明:** +>注意选择以上openEuler任何一个镜像均不能预装桌面环境或gui界面,openEuler默认没有该部分,如需要请参考《桌面环境》部分,尤其是离线安装系统的情况请务必提前在联网情况下离线桌面环境或者gui界面的依赖包,仅凭iso镜像离线无法安装桌面环境或者gui界面。 +>虚拟机镜像root用户默认密码为:openEuler12\#$,首次登录后请及时修改。 + +**表 3** 容器镜像列表 + + + + + + + + + + + + + + + + + + + +

名称

+

描述

+

openEuler-docker.aarch64.tar.xz

+

AArch64架构下openEuler容器镜像

+

openEuler-docker.x86_64.tar.xz

+

x86_64架构下openEuler容器镜像

+

openEuler-22.03-LTS-SP4-stratovirt-aarch64.img.xz

+

AArch64架构下openEuler stratovirt容器镜像

+

openEuler-22.03-LTS-SP4-stratovirt-x86_64.img.xz

+

x86_64架构下openEuler stratovirt容器镜像

+
+ +**表 4** 嵌入式镜像列表 + +| 名称 | 描述 | +| -------------------------------------- | ------------------------------- | +| arm64/aarch64-std/zImage | AArch64架构下支持qemu的内核镜像 | +| arm64/aarch64-std/\*toolchain-22.03.sh | AArch64架构下对应的开发编译链 | +| arm64/aarch64-std/\*rootfs.cpio.gz | AArch64架构下支持qemu的文件系统 | +| arm32/arm-std/zImage | Arm架构下支持qemu的内核镜像 | +| arm32/arm-std/\*toolchain-22.03.sh | Arm架构下对应的开发编译链 | +| arm32/arm-std/\*rootfs.cpio.gz | Arm架构下支持qemu的文件系统 | +| source-list/manifest.xml | 构建使用的源码清单 | + +**表 5** repo源列表 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

目录

+

描述

+

ISO

+

存放ISO镜像

+

OS

+

存放基础软件包源

+

debuginfo

+

存放调试包源

+

docker_img

+

存放容器镜像

+

virtual_machine_img

+

存放虚拟机镜像

+

embedded_img

+

存放嵌入式镜像

+

everything

+

存放全量软件包源

+

extras

+

存放扩展软件包源

+

source

+

存放源码软件源

+

update

+

存放升级软件包源

+

EPOL

+

存放openEuler扩展包

+
+ +## 最小硬件要求 + +安装 openEuler 22.03-LTS-SP4 所需的最小硬件要求如[表6](#zh-cn_topic_0182825778_tff48b99c9bf24b84bb602c53229e2541)所示。 + +**表 6** 最小硬件要求 + + + + + + + + + + + + + + + + +

部件名称

+

最小硬件要求

+

CPU

+

鲲鹏 920(架构为AArch64)

+

x86_64(Skylake以上)

+

内存

+

不小于4GB(为了获得更好的应用体验,建议不小于8GB)

+

硬盘

+

不小于120GB

+
+ +## 硬件兼容性 + +openEuler已验证支持的服务器和各部件典型配置请参见[表7](#zh-cn_topic_0227922427_table39822012)。openEuler后续将逐步增加对其他服务器的支持,也欢迎广大合作伙伴/开发者参与贡献和验证。openEuler当前支持的服务器可见[兼容性列表](https://www.openeuler.org/zh/compatibility/)。 + +**表 7** 支持的服务器及典型配置 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

厂商

+

服务器名称

+

服务器具体型号

+

部件名称

+

典型配置

+

华为

+

TaiShan 200

+

2280均衡型

+

CPU

+

Kunpeng 920

+

内存

+

32G*4 2933MHz

+

RAID卡

+

LSI SAS3508

+

网络

+

SF221Q

+

华为

+

FusionServer Pro

+

2288H V5(机架服务器)

+

CPU

+

Intel(R) Xeon(R) Gold 5118 CPU @ 2.30GHz

+

内存

+

32G*4 2400MHz

+

RAID卡

+

LSI SAS3508

+

网络

+

X722

+
diff --git a/docs/zh/server/releasenotes/public_sys-resources/icon-caution.gif b/docs/zh/server/releasenotes/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/releasenotes/public_sys-resources/icon-caution.gif differ diff --git a/docs/zh/server/releasenotes/public_sys-resources/icon-danger.gif b/docs/zh/server/releasenotes/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/releasenotes/public_sys-resources/icon-danger.gif differ diff --git a/docs/zh/server/releasenotes/public_sys-resources/icon-note.gif b/docs/zh/server/releasenotes/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/server/releasenotes/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/server/releasenotes/public_sys-resources/icon-notice.gif b/docs/zh/server/releasenotes/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/server/releasenotes/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/server/releasenotes/public_sys-resources/icon-tip.gif b/docs/zh/server/releasenotes/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/zh/server/releasenotes/public_sys-resources/icon-tip.gif differ diff --git a/docs/zh/server/releasenotes/public_sys-resources/icon-warning.gif b/docs/zh/server/releasenotes/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/releasenotes/public_sys-resources/icon-warning.gif differ diff --git a/docs/zh/server/releasenotes/release_notes.md b/docs/zh/server/releasenotes/release_notes.md new file mode 100644 index 0000000000000000000000000000000000000000..9cdea7135e5aa86fa0928320deaf086b947560c4 --- /dev/null +++ b/docs/zh/server/releasenotes/release_notes.md @@ -0,0 +1,3 @@ +# 发行说明 + +本文档是 openEuler 22.03 LTS SP4版本的发行说明。 diff --git a/docs/zh/server/releasenotes/resoluved_issues.md b/docs/zh/server/releasenotes/resoluved_issues.md new file mode 100644 index 0000000000000000000000000000000000000000..d6b47b57b06630d7af36525bb1376e8bf6e0930b --- /dev/null +++ b/docs/zh/server/releasenotes/resoluved_issues.md @@ -0,0 +1,219 @@ +# 已修复问题 + +完整问题清单请参见[完整问题清单](https://gitee.com/organizations/src-openeuler/issues)。 + +完整的内核提交记录请参见[提交记录](https://gitee.com/openeuler/kernel/commits/openEuler-22.03-LTS-SP4)。 + +已修复问题请参见[表1](#table2204014971491143)。 + +**表 1** 修复问题列表 + +|ISSUE ID|ISSUE 路径|问题描述|关联仓库| +|-|-|-|-| +| I9RF7L | | 【Eulermaker】octave在工程openEuler-22.03-LTS-SP4:epol构建失败 | octave | +| I9S7JR | | 【Eulermaker】dde-network-core在工程openEuler-22.03-LTS-SP4:epol构建失败 | dde-network-core | +| I9S7JY | | 【Eulermaker】glib2在工程openEuler-22.03-LTS-SP4:everything构建问题 | glib2 | +| I9SJPV | | 【22.03-LTS-SP4-rc1】dpu-utilities 包在22.03-SP4中相比22.03-SP3 version版本降级 | dpu-utilities | +| I9SJPX | | 【22.03-LTS-SP4-rc1】oemaker 包在22.03-SP4中相比22.03-SP3 version版本降级 | oemaker | +| I9SJPZ | | 【22.03-LTS-SP4-rc1】llvm-bolt 包在22.03-SP4中相比22.03-SP3 version版本降级 | llvm-bolt | +| I9SJQ0 | | 【22.03-LTS-SP4-rc1】hadoop 包在22.03-SP4中相比22.03-SP3 version版本降级 | hadoop | +| I9SJQ2 | | 【22.03-LTS-SP4-rc1】openEuler-release 包在22.03-SP4中相比22.03-SP3 version版本降级 | openEuler-release | +| I9SJQ3 | | 【22.03-LTS-SP4-rc1】dde-session-shell 包在22.03-SP4中相比22.03-SP3 version版本降级 | dde-session-shell | +| I9SJQ4 | | 【22.03-LTS-SP4-rc1】dde 包在22.03-SP4中相比22.03-SP3 version版本降级 | dde | +| I9SJQ5 | | 【22.03-LTS-SP4-rc1】dtkgui 包在22.03-SP4中相比22.03-SP3 version版本降级 | dtkgui | +| I9SJQ6 | | 【22.03-LTS-SP4-rc1】dtkcore 包在22.03-SP4中相比22.03-SP3 version版本降级 | dtkcore | +| I9SJQ9 | | 【22.03-LTS-SP4-rc1】deepin-anything 包在22.03-SP4中相比22.03-SP3 version版本降级 | deepin-anything | +| I9SJQB | | 【22.03-LTS-SP4-rc1】dde-kwin 包在22.03-SP4中相比22.03-SP3 version版本降级 | dde-kwin | +| I9SJQD | | 【22.03-LTS-SP4-rc1】libmetal 包在22.03-SP4中相比22.03-SP3 version版本降级 | libmetal | +| I9SJQE | | 【22.03-LTS-SP4-rc1】dde-qt-dbus-factory 包在22.03-SP4中相比22.03-SP3 version版本降级 | dde-qt-dbus-factory | +| I9SJQF | | 【22.03-LTS-SP4-rc1】deepin-compressor 包在22.03-SP4中相比22.03-SP3 version版本降级 | deepin-compressor | +| I9SJQH | | 【22.03-LTS-SP4-rc1】dde-clipboard 包在22.03-SP4中相比22.03-SP3 version版本降级 | dde-clipboard | +| I9SJQI | | 【22.03-LTS-SP4-rc1】deepin-image-editor 包在22.03-SP4中相比22.03-SP3 version版本降级 | deepin-image-editor | +| I9SJQL | | 【22.03-LTS-SP4-rc1】dde-control-center 包在22.03-SP4中相比22.03-SP3 version版本降级 | dde-control-center | +| I9SJQN | | 【22.03-LTS-SP4-rc1】deepin-wallpapers 包在22.03-SP4中相比22.03-SP3 version版本降级 | deepin-wallpapers | +| I9SJQO | | 【22.03-LTS-SP4-rc1】dde-session-ui 包在22.03-SP4中相比22.03-SP3 version版本降级 | dde-session-ui | +| I9SJQP | | 【22.03-LTS-SP4-rc1】deepin-gtk-theme 包在22.03-SP4中相比22.03-SP3 version版本降级 | deepin-gtk-theme | +| I9SJQQ | | 【22.03-LTS-SP4-rc1】deepin-log-viewer 包在22.03-SP4中相比22.03-SP3 version版本降级 | deepin-log-viewer | +| I9SJQS | | 【22.03-LTS-SP4-rc1】deepin-devicemanager 包在22.03-SP4中相比22.03-SP3 version版本降级 | deepin-devicemanager | +| I9SJQU | | 【22.03-LTS-SP4-rc1】deepin-system-monitor 包在22.03-SP4中相比22.03-SP3 version版本降级 | deepin-system-monitor | +| I9SJQW | | 【22.03-LTS-SP4-rc1】deepin-screen-recorder 包在22.03-SP4中相比22.03-SP3 version版本降级 | deepin-screen-recorder | +| I9SJQY | | 【22.03-LTS-SP4-rc1】dtkcommon 包在22.03-SP4中相比22.03-SP3 version版本降级 | dtkcommon | +| I9SJQZ | | 【22.03-LTS-SP4-rc1】deepin-default-settings 包在22.03-SP4中相比22.03-SP3 version版本降级 | deepin-default-settings | +| I9SJR1 | | 【22.03-LTS-SP4-rc1】dde-api 包在22.03-SP4中相比22.03-SP3 version版本降级 | dde-api | +| I9SJR2 | | 【22.03-LTS-SP4-rc1】deepin-gettext-tools 包在22.03-SP4中相比22.03-SP3 version版本降级 | deepin-gettext-tools | +| I9SJR3 | | 【22.03-LTS-SP4-rc1】startdde 包在22.03-SP4中相比22.03-SP3 version版本降级 | startdde | +| I9SJR5 | | 【22.03-LTS-SP4-rc1】deepin-icon-theme 包在22.03-SP4中相比22.03-SP3 version版本降级 | deepin-icon-theme | +| I9SJR6 | | 【22.03-LTS-SP4-rc1】deepin-terminal 包在22.03-SP4中相比22.03-SP3 version版本降级 | deepin-terminal | +| I9SJR8 | | 【22.03-LTS-SP4-rc1】dde-daemon 包在22.03-SP4中相比22.03-SP3 version版本降级 | dde-daemon | +| I9SJRA | | 【22.03-LTS-SP4-rc1】deepin-desktop-schemas 包在22.03-SP4中相比22.03-SP3 version版本降级 | deepin-desktop-schemas | +| I9SJRB | | 【22.03-LTS-SP4-rc1】dde-file-manager 包在22.03-SP4中相比22.03-SP3 version版本降级 | dde-file-manager | +| I9SJRC | | 【22.03-LTS-SP4-rc1】deepin-editor 包在22.03-SP4中相比22.03-SP3 version版本降级 | deepin-editor | +| I9SJRD | | 【22.03-LTS-SP4-rc1】dde-launcher 包在22.03-SP4中相比22.03-SP3 version版本降级 | dde-launcher | +| I9SJRF | | 【22.03-LTS-SP4-rc1】deepin-menu 包在22.03-SP4中相比22.03-SP3 version版本降级 | deepin-menu | +| I9SJRG | | 【22.03-LTS-SP4-rc1】dde-polkit-agent 包在22.03-SP4中相比22.03-SP3 version版本降级 | dde-polkit-agent | +| I9SJRH | | 【22.03-LTS-SP4-rc1】dde-dock 包在22.03-SP4中相比22.03-SP3 version版本降级 | dde-dock | +| I9SJRJ | | 【22.03-LTS-SP4-rc1】deepin-pw-check 包在22.03-SP4中相比22.03-SP3 version版本降级 | deepin-pw-check | +| I9SJRL | | 【22.03-LTS-SP4-rc1】dtkwidget 包在22.03-SP4中相比22.03-SP3 version版本降级 | dtkwidget | +| I9SJRM | | 【22.03-LTS-SP4-rc1】dde-calendar 包在22.03-SP4中相比22.03-SP3 version版本降级 | dde-calendar | +| I9SJZK | | 【22.03-LTS-SP4-rc1】ctags 包在22.03-SP4中相比22.03-SP3 release版本降级 | ctags | +| I9SJZN | | 【22.03-LTS-SP4-rc1】protobuf2 包在22.03-SP4中相比22.03-SP3 release版本降级 | protobuf2 | +| I9SJZP | | 【22.03-LTS-SP4-rc1】exempi 包在22.03-SP4中相比22.03-SP3 release版本降级 | exempi | +| I9SJZR | | 【22.03-LTS-SP4-rc1】virt-manager 包在22.03-SP4中相比22.03-SP3 release版本降级 | virt-manager | +| I9SJZS | | 【22.03-LTS-SP4-rc1】python-mako 包在22.03-SP4中相比22.03-SP3 release版本降级 | python-mako | +| I9SJZT | | 【22.03-LTS-SP4-rc1】gcc 包在22.03-SP4中相比22.03-SP3 release版本降级 | gcc | +| I9SJZU | | 【22.03-LTS-SP4-rc1】python-bottle 包在22.03-SP4中相比22.03-SP3 release版本降级 | python-bottle | +| I9SJZV | | 【22.03-LTS-SP4-rc1】dbus 包在22.03-SP4中相比22.03-SP3 release版本降级 | dbus | +| I9SJZW | | 【22.03-LTS-SP4-rc1】libcxxabi 包在22.03-SP4中相比22.03-SP3 release版本降级 | libcxxabi | +| I9SJZX | | 【22.03-LTS-SP4-rc1】sqlite 包在22.03-SP4中相比22.03-SP3 release版本降级 | sqlite | +| I9SJZY | | 【22.03-LTS-SP4-rc1】linuxdoc-tools 包在22.03-SP4中相比22.03-SP3 release版本降级 | linuxdoc-tools | +| I9SK02 | | 【22.03-LTS-SP4-rc1】groovy 包在22.03-SP4中相比22.03-SP3 release版本降级 | groovy | +| I9SK03 | | 【22.03-LTS-SP4-rc1】libwd 包在22.03-SP4中相比22.03-SP3 release版本降级 | libwd | +| I9SK04 | | 【22.03-LTS-SP4-rc1】python-imagesize 包在22.03-SP4中相比22.03-SP3 release版本降级 | python-imagesize | +| I9SK05 | | 【22.03-LTS-SP4-rc1】storm 包在22.03-SP4中相比22.03-SP3 release版本降级 | storm | +| I9SK06 | | 【22.03-LTS-SP4-rc1】perl 包在22.03-SP4中相比22.03-SP3 release版本降级 | perl | +| I9SK08 | | 【22.03-LTS-SP4-rc1】scap-security-guide 包在22.03-SP4中相比22.03-SP3 release版本降级 | scap-security-guide | +| I9SK0A | | 【22.03-LTS-SP4-rc1】redis6 包在22.03-SP4中相比22.03-SP3 release版本降级 | redis6 | +| I9SK0B | | 【22.03-LTS-SP4-rc1】gradle 包在22.03-SP4中相比22.03-SP3 release版本降级 | gradle | +| I9SK0D | | 【22.03-LTS-SP4-rc1】libkae 包在22.03-SP4中相比22.03-SP3 release版本降级 | libkae | +| I9SK0E | | 【22.03-LTS-SP4-rc1】sysget 包在22.03-SP4中相比22.03-SP3 release版本降级 | sysget | +| I9SK0G | | 【22.03-LTS-SP4-rc1】libsrtp 包在22.03-SP4中相比22.03-SP3 release版本降级 | libsrtp | +| I9SK0I | | 【22.03-LTS-SP4-rc1】python-beaker 包在22.03-SP4中相比22.03-SP3 release版本降级 | python-beaker | +| I9SK0J | | 【22.03-LTS-SP4-rc1】unixODBC 包在22.03-SP4中相比22.03-SP3 release版本降级 | unixODBC | +| I9SK0K | | 【22.03-LTS-SP4-rc1】pytorch 包在22.03-SP4中相比22.03-SP3 release版本降级 | pytorch | +| I9SK0O | | 【22.03-LTS-SP4-rc1】groovy18 包在22.03-SP4中相比22.03-SP3 release版本降级 | groovy18 | +| I9SK0Q | | 【22.03-LTS-SP4-rc1】llvm-libunwind 包在22.03-SP4中相比22.03-SP3 release版本降级 | llvm-libunwind | +| I9SK0S | | 【22.03-LTS-SP4-rc1】criu 包在22.03-SP4中相比22.03-SP3 release版本降级 | criu | +| I9SK0T | | 【22.03-LTS-SP4-rc1】sysmaster 包在22.03-SP4中相比22.03-SP3 release版本降级 | sysmaster | +| I9SK0U | | 【22.03-LTS-SP4-rc1】python-flask-restful 包在22.03-SP4中相比22.03-SP3 release版本降级 | python-flask-restful | +| I9SK0V | | 【22.03-LTS-SP4-rc1】man-db 包在22.03-SP4中相比22.03-SP3 release版本降级 | man-db | +| I9SK0Y | | 【22.03-LTS-SP4-rc1】python-sphinx-theme-alabaster 包在22.03-SP4中相比22.03-SP3 release版本降级 | python-sphinx-theme-alabaster | +| I9SK0Z | | 【22.03-LTS-SP4-rc1】osinfo-db 包在22.03-SP4中相比22.03-SP3 release版本降级 | osinfo-db | +| I9SK11 | | 【22.03-LTS-SP4-rc1】python-configshell 包在22.03-SP4中相比22.03-SP3 release版本降级 | python-configshell | +| I9SK13 | | 【22.03-LTS-SP4-rc1】libcxx 包在22.03-SP4中相比22.03-SP3 release版本降级 | libcxx | +| I9SK14 | | 【22.03-LTS-SP4-rc1】secGear 包在22.03-SP4中相比22.03-SP3 release版本降级 | secGear | +| I9SK15 | | 【22.03-LTS-SP4-rc1】redis5 包在22.03-SP4中相比22.03-SP3 release版本降级 | redis5 | +| I9SK17 | | 【22.03-LTS-SP4-rc1】openEuler-repos 包在22.03-SP4中相比22.03-SP3 release版本降级 | openEuler-repos | +| I9SK18 | | 【22.03-LTS-SP4-rc1】ft_utils 包在22.03-SP4中相比22.03-SP3 release版本降级 | ft_utils | +| I9SK1A | | 【22.03-LTS-SP4-rc1】dde-introduction 包在22.03-SP4中相比22.03-SP3 release版本降级 | dde-introduction | +| I9SK1C | | 【22.03-LTS-SP4-rc1】deepin-clone 包在22.03-SP4中相比22.03-SP3 release版本降级 | deepin-clone | +| I9SK1D | | 【22.03-LTS-SP4-rc1】shotwell 包在22.03-SP4中相比22.03-SP3 release版本降级 | shotwell | +| I9SK1E | | 【22.03-LTS-SP4-rc1】communication_ipc 包在22.03-SP4中相比22.03-SP3 release版本降级 | communication_ipc | +| I9SK1F | | 【22.03-LTS-SP4-rc1】ft_wl_fwk 包在22.03-SP4中相比22.03-SP3 release版本降级 | ft_wl_fwk | +| I9SK1I | | 【22.03-LTS-SP4-rc1】ft_mmi 包在22.03-SP4中相比22.03-SP3 release版本降级 | ft_mmi | +| I9SK1J | | 【22.03-LTS-SP4-rc1】k3s-containerd 包在22.03-SP4中相比22.03-SP3 release版本降级 | k3s-containerd | +| I9SK1K | | 【22.03-LTS-SP4-rc1】redshift 包在22.03-SP4中相比22.03-SP3 release版本降级 | redshift | +| I9SK1M | | 【22.03-LTS-SP4-rc1】ft_multimedia 包在22.03-SP4中相比22.03-SP3 release版本降级 | ft_multimedia | +| I9SK1N | | 【22.03-LTS-SP4-rc1】k3s 包在22.03-SP4中相比22.03-SP3 release版本降级 | k3s | +| I9SK1O | | 【22.03-LTS-SP4-rc1】deepin-desktop-base 包在22.03-SP4中相比22.03-SP3 release版本降级 | deepin-desktop-base | +| I9SK1P | | 【22.03-LTS-SP4-rc1】ukui-settings-daemon 包在22.03-SP4中相比22.03-SP3 release版本降级 | ukui-settings-daemon | +| I9SK1S | | 【22.03-LTS-SP4-rc1】systemabilitymgr_safwk 包在22.03-SP4中相比22.03-SP3 release版本降级 | systemabilitymgr_safwk | +| I9SK1U | | 【22.03-LTS-SP4-rc1】arkui-linux 包在22.03-SP4中相比22.03-SP3 release版本降级 | arkui-linux | +| I9SK1V | | 【22.03-LTS-SP4-rc1】filemanagement_dfs_service 包在22.03-SP4中相比22.03-SP3 release版本降级 | filemanagement_dfs_service | +| I9SK1W | | 【22.03-LTS-SP4-rc1】migration-tools 包在22.03-SP4中相比22.03-SP3 release版本降级 | migration-tools | +| I9SKC6 | | 【22.03-LTS-SP4-rc1】pyflakes 包在22.03-SP4中相比22.03-SP3 release版本降级 | pyflakes | +| I9SKC7 | | 【22.03-LTS-SP4-rc1】openjdk-latest 包在22.03-SP4中相比22.03-SP3 version版本降级 | openjdk-latest | +| I9SKC9 | | 【22.03-LTS-SP4-rc1】qt5integration 包在22.03-SP4中相比22.03-SP3 version版本降级 | qt5integration | +| I9SKCB | | 【22.03-LTS-SP4-rc1】aops-diana 包在22.03-SP4中相比22.03-SP3 release版本降级 | aops-diana | +| I9SKCC | | 【22.03-LTS-SP4-rc1】qt5dxcb-plugin 包在22.03-SP4中相比22.03-SP3 version版本降级 | qt5dxcb-plugin | +| I9SL18 | | 【22.03-LTS-SP4-rc1】oec-hardware 包在22.03-SP4中相比22.03-SP3 version版本降级 | oec-hardware | +| I9SL90 | | 【22.03-LTS-SP4-rc1】【arm/x86】PWR_SYS_GetRtPowerInfo接口未开放 | powerapi | +| I9SMBB | | 【22.03-LTS-SP4-rc1】aops-ceres 包在22.03-SP4中相比22.03-SP3 release版本降级 | aops-ceres | +| I9SMBC | | 【22.03-LTS-SP4-rc1】busybox 包在22.03-SP4中相比22.03-SP3 release版本降级 | busybox | +| I9SMBD | | 【22.03-LTS-SP4-rc1】containers-common 包在22.03-SP4中相比22.03-SP3 release版本降级 | containers-common | +| I9SMBF | | 【22.03-LTS-SP4-rc1】e2fsprogs 包在22.03-SP4中相比22.03-SP3 release版本降级 | e2fsprogs | +| I9SMBH | | 【22.03-LTS-SP4-rc1】ebtables 包在22.03-SP4中相比22.03-SP3 release版本降级 | ebtables | +| I9SMBI | | 【22.03-LTS-SP4-rc1】firewalld 包在22.03-SP4中相比22.03-SP3 release版本降级 | firewalld | +| I9SMBJ | | 【22.03-LTS-SP4-rc1】gcc-cross 包在22.03-SP4中相比22.03-SP3 release版本降级 | gcc-cross | +| I9SMBK | | 【22.03-LTS-SP4-rc1】gdk-pixbuf2 包在22.03-SP4中相比22.03-SP3 release版本降级 | gdk-pixbuf2 | +| I9SMBL | | 【22.03-LTS-SP4-rc1】imageTailor 包在22.03-SP4中相比22.03-SP3 version版本降级 | imageTailor | +| I9SMBM | | 【22.03-LTS-SP4-rc1】iproute 包在22.03-SP4中相比22.03-SP3 release版本降级 | iproute | +| I9SMBO | | 【22.03-LTS-SP4-rc1】iSulad 包在22.03-SP4中相比22.03-SP3 release版本降级 | iSulad | +| I9SMBP | | 【22.03-LTS-SP4-rc1】KubeOS 包在22.03-SP4中相比22.03-SP3 version版本降级 | KubeOS | +| I9SMBQ | | 【22.03-LTS-SP4-rc1】libsndfile 包在22.03-SP4中相比22.03-SP3 release版本降级 | libsndfile | +| I9SMBR | | 【22.03-LTS-SP4-rc1】openstack-releases 包在22.03-SP4中相比22.03-SP3 release版本降级 | openstack-releases | +| I9SQWH | | 【22.03-LTS-SP4-rc1】【arm/x86】调用PWR_CreateDcTask接口创建不支持的数据类型的任务创建成功 | powerapi | +| I9SRCC | | 【22.03_SP4_RC1_everything】【arm\x86】mandoc安装过程有报错信息 | mandoc | +| I9STHL | | 【Eulermaker】python-beaker在工程openEuler-22.03-LTS-SP4:everything构建失败 | python-beaker | +| I9SURK | | 【22.03_SP4_RC1_epol】【arm\x86】afterburn卸载过程有报错信息 | afterburn | +| I9SUVR | | 【openEuler-22.03-LTS-SP4】storm-nimbus.service服务stop失败 | storm | +| I9SUXW | | 【22.03-LTS-SP4-rc1】【编译告警检查】【arm/x86】执行编译出现告警信息 | powerapi | +| I9SV5C | | 【22.03_SP4_RC1_everything】【arm\x86】devmaster安装过程有报错信息 | sysmaster | +| I9SV9F | | 【openEuler-22.03-LTS-SP4】storm-supervisor.service服务stop失败 | storm | +| I9T040 | | 【22.03-LTS-SP4-rc1】【x86/arm】luarocks源码包本地自编译失败,缺少编译依赖openresty、openresty-openssl111-devel包 | luarocks | +| I9T0OH | | 【22.03-LTS-SP4-rc1】【x86/arm】perl-Compress-Raw-Zlib源码包本地自编译失败,check阶段失败 | perl-Compress-Raw-Zlib | +| I9T5DF | | 【22.03-LTS-SP4-rc1】【arm/x86】调用PWR_PROC_QueryProcs接口根据关键字查找任务不符合预期 | powerapi | +| I9T5Q8 | | 【22.03-LTS-SP4-rc1】【x86】netdata -D报核心已转储 | netdata | +| I9T5TN | | 【22.03_SP4_RC1_epol】【arm\x86】migration-tools-server升级过程有异常信息 | migration-tools | +| I9T6FB | | 【22.03_SP4_RC1_everthing】【arm\x86】obs-server升级到sp4版本后卸载失败 | obs-server | +| I9T7M8 | | 【22.03-LTS-SP4-rc1】【arm/x86】首次调用PWR_PROC_GetWattState接口失败,返回错误码13 | powerapi | +| I9TNRP | | 【22.03-LTS-SP4-rc1】【地址消毒测试】【arm/x86】调用PWR_CreateDcTask接口创建数据类型为2的任务,触发任务回调函数导致服务挂掉 | powerapi | +| I9U0YX | | 【openEuler-22.03-LTS-SP4 rc1】 sysmonitor.service服务启动后有报错信息 | sysmonitor | +| I9U163 | | 【22.03-LTS-SP4-rc1】【x86/arm】glassfish-jsp源码包本地自编译失败 | glassfish-jsp | +| I9ULPM | | 【22.03_SP4_RC2_everthing】【arm\x86】obs-server降级过程存在异常提示 | obs-server | +| I9UPLT | | 【22.03-LTS-SP4-rc2】【地址消毒测试】【arm/x86】调用TEST_PWR_PROC_QueryProcs接口,关键字为空字符串,num=100(构造5000个进程循环进行打印 ),接口调用超时,返回错误码1 | powerapi | +| I9UQHL | | 【22.03-LTS-SP4 RC2】[deja]aarch64-sve-acle.exp的部分用例执行失败 | gcc | +| I9UVJP | | 【22.03-LTS-SP4-rc2】abseil-cpp 包在22.03-SP4中相比22.03-SP3 release版本降级 | abseil-cpp | +| I9UVJQ | | 【22.03-LTS-SP4-rc2】shim 包在22.03-SP4中相比22.03-SP3 release版本降级 | shim | +| I9UVJR | | 【22.03-LTS-SP4-rc2】spdk 包在22.03-SP4中相比22.03-SP3 release版本降级 | spdk | +| I9UVJS | | 【22.03-LTS-SP4-rc2】syscare 包在22.03-SP4中相比22.03-SP3 release版本降级 | syscare | +| I9UVJT | | 【22.03-LTS-SP4-rc2】libsepol 包在22.03-SP4中相比22.03-SP3 release版本降级 | libsepol | +| I9UVJU | | 【22.03-LTS-SP4-rc2】libxml2 包在22.03-SP4中相比22.03-SP3 release版本降级 | libxml2 | +| I9UVJV | | 【22.03-LTS-SP4-rc2】kernel 包在22.03-SP4中相比22.03-SP3 release版本降级 | kernel | +| I9UVJW | | 【22.03-LTS-SP4-rc2】openssh 包在22.03-SP4中相比22.03-SP3 release版本降级 | openssh | +| I9UVJY | | 【22.03-LTS-SP4-rc2】ghostscript 包在22.03-SP4中相比22.03-SP3 release版本降级 | ghostscript | +| I9UVJZ | | 【22.03-LTS-SP4-rc2】libvirt 包在22.03-SP4中相比22.03-SP3 release版本降级 | libvirt | +| I9UVK0 | | 【22.03-LTS-SP4-rc2】skopeo 包在22.03-SP4中相比22.03-SP3 release版本降级 | skopeo | +| I9UVK2 | | 【22.03-LTS-SP4-rc2】dwarves 包在22.03-SP4中相比22.03-SP3 release版本降级 | dwarves | +| I9UVK3 | | 【22.03-LTS-SP4-rc2】openjdk-11 包在22.03-SP4中相比22.03-SP3 release版本降级 | openjdk-11 | +| I9UVK4 | | 【22.03-LTS-SP4-rc2】bind 包在22.03-SP4中相比22.03-SP3 release版本降级 | bind | +| I9UVK5 | | 【22.03-LTS-SP4-rc2】pcs 包在22.03-SP4中相比22.03-SP3 release版本降级 | pcs | +| I9UVK6 | | 【22.03-LTS-SP4-rc2】bash 包在22.03-SP4中相比22.03-SP3 release版本降级 | bash | +| I9UVK8 | | 【22.03-LTS-SP4-rc2】lwip 包在22.03-SP4中相比22.03-SP3 release版本降级 | lwip | +| I9UVK9 | | 【22.03-LTS-SP4-rc2】lsof 包在22.03-SP4中相比22.03-SP3 release版本降级 | lsof | +| I9UVKA | | 【22.03-LTS-SP4-rc2】nautilus 包在22.03-SP4中相比22.03-SP3 release版本降级 | nautilus | +| I9UVKB | | 【22.03-LTS-SP4-rc2】util-linux 包在22.03-SP4中相比22.03-SP3 release版本降级 | util-linux | +| I9UVKC | | 【22.03-LTS-SP4-rc2】python-jinja2 包在22.03-SP4中相比22.03-SP3 release版本降级 | python-jinja2 | +| I9UVKD | | 【22.03-LTS-SP4-rc2】deepin-turbo 包在22.03-SP4中相比22.03-SP3 release版本降级 | deepin-turbo | +| I9UVKE | | 【22.03-LTS-SP4-rc2】ovirt-engine 包在22.03-SP4中相比22.03-SP3 release版本降级 | ovirt-engine | +| I9UVKF | | 【22.03-LTS-SP4-rc2】deepin-graphics-driver-manager 包在22.03-SP4中相比22.03-SP3 release版本降级 | deepin-graphics-driver-manager | +| I9UVKG | | 【22.03-LTS-SP4-rc2】ignition 包在22.03-SP4中相比22.03-SP3 release版本降级 | ignition | +| I9UVMX | | 【22.03-LTS-SP4-rc2】docker 包在22.03-SP4中相比22.03-SP3 release版本降级 | docker | +| I9UVOU | | 【22.03-LTS-SP4-rc2】poissonsearch-oss 包在22.03-SP4中相比22.03-SP3 version版本降级 | poissonsearch-oss | +| I9UVOV | | 【22.03-LTS-SP4-rc2】openjdk-17 包在22.03-SP4中相比22.03-SP3 version版本降级 | openjdk-17 | +| I9UWOZ | | 【22.03-LTS-SP4-rc2】gazelle 包在22.03-SP4中相比22.03-SP3 release版本降级 | gazelle | +| I9UWPT | | 【22.03-LTS-SP4-rc2】openjdk-1.8.0 包在22.03-SP4中相比22.03-SP3 version版本降级 | openjdk-1.8.0 | +| I9UWQK | | 【22.03-LTS-SP4 RC2】auto-bolt结合NPB应用编译ICE:during GIMPLE pass: unswitch:internal compiler error: Segmentation fault | gcc | +| I9V325 | | 【22.03-LTS-SP4-rc2】【arm/x86】调用PWR_PROC_SetWattAttrs接口,设置domainMask=1,查询结果为10 | powerapi | +| I9V34B | | 【22.03-LTS-SP4 RC2】[codedb]-O2 -fllc-allocate 选项编译postgresql-11.3报internal compiler error: Aborted : during GIMPLE pass: llc_allocate | gcc | +| I9V3TI | | 【22.03-LTS-SP4 RC2】-O3 -fwhole-program -fllc-allocate 报Segmentation fault : during GIMPLE pass: llc_allocate | gcc | +| I9V738 | | 【22.03_SP4_RC2_everthing】【arm\x86】obs-api版本冲突导致无法升级 | obs-server | +| I9V75L | | 【22.03-LTS-SP4-rc2】注册主机模板缺少ssh_pkey字段 | aops-ceres | +| I9V7BM | | 【22.03-LTS-SP4-rc2】【arm/x86】调用PWR_PROC_SetSmartGridState接口,返回错误码502 | powerapi | +| I9VAXG | | 【22.03-LTS-SP4-rc2】【arm/x86】调用PWR_PROC_AddWattProcs添加不存在的进程,执行成功,查询到的进程为随机值 | powerapi | +| I9VPAX | | 【22.03-LTS-SP4-rc2】【x86】确认libomp-test二进制包是否需要删除 | libomp | +| I9VPPE | | 【22.03-LTS-SP4-rc2】【arm/x86】repo源中缺少arkui-linux二进制包,且只有arm架构的arkui-linux-devel二进制包,跟EBS不一致 | arkui-linux | +| I9VR7L | | 【22.03-LTS-SP4-rc2】创建热补丁移除任务,提示语错误 | aops-hermes | +| I9VVTI | | 【22.03-LTS-SP4-rc2】创建REPO设置任务,提示语错误 | aops-hermes | +| I9W0J1 | | 【22.03-LTS-SP4-rc2】【arm/x86】eagle服务启动之后,日志中有报错:/etc/eagle/plugin/libidle_service.so: No such file or directory | eagle | +| IA4DBK | | 【22.03-LTS-SP4-rc3】考虑是否将utshell的软件包版本命名跟openEuler社区其他包保持一致 | utshell | +| IA4MIA | | 【22.03-LTS-SP4-rc3】【x86/arm】luarocks命令执行失败 | luarocks | +| IA4MKD | | 【22.03-LTS-SP4-rc3】【arm/x86】安装软件包,执行oeawarectl --help,报错:error while loading shared libraries: libyaml-cpp.so.0.6: cannot open shared object file: No such file or directory | oeAware-manager | +| IA4QCT | | 【22.03-LTS-SP4-rc3】【arm/x86】安装软件包,使能存在依赖的插件实例,然后禁用其中一个依赖的实例,命令执行成功,但是当前插件实例并未禁用成功 | oeAware-manager | +| IA4R47 | | 【22.03-LTS-SP4-rc3】【arm/x86】安装软件包,配置enable_list,name为不存在的插件,instances为存在的实例,重启服务,该插件使能成功 | oeAware-manager | +| IA55IU | | 【22.03-LTS-SP4-rc3】docker-runc 包在22.03-SP4中相比22.03-SP3 release版本降级 | runc | +| IA57HR | | 【22.03-LTS-SP4-rc3】【arm/x86】服务日志待优化问题 | oeAware-manager | +| IA57S9 | | 【22.03-LTS-SP4-rc3】【arm/x86】/etc/eagle/eagle_config.ini中没有相应的参数配置说明 | eagle | +| IA58XV | | 【22.03-LTS-SP4-rc3】【arm/x86】yaml-cpp解析yaml配置文件异常 | yaml-cpp | +| IA5BWS | | 【22.03-LTS-SP4-rc3】【arm/x86】安装oeAware系列软件包,删除libthread_collector.so,启动服务,查看依赖关系异常 | oeAware-manager | +| IA5EDP | | 【Eulermaker】openEuler 22.03-LTS-SP4 stratovirt镜像构建失败 | kernel | +| IA5MCM | | 【22.03-LTS-SP4-rc3】【arm/x86】动态进行eagle_policy.ini文件配置未生效 | eagle | +| IA5NUJ | | 【22.03-LTS-SP4-rc3】【arm/x86】策略配置文件中修改watt_threshold = 0、watt_domain_mask = 0重启服务之后,当前两个值没有恢复成默认值 | eagle | +| IA5Z8U | | 【Eulermaker】k3s在工程openEuler-22.03-LTS-SP4:epol构建失败 | k3s | +| IA60UN | | 【22.03-LTS-SP4-rc4】python-pip 包在22.03-SP4中相比22.03-SP3 release版本降级 | python-pip | +| IA60UO | | 【22.03-LTS-SP4-rc4】ghostscript 包在22.03-SP4中相比22.03-SP3 release版本降级 | ghostscript | +| IA60UP | | 【22.03-LTS-SP4-rc4】bash 包在22.03-SP4中相比22.03-SP3 release版本降级 | bash | +| IA60UQ | | 【22.03-LTS-SP4-rc4】kbd 包在22.03-SP4中相比22.03-SP3 release版本降级 | kbd | +| IA60UR | | 【22.03-LTS-SP4-rc4】ignition 包在22.03-SP4中相比22.03-SP3 release版本降级 | ignition | +| IA613G | | 【22.03-LTS-SP4-rc4】xorg-x11-server 包在22.03-SP4中相比22.03-SP3 release版本降级 | xorg-x11-server | +| IA6148 | | 【22.03-LTS-SP4 RC4】-O3 -march=armv8.2-a+sve -fllc-allocate --param branch-prob-threshold=50汇编文件没有产生prf(x)指令 | gcc | +| IA68T7 | | 【22.03-LTS-SP4-rc4】【arm/x86】eagle服务启动之后,/etc/sysconfig/pwrapis/pwrapis_config.ini的admin配置eagle前多了一个 | eagle | diff --git a/docs/zh/server/releasenotes/source_code.md b/docs/zh/server/releasenotes/source_code.md new file mode 100644 index 0000000000000000000000000000000000000000..2c8458d1ac2e264009a3896b42a5deb82359942e --- /dev/null +++ b/docs/zh/server/releasenotes/source_code.md @@ -0,0 +1,8 @@ +# 源代码 + +openEuler主要包含两个代码仓库: + +- 代码仓:[https://gitee.com/openeuler](https://gitee.com/openeuler) +- 软件包仓:[https://gitee.com/src-openeuler](https://gitee.com/src-openeuler) + +openEuler发布同时也提供source iso,具体请参见“[系统安装](./os_installation.md)”的内容。 diff --git a/docs/zh/server/releasenotes/terms_of_use.md b/docs/zh/server/releasenotes/terms_of_use.md new file mode 100644 index 0000000000000000000000000000000000000000..2ef25cb3d5c79a880352c85aafd469e5c682552e --- /dev/null +++ b/docs/zh/server/releasenotes/terms_of_use.md @@ -0,0 +1,13 @@ +# 法律声明 + +**版权所有 © 2024 openEuler社区。** + +您对“本文档”的复制、使用、修改及分发受知识共享\(Creative Commons\)署名—相同方式共享4.0国际公共许可协议\(以下简称“CC BY-SA 4.0”\)的约束。为了方便用户理解,您可以通过访问[https://creativecommons.org/licenses/by-sa/4.0/](https://creativecommons.org/licenses/by-sa/4.0/) 了解CC BY-SA 4.0的概要 \(但不是替代\)。CC BY-SA 4.0的完整协议内容您可以访问如下网址获取:[https://creativecommons.org/licenses/by-sa/4.0/legalcode](https://creativecommons.org/licenses/by-sa/4.0/legalcode)。 + +**商标声明** + +文档中提及的商标或注册商标,由各自所有人拥有。对openEuler商标的使用,应当遵从[openEuler品牌使用规范](https://www.openeuler.org/zh/other/brand/) 。 + +**免责声明** + +本文档仅作为使用指导,除非适用法强制规定或者双方有明确书面约定,openEuler社区对本文档中的所有陈述、信息和建议不做任何明示或默示的声明或保证,包括但不限于不侵权、时效性或满足特定目的的担保。 diff --git a/docs/zh/server/releasenotes/user_notice.md b/docs/zh/server/releasenotes/user_notice.md new file mode 100644 index 0000000000000000000000000000000000000000..6cffddeb5c6f9fe2fd1f4dec654b16e3670d2722 --- /dev/null +++ b/docs/zh/server/releasenotes/user_notice.md @@ -0,0 +1,4 @@ +# 用户须知 + +- openEuler版本号计数规则由openEuler x.x变更为以年月为版本号,以便用户了解版本发布时间,例如openEuler 21.03表示发布时间为2021年3月。 +- [Python核心团队](https://www.python.org/dev/peps/pep-0373/#update)已于2020年1月停止对Python 2的维护。从openEuler 22.03-LTS版本开始,停止支持和维护Python 2,仅支持Python 3,请您尽快切换并使用Python 3。 \ No newline at end of file diff --git a/docs/zh/server/releasenotes/zh-cn_bookmap_0225720059.md b/docs/zh/server/releasenotes/zh-cn_bookmap_0225720059.md new file mode 100644 index 0000000000000000000000000000000000000000..b5033b015f8a08e23508352f06748cdb4cf515a8 --- /dev/null +++ b/docs/zh/server/releasenotes/zh-cn_bookmap_0225720059.md @@ -0,0 +1,13 @@ +# 版本发行说明 + +- [法律声明](./terms_of_use.md) +- [用户须知](./user_notice.md) +- [简介](./introduction.md) +- [系统安装](./os_installation.md) +- [关键特性](./key_features.md) +- [已知问题](./known_issues.md) +- [已修复问题](./resoluved_issues.md) +- [CVE漏洞](./cve.md) +- [源代码](./source_code.md) +- [参与贡献](./contribution.md) +- [致谢](./acknowledgment.md) diff --git a/docs/zh/server/security/cert_signature/_toc.yaml b/docs/zh/server/security/cert_signature/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1d22cad66bbc838aa089deaf5b76bde76adfdf25 --- /dev/null +++ b/docs/zh/server/security/cert_signature/_toc.yaml @@ -0,0 +1,9 @@ +isManual: true +label: '' +sections: + - label: 证书签名使用指南 + href: ./certsignature.md + - label: 认识证书和签名 + href: ./overview_of_certificates_and_signatures.md + - label: 安全启动 + href: ./secure_boot.md diff --git a/docs/zh/server/security/cert_signature/certsignature.md b/docs/zh/server/security/cert_signature/certsignature.md new file mode 100644 index 0000000000000000000000000000000000000000..2b87409f668f76e548ce40adcf8971b1e04ecdbd --- /dev/null +++ b/docs/zh/server/security/cert_signature/certsignature.md @@ -0,0 +1,3 @@ +# 证书签名使用指南 + +由openEuler签名平台提供签名服务,突破开源社区签名私钥管理困难问题,解决了社区安全启动组件长期无签名的问题,实现社区秘钥的统一管理和安全启动功能,达到了增强系统完整性保护和秘钥规范性管理效果。 diff --git a/docs/zh/server/security/cert_signature/figures/.keep b/docs/zh/server/security/cert_signature/figures/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/zh/server/security/cert_signature/figures/mokutil-db.png b/docs/zh/server/security/cert_signature/figures/mokutil-db.png new file mode 100644 index 0000000000000000000000000000000000000000..769d96ce38be9144e0ea6c25077a5d86a68c1bbf Binary files /dev/null and b/docs/zh/server/security/cert_signature/figures/mokutil-db.png differ diff --git a/docs/zh/server/security/cert_signature/figures/mokutil-sb-off.png b/docs/zh/server/security/cert_signature/figures/mokutil-sb-off.png new file mode 100644 index 0000000000000000000000000000000000000000..f3018c9fd0236e9c2cf560f0da3827ed2a877f6d Binary files /dev/null and b/docs/zh/server/security/cert_signature/figures/mokutil-sb-off.png differ diff --git a/docs/zh/server/security/cert_signature/figures/mokutil-sb-on.png b/docs/zh/server/security/cert_signature/figures/mokutil-sb-on.png new file mode 100644 index 0000000000000000000000000000000000000000..449b6774dc61a601cf884845fbd0be5d314108e1 Binary files /dev/null and b/docs/zh/server/security/cert_signature/figures/mokutil-sb-on.png differ diff --git a/docs/zh/server/security/cert_signature/figures/mokutil-sb-unsupport.png b/docs/zh/server/security/cert_signature/figures/mokutil-sb-unsupport.png new file mode 100644 index 0000000000000000000000000000000000000000..525c72f78b897ffaba0d356406ab9d9e64024d91 Binary files /dev/null and b/docs/zh/server/security/cert_signature/figures/mokutil-sb-unsupport.png differ diff --git a/docs/zh/server/security/cert_signature/overview_of_certificates_and_signatures.md b/docs/zh/server/security/cert_signature/overview_of_certificates_and_signatures.md new file mode 100644 index 0000000000000000000000000000000000000000..f3650cd60563f7cfdd9df3c6d551725c7368e2b2 --- /dev/null +++ b/docs/zh/server/security/cert_signature/overview_of_certificates_and_signatures.md @@ -0,0 +1,19 @@ +# 认识证书和签名 + +## 概述 +为了保护系统文件的完整性,需要使用密码学上的数字签名技术。 文件使用前,通常在软件构建或者发布阶段,使用私钥对文件进行签名。在运行软件时,使用证书中的公钥对签名进行验证。验证通过则说明文件没有被篡改,验证不通过则说明文件已损坏或者被篡改。 +在上述验证过程中,私钥需要被安全妥善地管理和保存,一旦私钥泄露,则可能被用于恶意文件的签名,无法达到保护原始原始文件完整性的目的。 +对文件签名进行校验的证书,通常预置在系统中,或者在软件运行时,由管理员将证书导入到系统中。 + +## 背景 +开源社区普遍存在私钥难以管理的特点,所以社区相应的组件通常缺少签名。要使用签名验签功能需要OSV厂商或者用户自己对文件进行签名后,才可以使用,这样增加了功能的使用成本并降低了易用性。 +社区中RPM软件包等部分组件目前已有签名,但是通常私钥被公开或者由社区构建工程进行管理,存在泄漏和滥用风险。 + +## 解决方案 +从当前版本开始,openEuler使用社区签名平台进行公私钥对的生成和管理,并对社区文件提供签名服务。这样通过签名平台解决了社区秘钥管理的难点。 +当前社区签名平台支持签名的文件类型有:安全启动功能相关的EFI启动文件类型和RPM软件包类型。后续可以进一步支持内核驱动文件ko, 应用程序,虚机镜像,容器镜像,ISO等类型的签名。 +22.03-LTS-SP4版本中的工程发布件支持RPM软件包通过签名平台进行签名的能力,后续在部署使用22.03-LTS-SP4版本的工程发布件后,则可以使用签名平台对RPM进行签名。 + +## 约束限制 +当前社区签名平台功能只支持对openEuler社区内部构建的组件进行签名,暂不支持对外部工程构建的文件及客户文件进行签名。 +对外提供签名服务功能正在规划中。 \ No newline at end of file diff --git a/docs/zh/server/security/cert_signature/secure_boot.md b/docs/zh/server/security/cert_signature/secure_boot.md new file mode 100644 index 0000000000000000000000000000000000000000..02495fb66ea8940c74ab80d640cf109807a786ba --- /dev/null +++ b/docs/zh/server/security/cert_signature/secure_boot.md @@ -0,0 +1,49 @@ +# 安全启动 + +## 概述 + +安全启动(Secure Boot)就是利用公私钥对启动部件进行签名和验证。在启动过程中,前一个部件验证后一个部件的数字签名,如果能验证通过,则运行后一个部件;如果验证不通过,则暂停启动。通过安全启动可以保证系统启动过程中各个部件的完整性,防止没有经过认证的部件被加载运行,从而防止对系统及用户数据产生安全威胁。 +安全启动涉及的验证组件: BIOS->shim->grub->vmlinuz(依次验签通过并加载),其中vmlinuz是内核镜像。 +相关的EFI启动组件由openEuler签名平台采用signcode方式进行签名。公钥证书由BIOS集成到签名数据库DB中,启动过程中BIOS对shim进行验证,shim和grub组件从BIOS的签名数据库DB中获取公钥证书并对下一级组件进行验证。 + +## 背景和解决方案 + +前期openEuler版本中,安全启动相关组件没有签名,无法直接使用安全启动功能保障系统组件的完整性。 +从22.03-LTS-SP4版本开始,openEuler使用社区签名平台对OS侧的相关组件进行签名,包括shim、grub和vmlinuz组件,并将社区签名根证书内嵌于shim组件中。 + +## 使用方法 + +### openEuler证书获取 + +openEuler根证书获取地址:,进入“证书中心”目录下载。 +网页上根证书识别名称为“openEuler Shim Default CA”,default-x509ca.cert。 + +### BIOS侧操作 + +将openEuler根证书导入BIOS的db证书库中,并在BIOS中开启安全启动开关,可实现安全启动功能。 +BIOS证书导入方法及安全启动开启方法可参考具体BIOS厂商提供的资料。 + +### OS侧操作 + +**查看db数据库中的证书信息**:mokutil –db +![](./figures/mokutil-db.png) +说明:证书信息较多,截图中只显示部分重要信息 +**查看系统安全启动状态**:mokutil --sb + +- SecureBoot disabled:安全启动关闭 + + ![](./figures/mokutil-sb-off.png) + +- SecureBoot enabled:安全启动开启 + + ![](./figures/mokutil-sb-on.png) + +- not supported:系统不支持安全启动 + + ![](./figures/mokutil-sb-unsupport.png) + +## 约束限制 + +- **软件限制**:OS系统需要采用UEFI启动 +- **架构限制**:ARM/X86 +- **硬件约束**:需要BIOS支持安全启动相关校验功能 diff --git a/docs/zh/server/security/sbom/.keep b/docs/zh/server/security/sbom/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/zh/server/security/sbom/_toc.yaml b/docs/zh/server/security/sbom/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..66470ab084d69415ede6801fed25a525da84c90e --- /dev/null +++ b/docs/zh/server/security/sbom/_toc.yaml @@ -0,0 +1,5 @@ +isManual: true +label: '' +sections: + - label: SBOM介绍 + href: ./sbom.md diff --git a/docs/zh/server/security/sbom/sbom.md b/docs/zh/server/security/sbom/sbom.md new file mode 100644 index 0000000000000000000000000000000000000000..793e6fc7007e156827d2caf3fd6cdf0110c64e37 --- /dev/null +++ b/docs/zh/server/security/sbom/sbom.md @@ -0,0 +1,46 @@ +# 1. SBOM介绍 + +SBOM是一种正式标准化的、机器可读的元数据,它唯一地标识软件组件及其内容;也可能包括版权和许可证等成分数据。SBOM旨在跨组织共享,有助于提供软件供应链成分清单与透明度,并且未来趋势将作为软件交付件必要清单。 + +# 2. SBOM最小集定义 + +美国国家电信和信息管理局(National Telecommunications and Information Administration)发布SBOM最小集的定义: 数据字段是关于必须捕获和维护每个组件的基础数据,以便在整个软件供应链中跟踪组件,并基于此扩展License和漏洞库等其他数据字段。 + +| 数据字段 | 描述 | +| :------------- | :----------------------------------------------------------- | +| 供应商名称 | 创建、定义和标识组件的实体的名称。 | +| 组件名称 | 分配给原始供应商定义的软件单元的名称。 | +| 组件的版本 | 组件版本号、供应商用来指定软件从先前标识的版本发生变化的标识符。 | +| 其它唯一标识符 | 用于标识组件或用作相关数据库的查找键的其他标识符。 | +| 依赖关系 | 软件依赖关系、表征上游组件 X 包含在软件 Y 中的关系 | +| SBOM数据的作者 | 为此组件创建SBOM数据的实体的名称。 | +| 时间戳 | 记录SBOM数据组装的日期和时间。 | +| **推荐的数据** | | +| 组件的哈希 | 组件的唯一哈希,以帮助允许列表或拒绝列表。 | +| 生命周期阶段 | SDLC 中捕获 SBOM 数据的获取的阶段。 | + +# 3. openEuler发布的SBOM字段说明 + +| 最小集数据字段 | SPDX | +| ----------------- | ------------------------------------------------------------ | +| 组件供应商名称 | document->packages->supplier | +| 组件名称 | document->packages->name | +| 组件版本 | document->packages->versionInfo(openEuler使用了epoch:version-release格式) | +| 组件其他唯一标识 | document->packages->externalRefs(category:PACKAGE_MANAGER)->purl | +| 组件依赖关系 | document->packages->externalRefs(category:EXTERNAL_MANAGER)->purl | +| SBOM数据作者 | document->creationInfo->creators | +| SBOM时间戳 | document->creationInfo->created | +| 组件的哈希 | document->packages->checksums | +| 生命周期阶段 | 未支持 | +| 其他组件关系 | 内部子组件:document->packages->externalRefs(category:PROVIDE_MANAGER)->purl 运行时依赖:document->relationships(relationshipType:DEPENDS_ON) | +| 组件License信息 | document->packages->licenseDeclared document->packages->licenseConcluded | +| 组件Copyright信息 | document->packages->copyrightText | +| 组件上游社区信息 | document->packages->externalRefs(category:SOURCE_MANAGER)->url | +| 组件补丁信息 | 补丁文件:document->files(fileTypes:SOURCE) 补丁关系:document->relationships(relationshipType:PATCH_APPLIED) | +| 组件来源 | document->packages->downloadLocation | +| 组件信息 | document->packages->description document->packages->summary | +| 组件官网/博客 | document->packages->homepage | + +# 4. SBOM文件示例 + +解析最小颗粒度是RPM包 diff --git a/docs/zh/server/security/secdetector/_toc.yaml b/docs/zh/server/security/secdetector/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e461d6da752f8650573b7e26d43486b32f73c1bd --- /dev/null +++ b/docs/zh/server/security/secdetector/_toc.yaml @@ -0,0 +1,13 @@ +isManual: true +label: '' +sections: + - label: 接口说明 + href: ./api_reference.md + - label: 安装 secDetector + href: ./install_secdetector.md + - label: 认识secDetector + href: ./introduction_to_secdetector.md + - label: secDetector 使用指南 + href: ./secDetector.md + - label: 使用 secDetector + href: ./using_secdetector.md diff --git a/docs/zh/server/security/secdetector/api_reference.md b/docs/zh/server/security/secdetector/api_reference.md new file mode 100644 index 0000000000000000000000000000000000000000..3e91ff5c2ed62a160fd93546070711947b1f6904 --- /dev/null +++ b/docs/zh/server/security/secdetector/api_reference.md @@ -0,0 +1,81 @@ +# 接口说明 + +secDetector操作系统内构入侵检测系统对外提供SDK,这里给出用户开发应用程序所需的接口。SDK的接口设计非常简单,一共只有三个接口,两个头文件。 + +头文件: + +- secDetector/secDetector_sdk.h:包含接口定义 + +- secDetector/secDetector_topic.h:包含一些调用接口所需使用的预定义宏,如可选择性订阅的功能主题编号 + +## secSub + +订阅 topic 接口 + +**功能**: + +订阅接口,应用程序通过输入不同 topic id,可以选择订阅不同的功能主题,比如文件打开类异常探针。secDetector 提供的诸功能主题对应的 topic id 的定义在 secDetector_topic.h 中可以查看。本订阅接口支持一次订阅多个主题,多个探针的 topic id 可以以位图的形式进行组合。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>由于一次订阅产生一个reader即信息读取器,所以应用程序应当在一次订阅接口调用中订阅所需的所有主题。这样就可以使用一个reader进行信息的采集。如果需要调整订阅的内容,可以退订之后再重新订阅。 + +**函数声明:** + +```c +void *secSub(const int topic); +``` + +**参数:** + +- topic:入参,需要订阅的主题集合 + +**返回值:** + +- NULL:订阅失败 +- NOT NULL:读取订阅主题相关信息的GRPC reader读取器 + +## secUnsub + +退订 topic 接口 + +**功能**: + +退订接口,应用程序通过输入订阅成功后获得的reader,完成主题的退订。退订后应用程序便不会收到相应主题的信息。系统中某主题如果没有任何应用程序订阅,则不会被执行。 + +**函数声明:** + +```c +void secUnsub(void *reader); +``` + +**参数:** + +- reader:入参,需要退订的信息读取器 + +**返回值:** + +- 无 + +## secReadFrom + +已订阅主题的消息读取接口 + +**功能**: + +使用订阅接口对某些主题的订阅成功后,执行退订操作之前,可使用本接口接受 secDetector 发送的已订阅主题的消息。本接口是阻塞式的。应用程序建议使用独立的线程循环调用。当已订阅主题有消息时候,本函数才会被恢复执行。 + +**函数声明:** + +```c +void secReadFrom(void *reader, char *data, int data_len); +``` + +**参数:** + +- reader:入参,主题订阅成功后得到的消息读取器 +- data:出参,消息缓冲区,由应用程序提供的一段内存 +- data_len:入参,消息缓冲区的尺寸 + +**返回值:** + +- 无 diff --git a/docs/zh/server/security/secdetector/install_secdetector.md b/docs/zh/server/security/secdetector/install_secdetector.md new file mode 100644 index 0000000000000000000000000000000000000000..e62a2b95bb5dadc12d4a32a8fe7c445a623a7156 --- /dev/null +++ b/docs/zh/server/security/secdetector/install_secdetector.md @@ -0,0 +1,107 @@ +# 安装 secDetector + +## 软硬件要求 + +### 硬件要求 + +* 当前仅支持 x86_64、aarch64 架构处理器。 +* secDetector磁盘使用需求:配额1GB及以上。 +* secDetector内存使用需求:配额100MB及以上。 + +### 操作系统要求 + +openEuler 22.03 LTS SP4 及以上。 + +### 环境准备 + +安装 openEuler 系统,安装方法参考《[安装指南](../Installation/installation.md)》。 + +## 安装secDetector + +1. 配置openEuler yum源:openEuler 22.03-LTS 发布版本上已默认配置完成yum源,无需额外操作。特殊情况下请参考openEuler官方文档配置在线yum源或通过ISO挂载配置本地yum源。 + +2. 安装secDetector。 + + ```shell + #安装secDetector + sudo yum install secDetector + ``` + +> ![](./public_sys-resources/icon-note.gif)说明: +> +> 安装secDetector后在指定目录下可获得部署secDetector所需的相关文件: + +```shell +#secDetector的kerneldriver的核心框架 +/lib/modules/%{kernel_version}/extra/secDetector/secDetector_core.ko + +#secDetector的kerneldriver的功能组件 +/lib/modules/%{kernel_version}/extra/secDetector/secDetector_xxx.ko + +#secDetector的守护者进程文件 +/usr/bin/secDetectord + +#secDetector的SDK库文件 +/usr/lib64/secDetector/libsecDetectorsdk.so +/usr/include/secDetector/secDetector_sdk.h +/usr/include/secDetector/secDetector_topic.h +``` + +## 部署 secDetector + +secDetector的主体secDetectord是以系统服务的形式部署在系统中的,前台业务系统可以通过集成SDK来与之通信。由于secDetector的部分能力必须构建在内核之中,因此secDetectord的功能全集还依赖于其后台驱动的部署。 + +### 部署 kernel driver + +1. 插入 kernel driver 的基础框架:secDetector_core.ko 是 kernel driver 的基础框架,要优先于其他内核模块进行部署。找到安装后的 secDetector_core.ko 目录,将其插入内核。参考命令如下: + + ```shell + sudo insmod secDetector_core.ko + ``` + + secDetector_core 支持一个命令行参数ringbuf_size。用户可以通过指定该参数的值来控制 kernel driver 与 用户态secDetectord之间数据通道的缓存空间尺寸。该参数可以被指定为4~1024中的一个整数,单位是MB。默认值是4,必须为2的幂。参考命令如下: + + ```shell + sudo insmod secDetector_core.ko ringbuf_size=128 + ``` + +2. 插入 kernel driver 的功能模块:secDetector的 kernel driver 采用模块化部署方式。用户可以选择基于框架部署满足需要的功能模块,也可以选择部署全部模块。参考命令如下: + + ```shell + sudo insmod secDetector_kmodule_baseline.ko + + sudo insmod secDetector_memory_corruption.ko + + sudo insmod secDetector_program_action.ko + + sudo insmod secDetector_xxx.ko + ``` + + * secDetector_kmodule_baseline.ko 提供了内核模块列表检测的能力,属于内存修改类探针; + * secDetector_memory_corruption.ko 提供了内存修改检测的能力,属于内存修改类探针; + * secDetector_program_action.ko 提供了程序行为检测的能力,属于程序行为类探针。 + +### 部署 usr driver 和 observer_agent + +当前用户态驱动 usr driver 和服务 observer_agent 已经都被集成到secDetectord中,参考命令如下: + +```shell +sudo ./secDetectord & +``` + +usr driver当前包含了文件操作类探针和进程管理类探针的能力。 + +secDetectord支持如下一些配置选项: + +```shell +用法:secDetectord [选项] +secDetectord 默认会在后台运行,从探针中取得数据并转发给订阅者。 +选项: + -d 进入调试模式,进入前台运行,并且在控制台打印探针数据。 + -s 配置eBPF缓冲区大小,单位为Mb,默认为4; size可选范围为4~1024,且必须为2的幂次方。当前拥有2个独立的缓冲区。 + -t 支持配置订阅的事件,默认为所有事件。topic 是位图格式。例如 -t 0x60 同时订阅进程创建和进程退出事件。详细请查阅 include/secDetector_topic.h。 +``` + +### 部署SDK + +SDK的库文件默认已经被部署到系统库目录中,用户需要在自己的程序中引用SDK的头文件即可使用。 diff --git a/docs/zh/server/security/secdetector/introduction_to_secdetector.md b/docs/zh/server/security/secdetector/introduction_to_secdetector.md new file mode 100644 index 0000000000000000000000000000000000000000..1e5dee9d2987a082b61e867fd7ab52b1d95be2f0 --- /dev/null +++ b/docs/zh/server/security/secdetector/introduction_to_secdetector.md @@ -0,0 +1,97 @@ +# 认识secDetector + +## 简介 + +secDetector 是专为OS设计的内构入侵检测系统,旨在为关键信息基础设施提供入侵检测及响应能力,为第三方安全工具减少开发成本同时增强检测和响应能力。secDetector 基于ATT&CK攻击模式库建模提供更为丰富的安全事件原语,并且可以提供实时阻断和灵活调整的响应能力。 + +secDetector 作为一套灵活的OS内构入侵检测系统,有三种使用模式: + +1. 直接被系统用户开启用作一些基础异常事件的告警和处置。 +2. 被安全态势感知服务集成,补齐系统信息采集缺陷,用于APT等复杂的安全威胁分析和重点事件布控实时阻断。 +3. 由安全从业人员或安全感知服务提供商二次开发,基于可拓展框架构建精确、高效、及时的入侵检测与响应能力。 + +## 软件架构 + +```text +||==APP===================================================================|| +|| || +|| ---------------------------- || +|| | SDK | || +|| ---------------------------- || +|| /^\ || +||==================================|=====================================|| + | + | + | +||==OBSERVER========================|=====================================|| +|| | || +|| ---------------------------- || +|| | service | || +|| ---------------------------- || +|| /^\ || +||==================================|=====================================|| + | +||==DRIVER================================================================|| +|| || +|| ---------------------------- || +|| | 8 types of cases | || +|| ---------------------------- || +|| || +||------------------------------------------------------------------------|| +|| core || +|| ------------- ---------------- ---------------- ----------------- || +|| | hook unit | | collect unit | | analyze unit | | response unit | || +|| ------------- ---------------- ---------------- ----------------- || +|| || +||========================================================================|| +``` + +secDetector在架构上分为四个部分:SDK、service、检测特性集合cases、检测框架core。 + +- SDK + + SDK是以一个用户态动态链接库lib的形态承载,被部署到需要使用secDetector入侵检测系统的安全感知业务中。SDK用于和secDetector入侵检测系统的service通讯,完成所需的工作(例如订阅,去订阅,读取现有消息等功能)。secDetector提供的异常信息被定义成不同的case,安全感知业务可以根据自身需求订阅。 + +- service + + service是以一个用户态服务应用的形态承载,向上管理、维护安全感知业务的case订阅信息,向下维护case的运行情况。框架core和检测特性集合case采集到的信息由service统一收集,按需转发给不同的安全感知业务。安全感知业务对于底层检测特性集合case和框架core的配置、管理的需求也由service进行统一的管理和转发。不同的安全感知业务可能会需求同样的case,service会统计出所有安全感知业务需求case的并集,向下层注册。 + +- 特性集合cases + + 检测特性集合cases是一系列异常检测探针,根据异常信息的不同会有不同的形态,比如内核异常信息检测的每个探针会以内核模块ko的形态承载。一个case代表一个探针,一个探针往往是一类异常信息或者一类异常事件的信息。比如进程类探针会关注所有进程的创建、退出、属性修改等事件信息,内存修改类探针会收集内核模块列表和安全开关等信息。因此一个探针可能会包含对多个事件的监控,而这些对不同事件的监控逻辑可能无法部署在同一个执行流当中。我们使用工作流(workflow)的概念表示一个探针在同一个执行流中的工作,一个探针可以包含一个或者多个工作流。比如对于进程探针而言,进程创建检测和进程属性修改检测就是不同的工作流。 + +- 框架core + + 检测框架core是每一个case依赖的基础框架,提供case的管理和workflow所需的通用的基础功能单元。内核异常信息检测框架会以内核模块ko的形态承载。一个检测特性case可以将自己注册到框架中,或者从框架中去注册。框架还可以提供特定的交互接口以满足外部的动态请求。一个workflow被定义为有四类功能单元组成:事件发生器、信息采集器、事件分析器、响应单元。 + +特性集合cases和框架core合起来被称为driver。driver驱动提供了secDetector功能的最底层的系统级实现。 + +driver分为两类,kerneldriver 和 usrdriver。顾名思义,kerneldriver是部署在内核态中的,以内核模块的形式承载。usrdriver是部署在用户态中的,直接被部署为service中的一个模块。从逻辑上usrdriver是在service之下的,但是在运行中,为了降低通信成本,usrdriver被直接集成在service程序中。 + +## 能力特性 + +### 检测能力 + +| 特性 | 状态 | 发布版本 | +| ------------------------------ | ------ | ------------------------------------------------------------ | +| 检测框架 | 已实现 | 统一灵活可拓展高效的检测框架,支持不同类型的触发、收集、分析、响应单元 | +| 进程管理类探针 | 已实现 | 监控进程创建、退出、元数据修改等事件 | +| 文件操作类探针 | 已实现 | 监控文件创建、删除、读写、属性修改等事件 | +| 程序行为类探针(API调用) | 已实现 | 监控匿名管道创建、命令执行、ptrace系统调用等关键程序行为 | +| 内存修改类探针(内核关键数据) | 已实现 | 监控内核模块列表,硬件安全功能开关等内核关键数据 | + +### 响应能力 + +| 特性 | 状态 | 说明 | +| -------- | ------ | -------------------------------------------------- | +| 响应框架 | 已实现 | 统一的灵活可拓展的响应框架,支持不同类型的响应单元 | +| 告警上报 | 已实现 | 提供异常信息上报能力的响应单元 | + +### 服务能力 + +| 特性 | 状态 | 说明 | +| -------- | ------ | ------------------------------------------------------------ | +| 通信框架 | 已实现 | 应用程序使用gRPC和service进行通信。功能被封装在SDK的动态库中。 | +| 订阅管理 | 已实现 | 应用程序可以一次订阅,长期使用secDetector获取信息。secDetector会对订阅的应用程序进行管理,分发对应的被订阅主题的信息。 | +| 配置下发 | 已实现 | 服务可以通过参数对于特定的检测、阻断特性进行配置,从而实现过滤、调整等功能。目前未对应用程序开放。 | +| 即时检测 | 已实现 | secDetector提供的信息是实时的,准确的,一手的。 | diff --git a/docs/zh/server/security/secdetector/public_sys-resources/icon-note.gif b/docs/zh/server/security/secdetector/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/server/security/secdetector/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/server/security/secdetector/secDetector.md b/docs/zh/server/security/secdetector/secDetector.md new file mode 100644 index 0000000000000000000000000000000000000000..e20d3fc09effae2c13b7125bad2a0ba932716600 --- /dev/null +++ b/docs/zh/server/security/secdetector/secDetector.md @@ -0,0 +1,5 @@ +# secDetector 使用指南 + +本文档介绍 openEuler 操作系统内构入侵检测系统 secDetector 的架构、特性、安装、开发指导、落地应用场景等,帮助用户快速了解并使用 secDetector。 + +本文档适用于使用 openEuler 系统并希望了解和使用 secDetector 的社区开发者、开源爱好者以及相关合作伙伴。使用人员需要具备基本的Linux操作系统知识。 diff --git a/docs/zh/server/security/secdetector/using_secdetector.md b/docs/zh/server/security/secdetector/using_secdetector.md new file mode 100644 index 0000000000000000000000000000000000000000..cde169aab3aeb6a1bae29f1985bb49cd478fc424 --- /dev/null +++ b/docs/zh/server/security/secdetector/using_secdetector.md @@ -0,0 +1,46 @@ +# 使用 secDetector + +secDetector 提供了SDK,一个so库,用户可以在自己的应用程序中集成该动态链接库从而通过简单的接口使用secDetector。本章介绍其使用方法。 + +## 基本用法 + +用户按照指南《[安装secDetector](./安装secDetector.md)》安装完secDetector之后,libsecDetectorsdk.so、secDetector_sdk.h、secDetector_topic.h就已经被部署到系统用户库默认路径中。 + +1. 使用 C 或 C++ 开发的应用程序确保include路径包含后,可以首先在程序中引用这两个头文件。 + + ```c + #include + #include + ``` + +2. 参考指南《[接口参考](./接口参考.md)》调用SDK提供的接口访问secDetector。 + + 1. 首先调用订阅接口secSub,订阅所需的主题。 + 2. 然后在独立线程中调用消息读取接口secReadFrom阻塞式的读取被订阅主题产生的信息。 + 3. 最后当不需要使用secDetector时,调用退订接口secUnsub。退订时请严格使用订阅时的返回值。 + +## 代码示例 + +可以参考secDetector代码仓上的示例代码,由python语言编写。 + +1. 可以在如下链接中查看示例代码 + + [examples/python · openEuler/secDetector (gitee.com)](https://gitee.com/openeuler/secDetector/tree/master/examples/python) + +2. 也可以下载后参考 + +```shell +git clone https://gitee.com/openeuler/secDetector.git +``` + +## 规格与约束 + +1. 部分功能(如内存修改探针-安全开关)依赖硬件体系结构,因此在不同指令集架构上的表现并不相同。 +2. 从内核到用户态传输数据缓存空间为探针共享,缓冲区满会丢弃新采集的事件信息。缓存空间可配置范围为4~1024 MB, 必须为2的幂。 +3. 服务进程secDetectord支持root用户运行,不支持多实例,非第一个运行的程序会退出。 +4. 用户订阅连接数限制为5个。 +5. 用户订阅后,读取消息时需要为消息读取接口提供一块缓冲区,超过缓冲区长度的消息将被截断。建议缓冲区长度不低于4096。 +6. 对于文件名、节点名之类的描述字符串都有一定的长度限制,过长可能会被截断。 +7. 应用程序单进程内不支持并行多连接 secDetectord 接收消息。只能一次订阅,单连接接受消息。去订阅后才能重新订阅。 +8. secDetectord 进程应当等待所有应用程序的连接中断即完全退订所有主题后,才可以关闭退出。 +9. 部分功能(如内存修改探针-安全开关)基于当前CPU状态。因此检测的基本功能是可以检测到当前CPU上的状态变化,其他CPU上的状态变化如果未能及时同步到当前CPU,则不会被检测到。 diff --git a/docs/zh/server/security/secgear/_toc.yaml b/docs/zh/server/security/secgear/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..26e0c80a2c9f7b46761e5a867529ea645c6259fa --- /dev/null +++ b/docs/zh/server/security/secgear/_toc.yaml @@ -0,0 +1,11 @@ +isManual: true +label: '' +sections: + - label: 接口说明 + href: ./api_reference.md + - label: 认识secGear + href: ./introduction_to_secgear.md + - label: secGear 开发指南 + href: ./secGear.md + - label: 安装 secGear + href: ./secgear_installation.md diff --git a/docs/zh/server/security/secgear/api_reference.md b/docs/zh/server/security/secgear/api_reference.md new file mode 100644 index 0000000000000000000000000000000000000000..08feaeb1839f898a37cbdc02c2f4f08e24b26359 --- /dev/null +++ b/docs/zh/server/security/secgear/api_reference.md @@ -0,0 +1,663 @@ +# 接口说明 + +secGear 机密计算统一开发框架提供了屏蔽TEE SDK差异的基础接口,还提供了switchless、远程证明、安全通道等高级特性。 + +## 基础接口 + +### cc_enclave_create + +创建 enclave 接口 + +**功能**: + +初始化接口,函数根据不同 type,调用不同的 TEE 创建函数,完成不同 TEE 方案关于 enclave 上下文初始化,由非安全侧调用。 + +> ![](./public_sys-resources/icon-note.gif) **说明:** +> +> 由于 Intel SGX 限制,多线程并发调用 cc_enclave_create 时存在内存映射的竞争关系,会导致创建 enclave 概率性失败。所以编码时要避免线程并发调用 cc_enclave_create。 + +**函数声明:** + +cc_enclave_result_t cc_enclave_create(const char* path, enclave_type_t type, uint32_t version,uint32_t flags,const enclave_features_t* features,uint32_t features_count, + cc_enclave_t ** enclave); + +**参数:** + +- path:入参,要加载的 enclave 路径 +- type:入参,用来指定 TEE 解决方案, 如 SGX_ENCLAVE_TYPE、GP_ENCLAVE_TYPE、AUTO_ENCLAVE_TYPE +- version:入参,指定的 enclave engine 的版本,目前只有一个版本,取值为 0。 +- flags:入参,标志位,说明这个 enclave 运行状态,例如调试状态 SECGEAR_DEBUG_FLAG、模拟状态 SECGEAR_SIMULATE_FLAG(目前不支持) +- features:入参,用于设置一些关于 enclave 支持的特性,例如 SGX 的 PCL、 switchless 等。目前不支持,请设置为 NULL +- features_count:入参,入参 features 特性结构体的数量。目前不支持,请设置为 0 +- enclave:出参,创建的 enclave 上下文 + +**返回值:** + +- CE_SUCCESS:认证信息验证成功 +- CE_ERROR_INVALID_PARAMETER:输入参数有误 +- CE_ERROR_OUT_OF_MEMORY:无可用内存 +- CC_FAIL:通用错误 +- CC_ERROR_UNEXPECTED:不可预期错误 +- CC_ERROR_ENCLAVE_MAXIMUM:单个 app 创建的 enclave 数量达到最大 +- CC_ERROR_INVALID_PATH:安全二进制路径无效 +- CC_ERROR_NO_FIND_REGFUNC:enclave 引擎搜索失败 + +### cc_enclave_destroy + +销毁 enclave 接口 + +**功能**: + +调用不同 TEE 的退出函数,释放已经创建的 enclave 实体,由非安全侧调用 + +**函数声明:** + +cc_enclave_result_t cc_enclave_destroy (cc_enclave_t ** enclave); + +**参数:** + +- enclave:入参,已经创建 enclave 的上下文 + +**返回值:** + +- CE_SUCCESS:认证信息验证成功 +- CE_ERROR_INVALID_PARAMETER:输入参数有误 +- CE_ERROR_OUT_OF_MEMORY:无可用内存 +- CC_ERROR_NO_FIND_UNREGFUNC:enclave引擎搜索失败 +- CC_FAIL:通用错误 +- CC_ERROR_UNEXPECTED:不可预期错误 + +### cc_malloc_shared_memory + +创建共享内存 + +**功能**: + +开启switchless特性后,创建安全环境与非安全环境可同时访问的共享内存,由非安全侧调用 + +**函数声明:** + +void *cc_malloc_shared_memory(cc_enclave_t *enclave, size_t size); + +**参数:** + +- enclave:入参,安全环境上下文句柄。因不同平台共享内存模型不同,同时为了保持接口跨平台一致性,该参数仅在ARM平台被使用,SGX平台该入参会被忽略 +- size:入参,共享内存大小 + +**返回值:** + +- NULL:共享内存申请失败 +- 其他:为创建的共享内存的首地址 + +### cc_free_shared_memory + +释放共享内存 + +**功能**: + +开启switchless特性后,释放共享内存,由非安全侧调用 + +**函数声明:** + +cc_enclave_result_t cc_free_shared_memory(cc_enclave_t *enclave, void *ptr); + +**参数:** + +- enclave:入参,安全环境上下文句柄。因不同平台共享内存模型不同,同时为了保持接口跨平台一致性,该参数仅在ARM平台被使用(该参数必须与调用cc_malloc_shared_memory接口时传入的enclave保持一致),SGX平台该入参会被忽略 +- ptr:入参,cc_malloc_shared_memory接口返回的共享内存地址 + +**返回值:** + +- CC_ERROR_BAD_PARAMETERS:入参非法 +- CC_ERROR_INVALID_HANDLE:无效enclave或者传入的enclave与ptr所对应的enclave不匹配(仅在ARM平台生效,SGX平台会忽略enclave,故不会对enclave进行检查) +- CC_ERROR_NOT_IMPLEMENTED:该接口未实现 +- CC_ERROR_SHARED_MEMORY_START_ADDR_INVALID:ptr不是cc_malloc_shared_memory接口返回的共享内存地址(仅在ARM平台生效) +- CC_ERROR_OUT_OF_MEMORY:内存不足(仅在ARM平台生效) +- CC_FAIL:一般性错误 +- CC_SUCCESS:成功 + +### cc_enclave_generate_random + +随机数生成 + +**功能**: + +用于在安全侧生成密码安全的随机数 + +**函数声明:** + +cc_enclave_result_t cc_enclave_generate_random(void *buffer, size_t size) + +**参数:** + +- buffer:入参,生成随机数的缓冲区 +- size:入参,缓冲区的长度 + +**返回值:** + +- CE_OK:认证信息验证成功 +- CE_ERROR_INVALID_PARAMETER:输入参数有误 +- CE_ERROR_OUT_OF_MEMORY:无可用内存 + +### cc_enclave_seal_data + +数据持久化 + +**功能**: + +用于加密 enclave 内部数据,使数据可以在 enclave 外部持久化存储,由安全侧调用 + +**函数声明:** + +cc_enclave_result_t cc_enclave_seal_data(uint8_t *seal_data, uint32_t seal_data_len, + +​ cc_enclave_sealed_data_t *sealed_data, uint32_t sealed_data_len, + +​ uint8_t *additional_text, uint32_t additional_text_len) + +**参数:** + +- seal_data:入参,需要加密的数据 +- seal_data_len:入参,需要加密数据的长度 +- sealed_data:出参,加密后的数据处理句柄 +- sealed_data_len:出参,加密后的密文长度 +- additional_text:入参,加密所需的附加消息 +- additional_text_len:入参,附加消息长度 + +**返回值:** + +- CE_SUCCESS:数据加密成功 +- CE_ERROR_INVALID_PARAMETER:输入参数有误 +- CE_ERROR_OUT_OF_MEMORY:无可用内存 +- CC_ERROR_SHORT_BUFFER:传入的buffer过小 +- CC_ERROR_GENERIC:底层硬件通用错误 + +### cc_enclave_unseal_data + +数据解密 + +**功能**: + +用于解密 enclave 密封过的数据,用于将外部持久化数据重新导回 enclave 环境中,由安全侧调用 + +**函数声明:** + +cc_enclave_result_t cc_enclave_unseal_data(cc_enclave_sealed_data_t *sealed_data, + + uint8_t *decrypted_data, uint32_t *decrypted_data_len, + + uint8_t *additional_text, uint32_t *additional_text_len) + +**参数:** + +- sealed_data:入参,已加密数据的句柄 +- decrypted_data:出参,解密之后的密文数据buffer +- decrypted_data_len:出参,解密后密文长度 +- additional_text:出参,解密后附加消息 +- additional_text_len:出参,解密后附加消息长度 + +**返回值:** + +- CE_SUCCESS:数据解密成功 +- CE_ERROR_INVALID_PARAMETER:输入参数有误 +- CE_ERROR_OUT_OF_MEMORY:无可用内存 +- CC_ERROR_SHORT_BUFFER:传入的buffer过小 +- CC_ERROR_GENERIC:底层硬件通用错误 + +### cc_enclave_get_sealed_data_size + +获取加密数据的大小 + +**功能**: + +用于 sealed_data 数据的大小,主要用于分配解密后的数据空间,由安全侧调用 + +**函数声明:** + +uint32_t cc_enclave_get_sealed_data_size(const uint32_t add_len, const uint32_t seal_data_len); + +**参数:** + +- add_len:入参,附加消息长度 +- sealed_data_len:入参,加密信息的长度 + +**返回值:** + +- UINT32_MAX:参数错误或函数执行错误 +- others:函数执行成功,返回值为当前 sealed_data 结构的大小 + +### cc_enclave_get_encrypted_text_size + +获取加密消息的长度 + +**功能**: + +获取加密数数据中加密消息的长度,由安全侧调用 + +**函数声明:** + +uint32_t cc_enclave_get_encrypted_text_size(const cc_enclave_sealed_data_t *sealed_data); + +**参数:** + +- sealed_data:入参,加密数据的句柄 + +**返回值:** + +- UINT32_MAX:参数错误或函数执行错误 +- others:函数执行成功,返回值为当前 sealed_data 中加密消息的长度 + +### cc_enclave_get_add_text_size + +获取附加消息的长度 + +**功能**: + +获取加密数数据中附加消息的长度,由安全侧调用 + +**函数声明:** + +uint32_t cc_enclave_get_add_text_size(const cc_enclave_sealed_data_t *sealed_data); + +**参数:** + +- sealed_data:入参,加密数据的句柄 + +**返回值:** + +- UINT32_MAX:参数错误或函数执行错误 +- others:函数执行成功,返回值为当前sealed_data中附加消息的长度 + +### cc_enclave_memory_in_enclave + +安全内存检查 + +**功能**: + +用于校验指定长度的内存地址是否都属于安全侧内存,由安全侧调用 + +**函数声明:** + +bool cc_enclave_memory_in_enclave(const void *addr, size_t size) + +**参数:** + +- addr:入参,指定需要校验的内存地址 +- size:入参,自内存地址起需要校验的长度 + +**返回值:** + +- true:指定区域内存都在安全区范围内 +- false:指定区域的内存有部分或者全部不在安全范围内 + +### cc_enclave_memory_out_enclave + +安全内存检查 + +**功能**: + +用于校验指定长度的内存地址是否都属于非安全侧内存,由安全侧调用 + +**函数声明:** + +bool cc_enclave_memory_out_enclave(const void *addr, size_t size) + +**参数:** + +- addr:入参,指定需要校验的内存地址 +- size:入参,自内存地址起需要校验的长度 + +**返回值:** + +- true:指定区域内存都在非安全区 +- false:指定区域的内存有部分或者全部在安全区 + +### PrintInfo + +消息打印 + +**功能**: + +用于安全侧日志的打印,本接口输出安全侧用户想打印的信息,输入日志保存在非安全侧/var/log/secgear/secgear.log中 + +**函数声明:** + +void PrintInfo(int level, const char *fmt, ...); + +**参数:** + +- level:入参,日志打印等级,可选项为PRINT_ERROR, PRINT_WARNING, PRINT_STRACE, PRINT_DEBUG +- fmt: 入参,需要输出的字符串 + +**返回值:** + +- 无 + +## switchless + +switchless 是对普通 ecall(REE调用TEE的接口) 的性能优化特性,有两级开关,可以通过如下方法开启。 + +### switchless 总开关 + +通过 cc_enclave_create 函数的 enclave_features_t 参数配置switchless特性,开启总开关,详见[switchless样例](https://gitee.com/openeuler/secGear/tree/master/examples/switchless)。 +switchless特性的配置字段介绍如下, + +```c + typedef struct { + uint32_t num_uworkers; + uint32_t num_tworkers; + uint32_t switchless_calls_pool_size; + uint32_t retries_before_fallback; + uint32_t retries_before_sleep; + uint32_t parameter_num; + uint32_t workers_policy; + uint32_t rollback_to_common; + } cc_sl_config_t; +``` + + | 配置项 | 说明 | + | -------------------------- | ------------------------------------------------------------ | + | num_uworkers | 非安全侧代理工作线程数,用于执行switchless OCALL,当前该字段仅在SGX平台生效,ARM平台可以配置,但是因ARM平台暂不支持OCALL,所以配置后不会生效。
规格:
ARM:最大值:512;最小值:1;默认值:8(配置为0时)
SGX:最大值:4294967295;最小值:1 | + | num_tworkers | 安全侧代理工作线程数,用于执行switchless ECALL。
规格:
ARM:最大值:512;最小值:1;默认值:8(配置为0时)
SGX:最大值:4294967295;最小值:1 | + | switchless_calls_pool_size | switchless调用任务池的大小,实际可容纳switchless_calls_pool_size * 64个switchless调用任务(例:switchless_calls_pool_size=1,可容纳64个switchless调用任务)。
规格:
ARM:最大值:8;最小值:1;默认值:1(配置为0时)
SGX:最大值:8;最小值:1;默认值:1(配置为0时) | + | retries_before_fallback | 执行retries_before_fallback次汇编pause指令后,若switchless调用仍没有被另一侧的代理工作线程执行,就回退到switch调用模式,该字段仅在SGX平台生效。
规格:SGX:最大值:4294967295;最小值:1;默认值:20000(配置为0时) | + | retries_before_sleep | 执行retries_before_sleep次汇编pause指令后,若代理工作线程一直没有等到有任务来,则进入休眠状态,该字段仅在SGX平台生效。
规格: SGX:最大值:4294967295;最小值:1;默认值:20000(配置为0时) | + | parameter_num | switchless函数支持的最大参数个数,该字段仅在ARM平台生效。
规格: ARM:最大值:16;最小值:0 | + | workers_policy | switchless代理线程运行模式,该字段仅在ARM平台生效。
规格: ARM: WORKERS_POLICY_BUSY:代理线程一直占用CPU资源,无论是否有任务需要处理,适用于对性能要求极高且系统软硬件资源丰富的场景; WORKERS_POLICY_WAKEUP:代理线程仅在有任务时被唤醒,处理完任务后进入休眠,等待再次被新任务唤醒 | + | rollback_to_common | 异步switchless调用失败时是否回退到普通调用,该字段仅在ARM平台生效。
规格: ARM:0:否,失败时仅返回相应错误码;其他:是,失败时回退到普通调用,此时返回普通调用的返回值 | + +### ecall 函数的开关 + +通过 transition_using_threads 关键字开启对应 ecall 的 switchless。 + + ```ocaml + enclave { + include "secgear_urts.h" + from "secgear_tstdc.edl" import *; + from "secgear_tswitchless.edl" import *; + trusted { + public int get_string([out, size=32]char *buf); + public int get_string_switchless([out, size=32]char *buf) transition_using_threads; + }; + }; + ``` + +## 远程证明 + +远程证明提供接口如下, 调用方式参考[远程证明样例](https://gitee.com/openeuler/secGear/tree/master/examples/remote_attest)和[本地证明样例](https://gitee.com/openeuler/secGear/tree/master/examples/local_attest)。 + +| 用户 | 接口 | 接口功能 | 头文件 | 库文件 | +|------|-------------------|----------|-----------------------|----------------------| +| 证明服务 | cc_prepare_ra_env | 初始化证明环境 | sg_ra_report.h | libsecgear_ra.so | +| 证明服务 | cc_get_ra_report | 获取远程证明报告 | sg_ra_report.h | libsecgear_ra.so | +| TA | cc_local_attest | 本地证明 | sg_local_attest.h | libsecgear_la.a | +| 验证者 | cc_verify_report | 校验远程证明报告 | sg_ra_report_verify.h | libsecgear_verify.so | + +## 安全通道 + +安全通道以lib库方式提供,分为客户端、服务端host、服务端enclave三部分,分别由业务程序的客户端、服务端CA、服务端TA调用。 + +| 模块 | 头文件 | 库文件 | 依赖 | +|------------|--------------------------|-----------------------|---------| +| 客户端 | secure_channel_client.h | libcsecure_channel.so | openssl | +| 服务端host | secure_channel_host.h | libusecure_channel.so | openssl | +| 服务端enclave | secure_channel_enclave.h | libtsecure_channel.so | TEE及TEE软件栈 | + +### 接口列表 + +| 接口名 | 所属头文件、库 | 功能 | 备注 | +|----------------------------------------------------------------------------------------------------------------------------------------------|-----------------------|--------------|----| +| cc_sec_chl_client_init | secure_channel_client.h libcsecure_channel.so | 安全通道客户端初始化 | 调用前需初始化参数ctx中网络连接和消息发送钩子函数 | +| cc_sec_chl_client_fini | secure_channel_client.h libcsecure_channel.so | 安全通道客户端销毁 | 通知服务端销毁本客户端的信息,销毁本地安全通道信息 | +| cc_sec_chl_client_callback | secure_channel_client.h libcsecure_channel.so | 安全通道协商消息处理函数 | 处理安全通道协商过程中,服务端发送给客户端的消息。在客户端消息接收处调用 | +| cc_sec_chl_client_encrypt | secure_channel_client.h libcsecure_channel.so | 安全通道客户端的加密接口 | 无 | +| cc_sec_chl_client_decrypt | secure_channel_client.h libcsecure_channel.so | 安全通道客户端的解密接口 | 无 | +| int (*cc_conn_opt_funcptr_t)(void *conn, void *buf, size_t count); | secure_channel.h | 消息发送钩子函数原型 | 由用户客户端和服务端实现,实现中指定安全通道协商消息类型,负责发送安全通道协商消息到对端 | +| cc_sec_chl_svr_init | secure_channel_host.h libusecure_channel.so | 安全通道服务端初始化 | 调用前需初始化ctx中enclave_ctx | +| cc_sec_chl_svr_fini | secure_channel_host.h libusecure_channel.so | 安全通道服务端销毁 | 销毁安全通道服务端以及所有客户端信息 | +| cc_sec_chl_svr_callback | secure_channel_host.h libusecure_channel.so | 安全通道协商消息处理函数 | 处理安全通道协商过程中,客户端发送给服务端的消息。在服务端消息接收处调用,调用前需初始化与客户端的网络连接和发送消息函数,详见[样例](https://gitee.com/openeuler/secGear/blob/master/examples/secure_channel/host/server.c#:~:text=conn_ctx.conn_kit.send)。 | +| cc_sec_chl_enclave_encrypt | secure_channel_enclave.h libtsecure_channel.so | 安全通道enclave中的加密接口 | 无 | +| cc_sec_chl_enclave_decrypt | secure_channel_enclave.h libtsecure_channel.so | 安全通道enclave中的解密接口 | 无 | + +### 注意事项 + +- 安全通道仅封装密钥协商过程、加解密接口,不建立网络连接,协商过程复用业务的网络连接。其中客户端和服务端的网络连接由业务建立和维护,在安全通道客户端和服务端初始化时传入消息发送钩子函数和网络连接指针。 +- 客户端和服务端网络消息接收函数的读buffer长度要预留足够大,能够容纳 12320 字节的安全通道初始化消息。详见[安全通道样例](https://gitee.com/openeuler/secGear/tree/master/examples/secure_channel)。 + +# 开发工具 + +secGear 提供了一套工具集,方便用户开发应用程序。本章介绍相关工具及其使用方法。 + +## 代码生成工具 + +### 简介 + +secGear codegen 用于解析 EDL 文件生成中间 C 代码,即辅助生成安全测与非安全侧文件互相调用的代码。 + +secGear codegen 定义的 EDL 文件格式与 intel SGX SDK edger8r 相同,但是不支持 Intel 的完整语法定义: + +- 只能在方法中使用 public,不加 public 的函数声明默认为 private +- 不支持从非安全侧到安全侧,以及安全侧到非安全侧的 Switchless Calls +- OCALL(Outside call) 不支持部分调用模式(如 cdecl,stdcall,fastcall) + +EDL 文件语法为类 C 语言语法,这里主要描述与 C 语言的差异部分: + +| 成员 | 含义 | +| ----------------------- | ------------------------------------------------------------ | +| include "my_type.h" | 使用外部包含文件中定义的类型 | +| trusted | 声明 TA(Trusted Application)侧可用安全函数 | +| untrusted | 声明 TA 侧可用不安全函数 | +| return_type | 定义返回值类型 | +| parameter_type | 定义参数类型 | +| [in , size = len] | 对ecall而言,表示该参数需要将数据从非安全侧传入安全侧,ocall反之(指针类型需要使用此参数,其中 size 表示实际使用的 buffer) | +| [out, size = len] | 对ecall而言,表示该参数需要将数据从安全侧传出到非安全侧,ocall反之(指针类型需要使用此参数,其中 size 表示实际使用的 buffer) | + +### 使用说明 + +#### **命令格式** + +codegen 的命令格式如下: + +**codegen** < --trustzone | --sgx > [--trusted-dir \ | **--untrusted-dir** \| --trusted | --untrusted ] edlfile + +#### **参数说明** + +各参数含义如下: + +| **参数** | 是否可选 | 参数含义 | +| ---------------------- | -------- | ------------------------------------------------------------ | +| --trustzone \| --sgx | 必选 | 只在当前运行命令目录下生成机密计算架构对应接口函数,不加参数默认生成 SGX 接口函数 | +| --search-path \ | 可选 | 用于指定被转译的edl文件所依赖文件的搜索路径 | +| --use-prefix | 可选 | 用于给代理函数名称加上前缀,前缀名为edl的文件名 | +| --header-only | 可选 | 指定代码生成工具只生成头文件 | +| --trusted-dir \ | 可选 | 指定生成安全侧辅助代码所在目录,不指定该参数默认为当前路径 | +| --untrusted-dir \ | 可选 | 指定生成非安全侧函数辅助代码所在目录 | +| --trusted | 可选 | 生成安全侧辅助代码 | +| --untrusted | 可选 | 生成非安全侧辅助代码 | +| edlfile | 必选 | 需要转译的 EDL 文件,例如 hello.edl | + +#### 示例 + +- 转译 *helloworld.edl* ,在 *enclave-directory* 下生成安全侧辅助代码,*host-directory* 下生成非安全辅助代码的命令示例如下: + +```shell +$ codegen --sgx --trusted-dir enclave-directory --untrusted-dir host-directory helloworld.edl +``` + +- 转译 *helloworld.edl* ,在当前目录生成安全侧辅助代码,不生成非安全辅助代码的命令示例如下: + +```shell +$ codegen --sgx --trusted helloworld.edl +``` + +- 转译 *helloworld.edl* ,在当前目录生成非安全侧辅助代码,不生成安全辅助代码的命令示例如下: + +```shell +$ codegen --sgx --untrusted helloworld.edl +``` + +- 转译 *helloworld.edl* ,在 当前目录生成安全侧和非安全侧辅助代码的命令示例如下: + +```shell +$ codegen --sgx helloworld.edl +``` + +## 签名工具 + +### 简介 + +secGear sign_tool 是一款命令行工具,包含编译工具链和签名工具,用于 enclave 签名。sign_tool 有两种签名形式: + +- 单步签名:仅适用于 debug 调试模式 +- 两步签名:商用场景。需要从第三方平台或者独立的安全设备获取签名私钥,对 envlave 进行签名 + +### 使用指导 + +#### **命令格式** + +sign_tool 包含 sign 指令(对 enclave 进行签名)和 digest 指令(生成摘要值)。命令格式为: + +**sign_tool.sh -d** [sign | digest] **-x** \ **-i** \ **-p** \ **-s** \ [OPTIONS] **–o** \ + +#### **参数说明** + +| sign 指令参数 | 参数含义 | 是否必选 | +| -------------- | -------------------------------------------------------------| -------------------------------------------- | +| -a \ | api_level,标识 iTrustee TA 的 GP API version,默认为 1 | 可选 | +| -c \ | 配置文件 | 可选 | +| -d \ | 指定签名工具要进行的操作( sign 或者 digest ) | 单步仅执行sign,两步需要先执行digest,再执行sign | +| -e \ | 设备的公钥证书,用于保护加密 rawdata 的 AES key (iTrustee必需) | 仅 iTrustee 类型必选 | +| -f \ | OTRP_FLAG,是否支持 OTRP 标准协议,默认为 0 | 可选 | +| -i \ | 待签名的库文件 | 必选 | +| -k \ | 单步签名所需私钥(pem文件) | 仅 SGX 类型必选 | +| -m \ | 安全配置文件 mainfest.txt,由用户自行配置 | 仅 iTrustee 类型必选 | +| -o \ | 指定输出文件名
其中 iTrustee 类型时格式为:"/output_path/uuid.sec", uuid 必须和 manifest.txt 中 gpd.ta.appID 一致 | 必选 | +| -p \ | 两步签名所需的签名服务器公钥证书(pem文件) | 必选 | +| -s \ | 两步签名所需的已签名摘要值 | 必选 | +| -t \ | TA_TYPA,标识 iTrustee 的 TA 二进制格式,默认为 1 | 可选 | +| -x \ | encalve type(sgx 或 trustzone) | 必选 | +| -h | 打印帮助信息 | 可选 | + +#### **单步签名** + +enclave 类型为 SGX,给 test.enclave 签名,输出签名文件 signed.enclave 的示例如下: + +```shell +$ sign_tool.sh –d sign –x sgx –i test.enclave -k private_test.pem –o signed.enclave +``` + +#### **两步签名** + +以 SGX 为例,两步签名的操作步骤如下: + +1. 生成摘要值 + + 使用 sign_tool 签名,生成摘要值 digest.data 和临时中间文件 signdata(该文件在生成签名文件时使用,并在签名后自动删除)。参考命令如下: + + ```shell + $ sign_tool.sh –d digest –x sgx –i input –o digest.data + ``` + +2. 将 digest.data 发送至签名机构或平台,并获取对应签名。 + +3. 使用获取的签名生成签名后的动态库 signed.enclave。 + + ```shell + $ sign_tool.sh –d sign –x sgx–i input –p pub.pem –s signature –o signed.enclave + ``` + +说明:为发布 Intel SGX 支持的正式版本应用,需要申请 Intel 白名单。流程请参考 Intel 文档: + +# 安全应用开发指南 + +这里给出基于 secGear 接口开发一个 C 语言程序 helloworld 的例子,方便用户理解使用 secGear 开发应用程序。 + +## 下载样例 + +```shell +git clone https://gitee.com/openeuler/secGear.git +``` + +## 目录结构说明 + +```shell +cd examples/helloworld + +#目录结构如下 +├── helloworld +│ ├── CMakeLists.txt +│ ├── enclave +│ │ ├── CMakeLists.txt +│ │ ├── Enclave.config.xml +│ │ ├── Enclave.lds +│ │ ├── hello.c +│ │ ├── manifest.txt +│ │ └── config_cloud.ini +│ ├── helloworld.edl +│ └── host +│ ├── CMakeLists.txt +│ └── main.c +``` + +代码主体分为三块: + +- 非安全侧程序(main.c) +- 非安全侧与安全侧调用接口头文件(helloworld.edl) +- 安全侧程序(hello.c) + +## 准备工作 + +除以上三部分主体代码外,还有编译工程文件(CMakeLists.txt)、开发者证书(SGX的Enclave.config.xml/Enclave.lds,鲲鹏的manifest.txt/config_cloud.ini)。 + +> ![](./public_sys-resources/icon-note.gif)说明: +> +> - 鲲鹏开发者证书需要向华为业务负责人[申请开发者证书](https://gitee.com/link?target=https%3A%2F%2Fwww.hikunpeng.com%2Fdocument%2Fdetail%2Fzh%2Fkunpengcctrustzone%2Ffg-tz%2Fkunpengtrustzone_04_0009.html)。 +> - SGX以Debug模式调试,暂时不用申请。如需正式商用并且用intel的远程证明服务,需要向Intel[申请License](https://gitee.com/link?target=https%3A%2F%2Fwww.intel.com%2Fcontent%2Fwww%2Fus%2Fen%2Fdeveloper%2Ftools%2Fsoftware-guard-extensions%2Frequest-license.html)。 + +申请成功后会得到开发者证书相关文件,需要放置到代码目录相应位置。 + +## 开发步骤 + +基于secGear做机密计算应用拆分改造,类似于独立功能模块提取,识别敏感数据处理逻辑,提取成独立的lib库,部署在可信执行环境中,对非安全侧提供的接口定义在EDL文件中。 + +开发步骤如下图所示: + +1. 开发非安全侧main函数及接口,管理enclave并调用安全侧函数。 +2. 开发EDL文件(类似C语言头文件定义非安全侧与安全侧交互接口) +3. 开发安全侧接口实现 +4. 调用代码生成工具,根据EDL自动生成非安全侧与安全侧交互源码,并分别编译到非安全侧与安全侧二进制文件中,非安全侧逻辑直接调用安全侧对应的接口即可,无需关心自动的生成的交互代码,降低开发成本。 +5. 调用签名工具对安全侧二进制签名,实现安全侧程序可信启动。 + +![](./figures/develop_step.png) + +## 编译运行 + +### ARM环境 + +```shell +// clone secGear repository +git clone https://gitee.com/openeuler/secGear.git + +// build secGear and examples +cd secGear +source environment +mkdir debug && cd debug && cmake -DENCLAVE=GP .. && make && sudo make install + +// run helloworld +/vendor/bin/secgear_helloworld +``` + +### x86环境 + +```shell +// clone secGear repository +git clone https://gitee.com/openeuler/secGear.git + +// build secGear and examples +cd secGear +source /opt/intel/sgxsdk/environment && source environment +mkdir debug && cd debug && cmake .. && make && sudo make install + +// run helloworld +./examples/helloworld/host/secgear_helloworld +``` diff --git a/docs/zh/server/security/secgear/figures/develop_step.png b/docs/zh/server/security/secgear/figures/develop_step.png new file mode 100644 index 0000000000000000000000000000000000000000..4241739df0bcd015dc1589f023d5d1d44f839438 Binary files /dev/null and b/docs/zh/server/security/secgear/figures/develop_step.png differ diff --git a/docs/zh/server/security/secgear/figures/secGear_arch.png b/docs/zh/server/security/secgear/figures/secGear_arch.png new file mode 100644 index 0000000000000000000000000000000000000000..7cdafb8e26b2606defe21596425715bc86700873 Binary files /dev/null and b/docs/zh/server/security/secgear/figures/secGear_arch.png differ diff --git a/docs/zh/server/security/secgear/introduction_to_secgear.md b/docs/zh/server/security/secgear/introduction_to_secgear.md new file mode 100644 index 0000000000000000000000000000000000000000..5492c51f7edbab72d7dde455f23c9c28310bb0e2 --- /dev/null +++ b/docs/zh/server/security/secgear/introduction_to_secgear.md @@ -0,0 +1,57 @@ +# 认识secGear + +## 概述 + +随着云计算的快速发展,越来越多的企业把计算业务部署到云上,面对第三方云基础设施,云上用户数据安全面临着巨大的挑战。机密计算是一种基于硬件可信执行环境的隐私保护技术,旨在依赖最底层硬件,构建最小信任依赖,将操作系统、Hypervisor、基础设施、系统管理员、服务提供商等都从信任实体列表中删除,视为未经授权的实体,从而减少潜在的风险,保护可信执行环境中数据的机密性、完整性。然而随着机密计算技术的兴起,业界机密计算技术种类繁多(如主流的Intel SGX、ARM Trustzone、RISC-V keystone等),各技术SDK也千差万别,给开发者带来较大的开发维护成本,从长远考虑,还会造成机密计算应用生态隔离。为方便开发者快速构建保护云上数据安全的机密计算解决方案,openEuler推出机密计算统一开发框架secGear。 + +## 架构介绍 + +![](./figures/secGear_arch.png) + +secGear机密计算统一开发框架整体架构如图所示,主要提供三大能力。 + +- **架构兼容**:屏蔽不同SDK接口差异,提供统一开发接口,实现不同架构共源码。 +- **易开发**:提供开发工具、通用安全组件等,帮助用户聚焦业务,开发效率提升50%。 +- **高性能**:提供零切换特性,提升典型场景下REE-TEE交互性能10倍+。 + +## 关键特性 + +### 零切换 + +#### 客户痛点 + +传统应用做机密计算拆分改造后,REE侧逻辑存在频繁调用TEE侧逻辑时或REE与TEE存在频繁大块数据交互时,由于REE与TEE之间的每次调用,都需要经过REE用户态 、REE内核态、驱动、TEE内核态、TEE用户态之间的上下文切换,调用传递的大块数据也要经过多次拷贝,并且驱动底层数据块大小限制等因素,频繁的REE与TEE交互性能直线下降,严重影响机密计算应用的落地。 + +#### 解决方案 + +[零切换](https://gitee.com/openeuler/secGear#switchless%E7%89%B9%E6%80%A7)是一种通过共享内存减少REE与TEE上下文切换及数据拷贝次数,优化REE与TEE交互性能的技术。 + +### 远程证明 + +#### 客户痛点 + +机密计算技术为了解决云上数据安全而生,然而由于数据泄露危害较大,仅从技术理论上证明机密计算技术的安全性,租户依然有所顾虑,影响机密计算的推广应用。 + +#### 解决方案 + +机密计算厂商纷纷推出远程证明技术,可以让租户随时检测云上可信执行环境及应用的可信状态,彻底打消租户的顾虑。 +远程证明是一种动态度量技术,可以对可信执行环境和运行在环境里的应用进行实时度量,生成证明报告,并使用预置根密钥签名,防止证明报告被篡改。 +[secGear远程证明](https://gitee.com/openeuler/secGear#%E8%BF%9C%E7%A8%8B%E8%AF%81%E6%98%8E%E7%89%B9%E6%80%A7)基于各厂商SDK远程证明能力,封装统一远程证明代理组件,支持证明报告获取和验证,当前支持鲲鹏平台和virtCCA。 + +### 安全通道 + +#### 客户痛点 + +数据拥有者在请求云上机密计算服务时,需要把待处理数据上传到云上TEE环境中处理,由于TEE没有网络,用户数据需要经过网络先传输到REE,REE接收到数据的明文后,再传入TEE中。用户数据的明文暴露在REE内存中,存在安全风险。 + +#### 解决方案 + +安全通道是一种结合机密计算远程证明,实现数据拥有者与云上TEE之间安全的密钥协商技术,协商出仅数据拥有者与云上TEE拥有的sessionkey,再通过sessionkey加密用户数据,网络传输的是sessionkey加密后的数据,REE接收到密文数据,再传入TEE中解密、处理。 + +## 缩略语 + +| 缩略语 | 英文全名 | 中文解释 | +| ------ | ----------------------------- | ---------------- | +| REE | Rich Execution Environment | 富执行环境 | +| TEE | Trusted Execution Environment | 可信执行环境 | +| EDL | Enclave Description Language | 安全应用描述语言 | diff --git a/docs/zh/server/security/secgear/public_sys-resources/icon-note.gif b/docs/zh/server/security/secgear/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/server/security/secgear/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/server/security/secgear/secGear.md b/docs/zh/server/security/secgear/secGear.md new file mode 100644 index 0000000000000000000000000000000000000000..edfe5ba23cdc9e523420aa477528afc6108b85fa --- /dev/null +++ b/docs/zh/server/security/secgear/secGear.md @@ -0,0 +1,4 @@ +# secGear 开发指南 + +本文档介绍openEuler机密计算统一开发框架secGear的架构、特性、安装、开发指导等,帮助用户快速了解并使用secGear。 +本文档适用于使用openEuler系统并希望了解和使用secGear的社区开发者、开源爱好者以及相关合作伙伴。使用人员需要具备基本的Linux操作系统知识。 diff --git a/docs/zh/server/security/secgear/secgear_installation.md b/docs/zh/server/security/secgear/secgear_installation.md new file mode 100644 index 0000000000000000000000000000000000000000..cf83d50e832a04060e2c8bb502ad8dee7fe9715b --- /dev/null +++ b/docs/zh/server/security/secgear/secgear_installation.md @@ -0,0 +1,129 @@ +# 安装 secGear + +## ARM环境 + +### 环境要求 + +#### 硬件环境 + +| 项目 | 版本 | +| ------ | --------------------------------------------------- | +| 服务器 | TaiShan 200服务器(型号2280) | +| 主板 | 鲲鹏主板 | +| BMC | 1711单板(型号BC82SMMAB),固件版本不低于3.01.12.49 | +| CPU | 鲲鹏920处理器(型号7260、5250、5220) | +| 机箱 | 不限,建议8盘或12盘 | + +> ![img](./public_sys-resources/icon-note.gif)说明 +> +> - 要求服务器已经预置TrustZone特性套件,即预装TEE OS、TEE OS启动密钥、BMC、BIOS和License许可证。 +> - 普通服务器无法仅通过升级BMC、BIOS、TEE OS固件实现TrustZone特性使能。 +> - 带TrustZone特性的服务器出厂默认特性关闭,请参考BIOS设置使能服务器TrustZone特性。 + +#### 操作系统 + +openEuler 22.03 LTS SP4及以上 + +openEuler 22.09 + +openEuler 22.03 LTS及以上 + +### 环境准备 + + 参考鲲鹏官网[环境要求](https://www.hikunpeng.com/document/detail/zh/kunpengcctrustzone/fg-tz/kunpengtrustzone_04_0006.html)和[搭建步骤](https://www.hikunpeng.com/document/detail/zh/kunpengcctrustzone/fg-tz/kunpengtrustzone_04_0007.html)。 + +### 安装操作 + +1. 配置openEuler yum源,在线yum源或通过ISO挂载配置本地yum源,配置在线源如下(仅以22.03-LTS-SP4举例,其他版本需要使用版本对应的yum源)。 + + ```shell + vi openEuler.repo + [osrepo] + name=osrepo + baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/aarch64/ + enabled=1 + gpgcheck=1 + gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/aarch64/RPM-GPG-KEY-openEuler + ``` + +2. 安装secGear + + ```shell + #安装编译工具 + yum install cmake ocaml-dune + + #安装secGear + yum install secGear-devel + + #检查是否安装成功。命令和回显如下表示安装成功。 + rpm -qa | grep -E 'secGear|itrustee|ocaml-dune' + itrustee_sdk-xxx + itrustee_sdk-devel-xxx + secGear-xxx + secGear-devel-xxx + ocaml-dune-xxx + ``` + +## X86环境 + +### 环境要求 + +#### 硬件环境 + +支持Intel SGX(Intel Software Guard Extensions) 特性的处理器。 + +#### 操作系统 + +openEuler 22.03 LTS SP4及以上 + +openEuler 22.09 + +openEuler 22.03 LTS及以上 + +### 环境准备 + +购买支持Intel SGX特性设备,参考对应设备BIOS配置手册,开启SGX特性。 + +### 安装操作 + +1. 配置openEuler yum源,在线yum源或通过ISO挂载配置本地yum源,配置在线源如下(仅以22.03-LTS-SP4举例,其他版本需要使用版本对应的yum源)。 + + ```shell + vi openEuler.repo + [osrepo] + name=osrepo + baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/x86_64/ + enabled=1 + gpgcheck=1 + gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/x86_64/RPM-GPG-KEY-openEuler + ``` + +2. 安装secGear + + ```shell + #安装编译工具 + yum install cmake ocaml-dune + + #安装secGear + yum install secGear-devel + + #检查是否安装成功。命令和回显如下表示安装成功。 + rpm -qa | grep -E 'secGear|ocaml-dune|sgx' + secGear-xxx + secGear-devel-xxx + ocaml-dune-xxx + libsgx-epid-xxx + libsgx-enclave-common-xxx + libsgx-quote-ex-xxx + libsgx-aesm-launch-plugin-xxx + libsgx-uae-service-xxx + libsgx-ae-le-xxx + libsgx-urts-xxx + sgxsdk-xxx + sgx-aesm-service-xxx + linux-sgx-driver-xxx + libsgx-launch-xxx + ``` + + + diff --git a/docs/zh/server/security/secharden/_toc.yaml b/docs/zh/server/security/secharden/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..70a59f79b15ef6d83e460f866ed637d8c4cce3d0 --- /dev/null +++ b/docs/zh/server/security/secharden/_toc.yaml @@ -0,0 +1,27 @@ +isManual: true +label: '' +sections: + - label: 帐户口令 + href: ./account_passwords.md + - label: 附录 + href: ./appendix.md + - label: 授权认证 + href: ./authentication_and_authenticationu.md + - label: 文件权限 + href: ./file_permissions.md + - label: 内核参数 + href: ./kernel_parameters.md + - label: 操作系统加固概述 + href: ./os_hardening_overview.md + - label: 安全加固指南 + href: ./secharden.md + - label: openEuler安全配置说明 + href: ./security_configuration_benchmark.md + - label: 安全加固工具 + href: ./security_configuration_hardening_tool.md + - label: 加固指导 + href: ./security_hardening_guide.md + - label: SELinux配置 + href: ./selinux_configuration.md + - label: 系统服务 + href: ./system_services.md diff --git a/docs/zh/server/security/secharden/account_passwords.md b/docs/zh/server/security/secharden/account_passwords.md new file mode 100644 index 0000000000000000000000000000000000000000..c18d267ee02638a78a5c0f35dc95777f1afd1c55 --- /dev/null +++ b/docs/zh/server/security/secharden/account_passwords.md @@ -0,0 +1,329 @@ +# 帐户口令 + +- [帐户口令](#帐户口令) + - [屏蔽系统帐户](#屏蔽系统帐户) + - [限制使用su命令的帐户](#限制使用su命令的帐户) + - [设置口令复杂度](#设置口令复杂度) + - [设置口令有效期](#设置口令有效期) + - [设置口令的加密算法](#设置口令的加密算法) + - [登录失败超过三次后锁定](#登录失败超过三次后锁定) + - [加固su命令](#加固su命令) + +## 屏蔽系统帐户 + +### 说明 + +除了用户帐户外,其他帐号称为系统帐户。系统帐户仅系统内部使用,禁止用于登录系统或其他操作,因此屏蔽系统帐户。 + +### 实现 + +将系统帐户的Shell修改为/sbin/nologin。 + +```sh +usermod -L -s /sbin/nologin $systemaccount +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +> $systemaccount 指系统帐户。 + +## 限制使用su命令的帐户 + +### 说明 + +su命令用于在不同帐户之间切换。为了增强系统安全性,有必要对su命令的使用权进行控制,只允许root和wheel群组的帐户使用su命令,限制其他帐户使用。 + +### 实现 + +su命令的使用控制通过修改/etc/pam.d/su文件实现,配置如下: + +```sh +auth required pam_wheel.so use_uid +``` + +**表 1** pam\_wheel.so配置项说明 + + + + + + + + + + +

配置项

+

说明

+

use_uid

+

基于当前帐户的uid。

+
+ +## 设置口令复杂度 + +### 说明 + +用户可以通过修改对应配置文件设置口令的复杂度,建议用户根据实际情况设置口令复杂度。 + +### 实现 + +口令复杂度通过/etc/pam.d/password-auth和/etc/pam.d/system-auth文件中的pam\_pwquality.so和pam\_pwhistory.so模块实现。用户可以通过修改这两个模块中的配置项修改口令复杂度。 + +### 设置举例 + +这里给出一个配置口令复杂度的例子,供用户参考。 + +**密码复杂度要求** + +1. 口令长度至少8个字符。 +2. 口令必须包含如下至少3种字符的组合: + + -至少一个小写字母 + + -至少一个大写字母 + + -至少一个数字 + + -至少一个特殊字符:\`\~!@\#$%^&\*\(\)-\_=+\\|\[\{\}\];:'",<.\>/?和空格 + +3. 口令不能和帐号或者帐号的倒写一样。 +4. 不能修改为过去5次使用过的旧口令。 + +**配置实现** + +在/etc/pam.d/password-auth和/etc/pam.d/system-auth文件中password配置项的前两行添加如下配置内容: + +```sh +password requisite pam_pwquality.so minlen=8 minclass=3 enforce_for_root try_first_pass local_users_only retry=3 dcredit=0 ucredit=0 lcredit=0 ocredit=0 +password required pam_pwhistory.so use_authtok remember=5 enforce_for_root +``` + +**配置项说明** + +pam\_pwquality.so和pam\_pwhistory.so的配置项请分别参见[表2](#table201221044172117)和[表3](#table1212544452120)。 + +**表 2** pam\_pwquality.so配置项说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

配置项

+

说明

+

minlen=8

+

口令长度至少包含8个字符。

+

minclass=3

+

口令至少包含大写字母、小写字母、数字和特殊字符中的任意3种。

+

ucredit=0

+

口令包含任意个大写字母。

+

lcredit=0

+

口令包含任意个小写字母。

+

dcredit=0

+

口令包含任意个数字。

+

ocredit=0

+

口令包含任意个特殊字符。

+

retry=3

+

每次修改最多可以尝试3次。

+

enforce_for_root

+

本设置对root帐户同样有效。

+
+ +**表 3** pam\_pwhistory.so配置项说明 + + + + + + + + + + + + + +

配置项

+

说明

+

remember=5

+

口令不能修改为过去5次使用过的旧口令

+

enforce_for_root

+

本设置对root帐户同样有效

+
+ +## 设置口令有效期 + +### 说明 + +出于系统安全性考虑,建议设置口令有效期限,且口令到期前通知用户更改口令。 + +### 实现 + +口令有效期的设置通过修改/etc/login.defs文件实现,加固项如[表4](#zh-cn_topic_0152100281_t77b5d0753721450c81911c18b74e82eb)所示。表中所有的加固项都在文件/etc/login.defs中。表中字段直接通过修改配置文件完成。 + +**表 4** login.defs配置项说明所示 + + + + + + + + + + + + + + + + + + + + + + + + +

加固项

+

加固项说明

+

建议加固

+

openEuler默认是否已加固为建议值

+

PASS_MAX_DAYS

+

口令最大有效期

+

90

+

+

PASS_MIN_DAYS

+

两次修改口令的最小间隔时间

+

0

+

+

PASS_WARN_AGE

+

口令过期前开始提示天数

+

7

+

+
+ +>![](./public_sys-resources/icon-note.gif) **说明:** +>login.defs是设置用户帐号限制的文件,可配置口令的最大过期天数、最大长度约束等。该文件里的配置对root用户无效。如果/etc/shadow文件里有相同的选项,则以/etc/shadow配置为准,即/etc/shadow的配置优先级高于/etc/login.defs。口令过期后用户重新登录时,提示口令过期并强制要求修改,不修改则无法进入系统。 + +## 设置口令的加密算法 + +### 说明 + +出于系统安全考虑,口令不允许明文存储在系统中,应该加密保护。在不需要还原口令的场景,必须使用不可逆算法加密。设置口令的加密算法为sha512,openEuler默认已设置。通过上述设置可以有效防范口令泄露,保证口令安全。 + +### 实现 + +口令的加密算法设置通过修改/etc/pam.d/password-auth和/etc/pam.d/system-auth文件实现,添加如下配置: + +```sh +password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok +``` + +**表 5** pam\_unix.so配置项说明 + + + + + + + + + + +

配置项

+

说明

+

sha512

+

使用sha512算法对口令加密。

+
+ +## 登录失败超过三次后锁定 + +### 说明 + +为了保障用户系统的安全,建议用户设置口令出错次数的阈值(建议3次),以及由于口令尝试被锁定用户的自动解锁时间(建议300秒)。 + +用户锁定期间,任何输入被判定为无效,锁定时间不因用户的再次输入而重新计时;解锁后,用户的错误输入记录被清空。通过上述设置可以有效防范口令被暴力破解,增强系统的安全性。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>openEuler默认口令出错次数的阈值为3次,系统被锁定后自动解锁时间为60秒。 + +### 实现 + +口令复杂度的设置通过修改/etc/pam.d/password-auth和/etc/pam.d/system-auth文件实现,设置口令最大的出错次数为3次,系统锁定后的解锁时间为300秒的配置如下: + +```text +auth required pam_faillock.so preauth audit deny=3 even_deny_root unlock_time=300 +auth [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=300 +auth sufficient pam_faillock.so authsucc audit deny=3 even_deny_root unlock_time=300 +``` + +**表 6** pam\_faillock.so配置项说明 + + + + + + + + + + + + + + + + + + + +

配置项

+

说明

+

authfail

+

捕获用户登录失败的事件。

+

deny=3

+

用户连续登录失败次数超过3次即被锁定。

+

unlock_time=300

+

普通用户自动解锁时间为300秒(即5分钟)。

+

even_deny_root

+

同样限制root帐户。

+
+ +## 加固su命令 + +### 说明 + +为了增强系统安全性,防止使用“su”切换用户时将当前用户环境变量带入其他环境,openEuler默认已做配置。总是在使用su切换用户时初始化PATH。 + +### 实现 + +通过修改/etc/login.defs实现,配置如下: + +```sh +ALWAYS_SET_PATH=yes +``` diff --git a/docs/zh/server/security/secharden/appendix.md b/docs/zh/server/security/secharden/appendix.md new file mode 100644 index 0000000000000000000000000000000000000000..4f3eff1715b09bc701dd552a5d2f58a6d3b1125b --- /dev/null +++ b/docs/zh/server/security/secharden/appendix.md @@ -0,0 +1,35 @@ +# 附录 + +介绍文件权限的含义和umask值的含义。 + + + +- [附录](#附录) + - [文件和目录权限含义](#文件和目录权限含义) + - [umask值含义](#umask值含义) + + + +## 文件和目录权限含义 + +Linux系统中文件和目录权限用于限定谁能通过何种方式对文件和目录进行访问和操作。文件和目录的访问权限分为只读,只写和可执行三种。 + +有三种不同类型的用户可对文件和目录进行访问: + +- 文件所有者:文件的创建者。 +- 同组用户:与文件所有者在同一个属组的用户。 +- 其他用户:与文件所有者不在同一个属组的用户。 + +文件和目录的权限含义通过以下例子说明: + +假设/usr/src的权限为755,将每位数字转化为二进制后为:111101101,含义如下: + +- 左侧三个bit位111表示文件所有者的权限依次为:可读、可写、可执行。 +- 中间三个bit位101表示同组用户的权限依次为:可读、不可写、可执行。 +- 右侧三个bit位101表示其他用户的权限依次为:可读、不可写、可执行。 + +## umask值含义 + +当用户新创建文件或目录时,该文件或目录具有一个缺省权限。该缺省权限由umask值来指定。 + +umask值代表的是权限的“补码”,即用缺省最大权限值减去umask值得到实际权限值。文件的缺省最大权限为可读可写,目录的缺省最大权限为可读可写可执行。即一个文件的实际缺省权限为666减去umask值。目录的实际缺省权限为777减去umask值。 diff --git a/docs/zh/server/security/secharden/authentication_and_authenticationu.md b/docs/zh/server/security/secharden/authentication_and_authenticationu.md new file mode 100644 index 0000000000000000000000000000000000000000..9df9492b9c1021be9bfbf757f8e2dee70c23f92a --- /dev/null +++ b/docs/zh/server/security/secharden/authentication_and_authenticationu.md @@ -0,0 +1,154 @@ +# 授权认证 + +- [授权认证](#授权认证) + - [设置网络远程登录的警告信息](#设置网络远程登录的警告信息) + - [禁止通过“Ctrl+Alt+Del”重启系统](#禁止通过ctrlaltdel重启系统) + - [设置终端的自动退出时间](#设置终端的自动退出时间) + - [设置用户的默认umask值为077](#设置用户的默认umask值为077) + - [设置GRUB2加密口令](#设置grub2加密口令) + - [安全单用户模式](#安全单用户模式) + - [禁止交互式启动](#禁止交互式启动) + +## 设置网络远程登录的警告信息 + +### 说明 + +设置网络远程登录的警告信息,用于在登录进入系统之前向用户提示警告信息,明示非法侵入系统可能受到的惩罚,吓阻潜在的攻击者。同时也可以隐藏系统架构及其他系统信息,避免招致对系统的目标性攻击。 + +### 实现 + +该设置可以通过修改/etc/issue.net文件的内容实现。将/etc/issue.net文件原有内容替换为如下信息(openEuler默认已设置): + +```text +Authorized users only. All activities may be monitored and reported. +``` + +## 禁止通过“Ctrl+Alt+Del”重启系统 + +### 说明 + +操作系统默认能够通过“Ctrl+Alt+Del”进行重启,建议禁止该项特性,防止因为误操作而导致数据丢失。 + +### 实现 + +禁止通过“Ctrl+Alt+Del”重启系统的操作步骤如下: + +1. 删除两个ctrl-alt-del.target文件,参考命令如下: + + ```shell + rm -f /etc/systemd/system/ctrl-alt-del.target + rm -f /usr/lib/systemd/system/ctrl-alt-del.target + ``` + +2. 修改/etc/systemd/system.conf文件,将\#CtrlAltDelBurstAction=reboot-force修改为CtrlAltDelBurstAction=none。 +3. 重启systemd,使修改生效,参考命令如下: + (注:使用 systemctl daemon-reexec 命令可能会导致短暂的系统服务不可用或重启,并且必须具有 root 或具有 sudo 权限的用户才能执行这个操作) + + ```shell + systemctl daemon-reexec + ``` + +## 设置终端的自动退出时间 + +### 说明 + +无人看管的终端容易被侦听或被攻击,可能会危及系统安全。因此建议设置终端在停止运行一段时间后能够自动退出。 + +### 实现 + +自动退出时间由/etc/profile文件的TMOUT字段(单位为秒)控制,在/etc/profile的尾部添加如下配置: + +```shell +export TMOUT=300 +``` + +## 设置用户的默认umask值为0077 + +### 说明 + +umask值用于为用户新创建的文件和目录设置缺省权限。如果umask的值设置过小,会使群组用户或其他用户的权限过大,给系统带来安全威胁。因此设置所有用户默认的umask值为0077,即用户创建的目录默认权限为700,文件的默认权限为600。umask值代表的是权限的“补码”,umask值和权限的换算方法请参见[umask值含义](./appendix.md)。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>openEuler默认已设置用户的默认umask值为022。 + +### 实现 + +1. 分别在/etc/bashrc文件和/etc/profile.d/目录下的所有文件中加入“umask 0077”。 + + ```shell + echo "umask 0077" >> $FILE + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >_$FILE_ 为具体的文件名,例如:echo "umask 0077" \>\> /etc/bashrc 。 + +2. 设置/etc/bashrc文件和/etc/profile.d/目录下所有文件的属主为root,群组为root。 + + ```shell + chown root.root $FILE + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >_$FILE_ 为具体的文件名,例如:chown root.root /etc/bashrc 。 + +## 设置GRUB2加密口令 + +### 说明 + +GRUB是GRand Unified Bootloader的缩写,它是一个操作系统启动管理器,用来引导不同系统(如Windows、Linux),GRUB2是GRUB的升级版。 + +系统启动时,可以通过GRUB2界面修改系统的启动参数。为了确保系统的启动参数不被任意修改,需要对GRUB2界面进行加密,仅在输入正确的GRUB2口令时才能修改启动参数。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>GRUB2默认设置的口令为openEuler\#12,建议用户首次登录时修改默认密码并定期更新,避免密码泄露后,启动选项被篡改,导致系统启动异常。 + +### 实现 + +1. 使用grub2-mkpasswd-pbkdf2命令生成加密的口令。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + >GRUB2加密算法使用sha512。 + + ```shell + # grub2-mkpasswd-pbkdf2 + Enter password: + Reenter password: + PBKDF2 hash of your password is + grub.pbkdf2.sha512.10000.5A45748D892672FDA02DD3B6F7AE390AC6E6D532A600D4AC477D25C7D087644697D8A0894DFED9D86DC2A27F4E01D925C46417A225FC099C12DBD3D7D49A7425.2BD2F5BF4907DCC389CC5D165DB85CC3E2C94C8F9A30B01DACAA9CD552B731BA1DD3B7CC2C765704D55B8CD962D2AEF19A753CBE9B8464E2B1EB39A3BB4EAB08 + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >在Enter password和Reenter password输入相同的口令。 + >grub.pbkdf2.sha512.10000.5A45748D892672FDA02DD3B6F7AE390AC6E6D532A600D4AC477D25C7D087644697D8A0894DFED9D86DC2A27F4E01D925C46417A225FC099C12DBD3D7D49A7425.2BD2F5BF4907DCC389CC5D165DB85CC3E2C94C8F9A30B01DACAA9CD552B731BA1DD3B7CC2C765704D55B8CD962D2AEF19A753CBE9B8464E2B1EB39A3BB4EAB08为openEuler\#12经过grub2-mkpasswd-pbkdf2加密后的输出,每次输出的密文不同。 + +2. 使用vi工具打开grub.cfg的开始位置追加如下字段: + + ```text + set superusers="root" + password_pbkdf2 root grub.pbkdf2.sha512.10000.5A45748D892672FDA02DD3B6F7AE390AC6E6D532A600D4AC477D25C7D087644697D8A0894DFED9D86DC2A27F4E01D925C46417A225FC099C12DBD3D7D49A7425.2BD2F5BF4907DCC389CC5D165DB85CC3E2C94C8F9A30B01DACAA9CD552B731BA1DD3B7CC2C765704D55B8CD962D2AEF19A753CBE9B8464E2B1EB39A3BB4EAB08 + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >- 不同模式下grub.cfg文件所在路径不同:x86架构的UEFI模式下路径为/boot/efi/EFI/openEuler/grub.cfg,legacy BIOS模式下路径为/boot/grub2/grub.cfg;aarch64架构下路径为/boot/efi/EFI/openEuler/grub.cfg。 + >- superusers字段用于设置GRUB2的超级管理员的帐户名。 + >- password\_pbkdf2字段后的参数,第1个参数为GRUB2的帐户名,第2个为该帐户的加密口令。 + +## 安全单用户模式 + +### 说明 + +单用户模式是以root权限进入系统,如不设置密码,将存在较大安全隐患。 + +### 实现 + +该设置可以通过修改/etc/sysconfig/init文件内容实现。将SINGLE选项配置为SINGLE=/sbin/sulogin。 + +## 禁止交互式启动 + +### 说明 + +使用交互式引导,控制台用户可以禁用审计、防火墙或其他服务,削弱了系统安全性。用户可以禁止使用交互式引导,提升安全性。openEuler默认已禁止。 + +### 实现 + +该设置可以通过修改/etc/sysconfig/init文件内容实现。将PROMPT选项配置为PROMPT=no。 diff --git a/docs/zh/server/security/secharden/figures/zh-cn_image_0221925211.png b/docs/zh/server/security/secharden/figures/zh-cn_image_0221925211.png new file mode 100644 index 0000000000000000000000000000000000000000..d245d48dc07e2b01734e21ec1952e89fa9269bdb Binary files /dev/null and b/docs/zh/server/security/secharden/figures/zh-cn_image_0221925211.png differ diff --git a/docs/zh/server/security/secharden/figures/zh-cn_image_0221925212.png b/docs/zh/server/security/secharden/figures/zh-cn_image_0221925212.png new file mode 100644 index 0000000000000000000000000000000000000000..a32856aa08e459ed0f51f8fcf4c2f51511c12095 Binary files /dev/null and b/docs/zh/server/security/secharden/figures/zh-cn_image_0221925212.png differ diff --git a/docs/zh/server/security/secharden/file_permissions.md b/docs/zh/server/security/secharden/file_permissions.md new file mode 100644 index 0000000000000000000000000000000000000000..673dae429ab737a3c42074357b06c4b2c755146d --- /dev/null +++ b/docs/zh/server/security/secharden/file_permissions.md @@ -0,0 +1,243 @@ +# 文件权限 + +- [文件权限](#文件权限) + - [设置文件的权限和属主](#设置文件的权限和属主) + - [删除无主文件](#删除无主文件) + - [处理空链接文件](#处理空链接文件) + - [设置守护进程的umask值](#设置守护进程的umask值) + - [为全局可写目录添加粘滞位属性](#为全局可写目录添加粘滞位属性) + - [删除非授权文件的全局可写属性](#删除非授权文件的全局可写属性) + - [限制at命令的使用权限](#限制at命令的使用权限) + - [限制cron命令的使用权限](#限制cron命令的使用权限) + - [限制sudo命令的使用权限](#限制sudo命令的使用权限) + +## 设置文件的权限和属主 + +### 说明 + +Linux将所有对象都当作文件来处理,即使一个目录也被看作是包含有多个其他文件的大文件。因此,Linux中最重要的就是文件和目录的安全性。文件和目录的安全性主要通过权限和属主来保证。 + +openEuler默认对系统中的常用目录、可执行文件和配置文件设置了权限和属主。 + +### 实现 + +以/bin目录为例,修改文件权限和文件属主的操作如下: + +- 修改文件权限。例如将/bin目录权限设置为755。 + + ```sh + chmod 755 /bin + ``` + +- 修改文件属主。例如将/bin目录的拥有者和群组设置为root:root。 + + ```sh + chown root:root /bin + ``` + +## 删除无主文件 + +### 说明 + +系统管理员在删除用户/群组时,存在着忘记删除该用户/该群组所拥有文件的问题。如果后续新创建的用户/群组与被删除的用户/群组同名,则新用户/新群组会拥有部分不属于其权限的文件,建议将此类文件删除。 + +### 实现 + +删除用户ID不存在的文件 + +1. 查找用户ID不存在的文件。 + + ```sh + find / -nouser + ``` + +2. 删除查找到的文件。其中 filename 为用户ID不存在文件的文件名。 + + ```sh + rm -f filename + ``` + +删除群组ID不存在的文件 + +1. 查找群组ID不存在的文件。 + + ```sh + find / -nogroup + ``` + +2. 删除查找到的文件。其中 filename 为群组ID不存在文件的文件名。 + + ```sh + rm -f filename + ``` + +## 处理空链接文件 + +### 说明 + +无指向的空链接文件,可能会被恶意用户利用,影响系统安全性。建议用户删除无效的空链接文件,提高系统安全性。 + +### 特殊场景 + +openEuler系统安装完成后,可能存在空链接文件,这些空链接文件可能有对应用途(有些空链接文件是预制的,会被其他组件依赖)。请用户根据实际环境进行处理,处理方式请参见[实现](#zh-cn_topic_0152100319_l4dc74664c4fb400aaf91fb314c4f9da6)。 + +例如,openEuler支持UEFI和legacy BIOS两种安装模式,两种引导场景支持的grub相关包默认都安装,当用户选择legacy BIOS模式安装时,形成空链接文件“/etc/grub2-efi.cfg”;当用户选择UEFI模式安装时,会形成空链接文件“/etc/grub2.cfg”,需要用户根据实际情况处理空链接。 + +### 实现 + +1. 通过如下命令查找系统中的空链接文件。 + + ```sh + find dirname -type l -follow 2>/dev/null + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + > dirname为搜索目录的名称,通常需要关注系统关键目录:/bin、/boot、/usr、/lib64、/lib、/var等。 + +2. 如果此类文件无实际作用,可通过如下命令删除。 + + ```sh + rm -f filename + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >filename为[步骤1](#zh-cn_topic_0152100319_l4dc74664c4fb400aaf91fb314c4f9da6)找出的文件名。 + +## 设置守护进程的umask值 + +### 说明 + +umask值用来为新创建的文件和目录设置缺省权限。如果没有设定umask值,则生成的文件具有全局可写权限,存在一定的风险。守护进程负责系统上某个服务,让系统可以接受来自用户或者是网络客户的要求。为了提高守护进程所创建文件和目录的安全性,建议设置其umask值为0027。umask值代表的是权限的“补码”,umask值和权限的换算方法请参见 "< 附录 > [umask值含义](./appendix.md)" 。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>openEuler默认已设置守护进程的umask值为0022。 + +### 实现 + +在配置文件/etc/sysconfig/init中新增一行:umask 0022。 + +## 为全局可写目录添加粘滞位属性 + +### 说明 + +任意用户可以删除、修改全局可写目录中的文件和目录,为了确保全局可写目录中的文件和目录不会被任意删除,需要为全局可写目录添加粘滞位属性。 + +### 实现 + +1. 搜索全局可写目录。 + + ```sh + find / -type d -perm -0002 ! -perm -1000 -ls | grep -v proc + ``` + +2. 为全局可写目录添加粘滞位属性。dirname 为实际查找到的目录名。 + + ```sh + chmod +t dirname + ``` + +## 删除非授权文件的全局可写属性 + +### 说明 + +全局可写文件可被系统中的任意用户修改,影响系统完整性。 + +### 实现 + +1. 列举系统中所有的全局可写文件。 + + ```sh + find / -type d -perm -o+w | grep -v proc + find / -type f -perm -o+w | grep -v proc + ``` + +2. 查看步骤1列举的所有文件\(粘滞位的文件和目录可以排除在外\),删除文件或去掉其全局可写权限。使用以下命令去掉权限,其中filename为对应文件名: + + ```sh + chmod o-w filename + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >可通过如下命令确定对应文件或目录是否设置了粘滞位,若回显中包含T标记,则为粘滞位文件或目录。命令中的filename为需要查询文件或目录的名称。 + > + >```sh + >ls -l filename + >``` + +## 限制at命令的使用权限 + +### 说明 + +at命令用于创建在指定时间自动执行的任务。为避免任意用户通过at命令安排工作,造成系统易受攻击,需要指定可使用该命令的用户。 + +### 实现 + +1. 删除/etc/at.deny文件。 + + ```sh + rm -f /etc/at.deny + ``` + +2. 创建/etc/at.allow文件。 + + ```sh + touch /etc/at.allow + ``` + +3. 将/etc/at.allow的文件属主改为root:root。 + + ```sh + chown root:root /etc/at.allow + ``` + +4. 控制/etc/at.allow的文件权限,仅root可操作。 + + ```sh + chmod og-rwx /etc/at.allow + ``` + +## 限制cron命令的使用权限 + +### 说明 + +cron命令用于创建例行性任务。为避免任意用户通过cron命令安排工作,造成系统易受攻击,需要指定可使用该命令的用户。 + +### 实现 + +1. 删除/etc/cron.deny文件。 + + ```sh + rm -f /etc/cron.deny + ``` + +2. 创建/etc/cron.allow文件。 + + ```sh + touch /etc/cron.allow + ``` + +3. 将/etc/cron.allow的文件属主改为root:root。 + + ```sh + chown root:root /etc/cron.allow + ``` + +4. 控制/etc/cron.allow的文件权限,仅root可操作。 + + ```sh + chmod og-rwx /etc/cron.allow + ``` + +## 限制sudo命令的使用权限 + +### 说明 + +sudo命令用于普通用户以root权限执行命令。为了增强系统安全性,有必要对sudo命令的使用权进行控制,只允许root使用sudo命令,限制其他帐户使用。openEuler默认未限制非root用户使用sudo命令的权限。 + +### 实现 + +sudo命令的使用控制通过修改/etc/sudoers文件实现,需要注释掉如下配置行: + +```sh +#%wheel ALL=(ALL) ALL +``` diff --git a/docs/zh/server/security/secharden/kernel_parameters.md b/docs/zh/server/security/secharden/kernel_parameters.md new file mode 100644 index 0000000000000000000000000000000000000000..601af0fda82d08d070ad24b14a0285c52f39b1df --- /dev/null +++ b/docs/zh/server/security/secharden/kernel_parameters.md @@ -0,0 +1,228 @@ +# 内核参数 + +- [内核参数](#内核参数) + - [加固内核参数](#加固内核参数) + +## 加固内核参数 + +### 说明 + +内核参数决定配置和应用特权的状态。内核提供用户可配置的系统控制,这一系统控制可微调或配置,该功能特性可通过控制各种可配置的内核参数,来提高操作系统的安全特性。比如:通过微调或配置网络选项,可有效提高系统的安全性。 + +### 实现 + +1. 将[表1](#zh-cn_topic_0152100187_t69b5423c26644b26abe94d88d38878eb)中的加固项写入/etc/sysctl.conf文件中。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + >写入方式如下: + > + >```text + >net.ipv4.icmp_echo_ignore_broadcasts = 1 + >net.ipv4.conf.all.rp_filter = 1 + >net.ipv4.conf.default.rp_filter = 1 + >``` + + **表 1** 内核参数加固策略说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

加固项

+

加固项说明

+

加固建议

+

openEuler默认是否已加固为建议值

+

net.ipv4.icmp_echo_ignore_broadcasts

+

是否接受ICMP广播报文。加固策略为不接受。

+

1

+

+

net.ipv4.conf.all.rp_filter

+

验证数据包使用的实际源地址是否与路由表相关,以及使用该特定源IP地址的数据包是否通过接口获取其响应。加固策略为启用该项。

+

1

+

+

net.ipv4.conf.default.rp_filter

+

1

+

+

net.ipv4.ip_forward

+

IP Forwarding可阻止未授权的IP数据包渗透至网络。加固策略为禁用该特性。

+

0

+

+

net.ipv4.conf.all.accept_source_route

+

accept_source_route指允许数据包的发送者指定数据包的发送路径,以及返回给发送者的数据包所走的路径。加固策略为禁用该特性。

+

0

+

+

net.ipv4.conf.default.accept_source_route

+

0

+

+

net.ipv4.conf.all.accept_redirects

+

是否发送ICMP重定向报文。加固策略为禁止发送。

+

0

+

+

net.ipv4.conf.default.accept_redirects

+

0

+

+

net.ipv6.conf.all.accept_redirects

+

0

+

+

net.ipv6.conf.default.accept_redirects

+

0

+

+

net.ipv4.conf.all.send_redirects

+

是否将ICMP重定向报文发送至其他主机。只有当主机作为路由时,应启用该策略。加固策略为禁用该项。

+

0

+

+

net.ipv4.conf.default.send_redirects

+

0

+

+

net.ipv4.icmp_ignore_bogus_error_responses

+

忽略伪造的ICMP数据包,不会将其记录到日志,将节省大量的硬盘空间。加固策略为启用该项。

+

1

+

+

net.ipv4.tcp_syncookies

+

SYN Attack是一种通过占用系统资源迫使系统重启的DoS攻击。加固策略为开启TCP-SYN cookie保护。

+

1

+

+

kernel.dmesg_restrict

+

加固dmesg信息,仅允许管理员查看。

+

1

+

+

kernel.sched_autogroup_enabled

+

该选项决定内核是否对线程进行自动分组调度。开启后调度组之间互相竞争时间片,调度组内的线程再竞争调度组分配到的时间片。加固策略为不启用该项。

+

0

+

+

kernel.sysrq

+

禁用魔术键。

+
说明:

建议禁用魔术键,避免由于直接发送命令到内核对系统造成影响,增强内核安全性。

+
+

0

+

+

net.ipv4.conf.all.secure_redirects

+

设置系统是接收来自任何主机的ICMP重定向消息还是从默认网关列表中的网关处接收ICMP重定向消息。加固策略为采用前者。

+

0

+

+

net.ipv4.conf.default.secure_redirects

+

0

+

+
+ +2. 加载sysctl.conf文件中设置的内核参数。 + + ```sh + sysctl -p /etc/sysctl.conf + ``` + +### 其他安全建议 + +- net.ipv4.icmp\_echo\_ignore\_all:忽略ICMP请求。 + + 出于安全考虑,建议开启此项(当前默认值为0,开启将值设为1)。 + + 但开启后会忽略所有接收到的icmp echo请求的包\(会导致机器无法ping通\),建议用户根据实际组网场景决定是否开启此项。 + +- net.ipv4.conf.all.log\_martians/net.ipv4.conf.default.log\_martians:对于仿冒/源路由/重定向数据包开启日志记录。 + + 出于安全考虑,建议开启此项(当前默认值为0,开启将值设为1)。 + + 但是开启后会记录带有不允许的地址的数据到内核日志中,存在冲日志风险,建议用户根据实际使用场景决定是否开启此项。 + +- net.ipv4.tcp\_timestamps:关闭tcp\_timestamps。 + + 出于安全考虑,建议关闭tcp\_timestamps(当前默认值为1,关闭将值设为0)。 + + 但是关闭此项会影响TCP超时重发的性能,建议用户根据实际使用场景决定是否关闭此项。 + +- net.ipv4.tcp\_max\_syn\_backlog:决定了SYN\_RECV状态队列的数量。 + + 该参数决定了SYN\_RECV状态队列的数量,超过这个数量,系统将不再接受新的TCP连接请求,一定程度上可以防止系统资源耗尽。建议由用户根据实际使用场景配置合适的值。 diff --git a/docs/zh/server/security/secharden/os_hardening_overview.md b/docs/zh/server/security/secharden/os_hardening_overview.md new file mode 100644 index 0000000000000000000000000000000000000000..57519b7ab801b8877e8d7837406934b05f76ddad --- /dev/null +++ b/docs/zh/server/security/secharden/os_hardening_overview.md @@ -0,0 +1,136 @@ + +# 操作系统加固概述 + +介绍对openEuler系统进行加固的目的和加固方案。 + + +- [操作系统加固概述](#操作系统加固概述) + - [加固目的](#加固目的) + - [加固方案](#加固方案) + - [加固影响](#加固影响) + + + +## 须知 + +由于安全加固对系统至关重要,因此只有root用户允许修改并应用安全加固策略。 + +## 加固目的 + +操作系统作为信息系统的核心,承担着管理硬件资源和软件资源的重任,是整个信息系统安全的基础。操作系统之上的各种应用,要想获得信息的完整性、机密性、可用性和可控性,必须依赖于操作系统。脱离了对操作系统的安全保护,仅依靠其他层面的防护手段来阻止黑客和病毒等对网络信息系统的攻击,是无法满足安全需求的。 + +因此,需要对操作系统进行安全加固,构建动态、完整的安全体系,增强产品的安全性,提升产品的竞争力。 + +## 加固方案 + +本章描述openEuler的安全加固方案,包括加固方式和加固内容。 + +### 加固方式 + +用户可以通过手动修改加固配置或执行相关命令对系统进行加固,也可以通过加固工具批量修改加固项。openEuler的安全加固工具security-tool以openEuler-security.service服务的形式运行。系统首次启动时会自动运行该服务去执行默认加固策略,且自动设置后续开机不启动该服务。 + +用户可以通过修改/etc/openEuler_security/security.conf,使用安全加固工具实现个性化安全加固的效果。 + +### 加固内容 + +openEuler系统加固内容主要分为以下5个部分: + +- 系统服务 +- 文件权限 +- 内核参数 +- 授权认证 +- 帐号口令 + +## 加固影响 + +对文件权限、帐户口令等安全加固,可能造成用户使用习惯变更,从而影响系统的易用性。影响系统易用性的常见加固项请参见[表1](#zh-cn_topic_0152100325_ta4a48f54ff2849ada7845e2380209917)。 + +**表 1** 加固影响说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

加固项

+

建议加固

+

易用性影响

+

openEuler默认是否设置了该加固项

+

字符界面等待超时限制

+

当字符界面长时间处在空闲状态,字符界面会自动退出。

+
说明:

当用户通过SSH登录,超时时间由/etc/profile文件的TMOUT字段和/etc/ssh/sshd_config文件的ClientAliveInterval字段两个值中较小的值决定。建议加固为300秒。

+
+

用户长时间不操作字符界面,字符界面会自动退出。

+

+

口令复杂度限制

+

口令长度最小为8位,口令至少包含大写字母、小写字母、数字和特殊字符中的3种。

+

系统中所有用户不能设置简单的口令,口令必须符合复杂度要求。

+

+

限定登录失败时的尝试次数

+

当用户登录系统时,口令连续输错3次,帐户将被锁定60秒,锁定期间不能登录系统。

+

帐户被锁定后,必须等待60秒才能登录系统。

+

+

用户默认umask值限制

+

设置所有用户的默认umask值为077,使用户创建文件的默认权限为600、目录权限为700。

+

创建文件默认权限为600、目录权限为700。如需设置其他权限,须在创建完成后修改。

+

+

口令有效期

+

口令有效期的设置通过修改/etc/login.defs文件实现,加固默认值为口令最大有效期90天,两次修改口令的最小间隔时间为0,口令过期前7天开始提示剩余有效期。

+

口令过期后用户重新登录时,提示口令过期并强制要求修改,不修改则无法进入系统。

+

+

su权限限制

+

su命令用于在不同帐户之间切换。为了增强系统安全性,有必要对su命令的使用权进行控制,只允许root和wheel群组的帐户使用su命令,限制其他帐户使用。

+

普通帐户执行su命令失败,必须加入wheel群组才可以su成功。

+

+

禁止root帐户直接SSH登录系统

+

设置/etc/ssh/sshd_config文件的PermitRootLogin字段的值为no,用户无法使用root帐户直接SSH登录系统。

+

用户需要先使用普通帐户SSH登录,且将普通用户加入wheel组后,再切换至root帐户。

+

+

SSH强加密算法

+

SSH服务的MACs和Ciphers配置,禁止对CBC、MD5、SHA1算法的支持,修改为CTR、SHA2算法。

+

当前Windows下使用的部分低版本的Xshell、PuTTY不支持aes128-ctr、aes192-ctr、aes256-ctr、hmac-sha2-256、hmac-sha2-512算法,可能会出现无法通过SSH登录系统的情况,请使用最新的PuTTY(0.63版本以上)、Xshell(5.0版本及以上版本)登录。

+

+
diff --git a/docs/zh/server/security/secharden/public_sys-resources/icon-caution.gif b/docs/zh/server/security/secharden/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/security/secharden/public_sys-resources/icon-caution.gif differ diff --git a/docs/zh/server/security/secharden/public_sys-resources/icon-danger.gif b/docs/zh/server/security/secharden/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/security/secharden/public_sys-resources/icon-danger.gif differ diff --git a/docs/zh/server/security/secharden/public_sys-resources/icon-note.gif b/docs/zh/server/security/secharden/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/server/security/secharden/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/server/security/secharden/public_sys-resources/icon-notice.gif b/docs/zh/server/security/secharden/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/server/security/secharden/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/server/security/secharden/public_sys-resources/icon-tip.gif b/docs/zh/server/security/secharden/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/zh/server/security/secharden/public_sys-resources/icon-tip.gif differ diff --git a/docs/zh/server/security/secharden/public_sys-resources/icon-warning.gif b/docs/zh/server/security/secharden/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/security/secharden/public_sys-resources/icon-warning.gif differ diff --git a/docs/zh/server/security/secharden/secharden.md b/docs/zh/server/security/secharden/secharden.md new file mode 100644 index 0000000000000000000000000000000000000000..004a6114a8c7a9720d6c013a0879f00ec5e9fd41 --- /dev/null +++ b/docs/zh/server/security/secharden/secharden.md @@ -0,0 +1,5 @@ +# 安全加固指南 + +本文档给出openEuler的加固介绍和加固方法,指导用户进行安全加固。 + +本文档主要适用于需要对openEuler进行安全加固的管理员。管理员需要熟悉操作系统安全架构和安全技术。 diff --git a/docs/zh/server/security/secharden/security_configuration_benchmark.md b/docs/zh/server/security/secharden/security_configuration_benchmark.md new file mode 100644 index 0000000000000000000000000000000000000000..1f12011defdaf8af964a937023d798d6b08302b1 --- /dev/null +++ b/docs/zh/server/security/secharden/security_configuration_benchmark.md @@ -0,0 +1,3 @@ +# openEuler安全配置说明 + +详细内容请参考[openEuler安全配置说明](https://gitee.com/openeuler/security-committee/tree/master/secure-configuration-benchmark)。 diff --git a/docs/zh/server/security/secharden/security_configuration_hardening_tool.md b/docs/zh/server/security/secharden/security_configuration_hardening_tool.md new file mode 100644 index 0000000000000000000000000000000000000000..d02ea2cfd5a5d49dcea2c4cf24f75983cefb48de --- /dev/null +++ b/docs/zh/server/security/secharden/security_configuration_hardening_tool.md @@ -0,0 +1,128 @@ +# 安全加固工具 + + +- [安全加固工具](#安全加固工具) + - [加固操作](#加固操作) + - [加固生效](#加固生效) + + +## 加固操作 + +### 概述 + +安全加固工具会根据usr-security.conf设置加固策略,使用加固工具设置加固策略需要用户修改usr-security.conf。本节介绍usr-security.conf的修改规则。用户可配置的加固项请参见[加固指导](./%E5%8A%A0%E5%9B%BA%E6%8C%87%E5%AF%BC.html)对应内容。 + +### 注意事项 + +- 修改配置后,需要重启安全加固服务使配置生效。重启方法请参见[加固生效](#加固生效)对应内容。 +- 用户修改加固配置时,仅修改/etc/openEuler\_security/usr-security.conf文件,不建议修改/etc/openEuler\_security/security.conf。security.conf中为基本加固项,仅运行一次。 +- 当重启安全加固服务使配置生效后,在usr-security.conf中删除对应加固项并重启安全加固服务并不能清除之前已生效的配置。 +- 安全加固操作记录在日志文件/var/log/openEuler-security.log中。 + +### 配置格式 + +usr-security.conf中的每一行代表一项配置,根据配置内容的不同有不同配置格式,这里给出各类配置的格式说明。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- 所有配置项以执行ID开头,执行ID仅为了方便用户识别配置内容,取值为正整数,由用户自行定义。 +>- 配置项的各内容之间使用@作为分隔符。 +>- 若实际配置内容中包含@,需要使用@@表示以和分隔符区分,例如实际内容为xxx@yyy,则配置为xxx@@yyy。目前不支持@位于配置内容的开头和结尾。 + +- d:注释。 + + 格式:执行ID@d@对象文件@匹配项。 + + 功能:将对象文件中以匹配项开头(行首可以有空格)的行注释(在行首添加\#)。 + + 示例:执行ID为401,注释/etc/sudoers文件中以%wheel开头的行。 + + ```sh + 401@d@/etc/sudoers@%wheel + ``` + +- m:替换。 + + 格式:执行ID@m@对象文件@匹配项@替换目标值。 + + 功能:将对象文件中以匹配项开头(行首可以有空格)的行替换为“匹配项加替换目标值 ”。若匹配行开头有空格,替换后将删除这些空格。 + + 示例:执行ID为101,将/etc/ssh/sshd\_config文件中以Protocol 开头的行替换为Protocol 2。匹配和替换时也会考虑Protocol后的空格。 + + ```sh + 101@m@/etc/ssh/sshd_config@Protocol @2 + ``` + +- sm:精确修改。 + + 格式:执行ID@sm@对象文件@匹配项@替换目标值。 + + 功能:将对象文件中以匹配项开头(行首可以有空格)的行替换为“匹配项加替换目标值 ”。若匹配行开头有空格,替换后将保留这些空格,这是sm和m的区别。 + + 示例:执行ID为201,将/etc/audit/hzqtest文件中以size开头的行替换为size 2048。 + + ```h + 201@sm@/etc/audit/hzqtest@size@ 2048 + ``` + +- M:修改子项。 + + 格式:执行ID@M@对象文件@匹配项@匹配子项\[@匹配子项的值\]。 + + 功能:匹配对象文件中以匹配项开头(行首可以有空格)的行,并将该行中以匹配子项开始的内容替换为“匹配子项和匹配子项的值”,其中匹配子项的值可选。 + + 示例:执行ID为101,找到file文件中以key开头的行,并将这些行中以key2开始的内容替换为key2value2。 + + ```sh + 101@M@file@key@key2@value2 + ``` + +- systemctl:管理服务。 + + 格式:执行ID@systemctl@对象服务@具体操作。 + + 功能:使用systemctl管理对象服务,具体操作可取值为start、stop、restart、disable等systemctl所有可用的命令。 + + 示例:执行ID为218,停止cups.service服务,等同于systemctl stop cups.service的配置行。 + + ```sh + 218@systemctl@cups.service@stop + ``` + +- 其他命令。 + + 格式:执行ID@命令@对象文件。 + + 功能:执行对应命令,即执行命令行“命令 对象文件”。 + + 示例一:执行ID为402,使用rm -f命令删除文件/etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem。 + + ```sh + 402@rm -f @/etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem + ``` + + 示例二:执行ID为215,使用touch命令创建文件/etc/cron.allow。 + + ```sh + 215@touch @/etc/cron.allow + ``` + + 示例三:执行ID为214,使用chown命令将文件/etc/at.allow的属主改为root:root。 + + ```sh + 214@chown root:root @/etc/at.allow + ``` + + 示例四:执行ID为214,使用chmod命令去除文件/etc/at.allow属主所在群组及其他非属主用户的rwx权限。 + + ```sh + 214@chmod og-rwx @/etc/at.allow + ``` + +## 加固生效 + +完成修改usr-security.conf文件后,请运行如下命令使新添加的配置生效。 + +```sh +systemctl restart openEuler-security.service +``` diff --git a/docs/zh/server/security/secharden/security_hardening_guide.md b/docs/zh/server/security/secharden/security_hardening_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..d8f4f7cd5b1e0c5d07d9c7c33b62a4cfac5965ab --- /dev/null +++ b/docs/zh/server/security/secharden/security_hardening_guide.md @@ -0,0 +1,3 @@ +# 加固指导 + +用户可以通过修改加固策略配置文件或加固脚本进行系统加固。本节介绍各加固项的含义以及openEuler是否已默认加固,并给出加固方法,指导用户进行安全加固。 diff --git a/docs/zh/server/security/secharden/selinux_configuration.md b/docs/zh/server/security/secharden/selinux_configuration.md new file mode 100644 index 0000000000000000000000000000000000000000..e8ff486d5592f75c88cc0efab1ded9803ff7ddfa --- /dev/null +++ b/docs/zh/server/security/secharden/selinux_configuration.md @@ -0,0 +1,135 @@ +# SELinux配置 + +## 概述 + +自主访问控制DAC(Discretionary Access Control)是一种最为普遍的访问控制手段,是指对某个客体具有拥有权(或控制权)的主体能够将对该客体的一种访问权或多种访问权自主地授予其它主体,并随时可以将这些权限回收,这种方式基于用户、组和其他权限,决定一个资源是否能被访问的因素是某个资源是否拥有对应用户的权限,这就导致它不能使系统管理员创建全面和细粒度的安全策略。SELinux(Security-Enhanced Linux)是Linux内核的一个模块,也是Linux的一个安全子系统。SELinux实现了强制访问控制MAC(Mandatory Access Control ),每个进程和系统资源都有一个特殊的安全标签,资源能否被访问除了DAC规定的原则外,还需要判断每一类进程是否拥有对某一类资源的访问权限。这种方式能够满足系统管理员创建全面和细粒度的安全策略的需求。 + +openEuler默认使用SELinux提升系统安全性。SELinux分为三种模式: + +- permissive:SELinux仅打印告警而不强制执行。 +- enforcing:SELinux安全策略被强制执行。 +- disabled:不加载SELinux安全策略。 + +## 配置说明 + +- 获取当前SELinux运行状态。 + + ```sh + # getenforce + Enforcing + ``` + +- SELinux开启的前提下,设置运行状态为enforcing模式。 + + ```sh + # setenforce 1 + # getenforce + Enforcing + ``` + +- SELinux开启的前提下,设置运行状态为permissive模式。 + + ```sh + # setenforce 0 + # getenforce + Permissive + ``` + +- SELinux开启的前提下,设置当前SELinux运行状态为disabled(关闭SELinux,需要重启系统)。 + + 1. 修改SELinux配置文件/etc/selinux/config,设置“SELINUX=disabled”。 + + ```sh + # cat /etc/selinux/config | grep "SELINUX=" + SELINUX=disabled + ``` + + 2. 重启系统。 + + ```sh + # reboot + ``` + + 3. 查看切换状态。 + + ```sh + # getenforce + Disabled + ``` + +- SELinux关闭的前提下,设置SELinux运行状态为permissive。 + 1. 修改SELinux配置文件/etc/selinux/config,设置“SELINUX=permissive”。 + + ```sh + # cat /etc/selinux/config | grep "SELINUX=" + SELINUX=permissive + ``` + + 2. 在根目录下创建.autorelabel文件。 + + ```sh + # touch /.autorelabel + ``` + + 3. 重启系统,此时系统会重启两次。 + + ```sh + # reboot + ``` + + 4. 查看切换状态。 + + ```sh + # getenforce + Permissive + ``` + +- SELinux关闭的前提下,设置SELinux运行状态为enforcing。 + 1. 按照上一步骤所述,设置SELinux运行状态为permissive。 + 2. 修改SELinux配置文件/etc/selinux/config,设置“SELINUX=enforcing”。 + + ```sh + # cat /etc/selinux/config | grep "SELINUX=" + SELINUX=enforcing + ``` + + 3. 重启系统。 + + ```sh + # reboot + ``` + + 4. 查看切换状态。 + + ```sh + # getenforce + Enforcing + ``` + +## SELinux相关命令 + +- 查询运行SELinux的系统状态。SELinux status表示SELinux的状态,enabled表示启用SELinux,disabled表示关闭SELinux。Current mode表示SELinux当前的安全策略。 + + ```sh + # sestatus + SELinux status: enabled + SELinuxfs mount: /sys/fs/selinux + SELinux root directory: /etc/selinux + Loaded policy name: targeted + Current mode: enforcing + Mode from config file: enforcing + Policy MLS status: enabled + Policy deny_unknown status: allowed + Memory protection checking: actual (secure) + Max kernel policy version: 33 + ``` + +## 注意事项 + +- 如用户需要使用SELinux功能,建议通过dnf升级方式将selinux-policy更新为最新版本,否则应用程序有可能无法正常运行。升级命令示例: + + ```sh + dnf update selinux-policy -y + ``` + +- 如果用户由于SELinux配置不当(如误删策略或未配置合理的规则或安全上下文)导致系统无法启动,可以在启动参数中添加selinux=0,关闭SELinux功能,系统即可正常启动。 diff --git a/docs/zh/server/security/secharden/system_services.md b/docs/zh/server/security/secharden/system_services.md new file mode 100644 index 0000000000000000000000000000000000000000..1480dc60492460a4758385fd973d255bcce42a77 --- /dev/null +++ b/docs/zh/server/security/secharden/system_services.md @@ -0,0 +1,466 @@ +# 系统服务 + +- [系统服务](#系统服务) + - [加固SSH服务](#加固SSH服务) + +## 加固SSH服务 + +### 说明 + +SSH(Secure Shell)是目前较可靠,专为远程登录会话和其他网络服务提供安全性保障的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。通过SSH可以对所有传输的数据进行加密,并防止DNS欺骗和IP欺骗。OpenSSH是SSH协议的免费开源实现。 + +加固SSH服务,是指修改SSH服务中的配置来设置系统使用OpenSSH协议时的算法、认证等参数,从而提高系统的安全性。[表1](#zh-cn_topic_0152100390_ta2fdb8e4931b4c1a8f502b3c7d887b95)中详细说明了各加固项含义、建议加固值及其默认策略。 + +### 实现 + +服务端加固操作如下: + +1. 打开服务端SSH服务的配置文件/etc/ssh/sshd\_config,在该文件中修改或添加对应加固项及其加固值。 +2. 保存/etc/ssh/sshd\_config文件。 +3. 重启SSH服务,命令如下: + + ```sh + systemctl restart sshd + ``` + +客户端加固操作如下: + +1. 打开客户端SSH服务的配置文件/etc/ssh/ssh\_config,在该文件中修改或添加对应加固项及其加固值。 +2. 保存/etc/ssh/ssh\_config文件。 + +### 加固项说明 + +- 服务端加固策略 + + SSH服务的所有加固项均保存在配置文件/etc/ssh/sshd\_config中,服务端各加固项的含义、加固建议以及openEuler默认是否已经加固为建议加固值请参见[表1](#zh-cn_topic_0152100390_ta2fdb8e4931b4c1a8f502b3c7d887b95)。 + + **表 1** SSH服务端加固项说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

加固项

+

加固项说明

+

加固建议

+

openEuler默认是否已加固为建议值

+

Protocol

+

设置使用SSH协议的版本

+

2

+

+

SyslogFacility

+

设置SSH服务的日志类型。加固策略将其设置为“AUTH”,即认证类日志。

+

AUTH

+

+

LogLevel

+

设置记录sshd日志消息的层次

+

VERBOSE

+

+

X11Forwarding

+

设置使用SSH登录后,能否使用图形化界面。

+

no

+

+

MaxAuthTries

+

最大认证尝试次数

+

3

+

+

PubkeyAuthentication

+

设置是否允许公钥认证

+

yes

+

+

RSAAuthentication

+

设置是否允许只有RSA安全验证

+

yes

+

+

IgnoreRhosts

+

设置是否使用rhosts文件和shosts文件进行验证。rhosts文件和shosts文件用于记录可以访问远程计算机的计算机名及关联的登录名。

+

yes

+

+

RhostsRSAAuthentication

+

设置是否使用基于rhosts的RSA算法安全验证。rhosts文件记录可以访问远程计算机的计算机名及关联的登录名。

+

no

+

+

HostbasedAuthentication

+

设置是否使用基于主机的验证。基于主机的验证是指已信任客户机上的任何用户都可以使用SSH连接

+

no

+

+

PermitRootLogin

+

+

是否允许root帐户直接使用SSH登录系统

+
说明:

若需要直接使用root帐户通过SSH登录系统,请修改/etc/ssh/sshd_config文件的PermitRootLogin字段的值为yes。

+
+

no

+

+

PermitEmptyPasswords

+

设置是否允许用口令为空的帐号登录

+

no

+

+

PermitUserEnvironment

+

设置是否解析 ~/.ssh/environment和~/.ssh/authorized_keys中设定的环境变量

+

no

+

+

Ciphers

+

设置SSH数据传输的加密算法

+

aes128-ctr,aes192-ctr,aes256-ctr,chacha20-poly1305@openssh.com,aes128-gcm@openssh.com,aes256-gcm@openssh.com

+

+

ClientAliveCountMax

+

设置超时次数。服务器发出请求后,客户端没有响应的次数达到一定值,连接自动断开。

+

0

+

+

Banner

+

指定登录SSH前后显示的提示信息的文件

+

/etc/issue.net

+

+

MACs

+

设置SSH数据校验的哈希算法

+

hmac-sha2-512,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha2-256-etm@openssh.com

+

+

StrictModes

+

设置SSH在接收登录请求之前是否检查用户HOME目录和rhosts文件的权限和所有权

+

yes

+

+

UsePAM

+

使用PAM登录认证

+

yes

+

+

AllowTcpForwarding

+

设置是否允许TCP转发

+

no

+

+

Subsystem sftp /usr/libexec/openssh/sftp-server

+

sftp日志记录级别,记录INFO级别以及认证日志。

+

-l INFO -f AUTH

+

+

AllowAgentForwarding

+

设置是否允许SSH Agent转发

+

no

+

+

GatewayPorts

+

设置是否允许连接到转发客户端端口

+

no

+

+

PermitTunnel

+

Tunnel设备是否允许使用

+

no

+

+

KexAlgorithms

+

设置SSH密钥交换算法

+

curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256

+

LoginGraceTime

+

限制用户必须在指定的时限内认证成功,0 表示无限制。默认值是 120 秒。

+

60

+

+
+ + >![](./public_sys-resources/icon-note.gif) **说明:** + >默认情况下,登录SSH前后显示的提示信息保存在/etc/issue.net文件中,/etc/issue.net默认信息为“Authorized users only. All activities may be monitored and reported.”。 + +- 客户端加固策略 + + SSH服务的所有加固项均保存在配置文件/etc/ssh/ssh\_config中,客户端各加固项的含义、加固建议以及openEuler默认是否已经加固为建议加固值请参见[表2](#zh-cn_topic_0152100390_tb289c5a6f1c7420ab4339187f9018ea4)。 + + **表 2** SSH客户端加固项说明 + + + + + + + + + + + + + + + + + + + +

加固项

+

加固项说明

+

加固建议

+

openEuler默认是否已加固为建议值

+

KexAlgorithms

+

设置SSH密钥交换算法

+

ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256

+

+

VerifyHostKeyDNS

+

是否使用DNS或者SSHFP资源记录验证HostKey

+

ask

+

+
+ + >![](./public_sys-resources/icon-note.gif) **说明:** + >对于使用dh算法进行密钥交换的第三方客户端和服务端工具,要求允许建立连接的最低长度为2048bits。 + +### 其他安全建议 + +- SSH服务仅侦听指定IP地址。 + + 出于安全考虑,建议用户在使用SSH服务时,仅在必需的IP上进行绑定侦听,而不是侦听0.0.0.0,可修改/etc/ssh/sshd\_config文件中的ListenAddress配置项。 + + 1. 打开并修改/etc/ssh/sshd\_config文件。 + + ```sh + vi /etc/ssh/sshd_config + ``` + + 修改内容如下,表示绑定侦听IP为 _192.168.1.100_,用户可根据实际情况修改需要侦听的IP。 + + ```Conf + ... + ListenAddress 192.168.1.100 + ... + ``` + + 2. 重启SSH服务。 + + ```sh + systemctl restart sshd.service + ``` + +- 限制SFTP用户向上跨目录访问。 + + SFTP是FTP over SSH的安全FTP协议,对于访问SFTP的用户建议使用专用帐号,只能上传或下载文件,不能用于SSH登录,同时对SFTP可以访问的目录进行限定,防止目录遍历攻击,具体配置如下: + + >![](./public_sys-resources/icon-note.gif) **说明:** + >sftpgroup为示例用户组,sftpuser为示例用户名。 + + 1. 创建SFTP用户组。 + + ```sh + groupadd sftpgroup + ``` + + 2. 创建SFTP根目录。 + + ```sh + mkdir /sftp + ``` + + 3. 修改SFTP根目录属主和权限。 + + ```sh + chown root:root /sftp + chmod 755 /sftp + ``` + + 4. 创建SFTP用户。 + + ```sh + useradd -g sftpgroup -s /sbin/nologin sftpuser + ``` + + 5. 设置SFTP用户的口令。 + + ```sh + passwd sftpuser + ``` + + 6. 创建SFTP用户目录。 + + ```sh + mkdir /sftp/sftpuser + ``` + + 7. 修改SFTP用户目录属主和权限。 + + ```sh + chown root:root /sftp/sftpuser + chmod 777 /sftp/sftpuser + ``` + + 8. 创建SFTP用户上传目录。 + + ```sh + mkdir /sftp/sftpuser/sftpupload + ``` + + 9. 修改SFTP用户上传目录的属主。 + + ```sh + chown sftpuser:sftpgroup /sftp/sftpuser/sftpupload + ``` + + 10. 修改/etc/ssh/sshd\_config文件。 + + ```sh + vi /etc/ssh/sshd_config + ``` + + 修改内容如下: + + ```sh + #Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO -f AUTH + Subsystem sftp internal-sftp -l INFO -f AUTH + ... + + Match Group sftpgroup + ChrootDirectory /sftp/%u + ForceCommand internal-sftp + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + > + >- %u代表当前sftp用户的用户名,这是一个通配符,用户原样输入即可。 + >- 以下内容必须加在/etc/ssh/sshd\_config文件的末尾。 + > + > ```Conf + > Match Group sftpgroup + > ChrootDirectory /sftp/%u + > ForceCommand internal-sftp + > ``` + + 11. 重启SSH服务。 + + ```sh + systemctl restart sshd.service + ``` + +- SSH远程执行命令。 + + OpenSSH通用机制,在远程执行命令时,默认不开启tty,如果执行需要密码的命令,密码会明文回显。出于安全考虑,建议用户增加-t选项,确保密码输入安全。如下: + + ```sh + ssh -t testuser@192.168.1.100 su + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >192.168.1.100为示例IP,testuser为示例用户。 diff --git a/docs/zh/server/security/trusted_computing/figures/D1376B2A-D036-41C4-B852-E8368F363B5E-1.png b/docs/zh/server/security/trusted_computing/figures/D1376B2A-D036-41C4-B852-E8368F363B5E-1.png new file mode 100644 index 0000000000000000000000000000000000000000..900cdc07c1f0e844bc48fe2342e83c91a23c24ec Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/D1376B2A-D036-41C4-B852-E8368F363B5E-1.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/D1376B2A-D036-41C4-B852-E8368F363B5E.png b/docs/zh/server/security/trusted_computing/figures/D1376B2A-D036-41C4-B852-E8368F363B5E.png new file mode 100644 index 0000000000000000000000000000000000000000..900cdc07c1f0e844bc48fe2342e83c91a23c24ec Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/D1376B2A-D036-41C4-B852-E8368F363B5E.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/PostgreSql_architecture.png b/docs/zh/server/security/trusted_computing/figures/PostgreSql_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..f780ad9cb56378e7baa3497da68ca1610a6dfadb Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/PostgreSql_architecture.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/RA-arch-1.png b/docs/zh/server/security/trusted_computing/figures/RA-arch-1.png new file mode 100644 index 0000000000000000000000000000000000000000..bc55e411637b825b0ce44a7efca08f7e52e0fa70 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/RA-arch-1.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/RA-arch-2.png b/docs/zh/server/security/trusted_computing/figures/RA-arch-2.png new file mode 100644 index 0000000000000000000000000000000000000000..7effbaf881ffe42823142561b9135237989d7153 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/RA-arch-2.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/TPCM.png b/docs/zh/server/security/trusted_computing/figures/TPCM.png new file mode 100644 index 0000000000000000000000000000000000000000..290bdb3471b46dca3e9f0c0907c3855367bd5b65 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/TPCM.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/creat_datadisk.png b/docs/zh/server/security/trusted_computing/figures/creat_datadisk.png new file mode 100644 index 0000000000000000000000000000000000000000..0dfd6a2802184af6d809c485191ea52452cf28d5 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/creat_datadisk.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/creat_datadisk1.png b/docs/zh/server/security/trusted_computing/figures/creat_datadisk1.png new file mode 100644 index 0000000000000000000000000000000000000000..0dfd6a2802184af6d809c485191ea52452cf28d5 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/creat_datadisk1.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/etmem-system-architecture.png b/docs/zh/server/security/trusted_computing/figures/etmem-system-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..1e077e00f44c0404526a4742d49c6e866601eee1 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/etmem-system-architecture.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/ima_digest_list_update.png b/docs/zh/server/security/trusted_computing/figures/ima_digest_list_update.png new file mode 100644 index 0000000000000000000000000000000000000000..771067e31cee84591fbb914d7be4e8c576d7f5d2 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/ima_digest_list_update.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/ima_performance.gif b/docs/zh/server/security/trusted_computing/figures/ima_performance.gif new file mode 100644 index 0000000000000000000000000000000000000000..72fad8a8333f7357c64a160c1d1c174c31201eaa Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/ima_performance.gif differ diff --git a/docs/zh/server/security/trusted_computing/figures/ima_verification.png b/docs/zh/server/security/trusted_computing/figures/ima_verification.png new file mode 100644 index 0000000000000000000000000000000000000000..d022b9d4ea08d4af386c7b76ca28115ad90e5451 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/ima_verification.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/logical_architectureofMariaDB.png b/docs/zh/server/security/trusted_computing/figures/logical_architectureofMariaDB.png new file mode 100644 index 0000000000000000000000000000000000000000..8caa189a6fbf37bf4e9fd863c2ebb24e25547789 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/logical_architectureofMariaDB.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/login.png b/docs/zh/server/security/trusted_computing/figures/login.png new file mode 100644 index 0000000000000000000000000000000000000000..d15c2cad98fba16320d587f3c7b0c80f435c5d3a Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/login.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/nginx_deployed_success.png b/docs/zh/server/security/trusted_computing/figures/nginx_deployed_success.png new file mode 100644 index 0000000000000000000000000000000000000000..9ffb2c142defbd690e5407659116bf8e5582ba73 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/nginx_deployed_success.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/nginx_start_failed.png b/docs/zh/server/security/trusted_computing/figures/nginx_start_failed.png new file mode 100644 index 0000000000000000000000000000000000000000..c8b855453433796265de42d7ffd0189c7ff9be2b Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/nginx_start_failed.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/nginx_start_success.png b/docs/zh/server/security/trusted_computing/figures/nginx_start_success.png new file mode 100644 index 0000000000000000000000000000000000000000..bc6929772fd98fac3494b4436f26910b09818cb7 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/nginx_start_success.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/postgres.png b/docs/zh/server/security/trusted_computing/figures/postgres.png new file mode 100644 index 0000000000000000000000000000000000000000..e7fc36882718587ec949133fe9892185cb4c2158 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/postgres.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/top_display.png b/docs/zh/server/security/trusted_computing/figures/top_display.png new file mode 100644 index 0000000000000000000000000000000000000000..2d77d3dc2934763b5da896a827b9805da34d1c09 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/top_display.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/trusted_chain.png b/docs/zh/server/security/trusted_computing/figures/trusted_chain.png new file mode 100644 index 0000000000000000000000000000000000000000..034f0f092f41fb500ee4122339c447d10d4138ec Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/trusted_chain.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0229622729.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0229622729.png new file mode 100644 index 0000000000000000000000000000000000000000..a32856aa08e459ed0f51f8fcf4c2f51511c12095 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0229622729.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0229622789.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0229622789.png new file mode 100644 index 0000000000000000000000000000000000000000..d245d48dc07e2b01734e21ec1952e89fa9269bdb Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0229622789.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0230050789.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0230050789.png new file mode 100644 index 0000000000000000000000000000000000000000..0b785be2a026fe059c6ee41700a971a11cfff7ae Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0230050789.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143176.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143176.png new file mode 100644 index 0000000000000000000000000000000000000000..300165189e6d3e8fa356f3d463cfc627c2ece0e2 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143176.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143177.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143177.png new file mode 100644 index 0000000000000000000000000000000000000000..ccafce4b0c58a4da0a9f7aece335ede24e5030c0 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143177.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143178.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143178.png new file mode 100644 index 0000000000000000000000000000000000000000..bff125f096215e91b28ee6deacde6d886e5b21eb Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143178.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143180.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143180.png new file mode 100644 index 0000000000000000000000000000000000000000..52f5644f9c985bcc39c0d146006dd9136140bc01 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143180.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143181.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143181.png new file mode 100644 index 0000000000000000000000000000000000000000..d3698e6c0e021a56be46b9f4944c858a425eb66c Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143181.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143183.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143183.png new file mode 100644 index 0000000000000000000000000000000000000000..55ffdfa2616ee259543c1539e46c3e05f9335354 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143183.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143185.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143185.png new file mode 100644 index 0000000000000000000000000000000000000000..bff125f096215e91b28ee6deacde6d886e5b21eb Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143185.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143187.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143187.png new file mode 100644 index 0000000000000000000000000000000000000000..52f5644f9c985bcc39c0d146006dd9136140bc01 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143187.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143189.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143189.png new file mode 100644 index 0000000000000000000000000000000000000000..7656f3aa5f5907f1e9f981c0cb5d44d4fcb84ef3 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143189.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143191.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143191.png new file mode 100644 index 0000000000000000000000000000000000000000..a82d1bcb2b719e3a372f63ae099cb5d52a93b536 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143191.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143193.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143193.png new file mode 100644 index 0000000000000000000000000000000000000000..94614045bddb0871b44d2f6603402f914871ad61 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143193.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143195.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143195.png new file mode 100644 index 0000000000000000000000000000000000000000..05011dbabe2d245c37ec68de646851bf955a2361 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143195.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143196.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143196.png new file mode 100644 index 0000000000000000000000000000000000000000..9bdbac969920af77721980804bd1c5433bea5bc9 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143196.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143197.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143197.png new file mode 100644 index 0000000000000000000000000000000000000000..5ea4eec4002374096d8ac18eb973ed3bf874b632 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143197.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143198.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143198.png new file mode 100644 index 0000000000000000000000000000000000000000..7d6360c150495d204da4b069e6dc62677580888f Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231143198.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231563132.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231563132.png new file mode 100644 index 0000000000000000000000000000000000000000..bb801a9471f3f3541ba96491654f25e2df9ce8bf Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231563132.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231563134.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231563134.png new file mode 100644 index 0000000000000000000000000000000000000000..398d15376d29d3aa406abb2e7e065d4625428c4d Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231563134.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231563135.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231563135.png new file mode 100644 index 0000000000000000000000000000000000000000..785977142a6bf0e1c1815b82dea73d75fa206a75 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231563135.png differ diff --git a/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231563136.png b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231563136.png new file mode 100644 index 0000000000000000000000000000000000000000..c274db4d0ca9d8758267a916e19fdef4aa22d0ba Binary files /dev/null and b/docs/zh/server/security/trusted_computing/figures/zh-cn_image_0231563136.png differ diff --git a/docs/zh/server/security/trusted_computing/public_sys-resources/icon-caution.gif b/docs/zh/server/security/trusted_computing/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/public_sys-resources/icon-caution.gif differ diff --git a/docs/zh/server/security/trusted_computing/public_sys-resources/icon-danger.gif b/docs/zh/server/security/trusted_computing/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/public_sys-resources/icon-danger.gif differ diff --git a/docs/zh/server/security/trusted_computing/public_sys-resources/icon-note.gif b/docs/zh/server/security/trusted_computing/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/server/security/trusted_computing/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/server/security/trusted_computing/public_sys-resources/icon-notice.gif b/docs/zh/server/security/trusted_computing/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/server/security/trusted_computing/public_sys-resources/icon-tip.gif b/docs/zh/server/security/trusted_computing/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/public_sys-resources/icon-tip.gif differ diff --git a/docs/zh/server/security/trusted_computing/public_sys-resources/icon-warning.gif b/docs/zh/server/security/trusted_computing/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/server/security/trusted_computing/public_sys-resources/icon-warning.gif differ diff --git a/docs/zh/server/security/trusted_computing/trusted_computing.md b/docs/zh/server/security/trusted_computing/trusted_computing.md new file mode 100644 index 0000000000000000000000000000000000000000..a6c921ab9edae672e570b0cf9d8b37c1aa18e0c6 --- /dev/null +++ b/docs/zh/server/security/trusted_computing/trusted_computing.md @@ -0,0 +1,1125 @@ +# 可信计算 + + + +- [可信计算](#可信计算) + - [可信计算基础](#可信计算基础) + - [可信计算](#可信计算-1) + - [内核完整性度量(IMA)](#内核完整性度量ima) + - [概述](#概述) + - [约束限制](#约束限制) + - [使用场景](#使用场景) + - [操作指导](#操作指导) + - [FAQ](#faq) + - [附录](#附录) + - [远程证明(鲲鹏安全库)](#远程证明鲲鹏安全库) + - [介绍](#介绍) + - [软件架构](#软件架构) + - [安装配置](#安装配置) + - [相关参数](#相关参数) + - [接口定义](#接口定义) + - [FAQ](#faq-1) + + + +## 可信计算基础 + +### 可信计算 + +不同国际组织对可信(Trusted)做了不同的定义。 + +1. 可信计算组织(TCG)的定义: + + 一个实体是可信的,它的行为总是以预期的方式达到预期的目标。 + +2. 国际标准化组织与国际电子技术委员会定义(1999): + + 参与计算的组件、操作或过程在任意的条件下是可预测的,并能够抵御病毒和一定程度的物理干扰。 + +3. IEEE Computer Society Technical Committee on Dependable Computing 定义: + + 所谓可信,是指计算机系统所提供的服务是可被论证其是可信赖的,可信赖主要是指系统的可靠性和可用性。 + +简而言之,可信就是系统按照预定的设计和策略运行,不做其他事情。 + +一个可信计算系统由信任根、可信硬件平台、可信操作系统和可信应用组成,它的基本思想是首先创建一个安全信任根(TCB),然后建立从硬件平台、操作系统到应用的信任链,在这条信任链上从根开始,前一级认证后一级,实现信任的逐级扩展,从而实现一个安全可信的计算环境。 + +![](./figures/trusted_chain.png) + +相比于传统安全机制的“头痛医头,脚痛医脚”,发现一个病毒消灭一个病毒,可信计算采用的是白名单机制,即只允许经过认证的内核、内核模块、应用程序等在系统上运行,如果发现程序已发生更改(或本来就是一个未知的程序),就拒绝其执行。 + +## 内核完整性度量(IMA) + +### 概述 + +#### IMA + +IMA,全称 Integrity Measurement Architecture(完整性度量架构),是内核中的一个子系统,能够基于自定义策略对通过 execve()、mmap() 和 open() 系统调用访问的文件进行度量,度量结果可被用于**本地/远程证明**,或者和已有的参考值比较以**控制对文件的访问**。 + +根据 IMA wiki 的定义,内核完整性子系统的功能可以被分为三部分: + +- 度量(measure):检测对文件的意外或恶意修改,无论远程还是本地。 +- 评估(appraise):度量文件并与一个存储在扩展属性中的参考值作比较,控制本地文件完整性。 +- 审计(audit):将度量结果写到系统日志中,用于审计。 + +可以看到,相比于 IMA 度量作为一个“只记录不干涉”的观察员,IMA 评估更像是一位严格的保安人员,它的职责是拒绝对所有“人证不一”的程序的访问。 + +#### EVM + +EVM,全称 Extended Verification Module(扩展验证模块),它的作用就是将系统当中某个文件的安全扩展属性,包括 security.ima 、security.selinux 等合起来计算一个哈希值,然后使用 TPM 中存储的密钥或其他可信环境中的密钥对其进行签名,签名之后的值存在 security.evm 中,这个签名后的值是不能被篡改的,如果被篡改,再次访问的时候就会验签失败。 + +总而言之,EVM 的作用就是通过对安全扩展属性计算摘要和签名并将其存储在 security.evm 中,提供对安全扩展属性的离线保护。 + +#### IMA Digest Lists + +IMA Digest Lists(IMA 摘要列表扩展)是 openEuler 对内核原生完整性保护机制的增强,它取代了原生 IMA 机制为文件完整性提供保护。 + +“摘要列表”(digest lists)是一种特殊格式的二进制数据文件,它与 rpm 包一一对应,记录了 rpm 包中受保护文件(即可执行文件和动态库文件)的哈希值。 + +当正确配置启动参数后,内核将维护一个哈希表(对用户空间不可见),并通过 securityfs 对外提供更新哈希表的接口(digest_list_data 和 digest_list_data_del)。摘要列表在构建阶段经过私钥签名,通过接口上传到内核时,需经过内核中的公钥验证。 + +![](./figures/ima_digest_list_update.png) + +在开启 IMA 评估的情况下,每当访问一个可执行文件或动态库文件,就会调用内核中的钩子,计算文件内容和扩展属性的哈希值,并在内核哈希表中进行搜索,如果匹配就允许文件的执行,否则就拒绝访问。 + +![1599719649188](./figures/ima_verification.png) + +相比内核社区原生 IMA 机制,openEuler 内核提供的 IMA 摘要列表扩展从安全性、性能、易用性三个方面进行了改良,助力完整性保护机制在生产环境下落地: + +- **具备完整的信任链,安全性好** + + 原生 IMA 机制要求在现网环境下预先生成并标记文件扩展属性,访问文件时将文件扩展属性作为参考值,信任链不完整。 + + IMA 摘要列表扩展将文件参考摘要值保存在内核空间中,构建阶段通过摘要列表的形式携带在发布的 rpm 包中,安装 rpm 包的同时导入摘要列表并执行验签,确保了参考值来自于软件发行商,实现了完整的信任链。 + +- **惊艳的性能** + + 由于 TPM 芯片是一种低速芯片,因此 PCR 扩展操作成为了 IMA 度量场景的性能瓶颈。摘要列表扩展在确保安全性的前提下,减少了不必要的 PCR 扩展操作,相比原生 IMA 性能提升高达 65%。 + + IMA 评估场景下,摘要列表扩展将签名验证统一移动到启动阶段进行,避免每次访问文件时都执行验签,相比原生 IMA 评估场景提升运行阶段文件访问的性能约 20%。 + +- **快速部署,平滑升级** + + 原生 IMA 机制在初次部署或每次更新软件包时,都需要切换到 fix 模式手动标记文件扩展属性后再重启进入 enforce 模式,才能正常访问安装的程序。 + + 摘要列表扩展可实现安装完成后开箱即用,且允许直接在 enforce 模式下安装或升级 rpm 包,无需重启和手动标记即可使用,实现了用户感知最小化,适合现网环境下的快速部署和平滑升级。 + +需要注意的是,IMA 摘要列表扩展将原生 IMA 的验签过程提前到启动阶段进行,也引入了一个假设,即内核空间的内存无法被篡改,这就使得 IMA 也依赖于其他安全机制(内核模块安全启动和内存动态度量)以保护内核内存的完整性。 + +但无论社区原生 IMA 机制还是 IMA 摘要列表扩展,都只是可信计算信任链中的一环,无法孤立地保证系统的安全性,安全自始至终都是一个构建纵深防御的系统工程。 + +### 约束限制 + +1. 当前 IMA 评估模式仅支持保护系统中的不可变文件(包括可执行文件和动态库文件)。 +2. IMA 提供的是应用层的完整性度量,它的安全性依赖于之前环节的可信。 +3. 当前阶段 IMA 不支持第三方应用摘要列表的导入。 +4. 启动日志中可能存在 `Unable to open file: /etc/keys/x509_ima.der` 字样,该报错来自于开源社区,不影响 IMA 摘要列表特性的使用。 +5. ARM 版本中 IMA 开启日志模式可能存在一些 audit 报错信息,这是由于 modprobe 在摘要列表未导入时加载内核模块所致,不影响正常功能。 + +### 使用场景 + +#### IMA measurement + +IMA measurement(IMA 度量)的目的是检测对系统文件的意外或恶意修改,度量结果可被用于本地证明或远程证明。 + +如果系统中存在 TPM 芯片,度量结果将被扩展到 TPM 芯片的指定 PCR 寄存器中,由于 PCR 扩展的单向性以及 TPM 芯片的硬件安全性,用户无法修改已被扩展的度量结果,这就确保了度量结果的真实性。 + +IMA 度量的文件范围和触发条件可以由用户通过 IMA 策略自行配置。 + +默认情况下 IMA 不启用,但系统会前往 `/etc/ima/` 路径下寻找 ima-policy 策略文件,如果找到,就会按照策略在启动时度量系统中的文件。如果不想手动编写策略文件,也可以在启动参数中配置 `ima_policy=tcb` 使用默认策略(更多策略参数请参考附录“IMA启动参数”章节)。 + +系统当前加载的 IMA 策略可以在 `/sys/kernel/security/ima/policy` 文件中查看,IMA 度量日志则位于`/sys/kernel/security/ima/ascii_runtime_measurements` 文件中,如下所示: + +```shell +$ head /sys/kernel/security/ima/ascii_runtime_measurements +10 ddee6004dc3bd4ee300406cd93181c5a2187b59b ima-ng sha1:9797edf8d0eed36b1cf92547816051c8af4e45ee boot_aggregate +10 180ecafba6fadbece09b057bcd0d55d39f1a8a52 ima-ng sha1:db82919bf7d1849ae9aba01e28e9be012823cf3a /init +10 ac792e08a7cf8de7656003125c7276968d84ea65 ima-ng sha1:f778e2082b08d21bbc59898f4775a75e8f2af4db /bin/bash +10 0a0d9258c151356204aea2498bbca4be34d6bb05 ima-ng sha1:b0ab2e7ebd22c4d17d975de0d881f52dc14359a7 /lib64/ld-2.27.so +10 0d6b1d90350778d58f1302d00e59493e11bc0011 ima-ng sha1:ce8204c948b9fe3ae67b94625ad620420c1dc838 /etc/ld.so.cache +10 d69ac2c1d60d28b2da07c7f0cbd49e31e9cca277 ima-ng sha1:8526466068709356630490ff5196c95a186092b8 /lib64/libreadline.so.7.0 +10 ef3212c12d1fbb94de9534b0bbd9f0c8ea50a77b ima-ng sha1:f80ba92b8a6e390a80a7a3deef8eae921fc8ca4e /lib64/libc-2.27.so +10 f805861177a99c61eabebe21003b3c831ccf288b ima-ng sha1:261a3cd5863de3f2421662ba5b455df09d941168 /lib64/libncurses.so.6.1 +10 52f680881893b28e6f0ce2b132d723a885333500 ima-ng sha1:b953a3fa385e64dfe9927de94c33318d3de56260 /lib64/libnss_files-2.27.so +10 4da8ce3c51a7814d4e38be55a2a990a5ceec8b27 ima-ng sha1:99a9c095c7928ecca8c3a4bc44b06246fc5f49de /etc/passwd +``` + +每一条记录从左到右分别是: + +1. PCR:用于扩展度量结果的 PCR 寄存器,默认是 10,只在系统装了 TPM 芯片的情况下有意义。 +2. 模板哈希值:最终被用于扩展的哈希值,组合了文件内容哈希和文件路径的长度和值。 +3. 模板:扩展度量值的模板,如 ima-ng。 +4. 文件内容哈希值:被度量的文件内容的哈希值。 +5. 文件路径:被度量的文件路径。 +6. 本版本使能了ko压缩特性,当加载被压缩ko文件时,如需IMA使能appraise func=MODULE_CHECK策略,需要在启动参数配置module.sig_enforce=1。 + +#### IMA appraisal + +IMA appraisal(IMA 评估)的目的是通过与标准参考值的比较,控制对本地文件的访问。 + +IMA 首先使用安全扩展属性 security.ima 和 security.evm 存储文件完整性度量的参考值: + +- security.ima:存储文件内容的哈希值; +- security.evm:存储文件扩展属性的哈希值签名。 + +访问受保护文件时,将会触发内核中的钩子,依次验证文件扩展属性和内容的完整性: + +1. 使用内核 keyring 中的公钥对文件 security.evm 扩展属性中的签名值验签,与当前文件扩展属性的哈希值比较,如果匹配就证明文件的扩展属性是完整的(包括 security.ima)。 +2. 在文件扩展属性完整的前提下,将文件 security.ima 扩展属性的内容与当前文件内容的摘要值比较,如果匹配就允许对文件的访问。 + +同样,IMA 评估的文件范围和触发条件也可以由用户通过 IMA 策略自行配置。 + +#### IMA Digest Lists + +IMA 摘要列表扩展当前提供对以下三种启动参数组合的支持: + +- IMA measurement 度量模式: + + ```shell + ima_policy=exec_tcb ima_digest_list_pcr=11 + ``` + +- IMA appraisal 日志模式 + IMA measurement 度量模式: + + ```shell + ima_template=ima-sig ima_policy="exec_tcb|appraise_exec_tcb|appraise_exec_immutable" initramtmpfs ima_hash=sha256 ima_appraise=log evm=allow_metadata_writes evm=x509 ima_digest_list_pcr=11 ima_appraise_digest_list=digest + ``` + +- IMA appraisal 强制模式 + IMA measurement 度量模式: + + ```shell + ima_template=ima-sig ima_policy="exec_tcb|appraise_exec_tcb|appraise_exec_immutable" initramtmpfs ima_hash=sha256 ima_appraise=enforce-evm evm=allow_metadata_writes evm=x509 ima_digest_list_pcr=11 ima_appraise_digest_list=digest + ``` + +#### IMA measurement virtCCA + +在ARM virtCCA机密虚拟机环境中开启IMA度量功能时,支持将度量结果扩展至virtCCA环境的REM0度量寄存器,并将RIM度量寄存器的值记录为boot_aggregate度量日志。该流程在IMA初始化流程中检测并配置,无需用户手动修改。 + +### 操作指导 + +#### 原生 IMA 场景初次部署 + +第一次启动时,需要在启动参数中配置: + +```shell +ima_appraise=fix ima_policy=appraise_tcb +``` + +`fix` 模式会允许系统在没有参考值的情况下启动,`appraise_tcb` 对应了一种 IMA 策略,具体可参考附录中的“IMA 启动参数”章节。 + +接下来,你需要访问所有需要被校验的文件,从而为它们添加 IMA 扩展属性: + +```shell +$ time find / -fstype ext4 -type f -uid 0 -exec dd if='{}' of=/dev/null count=0 status=none \; +``` + +该过程会花费一定时间,请耐心等待。命令执行完成后,你可以从受保护文件的扩展属性中看到参考值已被标记: + +```shell +$ getfattr -m - -d /sbin/init +# file: sbin/init +security.ima=0sAXr7Qmun5mkGDS286oZxCpdGEuKT +security.selinux="system_u:object_r:init_exec_t" +``` + +最后,配置以下启动参数并重新启动系统: + +```shell +ima_appraise=enforce ima_policy=appraise_tcb +``` + +#### 摘要列表场景初次部署 + +1. 配置内核参数进入 log 模式。 + + 编辑 `/boot/efi/EFI/openEuler/grub.cfg` 文件,加入以下参数: + + ```shell + ima_template=ima-sig ima_policy="exec_tcb|appraise_exec_tcb|appraise_exec_immutable" initramtmpfs ima_hash=sha256 ima_appraise=log evm=allow_metadata_writes evm=x509 ima_digest_list_pcr=11 ima_appraise_digest_list=digest + ``` + + 使用 `reboot` 重启系统进入 log 模式,该模式下已开启完整性校验,但不会因校验失败而无法启动。 + +2. 安装依赖包。 + + 使用 yum 安装 digest-list-tools 和 ima-evm-utils,确认不低于以下版本: + + ```shell + $ yum install digest-list-tools ima-evm-utils + $ rpm -qa | grep digest-list-tools + digest-list-tools-0.3.93-1.oe1.x86_64 + $ rpm -qa | grep ima-evm-utils + ima-evm-utils-1.2.1-9.oe1.x86_64 + ``` + +3. 因签名密钥切换,对已发布的版本,需要手动重新设置下密钥ID,具体操作如下: + + ```shell + $ setfattr -n security.ima -v "0x$(getfattr -n security.ima --only-values /etc/ima/digest_lists/0-parser_list-compact-libexec | xxd -p | tr -d '\n' | sed 's/b675600b/fb37bc6f/g')" /etc/ima/digest_lists/0-parser_list-compact-libexec + $ setfattr -n security.ima -v "0x$(getfattr -n security.ima --only-values /etc/ima/digest_lists/0-metadata_list-compact-digest-list-tools-* | xxd -p | tr -d '\n' | sed 's/b675600b/fb37bc6f/g')" /etc/ima/digest_lists/0-metadata_list-compact-digest-list-tools-* + ``` + +4. 执行 `dracut` 重新生成 initrd: + + ```shell + $ dracut -f -e xattr + ``` + + 编辑 `/boot/efi/EFI/openEuler/grub.cfg` 文件,将 ima_appraise=log 改为 ima_appraise=enforce-evm: + + ```shell + ima_template=ima-sig ima_policy="exec_tcb|appraise_exec_tcb|appraise_exec_immutable" initramtmpfs ima_hash=sha256 ima_appraise=enforce-evm evm=allow_metadata_writes evm=x509 ima_digest_list_pcr=11 ima_appraise_digest_list=digest + ``` + + 使用 reboot 重启即可完成初次部署。 + +#### 在 OBS 上进行摘要列表构建 + +OBS 全称 Open Build Service,是一种编译系统,最早在 openSUSE 用于软件包的构建,能够支持多架构的分布式编译。 + +进行摘要列表构建之前,首先确保您的工程包含以下 rpm 包,且来自 openEuler: + +- digest-list-tools +- pesign-obs-integration +- selinux-policy +- rpm +- openEuler-rpm-config + +在交付件工程中增加 Project Config: + +```shell +Preinstall: pesign-obs-integration digest-list-tools selinux-policy-targeted +Macros: +%__brp_digest_list /usr/lib/rpm/openEuler/brp-digest-list %{buildroot} +:Macros +``` + +- 在 Preinstall 中新增 digest-list-tools 用于生成摘要列表,pesign-obs-integration 用于生成摘要列表的签名,新增 selinux-policy-targeted 用于确保生成摘要列表时构建环境内 SELinux 标签正确。 +- 在 Macros 中定义宏 %__brp_digest_list,rpm 将在构建阶段通过这个宏执行命令为编译完成的二进制文件生成摘要列表。这个宏可以作为一个开关控制工程中的摘要列表是否生成。 + +配置完成后,OBS 会自动执行全量构建,正常情况下构建完成后,软件包中会新增以下两个文件: + +- /etc/ima/digest_lists/0-metadata_list-compact-[包名]-[版本号] +- /etc/ima/digest_lists.tlv/0-metadata_list-compact_tlv-[包名]-[版本号] + +#### 在 Koji 上进行摘要列表构建 + +Koji 是 Fedora 社区的编译系统,openEuler 社区将在后续支持,敬请期待。 + +### FAQ + +1. 为什么进入 enforce 模式后系统无法启动或启动后命令无法执行/服务不正常? + + enforce 模式下 IMA 会对文件访问做控制,如果访问文件的内容或扩展属性不完整,就会被拒绝访问,当影响启动的关键命令无法执行时,就会造成系统无法启动。 + + 请确认是否存在以下问题: + + - **摘要列表是否被加入到 initrd 中?** + + 初次部署时是否执行了 dracut 命令将摘要列表加入内核?如果摘要列表没有加入 initrd,启动阶段就无法导入摘要列表,从而导致启动失败。 + + - **是否使用官方提供的 rpm 包?** + + 如果使用的是非 openEuler 官方提供的 rpm 包,rpm 包可能没有携带摘要列表,或者对摘要列表签名的私钥与内核中的验签公钥不匹配,从而导致摘要列表没有被导入内核。 + + 如果原因还不明确,可以进入 log 模式启动,从错误日志中寻找原因: + + ```shell + $ dmesg | grep appraise + ``` + +2. 为什么 enforce 模式下没有对系统文件做访问控制? + + 系统没有按照预期对文件执行访问控制,首先查看启动参数中的 IMA 策略是否已被正确配置: + + ```shell + $ cat /proc/cmdline + ...ima_policy=exec_tcb|appraise_exec_tcb|appraise_exec_immutable... + ``` + + 其次查看当前内核中 IMA 策略是否已生效: + + ```shell + $ cat /sys/kernel/security/ima/policy + ``` + + 如果 policy 文件是空的,证明策略没有设置成功,系统也就不会进行访问控制。 + +3. 初次部署完成后,安装/升级/卸载软件包后还需要手动执行 dracut 生成 initrd 吗? + + 不需要。rpm 包提供的 digest_list.so 插件能够在 rpm 包粒度提供摘要列表的自动更新,可以实现用户对摘要列表的无感知。 + +### 附录 + +#### IMA securityfs 接口说明 + +原生 IMA 提供的 securityfs 接口如下: + +> 注:以下接口路径都位于 `/sys/kernel/security/` 目录下。 + +| 路径 | 权限 | 说明 | +| ------------------------------ | ---- | ---------------------------------------- | +| ima/policy | 600 | IMA 策略接口 | +| ima/ascii_runtime_measurement | 440 | ascii 码形式表示的 IMA 度量结果 | +| ima/binary_runtime_measurement | 440 | 二进制形式表示的 IMA 度量结果 | +| ima/runtime_measurement_count | 440 | 度量结果数量统计 | +| ima/violations | 440 | IMA 度量结果冲突数 | +| evm | 660 | EVM 模式,即校验文件扩展属性完整性的方式 | + +其中,`/sys/kernel/security/evm` 的取值有以下四种: + +- 0:EVM 未初始化; +- 1:使用 HMAC(对称加密)方式校验扩展属性完整性; +- 2:使用公钥验签(非对称加密)方式校验扩展属性完整性; +- 6:关闭扩展属性完整性校验(openEuler 使用此方式)。 + +IMA 摘要列表扩展额外提供的 securityfs 接口如下: + +| 路径 | 权限 | 说明 | +| ------------------------ | ---- | --------------------------------------- | +| ima/digests_count | 440 | 显示系统哈希表中的总摘要数量(IMA+EVM) | +| ima/digest_list_data | 200 | 摘要列表新增接口 | +| ima/digest_list_data_del | 200 | 摘要列表删除接口 | + +#### IMA 策略语法 + +每条 IMA 策略语句都必须以 action 关键字代表的**动作**开头,后接**筛选条件**: + +- action:表示该条策略具体的动作,一条策略只能选一个 action。 + + > 注:实际书写时**可忽略 action 字样**,直接书写 dont_measure,不需要写成 action=dont_measure。 + +- func:表示被度量或鉴定的文件类型,常和 mask 匹配使用,一条策略只能选一个 func。 + + - FILE_CHECK 只能同 MAY_EXEC、MAY_WRITE、MAY_READ 匹配使用。 + - MODULE_CHECK、MMAP_CHECK、BPRM_CHECK 只能同 MAY_EXEC 匹配使用。 + - 匹配关系以外的组合不会产生效果。 + +- mask:表示文件在做什么操作时将被度量或鉴定,一条策略只能选一个 mask。 + +- fsmagic:表示文件系统类型的十六进制魔数,定义在 `/usr/include/linux/magic.h` 文件中。 + + > 注:默认情况下度量所有文件系统,除非使用 dont_measure/dont_appraise 标记不度量某文件系统。 + +- fsuuid:表示系统设备 uuid 的 16 位的十六进制字符串。 + +- objtype:表示文件类型,一条策略只能选一个文件类型。 + + > 注:objtype 相比 func 而言,划分的粒度更细,比如 obj_type=nova_log_t 表示 nova log 类型的文件。 + +- uid:表示哪个用户(用用户 id 表示)对文件进行操作,一条策略只能选一个 uid。 + +- fowner:表示文件的属主(用用户 id 表示)是谁,一条策略只能选一个 fowner。 + +关键字的具体取值及说明如下: + +| 关键字 | 值 | 说明 | +| ------------- | ------------------ | ------------------------------------------------------------ | +| action | measure | 开启 IMA 度量 | +| | dont_measure | 禁用 IMA 度量 | +| | appraise | 开启 IMA 评估 | +| | dont_appraise | 禁用 IMA 评估 | +| | audit | 开启审计 | +| func | FILE_CHECK | 将要被打开的文件 | +| | MODULE_CHECK | 将要被装载的内核模块文件 | +| | MMAP_CHECK | 将要被映射到进程内存空间的动态库文件 | +| | BRPM_CHECK | 将要被执行的文件(不含通过 `/bin/bash` 等程序打开的脚本文件) | +| | POLICY_CHECK | 将要被作为补充 IMA 策略装载的文件 | +| | FIRMWARE_CHECK | 将要被加载到内存中的固件 | +| | DIGEST_LIST_CHECK | 将要被加载到内核中的摘要列表文件 | +| | KEXEC_KERNEL_CHECK | 将要切换的 kexec 内核 | +| mask | MAY_EXEC | 执行文件 | +| | MAY_WRITE | 写文件。不建议使用,受限于 echo、vim 等开源机制(修改本质是新建临时文件再重命名),并不是每次修改都会触发 MAY_WRITE 的 IMA 度量。 | +| | MAY_READ | 读文件 | +| | MAY_APPEND | 扩展文件属性 | +| fsmagic | fsmagic=xxx | 表示文件系统类型的十六进制魔数 | +| fsuuid | fsuuid=xxx | 表示系统设备 uuid 的 16 位的十六进制字符串 | +| fowner | fowner=xxx | 文件属主的用户 id | +| uid | uid=xxx | 操作文件的用户 id | +| obj_type | obj_type=xxx_t | 表示文件的类型(基于 SELinux 标签) | +| pcr | pcr=\ | 选择 TPM 中用于扩展度量值的 PCR(默认为 10) | +| appraise_type | imasig | 基于签名进行 IMA 评估 | +| | meta_immutable | 基于签名进行文件扩展属性的评估(支持摘要列表) | + +> 注:PATH_CHECK 等同于 FILE_CHECK,FILE_MMAP 等同于 MMAP_CHECK,不在本表提及。 + +#### IMA 原生启动参数 + +原生 IMA 的内核启动参数列表如下: + +| 参数名称 | 取值 | 功能 | +| ---------------- | ------------ | ------------------------------------------------------------ | +| ima_appraise | off | 关闭 IMA 评估模式,在访问文件时不进行完整性校验,也不为文件生成新的参考值。 | +| | enforce | 开启 IMA 评估强制模式,在访问文件时进行完整性校验,即计算文件摘要值并与参考值比对,如果比对失败就拒绝对文件的访问。IMA 会为新文件生成新的参考值。 | +| | fix | 开启 IMA 修复模式,在该模式下允许更新受保护文件的参考值。 | +| | log | 开启 IMA 评估日志模式,在访问文件时进行完整性校验,但即使校验失败也允许执行命令,只进行日志记录。 | +| ima_policy | tcb | 度量所有文件执行、动态库映射、内核模块导入以及设备驱动加载,此外,root 用户读文件的行为也会被度量。 | +| | appraise_tcb | 对所有 root 属主的文件进行评估。 | +| | secure_boot | 对所有内核模块导入、硬件驱动加载、kexec 内核切换以及 IMA 策略进行评估,前提是这些文件都具有 IMA 签名。 | +| ima_tcb | 无 | 等价于 ima_policy=tcb | +| ima_appraise_tcb | 无 | 等价于 ima_policy=appraise_tcb | +| ima_hash | sha1/md5/... | IMA 摘要算法,默认为 sha1 | +| ima_template | ima | IMA 度量扩展模板 | +| | ima-ng | IMA 度量扩展模板 | +| | ima-sig | IMA 度量扩展模板 | +| integrity_audit | 0 | 基础完整性审计信息(默认) | +| | 1 | 额外完整性审计信息 | + +> 注:ima_policy 参数可以同时指定多个值,例如 ima_policy=tcb|appraise_tcb,启动后系统的 IMA 策略就是这两种参数对应的策略的总和。 + +启动参数 `ima_policy=tcb` 对应的 IMA 策略为: + +```ini +# PROC_SUPER_MAGIC = 0x9fa0 +dont_measure fsmagic=0x9fa0 +# SYSFS_MAGIC = 0x62656572 +dont_measure fsmagic=0x62656572 +# DEBUGFS_MAGIC = 0x64626720 +dont_measure fsmagic=0x64626720 +# TMPFS_MAGIC = 0x01021994 +dont_measure fsmagic=0x1021994 +# DEVPTS_SUPER_MAGIC=0x1cd1 +dont_measure fsmagic=0x1cd1 +# BINFMTFS_MAGIC=0x42494e4d +dont_measure fsmagic=0x42494e4d +# SECURITYFS_MAGIC=0x73636673 +dont_measure fsmagic=0x73636673 +# SELINUX_MAGIC=0xf97cff8c +dont_measure fsmagic=0xf97cff8c +# SMACK_MAGIC=0x43415d53 +dont_measure fsmagic=0x43415d53 +# CGROUP_SUPER_MAGIC=0x27e0eb +dont_measure fsmagic=0x27e0eb +# CGROUP2_SUPER_MAGIC=0x63677270 +dont_measure fsmagic=0x63677270 +# NSFS_MAGIC=0x6e736673 +dont_measure fsmagic=0x6e736673 +measure func=MMAP_CHECK mask=MAY_EXEC +measure func=BPRM_CHECK mask=MAY_EXEC +measure func=FILE_CHECK mask=MAY_READ uid=0 +measure func=MODULE_CHECK +measure func=FIRMWARE_CHECK +``` + +启动参数 `ima_policy=tcb_appraise` 对应的 IMA 策略为: + +```ini +# PROC_SUPER_MAGIC = 0x9fa0 +dont_appraise fsmagic=0x9fa0 +# SYSFS_MAGIC = 0x62656572 +dont_appraise fsmagic=0x62656572 +# DEBUGFS_MAGIC = 0x64626720 +dont_appraise fsmagic=0x64626720 +# TMPFS_MAGIC = 0x01021994 +dont_appraise fsmagic=0x1021994 +# RAMFS_MAGIC +dont_appraise fsmagic=0x858458f6 +# DEVPTS_SUPER_MAGIC=0x1cd1 +dont_appraise fsmagic=0x1cd1 +# BINFMTFS_MAGIC=0x42494e4d +dont_appraise fsmagic=0x42494e4d +# SECURITYFS_MAGIC=0x73636673 +dont_appraise fsmagic=0x73636673 +# SELINUX_MAGIC=0xf97cff8c +dont_appraise fsmagic=0xf97cff8c +# SMACK_MAGIC=0x43415d53 +dont_appraise fsmagic=0x43415d53 +# NSFS_MAGIC=0x6e736673 +dont_appraise fsmagic=0x6e736673 +# CGROUP_SUPER_MAGIC=0x27e0eb +dont_appraise fsmagic=0x27e0eb +# CGROUP2_SUPER_MAGIC=0x63677270 +dont_appraise fsmagic=0x63677270 +appraise fowner=0 +``` + +启动参数 `ima_policy=secure_boot` 对应的 IMA 策略为: + +```ini +appraise func=MODULE_CHECK appraise_type=imasig +appraise func=FIRMWARE_CHECK appraise_type=imasig +appraise func=KEXEC_KERNEL_CHECK appraise_type=imasig +appraise func=POLICY_CHECK appraise_type=imasig +``` + +#### IMA 摘要列表启动参数 + +IMA 摘要列表特性额外引入的内核启动参数如下: + +| 参数名称 | 取值 | 功能 | +| ------------------------ | ----------------------- | ------------------------------------------------------------ | +| integrity | 0 | IMA 特性总开关关闭(默认) | +| | 1 | IMA 特性总开关打开 | +| ima_appraise | off | 关闭 IMA 评估模式 | +| | enforce-evm | IMA 评估强制模式,在访问文件时进行完整性校验并进行访问控制 | +| ima_appraise_digest_list | digest | 当 EVM 被禁用时,使用摘要列表进行 IMA appraise,摘要列表同时保护文件内容和扩展属性 | +| | digest-nometadata | 在EVM摘要值不存在的情况下,仅基于IMA摘要值进行完整性校验(不保护文件扩展属性) | +| evm | fix | 允许任何对扩展属性的修改(即使修改会导致扩展属性完整性校验失败) | +| | ignore | 只有在扩展属性不存在或不正确的情况下才允许修改 | +| ima_policy | exec_tcb | IMA 度量策略,详见下文策略说明。 | +| | appraise_exec_tcb | IMA 评估策略,详见下文策略说明。 | +| | appraise_exec_immutable | IMA 评估策略,详见下文策略说明。 | +| ima_digest_list_pcr | 11 | 使用 PCR 11 替代 PCR 10,仅使用摘要列表进行度量 | +| | +11 | 依然保留 PCR 10 的度量,在有TPM芯片时也往TPM芯片写度量结果 | +| initramtmpfs | 无 | 添加对 tmpfs 的支持 | + +启动参数 `ima_policy=exec_tcb` 对应的 IMA 策略为: + +```ini +dont_measure fsmagic=0x9fa0 +dont_measure fsmagic=0x62656572 +dont_measure fsmagic=0x64626720 +dont_measure fsmagic=0x1cd1 +dont_measure fsmagic=0x42494e4d +dont_measure fsmagic=0x73636673 +dont_measure fsmagic=0xf97cff8c +dont_measure fsmagic=0x43415d53 +dont_measure fsmagic=0x27e0eb +dont_measure fsmagic=0x63677270 +dont_measure fsmagic=0x6e736673 +measure func=MMAP_CHECK mask=MAY_EXEC +measure func=BPRM_CHECK mask=MAY_EXEC +measure func=MODULE_CHECK +measure func=FIRMWARE_CHECK +measure func=POLICY_CHECK +measure func=DIGEST_LIST_CHECK +measure parser +``` + +启动参数 `ima_policy=appraise_exec_tcb` 对应的 IMA 策略为: + +```ini +appraise func=MODULE_CHECK appraise_type=imasig +appraise func=FIRMWARE_CHECK appraise_type=imasig +appraise func=KEXEC_KERNEL_CHECK appraise_type=imasig +appraise func=POLICY_CHECK appraise_type=imasig +appraise func=DIGEST_LIST_CHECK appraise_type=imasig +dont_appraise fsmagic=0x9fa0 +dont_appraise fsmagic=0x62656572 +dont_appraise fsmagic=0x64626720 +dont_appraise fsmagic=0x858458f6 +dont_appraise fsmagic=0x1cd1 +dont_appraise fsmagic=0x42494e4d +dont_appraise fsmagic=0x73636673 +dont_appraise fsmagic=0xf97cff8c +dont_appraise fsmagic=0x43415d53 +dont_appraise fsmagic=0x6e736673 +dont_appraise fsmagic=0x27e0eb +dont_appraise fsmagic=0x63677270 +``` + +启动参数 `ima_policy=appraise_exec_immutable` 对应的 IMA 策略为: + +```ini +appraise func=BPRM_CHECK appraise_type=imasig appraise_type=meta_immutable +appraise func=MMAP_CHECK +appraise parser appraise_type=imasig +``` + +#### IMA 内核编译选项详解 + +原生 IMA 提供的编译选项如下: + +| 编译选项 | 功能 | +| -------------------------------- | --------------------------- | +| CONFIG_INTEGRITY | IMA/EVM 总编译开关 | +| CONFIG_INTEGRITY_SIGNATURE | 使能 IMA 签名校验 | +| CONFIG_INTEGRITY_ASYMMETRIC_KEYS | 使能 IMA 非对称签名校验 | +| CONFIG_INTEGRITY_TRUSTED_KEYRING | 使能 IMA/EVM 密钥环 | +| CONFIG_INTEGRITY_AUDIT | 编译 IMA audit 审计模块 | +| CONFIG_IMA | IMA 总编译开关 | +| CONFIG_IMA_WRITE_POLICY | 允许在运行阶段更新 IMA 策略 | +| CONFIG_IMA_MEASURE_PCR_IDX | 允许指定 IMA 度量 PCR 序号 | +| CONFIG_IMA_LSM_RULES | 允许配置 LSM 规则 | +| CONFIG_IMA_APPRAISE | IMA 评估总编译开关 | +| IMA_APPRAISE_BOOTPARAM | 启用 IMA 评估启动参数 | +| CONFIG_EVM | EVM 总编译开关 | + +IMA 摘要列表扩展额外提供的编译选项如下: + +| 编译选项 | 功能 | +| ------------------ | ------------------------- | +| CONFIG_DIGEST_LIST | 开启 IMA 摘要列表特性开关 | + +#### IMA 性能参考数据 + +下图对比了不开启 IMA、开启原生 IMA、开启 IMA 摘要列表特性时的性能: + +![img](./figures/ima_performance.gif) + +#### IMA 根证书配置 + +当前openEuler使用RPM密钥对IMA摘要列表进行签名,为保证IMA功能开箱可用,openEuler内核编译时默认将RPM根证书(PGP证书)导入内核。当前共包含两本PGP证书,分别为旧版本使用的OBS证书和openEuler 22.03 LTS SP4版本切换的openEuler证书: + +```shell +$ cat /proc/keys | grep PGP +1909b4ad I------ 1 perm 1f030000 0 0 asymmetri private OBS b25e7f66: PGP.rsa b25e7f66 [] +2f10cd36 I------ 1 perm 1f030000 0 0 asymmetri openeuler fb37bc6f: PGP.rsa fb37bc6f [] +``` + +由于当前内核不支持导入PGP子公钥,而切换后的openEuler证书采用子密钥签名,因此openEuler内核编译前对证书进行了预处理,抽取子公钥并导入内核,具体处理流程可见内核软件包代码仓内的process_pgp_certs.sh脚本文件: + +如果用户不使用IMA摘要列表功能或使用其他密钥实现签名/验签,则可将相关代码移除,自行实现内核根证书配置。 + +## 远程证明(鲲鹏安全库) + +### 介绍 + +本项目开发运行在鲲鹏处理器上的基础安全软件组件,前期主要聚焦在远程证明等可信计算相关领域,使能社区安全开发者。 + +### 软件架构 + +在未使能TEE的平台上,本项目可提供平台远程证明特性,其软件架构如下图所示: + +![img](./figures/RA-arch-1.png) + +在已使能TEE的平台上,本项目可提供TEE远程证明特性,其软件架构如下图所示: + +![img](./figures/RA-arch-2.png) + +### 安装配置 + +1. 使用yum安装程序的rpm包,命令如下: + + ```shell + $ yum install kunpengsecl-ras kunpengsecl-rac kunpengsecl-rahub kunpengsecl-qcaserver kunpengsecl-attester kunpengsecl-tas kunpengsecl-devel + ``` + +2. 准备数据库环境:进入 `/usr/share/attestation/ras` 目录,执行 `prepare-database-env.sh` 脚本进行自动化的数据库环境配置。 + +3. 程序运行时依赖的配置文件有三个路径,分别为:当前路径 `./config.yaml` ,家路径 `${HOME}/.config/attestation/ras(rac)(rahub)(qcaserver)(attester)(tas)/config.yaml` ,以及系统路径 `/etc/attestation/ras(rac)(rahub)(qcaserver)(attester)(tas)/config.yaml` 。 + +4. (可选)如果需要创建家目录配置文件,可在安装好rpm包后,执行位于 `/usr/share/attestation/ras(rac)(rahub)(qcaserver)(attester)(tas)` 下的脚本 `prepare-ras(rac)(hub)(qca)(attester)(tas)conf-env.sh` 从而完成家目录配置文件的部署。 + +### 相关参数 + +#### RAS启动参数 + +命令行输入 `ras` 即可启动RAS程序。请注意,在当前目录下需要提供**ECDSA**公钥并命名为 `ecdsakey.pub` 。相关参数如下: + +```text + -H --https http/https模式开关,默认为https(true),false=http + -h --hport https模式下RAS监听的restful api端口 + -p, --port string RAS监听的client api端口 + -r, --rest string http模式下RAS监听的restful api端口 + -T, --token 生成一个测试用的验证码并退出 + -t, --test 以测试模式启动 + -v, --verbose 打印更详细的RAS运行时日志信息 + -V, --version 打印RAS版本并退出 +``` + +**注意:** +>1.若要使用TEE远程证明特性,需要预装由TEE团队提供的**libqca.so**库和**libteec.so**库。 +>2.若不使用TEE远程证明特性,需要将 `${DESTDIR}/usr/share/attestation/qcaserver` 目录下的libqca.so库和libteec.so库复制到 `/usr/lib` 或 `/usr/lib64` 目录。 + +#### RAC启动参数 + +命令行输入 `sudo raagent` 即可启动RAC程序,请注意,物理TPM模块的开启需要sudo权限。相关参数如下: + +```text + -s, --server string 指定待连接的RAS服务端口 + -t, --test 以测试模式启动 + -v, --verbose 打印更详细的RAC运行时日志信息 + -V, --version 打印RAC版本并退出 + -i, --imalog 指定ima文件路径 + -b, --bioslog 指定bios文件路径 + -T, --tatest 以TA测试模式启动 +``` + +**注意:** +>1.若要使用TEE远程证明特性,需要以非TA测试模式启动RAC,并将待证明TA的uuid、是否使用TCB、mem_hash和img_hash按序放入RAC执行路径下的**talist**文件内。**talist**文件格式如下: +> +>```text +>e08f7eca-e875-440e-9ab0-5f381136c600 false ccd5160c6461e19214c0d8787281a1e3c4048850352abe45ce86e12dd3df9fde 46d5019b0a7ffbb87ad71ea629ebd6f568140c95d7b452011acfa2f9daf61c7a +>``` +> +>2.若不使用TEE远程证明特性,需要TA测试模式启动RAC。 +>3.若无法使能物理TPM模块,需要以测试模式启动RAC。我们提供了一组测试模式下的平台基准值文件供RAC读取,在启动RAC前需要将 `$(DESTDIR)/etc/attestation/default_test` 目录下的文件复制到RAC运行目录下。 + +#### QCA启动参数 + +命令行输入 `${DESTDIR}/usr/bin/qcaserver` 即可启动QCA程序,请注意,这里必须要使用qcaserver的完整路径以正常启动QTA,同时需要使QTA中的CA路径参数与该路径保持相同。相关参数如下: + +```text + -C, --scenario int 设置程序的应用场景,默认为no_as场景(0),1=as_no_daa场景,2=as_with_daa场景 + -S, --server string 指定开放的服务器地址/端口 +``` + +#### ATTESTER启动参数 + +命令行输入 `attester` 即可启动ATTESTER程序。相关参数如下: + +```text + -B, --basevalue string 设置基准值文件读取路径 + -M, --mspolicy int 设置度量策略,默认为-1,需要手动指定。1=仅比对img-hash值,2=仅比对hash值,3=同时比对img-hash和hash两个值 + -S, --server string 指定待连接的服务器地址 + -U, --uuid int 指定待验证的可信应用 + -V, --version 打印程序版本并退出 + -T, --test 读取固定的nonce值以匹配目前硬编码的可信报告 +``` + +#### TAS启动参数 + +命令行输入 `tas` 即可启动TAS程序。相关参数如下: + +```text + -T, --token 生成一个测试用的验证码并退出 +``` + +**注意:** +>1.若要启用TAS服务,需要先为TAS配置好私钥。可以按如下命令修改家目录下的配置文件: +> +>```shell +>$ cd ${HOME}/.config/attestation/tas +>$ vim config.yaml +> # 如下DAA_GRP_KEY_SK_X和DAA_GRP_KEY_SK_Y的值仅用于测试,正常使用前请务必更新其内容以保证安全。 +>tasconfig: +> port: 127.0.0.1:40008 +> rest: 127.0.0.1:40009 +> akskeycertfile: ./ascert.crt +> aksprivkeyfile: ./aspriv.key +> huaweiitcafile: ./Huawei IT Product CA.pem +> DAA_GRP_KEY_SK_X: 65a9bf91ac8832379ff04dd2c6def16d48a56be244f6e19274e97881a776543c65a9bf91ac8832379ff04dd2c6def16d48a56be244f6e19274e97881a776543c +> DAA_GRP_KEY_SK_Y: 126f74258bb0ceca2ae7522c51825f980549ec1ef24f81d189d17e38f1773b56126f74258bb0ceca2ae7522c51825f980549ec1ef24f81d189d17e38f1773b56 +>``` +> +>之后再输入`tas`启动TAS程序。 +> +>2.在有TAS环境中,为提高QCA配置证书的效率,并非每一次启动都需要访问TAS以生成相应证书,而是通过证书的本地化存储,即读取QCA侧 `config.yaml` 中配置的证书路径,通过 `func hasAKCert(s int) bool` 函数检查是否已有TAS签发的证书保存于本地,若成功读取证书,则无需访问TAS,若读取证书失败,则需要访问TAS,并将TAS返回的证书保存于本地。 + +### 接口定义 + +#### RAS接口 + +为了便于管理员对目标服务器、RAS以及目标服务器上部署的TEE中的用户 TA 进行管理,本程序设计了以下接口可供调用: + +| 接口 | 方法 | +| --------------------------------- | --------------------------- | +| / | GET | +| /{id} | GET、POST、DELETE | +| /{from}/{to} | GET | +| /{id}/reports | GET | +| /{id}/reports/{reportid} | GET、DELETE | +| /{id}/basevalues | GET | +| /{id}/newbasevalue | POST | +| /{id}/basevalues/{basevalueid} | GET、POST、DELETE | +| /{id}/ta/{tauuid}/status | GET | +| /{id}/ta/{tauuid}/tabasevalues | GET | +| /{id}/ta/{tauuid}/tabasevalues/{tabasevalueid} | GET、POST、DELETE | +| /{id}/ta/{tauuid}/newtabasevalue | POST | +| /{id}/ta/{tauuid}/tareports | GET | +| /{id}/ta/{tauuid}/tareports/{tareportid} | GET、POST、DELETE | +| /{id}/basevalues/{basevalueid} | GET、DELETE | +| /version | GET | +| /config | GET、POST | +| /{id}/container/status | GET | +| /{id}/device/status | GET | + +上述接口的具体用法分别介绍如下。 + +若需要查询所有服务器的信息,可以使用`"/"`接口。 + +```shell +$ curl -X GET -H "Content-Type: application/json" http://localhost:40002/ +``` + +*** +若需要查询目标服务器的详细信息,可以使用`"/{id}"`接口的`GET`方法,其中{id}是RAS为目标服务器分配的唯一标识号。 + +```shell +$ curl -X GET -H "Content-Type: application/json" http://localhost:40002/1 +``` + +*** +若需要修改目标服务器的信息,可以使用`"/{id}"`接口的`POST`方法,其中$AUTHTOKEN是事先使用`ras -T`自动生成的身份验证码。 + +```go +type clientInfo struct { + Registered *bool `json:"registered"` // 目标服务器注册状态 + IsAutoUpdate *bool `json:"isautoupdate"`// 目标服务器基准值更新策略 +} +``` + +```shell +$ curl -X POST -H "Authorization: $AUTHTOKEN" -H "Content-Type: application/json" http://localhost:40002/1 -d '{"registered":false, "isautoupdate":false}' +``` + +*** +若需要删除目标服务器,可以使用`"/{id}"`接口的`DELETE`方法。 +>**注意:** +>使用该方法并非删除目标服务器的所有信息,而是把目标服务器的注册状态置为`false`! + +```shell +$ curl -X DELETE -H "Authorization: $AUTHTOKEN" -H "Content-Type: application/json" http://localhost:40002/1 +``` + +*** +若需要查询指定范围内的所有服务器信息,可以使用`"/{from}/{to}"`接口的`GET`方法。 + +```shell +$ curl -X GET -H "Content-Type: application/json" http://localhost:40002/1/9 +``` + +*** +若需要查询目标服务器的所有可信报告,可以使用`"/{id}/reports"`接口的`GET`方法。 + +```shell +$ curl -X GET -H "Content-Type: application/json" http://localhost:40002/1/reports +``` + +*** +若需要查询目标服务器指定可信报告的详细信息,可以使用`"/{id}/reports/{reportid}"`接口的`GET`方法,其中{reportid}是RAS为目标服务器指定可信报告分配的唯一标识号。 + +```shell +$ curl -X GET -H "Content-Type: application/json" http://localhost:40002/1/reports/1 +``` + +*** +若需要删除目标服务器指定可信报告,可以使用`"/{id}/reports/{reportid}"`接口的`DELETE`方法。 +**注意:** +>使用该方法将删除指定可信报告的所有信息,将无法再通过接口对该报告进行查询! + +```shell +$ curl -X DELETE -H "Authorization: $AUTHTOKEN" -H "Content-Type: application/json" http://localhost:40002/1/reports/1 +``` + +*** +若需要查询目标服务器的所有基准值,可以使用`"/{id}/basevalues"`接口的`GET`方法。 + +```shell +$ curl -X GET -H "Content-Type: application/json" http://localhost:40002/1/basevalues +``` + +*** +若需要给目标服务器新增一条基准值信息,可以使用`"/{id}/newbasevalue"`接口的`POST`方法。 + +```go +type baseValueJson struct { + BaseType string `json:"basetype"` // 基准值类型 + Uuid string `json:"uuid"` // 容器或设备的标识号 + Name string `json:"name"` // 基准值名称 + Enabled bool `json:"enabled"` // 基准值是否可用 + Pcr string `json:"pcr"` // PCR值 + Bios string `json:"bios"` // BIOS值 + Ima string `json:"ima"` // IMA值 + IsNewGroup bool `json:"isnewgroup"` // 是否为一组新的基准值 +} +``` + +```shell +$ curl -X POST -H "Authorization: $AUTHTOKEN" -H "Content-Type: application/json" http://localhost:40002/1/newbasevalue -d '{"name":"test", "basetype":"host", "enabled":true, "pcr":"testpcr", "bios":"testbios", "ima":"testima", "isnewgroup":true}' +``` + +*** +若需要查询目标服务器指定基准值的详细信息,可以使用`"/{id}/basevalues/{basevalueid}"`接口的`GET`方法,其中{basevalueid}是RAS为目标服务器指定基准值分配的唯一标识号。 + +```shell +$ curl -X GET -H "Content-Type: application/json" http://localhost:40002/1/basevalues/1 +``` + +*** +若需要修改目标服务器指定基准值的可用状态,可以使用`"/{id}/basevalues/{basevalueid}"`接口的`POST`方法。 + +```shell +$ curl -X POST -H "Content-type: application/json" -H "Authorization: $AUTHTOKEN" http://localhost:40002/1/basevalues/1 -d '{"enabled":true}' +``` + +*** +若需要删除目标服务器指定基准值,可以使用`"/{id}/basevalues/{basevalueid}"`接口的`DELETE`方法。 +**注意:** +>使用该方法将删除指定基准值的所有信息,将无法再通过接口对该基准值进行查询! + +```shell +$ curl -X DELETE -H "Authorization: $AUTHTOKEN" -H "Content-Type: application/json" http://localhost:40002/1/basevalues/1 +``` + +*** +若需要查询目标服务器上特定用户 TA 的可信状态,可以使用`"/{id}/ta/{tauuid}/status"`接口的GET方法。其中{id}是RAS为目标服务器分配的唯一标识号,{tauuid}是特定用户 TA 的身份标识号。 + +```shell +$ curl -X GET -H "Content-type: application/json" -H "Authorization: $AUTHTOKEN" http://localhost:40002/1/ta/test/status +``` + +*** +若需要查询目标服务器上特定用户 TA 的所有基准值信息,可以使用`"/{id}/ta/{tauuid}/tabasevalues"`接口的GET方法。 + +```shell +$ curl -X GET -H "Content-type: application/json" http://localhost:40002/1/ta/test/tabasevalues +``` + +*** +若需要查询目标服务器上特定用户 TA 的指定基准值的详细信息,可以使用`"/{id}/ta/{tauuid}/tabasevalues/{tabasevalueid}"`接口的GET方法。其中{tabasevalueid}是RAS为目标服务器上特定用户 TA 的指定基准值分配的唯一标识号。 + +```shell +$ curl -X GET -H "Content-type: application/json" http://localhost:40002/1/ta/test/tabasevalues/1 +``` + +*** +若需要修改目标服务器上特定用户 TA 的指定基准值的可用状态,可以使用`"/{id}/ta/{tauuid}/tabasevalues/{tabasevalueid}"`接口的`POST`方法。 + +```shell +$ curl -X POST -H "Content-type: application/json" -H "Authorization: $AUTHTOKEN" http://localhost:40002/1/ta/test/tabasevalues/1 --data '{"enabled":true}' +``` + +*** +若需要删除目标服务器上特定用户 TA 的指定基准值,可以使用`"/{id}/ta/{tauuid}/tabasevalues/{tabasevalueid}"`接口的`DELETE`方法。 +**注意:** +>使用该方法将删除指定基准值的所有信息,将无法再通过接口对该基准值进行查询! + +```shell +$ curl -X DELETE -H "Content-type: application/json" -H "Authorization: $AUTHTOKEN" -k http://localhost:40002/1/ta/test/tabasevalues/1 +``` + +*** +若需要给目标服务器上特定用户 TA 新增一条基准值信息,可以使用`"/{id}/ta/{tauuid}/newtabasevalue"`接口的`POST`方法。 + +```go +type tabaseValueJson struct { + Uuid string `json:"uuid"` // 用户 TA 的标识号 + Name string `json:"name"` // 基准值名称 + Enabled bool `json:"enabled"` // 基准值是否可用 + Valueinfo string `json:"valueinfo"` // 镜像哈希值和内存哈希值 +} +``` + +```shell +$ curl -X POST -H "Content-Type: application/json" -H "Authorization: $AUTHTOKEN" -k http://localhost:40002/1/ta/test/newtabasevalue -d '{"uuid":"test", "name":"testname", "enabled":true, "valueinfo":"test info"}' +``` + +*** +若需要查询目标服务器上特定用户 TA 的所有可信报告,可以使用`"/{id}/ta/{tauuid}/tareports"`接口的`GET`方法。 + +```shell +$ curl -X GET -H "Content-type: application/json" http://localhost:40002/1/ta/test/tareports +``` + +*** +若需要查询目标服务器上特定用户 TA 的指定可信报告的详细信息,可以使用`"/{id}/ta/{tauuid}/tareports/{tareportid}"`接口的`GET`方法,其中{tareportid}是RAS为目标服务器上特定用户 TA 的指定可信报告分配的唯一标识号。 + +```shell +$ curl -X GET -H "Content-type: application/json" http://localhost:40002/1/ta/test/tareports/2 +``` + +*** +若需要删除目标服务器上特定用户 TA 的指定可信报告,可以使用`"/{id}/ta/{tauuid}/tareports/{tareportid}"`接口的`DELETE`方法。 +**注意:** +>使用该方法将删除指定可信报告的所有信息,将无法再通过接口对该报告进行查询! + +```shell +$ curl -X DELETE -H "Content-type: application/json" http://localhost:40002/1/ta/test/tareports/2 +``` + +*** +若需要获取本程序的版本信息,可以使用`"/version"`接口的`GET`方法。 + +```shell +$ curl -X GET -H "Content-Type: application/json" http://localhost:40002/version +``` + +*** +若需要查询目标服务器/RAS/数据库的配置信息,可以使用`"/config"`接口的`GET`方法。 + +```shell +$ curl -X GET -H "Content-Type: application/json" http://localhost:40002/config +``` + +*** +若需要修改目标服务器/RAS/数据库的配置信息,可以使用`"/config"`接口的`POST`方法。 + +```go +type cfgRecord struct { + // 目标服务器配置 + HBDuration string `json:"hbduration" form:"hbduration"` + TrustDuration string `json:"trustduration" form:"trustduration"` + DigestAlgorithm string `json:"digestalgorithm" form:"digestalgorithm"` + // RAS配置 + MgrStrategy string `json:"mgrstrategy" form:"mgrstrategy"` + ExtractRules string `json:"extractrules" form:"extractrules"` + IsAllupdate *bool `json:"isallupdate" form:"isallupdate"` + LogTestMode *bool `json:"logtestmode" form:"logtestmode"` +} +``` + +```shell +$ curl -X POST -H "Authorization: $AUTHTOKEN" -H "Content-Type: application/json" http://localhost:40002/config -d '{"hbduration":"5s","trustduration":"20s","DigestAlgorithm":"sha256"}' +``` + +#### TAS接口 + +为了便于管理员对TAS服务的远程控制,本程序设计了以下接口可供调用: + +| 接口 | 方法 | +| --------------------| ------------------| +| /config | GET、POST | + +若需要查询TAS的配置信息,可使用`"/config"`接口的`GET`方法: + +```shell +$ curl -X GET -H "Content-Type: application/json" http://localhost:40009/config +``` + +*** +若需要修改TAS的配置信息,可使用`"/config"`接口的`POST`方法: + +```shell +curl -X POST -H "Content-Type: application/json" -H "Authorization: $AUTHTOKEN" http://localhost:40009/config -d '{"basevalue":"testvalue"}' +``` + +**注意:** +>TAS的配置信息读取与修改目前仅支持基准值 + +### FAQ + +1. RAS安装后,为什么无法启动? + + >因为在当前RAS的设计逻辑中,程序启动后需要从当前目录查找一份名为 `ecdsakey.pub` 的文件进行读取并作为之后访问该程序的身份验证码,若当前目录没有该文件,则RAS启动会报错。 + >>解决方法一:运行 `ras -T` 生成测试用token后会生成 `ecdsakey.pub` 。 + >>解决方法二:自行部署oauth2认证服务后,将对应JWT token生成方对应的验证公钥保存为 `ecdsakey.pub` 。 + +2. 为什么RAS启动后,通过restapi无法访问? + + >因为RAS默认以https模式启动,您需要向RAS提供合法的证书才能正常访问,而http模式下启动的RAS则不需要提供证书。 + +3. 为什么RAS/ATTESTER启动后,会出现 “WARNING: failed to verify x509 cert” 的问题? + + >因为缺少CA证书。 + > + >>解决方法:将位于 `$(DESTDIR)/usr/bin` 目录下的华为IT产品证书 `Huawei IT Product CA.pem` 复制到RAS/ATTESTER的运行目录下。 + +## 可信平台控制模块(TPCM) + +### 背景 + +可信计算在近40年的研究过程中,经历了不断的发展和完善,已经成为信息安全的一个重要分支。中国的可信计算技术近年发展迅猛,在可信计算2.0的基础上解决了可信体系与现有体系的融合问题、可信管理问题以及可信开发的简化问题,形成了基于主动免疫体系的可信计算技术--可信计算3.0。相对于可信计算2.0被动调用的外挂式体系结构,可信计算3.0提出了以自主密码为基础、控制芯片为支柱、双融主板为平台、可信软件为核心、可信连接为纽带、策略管控成体系、安全可信保应用的全新的可信体系框架,在网络层面解决可信问题。 + +可信平台控制模块(Trusted Platform Control Module,TPCM)是一种可集成在可信计算平台中,用于建立和保障信任源点的基础核心模块。它作为中国可信计算3.0中的创新点之一和主动免疫机制的核心,实现了对整个平台的主动可控。 + +TPCM可信计算3.0架构为双体系架构,分为防护部件和计算部件,以可信密码模块为基础,通过可信平台控制模块对防护部件和计算部件及组件的固件进行可信度量,可信软件基(Trusted Software Base,TSB)对系统软件及应用软件进行可信度量,同时TPCM管理平台实现对可信度量的验证及可信策略同步和管理。 + +### 功能描述 + +如下图所示,整体系统方案由防护部件、计算部件和可信管理中心三部分组成。 + +![](./figures/TPCM.png) + +- 可信管理中心:对可信计算节点的防护策略和基准值进行制定、下发、维护、存储等操作的集中管理平台,可信管理中心由第三方厂商提供。 +- 防护部件:独立于计算部件执行,为可信计算平台提供具有主动度量和主动控制特征的可信计算防护功能,实现运算的同时进行安全防护。防护部件包括可信平台控制模块、可信软件基,以及可信密码模块(Trusted Cryptography Module,TCM)。TPCM是可信计算节点中实现可信防护功能的关键部件,可以采用多种技术途径实现,如板卡、芯片、IP核等,其内部包含中央处理器、存储器等硬件,固件,以及操作系统与可信功能组件等软件,支撑其作为一个独立于计算部件的防护部件组件,并行于计算部件按内置防护策略工作,对计算部件的硬件、固件及软件等需防护的资源进行可信监控,是可信计算节点中的可信根。 + +- 计算部件:主要包括硬件、操作系统和应用层软件。其中操作系统分为引导阶段和运行阶段,在引导阶段openEuler的shim和grub2支持可信度量能力,可实现对shim、grub2以及操作系统内核、initramfs等启动文件的可信度量防护;在运行阶段,openEuler操作系统支持部署可信验证要素代理(由第三方厂商可信华泰提供),它负责将数据发送给TPCM模块,用以实现运行阶段的可信度量防护。 + +其中,TPCM作为可信计算节点中实现可信防护功能的关键部件,需要与TSB、TCM、可信管理中心和可信计算节点的计算部件交互,交互方式如下: + +1. TPCM的硬件、固件与软件为TSB提供运行环境,设置的可信功能组件为TSB按策略库解释要求实现度量、控制、支撑与决策等功能提供支持。 +2. TPCM通过访问TCM获取可信密码功能,完成对防护对象可信验证、度量和保密存储等计算任务,并提供TCM服务部件以支持对TCM的访问。 +3. TPCM通过管理接口连接可信管理中心,实现防护策略管理、可信报告处理等功能。 +4. TPCM通过内置的控制器和I/O端口,经由总线与计算部件的控制器交互,实现对计算部件的主动监控。 +5. 计算部件操作系统中内置的防护代理获取预设的防护对象有关代码和数据提供给TPCM,TPCM将监控信息转发给TSB,由TSB依据策略库进行分析处理。 + +### 约束限制 + +适配服务器:TaiShan 200(型号2280)VF +适配BMC插卡型号:BC83SMMC + +### 应用场景 + +通过TPCM特性构成一个完整的信任链,保障系统启动以后进入一个可信的计算环境。