diff --git "a/archive/Pin/\346\217\222\344\273\266\346\241\206\346\236\266\347\211\271\346\200\247\347\224\250\346\210\267\346\214\207\345\215\227.md" "b/archive/Pin/\346\217\222\344\273\266\346\241\206\346\236\266\347\211\271\346\200\247\347\224\250\346\210\267\346\214\207\345\215\227.md" index 3394781f970b14b058e8bde08751d7a77d9f16c9..9ee8066e59313e2b7618230ed12031328d8ffc0e 100644 --- "a/archive/Pin/\346\217\222\344\273\266\346\241\206\346\236\266\347\211\271\346\200\247\347\224\250\346\210\267\346\214\207\345\215\227.md" +++ "b/archive/Pin/\346\217\222\344\273\266\346\241\206\346\236\266\347\211\271\346\200\247\347\224\250\346\210\267\346\214\207\345\215\227.md" @@ -5,7 +5,11 @@ * x86_64架构 * ARM架构 ## 环境准备 +<<<<<<<< HEAD:archive/Pin/插件框架特性用户指南.md * 安装openEuler系统,安装方法参考 《[安装指南](../Installation/installation.md)》。 +======== +* 安装openEuler系统,安装方法参考 《[安装指南](../../../server/installation_upgrade/installation/installation_on_servers.md)》。 +>>>>>>>> 6b124a04c (文档整改):docs/zh/docs/tools/community_tools/pin/pin_user_guide.md ### 安装依赖软件 #### 安装插件框架GCC客户端依赖软件 ```shell diff --git a/archive/desktop/ha_installation_and_deployment.md b/archive/desktop/ha_installation_and_deployment.md new file mode 100644 index 0000000000000000000000000000000000000000..8b1e3fe7d50dce8d013e8c32f4b6ccad0d1c6f20 --- /dev/null +++ b/archive/desktop/ha_installation_and_deployment.md @@ -0,0 +1,201 @@ +# HA的安装与部署 + +本文介绍如何安装和部署HA高可用集群。 + +## 安装与部署 + +### 环境准备 + +需要至少两台安装了openEuler 24.03 的物理机/虚拟机(现以两台为例),安装方法参考《[安装指南](../../../server/installation_upgrade/installation/installation_on_servers.md)》。 + +### 修改主机名称及/etc/hosts文件 + +**注**:两台主机均需要进行以下操作,现以其中一台为例,下文中使用的IP仅供参考。** + +在使用HA软件之前,需要确认修改主机名并将所有主机名写入/etc/hosts文件中。 + +1. 修改主机名 + + ```sh + # hostnamectl set-hostname ha1 + ``` + +2. 编辑`/etc/hosts`文件并写入以下字段 + + ```text + 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-{version}/OS/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-{version}/OS/$basearch/RPM-GPG-KEY-openEuler + +[everything] +name=everything +baseurl=http://repo.openeuler.org/openEuler-{version}/everything/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-{version}/everything/$basearch/RPM-GPG-KEY-openEuler + +[EPOL] +name=EPOL +baseurl=http://repo.openeuler.org/openEuler-{version}/EPOL/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-{version}/OS/$basearch/RPM-GPG-KEY-openEuler +``` + +### 安装HA软件包组件 + +```sh +# yum install -y corosync pacemaker pcs fence-agents fence-virt corosync-qdevice sbd drbd drbd-utils +``` + +### 设置hacluster用户密码 + +```sh +# 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 + } + } +``` + +### 管理服务 + +#### 关闭防火墙 + +1. 执行如下命令,关闭防火墙。 + + ```sh + # systemctl stop firewalld + ``` + +2. 修改`/etc/selinux/config`文件中SELINUX状态为disabled。 + + ```sh + # SELINUX=disabled + ``` + +#### 管理pcs服务 + +1. 启动pcs服务: + + ```sh + # systemctl start pcsd + ``` + +2. 查询pcs服务状态: + + ```sh + # systemctl status pcsd + ``` + + 若回显为如下,则服务启动成功。 + + ![](./figures/HA-pcs.png) + +#### 管理pacemaker服务 + +1. 启动pacemaker服务: + + ```sh + # systemctl start pacemaker + ``` + +2. 查询pacemaker服务状态: + + ```sh + # systemctl status pacemaker + ``` + + 若回显为如下,则服务启动成功。 + + ![](./figures/HA-pacemaker.png) + +#### 管理corosync服务 + +1. 启动corosync服务: + + ```sh + # systemctl start corosync + ``` + +2. 查询corosync服务状态: + + ```sh + # systemctl status corosync + ``` + + 若回显为如下,则服务启动成功。 + + ![](./figures/HA-corosync.png) + +### 节点鉴权 + +注:**任选一个节点上执行即可** + +```sh +# pcs host auth ha1 ha2 +``` + +### 访问前端管理平台 + +上述服务启动成功后,打开浏览器(建议使用:Chrome,Firefox),在浏览器导航栏中输入`https://localhost:2224`即可。 + +- 以下界面为原生管理平台 + +![](./figures/HA-login.png) + +若安装社区新开发的管理平台请参考文档[https://gitee.com/openeuler/ha-api/blob/master/docs/build.md](https://gitee.com/openeuler/ha-api/blob/master/docs/build.md) + +- 以下为社区新开发的管理平台 + +![](./figures/HA-api.png) + +想了解如何快速使用HA高可用集群,以及添加一个实例。请参考[HA的使用实例文档](./ha_usecase_examples.md)。 diff --git a/archive/desktop/ha_usecase_examples.md b/archive/desktop/ha_usecase_examples.md new file mode 100644 index 0000000000000000000000000000000000000000..8fff8af0b4e2594ae1e95ebb4052fce4491712d8 --- /dev/null +++ b/archive/desktop/ha_usecase_examples.md @@ -0,0 +1,248 @@ +# HA使用实例 + +本章介绍如何快速使用HA高可用集群,以及添加一个实例。若不了解怎么安装,请参考[HA的安装与部署文档](./ha_installation_and_deployment.md)。 + +## 快速使用指南 + +以下操作均以社区新开发的管理平台为例。 + +### 登录页面 + +用户名为`hacluster`,密码为该用户在主机上设置的密码。 + +![](./figures/HA-api.png) + +### 主页面 + +登录系统后显示主页面,主页面由四部分组成:侧边导航栏、顶部操作区、资源节点列表区以及节点操作浮动区。 + +以下将详细介绍这四部分的特点与使用方法。 + +![](./figures/HA-home-page.png) + +#### 导航栏 + +侧边导航栏由两部分组成:高可用集群软件名称和 logo 以及系统导航。系统导航由三项组成:【系统】、【集群配置】和【工具】。【系统】是默认选项,也是主页面的对应项,主要展示系统中所有资源的相关信息以及操作入口;【集群配置】下设【首选项配置】和【心跳配置】两项;【工具】下设【日志下载】和【集群快捷操作】两项,点击后以弹出框的形式出现。 + +#### 顶部操作区 + +登录用户是静态显示,鼠标滑过用户图标,出现操作菜单项,包括【刷新设置】和【退出登录】两项,点击【刷新设置】,弹出【刷新设置】对话框,包含【刷新设置】选项,可以设置系统的自动刷新模式,包括【不自动刷新】、【每 5 秒刷新】和【每 10 秒刷新】三种选择,默认选择【不自动刷新】、【退出登录】即可注销本次登录,系统将自动跳到登录页面,此时,如果希望继续访问系统,则需要重新进行登录。 + +![](./figures/HA-refresh.png) + +#### 资源节点列表区 + +资源节点列表集中展现系统中所有资源的【资源名】、【状态】、【资源类型】、【服务】、【运行节点】等资源信息,以及系统中所有的节点和节点的运行情况等节点信息。同时提供资源的【添加】、【编辑】、【启动】、【停止】、【清理】、【迁移】、【回迁】、【删除】和【关系】操作。 + +#### 节点操作浮动区 + +节点操作浮动区域默认是收起的状态,每当点击资源节点列表表头中的节点时,右侧会弹出节点操作扩展区域,如图所示,该区域由收起按钮、节点名称、停止和备用四个部分组成,提供节点的【停止】和【备用】操作。点击区域左上角的箭头,该区域收起。 + +### 首选项配置 + +以下操作均可用命令行配置,现只做简单示例,若想使用更多命令可以使用``pcs --help``进行查询。 + +- 命令行方式 + + ```sh + # pcs property set stonith-enabled=false + # pcs property set no-quorum-policy=ignore + ``` + + 执行如下命令,可以查看全部配置。 + + ```sh + # pcs property + ``` + + ![](./figures/HA-firstchoice-cmd.png) + +- 图形界面方式 + 点击侧边导航栏中的【首选项配置】按钮,弹出【首选项配置】对话框。将No Quorum Policy和Stonith Enabled由默认状态改为如下对应状态;修改完成后,点击【确定】按钮完成配置。 + + ![](./figures/HA-firstchoice.png) + +### 添加资源 + +#### 添加普通资源 + +1. 点击【添加普通资源】,弹出【创建资源】对话框。 + 其中资源的所有必填配置项均在【基本】页面内,选择【基本】页面内的【资源类型】后会进一步给出该类资源的其他必填配置项以及选填配置项。 + +2. 填写资源配置信息。 + 对话框右侧会出现灰色文字区域,对当前的配置项进行解释说明。全部必填项配置完毕后,点击【确定】按钮即可创建普通资源,点击【取消】按钮,取消本次添加动作。 + 【实例属性】、【元属性】或者【操作属性】页面中的选填配置项为选填项,不配置不会影响资源的创建过程,可以根据场景需要可选择修改,否则将按照系统缺省值处理。 + +下面以Apache为例,分别以命令行方式和图形界面方式介绍添加资源的方法。 + +- 命令行方式 + + ```sh + # pcs resource create httpd ocf:heartbeat:apache + ``` + + 查看资源运行状态 + + ```sh + # pcs status + ``` + + ![](./figures/HA-pcs-status.png) + +- 图形界面方式 + +1. 填写资源名称和资源类型,如下图所示。 + + ![](./figures/HA-add-resource.png) + +2. 回显为如下,则资源添加成功并启动,运行于其中一个节点上,例如ha1。 + + ![](./figures/HA-apache-suc.png) +3. 访问apache界面成功。 + + ![](./figures/HA-apache-show.png) + +#### 添加组资源 + +>**须知:** +> 添加组资源时,集群中需要至少存在一个普通资源。 + +1. 点击【添加组资源】,弹出【创建资源】对话框。 + 【基本】页面内均为必填项,填写完毕后,点击【确定】按钮,即可完成资源的添加,点击【取消】按钮,取消本次添加动作。 + + ![](./figures/HA-group.png) + + > **注意:** + > 组资源的启动是按照子资源的顺序启动的,所以选择子资源时需要注意按照顺序选择。 + +2. 回显如下,资源添加成功。 + + ![](./figures/HA-group-suc.png) + +#### 添加克隆资源 + +1. 点击【添加克隆资源】,弹出【创建资源】对话框。 + 【基本】页面内填写克隆对象,资源名称会自动生成,填写完毕后,点击【确定】按钮,即可完成资源的添加,点击【取消】按钮,取消本次添加动作。 + + ![](./figures/HA-clone.png) + +2. 回显如下,资源添加成功。 + + ![](./figures/HA-clone-suc.png) + +### 编辑资源 + +- 启动资源:资源节点列表中选中一个目标资源,要求:该资源处于非运行状态。对该资源执行启动动作。 +- 停止资源:资源节点列表中选中一个目标资源,要求:该资源处于运行状态。对该资源执行停止操作。 +- 清理资源:资源节点列表中选中一个目标资源,对该资源执行清理操作。 +- 迁移资源:资源节点列表中选中一个目标资源,要求:该资源为处于运行状态的普通资源或者组资源,执行迁移操作可以将资源迁移到指定节点上运行。 +- 回迁资源:资源节点列表中选中一个目标资源,要求:该资源已经完成迁移动作,执行回迁操作,可以清除该资源的迁移设置,资源重新迁回到原来的节点上运行。(点击按钮后,列表中该资源项的变化状态与启动资源时一致。) +- 删除资源:资源节点列表中选中一个目标资源,对该资源执行删除操作。 + +### 设置资源关系 + +资源关系即为目标资源设定限制条件,资源的限制条件分为三种:资源位置、资源协同和资源顺序。 + +- 资源位置:设置集群中的节点对于该资源的运行级别,由此确定启动或者切换时资源在哪个节点上运行,运行级别按照从高到低的顺序依次为:Master Node、Slave 1。 +- 资源协同:设置目标资源与集群中的其他资源是否运行在同一节点上,同节点资源表示该资源与目标资源必须运行在相同节点上,互斥节点资源表示该资源与目标资源不能运行在相同的节点上。 +- 资源顺序:设置目标资源与集群中的其他资源启动时的先后顺序,前置资源是指目标资源运行之前,该资源必须已经运行;后置资源是指目标资源运行之后,该资源才能运行。 + +## 高可用mysql实例配置 + +### 配置虚拟IP + +1. 在首页中点击“添加”,再选择添加普通资源,并按如下进行配置。 + + ![](./figures/HA-vip.png) + +2. 资源创建成功并启动,运行于其中一个节点上,例如ha1。 +3. 可以ping通并连接,登录后可正常执行各种操作;资源切换到ha2运行;能够正常访问。如下图所示。 + ![](./figures/HA-vip-suc.png) + +### 配置NFS存储 + +另找一台机器作为nfs服务端进行配置,操作步骤如下: + +1. 安装软件包 + + ```sh + # yum install -y nfs-utils rpcbind + ``` + +2. 关闭防火墙 + + ```sh + # systemctl stop firewalld && systemctl disable firewalld + ``` + +3. 修改/etc/selinux/config文件中SELINUX状态为disabled + + ```Conf + SELINUX=disabled + ``` + +4. 启动服务 + + ```sh + # systemctl start rpcbind && systemctl enable rpcbind + # systemctl start nfs-server && systemctl enable nfs-server + ``` + +5. 服务端创建一个共享目录 + + ```sh + # mkdir -p /test + ``` + +6. 修改NFS配置文件 + + ```sh + # vim /etc/exports + # /test *(rw,no_root_squash) + ``` + +7. 重新加载服务 + + ```sh + # systemctl reload nfs + ``` + +8. 客户端安装软件包,需要先安装mysql,可以将nfs挂载到mysql数据路径。 + + ```sh + # yum install -y nfs-utils mariadb-server + ``` + +9. 在首页中依次点击“添加”,“添加普通资源”,并按如下进行配置NFS资源。 + + ![](./figures/HA-nfs.png) + +10. 资源创建成功并启动,运行于其中一个节点上,例如ha1;nfs成功挂载到`/var/lib/mysql`路径下。资源切换到ha2运行;nfs从ha1节点取消挂载,并自动在ha2节点上挂载成功。如下图所示。 + + ![](./figures/HA-nfs-suc.png) + +### 配置mysql + +1. 在首页中依次点击“添加”,“添加普通资源”,并按如下进行配置mysql资源。 + + ![](./figures/HA-mariadb.png) + +2. 若回显为如下,则资源添加成功。 + + ![](./figures/HA-mariadb-suc.png) + +### 添加上述资源为组资源 + +1. 按资源启动顺序添加三个资源 + + 在首页中依次点击“添加”,“添加组资源”,并按如下进行配置组资源。 + + ![](./figures/HA-group-new.png) + +2. 组资源创建成功并启动,若回显与上述三个普通资源成功现象一致,则资源添加成功。 + + ![](./figures/HA-group-new-suc.png) + +3. 将ha1节点备用,成功迁移到ha2节点,运行正常。 + + ![](./figures/HA-group-new-suc2.png) diff --git a/archive/thirdparty_migration/installha.md b/archive/thirdparty_migration/installha.md index a19ee867adeb9492fe448bfb038b26593800a733..8b1e3fe7d50dce8d013e8c32f4b6ccad0d1c6f20 100644 --- a/archive/thirdparty_migration/installha.md +++ b/archive/thirdparty_migration/installha.md @@ -6,7 +6,7 @@ ### 环境准备 -需要至少两台安装了openEuler 24.03 的物理机/虚拟机(现以两台为例),安装方法参考《[安装指南](../Installation/installation.md)》。 +需要至少两台安装了openEuler 24.03 的物理机/虚拟机(现以两台为例),安装方法参考《[安装指南](../../../server/installation_upgrade/installation/installation_on_servers.md)》。 ### 修改主机名称及/etc/hosts文件 @@ -198,4 +198,4 @@ nodelist { ![](./figures/HA-api.png) -想了解如何快速使用HA高可用集群,以及添加一个实例。请参考[HA的使用实例文档](./HA的使用实例.md)。 +想了解如何快速使用HA高可用集群,以及添加一个实例。请参考[HA的使用实例文档](./ha_usecase_examples.md)。 diff --git a/archive/thirdparty_migration/usecase.md b/archive/thirdparty_migration/usecase.md index 36ad334e99d47d8976203a0bba72e2e1b2f704fa..8fff8af0b4e2594ae1e95ebb4052fce4491712d8 100644 --- a/archive/thirdparty_migration/usecase.md +++ b/archive/thirdparty_migration/usecase.md @@ -1,6 +1,6 @@ # HA使用实例 -本章介绍如何快速使用HA高可用集群,以及添加一个实例。若不了解怎么安装,请参考[HA的安装与部署文档](./HA的安装与部署.md)。 +本章介绍如何快速使用HA高可用集群,以及添加一个实例。若不了解怎么安装,请参考[HA的安装与部署文档](./ha_installation_and_deployment.md)。 ## 快速使用指南 diff --git a/docs/zh/devstation/oedeploy/_toc.yaml b/docs/zh/devstation/oedeploy/_toc.yaml index 18344b95f6eb72382173fe76b391a8fa49a7a002..5cad26fb1d7040d1abd694997ab2cc92b89f1c41 100644 --- a/docs/zh/devstation/oedeploy/_toc.yaml +++ b/docs/zh/devstation/oedeploy/_toc.yaml @@ -3,4 +3,4 @@ isManual: true description: oeDeploy作为应用快速安装部署平台。 sections: - label: oeDeploy用户指南 - href: ./oedeploy_userguide.md + href: ./oedeploy_user_guide.md diff --git a/docs/zh/devstation/oedeploy/oedeploy_user_guide.md b/docs/zh/devstation/oedeploy/oedeploy_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..261d8a4087771742fcbc9bcb2adb65d4262e829e --- /dev/null +++ b/docs/zh/devstation/oedeploy/oedeploy_user_guide.md @@ -0,0 +1,243 @@ +# oeDeploy 用户指南 + +## 1 工具介绍 + +### 1.1 oeDeploy简介 + +oeDeploy(简称oedp)作为应用快速安装部署平台,将提供如下能力: + +1. 插件库:实现应用快速安装的基础,应用提供部署的基本能力就可按照基本规范进行oedp 插件化改造,oedp本身对插件的能力进行解析和调度执行 +2. 应用碎片化部署能力自动ansible化改造:针对不具备自动化安装的应用,指定安装步骤进行配置,oedp工具解析,自动转换成ansible playbook配置 +3. 应用一键安装能力集成:支持具备一键脚本安装部署/ansible自动化安装部署的快速插件集成 +4. 分发能力:oedp支持应用部署在对应host上的的一键分发 +5. ansible集成: 目前oedp的一些基础能力基于ansible进行改造 + +### 1.2 工具组成 + +oedp工具由以下三部分组成: + ++ oedp Web UI:**(待实现)** Web UI 旨在简化用户操作流程,降低用户(尤其是初学者)的学习成本,快速、高效地使用 oedp 工具。Web UI 基于命令行工具,通过将用户的配置转化为对应的命令行来完成部署任务。 ++ oedp 命令行工具:命令行工具本身不直接提供实际部署功能,而是作为一个集成、分发的平台,调起插件的部署功能,并向用户或UI进行反馈。对于高阶使用者,可以使用命令行工具来直接完成部署任务,相较于使用 Web UI,能够实现更加定制化的操作。 ++ oedp 插件:插件用于提供原子化的自动化部署能力,并提供操作接口,分别实现不同的部署操作,例如安装、卸载、环境清理等。 + +### 1.3 获取与安装 + +用户可以自主获取 oedp 工具,支持x86_64和aarch64架构。 + +获取 oedp 工具后,使用 yum/dnf 进行安装:`yum install -y oedp-xxx.rpm`。 + +### 1.4 命令列表 + ++ `oedp init `:初始化一个插件 + + `-p|--project `:必须,指定初始化路径 + + `-l|--local `:可选,指定一个路径为本地源 + + `-f|--force`:可选,强制覆盖路径,如果路径存在,会先删除其中的所有文件再初始化 ++ `oedp list`:列举有哪些可用的插件 + + `-l|--local `:可选,指定一个路径为本地源 ++ `oedp info`:查看一个项目的详细信息 + + `-p|--project `:可选,指定一个项目,如果没有指定就使用当前路径 ++ `oedp run `:执行一个项目的方法 + + ``:插件可使用的方法名称,可通过`oedp info`命令查询获得 + + `-p|--project `:可选,指定一个项目,如果没有指定就使用当前路径 ++ `oedp check`:**(待实现)** 检查一个项目 + + `-p|--project `:可选,指定一个项目,如果没有指定就使用当前路径 + +### 1.5 工具文件路径 + ++ `/var/oedp/log/`:日志文件路径 ++ `/var/oedp/plugin/`:插件缓存路径 ++ `/usr/lib/oedp/src/`:源码路径 ++ `/etc/oedp/config`:配置文件路径 + +## 2 用户部署指南 + +下面以自动化部署kubernetes-1.31.1为例,讲解部署流程: + +### 2.1 获取部署插件 + +**以下功能暂未实现:** + +~~执行`install`命令以获取插件并初始化一个项目到家目录:~~ + +```shell +oedp init kubernetes-1.31.1 -p . +``` + +**当前暂时采用以下方案:** + +手动获取插件包`kubernetes-1.31.1.tar.gz`。 + +将获取的插件包解压在当前目录下,确保当前目录下出现了目录`kubernetes-1.31.1/`。 + +### 2.2 查看插件详细信息 + +执行`info`命令以查看插件详细信息: + +```shell +oedp info -p kubernetes-1.31.1 +``` + +### 2.3 配置节点信息 + +修改项目配置文件,根据实际情况配置节点信息: + +```shell +vim kubernetes-1.31.1/config.yaml +``` + +注意: + ++ 主机ssh配置支持密码登录和密钥登录两种方式,如果使用密钥登录,则不需要配置密码。 ++ 无论使用哪种方式进行ssh连接,都需要确保控制节点可用ssh访问目标主机,并确保所有目标主机都加入了控制节点的`known_hosts`中(可以通过手动ssh连接一次每一台目标主机来实现)。 + +### 2.4 执行部署 + +执行以下命令以开始自动化部署: + +```shell +oedp run install -p kubernetes-1.31.1 +``` + +执行以下命令以卸载k8s: + +```shell +oedp run delete -p kubernetes-1.31.1 +``` + +## 3 插件开发指南 + +### 3.1 oedp 插件介绍 + +oedp 插件(plugin)是 oedp 工具中提供自动化部署能力的组件,通过将复杂的部署流程 ansible 化来实现自动化部署。插件中可能会集成多种部署操作(action),例如安装、卸载、环境清理等,每一个部署操作都会对应一个 ansible playbook。插件的所有可配置项都应当集中配置,以降低使用者的学习成本和开发者的维护成本。 + +### 3.2 目录结构 + +插件开发者在开发插件时应当遵循以下目录结构: + +```yaml +{plugin_name} +|-- main.yaml +|-- config.yaml +`-- workspace/ +``` + +| 文件或者目录名 | 介绍 | +|-------------|------------------------------------------------------| +| config.yaml | 包含主机相关的配置,如ip、密码、密钥、端口号等,还包含了应用的一些部署相关的配置,支持jinja2语言 | +| main.yaml | oedp识别应用部署流程的主配置文件 | +| workspace | 应用的部署能力库 | + +其中,`plugin_name`有以下约束: + ++ 该插件部署的软件名称为`name`,版本为`version`。 ++ `plugin_name`必须是以下两种之一: + + `{name}-{version}` + + `{name}-{version}-xxx` ++ 例如,一个插件用于部署kubernetes软件,版本为1.31.1,那么该插件的名称可以是:`kubernetes-1.31.1`,`kubernetes-1.31.1-20240101`,`kubernetes-1.31.1-offline-20240101`等。 + +下面以kubernetes-1.31.1部署插件为例,简单介绍yaml文件的内容: + +#### 3.2.1 main.yaml + +`main.yaml`主要用于记录插件的关键信息,包括:名称(name)、版本(version)、介绍(description)、操作(action)等,当用户执行`oedp info`命令时,oedp工具会读取并解析该文件,然后向用户展示其详细信息。 + +在`action`项中,应当是一个字典(key-value map),每一个 key 将作为操作的名称,对应的 value 中记录了该操作的详情。 + +操作详情是一个字典,其中的`description`项是该操作的说明,用于在执行`oedp info`命令时向用户展示,而`tasks`项中则记录该操作的具体步骤,为一个列表,执行该操作时,将按顺序执行每一项步骤。 + +在步骤中,开发者应当指定该步骤需要执行的`playbook`的路径,如果有需要,也可以在`vars`中指定变量文件的路径。所有路径都是相对`workspace`的相对路径。此外,可以指定`scope`,即该步骤需要执行的主机组,默认为`all`。 + +```yaml +name: kubernetes +version: 1.31.1 +description: install kubernetes 1.31.1 +action: + install: + description: install kubernetes + tasks: + - name: install kubernetes + playbook: init-k8s.yml + vars: variables.yml + scope: all + delete: + description: delete kubernetes + tasks: + - name: delete kubernetes + playbook: delete-k8s.yml + vars: variables.yml + scope: all + clean: + description: clean cache files + tasks: + - name: clean cache files + playbook: clean-k8s.yml + scope: all +``` + +上述插件中,`workspace/`中的目录结构为: + +```yaml +workspace +|-- roles +| `-- ... +|-- init-k8s.yml +|-- delete-k8s.yml +|-- clean-k8s.yml +|-- variables.yml +`-- ... +``` + +#### 3.2.2 config.yaml + +`config.yaml`是插件中的用户配置文件,主要包含对主机组的配置和一些其他的全局配置,遵循 ansible 的 inventory 文件配置规则,在执行 ansible playbook 时可直接作为 inventory 传入。 + +插件开发者在开发插件时应注意,要将所有的配置项集中在该文件中进行配置。 + +```yaml +all: + children: + masters: + hosts: + Master1: + ansible_host: 192.168.10.1 + ansible_port: 22 + ansible_user: root + ansible_password: password + architecture: amd64 + oeversion: 24.03-LTS + workers: + hosts: + Worker1: + ansible_host: 192.168.10.2 + ansible_port: 22 + ansible_user: root + architecture: arm64 + oeversion: 22.03-LTS + Worker2: + ansible_host: 192.168.10.3 + ansible_port: 22 + ansible_user: root + architecture: amd64 + oeversion: 22.03-LTS + vars: + init_cluster_force: "true" + kubernetes_version: 1.31.1 + service_cidr: 10.96.0.0/16 + pod_cidr: 10.244.0.0/16 + pause_image: registry.k8s.io/pause:3.10 + calico_version: 3.28.2 + certs_expired: 3650 + has_deployed_containerd: "false" +``` + +### 3.3 插件打包 + +如果要发布插件供用户使用,需要将插件打包成`{plugin_name}.tar.gz`的格式,压缩包的名称和包内目录的名称要对应,且解压后应当仅生成一个目录,例如: + +```yaml +kubernetes-1.31.1.tar.gz +`-- kubernetes-1.31.1 + |-- main.yaml + |-- config.yaml + `-- workspace/ +``` diff --git a/docs/zh/edge_computing/_toc.yaml b/docs/zh/edge_computing/_toc.yaml deleted file mode 100644 index 3a1bc0ae89fe47b293c9e2519fcaf96e987489bd..0000000000000000000000000000000000000000 --- a/docs/zh/edge_computing/_toc.yaml +++ /dev/null @@ -1,5 +0,0 @@ -label: 边缘计算 -sections: - - href: ./kube_edge/_toc.yaml - - href: ./k3s/_toc.yaml - - href: ./ros/_toc.yaml \ No newline at end of file diff --git a/docs/zh/edge_computing/k3s/_toc.yaml b/docs/zh/edge_computing/k3s/_toc.yaml index 2f650354560b6e930979b4ee7a4efcd54a9cc40e..d71b66ea9c40a9ac8ca367ab2cc95161148fcd7e 100644 --- a/docs/zh/edge_computing/k3s/_toc.yaml +++ b/docs/zh/edge_computing/k3s/_toc.yaml @@ -3,4 +3,4 @@ isManual: true description: K3s 是一个轻量级的 Kubernetes 发行版。 sections: - label: K3s部署指南 - href: ./k3s-deployment-guide.md + href: ./k3s_deployment_guide.md diff --git a/docs/zh/edge_computing/k3s/k3s-deployment-guide.md b/docs/zh/edge_computing/k3s/k3s_deployment_guide.md similarity index 100% rename from docs/zh/edge_computing/k3s/k3s-deployment-guide.md rename to docs/zh/edge_computing/k3s/k3s_deployment_guide.md diff --git a/docs/zh/edge_computing/kube_edge/_toc.yaml b/docs/zh/edge_computing/kubeedge/_toc.yaml similarity index 88% rename from docs/zh/edge_computing/kube_edge/_toc.yaml rename to docs/zh/edge_computing/kubeedge/_toc.yaml index b00f58331ef84bff595a3a285730e73a18d629b8..6279645142d3d21c51b7a11d45982dc5f18c43f9 100644 --- a/docs/zh/edge_computing/kube_edge/_toc.yaml +++ b/docs/zh/edge_computing/kubeedge/_toc.yaml @@ -8,4 +8,4 @@ sections: - label: KubeEdge 使用文档 href: ./kube_edge_user_document.md - label: KubeEdge 部署指南 - href: ./kube_edge_deployment_guide.md \ No newline at end of file + href: ./kube_edge_deployment_guide.md diff --git a/docs/zh/edge_computing/kube_edge/kube_edge_deployment_guide.md b/docs/zh/edge_computing/kubeedge/kubeedge_deployment_guide.md similarity index 100% rename from docs/zh/edge_computing/kube_edge/kube_edge_deployment_guide.md rename to docs/zh/edge_computing/kubeedge/kubeedge_deployment_guide.md diff --git a/docs/zh/edge_computing/kube_edge/kube_edge_user_document.md b/docs/zh/edge_computing/kubeedge/kubeedge_user_document.md similarity index 100% rename from docs/zh/edge_computing/kube_edge/kube_edge_user_document.md rename to docs/zh/edge_computing/kubeedge/kubeedge_user_document.md diff --git a/docs/zh/edge_computing/kube_edge/overview.md b/docs/zh/edge_computing/kubeedge/overview.md similarity index 100% rename from docs/zh/edge_computing/kube_edge/overview.md rename to docs/zh/edge_computing/kubeedge/overview.md diff --git a/docs/zh/edge_computing/ros/_toc.yaml b/docs/zh/edge_computing/ros/_toc.yaml index 62b43ecd5a8809f1d94e55fb594f1684b7e58e23..9a1c4c0590733ac852b9e6f0fba00a5d14a8eb63 100644 --- a/docs/zh/edge_computing/ros/_toc.yaml +++ b/docs/zh/edge_computing/ros/_toc.yaml @@ -3,15 +3,14 @@ isManual: true description: 主要介绍了 openEuler 系统上 ROS 的安装0部署与使用方法。 sections: - label: ROS 用户指南 - href: ./ros-user-guide.md - sections: - - label: 认识ROS - href: ./getting-to-know-ros.md - - label: 安装与部署 - href: ./installation-and-deployment.md - - label: 使用方法 - href: ./usage-guide.md - - label: 常见问题与解决方法 - href: ./faqs-and-solutions.md - - label: 附录 - href: ./appendix.md + href: ./ros_user_guide.md + - label: 认识ROS + href: ./getting_to_know_ros.md + - label: 安装与部署 + href: ./installation_and_deployment.md + - label: 使用方法 + href: ./usage_guide.md + - label: 常见问题与解决方法 + href: ./faqs_and_solutions.md + - label: 附录 + href: ./appendix.md diff --git a/docs/zh/edge_computing/ros/appendix.md b/docs/zh/edge_computing/ros/appendix.md index 517d63c00d09d9a669c593307599d9f9fdca9e4e..68d9f8f1f83facefa323a5fc188d9ab090c05c4f 100644 --- a/docs/zh/edge_computing/ros/appendix.md +++ b/docs/zh/edge_computing/ros/appendix.md @@ -1,3 +1,3 @@ # 附录 -更详细的ROS介绍可访问[ROS wiki](https://wiki.ros.org/),[ROS docs](http://docs.ros.org/)获取。 \ No newline at end of file +更详细的ROS介绍可访问[ROS wiki](https://wiki.ros.org/),[ROS docs](http://docs.ros.org/)获取。 diff --git a/docs/zh/edge_computing/ros/faqs-and-solutions.md b/docs/zh/edge_computing/ros/faqs_and_solutions.md similarity index 100% rename from docs/zh/edge_computing/ros/faqs-and-solutions.md rename to docs/zh/edge_computing/ros/faqs_and_solutions.md diff --git a/docs/zh/edge_computing/ros/getting-to-know-ros.md b/docs/zh/edge_computing/ros/getting_to_know_ros.md similarity index 100% rename from docs/zh/edge_computing/ros/getting-to-know-ros.md rename to docs/zh/edge_computing/ros/getting_to_know_ros.md diff --git a/docs/zh/edge_computing/ros/installation-and-deployment.md b/docs/zh/edge_computing/ros/installation_and_deployment.md similarity index 100% rename from docs/zh/edge_computing/ros/installation-and-deployment.md rename to docs/zh/edge_computing/ros/installation_and_deployment.md diff --git a/docs/zh/edge_computing/ros/ros-user-guide.md b/docs/zh/edge_computing/ros/ros_user_guide.md similarity index 100% rename from docs/zh/edge_computing/ros/ros-user-guide.md rename to docs/zh/edge_computing/ros/ros_user_guide.md diff --git a/docs/zh/edge_computing/ros/usage-guide.md b/docs/zh/edge_computing/ros/usage_guide.md similarity index 100% rename from docs/zh/edge_computing/ros/usage-guide.md rename to docs/zh/edge_computing/ros/usage_guide.md diff --git a/docs/zh/memory_fabric/images/.keep b/docs/zh/memory_fabric/images/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/zh/memory_fabric/images/IntegratedDeployment.png b/docs/zh/memory_fabric/images/IntegratedDeployment.png new file mode 100644 index 0000000000000000000000000000000000000000..0fc7d1b0a3d3cf31a2da0bff64bf03f576234771 Binary files /dev/null and b/docs/zh/memory_fabric/images/IntegratedDeployment.png differ diff --git a/docs/zh/memory_fabric/memory_fabric_deployment_guide.md b/docs/zh/memory_fabric/memory_fabric_deployment_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..71945d53012aedf602ac4844613afe56a7840dee --- /dev/null +++ b/docs/zh/memory_fabric/memory_fabric_deployment_guide.md @@ -0,0 +1,96 @@ +# Memory Fabric用户文档 + +- [简介](简介.md) +- [部署](部署.md) +- [启动](启动.md) +- [接口](接口.md) + +# 简介 + +内存池套件是基于内存型介质和新型网络技术,构建高性能的分布式内存资源池,并通过BigMemory、MemPlog、MemKV等语义对应用提供服务。 + +内存池套件使用和管理的资源来自计算节点或者单独资源节点提供的可共享的DRAM/Persistent Memory/内存盘等(不支持普通disk直接互联池化),结合新型互联协议(RDMA,CXL,UBUS)us级传输时延,期望内存池套件通过极低的软件时延和节点CPU开销带来整体性能提升。 + +# 部署 + +Memory Fabric需要根据节点类型、资源分布情况和应用需求做到多场景应用集成部署,具体描述如下: + +- 计算和MF资源共节点时支持client和server同节点部署,如[图1](#fig17349154610267)node1、node2所示。 +- 资源独立提供时也支持client、server分离节点部署,如[图1](#fig17349154610267)node3、node4所示。 +- 支持同节点部署和分离节点部署两种场景混合部署。 +- 节点内支持多client,也支持多server模式部署,如[图1](#fig17349154610267)node2所示。 +- client与同节点的server通信使用IPC,配置支持连接远端server时使用RPC通信。 +- server端接入集群管理服务中,用于统一的节点编号和资源信息广播。 + +**图 1** 集成部署 +![](images/IntegratedDeployment.png) + +# 启动 + +Memory Fabric启动分为server和client两个部分。在节点上优先启动server端,完成集群注册、监控流程,然后启动本地资源注册\(总容量通过配置文件获取\)和通信建链流程,初始化完成后支持本地多client与server建立连接,可对外启动业务服务。 + +# 接口 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

接口

+

说明

+

int BM_Init(char *ockPath, int flags);

+

int BM_InitWithExtAttr(char*ockPath, int flags, void *attr); int BM_Exit(void);

+

初始化

+

带属性的初始化

+

退出

+

int BM_CreateNSSec(const char*poolName, const char *ns, int attribute, const char*secId);

+

int BM_DestroyNSSec(const char *poolName, const char*ns, const char *secId);

+

int BM_QueryNSCache(QueryNsCache*buff, size_t buffLen);

+

Namespace创建和销毁、查询

+

int BM_AllocSec(BmInfo *bminfo, size_t size, int flags, BmAffinity* affinity);

+

int BM_FreeSec(BmInfo *bminfo, int flags);

+

int BM_BatchFreeSec(char*bmIdArray[], int num, int flags, const char *ns, const char*secId);

+

Bigmemory对象申请和释放

+

int BM_ExpandSec(BmInfo *bminfo, size_t size, int flags);

+

bigMemory扩容

+

int BM_MapSec(BmInfo*bminfo, int prot, int flags, void **ptr);

+

int BM_Unmap(char *bmId, void*ptr);

+

bigMemory到连续虚拟空间map和unmap

+

int BM_CopySec(BmInfo *srcBM, size_t srcOffset, BmInfo*dstBM, size_t dstOffset, size_t length, int flags);

+

bigMemory对象间拷贝

+

int BM_SpecificObjSwapInSec(DiskFileDesc *file, BmInfo*bminfo, int flags, size_t offset, size_t length);

+

文件内容换入bigmemory对象

+

int BM_ReadSec(BmInfo *bminfo, size_t offset, size_t length, void*buffer, int flags);

+

int BM_WriteSec(BmInfo *bminfo, size_t offset, size_t length, const void*buffer, int flags);

+

Bigmemory读写

+

int BM_GatherSec(intptr_t *inputInfo, BmOperatorCode operatorCode, int flags, BmInfo*bminfo, size_t *bmLen);

+

聚合操作接口

+
diff --git a/docs/zh/server/administration/administrator/_toc.yaml b/docs/zh/server/administration/administrator/_toc.yaml index 58d9a4674c44e920704a492c568f82954bccbe78..13714a61f981c1de6b08e19bf30b2b970f183877 100644 --- a/docs/zh/server/administration/administrator/_toc.yaml +++ b/docs/zh/server/administration/administrator/_toc.yaml @@ -3,28 +3,28 @@ isManual: true description: openEuler 系统常用的管理员操作 sections: - label: 查看系统信息 - href: ./viewing-system-information.md + href: ./viewing_system_information.md - label: 基础配置 - href: ./basic-configuration.md + href: ./basic_configuration.md - label: 管理用户和用户组 - href: ./user-and-user-group-management.md + href: ./user_and_user_group_management.md - label: 使用DNF管理软件包 - href: ./using-dnf-to-manage-software-packages.md + href: ./using_dnf_to_manage_software_packages.md - label: 管理服务 - href: ./service-management.md + href: ./service_management.md - label: 管理进程 - href: ./process-management.md + href: ./process_management.md - label: 搭建服务 - href: ./configuring-services.md + href: ./configuring_services.md sections: - label: 搭建repo服务器 - href: ./configuring-the-repo-server.md + href: ./configuring_the_repo_server.md - label: 搭建FTP服务器 - href: ./configuring-the-ftp-server.md + href: ./configuring_the_ftp_server.md - label: 搭建web服务器 - href: ./configuring-the-web-server.md + href: ./configuring_the_web_server.md - label: 搭建数据库服务器 - href: ./setting-up-the-database-server.md + href: ./setting_up_the_database_server.md - label: 常见问题与解决方法 - href: ./configuring-services.md + href: ./faqs_and_solutions.md \ No newline at end of file diff --git a/docs/zh/server/administration/administrator/basic-configuration.md b/docs/zh/server/administration/administrator/basic_configuration.md similarity index 91% rename from docs/zh/server/administration/administrator/basic-configuration.md rename to docs/zh/server/administration/administrator/basic_configuration.md index ffa32894a7e65904dd813a7fe92837a12d4c799d..c32a8ba76e1c46ff881b429baa46f7d403fa2734 100644 --- a/docs/zh/server/administration/administrator/basic-configuration.md +++ b/docs/zh/server/administration/administrator/basic_configuration.md @@ -1,46 +1,4 @@ # 基础配置 - - -- [基础配置](#基础配置) - - [设置语言环境](#设置语言环境) - - [显示当前语言环境状态](#显示当前语言环境状态) - - [列出可用的语言环境](#列出可用的语言环境) - - [设置语言环境](#设置语言环境-1) - - [设置键盘](#设置键盘) - - [显示当前设置](#显示当前设置) - - [列出可用的键盘布局](#列出可用的键盘布局) - - [设置键盘布局](#设置键盘布局) - - [设置日期和时间](#设置日期和时间) - - [使用timedatectl命令设置](#使用timedatectl命令设置) - - [显示日期和时间](#显示日期和时间) - - [通过远程服务器进行时间同步](#通过远程服务器进行时间同步) - - [修改日期](#修改日期) - - [修改时间](#修改时间) - - [修改时区](#修改时区) - - [使用date命令设置](#使用date命令设置) - - [显示当前的日期和时间](#显示当前的日期和时间) - - [修改时间](#修改时间-1) - - [修改日期](#修改日期-1) - - [使用hwclock命令设置](#使用hwclock命令设置) - - [硬件时钟和系统时钟](#硬件时钟和系统时钟) - - [显示日期和时间](#显示日期和时间-1) - - [设置日期和时间](#设置日期和时间-1) - - [设置kdump](#设置kdump) - - [设置kdump预留内存](#设置kdump预留内存) - - [预留内存参数格式](#预留内存参数格式) - - [预留内存推荐值](#预留内存推荐值) - - [禁用网络相关驱动](#禁用网络相关驱动) - - [设置磁盘调度算法](#设置磁盘调度算法) - - [临时修改调度策略](#临时修改调度策略) - - [永久设置调度策略](#永久设置调度策略) - - [设置NMI watchdog](#设置nmi-watchdog) - - [概述](#概述) - - [注意事项](#注意事项) - - [操作步骤](#操作步骤) - - [关闭NMI watchdog](#关闭nmi-watchdog) - - [修改NMI watchdog阈值](#修改nmi-watchdog阈值) - - ## 设置语言环境 @@ -526,8 +484,8 @@ NMI watchdog主线已经支持,当硬件满足以下条件时可以使能NMI w - 默认情况下使用SDEI watchdog。当SDEI watchdog使能失败时,不会切换到NMI watchdog - 需要使用NMI watchdog时,需要显式的在启动参数中禁用SDEI watchdog:disable_sdei_nmi_watchdog - 当需要使用NMI watchdog时,需要保证硬件支持NMI中断: - - 当硬件支持NMI中断时,不需要额外处理 - - 当硬件不支持NMI中断,但是支持伪NMI中断时,需要显式的在启动参数中使能伪NMI中断:irqchip.gicv3_pseudo_nmi=1 + - 当硬件支持NMI中断时,不需要额外处理 + - 当硬件不支持NMI中断,但是支持伪NMI中断时,需要显式的在启动参数中使能伪NMI中断:irqchip.gicv3_pseudo_nmi=1 以上事项不影响非arm64平台。 diff --git a/docs/zh/server/administration/administrator/configuring-services.md b/docs/zh/server/administration/administrator/configuring_services.md similarity index 100% rename from docs/zh/server/administration/administrator/configuring-services.md rename to docs/zh/server/administration/administrator/configuring_services.md diff --git a/docs/zh/server/administration/administrator/configuring-the-ftp-server.md b/docs/zh/server/administration/administrator/configuring_the_ftp_server.md similarity index 100% rename from docs/zh/server/administration/administrator/configuring-the-ftp-server.md rename to docs/zh/server/administration/administrator/configuring_the_ftp_server.md diff --git a/docs/zh/server/administration/administrator/configuring-the-repo-server.md b/docs/zh/server/administration/administrator/configuring_the_repo_server.md similarity index 89% rename from docs/zh/server/administration/administrator/configuring-the-repo-server.md rename to docs/zh/server/administration/administrator/configuring_the_repo_server.md index 87167ab5a1cbb3cd048df0df354a95f58bfbdc68..b34ab5ccb08a7b7487c69ed321802d00b6f70e85 100644 --- a/docs/zh/server/administration/administrator/configuring-the-repo-server.md +++ b/docs/zh/server/administration/administrator/configuring_the_repo_server.md @@ -1,7 +1,31 @@ # 搭建repo服务器 >![](./public_sys-resources/icon-note.gif) **说明:** +<<<<<<<< HEAD:docs/zh/server/administration/administrator/configuring-the-repo-server.md >openEuler提供了多种repo源供用户在线使用,各repo源含义可参考[系统安装](../../releasenotes/releasenotes/os-installation.md)。若用户无法在线获取openEuler repo源,则可使用openEuler提供的ISO发布包创建为本地openEuler repo源。本章节中以openEuler-{version}-aarch64-dvd.iso发布包为例,请根据实际需要的ISO发布包进行修改。 +======== +>openEuler提供了多种repo源供用户在线使用,各repo源含义可参考[系统安装](../../..//server/releasenotes/releasenotes/os_installation.md)。若用户无法在线获取openEuler repo源,则可使用openEuler提供的ISO发布包创建为本地openEuler repo源。本章节中以openEuler-{version}-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相关命令) + + +>>>>>>>> 6b124a04c (文档整改):docs/zh/server/administration/administrator/configuring_the_repo_server.md ## 概述 diff --git a/docs/zh/server/administration/administrator/configuring-the-web-server.md b/docs/zh/server/administration/administrator/configuring_the_web_server.md similarity index 95% rename from docs/zh/server/administration/administrator/configuring-the-web-server.md rename to docs/zh/server/administration/administrator/configuring_the_web_server.md index 146b1b1c18b50a3c3a23b713c1bd52cc1099f716..3b5b962c74c9853e0344dbfd24672d784994126c 100644 --- a/docs/zh/server/administration/administrator/configuring-the-web-server.md +++ b/docs/zh/server/administration/administrator/configuring_the_web_server.md @@ -22,7 +22,11 @@ openEuler系统中的web服务器版本是Apache HTTP服务器2.4版本,即htt # dnf install httpd ``` +<<<<<<<< HEAD:docs/zh/server/administration/administrator/configuring-the-web-server.md 更多关于管理服务的内容,请参见[管理服务](./service-management.md)。 +======== + 更多关于管理服务的内容,请参见[管理服务](./service_management.md)。 +>>>>>>>> 6b124a04c (文档整改):docs/zh/server/administration/administrator/configuring_the_web_server.md - 启动、停止和重启httpd服务,需要使用root权限。 @@ -265,7 +269,11 @@ Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件 ### 安装 +<<<<<<<< HEAD:docs/zh/server/administration/administrator/configuring-the-web-server.md 1. 配置本地yum源,详细信息请参考[搭建repo服务器](./configuring-the-repo-server.md)。 +======== +1. 配置本地yum源,详细信息请参考[搭建repo服务器](./configuring_the_repo_server.md)。 +>>>>>>>> 6b124a04c (文档整改):docs/zh/server/administration/administrator/configuring_the_web_server.md 2. 清除缓存。 ```shell @@ -300,7 +308,11 @@ Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件 - 为了能够使用nginx服务,请确保您的系统中已经安装nginx服务。若未安装,可参考[安装](#安装)进行安装。 +<<<<<<<< HEAD:docs/zh/server/administration/administrator/configuring-the-web-server.md - 更多关于管理服务的内容,请参见[管理服务](./service-management.md)。 +======== +- 更多关于管理服务的内容,请参见[管理服务](./service_management.md)。 +>>>>>>>> 6b124a04c (文档整改):docs/zh/server/administration/administrator/configuring_the_web_server.md - 启动、停止和重启nginx服务,需要使用root权限。 diff --git a/docs/zh/server/administration/administrator/faq-and-solutions.md b/docs/zh/server/administration/administrator/faqs_and_solutions.md similarity index 100% rename from docs/zh/server/administration/administrator/faq-and-solutions.md rename to docs/zh/server/administration/administrator/faqs_and_solutions.md diff --git a/docs/zh/server/administration/administrator/process-management.md b/docs/zh/server/administration/administrator/process_management.md similarity index 100% rename from docs/zh/server/administration/administrator/process-management.md rename to docs/zh/server/administration/administrator/process_management.md diff --git a/docs/zh/server/administration/administrator/service-management.md b/docs/zh/server/administration/administrator/service_management.md similarity index 100% rename from docs/zh/server/administration/administrator/service-management.md rename to docs/zh/server/administration/administrator/service_management.md 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 similarity index 98% rename from docs/zh/server/administration/administrator/setting-up-the-database-server.md rename to docs/zh/server/administration/administrator/setting_up_the_database_server.md index 2114376b34232ccf06054ade71de2c8fed89345b..a24d38b94a1bea19e067325200744894ec5855a4 100644 --- a/docs/zh/server/administration/administrator/setting-up-the-database-server.md +++ b/docs/zh/server/administration/administrator/setting_up_the_database_server.md @@ -170,7 +170,11 @@ sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config #### 安装 +<<<<<<<< HEAD:docs/zh/server/administration/administrator/setting-up-the-database-server.md 1. 配置本地yum源,详细信息请参考[搭建repo服务器](./configuring-the-repo-server.md)。 +======== +1. 配置本地yum源,详细信息请参考[搭建repo服务器](./configuring_the_repo_server.md)。 +>>>>>>>> 6b124a04c (文档整改):docs/zh/server/administration/administrator/setting_up_the_database_server.md 2. 清除缓存。 ```shell @@ -885,7 +889,11 @@ MariaDB的架构如[图2](#fig13492418164520)所示。 >![](./public_sys-resources/icon-note.gif) **说明:** >此步骤需要安装镜像中的lvm2相关包,步骤如下: +<<<<<<<< HEAD:docs/zh/server/administration/administrator/setting-up-the-database-server.md >1. 配置本地yum源,详细信息请参考[搭建repo服务器](./configuring-the-repo-server.md)。如果已经执行,则可跳过此步。 +======== +>1. 配置本地yum源,详细信息请参考[搭建repo服务器](./configuring_the_repo_server.md)。如果已经执行,则可跳过此步。 +>>>>>>>> 6b124a04c (文档整改):docs/zh/server/administration/administrator/setting_up_the_database_server.md >2. 在root权限下执行`yum install lvm2`命令安装lvm2。 1. 创建物理卷(sdb为硬盘名称,具体名字以实际为准)。 @@ -940,7 +948,11 @@ MariaDB的架构如[图2](#fig13492418164520)所示。 #### 安装 +<<<<<<<< HEAD:docs/zh/server/administration/administrator/setting-up-the-database-server.md 1. 配置本地yum源,详细信息请参考[搭建repo服务器](./configuring-the-repo-server.md)。 +======== +1. 配置本地yum源,详细信息请参考[搭建repo服务器](./configuring_the_repo_server.md)。 +>>>>>>>> 6b124a04c (文档整改):docs/zh/server/administration/administrator/setting_up_the_database_server.md 2. 清除缓存。 ```shell @@ -1505,7 +1517,11 @@ MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 >![](./public_sys-resources/icon-note.gif) **说明:** >此步骤需要安装镜像中的lvm2相关包,步骤如下: +<<<<<<<< HEAD:docs/zh/server/administration/administrator/setting-up-the-database-server.md >1. 配置本地yum源,详细信息请参考[搭建repo服务器](./configuring-the-repo-server.md)。如果已经执行,则可跳过此步。 +======== +>1. 配置本地yum源,详细信息请参考[搭建repo服务器](./configuring_the_repo_server.md)。如果已经执行,则可跳过此步。 +>>>>>>>> 6b124a04c (文档整改):docs/zh/server/administration/administrator/setting_up_the_database_server.md >2. 执行`yum install lvm2`安装lvm2。 1. 创建物理卷(sdb为硬盘名称,具体名字以实际为准)。 @@ -1563,7 +1579,11 @@ MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 #### 安装 +<<<<<<<< HEAD:docs/zh/server/administration/administrator/setting-up-the-database-server.md 1. 配置本地yum源,详细信息请参考[搭建repo服务器](./configuring-the-repo-server.md)章节。 +======== +1. 配置本地yum源,详细信息请参考[搭建repo服务器](./configuring_the_repo_server.md)章节。 +>>>>>>>> 6b124a04c (文档整改):docs/zh/server/administration/administrator/setting_up_the_database_server.md 2. 清除缓存。 ```shell 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 similarity index 100% rename from docs/zh/server/administration/administrator/user-and-user-group-management.md rename to docs/zh/server/administration/administrator/user_and_user_group_management.md 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 similarity index 97% rename from docs/zh/server/administration/administrator/using-dnf-to-manage-software-packages.md rename to docs/zh/server/administration/administrator/using_dnf_to_manage_software_packages.md index 14400fa057a3f76a5528b69860fbe0077cad8af5..b7dc086b9871a154cb457fb8848419a9c91faaa3 100644 --- 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 @@ -135,7 +135,11 @@ repository部分允许您定义定制化的openEuler软件源仓库,各个仓 - 配置/etc/yum.repos.d目录下的.repo文件 +<<<<<<<< HEAD:docs/zh/server/administration/administrator/using-dnf-to-manage-software-packages.md openEuler提供了多种repo源供用户在线使用,各repo源含义可参考[系统安装](../../releasenotes/releasenotes/os-installation.md)。使用root权限添加openEuler repo源,示例如下: +======== + openEuler提供了多种repo源供用户在线使用,各repo源含义可参考[系统安装](../../../server/releasenotes/releasenotes/os_installation.md)。使用root权限添加openEuler repo源,示例如下: +>>>>>>>> 6b124a04c (文档整改):docs/zh/server/administration/administrator/using_dnf_to_manage_software_packages.md ```shell # vi /etc/yum.repos.d/openEuler.repo diff --git a/docs/zh/server/administration/administrator/viewing-system-information.md b/docs/zh/server/administration/administrator/viewing_system_information.md similarity index 100% rename from docs/zh/server/administration/administrator/viewing-system-information.md rename to docs/zh/server/administration/administrator/viewing_system_information.md diff --git a/docs/zh/server/administration/compa_command/_toc.yaml b/docs/zh/server/administration/compa_command/_toc.yaml index eda11b6d713bff417d94f7214158762d05a330b5..3d2cae5e5b88e9bfcf7379fcd9629002e5f235c0 100644 --- a/docs/zh/server/administration/compa_command/_toc.yaml +++ b/docs/zh/server/administration/compa_command/_toc.yaml @@ -6,6 +6,6 @@ sections: href: ./overview.md sections: - label: utshell用户指南 - href: ./utshell-guide.md + href: ./utshell_guide.md - label: utsudo用户指南 - href: ./utsudo-user-guide.md + href: ./utsudo_user_guide.md diff --git a/docs/zh/server/administration/compa_command/utshell-guide.md b/docs/zh/server/administration/compa_command/utshell_guide.md similarity index 100% rename from docs/zh/server/administration/compa_command/utshell-guide.md rename to docs/zh/server/administration/compa_command/utshell_guide.md diff --git a/docs/zh/server/administration/compa_command/utsudo-user-guide.md b/docs/zh/server/administration/compa_command/utsudo_user_guide.md similarity index 100% rename from docs/zh/server/administration/compa_command/utsudo-user-guide.md rename to docs/zh/server/administration/compa_command/utsudo_user_guide.md diff --git a/docs/zh/server/development/FangTian/_toc.yaml b/docs/zh/server/development/FangTian/_toc.yaml index 22a11303d76c693b9987bd16dd352f62f8169eef..3b26d88714091f3c79df22d3ea10a6c9cb1504ed 100644 --- a/docs/zh/server/development/FangTian/_toc.yaml +++ b/docs/zh/server/development/FangTian/_toc.yaml @@ -6,7 +6,7 @@ sections: href: ./overview.md sections: - label: FangTian环境配置 - href: ./fangtian-environment-configuration.md + href: ./fangtian_environment_configuration.md sections: - label: FangTian支持Wayland应用及鸿蒙应用 - href: ./fantian-supports-waylan-applications-and-harmonyos-applications.md \ No newline at end of file + href: ./fangtian_for_linux_waylan_and_openharmony_applications.md \ No newline at end of file diff --git a/docs/zh/server/development/FangTian/fangtian-environment-configuration.md b/docs/zh/server/development/FangTian/fangtian_environment_configuration.md similarity index 84% rename from docs/zh/server/development/FangTian/fangtian-environment-configuration.md rename to docs/zh/server/development/FangTian/fangtian_environment_configuration.md index 359816f3b68eda06faedba3bfaab89278fa47470..7cd314ad95d550b0049e1afa59c14ff4a701bb66 100644 --- a/docs/zh/server/development/FangTian/fangtian-environment-configuration.md +++ b/docs/zh/server/development/FangTian/fangtian_environment_configuration.md @@ -10,7 +10,11 @@ ### 环境准备 +<<<<<<<< HEAD:docs/zh/server/development/FangTian/fangtian-environment-configuration.md 安装 openEuler 系统,安装方法参考《[openEuler 安装指南](../../installation_upgrade/installation/installation-on-servers.md)》。 +======== +安装 openEuler 系统,安装方法参考《[openEuler 安装指南](../../../server/installation_upgrade/installation/installation_on_servers.md)》。 +>>>>>>>> 6b124a04c (文档整改):docs/zh/server/development/FangTian/fangtian_environment_configuration.md ### FangTian 软件包安装 diff --git a/docs/zh/server/development/FangTian/fantian-supports-waylan-applications-and-harmonyos-applications.md b/docs/zh/server/development/FangTian/fangtian_for_linux_waylan_and_openharmony_applications.md similarity index 100% rename from docs/zh/server/development/FangTian/fantian-supports-waylan-applications-and-harmonyos-applications.md rename to docs/zh/server/development/FangTian/fangtian_for_linux_waylan_and_openharmony_applications.md diff --git a/docs/zh/server/development/ai4c/_toc.yaml b/docs/zh/server/development/ai4c/_toc.yaml index c4f28bfc00681c3f33337cabd2a7e12e7d9be003..50196b93450c25a2270c7bc2ced894af741b6178 100644 --- a/docs/zh/server/development/ai4c/_toc.yaml +++ b/docs/zh/server/development/ai4c/_toc.yaml @@ -3,4 +3,4 @@ isManual: true description: AI4C 代表 AI 辅助编译器的套件,是一个使编译器能够集成机器学习驱动编译优化的框架。 sections: - label: AI4C使用手册 - href: ./ai4c-user-manual.md + 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 similarity index 100% rename from docs/zh/server/development/ai4c/ai4c-user-manual.md rename to docs/zh/server/development/ai4c/ai4c_user_manual.md diff --git a/docs/zh/server/development/application_dev/_toc.yaml b/docs/zh/server/development/application_dev/_toc.yaml index baa8eac9b78d25141cf89cd4f5f87b389b0000f6..8a6ef7397a923915a6803006965b288aa4f2c175 100644 --- a/docs/zh/server/development/application_dev/_toc.yaml +++ b/docs/zh/server/development/application_dev/_toc.yaml @@ -3,18 +3,18 @@ isManual: true description: 基于 openEuler 开发应用程序 sections: - label: 概述 - href: ./application-development.md + href: ./application_development.md - label: 开发环境准备 - href: ./preparations-for-development-environment.md + href: ./preparations_for_development_environment.md - label: 使用GCC编译 - href: ./using-gcc-for-compilation.md + href: ./using_gcc_for_compilation.md - label: 使用Clang编译 - href: ./using-clang-for-compilation.md + href: ./using_clang_for_compilation.md - label: 使用make编译 - href: ./using-make-for-compilation.md + href: ./using_make_for_compilation.md - label: 使用JDK编译 - href: ./using-jdk-for-compilation.md + href: ./using_jdk_for_compilation.md - label: 构建RPM包 - href: ./building-an-rpm-package.md + href: ./building_an_rpm_package.md - label: 常见问题与解决方法 - href: ./faqs-and-solutions.md + href: ./faqs_and_solutions.md diff --git a/docs/zh/server/development/application_dev/application-development.md b/docs/zh/server/development/application_dev/application_development.md similarity index 100% rename from docs/zh/server/development/application_dev/application-development.md rename to docs/zh/server/development/application_dev/application_development.md 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 similarity index 100% rename from docs/zh/server/development/application_dev/building-an-rpm-package.md rename to docs/zh/server/development/application_dev/building_an_rpm_package.md diff --git a/docs/zh/server/development/application_dev/faqs-and-solutions.md b/docs/zh/server/development/application_dev/faqs_and_solutions.md similarity index 100% rename from docs/zh/server/development/application_dev/faqs-and-solutions.md rename to docs/zh/server/development/application_dev/faqs_and_solutions.md diff --git a/docs/zh/server/development/application_dev/preparations-for-development-environment.md b/docs/zh/server/development/application_dev/preparations_for_development_environment.md similarity index 93% rename from docs/zh/server/development/application_dev/preparations-for-development-environment.md rename to docs/zh/server/development/application_dev/preparations_for_development_environment.md index 84cc3c72e478cf47e3f5418edbd590fc8288d40e..a14f85f822559413bab93f0de874a48782349c68 100644 --- a/docs/zh/server/development/application_dev/preparations-for-development-environment.md +++ b/docs/zh/server/development/application_dev/preparations_for_development_environment.md @@ -94,7 +94,11 @@ 操作系统要求为openEuler操作系统。 +<<<<<<<< HEAD:docs/zh/server/development/application_dev/preparations-for-development-environment.md openEuler操作系统具体安装方法请参考[安装指南](../../installation_upgrade/installation/installation-on-servers.md),其中“软件选择”页面的“已选环境的附加选项”中将“开发工具”勾选。 +======== +openEuler操作系统具体安装方法请参考[安装指南](../../../server/installation_upgrade/installation/installation_on_servers.md),其中“软件选择”页面的“已选环境的附加选项”中将“开发工具”勾选。 +>>>>>>>> 6b124a04c (文档整改):docs/zh/server/development/application_dev/preparations_for_development_environment.md ## 配置openEuler yum源 @@ -103,7 +107,11 @@ openEuler操作系统具体安装方法请参考[安装指南](../../installatio ### 通过直接获取在线的openEuler repo源配置在线yum源 >![](./public_sys-resources/icon-note.gif) **说明:** +<<<<<<<< HEAD:docs/zh/server/development/application_dev/preparations-for-development-environment.md >openEuler提供了多种repo源供用户在线使用,各repo源含义可参考[系统安装](../../releasenotes/releasenotes/os-installation.md)。本操作以AArch64架构的OS repo源为例将其配置为yum源。 +======== +>openEuler提供了多种repo源供用户在线使用,各repo源含义可参考[系统安装](../../releasenotes/releasenotes/os_installation.md)。本操作以AArch64架构的OS repo源为例将其配置为yum源。 +>>>>>>>> 6b124a04c (文档整改):docs/zh/server/development/application_dev/preparations_for_development_environment.md 1. 进入到yum源目录并查看目录下的.repo配置文件。 @@ -143,7 +151,11 @@ openEuler操作系统具体安装方法请参考[安装指南](../../installatio ### 通过挂载ISO创建本地openEuler repo源配置本地yum源 >![](./public_sys-resources/icon-note.gif) **说明:** +<<<<<<<< HEAD:docs/zh/server/development/application_dev/preparations-for-development-environment.md >openEuler提供了多种ISO发布包,各ISO发布包含义可参考[系统安装](../../releasenotes/releasenotes/os-installation.md)。本操作中忽略具体的版本号和架构,请根据实际需要的ISO发布包和校验文件进行修改。 +======== +>openEuler提供了多种ISO发布包,各ISO发布包含义可参考[系统安装](../../releasenotes/releasenotes/os_installation.md)。本操作中忽略具体的版本号和架构,请根据实际需要的ISO发布包和校验文件进行修改。 +>>>>>>>> 6b124a04c (文档整改):docs/zh/server/development/application_dev/preparations_for_development_environment.md 1. 下载ISO发布包。 - 通过跨平台文件传输工具下载ISO镜像。 diff --git a/docs/zh/server/development/application_dev/using-clang-for-compilation.md b/docs/zh/server/development/application_dev/using_clang_for_compilation.md similarity index 92% rename from docs/zh/server/development/application_dev/using-clang-for-compilation.md rename to docs/zh/server/development/application_dev/using_clang_for_compilation.md index 4549e1759fa3196712ef58b6fcbacf76e0585c70..66ccb6fc3f1cb8da28e7e9ef201f264dcc97cd6f 100644 --- a/docs/zh/server/development/application_dev/using-clang-for-compilation.md +++ b/docs/zh/server/development/application_dev/using_clang_for_compilation.md @@ -2,16 +2,6 @@ 本章介绍LLVM/Clang编译的一些基本知识,并通过示例进行实际演示。更多Clang使用方法请通过**clang --help**命令查询。 - - -- [使用LLVM/Clang编译](#使用llvmclang编译) - - [简介](#简介) - - [LLVM/Clang多版本安装](#LLVMClang多版本安装) - - [使用示例](#使用示例) - - [手动构建支持](#手动构建支持) - - - ## 简介 LLVM是一种涵盖多种编程语言和目标处理器的编译器,使用Clang作为C和C++的编译和驱动程序。Clang不仅仅可以将C/C++程序编译为LLVM中间表示的IR,也会调用所有以代码生成为目标的LLVM优化遍,直到生成最终的二进制文件。 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 similarity index 97% rename from docs/zh/server/development/application_dev/using-gcc-for-compilation.md rename to docs/zh/server/development/application_dev/using_gcc_for_compilation.md index fc8dc941937f8da2d7dee7101c87a73ef47e95d0..45626654b5f85018ceaf91d5e3f5338b338dc131 100644 --- a/docs/zh/server/development/application_dev/using-gcc-for-compilation.md +++ b/docs/zh/server/development/application_dev/using_gcc_for_compilation.md @@ -1,24 +1,6 @@ # 使用GCC编译 本章介绍GCC编译的一些基本知识,并通过示例进行实际演示。更多的GCC知识请通过**man gcc**命令查询。 - - -- [使用GCC编译](#使用gcc编译) - - [简介](#简介) - - [基本规则](#基本规则) - - [文件类型](#文件类型) - - [编译流程](#编译流程) - - [编译选项](#编译选项) - - [多源文件编译](#多源文件编译) - - [库](#库) - - [动态链接库](#动态链接库) - - [静态链接库](#静态链接库) - - [示例](#示例) - - [使用GCC编译C程序示例](#使用gcc编译c程序示例) - - [使用GCC创建和使用动态链接库示例](#使用gcc创建和使用动态链接库示例) - - [使用GCC创建和使用静态链接库示例](#使用gcc创建和使用静态链接库示例) - - ## 简介 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 similarity index 98% rename from docs/zh/server/development/application_dev/using-jdk-for-compilation.md rename to docs/zh/server/development/application_dev/using_jdk_for_compilation.md index 374e878238546758c796e0d27bc0c39d46a4f699..3917899b1a43bfdf153e58558fa79cc2ece1ef8c 100644 --- a/docs/zh/server/development/application_dev/using-jdk-for-compilation.md +++ b/docs/zh/server/development/application_dev/using_jdk_for_compilation.md @@ -1,20 +1,4 @@ # 使用JDK编译 - - -- [使用JDK编译](#使用jdk编译) - - [简介](#简介) - - [基本规则](#基本规则) - - [文件类型及工具](#文件类型及工具) - - [java程序生成流程](#java程序生成流程) - - [JDK常用工具选项](#jdk常用工具选项) - - [类库](#类库) - - [包的声明](#包的声明) - - [包的引用](#包的引用) - - [示例](#示例) - - [编译不带包的java程序示例](#编译不带包的java程序示例) - - [编译带包的java程序示例](#编译带包的java程序示例) - - ## 简介 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 similarity index 97% rename from docs/zh/server/development/application_dev/using-make-for-compilation.md rename to docs/zh/server/development/application_dev/using_make_for_compilation.md index 175a69a57e1e13aa8e08d8728b697a5affb5b480..98e0b61ccfdf0ebab20566f9f934087790b4362d 100644 --- a/docs/zh/server/development/application_dev/using-make-for-compilation.md +++ b/docs/zh/server/development/application_dev/using_make_for_compilation.md @@ -1,21 +1,6 @@ # 使用make编译 本章介绍make编译的一些基本知识,并通过示例进行实际演示。更多的make选项请通过**make --help**命令查询,或者查看GNU官方文档。 - - -- [使用make编译](#使用make编译) - - [简介](#简介) - - [基本规则](#基本规则) - - [文件类型](#文件类型) - - [make工作流程](#make工作流程) - - [make选项](#make选项) - - [Makefile](#makefile) - - [Makefile结构](#makefile结构) - - [Makefile主要内容](#makefile主要内容) - - [示例](#示例) - - [使用Makefile实现编译的示例](#使用makefile实现编译的示例) - - ## 简介 diff --git a/docs/zh/server/development/gcc/_toc.yaml b/docs/zh/server/development/gcc/_toc.yaml index 7f0c409947bcf89cb1c1f230dce67e3ee81ac97d..45aaeacbc8039f52adb471c9cd1f85d12244d0dc 100644 --- a/docs/zh/server/development/gcc/_toc.yaml +++ b/docs/zh/server/development/gcc/_toc.yaml @@ -6,4 +6,6 @@ sections: href: ./overview.md sections: - label: 内核反馈优化特性 - href: ./kernel-fdo-user-guide.md + href: ./kernel_fdo_user_guide.md + - label: 全场景链接时二进制库内联优化 + href: ./link_time_binary_library_inlining_optimization.md \ No newline at end of file diff --git a/docs/zh/server/development/gcc/kernel-fdo-user-guide.md b/docs/zh/server/development/gcc/kernel_fdo_user_guide.md similarity index 99% rename from docs/zh/server/development/gcc/kernel-fdo-user-guide.md rename to docs/zh/server/development/gcc/kernel_fdo_user_guide.md index 512aa83748e147b3c1c25d790e9d528822cf2e99..952c29d9c7d95a6038add93d129efe65204d091f 100644 --- a/docs/zh/server/development/gcc/kernel-fdo-user-guide.md +++ b/docs/zh/server/development/gcc/kernel_fdo_user_guide.md @@ -1,4 +1,5 @@ # 内核反馈优化特性用户指南 + ## 简介 内核反馈优化(PGO kernel)特性为内核提供了反馈优化能力的支持,使用户可以为不同的应用程序构建针对性优化的内核,在单应用场景下提高目标应用的性能。同时,该特性一并在openEuler GCC内提供了相应的编译支持,以及在A-FOT中提供了自动优化的功能,使用户能够便捷地使能内核反馈优化特性。 diff --git "a/docs/zh/server/development/gcc/\345\205\250\345\234\272\346\231\257\351\223\276\346\216\245\346\227\266\344\272\214\350\277\233\345\210\266\345\272\223\345\206\205\350\201\224\344\274\230\345\214\226.md" b/docs/zh/server/development/gcc/link_time_binary_library_inlining_optimization.md similarity index 99% rename from "docs/zh/server/development/gcc/\345\205\250\345\234\272\346\231\257\351\223\276\346\216\245\346\227\266\344\272\214\350\277\233\345\210\266\345\272\223\345\206\205\350\201\224\344\274\230\345\214\226.md" rename to docs/zh/server/development/gcc/link_time_binary_library_inlining_optimization.md index 77f2c0322852e272720948b4a3e6fe452de09b2e..f1cc1398d10547db09c8a995886ab0a7a43abfb4 100644 --- "a/docs/zh/server/development/gcc/\345\205\250\345\234\272\346\231\257\351\223\276\346\216\245\346\227\266\344\272\214\350\277\233\345\210\266\345\272\223\345\206\205\350\201\224\344\274\230\345\214\226.md" +++ b/docs/zh/server/development/gcc/link_time_binary_library_inlining_optimization.md @@ -27,8 +27,6 @@ gcc-ar rcs liba.a fa.o gcc -O2 -fPIC -flto -fmulti-version-lib=liba.a main.c liba.a -o exe ~~~ - - ## 选项 -finline-force= ### 说明 @@ -56,4 +54,3 @@ gcc -O2 -fPIC -flto -c fa.c -o fa.o gcc-ar rcs liba.a fa.o gcc -O2 -fPIC -flto -finline -force=liba.a main.c liba.a -o exe ~~~ - diff --git a/docs/zh/server/diversified_computing/dpu_offload/_toc.yaml b/docs/zh/server/diversified_computing/dpu_offload/_toc.yaml index b8f72c6912b9c86a717789a72ddeca19bb1ed8b3..b3532fcd6004942e434555512ffea706269d4f3f 100644 --- a/docs/zh/server/diversified_computing/dpu_offload/_toc.yaml +++ b/docs/zh/server/diversified_computing/dpu_offload/_toc.yaml @@ -3,13 +3,13 @@ isManual: true description: 介绍基于openEuler操作系统的容器管理面DPU无感卸载功能特性及安装部署方法 sections: - label: 直连聚合环境搭建 - href: ./libvirt-direct-connection-management-plane-offload.md + href: ./libvirt_direct_connection_aggregation_environment_establishment.md - label: qtfs共享文件系统架构 - href: ./qtfs-architecture-and-usage.md + href: ./qtfs_architecture_and_usage.md - label: 容器管理面DPU无感卸载 href: ./overview.md sections: - label: 容器管理面无感卸载部署介绍 - href: ./offload-deployment-introduction.md + href: ./imperceptible_container_management_plane_offload.md - label: 容器管理面无感卸载部署指导 - href: ./offload-deloyment-guide.md + href: ./offload_deployment_guide.md diff --git a/docs/zh/server/diversified_computing/dpu_offload/offload-deployment-introduction.md b/docs/zh/server/diversified_computing/dpu_offload/imperceptible_container_management_plane_offload.md similarity index 97% rename from docs/zh/server/diversified_computing/dpu_offload/offload-deployment-introduction.md rename to docs/zh/server/diversified_computing/dpu_offload/imperceptible_container_management_plane_offload.md index 1a9a760b7174decd316bbd83747f7fa263619605..695aad726c184805e4df0b36adcd7053379ec618 100644 --- a/docs/zh/server/diversified_computing/dpu_offload/offload-deployment-introduction.md +++ b/docs/zh/server/diversified_computing/dpu_offload/imperceptible_container_management_plane_offload.md @@ -20,11 +20,11 @@ DPU的出现就是为了将这部分算力资源从主机CPU上解放出来, * 通信层:DPU和主机之间可能通过PCIe或网络进行通信,需要基于底层物理连接提供通信接口层,为上层业务提供通信接口。 -* 内核共享文件系统qtfs:容器管理面组件kubelet、dockerd与容器进程之间的主要交互通过文件系统进行;管理面工具需要为容器进程准备rootfs、volume等数据面路径;还需要在运行时通过proc文件系统、cgroup文件系统等控制和监控容器进程的资源及状态。共享文件系统的详细介绍参考[共享文件系统介绍](./qtfs-architecture-and-usage.md) +* 内核共享文件系统qtfs:容器管理面组件kubelet、dockerd与容器进程之间的主要交互通过文件系统进行;管理面工具需要为容器进程准备rootfs、volume等数据面路径;还需要在运行时通过proc文件系统、cgroup文件系统等控制和监控容器进程的资源及状态。共享文件系统的详细介绍参考[共享文件系统介绍](qtfs_architecture_and_usage.md) * 用户态卸载环境:用户态需要使用qtfs为容器管理面准备卸载后的运行时环境,将主机的容器管理及运行时相关目录远程挂载到DPU;另外由于需要挂载proc、sys、cgroup等系统管理文件系统,为防止对DPU原生系统功能的破坏,上述挂载动作都在chroot环境内完成。另外管理面(运行于DPU)和容器进程(运行于主机)之间仍存在调用关系,需要通过远程二进制执行工具(rexec)提供对应功能。 -容器管理面无感卸载的操作步骤可参考[部署指导文档](./offload-deloyment-guide.md) +容器管理面无感卸载的操作步骤可参考[部署指导文档](./offload_deployment_guide.md) > ![](./public_sys-resources/icon-note.gif)**说明**: > diff --git a/docs/zh/server/diversified_computing/dpu_offload/libvirt-direct-connection-management-plane-offload.md b/docs/zh/server/diversified_computing/dpu_offload/libvirt_direct_connection_aggregation_environment_establishment.md similarity index 83% rename from docs/zh/server/diversified_computing/dpu_offload/libvirt-direct-connection-management-plane-offload.md rename to docs/zh/server/diversified_computing/dpu_offload/libvirt_direct_connection_aggregation_environment_establishment.md index 8ccf6943bfae6b1c05267d4abf4e0a5ddcdea05d..5b01719913a968b6cf0a9533b130522018bc717b 100644 --- a/docs/zh/server/diversified_computing/dpu_offload/libvirt-direct-connection-management-plane-offload.md +++ b/docs/zh/server/diversified_computing/dpu_offload/libvirt_direct_connection_aggregation_environment_establishment.md @@ -15,12 +15,10 @@ 目前还未基于真实的支持DPU vsock的环境调试过,本文档当前仅描述基于测试模式的方法,下面的内容依然默认使用测试模式。 - # **2** libvirt卸载架构图 ![arch](./figures/arch.png) - # **3** 环境搭建 ## **3.1** QTFS文件系统部署 @@ -97,7 +95,7 @@ nohup /usr/bin/udsproxyd 1 192.168.10.11 12121 192.168.10.10 12121 2>&1 & 首先为qtfs配置uds服务的白名单,这里说的白名单是unix socket的server端bind的sock文件地址,例如libvirt的虚拟机建立的unix socket的服务端文件地址都在/var/lib/libvirt下,则我们需要增加一条白名单路径为/var/lib/libvirt/,提供两种方式供选择: -a) 通过配置工具qtcfg加载,进入qtfs/qtinfo目录编译工具: +a) 通过配置工具qtcfg加载,进入qtfs/qtinfo目录编译工具: 在qtfs的client端执行 @@ -139,7 +137,7 @@ qtcfg -y 0 ``` 删除白名单时,参数为查询白名单时列出来的index序号。 -b) 通过配置文件增加,这需要在qtfs或qtfs_server内核模块加载前配置,通过内核模块初始化时读取该文件进行白名单配置。 +b) 通过配置文件增加,这需要在qtfs或qtfs_server内核模块加载前配置,通过内核模块初始化时读取该文件进行白名单配置。 >![](./public_sys-resources/icon-note.gif) **说明:** >白名单是为了防止不相干的unix socket链接也进行远程连接产生错误,或者浪费不必要的资源,所以白名单尽量设置得精确一些,比如本文中针对libvirt场景设置为/var/lib/libvirt/比较好,而直接将/var/lib/或/var/或直接将根目录加入的做法是有较大风险的。 @@ -235,9 +233,9 @@ HOST需要放置虚拟机镜像,后面通过qtfs挂载到client端共享给lib #### 3.4.2.1 创建chroot环境 -a) 从openEuler官网下载qcow镜像,例如23.09版本https://repo.openeuler.org/openEuler-23.09/virtual_machine_img/。 +a) 从openEuler官网下载qcow镜像,例如23.09版本https://repo.openeuler.org/openEuler-23.09/virtual_machine_img/。 -b) 将qcow2挂载出来: +b) 将qcow2挂载出来: ```bash @@ -259,7 +257,7 @@ qemu-nbd -d /dev/nbd0 ``` -c) 此时new_root_origin有解压出来的镜像根目录,再将new_root绑定挂载到该目录上,作为chroot的根目录挂载点: +c) 此时new_root_origin有解压出来的镜像根目录,再将new_root绑定挂载到该目录上,作为chroot的根目录挂载点: ```bash @@ -271,7 +269,7 @@ mount --bind /root/new_root_origin /root/new_root 此处介绍patch方式源码编译,如果计算提供rpm包则参考计算提供的安装方法。 -a) 进入chroot环境,安装编译环境和常用工具: +a) 进入chroot环境,安装编译环境和常用工具: ```bash @@ -281,7 +279,7 @@ yum install -y vim meson qemu qemu-img strace edk2-aarch64 tar ``` 其中edk2-aarch64是arm环境下虚拟机启动需要的。 -b) 安装libvirt编译需要的依赖包: +b) 安装libvirt编译需要的依赖包: ```bash @@ -289,15 +287,15 @@ yum install -y rpcgen python3-docutils glib2-devel gnutls-devel libxml2-devel li ``` -c) 下载libvirt-x.x.x。源码包:https://libvirt.org/sources/libvirt-x.x.x.tar.xz。 +c)下载libvirt-x.x.x。源码包:https://libvirt.org/sources/libvirt-x.x.x.tar.xz。 -d) 获取直连聚合libvirt patch: +d) 获取直连聚合libvirt patch: https://gitee.com/openeuler/dpu-utilities/tree/master/usecases/transparent-offload/patches/libvirt -e) 将源码包解压到chroot环境下的目录,如/home。将patch打上。 +e)将源码包解压到chroot环境下的目录,如/home。将patch打上。 -f) 进入libvirt-x.x.x目录。 +f) 进入libvirt-x.x.x目录。 ```bash @@ -305,7 +303,7 @@ meson build --prefix=/usr -Ddriver_remote=enabled -Ddriver_network=enabled -Ddri ``` -g) 安装成功 +g) 安装成功 ```bash @@ -317,24 +315,24 @@ ninja -C build install libvirt直连聚合卸载模式,需要从chroot内启动libvirtd服务,首先需要把chroot之外的libvirtd服务停掉。 -a) 放置虚拟机跳板脚本在chroot环境下的/usr/bin和/usr/libexec下:[qemu-kvm](./scripts/qemu-kvm)。替换原同名二进制,这个跳板脚本就是用于调用rexec拉起远端虚拟机。 +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服务,则不需要。 +b) 将udsproxyd编译时附带产生的libudsproxy.so拷贝到本chroot目录下/usr/lib64下,如果配置qtfs的uds白名单方式使用udsproxyd服务,则不需要。 -c) 将前面rexec编译产生的rexec二进制放置到本chroot的/usr/bin/目录下。 +c) 将前面rexec编译产生的rexec二进制放置到本chroot的/usr/bin/目录下。 -d) 配置chroot的挂载环境,需要挂载一些目录,使用如下配置脚本: +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) 脚本中挂载目录位置都是按照本文档前文创建目录位置与名称为准,如果有修改需要同步适配修改脚本。 +e) 脚本中挂载目录位置都是按照本文档前文创建目录位置与名称为准,如果有修改需要同步适配修改脚本。 -f) 配置好chroot环境后,进入chroot环境,手动拉起libvirtd。 +f) 配置好chroot环境后,进入chroot环境,手动拉起libvirtd。 未配置qtfs使用udsproxyd白名单的拉起方式: @@ -369,7 +367,7 @@ qtcfg -z ### 3.5.1 虚拟机define -a) 将虚拟机启动镜像放置在HOST侧某目录,例如: +a) 将虚拟机启动镜像放置在HOST侧某目录,例如: ```bash @@ -377,7 +375,7 @@ a) 将虚拟机启动镜像放置在HOST侧某目录,例如: ``` -b) 使用qtfs将这个目录挂载到DPU侧: +b) 使用qtfs将这个目录挂载到DPU侧: ```bash @@ -385,11 +383,11 @@ mount -t qtfs /home/VMs /home/VMs ``` -c) xml中使用`/home/VMs/Domain_name`作为启动镜像,这样在DPU和HOST侧看到的都是同一个镜像文件(Domain_name是虚拟机domain的名字)。 +c)xml中使用`/home/VMs/Domain_name`作为启动镜像,这样在DPU和HOST侧看到的都是同一个镜像文件(Domain_name是虚拟机domain的名字)。 -d) 检查xml中\是否指向了跳板脚本。 +d) 检查xml中\是否指向了跳板脚本。 -e) 执行以下命令。 +e) 执行以下命令。 ```bash diff --git a/docs/zh/server/diversified_computing/dpu_offload/offload-deloyment-guide.md b/docs/zh/server/diversified_computing/dpu_offload/offload_deployment_guide.md similarity index 98% rename from docs/zh/server/diversified_computing/dpu_offload/offload-deloyment-guide.md rename to docs/zh/server/diversified_computing/dpu_offload/offload_deployment_guide.md index c15eed9c1fef689e3bb0f379c0e67582e9509ec7..89fa04778550585917261167a633660bde6660b8 100644 --- a/docs/zh/server/diversified_computing/dpu_offload/offload-deloyment-guide.md +++ b/docs/zh/server/diversified_computing/dpu_offload/offload_deployment_guide.md @@ -25,7 +25,7 @@ rexec是一个用go语言开发的远程执行工具,基于docker/libchan下的[rexec](https://github.com/docker/libchan/tree/master/examples/rexec)示例工具改造而成,实现远程调用远端二进制的功能,为方便使用在rexec中增加了环境变量传递和监控原进程退出等能力。 -rexec工具的具体使用方式为在服务器端用`CMD_NET_ADDR=tcp://0.0.0.0:<端口号> rexec_server`的方式拉起rexec服务进程,然后在客户端用`CMD_NET_ADDR=tcp://<服务端ip>:<端口号> rexec [要执行的指令] `的方式启动,便可以调用rexec_server执行需要执行的指令,并等待指令执行结果返回。 +rexec工具的具体使用方式为在服务器端用`CMD_NET_ADDR=tcp://0.0.0.0:<端口号> rexec_server`的方式拉起rexec服务进程,然后在客户端用`CMD_NET_ADDR=tcp://<服务端ip>:<端口号> rexec [要执行的指令]`的方式启动,便可以调用rexec_server执行需要执行的指令,并等待指令执行结果返回。 #### dockerd相关改动介绍 @@ -53,7 +53,7 @@ kubelet暂不需要功能性改动,可能会遇到容器QoS管理器首次设 在服务器端和客户端,都要拉起rexec_server。服务器端拉起rexec_server,主要是用于客户端创建容器时用rexec拉起containerd-shim,而客户端拉起rexec_server,则是为了执行containerd-shim对dockerd和containerd的调用。 -#### 服务器端 +### 服务器端 创建容器管理面所需要的文件夹,然后插入qtfs_server.ko,并拉起engine进程。 @@ -134,6 +134,7 @@ CMD_NET_ADDR=tcp://<服务端ip>: /usr/bin/rexec /usr/bin/kill $ ``` * /another_rootfs/usr/sbin/modprobe + ``` shell #!/bin/bash CMD_NET_ADDR=tcp://<服务端ip>: /usr/bin/rexec /usr/sbin/modprobe $* @@ -142,12 +143,14 @@ CMD_NET_ADDR=tcp://<服务端ip>: /usr/bin/rexec /usr/sbin/modpr 在chroot到dockerd和containerd运行所需的rootfs后,用如下的命令拉起dockerd和containerd * containerd + ``` shell #!/bin/bash SHIM_HOST=<服务端ip> containerd --config /var/run/docker/containerd/containerd.toml --address /var/run/containerd/containerd.sock ``` * dockerd + ``` shell #!/bin/bash SHIM_HOST=<服务端ip> CMD_NET_ADDR=tcp://<服务端ip>: /usr/bin/dockerd --containerd /var/run/containerd/containerd.sock 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 similarity index 100% rename from docs/zh/server/diversified_computing/dpu_offload/qtfs-architecture-and-usage.md rename to docs/zh/server/diversified_computing/dpu_offload/qtfs_architecture_and_usage.md diff --git a/docs/zh/server/diversified_computing/dpu_os/_toc.yaml b/docs/zh/server/diversified_computing/dpu_os/_toc.yaml index 738bbbd6fe1f57a92d5ee930b8b436e7e745b967..4985e0235e0aadef8badd5da2e810e5a26ec1145 100644 --- a/docs/zh/server/diversified_computing/dpu_os/_toc.yaml +++ b/docs/zh/server/diversified_computing/dpu_os/_toc.yaml @@ -3,8 +3,8 @@ isManual: true description: 介绍基于openEuler操作系统裁剪构建DPU-OS镜像的方法以及部署验证方法 sections: - label: DPU-OS背景与需求 - href: ./dpu-os-background-and-requirements.md + href: ./dpu_os_background_and_requirements.md - label: DPU-OS裁剪指导 - href: ./dpu-os-tailoring-guide.md + href: ./dpu_os_tailoring_guide.md - label: 验证与部署 - href: ./verification-and-deployment.md + href: ./verification_and_deployment.md diff --git a/docs/zh/server/diversified_computing/dpu_os/dpu-os-background-and-requirements.md b/docs/zh/server/diversified_computing/dpu_os/dpu_os_background_and_requirements.md similarity index 95% rename from docs/zh/server/diversified_computing/dpu_os/dpu-os-background-and-requirements.md rename to docs/zh/server/diversified_computing/dpu_os/dpu_os_background_and_requirements.md index 2b8d724a0f3e1556b4a6e88f611359484a5094e0..45b0da57057ff349d2b53fb0f68b6b88273fde6d 100644 --- a/docs/zh/server/diversified_computing/dpu_os/dpu-os-background-and-requirements.md +++ b/docs/zh/server/diversified_computing/dpu_os/dpu_os_background_and_requirements.md @@ -10,7 +10,7 @@ DPU (Data Processing Unit) 的出现就是为了将这部分算力资源从主 ## DPU-OS需求分析及设计 -#### DPU现状及对OS需求 +### DPU现状及对OS需求 DPU普遍具有以下特点和问题: @@ -60,7 +60,7 @@ DPU普遍具有以下特点和问题: 通过上述五层设计达成轻量化、极致性能DPU-OS的目标。该方案为相对长期设计,且对DPU相关软硬件生态有较强的依赖;当前第一阶段先实现基于openEuler imageTailor进行裁剪。 -DPU-OS的裁剪步骤可参考[DPU-OS裁剪指导文档](./dpu-os-tailoring-guide.md),验证与部署可参考[DPU-OS部署验证指导文档](./verification-and-deployment.md)。 +DPU-OS的裁剪步骤可参考[DPU-OS裁剪指导文档](./dpu_os_tailoring_guide.md),验证与部署可参考[DPU-OS部署验证指导文档](./verification_and_deployment.md)。 > ![](./public_sys-resources/icon-note.gif)**说明**: > diff --git a/docs/zh/server/diversified_computing/dpu_os/dpu-os-tailoring-guide.md b/docs/zh/server/diversified_computing/dpu_os/dpu_os_tailoring_guide.md similarity index 96% rename from docs/zh/server/diversified_computing/dpu_os/dpu-os-tailoring-guide.md rename to docs/zh/server/diversified_computing/dpu_os/dpu_os_tailoring_guide.md index f413bcc9322b33a2b5e9aee8f2cb1366eb9ea6cc..f04cdb77d28380066ecb30d3cf8a6de4b74da6f2 100644 --- a/docs/zh/server/diversified_computing/dpu_os/dpu-os-tailoring-guide.md +++ b/docs/zh/server/diversified_computing/dpu_os/dpu_os_tailoring_guide.md @@ -2,7 +2,7 @@ 本文档主要介绍`imageTailor`的使用方法并结合[dpu-utilities仓库](https://gitee.com/openeuler/dpu-utilities/tree/master/dpuos)的`dpuos`配置文件裁剪得到`dpuos`的安装镜像,具体步骤如下: -#### 准备imageTailor和所需的rpm包 +## 准备imageTailor和所需的rpm包 参照[imageTailor使用指导文档](https://docs.openeuler.org/zh/docs/24.03_LTS_SP1/docs/TailorCustom/imageTailor%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97.html)安装好`imageTailor`工具并将裁剪所要用到的rpm包准备好。 @@ -14,7 +14,7 @@ yum install -y --downloadonly --downloaddir=./ install-scripts ``` -#### 拷贝dpuos相关的配置文件 +### 拷贝dpuos相关的配置文件 `imageTailor`工具默认安装在`/opt/imageTailor`路径下。执行下面的命令将`dpuos`的配置拷贝到对应的路径下,拷贝时选择对应架构目录。当前DPU-OS裁剪配置库支持x86_64和aarch64两种架构。 diff --git a/docs/zh/server/diversified_computing/dpu_os/verification-and-deployment.md b/docs/zh/server/diversified_computing/dpu_os/verification_and_deployment.md similarity index 98% rename from docs/zh/server/diversified_computing/dpu_os/verification-and-deployment.md rename to docs/zh/server/diversified_computing/dpu_os/verification_and_deployment.md index c32bad0d040efd8b9ae0329d1b36c4844a180c23..7d4264b74db49fa9c2cdaca04f34207f380463f3 100644 --- a/docs/zh/server/diversified_computing/dpu_os/verification-and-deployment.md +++ b/docs/zh/server/diversified_computing/dpu_os/verification_and_deployment.md @@ -6,7 +6,7 @@ DPU-OS制作完成后可以安装部署进行验证。由于目前DPU硬件还 本章节展示了如何在VirtualBox虚拟机管理程序上安装部署DPU-OS。 -#### 验证准备 +### 验证准备 在开始部署 DPU-OS 之前,需要做如下准备工作: diff --git a/docs/zh/server/high_availability/ha/_toc.yaml b/docs/zh/server/high_availability/ha/_toc.yaml index 7ca0cb2f56f13a44a3f3a0876a866d106c6bb0b3..16da9a6d1b4a343868c229a47a5fcb431f6bddcd 100644 --- a/docs/zh/server/high_availability/ha/_toc.yaml +++ b/docs/zh/server/high_availability/ha/_toc.yaml @@ -6,6 +6,6 @@ sections: href: ./ha.md sections: - label: HA 安装与部署 - href: ./ha-installation-and-deployment.md + href: ./ha_installation_and_deployment.md - label: HA 使用实例 - href: ./ha-usecase-examples.md + href: ./ha_usacase_examples.md 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 similarity index 100% rename from docs/zh/server/high_availability/ha/ha-installation-and-deployment.md rename to docs/zh/server/high_availability/ha/ha_installation_and_deployment.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 similarity index 100% rename from docs/zh/server/high_availability/ha/ha-usecase-examples.md rename to docs/zh/server/high_availability/ha/ha_usecase_examples.md diff --git a/docs/zh/server/installation_upgrade/installation/_toc.yaml b/docs/zh/server/installation_upgrade/installation/_toc.yaml index c1f2306e8222271e74e511b8838a2cb181394572..a5a56fb59235ea2130b6cc2e26371299dc5dca03 100644 --- a/docs/zh/server/installation_upgrade/installation/_toc.yaml +++ b/docs/zh/server/installation_upgrade/installation/_toc.yaml @@ -3,38 +3,42 @@ isManual: true description: 安装 openEuler 操作系统 sections: - label: 安装在服务器 - href: ./installation-on-servers.md + href: ./installation_on_servers.md sections: - label: 安装准备 - href: ./installation-preparations.md + href: ./installation_preparations.md - label: 安装方式介绍 - href: ./installation-modes.md + href: ./installation_modes.md - label: 安装指导 - href: ./installation-guide.md + href: ./installation_guide.md - label: 使用kickstart自动化安装 - href: ./using-kickstart-for-automatic-installation.md + href: ./using_kickstart_for_automatic_installation.md + - label: 常见问题与解决方法 + href: ./common_questions_and_solutions.md - label: 安装在树莓派 - href: ./install-pi.md + href: ./install_pi.md sections: - label: 安装准备 - href: ./installation-preparations-1.md + href: ./installation_preparations_1.md - label: 安装方式介绍 - href: ./installation-modes-1.md + href: ./installation_modes_1.md - label: 安装指导 - href: ./installation-guide-1.md + href: ./installation_guide_1.md - label: 使用kickstart自动化安装 - href: ./using-kickstart-for-automatic-installation.md + href: ./using_kickstart_for_automatic_installation.md - label: 更多资源 - href: ./more-resources.md + href: ./more_resources.md + - label: 常见问题与解决方法 + href: ./common_questions_and_solutions_1.md - label: 安装在RISC-V - href: ./risc-v.md + href: ./risc_v.md sections: - label: 在QEMU上安装 - href: ./risc-v-qemu.md + href: ./risc_v_qemu.md - label: 在PioneerBox上安装 - href: ./RISC-V-Pioneer1.3.md + href: ./risc_v_pioneer1.3.md - label: 在LicheePiA上安装 - href: ./RISC-V-LicheePi4A.md - - label: RISCV-OLK6.6同源版本指南 - href: ./RISCV-OLK6.6-Homologous-Version.md + href: ./risc_v_licheepi4a.md + - label: riscv-olk6.6同源版本指南 + href: ./riscv_olk6.6_homologous_version.md \ No newline at end of file diff --git a/docs/zh/server/installation_upgrade/installation/common-questions-and-solutions.md b/docs/zh/server/installation_upgrade/installation/common_questions_and_solutions.md similarity index 100% rename from docs/zh/server/installation_upgrade/installation/common-questions-and-solutions.md rename to docs/zh/server/installation_upgrade/installation/common_questions_and_solutions.md diff --git a/docs/zh/server/installation_upgrade/installation/common-questions-and-solutions-1.md b/docs/zh/server/installation_upgrade/installation/common_questions_and_solutions_1.md similarity index 100% rename from docs/zh/server/installation_upgrade/installation/common-questions-and-solutions-1.md rename to docs/zh/server/installation_upgrade/installation/common_questions_and_solutions_1.md diff --git a/docs/zh/server/installation_upgrade/installation/install-pi.md b/docs/zh/server/installation_upgrade/installation/install_pi.md similarity index 100% rename from docs/zh/server/installation_upgrade/installation/install-pi.md rename to docs/zh/server/installation_upgrade/installation/install_pi.md diff --git a/docs/zh/server/installation_upgrade/installation/installation-guide.md b/docs/zh/server/installation_upgrade/installation/installation_guide.md similarity index 97% rename from docs/zh/server/installation_upgrade/installation/installation-guide.md rename to docs/zh/server/installation_upgrade/installation/installation_guide.md index c724509883facc1466f47232e98d58e06354076a..a4ebc1db4da352cba5e73daa098a38e733d9b283 100644 --- a/docs/zh/server/installation_upgrade/installation/installation-guide.md +++ b/docs/zh/server/installation_upgrade/installation/installation_guide.md @@ -47,8 +47,8 @@ - Test this media & install openEuler {version} —— 默认选项,在您的服务器上使用图形用户界面模式安装,但在启动安装程序前会进行安装介质的完整性检查。 - Troubleshooting —— 问题定位模式,系统无法正常安装时使用。进入问题定位模式后,有如下两个选项。 - - Install openEuler {version} in basic graphics mode —— 简单图形安装模式,该模式下在系统启动并运行之前不启动视频驱动程序。 - - Rescue the openEuler system —— 救援模式,用于修复系统。该模式下输出定向到VNC或BMC(Baseboard Management Controller)端,串口不可用。 + - Install openEuler {version} in basic graphics mode —— 简单图形安装模式,该模式下在系统启动并运行之前不启动视频驱动程序。 + - Rescue the openEuler system —— 救援模式,用于修复系统。该模式下输出定向到VNC或BMC(Baseboard Management Controller)端,串口不可用。 在安装引导界面,按“e”进入已选选项的参数编辑界面,按“c”进入命令行模式。 @@ -139,7 +139,7 @@ - 当使用网络源进行安装的时候,需设置网络源的 URL。 - - http 或 https 方式 + - http 或 https 方式 http 或 https 方式的安装源如下图所示。输入框内容以实际版本发布的安装源地址为准,如`https://repo.openeuler.org/openEuler-{version}/OS/$basearch/`,其中 version 为版本号,$basearch 为CPU 架构,可根据实际情况输入。 @@ -147,7 +147,7 @@ 如果https服务器使用的是私有证书,则需要在安装引导界面按“e”进入已选选项的参数编辑界面,在参数中增加 inst.noverifyssl 参数。 - - ftp 方式 + - ftp 方式 ftp 方式的安装源如下图所示,输入框内容根据的 ftp 地址输入。 @@ -155,7 +155,7 @@ ftp服务器需要用户自己搭建,将iso镜像进行挂载,挂载出的文件拷贝到ftp的共享目录中。其中x86_64为CPU 架构,可根据实际情况使用镜像。 - - nfs 方式 + - nfs 方式 nfs 方式的安装源如下图所示,输入框内容根据的 nfs 地址输入。 diff --git a/docs/zh/server/installation_upgrade/installation/installation-guide-1.md b/docs/zh/server/installation_upgrade/installation/installation_guide_1.md similarity index 99% rename from docs/zh/server/installation_upgrade/installation/installation-guide-1.md rename to docs/zh/server/installation_upgrade/installation/installation_guide_1.md index bd0b4f268fe6993ceb10dbd549bb10138bc5cf03..c7bca2c0d99ceed232d449151321600a9c9ae0b8 100644 --- a/docs/zh/server/installation_upgrade/installation/installation-guide-1.md +++ b/docs/zh/server/installation_upgrade/installation/installation_guide_1.md @@ -1,6 +1,6 @@ # 安装指导 -本章介绍将“[树莓派镜像刷写入 SD 卡](./installation-modes-1.md)”后,启用树莓派的主要过程。 +本章介绍将“[树莓派镜像刷写入 SD 卡](./installation_modes_1.md)”后,启用树莓派的主要过程。 ## 启动系统 diff --git a/docs/zh/server/installation_upgrade/installation/installation-modes.md b/docs/zh/server/installation_upgrade/installation/installation_modes.md similarity index 98% rename from docs/zh/server/installation_upgrade/installation/installation-modes.md rename to docs/zh/server/installation_upgrade/installation/installation_modes.md index 962f2441360d173d59f2c17829ed6dcc05883ef1..b5eb9b01028f4b0ab06015c509f10b14dc1e8a14 100644 --- a/docs/zh/server/installation_upgrade/installation/installation-modes.md +++ b/docs/zh/server/installation_upgrade/installation/installation_modes.md @@ -164,7 +164,8 @@ 5. 创建虚拟机。 6. 启动虚拟机。 -各步骤详细的操作请参考《[虚拟化用户指南](../../..//virtulization/virtulization_platform/virtulization/introduction_to_virtualization.md)》。 +各步骤详细的操作请参考《[虚拟化用户指南](../../../../zh/virtualization/virtualization_platform/virtualization/introduction_to_virtualization.md)》。 + ## 通过私有镜像安装 diff --git a/docs/zh/server/installation_upgrade/installation/installation-modes-1.md b/docs/zh/server/installation_upgrade/installation/installation_modes_1.md similarity index 98% rename from docs/zh/server/installation_upgrade/installation/installation-modes-1.md rename to docs/zh/server/installation_upgrade/installation/installation_modes_1.md index 7dc248f947c49b238b4dc199ddd36c0a05b899a4..38331efd8227dff4dc0474f9424968593cf720eb 100644 --- a/docs/zh/server/installation_upgrade/installation/installation-modes-1.md +++ b/docs/zh/server/installation_upgrade/installation/installation_modes_1.md @@ -4,7 +4,7 @@ > >- 硬件仅支持树莓派 3B/3B+/4B/400。 >- 采用刷写镜像到 SD 卡方式安装。本章节提供 Windows/Linux/Mac 上刷写镜像的操作方法。 ->- 本章节使用的镜像是参考“[安装准备](./installation-preparations-1.md)”获取 openEuler 的树莓派版本镜像。 +>- 本章节使用的镜像是参考“[安装准备](./installation_preparations_1.md)”获取 openEuler 的树莓派版本镜像。 ## Windows 下刷写镜像 diff --git a/docs/zh/server/installation_upgrade/installation/installation-on-servers.md b/docs/zh/server/installation_upgrade/installation/installation_on_servers.md similarity index 100% rename from docs/zh/server/installation_upgrade/installation/installation-on-servers.md rename to docs/zh/server/installation_upgrade/installation/installation_on_servers.md diff --git a/docs/zh/server/installation_upgrade/installation/installation-preparations.md b/docs/zh/server/installation_upgrade/installation/installation_preparations.md similarity index 100% rename from docs/zh/server/installation_upgrade/installation/installation-preparations.md rename to docs/zh/server/installation_upgrade/installation/installation_preparations.md diff --git a/docs/zh/server/installation_upgrade/installation/installation-preparations-1.md b/docs/zh/server/installation_upgrade/installation/installation_preparations_1.md similarity index 100% rename from docs/zh/server/installation_upgrade/installation/installation-preparations-1.md rename to docs/zh/server/installation_upgrade/installation/installation_preparations_1.md diff --git a/docs/zh/server/installation_upgrade/installation/more-resources.md b/docs/zh/server/installation_upgrade/installation/more_resources.md similarity index 100% rename from docs/zh/server/installation_upgrade/installation/more-resources.md rename to docs/zh/server/installation_upgrade/installation/more_resources.md diff --git a/docs/zh/server/installation_upgrade/installation/risc-v.md b/docs/zh/server/installation_upgrade/installation/risc_v.md similarity index 100% rename from docs/zh/server/installation_upgrade/installation/risc-v.md rename to docs/zh/server/installation_upgrade/installation/risc_v.md diff --git a/docs/zh/server/installation_upgrade/installation/RISC-V-LicheePi4A.md b/docs/zh/server/installation_upgrade/installation/risc_v_licheepi4a.md similarity index 97% rename from docs/zh/server/installation_upgrade/installation/RISC-V-LicheePi4A.md rename to docs/zh/server/installation_upgrade/installation/risc_v_licheepi4a.md index 34a321fe6a594d3e09a00ba54a9af50050dcca01..e7c40bb43f17589641f6efe620ac375eab6408cf 100644 --- a/docs/zh/server/installation_upgrade/installation/RISC-V-LicheePi4A.md +++ b/docs/zh/server/installation_upgrade/installation/risc_v_licheepi4a.md @@ -106,4 +106,4 @@ fastboot flash root openEuler-24.03-LTS-SP1-riscv64-lpi4a-base-root.ext4 ## 硬件可用性 -官方发布版本基于 [openEuler kernel6.6 同源版本](./RISCV-OLK6.6-Homologous-Version.md) 构建,并非所有内核模块都完整支持。该版本强调官方生态体验完整一致,如果需要更完善的硬件功能,需要使用第三方发布版本。 +官方发布版本基于 [openEuler kernel6.6 同源版本](./riscv_olk6.6_homologous_version.md) 构建,并非所有内核模块都完整支持。该版本强调官方生态体验完整一致,如果需要更完善的硬件功能,需要使用第三方发布版本。 diff --git a/docs/zh/server/installation_upgrade/installation/RISC-V-Pioneer1.3.md b/docs/zh/server/installation_upgrade/installation/risc_v_pioneer1.3.md similarity index 100% rename from docs/zh/server/installation_upgrade/installation/RISC-V-Pioneer1.3.md rename to docs/zh/server/installation_upgrade/installation/risc_v_pioneer1.3.md diff --git a/docs/zh/server/installation_upgrade/installation/risc-v-qemu.md b/docs/zh/server/installation_upgrade/installation/risc_v_qemu.md similarity index 100% rename from docs/zh/server/installation_upgrade/installation/risc-v-qemu.md rename to docs/zh/server/installation_upgrade/installation/risc_v_qemu.md diff --git a/docs/zh/server/installation_upgrade/installation/RISCV-OLK6.6-Homologous-Version.md b/docs/zh/server/installation_upgrade/installation/riscv_olk6.6_homologous_version.md similarity index 100% rename from docs/zh/server/installation_upgrade/installation/RISCV-OLK6.6-Homologous-Version.md rename to docs/zh/server/installation_upgrade/installation/riscv_olk6.6_homologous_version.md 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 similarity index 95% rename from docs/zh/server/installation_upgrade/installation/using-kickstart-for-automatic-installation.md rename to docs/zh/server/installation_upgrade/installation/using_kickstart_for_automatic_installation.md index 5eb583f969649328fd640b2c062177f34b3d9f18..7fb632cc6be154e4b6a2c1a7b54e57b7cf136d72 100644 --- 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 @@ -1,21 +1,5 @@ # 使用kickstart自动化安装 - - -- [使用kickstart自动化安装](#使用kickstart自动化安装) - - [总体介绍](#总体介绍) - - [概述](#概述) - - [优缺点对比](#优缺点对比) - - [背景知识](#背景知识) - - [半自动化安装指导](#半自动化安装指导) - - [环境要求](#环境要求) - - [操作步骤](#操作步骤) - - [全自动化安装指导](#全自动化安装指导) - - [环境要求](#环境要求-1) - - [操作步骤](#操作步骤-1) - - - ## 总体介绍 ### 概述 @@ -171,7 +155,7 @@ TFTP(Trivial File Transfer Protocol,简单文件传输协议),该协议 >>>> print (passwd) >$6$63c4tDmQGn5SDayV$mZoZC4pa9Jdt6/ALgaaDq6mIExiOO2EjzomB.Rf6V1BkEMJDcMddZeGdp17cMyc9l9ML9ldthytBEPVcnboR/0 >``` - + 3. 将ISO镜像文件挂载到需要安装openEuler计算机的光驱上。 另外,也可以选择NFS等网络安装,kickstart文件中需要指定安装源位置(默认是cdrom)。 diff --git a/docs/zh/server/installation_upgrade/upgrade/_toc.yaml b/docs/zh/server/installation_upgrade/upgrade/_toc.yaml index 4eac27f278f787aa691da419fda47c178cd88621..b88809a6c6cc1014806240a92e072a806ee774d6 100644 --- a/docs/zh/server/installation_upgrade/upgrade/_toc.yaml +++ b/docs/zh/server/installation_upgrade/upgrade/_toc.yaml @@ -3,4 +3,4 @@ isManual: true description: 升级 openEuler 操作系统 sections: - label: 升降级指导 - href: ./openeuler-22.03-lts-upgrade-and-downgrade-guide.md + href: ./openeuler_22.03_lts_upgrade_and_downgrade_guide.md diff --git a/docs/zh/server/installation_upgrade/upgrade/openEuler-22.03-lts-upgrade-and-downgrade-guide.md b/docs/zh/server/installation_upgrade/upgrade/openEuler_22.03_lts_upgrade_and_downgrade_guide.md similarity index 99% rename from docs/zh/server/installation_upgrade/upgrade/openEuler-22.03-lts-upgrade-and-downgrade-guide.md rename to docs/zh/server/installation_upgrade/upgrade/openEuler_22.03_lts_upgrade_and_downgrade_guide.md index f261962e83d110f2a3a9a021ce7829556778d305..2f297e224a50c27cef5c3e4ae775d784361f46be 100644 --- a/docs/zh/server/installation_upgrade/upgrade/openEuler-22.03-lts-upgrade-and-downgrade-guide.md +++ b/docs/zh/server/installation_upgrade/upgrade/openEuler_22.03_lts_upgrade_and_downgrade_guide.md @@ -7,7 +7,6 @@ ![LTS_version](./images/LTS_version.png) - ## **2**. **升级操作** ### 2.1 新增openEuler-22.03-LTS-SP1 repo源 (openEuler-22.03-LTS-SP1.repo) @@ -39,21 +38,18 @@ dnf update | tee update_log -x 跟--skip-broken配合使用,后边跟需要跳过的软件包名 ``` - ### 2.4 重启系统 ``` reboot ``` - ## **3**. **升级结果验证** 查看当前环境的openEuler、kernel版本 ![SP1_version](./images/SP1_version.png) - ## **4**. **降级操作** ### 4.1 执行降级 diff --git a/docs/zh/server/maintenance/_toc.yaml b/docs/zh/server/maintenance/_toc.yaml index 7447ce20279eaa7bcd5244b443e2b607cda3a4f8..26e47050f798bd8c52241cb10b5c9fa91769aa62 100644 --- a/docs/zh/server/maintenance/_toc.yaml +++ b/docs/zh/server/maintenance/_toc.yaml @@ -6,4 +6,4 @@ sections: href: ./overview.md sections: - label: 运维概述 - href: ./operation-and-maintenance-overview.md + href: ./operation_and_maintenance_overview.md diff --git a/docs/zh/server/maintenance/aops/_toc.yaml b/docs/zh/server/maintenance/aops/_toc.yaml index 3d87f98d47e0d167f5c73acf94766f535cc01edf..92756ad5eb6c982ca33e9b4aa5dc14c48e3ac772 100644 --- a/docs/zh/server/maintenance/aops/_toc.yaml +++ b/docs/zh/server/maintenance/aops/_toc.yaml @@ -3,18 +3,20 @@ isManual: true description: 使用 A-Ops 智能运维框架进行故障快速定位、配置项统筹管理等 sections: - label: 部署A-Ops - href: ./deploying-aops.md + href: ./deploying_aops.md - label: 使用A-Ops智能定位框架 - href: ./aops-intelligent-positioning-framework-user-manual.md + href: ./aops_intelligent_positioning_framework_user_manual.md - label: aops漏洞管理模块使用手册 - href: ./aops-vulnerability-management-module-user-manual.md + href: ./aops_vulnerability_management_module_user_manual.md - label: 使用热补丁dnf插件 - href: ./dnf-command-usage.md + href: ./dnf_command_usage.md - label: 配置溯源服务 - href: ./configuration-tracing-service-user-manual.md + href: ./configuration_tracing_service_user_manual.md - label: 社区热补丁制作发布流程 - href: ./community-hotpatch-creation-and-release-process.md - - label: AOps一键化部署指南 - href: ./configuration-tracing-service-user-manual.md + href: ./community_hotpatch_creation_and_release_process.md - label: AOps资产管理使用手册 - href: ./aops-asset-management-user-manual.md + href: ./aops_asset_management_user_manual.md + - label: 一键化部署介绍 + href: ./quick_deployment_of_aops.md + - label: gala-ragdoll的使用指导 + href: ./configuration_tracing_service_user_manual.md \ No newline at end of file diff --git a/docs/zh/server/maintenance/aops/aops-asset-management-user-manual.md b/docs/zh/server/maintenance/aops/aops_asset_management_user_manual.md similarity index 98% rename from docs/zh/server/maintenance/aops/aops-asset-management-user-manual.md rename to docs/zh/server/maintenance/aops/aops_asset_management_user_manual.md index 7346b4106889404a221d1c99651dceaeb74b2e4b..0a9986a1c5fb862f7405863980448962743e7fec 100644 --- a/docs/zh/server/maintenance/aops/aops-asset-management-user-manual.md +++ b/docs/zh/server/maintenance/aops/aops_asset_management_user_manual.md @@ -1,6 +1,6 @@ # AOps资产管理使用手册 -参照[AOps部署指南](deploying-aops.md)部署AOps前后端服务后,即可使用AOps资产管理功能,纳管集群主机。 +参照[AOps部署指南](deploying_aops.md)部署AOps前后端服务后,即可使用AOps资产管理功能,纳管集群主机。 主机纳管是使用AOps进行智能运维的第一步,后续用户按需部署的漏洞管理、配置溯源及故障诊断服务均面向纳管的主机进行操作。 diff --git a/docs/zh/server/maintenance/aops/aops-intelligent-positioning-framework-user-manual.md b/docs/zh/server/maintenance/aops/aops_intelligent_positioning_framework_user_manual.md similarity index 94% rename from docs/zh/server/maintenance/aops/aops-intelligent-positioning-framework-user-manual.md rename to docs/zh/server/maintenance/aops/aops_intelligent_positioning_framework_user_manual.md index b5dd04b351fed5135e14dca2681d86d98b82daee..e0a292e6b769020791a9ba4de949fd829c2412fe 100644 --- a/docs/zh/server/maintenance/aops/aops-intelligent-positioning-framework-user-manual.md +++ b/docs/zh/server/maintenance/aops/aops_intelligent_positioning_framework_user_manual.md @@ -1,6 +1,6 @@ # AOps 智能定位框架使用手册 -参照[AOps部署指南](deploying-aops.md)部署AOps前后端服务,并参照[AOps资产管理使用手册](aops-asset-management-user-manual.md)纳管了主机后,即可使用AOps智能定位框架。 +参照[AOps部署指南](deploying_aops.md)部署AOps前后端服务,并参照[AOps资产管理使用手册](./aops_asset_management_use_manual.md)纳管了主机后,即可使用AOps智能定位框架。 智能定位框架包含了**智能定位**和**配置溯源**两部分,下文会从页面的维度进行AOps智能定位框架功能的介绍。 diff --git a/docs/zh/server/maintenance/aops/aops-vulnerability-management-module-user-manual.md b/docs/zh/server/maintenance/aops/aops_vulnerability_management_module_user_manual.md similarity index 98% rename from docs/zh/server/maintenance/aops/aops-vulnerability-management-module-user-manual.md rename to docs/zh/server/maintenance/aops/aops_vulnerability_management_module_user_manual.md index dcd58a9e9b237900f07c468e601f0c8b6da29296..3e481798fff00b8250063a05253da8b027ec33dd 100644 --- a/docs/zh/server/maintenance/aops/aops-vulnerability-management-module-user-manual.md +++ b/docs/zh/server/maintenance/aops/aops_vulnerability_management_module_user_manual.md @@ -1,6 +1,6 @@ # AOps漏洞管理模块使用手册 -参照[AOps部署指南](deploying-aops.md)部署AOps前后端服务,并参照[AOps资产管理使用手册](aops-asset-management-user-manual.md)纳管了主机后,即可使用AOps漏洞管理模块。 +参照[AOps部署指南](deploying_aops.md)部署AOps前后端服务,并参照[AOps资产管理使用手册](aops_asset_management_user_manual.md)纳管了主机后,即可使用AOps漏洞管理模块。 A-Ops智能运维工具的智能补丁管理模块(**apollo**)主要集成了**漏洞扫描、CVE修复、任务回退**、**热补丁移除**等核心功能: diff --git a/docs/zh/server/maintenance/aops/community-hotpatch-creation-and-release-process.md b/docs/zh/server/maintenance/aops/community_hotpatch_creation_and_release_process.md similarity index 99% rename from docs/zh/server/maintenance/aops/community-hotpatch-creation-and-release-process.md rename to docs/zh/server/maintenance/aops/community_hotpatch_creation_and_release_process.md index 2cea45c7b8fd73704f2d623698ee2ce2327b8775..839da7ad6447dd83840bf8a4118f70120a415b00 100644 --- a/docs/zh/server/maintenance/aops/community-hotpatch-creation-and-release-process.md +++ b/docs/zh/server/maintenance/aops/community_hotpatch_creation_and_release_process.md @@ -1,5 +1,4 @@ - # 社区热补丁制作发布流程 ## 制作内核态/用户态热补丁 @@ -51,11 +50,8 @@ pr评论区提示启动热补丁制作流程。 点击查看热补丁issue链接内容。 - ![image-20230816110430216](./image/热补丁issue初始内容.png) - - 点击查看在hotpatch_meta仓自动创建的pr。 ![image-20230816110637492](./image/hotpatch-fix-pr.png) @@ -88,8 +84,6 @@ pr评论区提示启动热补丁制作流程。 **若热补丁制作成功,可以对热补丁进行审阅**。 - - ### 场景2、从hotpatch_meta仓提pr制作新版本热补丁 > hotpatch_meta仓地址:https://gitee.com/openeuler/hotpatch_meta @@ -107,14 +101,10 @@ pr内容: - patch文件。 - 如果没有相应热补丁元数据hotmetadata_ACC.xml/hotmetadata_SGL.xml文件,则手动创建;否则修改热补丁元数据hotmetadata_ACC.xml/hotmetadata_SGL.xml文件。 - - ##### 2. 触发制作热补丁 **若热补丁制作成功,可以对热补丁进行审阅**。 - - ### 场景3、从hotpatch_metadata仓提pr修改热补丁 > hotpatch_meta仓地址:https://gitee.com/openeuler/hotpatch_meta @@ -132,22 +122,15 @@ pr内容: > 如果需要修改元数据文件中的热补丁issue字段内容,请确保添加的热补丁Issue已经存在。 > 用户不允许修改热补丁元数据文件中已被正式发布的热补丁的相关内容。 - - pr内容: - patch文件。 - 修改热补丁元数据hotmetadata_ACC.xml/hotmetadata_SGL.xml文件。 - - ##### 2. 触发制作热补丁 **若热补丁制作成功,可以对热补丁进行审阅**。 - - - ## 审阅热补丁 ##### 1. 审阅热补丁pr @@ -227,8 +210,6 @@ hotmetadata_SGL.xml格式示例: - 将热补丁issue状态修改为”已完成“。 - 为热补丁issue添加hotpatch标签。 - - ## 发布热补丁 ##### 1、收集热补丁发布需求 @@ -281,8 +262,6 @@ updateinfo.xml文件样例: ``` - - ##### 4、openEuler官网可以查看更新的热补丁信息 > openEuler官网安全公告: @@ -291,8 +270,6 @@ updateinfo.xml文件样例: ![image-20230908163402743](./image/image-20230908163402743.png) - - ##### 5、获取热补丁相关文件 社区将热补丁相关文件同步至openEuler的repo源下,可以在各个分支的hotpatch_update目录下获取相应文件。 diff --git a/docs/zh/server/maintenance/aops/configuration-tracing-service-user-manual.md b/docs/zh/server/maintenance/aops/configuration_tracing_service_user_manual.md similarity index 88% rename from docs/zh/server/maintenance/aops/configuration-tracing-service-user-manual.md rename to docs/zh/server/maintenance/aops/configuration_tracing_service_user_manual.md index 7e828b336f840af2be872ff07a12d318554c4e0a..8c860539d2965d1a49feee6bdcb633de20eba0fd 100644 --- a/docs/zh/server/maintenance/aops/configuration-tracing-service-user-manual.md +++ b/docs/zh/server/maintenance/aops/configuration_tracing_service_user_manual.md @@ -60,6 +60,7 @@ step_list: #### 编辑主机清单 +<<<<<<<< HEAD:docs/zh/server/maintenance/aops/configuration-tracing-service-user-manual.md 具体步骤参见其他章节gala-ragdoll模块主机配置 #### 编辑变量列表 @@ -70,6 +71,18 @@ step_list: 具体步骤参见其他章节执行部署任务 +======== +具体步骤参见[部署管理使用手册]章节2.2.2.10章节gala-ragdoll模块主机配置 + +#### 编辑变量列表 + +具体步骤参见[部署管理使用手册]章节2.2.2.10章节gala-ragdoll模块变量配置 + +#### 执行部署任务 + +具体步骤参见[部署管理使用手册]章节3执行部署任务 +>>>>>>>> 6b124a04c (文档整改):docs/zh/server/maintenance/aops/configuration_tracing_service_user_manual.md + ### 配置文件介绍 ```/etc/yum.repos.d/openEuler.repo```是用来规定yum源地址的配置文件,该配置文件内容为: diff --git a/docs/zh/server/maintenance/aops/deploying-aops.md b/docs/zh/server/maintenance/aops/deploying_aops.md similarity index 100% rename from docs/zh/server/maintenance/aops/deploying-aops.md rename to docs/zh/server/maintenance/aops/deploying_aops.md diff --git a/docs/zh/server/maintenance/aops/dnf-command-usage.md b/docs/zh/server/maintenance/aops/dnf_command_usage.md similarity index 99% rename from docs/zh/server/maintenance/aops/dnf-command-usage.md rename to docs/zh/server/maintenance/aops/dnf_command_usage.md index 2c77d1772b84f17c396b48fd5704496ad937c1de..6494fbf53ced07bbfffe3332e04dab4579bfbcc1 100644 --- a/docs/zh/server/maintenance/aops/dnf-command-usage.md +++ b/docs/zh/server/maintenance/aops/dnf_command_usage.md @@ -736,4 +736,3 @@ CVE-2021-3 Important/Sec. redis-6.2.5-4.x86_64 CVE-2022-38023 Important/Sec. samba-client-4.17.2-5.oe2203sp1.x86_64 - CVE-2022-37966 Important/Sec. samba-client-4.17.2-5.oe2203sp1.x86_64 - ``` - diff --git a/docs/zh/server/maintenance/aops/aops-one-click-deployment-guide.md b/docs/zh/server/maintenance/aops/quick_deployment_of_aops.md similarity index 99% rename from docs/zh/server/maintenance/aops/aops-one-click-deployment-guide.md rename to docs/zh/server/maintenance/aops/quick_deployment_of_aops.md index b4ce382bcfbb4b5f09b7e6821c0d8e37f4bad7cc..9fde4ac7c50d43b0507424d64dfe155d5ae8be6e 100644 --- a/docs/zh/server/maintenance/aops/aops-one-click-deployment-guide.md +++ b/docs/zh/server/maintenance/aops/quick_deployment_of_aops.md @@ -38,7 +38,7 @@ systemctl enable docker dnf install aops-vulcanus aops-tools ``` -> **说明:安装aops相关组件需要配置[EPOL源](https://dl-cdn.openeuler.openatom.cn/openEuler-24.03-LTS-SP1/EPOL/)。** +> **说明:安装aops相关组件需要配置[EPOL源](https://dl-cdn.openeuler.openatom.cn/openEuler-24.03-LTS-SP1/EPOL/)。** ## 4. 执行一键化部署 diff --git a/docs/zh/server/maintenance/common_skills/_toc.yaml b/docs/zh/server/maintenance/common_skills/_toc.yaml index 8d25e1b92e14b79b611eec0570872775687e79cf..f8e86be91d888dededb470d98e3a8d8fa0f4ddad 100644 --- a/docs/zh/server/maintenance/common_skills/_toc.yaml +++ b/docs/zh/server/maintenance/common_skills/_toc.yaml @@ -3,6 +3,6 @@ isManual: true description: 运维常用配置及命令 sections: - label: 信息收集 - href: ./information-collection.md + href: ./information_collection.md - label: 常用配置 - href: ./common-configurations.md + href: ./common_configurations.md diff --git a/docs/zh/server/maintenance/common_skills/common-configurations.md b/docs/zh/server/maintenance/common_skills/common_configurations.md similarity index 99% rename from docs/zh/server/maintenance/common_skills/common-configurations.md rename to docs/zh/server/maintenance/common_skills/common_configurations.md index 6affb0446a02dba87efb2cb4ab2243ea61452c7f..3cacbee69f1118e5d84a8ffdaa67a0d7268aa1c9 100644 --- a/docs/zh/server/maintenance/common_skills/common-configurations.md +++ b/docs/zh/server/maintenance/common_skills/common_configurations.md @@ -1,10 +1,5 @@ # 常用技能 -- [常用技能](#常用技能) - - [配置网络](#配置网络) - - [管理RPM包](#管理rpm包) - - [配置SSH](#配置ssh) - ## 配置网络 1. 配置IP地址 diff --git a/docs/zh/server/maintenance/common_skills/information-collection.md b/docs/zh/server/maintenance/common_skills/information_collection.md similarity index 100% rename from docs/zh/server/maintenance/common_skills/information-collection.md rename to docs/zh/server/maintenance/common_skills/information_collection.md diff --git a/docs/zh/server/maintenance/common_tools/_toc.yaml b/docs/zh/server/maintenance/common_tools/_toc.yaml index fca1303f143f1fbc01969289da54c7294d15dfab..984c9a3739a9e1ff7983365a9cb2d555a7576697 100644 --- a/docs/zh/server/maintenance/common_tools/_toc.yaml +++ b/docs/zh/server/maintenance/common_tools/_toc.yaml @@ -3,4 +3,4 @@ isManual: true description: 常用定位定界工具,包括 ftrace,strace 和 kdump sections: - label: 常用定位定界工具 - href: ./commonly-used-tools.md + 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 similarity index 98% rename from docs/zh/server/maintenance/common_tools/commonly-used-tools.md rename to docs/zh/server/maintenance/common_tools/commonly_used_tools.md index 43387352b767eca360a90efaf4a0cc9145cd7f77..bbe7cead10a635844fa6bf8135c3209a3cab584a 100644 --- a/docs/zh/server/maintenance/common_tools/commonly-used-tools.md +++ b/docs/zh/server/maintenance/common_tools/commonly_used_tools.md @@ -1,9 +1,4 @@ -# 常用工具 - -- [常用工具](#常用工具) - - [ftrace](#ftrace) - - [strace](#strace) - - [kdump](#kdump) +# 常用工具 ## ftrace diff --git a/docs/zh/server/maintenance/gala/_toc.yaml b/docs/zh/server/maintenance/gala/_toc.yaml index dc3927d3ed4f2fc2bd437ec67da8dce723840be9..28f6b5220469ffaf324d60793276681a78eb368e 100644 --- a/docs/zh/server/maintenance/gala/_toc.yaml +++ b/docs/zh/server/maintenance/gala/_toc.yaml @@ -3,8 +3,8 @@ isManual: true description: 故障智能检测、性能数据采集分析以及资源监测管理 sections: - label: 使用gala-anteater - href: ./using-gala-anteater.md - - label: 使用gala-gopher - href: ./using-gala-gopher.md + href: ./using_gala_anteater.md + - label: 使用gala_gopher + href: ./using_gala_gopher.md - label: 使用gala-spider - href: ./using-gala-spider.md + href: ./using_gala_spider.md diff --git a/docs/zh/server/maintenance/gala/using-gala-anteater.md b/docs/zh/server/maintenance/gala/using_gala_anteater.md similarity index 99% rename from docs/zh/server/maintenance/gala/using-gala-anteater.md rename to docs/zh/server/maintenance/gala/using_gala_anteater.md index a672e4bba276eeffca8bdc4952a6b600608a8397..5c2ab807122625e3df176bf25429f62f71ba5fda 100644 --- a/docs/zh/server/maintenance/gala/using-gala-anteater.md +++ b/docs/zh/server/maintenance/gala/using_gala_anteater.md @@ -87,7 +87,7 @@ Suppression: | Global | 全局配置 | 字典类型 | | data_source | 设置数据来源 | "prometheus" | | Arangodb | Arangodb图数据库配置信息 | 字典类型 | -| url | 图数据库Arangodb的ip地址 | "http://localhost:8529" | +| url | 图数据库Arangodb的ip地址 | "" | | db_name | 图数据库名 | "spider" | | Kafka | kafka配置信息 | 字典类型 | | server | Kafka Server的ip地址,根据安装节点ip配置 | "192.168.122.100" | diff --git a/docs/zh/server/maintenance/gala/using-gala-gopher.md b/docs/zh/server/maintenance/gala/using_gala_gopher.md similarity index 99% rename from docs/zh/server/maintenance/gala/using-gala-gopher.md rename to docs/zh/server/maintenance/gala/using_gala_gopher.md index 6608d9f1884353f6bbbe59a32266840425dfd7ba..2028a562c270d948b8cb3babe1aff01c7aa51468 100644 --- a/docs/zh/server/maintenance/gala/using-gala-gopher.md +++ b/docs/zh/server/maintenance/gala/using_gala_gopher.md @@ -1,4 +1,4 @@ -# **gala-gopher使用手册** +# **gala-gopher使用手册** gala-gopher作为数据采集模块提供OS级的监控能力,支持动态加载 /卸载探针,可无侵入式地集成第三方探针,快速扩展监控范围。 @@ -37,8 +37,6 @@ priority=1 # yum install gala-gopher ``` - - #### 配置 ##### 配置介绍 @@ -165,8 +163,6 @@ gala-gopher配置文件为`/opt/gala-gopher/gala-gopher.conf`,该文件配置 ); ``` - - #### 启动 配置完成后,执行如下命令启动gala-gopher。 @@ -187,8 +183,6 @@ gala-gopher配置文件为`/opt/gala-gopher/gala-gopher.conf`,该文件配置 > 说明:gala-gopher部署和运行均需要root权限。 - - #### 使用方法 ##### 外部依赖软件部署 @@ -199,8 +193,6 @@ gala-gopher配置文件为`/opt/gala-gopher/gala-gopher.conf`,该文件配置 > 说明:安装kafka、prometheus软件包时,需要从官网获取安装包进行部署。 - - ##### 输出数据 - **指标数据metrics** @@ -233,4 +225,5 @@ gala-gopher配置文件为`/opt/gala-gopher/gala-gopher.conf`,该文件配置 ./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"]} - ``` \ No newline at end of file + ``` + \ No newline at end of file diff --git a/docs/zh/server/maintenance/gala/using-gala-spider.md b/docs/zh/server/maintenance/gala/using_gala_spider.md similarity index 98% rename from docs/zh/server/maintenance/gala/using-gala-spider.md rename to docs/zh/server/maintenance/gala/using_gala_spider.md index 1283b6c0843f9d62e2859ee0c5e68339fc933a57..c8b213e802236dfee5a8c98c2f639f2b74b3f727 100644 --- a/docs/zh/server/maintenance/gala/using-gala-spider.md +++ b/docs/zh/server/maintenance/gala/using_gala_spider.md @@ -39,8 +39,6 @@ priority=1 # yum install gala-spider ``` - - ### 配置 #### 配置文件说明 @@ -108,8 +106,6 @@ kafka: metadata_group_id: "metadata-spider" ``` - - ### 启动 1. 通过命令启动。 @@ -124,8 +120,6 @@ kafka: # systemctl start gala-spider ``` - - ### 使用方法 ##### 外部依赖软件部署 @@ -149,11 +143,11 @@ gala-spider 运行时需要依赖多个外部软件进行交互。因此,在 gala-spider 项目中的 2 个功能组件会作为独立的软件包分别发布。 -​ **spider-storage** 组件对应本节中的 gala-spider 软件包。 +​**spider-storage** 组件对应本节中的 gala-spider 软件包。 -​ **gala-inference** 组件对应 gala-inference 软件包。 +​**gala-inference** 组件对应 gala-inference 软件包。 -gala-gopher软件的部署参见[gala-gopher使用手册](using-gala-gopher.md),此处只介绍 arangodb 的部署。 +gala-gopher软件的部署参见[gala-gopher使用手册](using_gala_gopher.md),此处只介绍 arangodb 的部署。 当前使用的 arangodb 版本是 3.8.7 ,该版本对运行环境有如下要求: @@ -265,8 +259,6 @@ storage: 4. 可进一步根据 arangodb 提供的 AQL 查询语句查询存储的拓扑关系图,详细教程参见官方文档: [aql文档](https://www.arangodb.com/docs/3.8/aql/)。 - - ## gala-inference gala-inference 提供异常 KPI 根因定位能力,它将基于异常检测的结果和拓扑图作为输入,根因定位的结果作为输出,输出到 kafka 中。gala-inference 组件在 gala-spider 项目下进行归档。 @@ -304,8 +296,6 @@ priority=1 # yum install gala-inference ``` - - ### 配置 #### 配置文件说明 @@ -396,8 +386,6 @@ prometheus: step: 5 ``` - - ### 启动 1. 通过命令启动。 @@ -412,13 +400,11 @@ prometheus: # systemctl start gala-inference ``` - - ### 使用方法 ##### 依赖软件部署 -gala-inference 的运行依赖和 gala-spider一样,请参见[外部依赖软件部署](#外部依赖软件部署)。此外,gala-inference 还间接依赖 [gala-spider](#gala-spider) 和 [gala-anteater](using-gala-anteater.md) 软件的运行,请提前部署gala-spider和gala-anteater软件。 +gala-inference 的运行依赖和 gala-spider一样,请参见[外部依赖软件部署](#外部依赖软件部署)。此外,gala-inference 还间接依赖 [gala-spider](#gala-spider) 和 [gala-anteater](using_gala_anteater.md) 软件的运行,请提前部署gala-spider和gala-anteater软件。 ##### 配置项修改 @@ -552,4 +538,4 @@ arangodb: "SeverityNumber": 13, "Body": "A cause inferring event for an abnormal event" } - ``` \ No newline at end of file + ``` diff --git a/docs/zh/server/maintenance/kernel_live_upgrade/_toc.yaml b/docs/zh/server/maintenance/kernel_live_upgrade/_toc.yaml index 410f21e22e6f1b48f47b10b6a2d73bde269f4df1..ee30c49c67d26ce7059e87bb34439fb97288b4a6 100644 --- a/docs/zh/server/maintenance/kernel_live_upgrade/_toc.yaml +++ b/docs/zh/server/maintenance/kernel_live_upgrade/_toc.yaml @@ -3,11 +3,11 @@ isManual: true description: 使用用户态自动化工具快速重启内核和程序热迁移实现内核热替换特性 sections:sections: - label: 内核热升级指南 - href: ./kernel-live-upgrade.md + href: ./kernel_live_upgrade.md sections:sections: - label: 安装与部署 - href: ./installation-and-deployment.md + href: ./installation_and_deployment.md - label: 使用方法 - href: ./usage-guide.md + href: ./usage_guide.md - label: 常见问题与解决方法 - href: ./faqs-and-solutions.md + href: ./faqs_and_solutions.md diff --git a/docs/zh/server/maintenance/kernel_live_upgrade/faqs-and-solutions.md b/docs/zh/server/maintenance/kernel_live_upgrade/faqs_and_solutions.md similarity index 100% rename from docs/zh/server/maintenance/kernel_live_upgrade/faqs-and-solutions.md rename to docs/zh/server/maintenance/kernel_live_upgrade/faqs_and_solutions.md 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 similarity index 98% rename from docs/zh/server/maintenance/kernel_live_upgrade/installation-and-deployment.md rename to docs/zh/server/maintenance/kernel_live_upgrade/installation_and_deployment.md index 3f57a30500d35250b503cdd86b5f7cf2da98e69b..7170790448a847877b30d569dd883baa1d7373e0 100644 --- a/docs/zh/server/maintenance/kernel_live_upgrade/installation-and-deployment.md +++ b/docs/zh/server/maintenance/kernel_live_upgrade/installation_and_deployment.md @@ -14,7 +14,7 @@ ## 环境准备 -- 安装openEuler系统,安装方法参考 《[安装指南](../../installation_upgrade/installation/installation-on-servers.md)》 +- 安装openEuler系统,安装方法参考 《[安装指南](../../installation_upgrade/installation/installation_on_servers.md)》 - 安装内核热升级工具需要使用root权限 @@ -52,7 +52,6 @@ # rpm --import /mnt/RPM-GPG-KEY-openEuler ``` - 4. 安装内核热升级工具 ```shell 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 similarity index 100% rename from docs/zh/server/maintenance/kernel_live_upgrade/kernel-live-upgrade.md rename to docs/zh/server/maintenance/kernel_live_upgrade/kernel_live_upgrade.md diff --git a/docs/zh/server/maintenance/kernel_live_upgrade/usage-guide.md b/docs/zh/server/maintenance/kernel_live_upgrade/usage_guide.md similarity index 95% rename from docs/zh/server/maintenance/kernel_live_upgrade/usage-guide.md rename to docs/zh/server/maintenance/kernel_live_upgrade/usage_guide.md index c7355c36195b2c3980cac2d2676017006ede00b3..1d58d32a73d4267e82fc05eff4a3a8ee219f5f48 100644 --- a/docs/zh/server/maintenance/kernel_live_upgrade/usage-guide.md +++ b/docs/zh/server/maintenance/kernel_live_upgrade/usage_guide.md @@ -1,13 +1,5 @@ # 使用方法 - - -- [命令用法](#命令用法) -- [使用限制](#使用限制) -- [加速特性说明及使用](#加速特性说明及使用) -- [产生的日志信息](#产生的日志信息) - - ## 命令用法 - nvwa help diff --git a/docs/zh/server/maintenance/operation-and-maintenance-overview.md b/docs/zh/server/maintenance/operation_and_maintenance_overview.md similarity index 100% rename from docs/zh/server/maintenance/operation-and-maintenance-overview.md rename to docs/zh/server/maintenance/operation_and_maintenance_overview.md diff --git a/docs/zh/server/maintenance/syscare/_toc.yaml b/docs/zh/server/maintenance/syscare/_toc.yaml index f6e1c0ce75b98b65b3f14fd812747b96129c7ce8..f08f9df281c8558ba47c4e46f5754cbcd6949ce1 100644 --- a/docs/zh/server/maintenance/syscare/_toc.yaml +++ b/docs/zh/server/maintenance/syscare/_toc.yaml @@ -3,15 +3,15 @@ isManual: true description: 提供在线的热补丁修复能力 sections: - label: syscare用户使用手册 - href: ./syscare-user-guide.md + href: ./syscare_user_guide.md sections: - label: 认识SysCare - href: ./syscare-introduction.md + href: ./syscare_introduction.md - label: 安装SysCare - href: ./installing-syscare.md + href: ./installing_yscare.md - label: 使用SysCare - href: ./using-syscare.md + href: ./using_syscare.md - label: 约束限制 href: ./constraints.md - label: 常见问题与解决方法 - href: ./faqs-and-solutions.md + href: ./faqs_and_solutions.md diff --git a/docs/zh/server/maintenance/syscare/faqs-and-solutions.md b/docs/zh/server/maintenance/syscare/faqs_and_solutions.md similarity index 99% rename from docs/zh/server/maintenance/syscare/faqs-and-solutions.md rename to docs/zh/server/maintenance/syscare/faqs_and_solutions.md index 34e0b960bf44536028429ff31017bada06b6d729..5508536daa8908ce2e5d3130ff10dfdb47341a38 100644 --- a/docs/zh/server/maintenance/syscare/faqs-and-solutions.md +++ b/docs/zh/server/maintenance/syscare/faqs_and_solutions.md @@ -1,13 +1,16 @@ # 常见问题与解决方法 ## 问题1:报错:“alloc upatch module memory failed” + - 原因:触发selinux约束。 - 解决方法:按照报错建议命令操作,手动添加策略,由于不同情况添加策略不同,无法穷尽枚举,参考该issue: 。 ## 问题2:报错: “patch file error 2” + - 原因:补丁检测失败。 - 解决方法:补丁无法正常打入,更换补丁。 ## 问题3:报错: “build project error 11” + - 原因:源码包编译失败。 - 解决方法:尝试使用```rpmbuild -ra *.src.rpm```命令测试源码包是否可正常编译并满足其编译依赖。 diff --git a/docs/zh/server/maintenance/syscare/installing-syscare.md b/docs/zh/server/maintenance/syscare/installing_syscare.md similarity index 100% rename from docs/zh/server/maintenance/syscare/installing-syscare.md rename to docs/zh/server/maintenance/syscare/installing_syscare.md diff --git a/docs/zh/server/maintenance/syscare/syscare-introduction.md b/docs/zh/server/maintenance/syscare/syscare_introduction.md similarity index 100% rename from docs/zh/server/maintenance/syscare/syscare-introduction.md rename to docs/zh/server/maintenance/syscare/syscare_introduction.md diff --git a/docs/zh/server/maintenance/syscare/syscare-user-guide.md b/docs/zh/server/maintenance/syscare/syscare_user_guide.md similarity index 99% rename from docs/zh/server/maintenance/syscare/syscare-user-guide.md rename to docs/zh/server/maintenance/syscare/syscare_user_guide.md index 2b4b9523efa6c23acd21269ea3e5e2ad49126b6a..d6d489f21ae60737ef9bbb0d30f6041d187fb70e 100644 --- a/docs/zh/server/maintenance/syscare/syscare-user-guide.md +++ b/docs/zh/server/maintenance/syscare/syscare_user_guide.md @@ -1,7 +1,9 @@ # SysCare用户使用手册 + 本文档给出SysCare介绍,并给出基于openEuler的SysCare安装方法以及如何使用SysCare,让用户了解SysCare,并指导用户安装和使用SysCare。 # 读者对象 + 本文档主要适用于使用openEuler并需要使用热补丁的用户。用户需要具备以下经验和技能: * 熟悉Linux基本操作 diff --git a/docs/zh/server/maintenance/syscare/using-syscare.md b/docs/zh/server/maintenance/syscare/using_syscare.md similarity index 100% rename from docs/zh/server/maintenance/syscare/using-syscare.md rename to docs/zh/server/maintenance/syscare/using_syscare.md diff --git a/docs/zh/server/maintenance/sysmonitor/_toc.yaml b/docs/zh/server/maintenance/sysmonitor/_toc.yaml index e3adb629e9f9945da8077074c3eb2803a1555578..65774c3f107c6626137edbd76c18fc881cd0caca 100644 --- a/docs/zh/server/maintenance/sysmonitor/_toc.yaml +++ b/docs/zh/server/maintenance/sysmonitor/_toc.yaml @@ -3,4 +3,4 @@ isManual: true description: 使用 sysmonitor 服务监控 OS 系统运行过程中的异常 sections: - label: sysmonitor用户指南 - href: ./sysmonitor-user-guide.md + href: ./sysmonitor_user_guide.md diff --git a/docs/zh/server/maintenance/sysmonitor/sysmonitor-user-guide.md b/docs/zh/server/maintenance/sysmonitor/sysmonitor_user_guide.md similarity index 99% rename from docs/zh/server/maintenance/sysmonitor/sysmonitor-user-guide.md rename to docs/zh/server/maintenance/sysmonitor/sysmonitor_user_guide.md index 9494fb2c1a7b4b2f7fe565bbbc893e6a5634fb5b..77225e99775dffadbb0aac6acaca6b4e42366b0b 100644 --- a/docs/zh/server/maintenance/sysmonitor/sysmonitor-user-guide.md +++ b/docs/zh/server/maintenance/sysmonitor/sysmonitor_user_guide.md @@ -1,6 +1,7 @@ # sysmonitor ## 介绍 + System Monitor Daemon sysmonitor 负责监控 OS 系统运行过程中的异常,将监控到的异常记录到系统日志(`/var/log/sysmonitor.log`)中。sysmonitor 以服务的形式提供,可以通过 `systemctl start|stop|restart|reload sysmonitor` 启动、关闭、重启、重载服务。建议产品部署 sysmonitor 调测软件,便于定位系统异常问题。 @@ -8,11 +9,13 @@ sysmonitor 负责监控 OS 系统运行过程中的异常,将监控到的异 ![](./figures/sysmonitor功能列表.png) ### 注意事项 + - sysmonitor 不支持并发执行。 - 各配置文件须合法配置,否则可能造成监控框架异常。 - sysmonitor 服务操作和配置文件修改,日志查询需要 root 权限。root 用户具有系统最高权限,在使用 root 用户进行操作时,请严格按照操作指导进行操作,避免不规范操作造成系统管理及安全风险。 ### 配置总览 + sysmonitor 有一个主配置文件(`/etc/sysconfig/sysmonitor`),用于配置各监控项的监控周期、是否需要监控。配置项的=和"之间不能有空格,如`PROCESS_MONITOR="on"`。 配置说明 @@ -95,8 +98,6 @@ stop } ``` - - ## ext3/ext4 文件系统监控 ### 简介 @@ -118,6 +119,7 @@ info|sysmonitor[127]: fs_monitor_ext3_4: loop0 filesystem error. flag is 1879113 ``` ## 关键进程监控 + ### 简介 定期监控系统中关键进程,当系统内关键进程异常退出时,自动尝试恢复关键进程。如果恢复失败并需要告警,可上报告警。系统管理员能被及时告知进程异常退出事件,以及进程是否被恢复拉起。问题定位人员能从日志中定位进程异常退出的时间。 @@ -194,9 +196,8 @@ STOP_COMMAND=systemctl stop irqbalance info|sysmonitor[127]: irqbalance is recovered ``` - - ## 文件监控 + ### 简介 系统关键文件被意外删除后,会导致系统运行异常甚至崩溃。通过文件监控可以及时获知系统中关键文件被删除或者有恶意文件被添加,以便管理员和用户及时获知并处理故障。 @@ -308,9 +309,8 @@ 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 变化进行监控,以便及时感知到异常并方便定位异常原因。 @@ -357,8 +357,6 @@ info|sysmonitor[881]: Fib6 replace fe80::5054:ff:fef6:b73e/128, comm: kworker/1: ``` - - ## cpu 监控 ### 简介 @@ -440,9 +438,8 @@ info|sysmonitor[127]: cpu monitor: execute REPORT_COMMAND[sysmoniotrcpu] sucessf info|sysmonitor[127]: CPU 1,2,3 usage resume 70.1% ``` - - ## 内存监控 + ### 简介 监控系统内存占用情况,当内存使用率超出或低于阈值时,记录日志。 @@ -504,6 +501,7 @@ info|sysmonitor[127]: memory usage resume: 4.6% ``` ## 进程数/线程数监控 + ### 简介 监控系统进程数目和线程数目,当进程总数或线程总数超出或低于阈值时,记录日志或上报告警。 @@ -594,9 +592,8 @@ info|sysmonitor[127]:open threads most 10 processes is [top2:pid=3130,openthread info|sysmonitor[127]:---------------threads count alarm end. --------------- ``` - - ## 系统句柄总数监控 + ### 简介 监控系统文件句柄(fd)数目,当系统文件句柄总数超过或低于阈值时,记录日志。 @@ -641,10 +638,10 @@ info|sysmonitor[127]:open fd most three processes is:[top2:pid=23267,openfdnum=5 info|sysmonitor[127]:open fd most three processes is:[top3:pid=30144,openfdnum=5000,cmd=/home/openfile] ``` - - ## 磁盘 inode 监控 + ### 简介 + 定期监控系统中挂载的磁盘分区 inode,当磁盘分区 inode 使用率大于或等于用户设置的告警阈值,记录磁盘 inode 告警。发生告警后,当磁盘分区 inode 使用率小于用户设置的告警恢复阈值,记录磁盘 inode 恢复告警。 ### 配置文件说明 @@ -678,9 +675,8 @@ 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 延时过大日志。 @@ -713,9 +709,8 @@ info|sysmonitor[127]:local disk sda IO delay is normal, I/O delay threshold is 7 info|sysmonitor[127]:disk is sda, io delay data: 11 22 35 8 9 29 38 ...... ``` - - ## 僵尸进程监控 + ### 简介 监控系统僵尸进程数量,大于告警阈值,记录告警日志。当系统僵尸进程数小于恢复阈值时,告警恢复。 @@ -750,8 +745,6 @@ info|sysmonitor[127]: zombie process count alarm: 600 info|sysmonitor[127]: zombie process count resume: 100 ``` - - ## 自定义监控 ### 简介 diff --git a/docs/zh/server/maintenance/troubleshooting/troubleshooting.md b/docs/zh/server/maintenance/troubleshooting/troubleshooting.md index 9102679c9c39ed706da3513848501caaf31be6b5..d58131a79a4cc3314498156ad7d22805c23e1f4c 100644 --- a/docs/zh/server/maintenance/troubleshooting/troubleshooting.md +++ b/docs/zh/server/maintenance/troubleshooting/troubleshooting.md @@ -84,10 +84,10 @@ echo 3 > /proc/sys/vm/drop_caches 2. 选择Rescue a openEuler system。 3. 按提示操作进行。 - 1)Continue - 2)Read-only mount - 3)Skip to shell - 4)Quit(Reboot) + 1)Continue + 2)Read-only mount + 3)Skip to shell + 4)Quit(Reboot) - 单用户模式 diff --git a/docs/zh/server/memory_storage/etmem/_toc.yaml b/docs/zh/server/memory_storage/etmem/_toc.yaml index 27d9212fe25393e709fa64916773e1586fd7bb1a..71bfe6d9d44fc2fad21e6125a229463803d6f0df 100644 --- a/docs/zh/server/memory_storage/etmem/_toc.yaml +++ b/docs/zh/server/memory_storage/etmem/_toc.yaml @@ -3,4 +3,4 @@ isManual: true description: 使用内存分级扩展技术 etmem 扩展内存容量 sections: - label: 使用etmem - href: ./etmem-user-guide.md + href: ./etmem_user_guide.md diff --git a/docs/zh/server/memory_storage/etmem/etmem-user-guide.md b/docs/zh/server/memory_storage/etmem/etmem_user_guide.md similarity index 100% rename from docs/zh/server/memory_storage/etmem/etmem-user-guide.md rename to docs/zh/server/memory_storage/etmem/etmem_user_guide.md diff --git a/docs/zh/server/memory_storage/gmem/_toc.yaml b/docs/zh/server/memory_storage/gmem/_toc.yaml index 41fd03ace73caa6e003f364a5f8f74f3ef8bbbf5..36121ff4a872e60286a38b9cf5fc2437fc6e226a 100644 --- a/docs/zh/server/memory_storage/gmem/_toc.yaml +++ b/docs/zh/server/memory_storage/gmem/_toc.yaml @@ -3,8 +3,8 @@ isManual: true description: 提供异构互联内存的中心化管理 sections: - label: 概述 - href: ./introduction-to-gmem.md + href: ./introduction_to_gmem.md - label: 安装与部署 - href: ./installation-and-deployment.md + href: ./installation_and_deployment.md - label: 使用方法 - href: ./usage-instructions.md + href: ./usage_instructions.md diff --git a/docs/zh/server/memory_storage/gmem/installation-and-deployment.md b/docs/zh/server/memory_storage/gmem/installation_and_deployment.md similarity index 99% rename from docs/zh/server/memory_storage/gmem/installation-and-deployment.md rename to docs/zh/server/memory_storage/gmem/installation_and_deployment.md index 44505e44e3fc03f86b0b9e52f92baa942924d564..671e3e69784deed4691911be3c0e49040c5e3530 100644 --- a/docs/zh/server/memory_storage/gmem/installation-and-deployment.md +++ b/docs/zh/server/memory_storage/gmem/installation_and_deployment.md @@ -28,8 +28,6 @@ | 昇腾社区 | # CANN软件包
Ascend-cann-toolkit-xxx-linux.aarch64.rpm
# NPU固件与驱动
Ascend-hdk-910-npu-driver-xxx.aarch64.rpm
Ascend-hdk-910-npu-firmware-xxx.noarch.rpm | | 联系GMEM社区维护人员
[@yang_yanchao](https://gitee.com/yang_yanchao) email:
[@LemmyHuang](https://gitee.com/LemmyHuang) email: | gmem-example-xxx.aarch64.rpm
mindspore-xxx-linux_aarch64.whl | - - * 安装内核 使用的openEuler内核版本,确认GMEM相关编译选项已打开(当前默认已经打开)。 @@ -112,9 +110,7 @@ MindSpore version: x.x.x The result of multiplication calculation is correct, MindSpore has been installed on platform [Ascend] successfully! ``` - ## 执行训练或推理任务 基于mindspore的训练或推理任务,在完成以上安装流程后,可直接执行,不需要做任何适配。 - diff --git a/docs/zh/server/memory_storage/gmem/introduction-to-gmem.md b/docs/zh/server/memory_storage/gmem/introduction_to_gmem.md similarity index 89% rename from docs/zh/server/memory_storage/gmem/introduction-to-gmem.md rename to docs/zh/server/memory_storage/gmem/introduction_to_gmem.md index c85001b09ba3b30f0d6652470a006ecaa8de9320..8befaf35369d916ab0a68c44721a2734592e100a 100644 --- a/docs/zh/server/memory_storage/gmem/introduction-to-gmem.md +++ b/docs/zh/server/memory_storage/gmem/introduction_to_gmem.md @@ -31,7 +31,7 @@ GMEM (Generalized Memory Management) 提供了异构互联内存的中心化管 * 驱动使用GMEM统一提供的接口,避免自行造轮子时出现漏洞。 加速卡用户侧,GMEM给使用加速卡进行AI模型及机器学习框架开发提供了更强的可编程性:不再需要手动管理数据是存放在加速卡上还是CPU上。 -* 通过统一的内存申请释放函数与CPU及卡上的内存交互。 -* 同一虚拟地址空间中既可以映射到CPU上,也可以映射到加速卡上。 -* GMEM封装内存管理代码,相比手动管理获得性能提升。 +* 通过统一的内存申请释放函数与CPU及卡上的内存交互。 +* 同一虚拟地址空间中既可以映射到CPU上,也可以映射到加速卡上。 +* GMEM封装内存管理代码,相比手动管理获得性能提升。 diff --git a/docs/zh/server/memory_storage/gmem/usage-instructions.md b/docs/zh/server/memory_storage/gmem/usage_instructions.md similarity index 99% rename from docs/zh/server/memory_storage/gmem/usage-instructions.md rename to docs/zh/server/memory_storage/gmem/usage_instructions.md index 241a5cb6c1ab84473c4bdc422a8c245a63f95046..e55eadf9726b871ceedb15ebd60817080e695e3b 100644 --- a/docs/zh/server/memory_storage/gmem/usage-instructions.md +++ b/docs/zh/server/memory_storage/gmem/usage_instructions.md @@ -63,4 +63,4 @@ libgmem是GMEM用户接口的抽象层,主要功能是是对上述内存语义 ## 约束限制 1. 目前仅支持2M大页,所以host OS以及NPU卡内OS的透明大页需要默认开启。 -2. 通过MAP_PEER_SHARED申请的异构内存目前不支持fork时继承。 \ No newline at end of file +2. 通过MAP_PEER_SHARED申请的异构内存目前不支持fork时继承。 diff --git a/docs/zh/server/memory_storage/hsak/_toc.yaml b/docs/zh/server/memory_storage/hsak/_toc.yaml index a553c9b1bdb4f623ce2b3abd96887f91a7d26176..6fc6595d6212e1495f1fc3710c65c15d4a9db0d9 100644 --- a/docs/zh/server/memory_storage/hsak/_toc.yaml +++ b/docs/zh/server/memory_storage/hsak/_toc.yaml @@ -3,7 +3,7 @@ isManual: true description: HSAK 针对新型存储介质提供高带宽低时延的IO软件栈 sections: - label: 概述 - href: ./hsak-developer-guide.md + href: ./hsak_developer_guide.md - label: 使用HSAK开发应用程序 href: ./development_with_hsak.md - label: HSAK工具使用说明 diff --git a/docs/zh/server/memory_storage/hsak/development_with_hsak.md b/docs/zh/server/memory_storage/hsak/development_with_hsak.md index d96c08a1337679bd2b4c73a97ac45bda9872a094..fec79e33414e7f92fae2caa26bb048971eac78c3 100644 --- a/docs/zh/server/memory_storage/hsak/development_with_hsak.md +++ b/docs/zh/server/memory_storage/hsak/development_with_hsak.md @@ -24,6 +24,7 @@ HSAK配置文件默认安装在/etc/spdk/nvme.conf.in,开发人员可以根据 ### 头文件引用 HSAK提供两个对外头文件,开发者在使用HSAK进行开发时需要包含这两个文件: + 1. bdev_rw.h:定义了数据面用户态IO操作的宏、枚举、数据结构和接口API。 2. ublock.h:定义了管理面设备管理、信息获取等功能的宏、枚举、数据结构和接口API。 @@ -59,7 +60,7 @@ HSAK提供两个对外头文件,开发者在使用HSAK进行开发时需要包 3. 申请IO内存。可调用接口libstorage_alloc_io_buf或libstorage_mem_reserve,前者最大可申请单个65K的IO,后者没有限制(除非无可用空间)。 4. 对磁盘进行读写操作。根据实际业务需要,可调用如下接口进行读写操作: - + - libstorage_async_read - libstorage_async_readv - libstorage_async_write @@ -70,7 +71,7 @@ HSAK提供两个对外头文件,开发者在使用HSAK进行开发时需要包 5. 释放IO内存。可调用接口libstorage_free_io_buf或libstorage_mem_free,需要与申请时调用的接口对应。 6. 关闭磁盘块设备。可调用接口libstorage_close,关闭指定块设备,如果打开了多个块设备,则需要多次重复调用接口进行关闭。 - + | 接口名称 | 功能描述 | | ----------------------- | --------------------------------------------- | | libstorage_init_module | HSAK模块初始化接口。 | @@ -93,31 +94,31 @@ HSAK提供两个对外头文件,开发者在使用HSAK进行开发时需要包 HSAK包含一组C接口,可以对盘进行格式化、创建、删除namespace操作。 1. 首先需要调用C接口对HSAK UIO组件进行初始化,如果已经初始化过了,就不需要再调用了。 - + libstorage_init_module 2. 根据业务需要,调用相应的接口进行盘操作,以下接口可单独调用: - + - libstorage_create_namespace - + - libstorage_delete_namespace - + - libstorage_delete_all_namespace - + - libstorage_nvme_create_ctrlr - + - libstorage_nvme_delete_ctrlr - + - libstorage_nvme_reload_ctrlr - + - libstorage_low_level_format_nvm - + - libstorage_deallocate_block 3. 最后如果退出程序,则需要销毁HSAK UIO,如果还有其他业务在使用,不需要退出,则不用销毁。 - + libstorage_exit_module - + | 接口名称 | 功能描述 | | ------------------------------- | ----------------------------------------- | | libstorage_create_namespace | 在指定控制器上创建namespace(前提是控制器具有namespace管理能力)。 | @@ -134,25 +135,25 @@ HSAK包含一组C接口,可以对盘进行格式化、创建、删除namespace 在HSAK的IO数据面提供一组C接口,用于查询盘信息,上层业务可根据查询到的信息进行相关的业务逻辑处理。 1. 首先需要调用C接口对HSAK UIO进行初始化,如果已经初始化过了,就不需要再调用了。 - + libstorage_init_module 2. 根据业务需要,调用相应接口进行信息查询,以下接口可单独调用: - + - libstorage_get_nvme_ctrlr_info - + - libstorage_get_mgr_info_by_esn - + - libstorage_get_mgr_smart_by_esn - + - libstorage_get_bdev_ns_info - + - libstorage_get_ctrl_ns_info 3. 最后如果退出程序,则需要销毁HSAK UIO,如果还有其他业务在使用,不需要退出,则不用销毁。 - + libstorage_exit_module - + | 接口名称 | 功能描述 | | ------------------------------- | ----------------------------- | | libstorage_get_nvme_ctrlr_info | 获取所有控制器信息。 | @@ -178,7 +179,7 @@ HSAK包含一组C接口,可以对盘进行格式化、创建、删除namespace 3. 在ublock服务端进程或客户端进程调用如下接口进行相应的信息查询业务。 | 接口名称 | 功能描述 | - | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | | ublock_get_bdevs | 业务进程通过调用本接口获取设备列表,获取的设备列表中只有PCI地址,不包含具体设备信息,需要获取具体设备信息,请调用接口ublock_get_bdev。 | | ublock_get_bdev | 进程通过调用本接口获取具体某个设备的信息,设备信息中包括:设备的序列号、型号、fw版本号信息以字符数组形式保持,不是字符串形式。 | | ublock_get_bdev_by_esn | 进程通过调用该接口,根据给定的ESN号获取对应设备的信息,设备信息中:序列号、型号、fw版本号。 | @@ -187,7 +188,6 @@ HSAK包含一组C接口,可以对盘进行格式化、创建、删除namespace | ublock_get_error_log_info | 进程通过调用本接口获取设备的Error log信息。 | | ublock_get_log_page | 进程通过调用本接口获取指定设备,指定log page的信息。 | - 4. 对于块设备列表,在获取相应信息后需要调用以下接口进行资源释放。 | 接口名称 | 功能描述 | @@ -195,9 +195,8 @@ HSAK包含一组C接口,可以对盘进行格式化、创建、删除namespace | ublock_free_bdevs | 进程通过调用本接口释放设备列表。 | | ublock_free_bdev | 进程通过调用本接口释放设备资源。 | - 5. 最后如果退出程序,则需要销毁HSAK ublock模块(服务端和客户端销毁方法相同)。 - + | 接口名称 | 功能描述 | | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | | ublock_fini | 销毁ublock功能模块,本接口将销毁ublock模块以及内部创建的资源,本接口同ublock初始化接口需要配对使用。 | @@ -207,7 +206,7 @@ HSAK包含一组C接口,可以对盘进行格式化、创建、删除namespace HSAK的日志当前是通过syslog默认输出到/var/log/messages中,由操作系统的rsyslog服务管理。如果您需要自定义日志目录,可以通过rsyslog配置。 1. 首先需要在配置文件/etc/rsyslog.conf中增加如下修改: - + ```shell if ($programname == 'LibStorage') then { action(type="omfile" fileCreateMode="0600" file="/var/log/HSAK/run.log") @@ -216,7 +215,7 @@ HSAK的日志当前是通过syslog默认输出到/var/log/messages中,由操 ``` 2. 重启rsyslog服务: - + ```shell sysemctl restart rsyslog ``` @@ -224,4 +223,3 @@ HSAK的日志当前是通过syslog默认输出到/var/log/messages中,由操 3. 启动HSAK进程,日志信息即重定向到对应目录。 4. 重定向日志如果需要转储,需要用户在/etc/logrotate.d/syslog文件中手动配置。 - diff --git a/docs/zh/server/memory_storage/hsak/hsak-developer-guide.md b/docs/zh/server/memory_storage/hsak/hsak_developer_guide.md similarity index 98% rename from docs/zh/server/memory_storage/hsak/hsak-developer-guide.md rename to docs/zh/server/memory_storage/hsak/hsak_developer_guide.md index 4c280e1f25775f7297abd36c3850734d7074d4df..31b6844cc01e29f473f9eaa95145a50854da5d96 100644 --- a/docs/zh/server/memory_storage/hsak/hsak-developer-guide.md +++ b/docs/zh/server/memory_storage/hsak/hsak_developer_guide.md @@ -12,23 +12,23 @@ HSAK用户态IO引擎基于开源的SPDK基础上进行开发: ## 编译教程 1. 下载hsak源码 - + $ git clone https://gitee.com/openeuler/hsak.git 2. 编译和运行依赖 - + hsak的编译和运行依赖于spdk、dpdk、libboundscheck等组件 3. 编译 - + $ cd hsak - + $ mkdir build - + $ cd build - + $ cmake .. - + $ make ## 注意事项 @@ -45,4 +45,3 @@ HSAK用户态IO引擎基于开源的SPDK基础上进行开发: - HSAK ublock组件在一个服务器上只能启动一个服务,且最大支持64个ublock客户端并发访问,ublock服务端处理客户端请求的处理上限是20次/秒。 - HSAK ublock组件必须早于数据面IO组件和ublock客户端启动,HSAK提供的命令行工具也必须在ublock服务端启动后才能执行。 - 不要注册SIGBUS信号处理函数;spdk针对该信号有单独的处理函数;若该函数被覆盖,会导致spdk注册的SIGBUS处理函数失效,产生coredump。 - diff --git a/docs/zh/server/memory_storage/lvm/_toc.yaml b/docs/zh/server/memory_storage/lvm/_toc.yaml index 049106197cea007587f6cd626133c6dad60b5905..f2bc64b8e377d43a654a6dd108e6a2b65f43fd62 100644 --- a/docs/zh/server/memory_storage/lvm/_toc.yaml +++ b/docs/zh/server/memory_storage/lvm/_toc.yaml @@ -3,4 +3,4 @@ isManual: true description: 使用 LVM 管理硬盘 sections: - label: 使用 LVM 管理硬盘 - href: ./managing-drives-through-lvm.md + href: ./managing_drives_through_lvm.md diff --git a/docs/zh/server/memory_storage/lvm/managing-drives-through-lvm.md b/docs/zh/server/memory_storage/lvm/managing_drives_through_lvm.md similarity index 98% rename from docs/zh/server/memory_storage/lvm/managing-drives-through-lvm.md rename to docs/zh/server/memory_storage/lvm/managing_drives_through_lvm.md index 8d33aebd9393e7e19a3e366192ff4615df31589f..1bea086dd2830a331a024adc7c7f19690334f5ad 100644 --- a/docs/zh/server/memory_storage/lvm/managing-drives-through-lvm.md +++ b/docs/zh/server/memory_storage/lvm/managing_drives_through_lvm.md @@ -32,8 +32,8 @@ LVM是逻辑卷管理(Logical Volume Manager)的简称,它是Linux环境 >![](./public_sys-resources/icon-note.gif) **说明:** >openEuler操作系统默认已安装LVM。可通过**rpm -qa | grep lvm2**命令查询,若打印信息中包含“lvm2”信息,则表示已安装LVM,可跳过本章节内容;若无任何打印信息,则表示未安装,可参考本章节内容进行安装。 -1. 配置本地yum源,详细信息请参考[搭建repo服务器](../../../server/administration/administrator/configuring-the-repo-server.md)。 -2. 清除缓存。D:\wudonger\docs\docs\docs\zh\docs\server\administration\administrator\configuring-the-repo-server.md +1. 配置本地yum源,详细信息请参考[搭建repo服务器](../../../server/administration/administrator/configuring_the_repo_server.md)。 +2. 清除缓存。 ```shell dnf clean all diff --git a/docs/zh/server/network/gazelle/_toc.yaml b/docs/zh/server/network/gazelle/_toc.yaml index ba820363fb66dca5fd1a8046f97351d76ca9354c..b2011a02351b34e053e1c0078313def60215456a 100644 --- a/docs/zh/server/network/gazelle/_toc.yaml +++ b/docs/zh/server/network/gazelle/_toc.yaml @@ -3,4 +3,4 @@ isManual: true description: 提高应用的网络 I/O 吞吐能力 sections: - label: Gazelle用户指南 - href: ./gazelle-user-guide.md + 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 similarity index 100% rename from docs/zh/server/network/gazelle/gazelle-user-guide.md rename to docs/zh/server/network/gazelle/gazelle_user_guide.md diff --git a/docs/zh/server/network/network_config/_toc.yaml b/docs/zh/server/network/network_config/_toc.yaml index c5a9b41ee7bd0efef6e4a944163f036d60501c48..b0148614220f817a11410ec8e8f0bd3a99bd4c32 100644 --- a/docs/zh/server/network/network_config/_toc.yaml +++ b/docs/zh/server/network/network_config/_toc.yaml @@ -3,4 +3,4 @@ isManual: true description: 配置ip,主机名,网络绑定等 sections: - label: 配置网络 - href: ./network-configuration.md + 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 similarity index 100% rename from docs/zh/server/network/network_config/network-configuration.md rename to docs/zh/server/network/network_config/network_configuration.md diff --git a/docs/zh/server/performance/cpu_optimization/kae/_toc.yaml b/docs/zh/server/performance/cpu_optimization/kae/_toc.yaml index 1123f0ce7515b755d1d653cfedd763f70f2fbeb6..c2c018a997511e31f9e78e89dca8b09d0c775682 100644 --- a/docs/zh/server/performance/cpu_optimization/kae/_toc.yaml +++ b/docs/zh/server/performance/cpu_optimization/kae/_toc.yaml @@ -3,4 +3,4 @@ isManual: true description: 使用 KAE 加速引擎降低处理器消耗,提高处理器效率 sections: - label: 使用KAE加速引擎 - href: ./using-the-kae.md + href: ./using_the_kae.md diff --git a/docs/zh/server/performance/cpu_optimization/kae/using-the-kae.md b/docs/zh/server/performance/cpu_optimization/kae/using_the_kae.md similarity index 100% rename from docs/zh/server/performance/cpu_optimization/kae/using-the-kae.md rename to docs/zh/server/performance/cpu_optimization/kae/using_the_kae.md diff --git a/docs/zh/server/performance/cpu_optimization/sysboost/_toc.yaml b/docs/zh/server/performance/cpu_optimization/sysboost/_toc.yaml index 6ab68eb55d7ddf3d287d5200cf28b4a967de7a43..185f0e874702ecee34aedfdc400cd44f8ab76382 100644 --- a/docs/zh/server/performance/cpu_optimization/sysboost/_toc.yaml +++ b/docs/zh/server/performance/cpu_optimization/sysboost/_toc.yaml @@ -6,8 +6,8 @@ sections: href: ./sysboost.md sections: - label: 认识sysBoost - href: ./getting-to-know-sysBoost.md + href: ./getting_to_know_sysBoost.md - label: 安装与部署 - href: ./installation-and-deployment.md + href: ./installation_and_deployment.md - label: 使用方法 - href: ./usage-instructions.md + href: ./usage_instructions.md diff --git a/docs/zh/server/performance/cpu_optimization/sysboost/getting-to-know-sysBoost.md b/docs/zh/server/performance/cpu_optimization/sysboost/getting_to_know_sysBoost.md similarity index 100% rename from docs/zh/server/performance/cpu_optimization/sysboost/getting-to-know-sysBoost.md rename to docs/zh/server/performance/cpu_optimization/sysboost/getting_to_know_sysBoost.md diff --git a/docs/zh/server/performance/cpu_optimization/sysboost/installation-and-deployment.md b/docs/zh/server/performance/cpu_optimization/sysboost/installation_and_deployment.md similarity index 100% rename from docs/zh/server/performance/cpu_optimization/sysboost/installation-and-deployment.md rename to docs/zh/server/performance/cpu_optimization/sysboost/installation_and_deployment.md diff --git a/docs/zh/server/performance/cpu_optimization/sysboost/usage-instructions.md b/docs/zh/server/performance/cpu_optimization/sysboost/usage_instructions.md similarity index 100% rename from docs/zh/server/performance/cpu_optimization/sysboost/usage-instructions.md rename to docs/zh/server/performance/cpu_optimization/sysboost/usage_instructions.md diff --git a/docs/zh/server/performance/overall/system_resource/_toc.yaml b/docs/zh/server/performance/overall/system_resource/_toc.yaml index b6a8243dda65617faabf9f0a84b0479d177712e5..ea85bbe0467bdf4cbb8b2f9d70367d4cd3a86abf 100644 --- a/docs/zh/server/performance/overall/system_resource/_toc.yaml +++ b/docs/zh/server/performance/overall/system_resource/_toc.yaml @@ -3,4 +3,4 @@ isManual: true description: 介绍CPU,内存,I/O 及常用性能分析工具 sections: - label: 系统资源与性能 - href: ./system-resources-and-performance.md + href: ./system_resources_and_performance.md 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 similarity index 100% rename from docs/zh/server/performance/overall/system_resource/system-resources-and-performance.md rename to docs/zh/server/performance/overall/system_resource/system_resources_and_performance.md diff --git a/docs/zh/server/performance/system_optimzation/atune/_toc.yaml b/docs/zh/server/performance/system_optimzation/atune/_toc.yaml index 239bfa9952c68ecb22582bc7f55d30a58d39c017..cb27dbc373e5bd32b715b26290bb057727e8d7f7 100644 --- a/docs/zh/server/performance/system_optimzation/atune/_toc.yaml +++ b/docs/zh/server/performance/system_optimzation/atune/_toc.yaml @@ -3,17 +3,17 @@ isManual: true description: 利用人工智能技术,实现对 openEuler 系统性能的智能化、自动化调优 sections: - label: A-Tune用户指南 - href: ./a-tune.md + href: ./a_tune.md sections: - label: 认识A-Tune - href: ./getting-to-know-a-tune.md + href: ./getting_to_know_a-tune.md - label: 安装与部署 - href: ./installation-and-deployment.md + href: ./installation_and_deployment.md - label: 使用方法 - href: ./usage-instructions.md + href: ./usage_instructions.md - label: native-turbo特性 - href: ./native-turbo.md + href: ./native_turbo.md - label: 附录 href: ./appendix.md - label: 常见问题与解决方法 - href: ./faqs-and-solutions.md + href: ./faqs_and_solutions.md diff --git a/docs/zh/server/performance/system_optimzation/atune/a-tune.md b/docs/zh/server/performance/system_optimzation/atune/a_tune.md similarity index 100% rename from docs/zh/server/performance/system_optimzation/atune/a-tune.md rename to docs/zh/server/performance/system_optimzation/atune/a_tune.md diff --git a/docs/zh/server/performance/system_optimzation/atune/faqs-and-solutions.md b/docs/zh/server/performance/system_optimzation/atune/faqs_and_solutions.md similarity index 100% rename from docs/zh/server/performance/system_optimzation/atune/faqs-and-solutions.md rename to docs/zh/server/performance/system_optimzation/atune/faqs_and_solutions.md diff --git a/docs/zh/server/performance/system_optimzation/atune/getting-to-know-a-tune.md b/docs/zh/server/performance/system_optimzation/atune/getting_to_know_a-tune.md similarity index 100% rename from docs/zh/server/performance/system_optimzation/atune/getting-to-know-a-tune.md rename to docs/zh/server/performance/system_optimzation/atune/getting_to_know_a-tune.md diff --git a/docs/zh/server/performance/system_optimzation/atune/installation-and-deployment.md b/docs/zh/server/performance/system_optimzation/atune/installation_and_deployment.md similarity index 97% rename from docs/zh/server/performance/system_optimzation/atune/installation-and-deployment.md rename to docs/zh/server/performance/system_optimzation/atune/installation_and_deployment.md index cce0bcd94a2e655647fefdf67975438a479acd5d..f0e4a77222cbe7e4d2bdb135b69e08629c4a672b 100644 --- a/docs/zh/server/performance/system_optimzation/atune/installation-and-deployment.md +++ b/docs/zh/server/performance/system_optimzation/atune/installation_and_deployment.md @@ -10,7 +10,11 @@ ## 环境准备 +<<<<<<<< HEAD:docs/zh/server/performance/system_optimzation/atune/installation-and-deployment.md - 安装openEuler系统,安装方法参考 《[安装指南](../../../installation_upgrade/installation/installation-on-servers.md)》。 +======== +- 安装openEuler系统,安装方法参考 《[安装指南](../../../../server/installation_upgrade/installation/installation_on_servers.md)》。 +>>>>>>>> 6b124a04c (文档整改):docs/zh/server/performance/system_optimzation/atune/installation_and_deployment.md - 安装A-Tune需要使用root权限。 diff --git a/docs/zh/server/performance/system_optimzation/atune/native-turbo.md b/docs/zh/server/performance/system_optimzation/atune/native_turbo.md similarity index 100% rename from docs/zh/server/performance/system_optimzation/atune/native-turbo.md rename to docs/zh/server/performance/system_optimzation/atune/native_turbo.md diff --git a/docs/zh/server/performance/system_optimzation/atune/usage-instructions.md b/docs/zh/server/performance/system_optimzation/atune/usage_instructions.md similarity index 100% rename from docs/zh/server/performance/system_optimzation/atune/usage-instructions.md rename to docs/zh/server/performance/system_optimzation/atune/usage_instructions.md diff --git a/docs/zh/server/performance/tuning_framework/oeaware/_toc.yaml b/docs/zh/server/performance/tuning_framework/oeaware/_toc.yaml index 3ff9122cfb5c8fad0cd0fb55762fc8c37fb7a67b..7436917c2ce03e67b886f86a5b26e0e35ac46923 100644 --- a/docs/zh/server/performance/tuning_framework/oeaware/_toc.yaml +++ b/docs/zh/server/performance/tuning_framework/oeaware/_toc.yaml @@ -3,4 +3,4 @@ isManual: true description: 动态感知系统行为后,智能使能系统的调优特性 sections: - label: oeAware用户指南 - href: ./oeaware-user-guide.md + href: ./oeaware_user_guide.md diff --git a/docs/zh/server/performance/tuning_framework/oeaware/oeaware-user-guide.md b/docs/zh/server/performance/tuning_framework/oeaware/oeaware_user_guide.md similarity index 100% rename from docs/zh/server/performance/tuning_framework/oeaware/oeaware-user-guide.md rename to docs/zh/server/performance/tuning_framework/oeaware/oeaware_user_guide.md diff --git a/docs/zh/server/quickstart/quickstart/_toc.yaml b/docs/zh/server/quickstart/quickstart/_toc.yaml index 8f4fcc74618851fe784c256ad367c47126ba49e2..3eafbb9e48784703fce6e084076432c0bbd90db7 100644 --- a/docs/zh/server/quickstart/quickstart/_toc.yaml +++ b/docs/zh/server/quickstart/quickstart/_toc.yaml @@ -3,4 +3,4 @@ isManual: true description: 快速地安装和使用 openEuler 操作系统 sections: - label: 快速入门 - href: ./quick-start.md + href: ./quick_start.md diff --git a/docs/zh/server/quickstart/quickstart/quick-start.md b/docs/zh/server/quickstart/quickstart/quick_start.md similarity index 99% rename from docs/zh/server/quickstart/quickstart/quick-start.md rename to docs/zh/server/quickstart/quickstart/quick_start.md index f1214fe901723b13cd8ee6de6d20173bc9a92b3f..9f6d704b0b15a0d2a12c14273f80838187caf9f1 100644 --- a/docs/zh/server/quickstart/quickstart/quick-start.md +++ b/docs/zh/server/quickstart/quickstart/quick_start.md @@ -1,6 +1,6 @@ # 快速入门 -本文档以TaiShan 200服务器上安装 openEuler 为例,旨在指导用户快速地安装和使用openEuler操作系统,更详细的安装要求和安装方法请参考《[安装指南](../../installation_upgrade/installation/installation-on-servers.md)》。 +本文档以TaiShan 200服务器上安装 openEuler 为例,旨在指导用户快速地安装和使用openEuler操作系统,更详细的安装要求和安装方法请参考《[安装指南](../../../server/installation_upgrade/installation/installation_on_servers.md)》。 ## 安装要求 diff --git a/docs/zh/server/releasenotes/releasenotes/_toc.yaml b/docs/zh/server/releasenotes/releasenotes/_toc.yaml index a809d2e6b36586e8654e27ddb648859b3ed0346d..c72236f437eb3f479d3bc0f33f71b64787bebed8 100644 --- a/docs/zh/server/releasenotes/releasenotes/_toc.yaml +++ b/docs/zh/server/releasenotes/releasenotes/_toc.yaml @@ -2,26 +2,28 @@ label: 发行说明 isManual: true description: openEuler 25.03 版本的发行说明 sections: + - label: 发行说明 + href: ./release_notes.md - label: 简介 href: ./introduction.md - label: 法律声明 - href: ./terms-of-use.md + href: ./terms_of_use.md - label: 用户须知 - href: ./user-notice.md + href: ./user_notice.md - label: 帐号清单 - href: ./account-list.md + href: ./account_list.md - label: 系统安装 - href: ./os-installation.md + href: ./os_installation.md - label: 关键特性 - href: ./key-features.md + href: ./key_features.md - label: 已知问题 - href: ./known-issues.md + href: ./known_issues.md - label: 已修复问题 - href: ./resolved-issues.md + href: ./resolved_issues.md - label: CVE漏洞 href: ./cve.md - label: 源代码 - href: ./source-code.md + href: ./source_code.md - label: 参与贡献 href: ./contribution.md - label: 致谢 diff --git a/docs/zh/server/releasenotes/releasenotes/account-list.md b/docs/zh/server/releasenotes/releasenotes/account_list.md similarity index 100% rename from docs/zh/server/releasenotes/releasenotes/account-list.md rename to docs/zh/server/releasenotes/releasenotes/account_list.md diff --git a/docs/zh/server/releasenotes/releasenotes/key-features.md b/docs/zh/server/releasenotes/releasenotes/key_features.md similarity index 94% rename from docs/zh/server/releasenotes/releasenotes/key-features.md rename to docs/zh/server/releasenotes/releasenotes/key_features.md index c11569c737f8cd8afd7e78f20d7875012aeb0a3e..bfed4217cc6ffae6ed93d7c7bcf1ca0e84ed76aa 100644 --- a/docs/zh/server/releasenotes/releasenotes/key-features.md +++ b/docs/zh/server/releasenotes/releasenotes/key_features.md @@ -1,6 +1,7 @@ # 关键特性 ## 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、MindSpore等相应的AI框架软件,支持AI应用在openEuler上高效开发与运行。 @@ -8,14 +9,14 @@ 1. SDK镜像:以openEuler为基础镜像,安装相应硬件平台的SDK,如Ascend平台的CANN或NVIDIA的CUDA软件。 2. AI框架镜像:以SDK镜像为基础,安装AI框架软件,如PyTorch或TensorFlow。此外,通过此部分镜像也可快速搭建AI分布式场景,如Ray等AI分布式框架。 3. 模型应用镜像:在AI框架镜像的基础上,包含完整的工具链和模型应用。 - + 相关使用方式请参考[openEuler AI 容器镜像用户指南](https://forum.openeuler.org/t/topic/4189/4)。 - **AI for OS**:当前,openEuler和AI深度结合,一方面使用基础大模型,基于大量openEuler操作系统的代码和数据,训练出openEuler Copilot System,初步实现代码辅助生成、智能问题智能分析、系统辅助运维等功能,让openEuler更智能。 - 智能问答:openEuler Copilot System智能问答平台目前支持web和智能shell两个入口。 1. 工作流调度:原子化智能体操作流程:通过采用“流”的组织形式,openEuler Copilot System允许用户将智能体的多个操作过程组合成一个内部有序、相互关联的多步骤“工作流”;即时数据处理:智能体在工作流的每个步骤中生成的数据和结果能够立即得到处理,并无缝传递到下一个步骤;智能交互:在面对模糊或复杂的用户指令时,openEuler Copilot System能主动询问用户,以澄清或获取更多信息。 2. 任务推荐:智能响应:openEuler Copilot System能够分析用户输入的语义信息;智能指引:openEuler Copilot System综合分析当前工作流的执行状况、功能需求以及关联任务等多维度数据,为用户量身定制最适宜的下一步操作建议。 3. RAG:openEluer Copilot System中的RAG技术能更强的适应多种文档格式和内容场景,在不为系统增加较大负担的情况下,增强问答服务体验。 - 4. 语料治理:语料治理是openEuler Copilot System中的RAG技术的基础能力之一,其通过片段相对关系提取、片段衍生物构建和OCR等方式将语料以合适形态入库,以增强用户查询命中期望文档的概率。 + 4. 语料治理:语料治理是openEuler Copilot System中的RAG技术的基础能力之一,其通过片段相对关系提取、片段衍生物构建和OCR等方式将语料以合适形态入库,以增强用户查询命中期望文档的概率。 相关使用方式请参考[openEuler Copilot System 智能问答用户指南](https://gitee.com/openeuler/docs/tree/stable2-22.03_LTS_SP3/docs/zh/docs/AI/openEuler_Copilot_System/%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97) - 智能调优:openEluer Copilot System 智能调优功能目前支持智能shell入口。 @@ -28,8 +29,11 @@ 1. SDK层:仅封装使能AI硬件资源的组件库,例如:cuda、cann等。 2. SDK + 训练/推理框架:在SDK层的基础上加装tensorflow、pytorch等框架,例如:tensorflow2.15.0-cuda12.2.0、pytorch2.1.0.a1-cann7.0.RC1等。 3. SDK + 训练/推理框架 + 大模型:在第2类容器上选配几个模型进行封装,例如llama2-7b、chatglm2-13b等语言模型。 + ## openEuler Embedded -openEuler Embedded围绕以制造、机器人为代表的OT领域持续深耕,通过行业项目垂直打通,不断完善和丰富嵌入式系统软件栈和生态。openEuler发布面向嵌入式领域的版本openEuler 24.03 LTS SP1,构建了一个相对完整的综合嵌入系统软件平台,在南北向生态、关键技术特性、基础设施、落地场景等方面都有显著的进步。未来openEuler Embedded将协同openEuler社区生态伙伴、用户、开发者,逐步扩展支持龙芯等新的芯片架构和更多的南向硬件,完善工业中间件、嵌入式AI、嵌入式边缘、仿真系统等能力,打造综合嵌入式系统软件平台解决方案。 + +openEuler Embedded围绕以制造、机器人为代表的OT领域持续深耕,通过行业项目垂直打通,不断完善和丰富嵌入式系统软件栈和生态。openEuler发布面向嵌入式领域的版本openEuler 24.03 LTS SP1,构建了一个相对完整的综合嵌入系统软件平台,在南北向生态、关键技术特性、基础设施、落地场景等方面都有显著的进步。未来openEuler Embedded将协同openEuler社区生态伙伴、用户、开发者,逐步扩展支持龙芯等新的芯片架构和更多的南向硬件,完善工业中间件、嵌入式AI、嵌入式边缘、仿真系统等能力,打造综合嵌入式系统软件平台解决方案。 + - **南向生态**:openEuler Embedded Linux当前主要支持ARM64、x86-64、ARM32、RISC-V等多种芯片架构,未来计划支持龙芯等架构,从24.03 版本开始,南向支持大幅改善,已经支持树莓派、海思、瑞芯微、瑞萨、德州仪器、飞腾、赛昉、全志等厂商的芯片。openEuler 24.03 LTS SP1新增鲲鹏920支持。 - **嵌入式弹性虚拟化底座**:openEuler Embedded的弹性虚拟化底座是为了在多核片上系统(SoC, System On Chip)上实现多个操作系统共同运行的一系列技术的集合,包含了裸金属、嵌入式虚拟化、轻量级容器、LibOS、可信执行环境(TEE)、异构部署等多种实现形态。 - **混合关键性部署框架**: openEuler Embedded打造了构建在融合弹性底座之上混合关键性部署框架,并命名为MICA(MIxed CriticAlity),旨在通过一套统一的框架屏蔽下层弹性底座形态的不同,从而实现Linux和其他OS运行时便捷地混合部署。依托硬件上的多核能力使得通用的Linux和专用的实时操作系统有效互补,从而达到全系统兼具两者的特点,并能够灵活开发、灵活部署。 @@ -38,8 +42,11 @@ openEuler Embedded围绕以制造、机器人为代表的OT领域持续深耕, 1. 支持Cortex-M、ARM64、X86_64、riscv64架构,支持M4、RK3568、RK3588、X86_64、Hi3093、树莓派4B、鲲鹏920、昇腾310、全志D1s。 2. 支持树莓派4B、Hi3093、RK3588、X86_64设备上通过裸金属模式和openEuler Embedded Linux混合部署。 3. 支持通过gdb在openEuler Embedded Linux侧远程调试。 - ## DevStation 开发者工作站支持 + +## DevStation 开发者工作站支持 + openEuler首个面向开发者的开发者工作站Devstation正式发布,预装VSCODE,Devstation将打通部署,编码,编译,构建,发布全流程,开发者可以方便的使用oeDeploy完成AI软件栈,云原生软件栈部署,使用oeDevPlugin插件进行一键拉取代码仓,一键使用AI4C编译器编译,一键调用EulerMaker,轻松使用Devstation版本进行软件开发;同时Devstation将会集成openEuler新型包管理体系EPKG,可以进行多环境,多版本安装,方便开发者在不同版本之间进行切换。 + - **开发者友好的集成环境**:发行版预装了广泛的开发工具和 IDE,如 VS Code系列等。支持多种编程语言,满足从前端、后端到全栈开发的需求。 - **软件包管理与自动部署**:提供简单便捷的软件包管理工具,支持通过一键安装和更新多种开发环境。同时,内置 Docker、Isula 等容器技术,方便开发者进行应用容器化与自动化部署,提供新型包管理体系EPKG,支持多版本部署,大大降低开发者在安装不同开发工具时的使用门槛。 - **图形化编程环境**:集成了图形化编程工具,降低了新手的编程门槛,同时也为高级开发者提供了可视化编程的强大功能。 @@ -47,17 +54,24 @@ openEuler首个面向开发者的开发者工作站Devstation正式发布,预 - **调试与测试工具**:内置 GDB、CUnit、gtest、perf等调试工具和测试、调优工具,帮助开发者快速调试和自动化测试,提升开发效率。 - **版本控制和协作**:集成 Git、SVN 等版本控制工具,并支持多种远程协作工具,如 Slack、Mattermost 和 GitLab,使得团队开发和远程协作更加顺畅。 - **安全与合规检查**:提供安全扫描和代码合规性检查工具,帮助开发者在开发阶段就能发现并修复潜在的安全漏洞和代码问题。 + ## epkg新型软件包 + epkg是一款新型软件包,支持普通用户在操作系统中安装及使用。新的软件包格式相比现有软件包,主要解决多版本兼容性问题,用户可以在一个操作系统上通过简单地命令行安装不同版本的软件包。同时支持环境环境实现环境的创建/切换/使能等操作,来使用不同版本的软件包。目前epkg主要支持非服务类的软件包的安装和使用。 + - **多版本兼容**:支持普通用户安装,支持安装不同版本的软件包,不同版本的同一软件包安装不冲突。使能用户在同一个节点上,快速安装同一软件包的不同版本,实现多版本软件包的共存。 - **环境管理**:支持环境环境实现环境的创建/切换/使能等操作,用户通过环境的切换,在环境中使用不同的channel,实现在不同的环境中使用不同版本的软件包。用户可以基于环境,快速实现软件包版本的切换。 - **普通用户安装**:epkg支持普通用户安装软件包,普通用户能够自行创建环境,对个人用户下的环境镜像管理,无需特权版本。降低软件包安装引起的安全问题。 ## GCC 14多版本编译工具链支持 + 为了使能多样算例新特性,满足不同用户对不同硬件特性支持的需求,在 openEuler 24.03 LTS SP1 版本推出 openEuler GCC Toolset 14编译工具链,该工具链提供一个高于系统主 GCC 版本的副版本 GCC 14编译工具链,为用户提供了更加灵活且高效的编译环境选择。通过使用 openEuler GCC Toolset 14副版本编译工具链,用户可以轻松地在不同版本的 GCC 之间进行切换,以便充分利用新硬件特性,同时享受到 GCC 最新优化所带来的性能提升。 -为了与系统默认主版本 GCC 解耦,防止副版本 GCC 安装与主版本GCC 安装的依赖库产生冲突,openEuler GCC Toolset 14工具链的软件包名均以前缀“gcc-toolset-14-”开头,后接原有GCC软件包名。 +为了与系统默认主版本 GCC 解耦,防止副版本 GCC 安装与主版本GCC 安装的依赖库产生冲突,openEuler GCC Toolset 14工具链的软件包名均以前缀“gcc-toolset-14-”开头,后接原有GCC软件包名。 此外,为便于版本切换与管理,本方案引入SCL版本切换工具。SCL工具的核心就是会在/opt/openEuler/gcc-toolset-14 路径下提供一个enable脚本,通过注册将 gcc-toolset-14 的环境变量注册到 SCL 工具中,从而可以使用 SCL 工具启动一个新的 bash shell,此 bash shell 中的环境变量即为 enable 脚本中设置的副版本环境变量,从而实现主副版本 GCC 工具链的便捷切换。 + ## 内核创新 + openEuler 24.03 LTS SP1基于 Linux Kernel 6.6内核构建,在此基础上,同时吸收了社区高版本的有益特性及社区创新特性。 + - **内存管理folio特性**:Linux内存管理基于page(页)转换到由folio(拉丁语 foliō,对开本)进行管理,相比page,folio可以由一个或多个page组成,采用struct folio参数的函数声明它将对整个(1个或者多个)页面进行操作,而不仅仅是PAGE_SIZE字节,从而移除不必要复合页转换,降低误用tail page问题;从内存管理效率上采用folio减少LRU链表数量,提升内存回收效率,另一方,一次分配更多连续内存减少page fault次数,一定程度降低内存碎片化;而在IO方面,可以加速大IO的读写效率,提升吞吐。全量支持匿名页、文件页的large folio,提供系统级别的开关控制,业务可以按需使用。对于ARM64架构,基于硬件contiguous bit技术(16个连续PTE只占一个 TLB entry),可以进一步降低系统TLB miss,从而提升整体系统性能。24.03 LTS SP1版本新增支持anonymous shmem分配mTHP与支持mTHP的lazyfree,进一步增加内存子系统对于large folio的支持;新增page cache分配mTHP的sysfs控制接口,提供系统级别的开关控制,业务可以按需使用。 - **MPTCP特性支持**:MPTCP协议诞生旨在突破传统 TCP 协议的单一路径传输瓶颈,允许应用程序使用多个网络路径进行并行数据传输。这一设计优化了网络硬件资源的利用效率,通过智能地将流量分配至不同传输路径,显著缓解了网络拥塞问题,从而提高数据传输的可靠性和吞吐量。 @@ -65,7 +79,7 @@ openEuler 24.03 LTS SP1基于 Linux Kernel 6.6内核构建,在此基础上, 1. 网络通路的选择:在现有的网络通路中,根据延迟、带宽等指标评估,选择最优的通路。 2. 无缝切网:在不同类型网络之间切换时,数据传输不中断。 3. 数据分流:同时使用多个通道传输,对数据包进行分发实现并发传输,增加网络带宽。 - + 在实验环境中,采用MPTCP v1技术的RSYNC文件传输工具展现出了令人满意的效率提升。具体而言,传输1.3GB大小的文件时,传输时间由原来的114.83 s缩短至仅14.35s,平均传输速度由原来的11.08 MB/s提升至88.25 MB/s,可以极大程度的缩减文件传输时间。同时,实验模拟了传输过程中一条或多条路径突发故障而断开的场景,MPTCP在此种场景下可以将数据无缝切换至其他可用的数据通道,确保数据传输的连续性与完整性。 在openEuler 24.03 LTS SP1中,已经完成了对linux主线内核6.9中MPTCP相关特性的全面移植与功能优化。 - **ext4文件系统支持Large folio**:iozone性能总分可以提升80%,iomap框架回写流程支持批量映射block。支持ext4默认模式下批量申请block,大幅优化各类benchmark下ext4性能表现(华为贡献)。ext4 buffer io读写流程以及pagecache回写流程弃用老旧的buffer_head框架,切换至iomap框架,并通过iomap框架实现ext4支持large folio。24.03 LTS SP1版本新增对于block size < folio size场景的小buffered IO(<=4KB)的性能优化,性能提升20%。 @@ -77,30 +91,44 @@ openEuler 24.03 LTS SP1基于 Linux Kernel 6.6内核构建,在此基础上, - **IMA RoT特性**:当前,Linux IMA(Integrity Measurement Architecture)子系统主要使用 TPM 芯片作为可信根(Root of Trust,RoT)设备,针对度量列表提供完整性证明,其在编码上也与 TPM 的操作紧耦合。而机密计算等新场景要求 IMA 可使用新型 RoT 设备,例如 openEuler 已支持的 VirtCCA。本特性为一套 IMA RoT 设备框架,在 IMA 子系统和 RoT 设备之间实现一个抽象层,既简化各类 RoT 设备对 IMA 子系统的适配,也方便用户和 IMA 子系统对各类 RoT 设备实施配置和操作。 - **支持脚本类病毒程序防护**:目前勒索病毒主要是脚本类文件(如JSP文件),而当前内核防御非法入侵的IMA完整性保护技术,主要针对ELF类病毒文件。脚本类病毒文件通过解释器运行,能够绕开内核中的安全技术实施攻击。为了支持内核中的IMA完整性保护技术可以检查系统中间接执行的脚本类文件,通过系统调用execveat()新增执行检查的flags,查验其执行权限,并在检查中调用IMA完整性度量接口以实现对脚本类文件的完整性保护。经测试验证,目前已经支持脚本解释器主动调用execveat()系统调用函数并传入AT_CHECK参数对脚本文件进行可执行权限检查(包括IMA检查),只有当权限检查成功后,才可继续运行脚本文件。 - **haltpoll特性**:haltpoll特性通过虚拟机guest vcpu在空闲时进行轮询的机制,避免vcpu唤醒时发送IPI中断,降低了中断发送和处理的开销,并且由于轮询时虚拟机不需要陷出,减少了陷入陷出的开销,该特性能够降低进程间通信时延,显著提升上下文切换效率,提升虚机性能。 + - **内核TCP/IP协议栈支持CAQM拥塞**:内核TCP/IP协议栈支持CAQM拥塞控制算法:CAQM是一种主动队列管理算法,一种网络拥塞控制机制,主要运行于数据中心使用TCP传输数据的计算端侧节点和传输路径上的网侧交换机节点。通过网侧交换节点主动计算网络空闲带宽和最优带宽分配,端侧协议栈与网侧交换机协同工作,在高并发场景下获得网络交换机“零队列“”拥塞控制效果和极低传输时延。CAQM算法通过在以太链路层增加拥塞控制标记字段,实现动态调整队列长度,减少延迟和丢包,提高网络资源的利用率。对于数据中心低延时通算场景,可极大减少延迟和丢包的发生,增强用户体验。在数据中心典型场景下,对比经典Cubic算法,关键指标提升:1)传输时延:CAQM vs Cubic 时延降低92.4%。2)带宽利用率:在交换机队列缓存占用降低90%的情况下,仍保持TCP传输带宽利用率逼近100%(99.97%)。CAQM算法使用说明:1)本算法需要端侧服务器和网侧交换机协同配合,故中间节点交换机,需要支持CAQM协议(协议头识别,拥塞控制字段调整等);2)本算法通过内核编译宏(CONFIG_ETH_CAQM)控制,默认不使能,用户需通过打开编译宏,重新编译替换内核后,使能算法功能。 -## NestOS容器操作系统 + +## NestOS容器操作系统 + NestOS是在openEuler社区孵化的云底座操作系统,集成了rpm-ostree支持、ignition配置等技术。采用双根文件系统、原子化更新的设计思路,使用nestos-assembler快速集成构建,并针对K8S、OpenStack等平台进行适配,优化容器运行底噪,使系统具备十分便捷的集群组建能力,可以更安全的运行大规模的容器化工作负载。 + - **开箱即用的容器平台**:NestOS集成适配了iSulad、Docker、Podman等主流容器引擎,为用户提供轻量级、定制化的云场景OS。 - **简单易用的配置过程**:NestOS通过ignition技术,可以以相同的配置方便地完成大批量集群节点的安装配置工作。 - **安全可靠的包管理**:NestOS使用rpm-ostree进行软件包管理,搭配openEuler软件包源,确保原子化更新的安全稳定状态。 - **友好可控的更新机制**:NestOS使用zincati提供自动更新服务,可实现节点自动更新与重新引导,实现集群节点有序升级而服务不中断。 - - **紧密配合的双根文件系统**:NestOS采用双根文件系统的设计实现主备切换,确保NestOS运行期间的完整性与安全性。 -## syscare特性增强 + - **紧密配合的双根文件系统**:NestOS采用双根文件系统的设计实现主备切换,确保NestOS运行期间的完整性与安全性。 + +## syscare特性增强 + SysCare是一个系统级热修复软件,为操作系统提供安全补丁和系统错误热修复能力,主机无需重新启动即可修复该系统问题。​ SysCare将内核态热补丁技术与用户态热补丁技术进行融合统一,用户仅需聚焦在自己核心业务中,系统修复问题交予SysCare进行处理。后期计划根据修复组件的不同,提供系统热升级技术,进一步解放运维用户提升运维效率。 + - **热补丁制作**:用户仅需输入目标软件的源码RPM包、调试信息RPM包与待打补丁的路径,无需对软件源码进行任何修改,即可生成对应的热补丁RPM包。 - **热补丁生命周期管理**:SysCare提供一套完整的,傻瓜式补丁生命周期管理方式,旨在减少用户学习、使用成本,通过单条命令即可对热补丁进行管理。依托于RPM系统,SysCare构建出的热补丁依赖关系完整,热补丁分发、安装、更新与卸载流程均无需进行特殊处理,可直接集成放入软件仓repo。 - **内核热补丁与用户态热补丁融合**:SysCare基于upatch和kpatch技术,覆盖应用、动态库、内核,自顶向下打通热补丁软件栈,提供用户无感知的全栈热修复能力。 - **新增特性**:支持重启后按照用户操作顺序恢复。ACCEPTED状态热补丁。 + ## iSula支持NRI插件式扩展 -NRI (Node Resource Interface), 是用于控制节点资源的公共接口, 是CRI兼容的容器运行时插件扩展的通用框架。它为扩展插件提供了跟踪容器状态,并对其配置进行有限修改的基本机制。允许将用户某些自定的逻辑插入到OCI兼容的运行时中,此逻辑可以对容器进行受控更改,或在容器生命周期的某些时间点执行 OCI 范围之外的额外操作。iSulad新增对NRI插件式扩展的支持,减少k8s场景下对于容器资源管理维护成本,消除调度延迟,规范信息的一致性。 + +NRI (Node Resource Interface), 是用于控制节点资源的公共接口, 是CRI兼容的容器运行时插件扩展的通用框架。它为扩展插件提供了跟踪容器状态,并对其配置进行有限修改的基本机制。允许将用户某些自定的逻辑插入到OCI兼容的运行时中,此逻辑可以对容器进行受控更改,或在容器生命周期的某些时间点执行 OCI 范围之外的额外操作。iSulad新增对NRI插件式扩展的支持,减少k8s场景下对于容器资源管理维护成本,消除调度延迟,规范信息的一致性。 + NRI插件通过请求isula-rust-extension组件中启动的NRI runtime Service服务与iSulad建立连接后,可订阅Pod与Container的生命周期事件: -1. 可订阅Pod生命周期事件,包括:creation、stopping和removal。 -2. 可订阅Container生命周期事件,包括creation、post-creation、starting、post-start、updating、post-update、stopping和removal。 + +1.可订阅Pod生命周期事件,包括:creation、stopping和removal。 +2.可订阅Container生命周期事件,包括creation、post-creation、starting、post-start、updating、post-update、stopping和removal。 iSulad在接收到k8s下发的CRI请求后,对于所有订阅了对应生命周期事件的NRI插件都发送的请求,NRI插件可在请求中获得Pod与Container的元数据与资源信息。之后NRI插件可根据需求更新Pod与Container的资源配置,并将更新的信息传递给iSulad,iSulad将更新后的配置传递给容器运行时,生效配置。 + ## oeAware采集、调优插件等功能增强 + oeAware是在openEuler上实现低负载采集感知调优的框架,目标是动态感知系统行为后智能使能系统的调优特性。传统调优特性都以独立运行且静态打开关闭为主,oeAware将调优拆分为采集、感知和调优三层,每层通过订阅方式关联,各层采用插件式开发尽可能复用。 oeAware 的每个插件都是按oeAware 标准接口开发的动态库,包含若干个实例,每个实例可以是一个独立的采集、感知或调优功能集,每个实例包含若干个topic,其中 topic 主要用于提供采集或者感知的数据结果,这些数据结果可供其他插件或者外部应用进行调优或分析。 + - SDK提供的接口可以实现订阅插件的topic,回调函数接收oeAware的数据,外部应用可以通过SDK开发定制化功能,例如完成集群各节点信息采集,分析本节点业务特征。 - PMU信息采集插件:采集系统PMU性能记录。 - Docker 信息采集插件:采集当前环境Docker的一些参数信息。 @@ -111,67 +139,87 @@ oeAware 的每个插件都是按oeAware 标准接口开发的动态库,包含 - Docker调优插件:利用cpuburst特性在突发负载下环境CPU性能瓶颈。 ## KubeOS特性增强 -KubeOS是针对云原生场景而设计、轻量安全的云原生操作系统及运维工具,提供基于kubernetes的云原生操作系统统一运维能力。KubeOS设计了专为容器运行的云原生操作系统,通过根目录只读,仅包含容器运行所需组件,dm-verity安全加固,减少漏洞和攻击面,提升资源利用率和启动速度,提供云原化的、轻量安全的操作系统。KubeOS支持使用kubernetes原生声明式API,统一对集群worker节点OS的进行升级、配置和运维,从而降低云原生场景的运维难度、解决用户集群节点OS版本分裂,缺乏统一的OS运维管理方案的问题。 + +KubeOS是针对云原生场景而设计、轻量安全的云原生操作系统及运维工具,提供基于kubernetes的云原生操作系统统一运维能力。KubeOS设计了专为容器运行的云原生操作系统,通过根目录只读,仅包含容器运行所需组件,dm-verity安全加固,减少漏洞和攻击面,提升资源利用率和启动速度,提供云原化的、轻量安全的操作系统。KubeOS支持使用kubernetes原生声明式API,统一对集群worker节点OS的进行升级、配置和运维,从而降低云原生场景的运维难度、解决用户集群节点OS版本分裂,缺乏统一的OS运维管理方案的问题。 KubeOS新增配置能力、定制化镜像制作能力和rootfs完整性保护dm-verity如图所示,具体能力如下: -- KubeOS支持集群参数统一配置,支持通过KubeOS统一settings配置,支持如下配置: -(1)KubeOS支持limits.conf文件参数统一配置; -(2)KubeOS支持containerd、kubelet等集群参数统一配置。 + +- KubeOS支持集群参数统一配置,支持通过KubeOS统一settings配置,支持如下配置: +(1)KubeOS支持limits.conf文件参数统一配置; +(2)KubeOS支持containerd、kubelet等集群参数统一配置。 - KubeOS支持镜像定制化,镜像制作时支持systemd服务、grub密码、系统盘分区、用户/用户组、文件、脚本和persist分区目录的自定义配置。 - KubeOS支持静态完整性保护dm-verity,支持在虚拟机镜像制作时开启dm-verity,对rootfs进行完整行校验,并支持dm-verity开启时的升级和配置。 + ## IMA特性增强 + 内核完整性度量架构(IMA, Integrity Measurement Architecture)是Linux开源,且在业界被广泛使用的文件完整性保护技术。在实际应用场景中,IMA可以用来对系统运行的程序发起完整性检查,一方面检测应用程序篡改,另一方面通过白名单机制以保证只有经过认证(如签名或HMAC)的文件才可以被运行。 目前运行在Linux操作系统上的应用程序可分为两种: + - 二进制可执行程序:即符合ELF格式标准的程序文件,可直接通过exec/mmap系统调用运行。 - 解释器类应用程序:即通过解释器间接运行的程序文件,如通过Bash/Python/Lua等解释器加载运行的脚本程序,或JVM运行的Java程序等。 对于二进制可执行程序,IMA可以通过在exec/mmap系统调用的hook函数发起度量或校验流程,从而实现完整性保护。 但是针对解释器类应用程序,现有的IMA机制无法进行有效保护。其原因是此类应用程序主要通过read系统调用由解释器加载并解析运行,而IMA无法将其和其他可变的文件(如配置文件、临时文件等)进行区分,一旦针对read系统调用配置开启IMA机制,则会将其他可变文件也纳入保护范围,而可变文件无法预先生成度量基线或校验凭据,从而导致完整性检查失败。 因此本特性旨在对现有IMA机制进行增强,有效提升对解释器类应用程序的完整性保护能力。 + ## 异构可信根 + 典型的攻击手段往往伴随着信息系统真实性、完整性的破坏,目前业界的共识是通过硬件可信根对系统关键组件进行度量/验证,一旦检测到篡改或仿冒行为,就执行告警或拦截。 -当前业界主流是采用TPM作为信任根,结合完整性度量软件栈逐级构筑系统信任链,从而保证系统各组件的真实性和完整性。openEuler当前支持的完整性度量特性包括:度量启动、IMA文件度量、DIM内存度量等。 +当前业界主流是采用TPM作为信任根,结合完整性度量软件栈逐级构筑系统信任链,从而保证系统各组件的真实性和完整性。openEuler当前支持的完整性度量特性包括:度量启动、IMA文件度量、DIM内存度量等。 openEuler 24.03 LTS SP1版本在内核的integrity子模块中实现了一套可信根框架,南向支持多种可信根驱动,北向提供统一度量接口,对接上层完整性保护软件栈,将完整性度量特性的硬件可信根支持范围从单TPM扩展为多元异构可信根。 + ## secGear特性增强 + secGear远程证明统一框架是机密计算远程证明相关的关键组件,屏蔽不同TEE远程证明差异,提供Attestation Agent和Attestation Service两个组件,Agent供用户集成获取证明报告,对接证明服务;Service可独立部署,支持iTrustee、virtCCA远程证明报告的验证。 远程证明统一框架聚焦机密计算相关功能,部署服务时需要的服务运维等相关能力由服务部署第三方提供。远程证明统一框架的关键技术如下: + - 报告校验插件框架:支持运行时兼容iTrustee、vritCCA、CCA等不同TEE平台证明报告检验,支持扩展新的TEE报告检验插件。 - 证书基线管理:支持对不同TEE类型的TCB/TA基线值管理及公钥证书管理,集中部署到服务端,对用户透明。 - 策略管理:提供默认策略(易用)、用户定制策略(灵活)。 - 身份令牌:支持对不同TEE签发身份令牌,由第三方信任背书,实现不同TEE类型相互认证。 - 证明代理:支持对接证明服务/点对点互证,兼容TEE报告获取,身份令牌验证等,易集成,使用户聚焦业务。 -根据使用场景,支持点对点验证和证明服务验证两种模式。 -证明服务验证流程如下: -(1)用户(普通节点或TEE)对TEE平台发起挑战。 -(2)TEE平台通过证明代理获取TEE证明报告,并返回给用户。 -(3)用户端证明代理将报告转发到远程证明服务。 -(4)远程证明服务完成报告校验,返回由第三方信任背书的统一格式身份令牌。 -(5)证明代理验证身份令牌,并解析得到证明报告校验结果。 -点对点验证流程(无证明服务)如下: -(1)用户向TEE平台发起挑战,TEE平台返回证明报告给用户。 -(2)用户使用本地点对点TEE校验插件完成报告验证。 -注意:点对点验证和远程证明服务验证时的证明代理不同,在编译时可通过编译选项,决定编译有证明服务和点对点模式的证明代理。 +根据使用场景,支持点对点验证和证明服务验证两种模式。 +证明服务验证流程如下: +(1)用户(普通节点或TEE)对TEE平台发起挑战。 +(2)TEE平台通过证明代理获取TEE证明报告,并返回给用户。 +(3)用户端证明代理将报告转发到远程证明服务。 +(4)远程证明服务完成报告校验,返回由第三方信任背书的统一格式身份令牌。 +(5)证明代理验证身份令牌,并解析得到证明报告校验结果。 +点对点验证流程(无证明服务)如下: +(1)用户向TEE平台发起挑战,TEE平台返回证明报告给用户。 +(2)用户使用本地点对点TEE校验插件完成报告验证。 +注意:点对点验证和远程证明服务验证时的证明代理不同,在编译时可通过编译选项,决定编译有证明服务和点对点模式的证明代理。 + ## 容器干扰检测,分钟级完成业务干扰源(CPU/IO)识别与干扰源发现 + gala-anteater是一款基于AI的操作系统灰度故障的异常检测平台,集成了多种异常检测算法,通过自动化模型预训练、线上模型的增量学习和模型更新,可以实现系统级故障发现和故障点上报。 在线容器高密部署场景下,存在资源无序竞争现象,导致容器实例间相互干扰,使用gala-anteater可以分钟级完成业务干扰源(CPU/IO)识别与干扰源发现,辅助运维人员快速跟踪并解决问题,保障业务Qos。 gala-anteater通过线上线下相结合,利用在线学习技术,实现模型的线下学习,线上更新,并应用于线上异常检测。 + 1. Offline: 首先,利用线下历史KPI数据集,经过数据预处理、特征选择,得到训练集;然后,利用得到的训练集,对无监督神经网络模型(例如Variational Autoencoder)进行训练调优。最后,利用人工标注的测试集,选择最优模型。 2. Online: 将线下训练好的模型,部署到线上,然后利用线上真实的数据集,对模型进行在线训练以及参数调优,然后利用训练好的模型,进行线上环境的实时异常检测。 - -## Aops适配authHub统一用户鉴权 + +## Aops适配authHub统一用户鉴权 + authhub是一个基于oauth2协议开发的统一用户鉴权中心,Aops通过authHub管理应用注册,实现应用间的统一用户鉴权。 authHub基于oauth2协议,实现统一用户鉴权中心,用户鉴权中心功能包括: + - 应用管理:应用部署后需要在authHub应用管理界面进行注册和配置,用户可以使用注册的应用的功能。 - 用户鉴权:在authHub管理的应用中,用户可以实现单点登录和单点登出。 + ## 微服务性能问题分钟级定界/定位(TCP,IO,调度等) + 基于拓扑的根因推导技术提供了大规模集群情况下的故障检测、根因定位服务,新增云原生场景故障定界定位能力,特别是针对网络L7层协议,如HTTPS、PGSQL、MYSQL等。这项技术通过 gala-gopher、gala-spider和 gala-anteater实现,新增内容提供了更细粒度的故障定界能力,通过这种能力运维团队可以快速定位问题源头,从而提高系统的稳定性和可靠性。该服务主要功能如下: + - 指标采集服务:gala-gopher 通过 ebpf 技术提供网络、IO相关的指标采集上报功能。 - 集群拓扑构建服务:gala-spider 通过接受指标采集服务上报的数据信息,构建容器、进程级别的调用关系拓扑图构建。 - 故障检测服务:gala-anteater通过故障检测模型对应用上报的指标采集进行分类, 判断是否发生异常。 - 根因定位服务:gala-anteater 通过节点异常信息和拓扑图信息, 定位导致此次异常的根因节点。 + ## utsudo项目发布 + Sudo 是 Unix 和 Linux 操作系统中常用的工具之一,它允许用户在需要超级用户权限的情况下执行特定命令。然而, 传统 Sudo 在安全性和可靠性方面存在一些缺陷,为此 utsudo 项目应运而生。 utsudo 是一个采用 Rust 重构 Sudo 的项目,旨在提供一个更加高效、安全、灵活的提权工具,涉及的模块主要有通用工具、整体框架和功能插件等。 @@ -181,32 +229,39 @@ Sudo 是 Unix 和 Linux 操作系统中常用的工具之一,它允许用户 - 临时提权:允许普通用户通过输入自己的密码,临时提升为超级用户执行特定的命令或任务。 - 灵活配置:可以设置参数如命令别名、环境变量、执行参数等,以满足复杂的系统管理需求。 -**增强功能** +**增强功能** utsudo在openEuler 24.09版本中是0.0.2版本,当前版本主要功能有: + - 提权流程:把普通用户执行命令的进程,提权为root权限。 - 插件加载流程:实现了对插件配置文件的解析,以及对插件库的动态加载。 -## utshell 项目发布 + +## utshell 项目发布 + utshell 是一个延续了 bash 使用习惯的全新 shell,它能够与用户进行命令行交互,响应用户的操作去执行命令并给予 反馈。并且能执行自动化脚本帮助运维。 -**基本功能** -- 命令执行:可以执行部署在用户机器上的命令,并将执行的返回值反馈给用户。 -- 批处理:通过脚本完成自动任务执行。 -- 作业控制:能够将用户命令作为后台作业,从而实现多个命令同时执行。并对并行执行的任务进行管理和控制。 +**基本功能** +- 命令执行:可以执行部署在用户机器上的命令,并将执行的返回值反馈给用户。 +- 批处理:通过脚本完成自动任务执行。 +- 作业控制:能够将用户命令作为后台作业,从而实现多个命令同时执行。并对并行执行的任务进行管理和控制。 - 历史记录:记录用户所输入的命令。 - 别名功能:能够让用户对命令起一个自己喜欢的别名,从而个性化自己的操作功能。 -**增强功能** +**增强功能** utshell在openEuler24.09版本中是0.5版本,当前版本主要功能有: + - 实现对shell脚本的解析。 - 实现对第三方命令的执行。 -## GCC for openEuler -GCC for openEuler基线版本已经从GCC 10.3升级到GCC 12.3版本,支持自动反馈优化、软硬件协同、内存优化、SVE向量化、矢量化数学库等特性。 +## GCC for openEuler + +GCC for openEuler基线版本已经从GCC 10.3升级到GCC 12.3版本,支持自动反馈优化、软硬件协同、内存优化、SVE向量化、矢量化数学库等特性。 + 1. GCC版本升级到12.3,默认语言标准从C14/C++14升级到C17/C++17标准,支持Armv9-a架构,X86的AVX512 FP16等更多硬件架构特性。 2. 支持结构体优化,指令选择优化等,充分使能ARM架构的硬件特性,运行效率高,在SPEC CPU 2017等基准测试中性能大幅优于上游社区的GCC 10.3版本。 3. 支持自动反馈优化特性,实现应用层MySQL数据库等场景性能大幅提升。 **功能描述** + - 支持ARM架构下SVE矢量化优化,在支持SVE指令的机器上启用此优化后能够提升程序运行的性能。 - 支持内存布局优化,通过重新排布结构体成员的位置,使得频繁访问的结构体成员放置于连续的内存空间上,提升Cache的命中率,提升程序运行的性能。 - 支持SLP转置优化,在循环拆分阶段增强对连续访存读的循环数据流分析能力,同时在SLP矢量化阶段,新增转置操作的分析处理,发掘更多的矢量化机会,提升性能。 @@ -218,104 +273,123 @@ GCC for openEuler基线版本已经从GCC 10.3升级到GCC 12.3版本,支持 - 支持自动反馈优化,使用perf收集程序运行信息并解析,完成编译阶段和二进制阶段反馈优化,提升MySQL数据库等主流应用场景的性能。 ## Gazelle特性增强 + Gazelle是一款高性能用户态协议栈。它基于DPDK在用户态直接读写网卡报文,共享大页内存传递报文,使用轻量级LwIP协议栈。能够大幅提高应用的网络I/O吞吐能力。专注于数据库网络性能加速,兼顾高性能与通用性。本次版本新增容器场景xdp部署模式及openGauss数据库tpcc支持,丰富用户态协议栈。 -- 高性能(超轻量):基于 dpdk、lwip 实现高性能轻量协议栈能力。 -- 极致性能:基于区域大页划分、动态绑核、全路径零拷贝等技术,实现高线性度并发协议栈。 -- 硬件加速:支持 TSO/CSUM/GRO 等硬件卸载,打通软硬件垂直加速路径。 -- 通用性(posix 兼容):接口完全兼容 posix api,应用零修改,支持 udp 的 recvfrom 和 sendto 接口。 -- 通用网络模型:基于 fd 路由器、代理式唤醒等机制实现自适应网络模型调度,udp 多节点的组播模型,满足任意网络应用场景。 -- 易用性(即插即用):基于 LD_PRELOAD 实现业务免配套,真正实现零成本部署。 -- 易运维(运维工具):具备流量统计、指标日志、命令行等完整运维手段。 +- 高性能(超轻量):基于 dpdk、lwip 实现高性能轻量协议栈能力。 +- 极致性能:基于区域大页划分、动态绑核、全路径零拷贝等技术,实现高线性度并发协议栈。 +- 硬件加速:支持 TSO/CSUM/GRO 等硬件卸载,打通软硬件垂直加速路径。 +- 通用性(posix 兼容):接口完全兼容 posix api,应用零修改,支持 udp 的 recvfrom 和 sendto 接口。 +- 通用网络模型:基于 fd 路由器、代理式唤醒等机制实现自适应网络模型调度,udp 多节点的组播模型,满足任意网络应用场景。 +- 易用性(即插即用):基于 LD_PRELOAD 实现业务免配套,真正实现零成本部署。 +- 易运维(运维工具):具备流量统计、指标日志、命令行等完整运维手段。 **新增特性** + - 支持基于ipvlan 的l2模式网卡上通过xdp的方式部署使用Gazelle。 - 新增中断模式,可以支持在无流量或低流量场景下,lstack不再占满CPU核。 - 优化pingpong模式的网络,在数据包进行pingpong收发时,优化报文的发送行为。 - 新增对openGauss数据库的单机及单主备tpcc测试支持。 ## virtCCA机密虚机 + virtCCA机密虚机特性基于鲲鹏920系列S-EL2能力,在TEE侧实现机密虚机能力,实现现有普通虚机中的软件栈无缝迁移到机密环境中。基于Arm CCA标准接口,在Trustzone固件基础上构建TEE虚拟化管理模块,实现机密虚机间的内存隔离、上下文管理、生命周期管理和页表管理等机制,支持客户应用无缝迁移到机密计算环境中。 + 1. 设备直通: 设备直通是基于华为鲲鹏920新型号通过预埋在PCIE Root Complex里的PCIE保护组件,在PCIE总线上增加选通器,对CPU与外设间的通信进行选通,即对SMMU的Outbound Traffic和Inbound Traffic的控制流和数据流进行控制,以此保证整体数据链路的安全性。 -基于virtCCA PCIPC的设备直通能力,实现对PCIE设备的安全隔离和性能提升,存在以下优势: -(1)安全隔离 -TEE侧控制设备的访问权限,Host侧软件无法访问TEE侧设备; -(2)高性能 -机密设备直通,相比业界加解密方案,数据面无损耗; -(3)易用性 -兼容现有开源OS,无需修改开源OS内核驱动代码。 +基于virtCCA PCIPC的设备直通能力,实现对PCIE设备的安全隔离和性能提升,存在以下优势: +(1)安全隔离 +TEE侧控制设备的访问权限,Host侧软件无法访问TEE侧设备; +(2)高性能 +机密设备直通,相比业界加解密方案,数据面无损耗; +(3)易用性 +兼容现有开源OS,无需修改开源OS内核驱动代码。 2. 国密硬件加速: 国密硬件加速是基于华为鲲鹏芯片,通过KAE加速器能力复用到安全侧,并采用openEuler UADK用户态加速器框架,提供客户机密虚机内国密加速性能提升以及算法卸载的能力。 + ## 海光CSV3支持 -海光第三代安全虚拟化技术(CSV3)在前二代技术的基础上继续增强,在CPU内部实现了虚拟机数据的安全隔离,禁止主机操作系统读写CSV3虚拟机内存,禁止主机操作系统读写虚拟机嵌套页表,保证了虚拟机数据的完整性,实现了CSV3虚拟机数据机密性和完整性的双重安全。 -**安全内存隔离单元** -安全内存隔离单元是海光第三代安全虚拟化技术的专用硬件,是实现虚拟机数据完整性的硬件基础。该硬件集成于CPU内部,放置于CPU核心访问内存控制器的系统总线路径上。该硬件可获取CSV3虚拟机安全内存的信息,包括内存物理地址,虚拟机VMID,及相关的权限等。CPU在访问内存时,访问请求先经过安全内存隔离单元做合法性检查,若访问允许,继续访问内存,否则访问请求被拒绝。 -以CSV3架构图为例,在CSV3虚拟机运行过程中读取或写入内存时,先经过页表翻译单元完成虚拟机物理地址(GPA, Guest Physical Address)到主机物理地址(HPA, Host Physical Address)的转换,再向地址总线发出内存访问请求。访问请求中除了包含读写命令、内存地址(HPA),还必须同时发出访问者的VM ID。 -当CPU读取内存数据时,若安全内存隔离单元判断内存读取请求者的VMID错误,返回固定模式的数据。当CPU写入内存数据时,若安全内存隔离单元判断内存写入请求者的VMID错误,丢弃写入请求。 +海光第三代安全虚拟化技术(CSV3)在前二代技术的基础上继续增强,在CPU内部实现了虚拟机数据的安全隔离,禁止主机操作系统读写CSV3虚拟机内存,禁止主机操作系统读写虚拟机嵌套页表,保证了虚拟机数据的完整性,实现了CSV3虚拟机数据机密性和完整性的双重安全。 + +**安全内存隔离单元** +安全内存隔离单元是海光第三代安全虚拟化技术的专用硬件,是实现虚拟机数据完整性的硬件基础。该硬件集成于CPU内部,放置于CPU核心访问内存控制器的系统总线路径上。该硬件可获取CSV3虚拟机安全内存的信息,包括内存物理地址,虚拟机VMID,及相关的权限等。CPU在访问内存时,访问请求先经过安全内存隔离单元做合法性检查,若访问允许,继续访问内存,否则访问请求被拒绝。 +以CSV3架构图为例,在CSV3虚拟机运行过程中读取或写入内存时,先经过页表翻译单元完成虚拟机物理地址(GPA, Guest Physical Address)到主机物理地址(HPA, Host Physical Address)的转换,再向地址总线发出内存访问请求。访问请求中除了包含读写命令、内存地址(HPA),还必须同时发出访问者的VM ID。 +当CPU读取内存数据时,若安全内存隔离单元判断内存读取请求者的VMID错误,返回固定模式的数据。当CPU写入内存数据时,若安全内存隔离单元判断内存写入请求者的VMID错误,丢弃写入请求。 -**安全处理器** -安全内存隔离单元是海光第三代安全虚拟化保护虚拟机内存完整性的核心硬件,对此硬件单元的配置必须保证绝对安全,无法被主机操作系统修改。 -海光安全处理器是SoC内独立于主CPU之外的处理器,是CPU的信任根。安全处理器在CPU上电后,通过内置验签密钥验证固件的完整性,并加载执行。安全处理器具有独立硬件资源和封闭的运行环境,是CPU内最高安全等级硬件,管理整个CPU的安全。安全内存隔离单元的内容仅安全处理器有权限配置和管理,主机操作系统无权读写。 -在虚拟机启动时,主机操作系统向安全处理器发送请求,安全处理器对安全内存隔离单元做初始配置。虚拟机运行期间,安全处理器固件更新安全内存隔离单元。虚拟机退出后,安全处理器清除安全内存隔离单元的配置。安全处理器会检查主机发来的配置请求是否合法,主机向安全处理器发起的任何非法配置请求,都会被拒绝。 -虚拟机整生命周期内,安全内存隔离单元都在安全处理器的管理控制之下,保证了其配置的安全性。 +**安全处理器** +安全内存隔离单元是海光第三代安全虚拟化保护虚拟机内存完整性的核心硬件,对此硬件单元的配置必须保证绝对安全,无法被主机操作系统修改。 +海光安全处理器是SoC内独立于主CPU之外的处理器,是CPU的信任根。安全处理器在CPU上电后,通过内置验签密钥验证固件的完整性,并加载执行。安全处理器具有独立硬件资源和封闭的运行环境,是CPU内最高安全等级硬件,管理整个CPU的安全。安全内存隔离单元的内容仅安全处理器有权限配置和管理,主机操作系统无权读写。 +在虚拟机启动时,主机操作系统向安全处理器发送请求,安全处理器对安全内存隔离单元做初始配置。虚拟机运行期间,安全处理器固件更新安全内存隔离单元。虚拟机退出后,安全处理器清除安全内存隔离单元的配置。安全处理器会检查主机发来的配置请求是否合法,主机向安全处理器发起的任何非法配置请求,都会被拒绝。 +虚拟机整生命周期内,安全内存隔离单元都在安全处理器的管理控制之下,保证了其配置的安全性。 -**Virtual Machine Control Block(VMCB)保护** -Virtual Machine Control Block(VMCB)是虚拟机的控制信息块,保存了虚拟机ID(VMID),虚拟机页表基地址,虚拟机寄存器页面基地址等控制信息,主机操作系统通过修改虚拟机控制信息能够影响并更改虚拟机内存数据。 +**Virtual Machine Control Block(VMCB)保护** +Virtual Machine Control Block(VMCB)是虚拟机的控制信息块,保存了虚拟机ID(VMID),虚拟机页表基地址,虚拟机寄存器页面基地址等控制信息,主机操作系统通过修改虚拟机控制信息能够影响并更改虚拟机内存数据。 CSV3增加了对虚拟机控制信息的保护,安全处理器负责创建VMCB,并配置于安全内存隔离单元的硬件保护之下。主机操作系统无法更改CSV3虚拟机VMCB的内容。 -为更好的与主机操作系统的软件配合,CSV3创建了真实VMCB与影子VMCB页面。主机操作系统创建影子VMCB,填入控制信息,传递给安全处理器。安全处理器创建真实VMCB页面,复制影子VMCB中除虚拟机ID,虚拟机页表基地址,虚拟机寄存器页面基地址等关键信息之外的控制信息,并自行添加关键控制信息。虚拟机使用真实VMCB页面启动和运行,阻止了主机操作系统对虚拟机VMCB的攻击。 - -## 密码套件openHiTLS -openHiTLS旨在通过提供轻量化、可裁剪的软件技术架构及丰富的国际主流及中国商用密码算法、协议,满足云计算、大数据、AI、金融等多样化行业的安全需求。它具备算法先进、性能卓越、安全可靠、开放架构及多语言平滑兼容等特点,为开发者提供了一套安全、可扩展的密码解决方案。通过社区共建与生态建设,openHiTLS推动密码安全标准在各行各业的加速落地,同时构建以openEuler为核心的安全开源生态,为用户带来更加安全、可靠的数字环境。 - -**支持主流的密码协议和算法** -支持国际主流及中国商用密码算法和协议,可根据场景需求选择合适的密码算法和协议。 -- 支持中国商用密码算法:SM2、SM3、SM4等 -- 支持国际主流算法:AES、RSA、(EC)DSA、(EC)DH、SHA3、HMAC等 -- 支持GB/T 38636-2020 TLCP标准,即双证书国密通信协议 -- 支持TLS1.2、TLS1.3、DTLS1.2协议 - -**开放架构实现全场景密码应用覆盖** -通过开放架构、技术创新及全产业链的应用实践,向产业界提供一站式全场景覆盖。 -- 灵活南、北向接口:北向统一接口行业应用快速接入;南向设备抽象,广泛的运行在各类业务系统 -- 多语言平滑兼容:统一接口层(FFI)提供多语言兼容的能力,一套密码套件支持多种语言应用 -- 广泛的产品应用实践:全产业链应用场景密码技术实践,确保密码套件在不同场景下的高性能、高安全和高可靠 - -**分层分级解耦、按需裁剪,实现密码套件轻量化** -加密内存成本无法回避,分层分级解耦实现密码算法软件极致成本。 -- 分层分级解耦:TLS、证书、算法功能分层解耦、算法抽象、调度管理、算法原语分级解耦、高内聚低耦合、按需组合 -- 高级抽象接口:提供高级抽象接口,避免算法裁剪引入对外接口变更,降低软件成本前提下,保持对外接口不变 -- 极致成本:按需裁剪,特性依赖关系自动管理,可实现PBKDF2 + AES算法BIN20K、堆内存1K、栈内存256字节 - -**密码算法敏捷架构,应对后量子迁移** +为更好的与主机操作系统的软件配合,CSV3创建了真实VMCB与影子VMCB页面。主机操作系统创建影子VMCB,填入控制信息,传递给安全处理器。安全处理器创建真实VMCB页面,复制影子VMCB中除虚拟机ID,虚拟机页表基地址,虚拟机寄存器页面基地址等关键信息之外的控制信息,并自行添加关键控制信息。虚拟机使用真实VMCB页面启动和运行,阻止了主机操作系统对虚拟机VMCB的攻击。 + +## 密码套件openHiTLS + +openHiTLS旨在通过提供轻量化、可裁剪的软件技术架构及丰富的国际主流及中国商用密码算法、协议,满足云计算、大数据、AI、金融等多样化行业的安全需求。它具备算法先进、性能卓越、安全可靠、开放架构及多语言平滑兼容等特点,为开发者提供了一套安全、可扩展的密码解决方案。通过社区共建与生态建设,openHiTLS推动密码安全标准在各行各业的加速落地,同时构建以openEuler为核心的安全开源生态,为用户带来更加安全、可靠的数字环境。 + +**支持主流的密码协议和算法** +支持国际主流及中国商用密码算法和协议,可根据场景需求选择合适的密码算法和协议。 + +- 支持中国商用密码算法:SM2、SM3、SM4等 +- 支持国际主流算法:AES、RSA、(EC)DSA、(EC)DH、SHA3、HMAC等 +- 支持GB/T 38636-2020 TLCP标准,即双证书国密通信协议 +- 支持TLS1.2、TLS1.3、DTLS1.2协议 + +**开放架构实现全场景密码应用覆盖** +通过开放架构、技术创新及全产业链的应用实践,向产业界提供一站式全场景覆盖。 + +- 灵活南、北向接口:北向统一接口行业应用快速接入;南向设备抽象,广泛的运行在各类业务系统。 +- 多语言平滑兼容:统一接口层(FFI)提供多语言兼容的能力,一套密码套件支持多种语言应用。 +- 广泛的产品应用实践:全产业链应用场景密码技术实践,确保密码套件在不同场景下的高性能、高安全和高可靠。 + +**分层分级解耦、按需裁剪,实现密码套件轻量化** +加密内存成本无法回避,分层分级解耦实现密码算法软件极致成本。 + +- 分层分级解耦:TLS、证书、算法功能分层解耦、算法抽象、调度管理、算法原语分级解耦、高内聚低耦合、按需组合。 +- 高级抽象接口:提供高级抽象接口,避免算法裁剪引入对外接口变更,降低软件成本前提下,保持对外接口不变。 +- 极致成本:按需裁剪,特性依赖关系自动管理,可实现PBKDF2 + AES算法BIN20K、堆内存1K、栈内存256字节。 + +**密码算法敏捷架构,应对后量子迁移** 通过密码算法敏捷架构、技术创新实现应用快速迁移和先进算法的快速演进。 -- 统一北向接口:提供对算法标准化、可扩展的接口,避免算法切换造成接口变动,上层业务应用需要大范围适配新接口 -- 算法插件化管理框架:实现对算法插件化管理,算法Provider层支持算法运行时动态加载,提供热加载算法的能力 -- 算法使用配置化:支持通过配置文件获取算法信息,可避免算法标识代码硬编码 + +- 统一北向接口:提供对算法标准化、可扩展的接口,避免算法切换造成接口变动,上层业务应用需要大范围适配新接口。 +- 算法插件化管理框架:实现对算法插件化管理,算法Provider层支持算法运行时动态加载,提供热加载算法的能力。 +- 算法使用配置化:支持通过配置文件获取算法信息,可避免算法标识代码硬编码。 + ## AI集群慢节点快速发现 Add Fail-slow Detection + AI集群在训练过程中不可避免会发生性能劣化,导致性能劣化的原因很多且复杂。现有方案是在发生性能劣化之后利用日志分析,但是从日志收集到问题定界根因诊断以及现网闭环问题需要长达3-4天之久。基于上述痛点问题,我们设计了一套在线慢节点定界方案,该方案能够实时在线观测系统关键指标,并基于模型和数据驱动的算法对观测数据进行实时分析给出劣慢节点的位置,便于系统自愈或者运维人员修复问题。 基于分组的指标对比技术提供了AI集群训练场景下的的慢节点/慢卡检测能力。这项技术通过 gala-anteater实现,新增内容包括配置文件、算法库、慢节点空间维度对比算法和慢节点时间维度对比,最终输出慢节点异常时间、异常指标以及对应的慢节点/慢卡ip, 从而提高系统的稳定性和可靠性。该服务主要功能如下: -- 配置文件:主要包括待观测指标类型、指标算法配置参数以及数据接口,用于初始化慢节点检测算法。 -- 算法库:包括常用的时序异常检测算法spot算法,k-sigma算法,异常节点聚类算法和相似度度量算法。 + +- 配置文件:主要包括待观测指标类型、指标算法配置参数以及数据接口,用于初始化慢节点检测算法。 +- 算法库:包括常用的时序异常检测算法spot算法,k-sigma算法,异常节点聚类算法和相似度度量算法。 - 数据:包括指标数据、作业拓扑数据以及通信域数据,指标数据表示指标的时序序列,作业拓扑数据表示训练作业所用的节点信息,通信域数据表示节点通信的连接关系,包括数据并行、张量并行和流水线并行等。 - 指标分组对比: 包括组内空间异常节点筛选和单节点时间异常筛选。组内空间异常节点筛选根据异常聚类算法输出异常节点;单节点时间异常筛选根据单节点历史数据进行时序异常检测判断节点是否异常。 + ## rubik在离线混部调度协同增强 -云数据中心资源利用率低(< 20%)是行业普遍存在的问题,提升资源利用率已经成为了一个重要的技术课题。将业务区分优先级混合部署(简称混部)运行是典型有效的资源利用率提升手段。然而,将多种类型业务混合部署能够显著提升集群资源利用率,也带来了共峰问题,会导致关键业务服务质量(QoS)受损。因此,如何在提升资源利用率之后,保障业务 QoS 不受损是技术上的关键挑战。 + +云数据中心资源利用率低(< 20%)是行业普遍存在的问题,提升资源利用率已经成为了一个重要的技术课题。将业务区分优先级混合部署(简称混部)运行是典型有效的资源利用率提升手段。然而,将多种类型业务混合部署能够显著提升集群资源利用率,也带来了共峰问题,会导致关键业务服务质量(QoS)受损。因此,如何在提升资源利用率之后,保障业务 QoS 不受损是技术上的关键挑战。 rubik 是 openEuler提供的容器混部引擎,提供一套自适应的单机算力调优和服务质量保障机制,旨在保障关键业务服务质量不下降的前提下,提升节点资源利用率。 -- Cache 及内存带宽控制:支持对低优先级虚拟机的 LLC 和内存带宽进行限制,当前仅支持静态分配。 + +- Cache 及内存带宽控制:支持对低优先级虚拟机的 LLC 和内存带宽进行限制,当前仅支持静态分配。 - CPU 干扰控制:支持CPU时间片us级抢占及SMT干扰隔离,同时具有防优先级反转能力。 - 内存资源抢占:支持在节点OOM时优先杀死离线业务,从而保证在线业务的服务质量。 -- memcg异步内存回收:支持限制混部时离线应用使用的总内存,并在在线内存使用量增加时动态压缩离线业务内存使用。 -- QuotaBurst柔性限流:支持关键在线业务被 CPU 限流时允许短时间突破 limit 限制,保障在线业务运行的服务质量。 -- PSI 指标观测增强:支持 cgroup v1 级别的压力信息统计,识别和量化资源竞争导致的业务中断风险,支撑用户实现 硬件资源利用率提升。 +- memcg异步内存回收:支持限制混部时离线应用使用的总内存,并在在线内存使用量增加时动态压缩离线业务内存使用。 +- QuotaBurst柔性限流:支持关键在线业务被 CPU 限流时允许短时间突破 limit 限制,保障在线业务运行的服务质量。 +- PSI 指标观测增强:支持 cgroup v1 级别的压力信息统计,识别和量化资源竞争导致的业务中断风险,支撑用户实现 硬件资源利用率提升。 - IOCost限制业务io权重:支持限制混部是离线业务的磁盘读写速率,防止离线业务争抢在线业务的磁盘带宽,从而提升在线业务服务质量。 - CPI指标观测:支持通过观察CPI指标统计当前节点的压力,识别并驱逐离线业务以保证在线应用的服务质量。 - + 此版本新增以下特性: + - 节点CPU/内存干扰控制和驱逐:支持通过观测当前节点的CPU和内存水位,在资源紧张情况下通过驱逐离线业务,保证节点水位安全。 ## CFGO反馈优化特性增强 + 日益膨胀的代码体积导致当前处理器前端瓶颈成为普遍问题,影响程序运行性能。编译器反馈优化技术可以有效解决此类问题。 CFGO(Continuous Feature Guided Optimization)是GCC for openEuler和毕昇编译器的反馈优化技术名,指多模态(源代码、二进制)、全生命周期(编译、链接、链接后、运行时、OS、库)的持续反馈优化,主要包括以下两类优化技术: @@ -325,45 +399,58 @@ CFGO(Continuous Feature Guided Optimization)是GCC for openEuler和毕昇编 GCC CFGO反馈优化共包含三个子特性:CFGO-PGO、CFGO-CSPGO、CFGO-BOLT,通过依次使能这些特性可以缓解处理前端瓶颈,提升程序运行时性能。为了进一步提升优化效果,建议CFGO系列优化与链接时优化搭配使用,即在CFGO-PGO、CFGO-CSPGO优化过程中增加-flto=auto编译选项。 - CFGO-PGO - + CFGO-PGO在传统PGO优化的基础上,利用AI4C对部分优化遍进行增强,主要包括inline、常量传播、去虚化等优化,从而进一步提升性能。 + - CFGO-CSPGO PGO的profile对上下文不敏感,可能导致次优的优化效果。通过在PGO后增加一次CFGO-CSPGO插桩优化流程,收集inline后的程序运行信息,从而为代码布局和寄存器优化等编译器优化遍提供更准确的执行信息,实现性能进一步提升。 + - CFGO-BOLT CFGO-BOLT在基线版本的基础上,新增aarch64架构软件插桩、inline优化支持等优化,最终进一步提升性能。 ## AI4C编译选项调优和AI编译优化提升典型应用性能 + AI4C(AI for Compiler)代表AI辅助编译优化套件,是一个使用AI技术优化编译选项和优化遍关键决策的软件框架,旨在突破当前编译器领域的两个关键业务挑战: + 1. 性能提升困难:传统编译器优化开发周期长,新的编译优化技术与已有编译优化过程难以兼容达到1+1>=2的效果,导致性能提升无法达到预期效果。 2. 调优效率低下:硬件架构或者软件业务场景变更,需要根据新的负载条件投入大量人力成本,重新调整编译优化的成本模型,导致调优时间长。 AI4Compiler框架提供编译选项自动调优和AI模型辅助编译优化两个主要模块。 框架上层调度模块驱动中层编译器核心优化过程,通过不同编译器各自的适配模块调用底层AI模型和模型推理引擎,以优化特性相关数据和硬件架构参数作为模型输入特征运行模型推理,获得编译过程关键参数最佳决策,从而实现编译优化。 -- 编译自动调优(Autotuner) -AI4C的自动调优基于OpenTuner(2015 Ansel et al.)开发,通过插件驱动编译器采集优化特性相关参数信息,通过搜索算法调整关键决策参数(例如循环展开系数),通过插件注入编译过程修改决策,运行编译输出二进制获得反馈因子,迭代自动调优。 -(1)已集成一系列搜索算法,动态选择算法并共享搜索进; -(2)支持用户配置yaml自定义搜索空间和扩展底层搜索算法; -(3)支持细粒度代码块调优与粗粒度编译选项自动调优; -(4)在cormark、dhrystone、Cbench等benchmark上获得3%~5%不等的收益。 -- AI辅助编译优化(ACPO) -ACPO提供全面的工具、库、算法,为编译器工程师提供简单易用的接口使用AI模型能力,替代或增强编译器中启发式优化决策算法。在编译器优化过程中,使用插件提取优化遍的输入结构化数据作为模型输入特征,getAdvice运行预训练模型获得决策系数,编译器使用模型决策结果替代部分启发式决策,获得更好的性能。 -(1)解耦编译器与AI模型和推理引擎,帮助算法开发者专注AI算法模型开发,简化模型应用成本,同时兼容多个编译器、模型、AI推理框架等主流产品,提供AI模型的热更新能力; -(2)实践落地IPA Loop Inline、RTL Loop Unroll等不同优化阶段和优化过程,获得相对显著的收益。 + +- 编译自动调优(Autotuner) +AI4C的自动调优基于OpenTuner(2015 Ansel et al.)开发,通过插件驱动编译器采集优化特性相关参数信息,通过搜索算法调整关键决策参数(例如循环展开系数),通过插件注入编译过程修改决策,运行编译输出二进制获得反馈因子,迭代自动调优。 +(1)已集成一系列搜索算法,动态选择算法并共享搜索进; +(2)支持用户配置yaml自定义搜索空间和扩展底层搜索算法; +(3)支持细粒度代码块调优与粗粒度编译选项自动调优; +(4)在cormark、dhrystone、Cbench等benchmark上获得3%~5%不等的收益。 +- AI辅助编译优化(ACPO) +ACPO提供全面的工具、库、算法,为编译器工程师提供简单易用的接口使用AI模型能力,替代或增强编译器中启发式优化决策算法。在编译器优化过程中,使用插件提取优化遍的输入结构化数据作为模型输入特征,getAdvice运行预训练模型获得决策系数,编译器使用模型决策结果替代部分启发式决策,获得更好的性能。 +(1)解耦编译器与AI模型和推理引擎,帮助算法开发者专注AI算法模型开发,简化模型应用成本,同时兼容多个编译器、模型、AI推理框架等主流产品,提供AI模型的热更新能力; +(2)实践落地IPA Loop Inline、RTL Loop Unroll等不同优化阶段和优化过程,获得相对显著的收益。 + ## RPM国密签名支持 + 根据国内相关安全技术标准,在某些应用场景中需要采用国密算法实现对重要可执行程序来源的真实性和完整性保护。openEuler当前采用RPM格式的软件包管理,软件包签名算法基于openPGP签名规范。openEuler 24.03 LTS SP1版本基于RPM包管理机制扩展对于SM2签名算法和SM3摘要算法的支持。 本特性主要基于RPM组件以及其调用的GnuPG2签名工具,在现有openPGP签名体系的基础上,进行国密算法使能。在RPM软件包签名场景,用户可调用gpg命令生成SM2签名私钥和证书,并调用rpmsign命令为指定的RPM包添加基于SM2+SM3算法的数字签名。在RPM软件包验签场景,用户可调用rpm命令导入验签证书,并通过校验RPM包的数字签名信息从而验证软件包的真实性和完整性。 + ## oneAPI 框架支持 + Unified Acceleration Foundation(UXL)正在推动构建开放的异构加速软件框架的标准化。其中oneAPI作为初始项目的目标是提供一种跨行业、开放、基于标准的统一编程模型,并为异构加速器(如 CPU、GPU、FPGA 和专用加速器)提供统一的开发体验。oneAPI规范扩展了现有的开发者编程模型,通过并行编程语言(Data Parallel C++)或者一组加速软件库以及底层的硬件抽象接口(Level Zero)来支持跨架构的编程,从而支持多种加速硬件和处理器平台。为了提供兼容性并提高开发效率,oneAPI 规范基于行业标准,提供了多种开放的、跨平台和易用的开发者软件套件。 为了在openEuler上完整的支持oneAPI,我们从openEuler 24.03 LTS开始分别集成了oneAPI的开发环境Basekit和运行态环境的Runtime容器镜像。并从openEuler 24.03 LTS SP1开始,openEuler原生支持了oneAPI系列底层框架库的适配和集成,包括oneAPI运行所需的各类依赖库,以及英特尔的图形加速编译器,以及OpenCL的runtime,和支持不同平台(x86_64和aarch64)的底层硬件抽象层(Level-Zero)等。同时为了完整支持Data Parallels C++和基于加速库的API的编程模式,我们也对oneAPI官方提供的各类软件包在openEuler上做了相应的适配和验证的工作,这样我们可以方便的通过在openEuler中增加oneAPI的官方DNF/YUM源来安装和更新所有的oneAPI的运行依赖、开发工具和调试工具等。 + ## OpenVINO 支持 + OpenVINO是一套开源的AI工具套件和运行库,其能用于优化几乎各类主流框架的深度学习模型,并在各种Intel处理器和加速器以及其他硬件平台如ARM上以最佳性能进行部署并高效提供AI服务。我们从openEuler 24.03 LTS SP1开始,提供了OpenVINO原生的适配和集成,从而在openEuler上提供了完整的OpenVINO的计算能力。 OpenVINO的模型转化功能可以将已经使用流行框架(如 TensorFlow、PyTorch、ONNX和PaddlePaddle等)训练的模型进行转换和优化。并在各类的Intel处理器和加速器或者ARM的硬件环境中进行部署,包括在本地、设备端、浏览器或云端等场景下提供服务能力。 + ## 鲲鹏KAE加速器 + 鲲鹏加速引擎KAE(Kunpeng Accelerator Engine)是基于鲲鹏920处理器提供的硬件加速器解决方案,包含了KAE加解密和KAEZip。KAE加解密和KAEZip分别用于加速SSL(Secure Sockets Lyaer) / TLS(Transport Layer Security)应用和数据压缩,可以显著降低处理器消耗,提高处理器效率。此外,鲲鹏加速引擎对应用层屏蔽了其内部细节,用户通过OpenSSL、zlib标准接口即可实现快速迁移现有业务。 KAE加解密是鲲鹏加速引擎的加解密模块,使用鲲鹏加速引擎实现RSA/SM3/SM4/DH/MD5/AES算法,结合无损用户态驱动框架,提供高性能对称加解密、非对称加解密算法能力,兼容OpenSSL 1.1.1x系列版本,支持同步&异步机制。 -KAEzip是鲲鹏加速引擎的压缩模块,使用鲲鹏硬加速模块实现deflate算法,结合无损用户态驱动框架,提供高性能Gzip/zlib格式压缩接口。通过加速引擎可以实现不同场景下应用性能的提升,例如在分布式存储场景下,通过zlib加速库加速数据压缩和解压。 \ No newline at end of file +KAEzip是鲲鹏加速引擎的压缩模块,使用鲲鹏硬加速模块实现deflate算法,结合无损用户态驱动框架,提供高性能Gzip/zlib格式压缩接口。通过加速引擎可以实现不同场景下应用性能的提升,例如在分布式存储场景下,通过zlib加速库加速数据压缩和解压。 diff --git a/docs/zh/server/releasenotes/releasenotes/known-issues.md b/docs/zh/server/releasenotes/releasenotes/know_issues.md similarity index 100% rename from docs/zh/server/releasenotes/releasenotes/known-issues.md rename to docs/zh/server/releasenotes/releasenotes/know_issues.md diff --git a/docs/zh/server/releasenotes/releasenotes/os-installation.md b/docs/zh/server/releasenotes/releasenotes/os_installation.md similarity index 100% rename from docs/zh/server/releasenotes/releasenotes/os-installation.md rename to docs/zh/server/releasenotes/releasenotes/os_installation.md diff --git a/docs/zh/server/releasenotes/releasenotes/resolved-issues.md b/docs/zh/server/releasenotes/releasenotes/resolved_issues.md similarity index 100% rename from docs/zh/server/releasenotes/releasenotes/resolved-issues.md rename to docs/zh/server/releasenotes/releasenotes/resolved_issues.md diff --git a/docs/zh/server/releasenotes/releasenotes/source-code.md b/docs/zh/server/releasenotes/releasenotes/source_code.md similarity index 100% rename from docs/zh/server/releasenotes/releasenotes/source-code.md rename to docs/zh/server/releasenotes/releasenotes/source_code.md diff --git a/docs/zh/server/releasenotes/releasenotes/terms-of-use.md b/docs/zh/server/releasenotes/releasenotes/terms_of_uese.md similarity index 100% rename from docs/zh/server/releasenotes/releasenotes/terms-of-use.md rename to docs/zh/server/releasenotes/releasenotes/terms_of_uese.md diff --git a/docs/zh/server/releasenotes/releasenotes/user-notice.md b/docs/zh/server/releasenotes/releasenotes/user_notice.md similarity index 100% rename from docs/zh/server/releasenotes/releasenotes/user-notice.md rename to docs/zh/server/releasenotes/releasenotes/user_notice.md diff --git a/docs/zh/server/security/_toc.yaml b/docs/zh/server/security/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..156c3365e33c4e7102b35dcb52c8e1f4a828762c --- /dev/null +++ b/docs/zh/server/security/_toc.yaml @@ -0,0 +1,16 @@ +label: secDetector开发指南 +isManual: true +description: secDetecor 的架构、特性、安装、开发指导、落地应用场景等。帮助用户快速了解并使用secDetector。 +sections: + - label: secDetector使用指南 + href: ./secdetector.md + - label: 认识secGear + href: ./introduction_to_secdetector.md + - label: 安装与部署 + href: ./secdetector_installation.md + - label: 接口说明 + href: ./api_reference.md + - label: 开发secdetector应用程序 + href: ./developer_guide.md + - label: 使用secdetector工具 + href: ./using_secdetector_tools.md diff --git a/docs/zh/server/security/cert_signature/introduction_to_signature_certificates.md b/docs/zh/server/security/cert_signature/introduction_to_signature_certificates.md index 2023390d9d33df4bdcc7e5cae5cbe63e6e47c907..fb4bf823ac41655f9f2f7845d2501fbb87042ca1 100644 --- a/docs/zh/server/security/cert_signature/introduction_to_signature_certificates.md +++ b/docs/zh/server/security/cert_signature/introduction_to_signature_certificates.md @@ -44,4 +44,3 @@ openEuler根证书可通过社区证书中心下载: ``` https://www.openeuler.org/zh/security/certificate-center/ ``` - 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 index 80028df2a1176b23b01be0ed3c754846fe32dbea..ddec74977c565a539c3d11af7f96e361c471bacf 100644 --- 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 @@ -1,6 +1,7 @@ # 认识证书和签名 ## 概述 + 数字签名是保护操作系统完整性的重要技术。通过对系统关键组件添加签名,并在后续的组件启动加载、运行访问等流程中进行签名验证,可以有效检查组件的完整性,避免组件被篡改而导致的安全问题。业界已支持多种系统完整性保护机制,在系统运行的各个阶段对不同类型的组件进行完整性保护,典型的技术机制有: - 安全启动; @@ -11,6 +12,7 @@ 上述完整性保护的安全机制都需要依赖签名(通常需要在组件发布阶段集成),而开源社区普遍存在缺乏签名私钥和证书管理机制,因此社区发布的操作系统发行版通常不提供默认签名,或仅使用构建阶段临时生成的私钥进行签名。往往需要用户或者下游OSV厂商进行二次签名后才可开启这些完整性保护安全机制,增加了安全功能的使用成本并降低了易用性。 ## 解决方案 + openEuler社区基础设施支持签名服务,通过签名平台统一管理签名私钥和证书,并与EulerMaker构建平台结合,实现在社区发行版的软件包构建过程中对关键文件进行自动签名。当前支持的文件类型有: - EFI文件; @@ -19,9 +21,9 @@ openEuler社区基础设施支持签名服务,通过签名平台统一管理 - RPM软件包。 ## 约束限制 + openEuler社区的签名服务功能存在如下约束限制: - 当前仅支持为openEuler社区官方发布分支进行签名,暂不支持对个人构建分支进行签名; - 当前仅支持对OS安全启动相关的EFI文件进行签名,包括shim、grub、kernel文件; - 当前仅支持对kernel软件包提供的内核模块文件进行签名。 - diff --git a/docs/zh/server/security/cert_signature/secure_boot.md b/docs/zh/server/security/cert_signature/secure_boot.md index 1ee911d4009e22aff405c7b049d765b8c866c883..2d8d7481bb06c5e2ebb30d74942fb51ca200e3e2 100644 --- a/docs/zh/server/security/cert_signature/secure_boot.md +++ b/docs/zh/server/security/cert_signature/secure_boot.md @@ -1,6 +1,7 @@ # 安全启动 ## 概述 + 安全启动(Secure Boot)就是利用公私钥对启动部件进行签名和验证。在启动过程中,前一个部件验证后一个部件的数字签名,如果能验证通过,则运行后一个部件;如果验证不通过,则暂停启动。通过安全启动可以保证系统启动过程中各个部件的完整性,防止没有经过认证的部件被加载运行,从而防止对系统及用户数据产生安全威胁。 安全启动涉及的验证组件: BIOS->shim->grub->vmlinuz(依次验签通过并加载),其中vmlinuz是内核镜像。 @@ -8,6 +9,7 @@ 相关的EFI启动组件采用signcode方式进行签名。公钥证书由BIOS集成到签名数据库DB中,启动过程中BIOS对shim进行验证,shim和grub组件从BIOS的签名数据库DB中获取公钥证书并对下一级组件进行验证。 ## 背景和解决方案 + 前期openEuler版本中,安全启动相关组件没有签名,无法直接使用安全启动功能保障系统组件的完整性。 从22.03-LTS-SP3版本开始,openEuler使用社区签名平台对OS侧的相关组件进行签名,包括grub和vmlinuz组件,并将社区签名根证书内嵌于shim组件中。 @@ -17,11 +19,13 @@ ## 使能安全启动 ### 前置条件 + - 已安装openEuler-22.03-LTS-SP3及以上版本(若使用CFCA安全启动,则需安装openEuler-24.03-LTS及以上版本) - 配置openEuler-everything源 - 系统配置为uefi启动方式 ### 使用步骤 + **步骤1:** 获取安全启动证书 如采用openEuler证书,则在如下网址获取:,进入“证书中心”目录下载。网页上根证书识别名称为“openEuler Shim Default CA”,default-x509ca.cert。 @@ -65,6 +69,7 @@ mokutil --sb ![](./figures/mokutil-sb-unsupport.png) ## 约束限制 + - **软件限制**:OS系统需要采用UEFI启动 - **架构限制**:ARM/X86 -- **硬件约束**:需要BIOS支持安全启动相关校验功能 \ No newline at end of file +- **硬件约束**:需要BIOS支持安全启动相关校验功能 diff --git a/docs/zh/server/security/cve-ease/_toc.yaml b/docs/zh/server/security/cve_ease/_toc.yaml similarity index 62% rename from docs/zh/server/security/cve-ease/_toc.yaml rename to docs/zh/server/security/cve_ease/_toc.yaml index ace313d837debdbc2a048aa3bb3d226c4345c1ec..a47ef64180124a6000753b7b110bd72d29cc5305 100644 --- a/docs/zh/server/security/cve-ease/_toc.yaml +++ b/docs/zh/server/security/cve_ease/_toc.yaml @@ -3,6 +3,6 @@ isManual: true description: 帮助用户快速应对系统漏洞 sections: - label: CVE-ease设计介绍 - href: ./cve-ease-design-introduction.md + href: ./cve_ease_design_introduction.md - label: CVE-ease介绍和安装说明 - href: ./cve-ease-introduction-and-installation-instructions.md + href: ./cve_ease_introduction_and_installation_instructions.md diff --git a/docs/zh/server/security/cve-ease/cve-ease-design-introduction.md b/docs/zh/server/security/cve_ease/cve_ease_design_introduction.md similarity index 100% rename from docs/zh/server/security/cve-ease/cve-ease-design-introduction.md rename to docs/zh/server/security/cve_ease/cve_ease_design_introduction.md diff --git a/docs/zh/server/security/cve-ease/cve-ease-introduction-and-installation-instructions.md b/docs/zh/server/security/cve_ease/cve_ease_introduction_and_installation_instructions.md similarity index 100% rename from docs/zh/server/security/cve-ease/cve-ease-introduction-and-installation-instructions.md rename to docs/zh/server/security/cve_ease/cve_ease_introduction_and_installation_instructions.md diff --git a/docs/zh/server/security/cve-ease/figures/CVE-ease_desigin_table.png b/docs/zh/server/security/cve_ease/figures/CVE-ease_desigin_table.png similarity index 100% rename from docs/zh/server/security/cve-ease/figures/CVE-ease_desigin_table.png rename to docs/zh/server/security/cve_ease/figures/CVE-ease_desigin_table.png diff --git a/docs/zh/server/security/cve-ease/figures/CVE-ease_function.png b/docs/zh/server/security/cve_ease/figures/CVE-ease_function.png similarity index 100% rename from docs/zh/server/security/cve-ease/figures/CVE-ease_function.png rename to docs/zh/server/security/cve_ease/figures/CVE-ease_function.png diff --git a/docs/zh/server/security/secdetector/_toc.yaml b/docs/zh/server/security/secdetector/_toc.yaml index 2f9e2b381ce9e9f650a4954173b798b6f3145c83..4a756380404a27a8f1383563c770ec6623ea3ab8 100644 --- a/docs/zh/server/security/secdetector/_toc.yaml +++ b/docs/zh/server/security/secdetector/_toc.yaml @@ -9,4 +9,4 @@ sections: - label: 接口参考 href: ./api_reference.md - label: 使用secDetector - href: ./using_secdetector.md + href: ./using_secdetector.md \ No newline at end of file diff --git a/docs/zh/server/security/secdetector/install_secdetector.md b/docs/zh/server/security/secdetector/install_secdetector.md index e4acb8312d5e67bf1b795b22b9a9aa05343769b3..2fce02d5d5f4533549940ba3d054849f8fce8e0b 100644 --- a/docs/zh/server/security/secdetector/install_secdetector.md +++ b/docs/zh/server/security/secdetector/install_secdetector.md @@ -10,7 +10,7 @@ ### 环境准备 -安装 openEuler 系统,安装方法参考《[安装指南](../../installation_upgrade/installation/installation-on-servers.md)》。 +安装 openEuler 系统,安装方法参考《[安装指南](../../../server/installation_upgrade/installation/installation_on_servers.md)》。 ## 安装secDetector @@ -101,4 +101,4 @@ secDetectord 默认会在后台运行,从探针中取得数据并转发给订 ### 部署SDK -SDK的库文件默认已经被部署到系统库目录中,用户需要在自己的程序中引用SDK的头文件即可使用。 \ No newline at end of file +SDK的库文件默认已经被部署到系统库目录中,用户需要在自己的程序中引用SDK的头文件即可使用。 diff --git a/docs/zh/server/security/secdetector/introduction_to_secdetector.md b/docs/zh/server/security/secdetector/introduction_to_secdetector.md index d9af9b9ecd03612f3f2024727cea62940a8fefa3..92707be0cbf0352e95083552c2bf7e63216999a5 100644 --- a/docs/zh/server/security/secdetector/introduction_to_secdetector.md +++ b/docs/zh/server/security/secdetector/introduction_to_secdetector.md @@ -95,4 +95,3 @@ driver分为两类,kerneldriver 和 usrdriver。顾名思义,kerneldriver是 | 订阅管理 | 已实现 | 应用程序可以一次订阅,长期使用secDetector获取信息。secDetector会对订阅的应用程序进行管理,分发对应的被订阅主题的信息。 | | 配置下发 | 已实现 | 服务可以通过参数对于特定的检测、阻断特性进行配置,从而实现过滤、调整等功能。目前未对应用程序开放。 | | 即时检测 | 已实现 | secDetector提供的信息是实时的,准确的,一手的。 | - diff --git a/docs/zh/server/security/secdetector/using_secdetector.md b/docs/zh/server/security/secdetector/using_secdetector.md index e9e19cf22add983ed8fedd86fe9d0ff4089bda8a..ba8ff6c503a286546b4b4b603c077881dbc11289 100644 --- a/docs/zh/server/security/secdetector/using_secdetector.md +++ b/docs/zh/server/security/secdetector/using_secdetector.md @@ -43,4 +43,4 @@ git clone https://gitee.com/openeuler/secDetector.git 6. 对于文件名、节点名之类的描述字符串都有一定的长度限制,过长可能会被截断。 7. 应用程序单进程内不支持并行多连接 secDetectord 接收消息。只能一次订阅,单连接接受消息。去订阅后才能重新订阅。 8. secDetectord 进程应当等待所有应用程序的连接中断即完全退订所有主题后,才可以关闭退出。 -9. 部分功能(如内存修改探针-安全开关)基于当前CPU状态。因此检测的基本功能是可以检测到当前CPU上的状态变化,其他CPU上的状态变化如果未能及时同步到当前CPU,则不会被检测到。 \ No newline at end of file +9. 部分功能(如内存修改探针-安全开关)基于当前CPU状态。因此检测的基本功能是可以检测到当前CPU上的状态变化,其他CPU上的状态变化如果未能及时同步到当前CPU,则不会被检测到。 diff --git a/docs/zh/server/security/secgear/_toc.yaml b/docs/zh/server/security/secgear/_toc.yaml index 93f1de5044884ef84dcabda2b4eb8b92f520c344..09697744f9838d9d24df626c4448b3173ffddb2a 100644 --- a/docs/zh/server/security/secgear/_toc.yaml +++ b/docs/zh/server/security/secgear/_toc.yaml @@ -2,15 +2,17 @@ label: secGear开发指南 isManual: true description: 使用 secGear 统一机密计算编程框架开发应用程序,保障云端数据运行时的安全性 sections: + - label: secGear开发指南 + href: ./secgear.md - label: 认识secGear - href: ./introduction-to-secGear.md + href: ./introduction_to_secgear.md - label: 安装与部署 - href: ./secgear-installation.md + href: ./secgear_installation.md - label: 接口说明 - href: ./api-reference.md + href: ./api_reference.md - label: 开发secGear应用程序 - href: ./developer-guide.md + href: ./developer_guide.md - label: 使用secGear工具 - href: ./using-secgear-tools.md + href: ./using_secgear_tools.md - label: 应用场景 - href: ./application-scenarios.md + href: ./application_scenarios.md diff --git a/docs/zh/server/security/secgear/api-reference.md b/docs/zh/server/security/secgear/api_refernce.md similarity index 99% rename from docs/zh/server/security/secgear/api-reference.md rename to docs/zh/server/security/secgear/api_refernce.md index c774731a8cd56575f75df6e156d1aea90cfeba9c..033431c373babbc5a63183024ee286be4ab7277d 100644 --- a/docs/zh/server/security/secgear/api-reference.md +++ b/docs/zh/server/security/secgear/api_refernce.md @@ -16,7 +16,7 @@ secGear 机密计算统一编程框架分为安全侧和非安全侧,这里给 **函数声明:** 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); + cc_enclave_t ** enclave); **参数:** diff --git a/docs/zh/server/security/secgear/application-scenarios.md b/docs/zh/server/security/secgear/application_scenarios.md similarity index 100% rename from docs/zh/server/security/secgear/application-scenarios.md rename to docs/zh/server/security/secgear/application_scenarios.md diff --git a/docs/zh/server/security/secgear/developer-guide.md b/docs/zh/server/security/secgear/developer_guide.md similarity index 100% rename from docs/zh/server/security/secgear/developer-guide.md rename to docs/zh/server/security/secgear/developer_guide.md diff --git a/docs/zh/server/security/secgear/introduction-to-secGear.md b/docs/zh/server/security/secgear/introduction_to_secGear.md similarity index 99% rename from docs/zh/server/security/secgear/introduction-to-secGear.md rename to docs/zh/server/security/secgear/introduction_to_secGear.md index c7bbd241a1c0184e8933891555f2c4719bd47f3a..cb1d697d83b4466d88fc56bbb08a769850589d29 100644 --- a/docs/zh/server/security/secgear/introduction-to-secGear.md +++ b/docs/zh/server/security/secgear/introduction_to_secGear.md @@ -14,17 +14,17 @@ secGear机密计算统一开发框架技术架构如图所示,主要包括三 - Middleware Layer:通用组件层,机密计算软件货架,无需从头造轮子,帮助用户快速构建机密计算解决方案。 - Server Layer:机密计算服务层,提供典型场景机密计算解决方案。 - - ## 关键特性 ### 零切换 #### 客户痛点 + 传统应用做机密计算拆分改造后,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交互性能的技术。 + +[零切换](https://gitee.com/openeuler/secGear#switchless%E7%89%B9%E6%80%A7)是一种通过共享内存减少REE与TEE上下文切换及数据拷贝次数,优化REE与TEE交互性能的技术。 #### 使用方法 @@ -72,8 +72,6 @@ secGear机密计算统一开发框架技术架构如图所示,主要包括三 }; ``` - - ### 安全通道 #### 客户痛点 数据拥有者在请求云上机密计算服务时,需要把待处理数据上传到云上TEE环境中处理,由于TEE没有网络,用户数据需要经过网络先传输到REE,REE接收到数据的明文后,再传入TEE中。用户数据的明文暴露在REE内存中,存在安全风险。 @@ -117,6 +115,7 @@ secGear远程证明统一框架是机密计算远程证明相关的关键组件 #### 功能描述 远程证明统一框架聚焦机密计算相关功能,部署服务时需要的服务运维等相关能力由服务部署第三方提供。远程证明统一框架的关键技术如下: + - 报告校验插件框架:支持运行时兼容iTrustee、vritCCA、CCA等不同TEE平台证明报告检验,支持扩展新的TEE报告检验插件。 - 证书基线管理:支持对不同TEE类型的TCB/TA基线值管理及公钥证书管理,集中部署到服务端,对用户透明。 - 策略管理:提供默认策略(易用)、用户定制策略(灵活)。 diff --git a/docs/zh/server/security/secgear/secgear-installation.md b/docs/zh/server/security/secgear/secgear_installation.md similarity index 99% rename from docs/zh/server/security/secgear/secgear-installation.md rename to docs/zh/server/security/secgear/secgear_installation.md index 67950e202d940cb63def628d34eef436a461208c..2bc1842be935d33ba0a07a0aa05cec85b57e557d 100644 --- a/docs/zh/server/security/secgear/secgear-installation.md +++ b/docs/zh/server/security/secgear/secgear_installation.md @@ -108,6 +108,4 @@ linux-sgx-driver-xxx libsgx-launch-xxx ``` - - - + \ No newline at end of file diff --git a/docs/zh/server/security/secgear/using-secgear-tools.md b/docs/zh/server/security/secgear/using_secgear_tools.md similarity index 98% rename from docs/zh/server/security/secgear/using-secgear-tools.md rename to docs/zh/server/security/secgear/using_secgear_tools.md index 8d1b14d82d1d411842d751dc82e003ebddfccaa4..0d09003064e473705662822b392f1fac45f3a69a 100644 --- a/docs/zh/server/security/secgear/using-secgear-tools.md +++ b/docs/zh/server/security/secgear/using_secgear_tools.md @@ -110,7 +110,7 @@ sign_tool 包含 sign 指令(对 enclave 进行签名)和 digest 指令( | -f \ | OTRP_FLAG,是否支持 OTRP 标准协议,默认为 0 | 可选 | | -i \ | 待签名的库文件 | 必选 | | -k \ | 单步签名所需私钥(pem文件) | 仅 SGX 类型必选 | -| -m \ | 安全配置文件 mainfest.txt,由用户自行配置 | 仅 iTrustee 类型必选 | +| -m \ | 安全配置文件 ,由用户自行配置 | 仅 iTrustee 类型必选 | | -o \ | 输出文件 | 必选 | | -p \ | 两步签名所需的签名服务器公钥证书(pem文件) | 必选 | | -s \ | 两步签名所需的已签名摘要值 | 必选 | diff --git a/docs/zh/server/security/secharden/_toc.yaml b/docs/zh/server/security/secharden/_toc.yaml index ec2478af835a52a0d7bc6714174ac599f73e1b40..9c0a77dd69944bbf177a9c0359cd2eb0a9f5ec48 100644 --- a/docs/zh/server/security/secharden/_toc.yaml +++ b/docs/zh/server/security/secharden/_toc.yaml @@ -3,27 +3,27 @@ isManual: true description: 指导用户进行安全加固 sections: - label: 操作系统加固概述 - href: ./os-hardening-overview.md + href: ./os_hardening_overview.md - label: 安全配置说明 - href: ./security-configuration-benchmark.md + href: ./security_configuration_benchmark.md - label: 加固指导 - href: ./secHarden.md + href: ./secharden.md sections: - label: 帐户口令 - href: ./account-passwords.md + href: ./account_passwords.md - label: 授权认证 - href: ./authentication-and-authorization.md + href: ./authentication_and_authorization.md - label: 系统服务 - href: ./system-services.md + href: ./system_services.md - label: 文件权限 - href: ./file-permissions.md + href: ./file_permissions.md - label: 内核参数 - href: ./kernel-parameters.md + href: ./kernel_parameters.md - label: SELinux配置 - href: ./selinux-configuration.md + href: ./selinux_configuration.md - label: 安全加固工具 - href: ./security-hardening-tools.md + href: ./security_hardening_tools.md - label: 附录 href: ./appendix.md - label: 安全配置加固工具 - href: ./security-configuration-hardening-tools.md + href: ./security_configuration_hardening_tool.md diff --git a/docs/zh/server/security/secharden/account-passwords.md b/docs/zh/server/security/secharden/account_passwords.md similarity index 100% rename from docs/zh/server/security/secharden/account-passwords.md rename to docs/zh/server/security/secharden/account_passwords.md diff --git a/docs/zh/server/security/secharden/appendix.md b/docs/zh/server/security/secharden/appendix.md index 4f3eff1715b09bc701dd552a5d2f58a6d3b1125b..777aca0869a9a155e9366724c4037f06ce9f74a9 100644 --- a/docs/zh/server/security/secharden/appendix.md +++ b/docs/zh/server/security/secharden/appendix.md @@ -2,14 +2,6 @@ 介绍文件权限的含义和umask值的含义。 - - -- [附录](#附录) - - [文件和目录权限含义](#文件和目录权限含义) - - [umask值含义](#umask值含义) - - - ## 文件和目录权限含义 Linux系统中文件和目录权限用于限定谁能通过何种方式对文件和目录进行访问和操作。文件和目录的访问权限分为只读,只写和可执行三种。 diff --git a/docs/zh/server/security/secharden/authentication-and-authorization.md b/docs/zh/server/security/secharden/authentication_and_authorization.md similarity index 100% rename from docs/zh/server/security/secharden/authentication-and-authorization.md rename to docs/zh/server/security/secharden/authentication_and_authorization.md diff --git a/docs/zh/server/security/secharden/file-permissions.md b/docs/zh/server/security/secharden/file_permissions.md similarity index 100% rename from docs/zh/server/security/secharden/file-permissions.md rename to docs/zh/server/security/secharden/file_permissions.md diff --git a/docs/zh/server/security/secharden/kernel-parameters.md b/docs/zh/server/security/secharden/kernel_parameters.md similarity index 100% rename from docs/zh/server/security/secharden/kernel-parameters.md rename to docs/zh/server/security/secharden/kernel_parameters.md diff --git a/docs/zh/server/security/secharden/os-hardening-overview.md b/docs/zh/server/security/secharden/os_hardening_overview.md similarity index 98% rename from docs/zh/server/security/secharden/os-hardening-overview.md rename to docs/zh/server/security/secharden/os_hardening_overview.md index 0d55cbe4ec8c8b01b38c50eb46653e3fa55425be..bc09658ee33923c8b6d36aa4328cfaa9ccc36082 100644 --- a/docs/zh/server/security/secharden/os-hardening-overview.md +++ b/docs/zh/server/security/secharden/os_hardening_overview.md @@ -1,14 +1,6 @@ # 操作系统加固概述 介绍对openEuler系统进行加固的目的和加固方案。 - - -- [操作系统加固概述](#操作系统加固概述) - - [加固目的](#加固目的) - - [加固方案](#加固方案) - - [加固影响](#加固影响) - - ## 须知 diff --git a/docs/zh/server/security/secharden/security-configuration-benchmark.md b/docs/zh/server/security/secharden/security_configuration_benchmark.md similarity index 100% rename from docs/zh/server/security/secharden/security-configuration-benchmark.md rename to docs/zh/server/security/secharden/security_configuration_benchmark.md diff --git a/docs/zh/server/security/secharden/security-configuration-hardening-tools.md b/docs/zh/server/security/secharden/security_configuration_hardening_tool.md similarity index 99% rename from docs/zh/server/security/secharden/security-configuration-hardening-tools.md rename to docs/zh/server/security/secharden/security_configuration_hardening_tool.md index b6aa1bc4612692cebadfe45c04e207b9b030a2e0..be9a7044ea8e62bbfaf1a86e1025266e8efe545e 100644 --- a/docs/zh/server/security/secharden/security-configuration-hardening-tools.md +++ b/docs/zh/server/security/secharden/security_configuration_hardening_tool.md @@ -7,26 +7,32 @@ ## sec_conf简介 ### 背景和概述 + openEuler已支持多种安全特性,包括Linux原生安全特性和社区自研安全特性,但是存在特性分散,配置难度大,用户学习成本高等问题。同时对于一些具备拦截功能的安全特性(如IMA评估、安全启动、访问控制等),一旦用户配置错误,可能导致系统无法启动或无法正常运行。因此,sec_conf旨在实现自动化安全配置机制,用户可基于工具进行系统的安全检查和加固,以更好地推进openEuler安全特性在各应用场景的落地。 ### 功能介绍 + sec_conf是一个帮助管理员配置openEuler安全特性(如IMA、DIM、secure boot等)的安全加固工具。用户可以输入配置信息,即需要实现的安全加固目标,生成相应的安全特性配置脚本。 目前sec_conf支持可配置的安全机制为IMA、DIM、secure boot、modsign,其他安全特性暂未支持。 ## 安装与部署 + ### 安装依赖软件包 编译secPaver需要的软件有: + * make * golang 1.11+ ### 下载源码 + ``` git clone https://gitee.com/openeuler/secpaver.git -b sec_conf ``` ### 编译安装 + ``` cd secpaver make @@ -41,6 +47,7 @@ make install sec_conf工程文件由策略配置文件、检查脚本模板文件、配置脚本模板文件组成。 ### 策略配置文件 + 策略配置文件保护DIM\IMA\安全启动\内核模块校验相关特性配置,采用yaml格式表示,各字段说明如下: @@ -81,6 +88,7 @@ sec_conf工程文件由策略配置文件、检查脚本模板文件、配置脚 > 1. 配置、检查模板文件不可修改,仅用于被sec_conf解析生成脚本。 ## 安全配置命令行接口 + | 参数 | 功能介绍 | 命令格式 | | :--------: | :--------: |:--------: | |--help,-h|打印sec_conf命令行帮助信息|sec_conf -h| @@ -88,7 +96,8 @@ sec_conf工程文件由策略配置文件、检查脚本模板文件、配置脚 |gen_config|生成安全配置脚本,并输出到命令行界面|sec_conf gen_config| |--output,-o|将生成的配置脚本输出到指定文件|sec_conf gen_config -o config.sh| -## 使用说明 +## 使用说明 + 配置yaml文件,示例: ``` # cat /usr/share/secpaver/scripts/sec_conf/sec_conf.yaml @@ -144,4 +153,4 @@ reboot ``` sh ./config.sh -s sh ./check.sh -s -``` \ No newline at end of file +``` diff --git a/docs/zh/server/security/secharden/security-hardening-guide.md b/docs/zh/server/security/secharden/security_hardening_guide.md similarity index 100% rename from docs/zh/server/security/secharden/security-hardening-guide.md rename to docs/zh/server/security/secharden/security_hardening_guide.md diff --git a/docs/zh/server/security/secharden/security-hardening-tools.md b/docs/zh/server/security/secharden/security_hardening_tools.md similarity index 100% rename from docs/zh/server/security/secharden/security-hardening-tools.md rename to docs/zh/server/security/secharden/security_hardening_tools.md diff --git a/docs/zh/server/security/secharden/selinux-configuration.md b/docs/zh/server/security/secharden/selinux_configuration.md similarity index 100% rename from docs/zh/server/security/secharden/selinux-configuration.md rename to docs/zh/server/security/secharden/selinux_configuration.md diff --git a/docs/zh/server/security/secharden/system-services.md b/docs/zh/server/security/secharden/system_services.md similarity index 100% rename from docs/zh/server/security/secharden/system-services.md rename to docs/zh/server/security/secharden/system_services.md diff --git a/docs/zh/server/security/shangmi/_toc.yaml b/docs/zh/server/security/shangmi/_toc.yaml index 84301b90927d1af563380489cd49f12895fda591..451626cb29004db91f8f7630fab9e90dc2a43a9b 100644 --- a/docs/zh/server/security/shangmi/_toc.yaml +++ b/docs/zh/server/security/shangmi/_toc.yaml @@ -5,22 +5,22 @@ sections: - label: 概述 href: ./overview.md - label: 磁盘加密 - href: ./drive-encryption.md + href: ./drive_encryption.md - label: 内核模块签名 - href: ./kernel-module-signing.md + href: ./kernel_module_signing.md - label: 算法库 - href: ./algorithm-library.md + href: ./algorithm_library.md - label: 文件完整性保护 - href: ./file-integrity-protection.md + href: ./file_integrity_protection.md - label: 用户身份鉴别 - href: ./user-identity-authentication.md + href: ./user_identity_authentication.md - label: 证书 href: ./certificates.md - label: 安全启动 - href: ./secure-boot.md + href: ./secure_boot.md - label: SSH协议栈 - href: ./ssh-stack.md + href: ./ssh_stack.md - label: TLCP协议栈 - href: ./tlcp-stack.md + href: ./tlcp_stack.md - label: RPM支持国密签名验签 - href: ./rpm-signature-verification.md + href: ./rpm_signature_verification.md diff --git a/docs/zh/server/security/shangmi/algorithm-library.md b/docs/zh/server/security/shangmi/algorithm_library.md similarity index 98% rename from docs/zh/server/security/shangmi/algorithm-library.md rename to docs/zh/server/security/shangmi/algorithm_library.md index b6f6f7e2c5e1157a2d8afb5f1c8f1b8ec1e7db0d..1f0468b07548234917287d4276919b15a678b73f 100644 --- a/docs/zh/server/security/shangmi/algorithm-library.md +++ b/docs/zh/server/security/shangmi/algorithm_library.md @@ -191,4 +191,4 @@ digestsize : 32 1. 算法指令集优化使能的前提是CPU支持对应指令集,可以通过/proc/cpuinfo接口查询当前CPU支持的指令集; 2. 特定指令集的调用本身存在一定开销,因此并不能保证在所有的场景下,指令集优化的性能都高于软件实现; -3. 部分指令集优化存在一定限制,如neon指令集仅在支持并行计算的加密模式下存在优化效果。 \ No newline at end of file +3. 部分指令集优化存在一定限制,如neon指令集仅在支持并行计算的加密模式下存在优化效果。 diff --git a/docs/zh/server/security/shangmi/certificates.md b/docs/zh/server/security/shangmi/certificates.md index 78986136cdbb3235ed77d81acdf13f11e1cac539..53668592fe4366f73224c65fce327e268ad7dc93 100644 --- a/docs/zh/server/security/shangmi/certificates.md +++ b/docs/zh/server/security/shangmi/certificates.md @@ -86,4 +86,4 @@ $ openssl x509 -sm3 -req -days 30 -in SS.csr -CA CA.crt -CAkey CA.key -extfile . ### 场景3:生成TLCP通信证书 -详见《TLCP协议栈》章节。 \ No newline at end of file +详见《TLCP协议栈》章节。 diff --git a/docs/zh/server/security/shangmi/drive-encryption.md b/docs/zh/server/security/shangmi/drive_encryption.md similarity index 99% rename from docs/zh/server/security/shangmi/drive-encryption.md rename to docs/zh/server/security/shangmi/drive_encryption.md index 5d90f5afc82dfaa1ca99589d3a38abe5a42ab283..9b5bbca32bcd8b3dba20a47b00babd877ae6825c 100644 --- a/docs/zh/server/security/shangmi/drive-encryption.md +++ b/docs/zh/server/security/shangmi/drive_encryption.md @@ -87,4 +87,4 @@ sdd 8:48 0 50G 0 disk ``` # cryptsetup close crypt1 -``` \ No newline at end of file +``` diff --git a/docs/zh/server/security/shangmi/file-integrity-protection.md b/docs/zh/server/security/shangmi/file_integrity_protection.md similarity index 100% rename from docs/zh/server/security/shangmi/file-integrity-protection.md rename to docs/zh/server/security/shangmi/file_integrity_protection.md diff --git a/docs/zh/server/security/shangmi/kernel-module-signing.md b/docs/zh/server/security/shangmi/kernel_module_signing.md similarity index 99% rename from docs/zh/server/security/shangmi/kernel-module-signing.md rename to docs/zh/server/security/shangmi/kernel_module_signing.md index 9286e8bdecc744defdf6c448ea60af74f1c637d7..ed342d923911518ac20cb8fe2a017d9840c66e70 100644 --- a/docs/zh/server/security/shangmi/kernel-module-signing.md +++ b/docs/zh/server/security/shangmi/kernel_module_signing.md @@ -104,4 +104,4 @@ linux /vmlinuz-5.10.0-106.1.0.55.oe2209.x86_64 root=/dev/mapper/openeuler-root ``` # insmod /usr/lib/modules/5.10.0/kernel/crypto/sm4.ko -``` \ No newline at end of file +``` diff --git a/docs/zh/server/security/shangmi/rpm-signature-verification.md b/docs/zh/server/security/shangmi/rpm_signature_verification.md similarity index 99% rename from docs/zh/server/security/shangmi/rpm-signature-verification.md rename to docs/zh/server/security/shangmi/rpm_signature_verification.md index dca4184fb1e9e91ca8f42de46780c9dab6f294e2..fc25d382d77937df5993d4b079a1de33d9c8e89f 100644 --- a/docs/zh/server/security/shangmi/rpm-signature-verification.md +++ b/docs/zh/server/security/shangmi/rpm_signature_verification.md @@ -5,6 +5,7 @@ openEuler当前采用RPM格式的软件包管理,RPM采用符合openPGP签名规范,openEuler-24.03-LTS-SP1版本发布的RPM软件在开源版本的基础上增加了对SM2/3算法的签名/验签功能支持。 对如下软件包进行商密使能: + - GnuPG:gpg命令行应用程序支持生成国密签名 - RPM:支持调用gpg命令以及openSSL API实现国密签名生成/验证 - openSSL:支持国密签名验证(开源已支持) @@ -27,9 +28,8 @@ openEuler当前采用RPM格式的软件包管理,RPM采用符合openPGP签名 ## 使用方法 - 1. 生成秘钥 - + 方法1: ```sh $ gpg --full-generate-key --expert diff --git a/docs/zh/server/security/shangmi/secure-boot.md b/docs/zh/server/security/shangmi/secure_boot.md similarity index 100% rename from docs/zh/server/security/shangmi/secure-boot.md rename to docs/zh/server/security/shangmi/secure_boot.md diff --git a/docs/zh/server/security/shangmi/ssh-stack.md b/docs/zh/server/security/shangmi/ssh_stack.md similarity index 100% rename from docs/zh/server/security/shangmi/ssh-stack.md rename to docs/zh/server/security/shangmi/ssh_stack.md diff --git a/docs/zh/server/security/shangmi/tlcp-stack.md b/docs/zh/server/security/shangmi/tlcp_stack.md similarity index 99% rename from docs/zh/server/security/shangmi/tlcp-stack.md rename to docs/zh/server/security/shangmi/tlcp_stack.md index 8dc81159d567ff619417add44389fd07bec4efa1..dae1ccdd6a155d3ef7f37dd944b8eae1f854ec85 100644 --- a/docs/zh/server/security/shangmi/tlcp-stack.md +++ b/docs/zh/server/security/shangmi/tlcp_stack.md @@ -518,4 +518,4 @@ kernel-5.10.0-106.1.0.55.oe2209.x86_64 ``` https://www.kernel.org/doc/html/v5.10/networking/tls.html -``` \ No newline at end of file +``` diff --git a/docs/zh/server/security/shangmi/user-identity-authentication.md b/docs/zh/server/security/shangmi/user_identity_authentication.md similarity index 100% rename from docs/zh/server/security/shangmi/user-identity-authentication.md rename to docs/zh/server/security/shangmi/user_identity_authentication.md diff --git a/docs/zh/server/security/trusted_computing/_toc.yaml b/docs/zh/server/security/trusted_computing/_toc.yaml index 310f72bf314b1d031eef2032e7c6ec02d5f8f7fd..88bc7cebdc24e829f065c88f2dc35f9a8aa76444 100644 --- a/docs/zh/server/security/trusted_computing/_toc.yaml +++ b/docs/zh/server/security/trusted_computing/_toc.yaml @@ -3,16 +3,16 @@ isManual: true description: 介绍可信计算的定义和相关概念 sections: - label: 可信计算定义 - href: ./trusted-computing.md + href: ./trusted_computing.md - label: 内核完整性度量(IMA) href: ./ima.md - label: 动态完整性度量(DIM) href: ./dim.md - label: 远程证明(鲲鹏安全库) - href: ./remote-attestation-kunpeng-security-library.md + href: ./remote_attestation_kunpeng_security_library.md - label: 可信平台控制模块(TPCM) href: ./tpcm.md - label: 内核可信根框架用户文档 - href: ./kernel-trusted-root-framework.md + href: ./kernel_root_of_trust_framework.md - label: 解释器类应用程序完整性保护用户文档 - href: ./interpreter-class-application-integrity-protects.md + href: ./protection_for_interpreted_applications.md diff --git a/docs/zh/server/security/trusted_computing/dim.md b/docs/zh/server/security/trusted_computing/dim.md index 69fe61f71cbe09520a193652e91c91c28d4aeb01..ba5c5cc118d212e69b138c557d8295f0bd888704 100644 --- a/docs/zh/server/security/trusted_computing/dim.md +++ b/docs/zh/server/security/trusted_computing/dim.md @@ -729,4 +729,4 @@ echo 1 > /sys/kernel/security/dim/interval modprobe dim_core measure_schedule=10 ``` -触发动态基线或动态度量时,dim_core每度量一个进程,就会调度让出CPU 10毫秒时间。 \ No newline at end of file +触发动态基线或动态度量时,dim_core每度量一个进程,就会调度让出CPU 10毫秒时间。 diff --git a/docs/zh/server/security/trusted_computing/ima.md b/docs/zh/server/security/trusted_computing/ima.md index 6d031cbc3de0703dc82c4f27d4fa69c835a0f2d1..4d4b35c21f42399e202e446072064b461f93e678 100644 --- a/docs/zh/server/security/trusted_computing/ima.md +++ b/docs/zh/server/security/trusted_computing/ima.md @@ -750,7 +750,7 @@ struct module_signature { u8 signer_len; /* Length of signer's name [0] */ u8 key_id_len; /* Length of key identifier [0] */ u8 __pad[3]; - __be32 sig_len; /* Length of signature data */ + __be32 sig_len; /* Length of signature data */ }; ``` @@ -771,7 +771,7 @@ echo -n "~Module signature appended~" >> $OUT echo -n -e "\x0a" >> $OUT ``` -**3) 复用RPM签名(openEuler 22.03 LTS版本默认)** +**3) 复用RPM签名(openEuler 22.03 LTS版本默认)** openEuler 22.03 LTS版本支持复用RPM签名机制实现IMA摘要列表文件的签名。旨在解决版本无专用IMA签名密钥的问题。用户无需感知该签名流程,当RPM包中含有IMA摘要列表文件,而不包含IMA摘要列表的签名文件时,会自动使用该签名机制。其核心原理是通过RPM包的头信息实现对IMA摘要列表的验证。 @@ -925,11 +925,11 @@ echo /path/to/policy > /sys/kernel/security/ima/policy ``` > ![](./public_sys-resources/icon-note.gif) **说明:** -> +> > 策略中需要包含一些固定规则,用户可参考如下策略模板: -> +> > openEuler 22.03 LTS版本的策略模板如下(复用RPM签名场景): -> +> ``` # 不评估securityfs文件系统的访问行为 dont_appraise fsmagic=0x73636673 @@ -944,9 +944,9 @@ appraise func=BPRM_CHECK appraise_type=imasig # 其他用户自定义的appraise规则 ...... ``` -> +> > openEuler 24.03 LTS版本的策略模板如下(IMA扩展属性签名或追加签名场景): -> +> ``` # 用户自定义的dont_appraise规则 ...... diff --git a/docs/zh/server/security/trusted_computing/kernel-trusted-root-framework.md b/docs/zh/server/security/trusted_computing/kernel_root_of_trust_framework.md similarity index 99% rename from docs/zh/server/security/trusted_computing/kernel-trusted-root-framework.md rename to docs/zh/server/security/trusted_computing/kernel_root_of_trust_framework.md index 87a5eedd37fe7c93b2bdf1999fe2e4f220f62761..2556baf260fd3e52447ed375293da47e9f83286f 100644 --- a/docs/zh/server/security/trusted_computing/kernel-trusted-root-framework.md +++ b/docs/zh/server/security/trusted_computing/kernel_root_of_trust_framework.md @@ -1,4 +1,4 @@ -# 内核可信根框架 +# 内核可信根框架 ## 概述 @@ -89,4 +89,3 @@ ima_rot=virtcca **注意:** 如果环境中仅virtcca可信根可用,无其他可信根(如vTPM)可用,也可不配置该参数。 配置完成后,首条IMA度量日志(boot aggregate日志)即为virtCCA的RIM的中存储的度量值;每条IMA度量日志的哈希值将在virtCCA的REM[0]中进行哈希扩展。用户可以基于virtCCA提供的远程证明软件栈实现机密虚机中的应用度量结果校验。 - diff --git a/docs/zh/server/security/trusted_computing/interpreter-class-application-integrity-protects.md b/docs/zh/server/security/trusted_computing/protection_for_interpreted_applications.md similarity index 100% rename from docs/zh/server/security/trusted_computing/interpreter-class-application-integrity-protects.md rename to docs/zh/server/security/trusted_computing/protection_for_interpreted_applications.md diff --git a/docs/zh/server/security/trusted_computing/remote-attestation-kunpeng-security-library.md b/docs/zh/server/security/trusted_computing/remote_attestation_kunpeng_security_library.md similarity index 99% rename from docs/zh/server/security/trusted_computing/remote-attestation-kunpeng-security-library.md rename to docs/zh/server/security/trusted_computing/remote_attestation_kunpeng_security_library.md index e0b223804caf60e189f51b1cf2722c510f8bce28..c984517b1f9d37cd487eec17f5bad3b9aad41f0a 100644 --- a/docs/zh/server/security/trusted_computing/remote-attestation-kunpeng-security-library.md +++ b/docs/zh/server/security/trusted_computing/remote_attestation_kunpeng_security_library.md @@ -409,4 +409,4 @@ curl -X POST -H "Content-Type: application/json" -H "Authorization: $AUTHTOKEN" 2. 为什么RAS启动后,通过restapi无法访问? - >因为RAS默认以https模式启动,您需要向RAS提供合法的证书才能正常访问,而http模式下启动的RAS则不需要提供证书。 \ No newline at end of file + >因为RAS默认以https模式启动,您需要向RAS提供合法的证书才能正常访问,而http模式下启动的RAS则不需要提供证书。 diff --git a/docs/zh/server/security/trusted_computing/tpcm.md b/docs/zh/server/security/trusted_computing/tpcm.md index 2cbe00d46cf37245dd331e4bc19c1a2518fc37bb..5abf5595d6fd8066e0642864415965d59518bcda 100644 --- a/docs/zh/server/security/trusted_computing/tpcm.md +++ b/docs/zh/server/security/trusted_computing/tpcm.md @@ -8,8 +8,6 @@ TPCM可信计算3.0架构为双体系架构,分为防护部件和计算部件,以可信密码模块为基础,通过可信平台控制模块对防护部件和计算部件及组件的固件进行可信度量,可信软件基(Trusted Software Base,TSB)对系统软件及应用软件进行可信度量,同时TPCM管理平台实现对可信度量的验证及可信策略同步和管理。 - - ## 功能描述 如下图所示,整体系统方案由防护部件、计算部件和可信管理中心三部分组成。 @@ -36,4 +34,4 @@ TPCM可信计算3.0架构为双体系架构,分为防护部件和计算部件 ## 应用场景 -通过TPCM特性构成一个完整的信任链,保障系统启动以后进入一个可信的计算环境。 \ No newline at end of file +通过TPCM特性构成一个完整的信任链,保障系统启动以后进入一个可信的计算环境。 diff --git a/docs/zh/server/security/trusted_computing/trusted-computing.md b/docs/zh/server/security/trusted_computing/trusted_computing.md similarity index 100% rename from docs/zh/server/security/trusted_computing/trusted-computing.md rename to docs/zh/server/security/trusted_computing/trusted_computing.md diff --git a/docs/zh/tools/ai/_toc.yaml b/docs/zh/tools/ai/_toc.yaml index b9a937a2dcb1179729ddc991f93cabdf02fc46b6..f0b4cf080cb7ecda1d7c90d657f62dc1cc29181f 100644 --- a/docs/zh/tools/ai/_toc.yaml +++ b/docs/zh/tools/ai/_toc.yaml @@ -1,22 +1,11 @@ label: AI sections: - - label: openEuler Intelligence - sections: - - href: - upstream: https://gitee.com/openeuler/euler-copilot-framework/blob/master/docs_for_openEuler/zh/openEuler_intelligence/intelligent_assistant/_toc.yaml - - href: - upstream: https://gitee.com/openeuler/euler-copilot-framework/blob/master/docs_for_openEuler/zh/openEuler_intelligence/intelligent_vulnerability_patching/_toc.yaml - - href: - upstream: https://gitee.com/openeuler/euler-copilot-framework/blob/master/docs_for_openEuler/zh/openEuler_intelligence/mcp_agent/_toc.yaml - - label: 智能底座 + - label: AI 容器镜像用户指南 sections: - - href: - upstream: https://gitee.com/openeuler/euler-copilot-framework/blob/master/docs_for_openEuler/zh/intelligent_foundation/sysHAX/_toc.yaml - - label: AI全栈 + - href: ./ai_container_image_userguide/_toc.yaml + - label: 支持百川、chatglm、星火等AI大模型的容器化封装 sections: - - href: - upstream: https://gitee.com/openeuler/euler-copilot-framework/blob/master/docs_for_openEuler/zh/ai_full_stack/ai_container_image_userguide/_toc.yaml - - href: - upstream: https://gitee.com/openeuler/euler-copilot-framework/blob/master/docs_for_openEuler/zh/ai_full_stack/ai_large_model_service_images_userguide/_toc.yaml - - \ No newline at end of file + - href: ./ai_large_model_service_image_userguide/_toc.yaml + - label: openEuler Copilot System + sections: + - href: ./euler_copilot/_toc.yaml \ No newline at end of file diff --git a/docs/zh/tools/ai/ai_container_image_userguide/_toc.yaml b/docs/zh/tools/ai/ai_container_image_userguide/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6cec8dda55332335d1fe0c70bce89728f9cb1694 --- /dev/null +++ b/docs/zh/tools/ai/ai_container_image_userguide/_toc.yaml @@ -0,0 +1,6 @@ +label: AI容器镜像用户指南 +isManual: true +description: openEuler AI 容器镜像封装了 AI 框架等软件,提高 AI 应用开发或使用效率 +sections: + - label: AI容器镜像用户指南 + href: ./ai_container_image_user_guide.md diff --git a/docs/zh/tools/ai/ai_container_image_userguide/ai_container_image_user_guide.md b/docs/zh/tools/ai/ai_container_image_userguide/ai_container_image_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..4d4b97e7171c0453851394b69bfda7dacb6f129f --- /dev/null +++ b/docs/zh/tools/ai/ai_container_image_userguide/ai_container_image_user_guide.md @@ -0,0 +1,115 @@ +# openEuler AI 容器镜像用户指南 + +## 简介 + +openEuler AI 容器镜像封装了不同硬件算力的 SDK 以及 AI 框架、大模型应用等软件,用户只需要在目标环境中加载镜像并启动容器,即可进行 AI 应用开发或使用,大大减少了应用部署和环境配置的时间,提升效率。 + +## 获取镜像 + +目前,openEuler 已发布支持 Ascend 和 NVIDIA 平台的容器镜像,获取路径如下: + +- [openeuler/cann](https://hub.docker.com/r/openeuler/cann) + +存放 SDK 类镜像,在 openEuler 基础镜像之上安装 CANN 系列软件,适用于 Ascend 环境。 + +- [openeuler/cuda](https://hub.docker.com/r/openeuler/cuda) + +存放 SDK 类镜像,在 openEuler 基础镜像之上安装 CUDA 系列软件,适用于 NVIDIA 环境。 + +- [openeuler/pytorch](https://hub.docker.com/r/openeuler/pytorch) + +存放 AI 框架类镜像,在 SDK 镜像基础之上安装 PyTorch,根据安装的 SDK 软件内容区分适用平台。 + +- [openeuler/tensorflow](https://hub.docker.com/r/openeuler/tensorflow) + +存放 AI 框架类镜像,在 SDK 镜像基础之上安装 TensorFlow,根据安装的 SDK 软件内容区分适用平台。 + +- [openeuler/llm](https://hub.docker.com/r/openeuler/tensorrt) + +存放模型应用类镜像,在 AI 框架镜像之上包含特定大模型及工具链,根据安装的 SDK 软件内容区分适用平台。 + +详细的 AI 容器镜像分类和镜像 tag 的规范说明见[oEEP-0014](https://gitee.com/openeuler/TC/blob/master/oEEP/oEEP-0014%20openEuler%20AI容器镜像软件栈规范.md)。 + +由于 AI 容器镜像的体积一般较大,推荐用户在启动容器前先通过如下命令将镜像拉取到开发环境中。 + +```sh +docker pull image:tag +``` + +其中,`image`为仓库名,如`openeuler/cann`,`tag`为目标镜像的 TAG,待镜像拉取完成后即可启动容器。注意,使用`docker pull`命令需按照下文方法安装`docker`软件。 + +## 启动容器 + +1. 在环境中安装`docker`,官方安装方法见[Install Docker Engine](https://docs.docker.com/engine/install/),也可直接通过如下命令进行安装。 + + ```sh + yum install -y docker + ``` + + 或 + + ```sh + apt-get install -y docker + ``` + +2. NVIDIA环境安装`nvidia-container` + + 1)配置yum或apt repo + - 使用yum安装时,执行: + + ```sh + curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \ + sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo + ``` + + - 使用apt安装时,执行: + + ```sh + curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg + ``` + + ```sh + curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ + sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ + sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list + ``` + + 2)安装`nvidia-container-toolkit`,`nvidia-container-runtime`,执行: + + ```sh + # yum安装 + yum install -y nvidia-container-toolkit nvidia-container-runtime + ``` + + ```sh + # apt安装 + apt-get install -y nvidia-container-toolkit nvidia-container-runtime + ``` + + 3)配置docker + + ```sh + nvidia-ctk runtime configure --runtime=docker + systemctl restart docker + ``` + + 非NVIDIA环境不执行此步骤。 + +3. 确保环境中安装`driver`及`firmware`,用户可从[NVIDIA](https://www.nvidia.com/)或[Ascend](https://www.hiascend.com/)官网获取正确版本进行安装。安装完成后 Ascend 平台使用`npu-smi info`命令、NVIDIA 平台使用`nvidia-smi`进行测试,正确显示硬件信息则说明安装正常。 + +4. 完成上述操作后,即可使用`docker run`命令启动容器。 + +```sh +# Ascend环境启动容器 +docker run --rm --network host \ + --device /dev/davinci0:/dev/davinci0 \ + --device /dev/davinci_manager --device /dev/devmm_svm --device /dev/hisi_hdc \ + -v /usr/local/dcmi:/usr/local/dcmi -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \ + -v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \ + -ti image:tag +``` + +```sh +# NVIDIA环境启动容器 +docker run --gpus all -d -ti image:tag +``` diff --git a/docs/zh/tools/ai/ai_large_model_service_image_userguide/_toc.yaml b/docs/zh/tools/ai/ai_large_model_service_image_userguide/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e4765568ccc2d1478573f457bf3fe636ff583949 --- /dev/null +++ b/docs/zh/tools/ai/ai_large_model_service_image_userguide/_toc.yaml @@ -0,0 +1,6 @@ +label: AI大模型服务镜像使用指南 +isManual: true +description: 支持百川、chatglm、星火等AI大模型的容器化封装 +sections: + - label: AI大模型服务镜像使用指南 + href: ./llm_service_image_user_guide.md diff --git a/docs/zh/tools/ai/ai_large_model_service_image_userguide/llm_service_image_user_guide.md b/docs/zh/tools/ai/ai_large_model_service_image_userguide/llm_service_image_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..c7c492b104b74e25ac87980c2d8580885a43df0e --- /dev/null +++ b/docs/zh/tools/ai/ai_large_model_service_image_userguide/llm_service_image_user_guide.md @@ -0,0 +1,94 @@ +# 支持百川、chatglm、星火等AI大模型的容器化封装 + +已配好相关依赖,分为CPU和GPU版本,降低使用门槛,开箱即用。 + +## 拉取镜像(CPU版本) + +```bash +docker pull openeuler/llm-server:1.0.0-oe2203sp3 +``` + +## 拉取镜像(GPU版本) + +```bash +docker pull icewangds/llm-server:1.0.0 +``` + +## 下载模型, 并转换为gguf格式 + +```bash +# 安装huggingface +pip install huggingface-hub + +# 下载你想要部署的模型 +export HF_ENDPOINT=https://hf-mirror.com +huggingface-cli download --resume-download baichuan-inc/Baichuan2-13B-Chat --local-dir /root/models/Baichuan2-13B-Chat --local-dir-use-symlinks False + +# gguf格式转换 +cd /root/models/ +git clone https://github.com/ggerganov/llama.cpp.git +python llama.cpp/convert-hf-to-gguf.py ./Baichuan2-13B-Chat +# 生成的gguf格式的模型路径 /root/models/Baichuan2-13B-Chat/ggml-model-f16.gguf +``` + +## 启动方式 + +需要Docker v25.0.0及以上版本。 + +若使用GPU镜像,需要OS上安装nvidia-container-toolkit,安装方式见。 + +docker-compose.yaml: + +```yaml +version: '3' +services: + model: + image: : #镜像名称与tag + restart: on-failure:5 + ports: + - 8001:8000 #监听端口号,修改“8001”以更换端口 + volumes: + - /root/models:/models # 大模型挂载目录 + environment: + - MODEL=/models/Baichuan2-13B-Chat/ggml-model-f16.gguf # 容器内的模型文件路径 + - MODEL_NAME=baichuan13b # 自定义模型名称 + - KEY=sk-12345678 # 自定义API Key + - CONTEXT=8192 # 上下文大小 + - THREADS=8 # CPU线程数,仅CPU部署时需要 + deploy: # 指定GPU资源, 仅GPU部署时需要 + resources: + reservations: + devices: + - driver: nvidia + count: all + capabilities: [gpu] +``` + +```bash +docker-compose -f docker-compose.yaml up +``` + +docker run: + +```text +cpu部署: docker run -d --restart on-failure:5 -p 8001:8000 -v /root/models:/models -e MODEL=/models/Baichuan2-13B-Chat/ggml-model-f16.gguf -e MODEL_NAME=baichuan13b -e KEY=sk-12345678 openeuler/llm-server:1.0.0-oe2203sp3 + +gpu部署: docker run -d --gpus all --restart on-failure:5 -p 8001:8000 -v /root/models:/models -e MODEL=/models/Baichuan2-13B-Chat/ggml-model-f16.gguf -e MODEL_NAME=baichuan13b -e KEY=sk-12345678 icewangds/llm-server:1.0.0 +``` + +## 调用大模型接口测试,成功返回则表示大模型服务已部署成功 + +```bash +curl -X POST http://127.0.0.1:8001/v1/chat/completions \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer sk-12345678" \ + -d '{ + "model": "baichuan13b", + "messages": [ + {"role": "system", "content": "你是一个社区助手,请回答以下问题。"}, + {"role": "user", "content": "你是谁?"} + ], + "stream": false, + "max_tokens": 1024 + }' +``` diff --git a/docs/zh/tools/ai/euler_copilot/README.md b/docs/zh/tools/ai/euler_copilot/README.md new file mode 100644 index 0000000000000000000000000000000000000000..6859571a80cc40c2dba38d9308bc293129a8157d --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/README.md @@ -0,0 +1,44 @@ +# openEuler Copilot System + +## 功能描述 + +openEuler Copilot System 智能问答平台目前支持 Web 和智能 Shell 两个入口。 + +- Web 入口:操作简单,可咨询操作系统相关基础知识,openEuler 动态数据、openEuler 运维问题解决方案、openEuler 项目介绍与使用指导等等。 +- 智能 Shell 入口:自然语言和 openEuler 交互,启发式的运维。 + +## 应用场景 + +- 面向 openEuler 普通用户:深入了解 openEuler 相关知识和动态数据,比如咨询如何迁移到 openEuler。 +- 面向 openEuler 开发者:熟悉 openEuler 开发贡献流程、关键特性、相关项目的开发等知识。 +- 面向 openEuler 运维人员:熟悉 openEuler 常见或疑难问题的解决思路和方案、openEuler 系统管理知识和相关命令。 + +## 用户手册目录 + +### 部署手册 + +- Web 端部署指南 + - [网络环境下部署指南](./deployment_guide/online.md) + - [无网络环境下部署指南](./deployment_guide/offline.md) + +- 插件部署指南 + - [智能调优](./deployment_guide/plugin_deployment_guide/intelligent_tune/intelligent_tune_deployment_guide.md) + - [智能诊断](./deployment_guide/plugin_deployment_guide/intelligent_diagnosis/intelligent_diagnosis_deployment_guide.md) + - [AI容器栈](./deployment_guide/plugin_deployment_guide/ai_container/ai_container_stack_deployment_guide.md) + +- [本地资产库构建指南](./deployment_guide/local_asset_library_setup_guide.md) + +### 使用手册 + +- [管理员:知识库管理](./usage_guide/knowledge_base_management/witchaind_guidance.md) + +- [Web 端使用手册](./usage_guide/oneline_services/preface.md) + - [注册与登录](./usage_guide/oneline_services/registration_and_login.md) + - [智能问答](./usage_guide/oneline_services/qa_guide.md) + - [智能插件](./usage_guide/oneline_services/intelligent_plugin.md) + +- [智能 Shell 使用手册](./usage_guide/cli_client/cli_assistant_user_guide.md) + - [准备工作:获取 API Key](./usage_guide/cli_client/obtaining_api_key.md) + - [智能插件](./usage_guide/cli_client/cli_assistant_user_guide.md#intelligent_plugin) + - [智能调优](./usage_guide/cli_client/tune.md) + - [智能诊断](./usage_guide/cli_client/diagnosis.md) diff --git a/docs/zh/tools/ai/euler_copilot/_toc.yaml b/docs/zh/tools/ai/euler_copilot/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f83e75ef35afc0d57f4b38537d595958baa6a17a --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/_toc.yaml @@ -0,0 +1,36 @@ +label: openEuler Copilot System +isManual: true +description: openEuler Copilot System 智能问答平台目前支持 Web 和智能 Shell 两个入口。 +sections: + - label: 网络环境下部署指南 + href: ./deployment_guide/online.md + - label: 无网络环境下部署指南 + href: ./deployment_guide/offline.md + - label: 智能调优 + href: ./deployment_guide/plugin_deployment_guide/intelligent_tune/intelligent_tune_deployment_guide.md + - label: 智能诊断 + href: ./deployment_guide/plugin_deployment_guide/intelligent_diagnosis/intelligent_diagnosis_deployment_guide.md + - label: AI容器栈 + href: ./deployment_guide/plugin_deployment_guide/ai_container/ai_container_stack_deployment_guide.md + - label: 本地资产库构建指南 + href: ./deployment_guide/local_asset_library_setup_guide.md + - label: 知识库管理 + href: ./usage_guide/knowledge_base_management/witchaind_guidance.md + - label: Web 端使用手册 + href: ./usage_guide/oneline_services/preface.md + - label: 注册与登录 + href: ./usage_guide/oneline_services/registration_and_login.md + - label: 智能问答 + href: ./usage_guide/oneline_services/qa_guide.md + - label: 智能插件 + href: ./usage_guide/oneline_services/intelligent_plugin.md + - label: 智能 Shell 使用手册 + href: ./usage_guide/cli_client/cli_assistant_user_guide.md + - label: 准备工作:获取 API Key + href: ./usage_guide/cli_client/obtaining_api_key.md + - label: 智能插件 + href: ./usage_guide/cli_client/cli_assistant_user_guide.md#intelligent_plugin + - label: 智能调优 + href: ./usage_guide/cli_client/tune.md + - label: 智能诊断 + href: ./usage_guide/cli_client/diagnosis.md \ No newline at end of file diff --git a/docs/zh/tools/ai/euler_copilot/deployment_guide/_toc.yaml b/docs/zh/tools/ai/euler_copilot/deployment_guide/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0c6e12fc8e33221946cd0bbaea82f3ea06160ba3 --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/deployment_guide/_toc.yaml @@ -0,0 +1,12 @@ +label: 部署指南 +isManual: true +description: +sections: + - label: Web 部署指南 + sections: + - label: 无网络环境下部署指南 + href: ./offline.md + - label: 网络环境下部署指南 + href: ./online.md + - label: 本地资产库构建指南 + href: ./local_asset_library_setup_guide.md diff --git a/docs/zh/tools/ai/euler_copilot/deployment_guide/local_asset_library_setup_guide.md b/docs/zh/tools/ai/euler_copilot/deployment_guide/local_asset_library_setup_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..21873a3335df2e1ce11832ed0ae6f38dfa33093a --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/deployment_guide/local_asset_library_setup_guide.md @@ -0,0 +1,406 @@ +# 本地资产库构建指南 + +- RAG 是一个检索增强的模块,该指南主要是为rag提供命令行的方式进行数据库管理、资产管理、资产库管理和语料资产管理; + 对于数据库管理提供了清空数据库、初始化数据库等功能; + 对于资产管理提供了资产创建、资产查询和资产删除等功能; + 对于资产库管理提供了资产库创建、资产库查询和资产库删除等功能; + 对于语料资产管理提供了语料上传、语料查询和语料删除等功能。 +- 当前指南面向管理员进行编写,对于管理员而言,可以拥有多个资产,一个资产包含多个资产库(不同资产库的使用的向量化模型可以不同),一个资产库对应一个语料资产。 +- 本地语料上传指南是用户构建项目专属语料的指导,当前支持 docx、pdf、markdown、txt 和 xlsx 文件上传,推荐使用 docx 格式上传。 + +## 准备工作 + +- RAG 中关于语料上传目录挂载的配置: + +将本地语料保存到服务器的目录,例如 /home/docs 目录,且将 /home/data 目录权限设置为755 + +```bash +# 设置本地存放文档目录权限为755 +chmod -R 755 /home/docs +``` + +将文件存放的源目录映射至 RAG 容器目标目录,源目录的配置在 中,下面是文件中具体配置映射源目录的配置方法: + +![配置映射源目录](./pictures/本地资产库构建/配置映射源目录.png) + +中间层的配置(链接源目录和目标目录的配置)在 中,下面是文件中具体映射中间层的配置方法: + +![配置映射中间层](./pictures/本地资产库构建/配置映射中间层.png) + +目标目录的配置在 中,下面是文件中具体映射目标目录的配置方法: + +![配置映射目标目录](./pictures/本地资产库构建/配置映射目标目录.png) + +- 更新 Copilot 服务: + + ```bash + root@openeuler:/home/EulerCopilot/deploy/chart# helm upgrade -n euler-copilot service . + # 请注意:service是服务名,可根据实际修改 + ``` + +- 进入到 RAG 容器: + + ```bash + root@openeuler:~# kubectl -n euler-copilot get pods + NAME READY STATUS RESTARTS AGE + framework-deploy-service-bb5b58678-jxzqr 2/2 Running 0 16d + mysql-deploy-service-c7857c7c9-wz9gn 1/1 Running 0 17d + pgsql-deploy-service-86b4dc4899-ppltc 1/1 Running 0 17d + rag-deploy-service-5b7887644c-sm58z 2/2 Running 0 110m + redis-deploy-service-f8866b56-kj9jz 1/1 Running 0 17d + vectorize-deploy-service-57f5f94ccf-sbhzp 2/2 Running 0 17d + web-deploy-service-74fbf7999f-r46rg 1/1 Running 0 2d + # 进入rag pod + root@openeuler:~# kubectl -n euler-copilot exec -it rag-deploy-service-5b7887644c-sm58z -- bash + ``` + +- 设置 PYTHONPATH + + ```bash + # 设置PYTHONPATH + export PYTHONPATH=$(pwd) + ``` + +## 上传语料 + +### 查看脚本帮助信息 + +```bash +python3 scripts/rag_kb_manager.pyc --help +usage: rag_kb_manager.pyc [-h] --method + {init_database_info,init_rag_info,init_database,clear_database,create_kb,del_kb,query_kb,create_kb_asset,del_kb_asset,query_kb_asset,up_corpus,del_corpus,query_corpus,stop_corpus_uploading_job} + [--database_url DATABASE_URL] [--vector_agent_name VECTOR_AGENT_NAME] [--parser_agent_name PARSER_AGENT_NAME] + [--rag_url RAG_URL] [--kb_name KB_NAME] [--kb_asset_name KB_ASSET_NAME] [--corpus_dir CORPUS_DIR] + [--corpus_chunk CORPUS_CHUNK] [--corpus_name CORPUS_NAME] [--up_chunk UP_CHUNK] + [--embedding_model {TEXT2VEC_BASE_CHINESE_PARAPHRASE,BGE_LARGE_ZH,BGE_MIXED_MODEL}] [--vector_dim VECTOR_DIM] + [--num_cores NUM_CORES] + +optional arguments: + -h, --help show this help message and exit + --method {init_database_info,init_rag_info,init_database,clear_database,create_kb,del_kb,query_kb,create_kb_asset,del_kb_asset,query_kb_asset,up_corpus,del_corpus,query_corpus,stop_corpus_uploading_job} + 脚本使用模式,有init_database_info(初始化数据库配置)、init_database(初始化数据库)、clear_database(清除数据库)、create_kb(创建资产)、 + del_kb(删除资产)、query_kb(查询资产)、create_kb_asset(创建资产库)、del_kb_asset(删除资产库)、query_kb_asset(查询 + 资产库)、up_corpus(上传语料,当前支持txt、html、pdf、docx和md格式)、del_corpus(删除语料)、query_corpus(查询语料)和 + stop_corpus_uploading_job(上传语料失败后,停止当前上传任务) + --database_url DATABASE_URL + 语料资产所在数据库的url + --vector_agent_name VECTOR_AGENT_NAME + 向量化插件名称 + --parser_agent_name PARSER_AGENT_NAME + 分词插件名称 + --rag_url RAG_URL rag服务的url + --kb_name KB_NAME 资产名称 + --kb_asset_name KB_ASSET_NAME + 资产库名称 + --corpus_dir CORPUS_DIR + 待上传语料所在路径 + --corpus_chunk CORPUS_CHUNK + 语料切割尺寸 + --corpus_name CORPUS_NAME + 待查询或者待删除语料名 + --up_chunk UP_CHUNK 语料单次上传个数 + --embedding_model {TEXT2VEC_BASE_CHINESE_PARAPHRASE,BGE_LARGE_ZH,BGE_MIXED_MODEL} + 初始化资产时决定使用的嵌入模型 + --vector_dim VECTOR_DIM + 向量化维度 + --num_cores NUM_CORES + 语料处理使用核数 +``` + +### 具体操作 + +以下出现的命令中带**初始化**字段需要在进行资产管理前按指南中出现的相对顺序进行执行,命令中带**可重复**执字段的在后续过程中可以反复执行,命令中带**注意**字段的需谨慎执行。 + +### 步骤1:配置数据库和 RAG 信息 + +- #### 配置数据库信息(初始化) + +```bash +python3 scripts/rag_kb_manager.pyc --method init_database_info --database_url postgresql+psycopg2://postgres:123456@{dabase_url}:{databse_port}/postgres +``` + +**注意:** + +**{dabase_url}**为 k8s 集群内访问 postgres 服务的 url,请根据具体情况修改,一般为 **{postgres_servive_name}-{{ .Release.Name }}.\.svc.cluster.local** 格式,其中 **{postgres_servive_name}** 可以从 找到: + +![k8s集群中postgres服务的名称](./pictures/本地资产库构建/k8s集群中postgres服务的名称.png) + +**{{ .Release.Name }}**和**\** 为部署服务时helm安装应用时指定的 **my-release-name** 以及 **my-namespace**,一条 helm 安装应用的命令如下所示: + +```bash +helm install my-release-name --namespace my-namespace path/to/chart +``` + +**database_port** 的信息可以在 中查看,以下为字段所在位置(一般为5432): + +![postgres服务端口](./pictures/本地资产库构建/postgres服务端口.png) + +数据库信息配置命令执行命令完成之后会在 scripts/config 下出现 database_info.json 文件,文件内容如下: + +```bash +{"database_url": "postgresql+psycopg2://postgres:123456@{dabase_url}:{databse_port}/postgres"} +``` + +下面是命令执行成功的截图: + +![数据库配置信息成功](./pictures/本地资产库构建/数据库配置信息成功.png) + +- #### 配置rag信息(初始化) + +```bash +python3 scripts/rag_kb_manager.pyc --method init_rag_info --rag_url http://{rag_url}:{rag_port} +``` + +**{rag_url}** 为 0.0.0.0,**{rag_port}** 可以从 中获取(一般为8005): + +![rag_port](./pictures/本地资产库构建/rag_port.png) + +数据库信息配置命令执行命令完成之后会在 scripts/config 下出现 rag_info.json 文件,文件内容如下: + +```bash +{"rag_url": "http://{rag_url}:{rag_port}"} +``` + +下面是命令执行成功的截图: + +![rag配置信息成功](./pictures/本地资产库构建/rag配置信息成功.png) + +### 步骤2:初始化数据库 + +- #### 初始化数据库表格 + +```bash +python3 scripts/rag_kb_manager.pyc --method init_database +# 注意: +# 对于特殊关系型数据库可指定插件参数'--vector_agent_name VECTOR_AGENT_NAME'和 '--parser_agent_name PARSER_AGENT_NAME';其中VECTOR_AGENT_NAME默认为vector, PARSER_AGENT_NAME默认为zhparser +``` + +命令执行完成之后可以进入数据库容器查看表格是否创建成功,首先获取命名空间中的所有节点名称: + +```bash +# 获取命名空间中的所有pod节点 +kubectl get pods -n euler-copilot +``` + +结果如下: + +![获取数据库pod名称](./pictures/本地资产库构建/获取数据库pod名称.png) + +使用下面命令进入数据库: + +```bash +kubectl exec -it pgsql-deploy-b4cc79794-qn8zd -n euler-copilot -- bash +``` + +进入容器后使用下面命令进入数据库: + +```bash +root@pgsql-deploy-b4cc79794-qn8zd:/tmp# psql -U postgres +``` + +再使用\dt查看数据库初始化情况,出现下面内容表示数据库初始化成功: + +![数据库初始化](./pictures/本地资产库构建/数据库初始化.png) + +- #### 清空数据库(注意) + + 假设您想清空 RAG 产生的所有数据库数据,可以使用下面命令(**此命令会清空整个数据库,需谨慎操作!**)。 + +```bash +python3 scripts/rag_kb_manager.pyc --method clear_database +# 清空数据库请谨慎操作 +``` + +### 步骤3:创建资产 + + 下列指令若不指定 kb_name,则默认资产名为 default_test(ps:Copilot 不允许存在两个同名的资产): + +- #### 创建资产(可重复) + +```bash +python3 scripts/rag_kb_manager.pyc --method create_kb --kb_name default_test +``` + +创建资产成功会有以下提示: + +![创建资产成功](./pictures/本地资产库构建/创建资产成功.png) + +创建同名资产会有以下提示: + +![重复创建资产失败](./pictures/本地资产库构建/重复创建资产失败.png) + +- #### 删除资产(可重复) + +```bash +python3 scripts/rag_kb_manager.pyc --method del_kb --kb_name default_test +``` + +删除资产成功会出现以下提示(会将资产下的所有资产库和语料资产全部删除): + +![删除资产成功](./pictures/本地资产库构建/删除资产成功.png) + +对于不存在的资产进行删除,会出现以下提示: + +![删除不存在的资产失败](./pictures/本地资产库构建/删除不存在的资产失败.png) + +- #### 查询资产(可重复) + +```bash +python3 scripts/rag_kb_manager.pyc --method query_kb +``` + +查询资产成功会出现下面内容: + +![查询资产](./pictures/本地资产库构建/查询资产.png) + +对于无资产的情况下查询资产会出现以下内容: + +![无资产时查询资产](./pictures/本地资产库构建/无资产时查询资产.png) + +### 步骤4:创建资产库 + +下列指令若不指定资产名(kb_name)和资产库名(kb_asset_name),则默认资产名为 default_test 和资产库名 default_test_asset(ps:Copilot 同一个资产下不允许存在两个同名的资产库): + +- #### 创建资产库(可重复) + +```bash +python3 scripts/rag_kb_manager.pyc --method create_kb_asset --kb_name default_test --kb_asset_name default_test_asset +# 创建属于default_test的资产库 +``` + +对于创建资产库成功会出现以下内容: + +![资产库创建成功](./pictures/本地资产库构建/资产库创建成功.png) + +对于指定不存在的资产库创建资产会出现以下内容: + +![指定不存在的资产创建资产库失败](./pictures/本地资产库构建/指定不存在的资产创建资产库失败.png) + +对于同一个资产下重复创建同名资产库会出现以下内容: + +![创建资产库失败由于统一资产下存在同名资产库](./pictures/本地资产库构建/创建资产库失败由于统一资产下存在同名资产库.png) + +- #### 删除资产库(可重复) + +```bash +python3 scripts/rag_kb_manager.pyc --method del_kb_asset --kb_name default_test --kb_asset_name default_test_asset +``` + +对于删除资产库成功会出现以下内容: + +![资产库删除成功](./pictures/本地资产库构建/资产库删除成功png.png) + +对于删除不存在的资产库失败会出现以下内容: + +![资产下不存在对应资产库](./pictures/本地资产库构建/删除资产库失败,资产下不存在对应资产库.png) + +对于删除不存在的资产下的资产库会出现以下内容: + +![不存在资产](./pictures/本地资产库构建/资产库删除失败,不存在资产.png) + +- #### 查询资产库(可重复) + +```bash +python3 scripts/rag_kb_manager.pyc --method query_kb_asset --kb_name default_test +# 注意:资产是最上层的,资产库属于资产,且不能重名 +``` + +对于查询资产库成功会出现以下内容: + +![资产下查询资产库成功](./pictures/本地资产库构建/资产下查询资产库成功.png) + +对于资产内无资产库的情况下查询资产库会出现以下内容: + +![资产下未查询到资产库](./pictures/本地资产库构建/资产下未查询到资产库.png) + +对于查询不存在的资产下的资产库会出现以下内容: + +![不存在资产](./pictures/本地资产库构建/资产库查询失败,不存在资产.png) + +### 步骤5:上传语料 + +下列指令若不指定资产名(kb_name)和资产库名(kb_asset_name),则默认资产名为 default_test 和资产库名 default_test_asset,对于删除语料命令需要指定完整的语料名称(语料统一为 docx 格式保存在数据库中,可以通过查询语料命令查看已上传的文档名称);对于查询语料命令可以不指定语料名称(corpus_name),此时默认查询所有语料,可以指定部分或者完整的语料名,此时通过模糊搜索匹配数据库内相关的语料名称。 + +- 上传语料 + +```bash +python3 scripts/rag_kb_manager.pyc --method up_corpus --corpus_dir ./scripts/docs/ --kb_name default_test --kb_asset_name default_test_asset +# 注意: +# 1. RAG容器用于存储用户语料的目录路径是'./scripts/docs/'。在执行相关命令前,请确保该目录下已有本地上传的语料。 +# 2. 若语料已上传但查询未果,请检查宿主机上的待向量化语料目录(位于/home/euler-copilot/docs)的权限设置。 +# 为确保无权限问题影响,您可以通过运行chmod 755 /home/euler-copilot/docs命令来赋予该目录最大访问权限。 +``` + +对于语料上传成功会出现以下内容: + +![语料上传成功](./pictures/本地资产库构建/语料上传成功.png) + +对于语料具体的分割和上传情况可以在 logs/app.log 下查看,内容如下: + +![查看文档产生片段总数和上传成功总数](./pictures/本地资产库构建/查看文档产生片段总数和上传成功总数.png) + +- 删除语料 + +```bash +python3 scripts/rag_kb_manager.pyc --method del_corpus --corpus_name abc.docx --kb_name default_test --kb_asset_name default_test_asset +# 上传的文件统一转换为docx +``` + +对于语料删除成功会出现以下内容: + +![删除语料](./pictures/本地资产库构建/删除语料.png) + +对于删除不存在的语料会出现以下内容: + +![语料删除失败](./pictures/本地资产库构建/语料删除失败,未查询到相关语料.png) + +- 查询语料 + +```bash +# 查询指定名称的语料: +python3 scripts/rag_kb_manager.pyc --method query_corpus --corpus_name 语料名.docx +# 查询所有语料: +python3 scripts/rag_kb_manager.pyc --method query_corpus +``` + +对于查询所有语料会出现以下内容: + +![查询全部语料](./pictures/本地资产库构建/查询全部语料.png) + +- 停止上传任务 + +```bash +python3 scripts/rag_kb_manager.pyc --method stop_corpus_uploading_job +``` + +对于某些极端条件下(例如内存受限),上传语料失败,需要执行上面shell命令用于清除语料上传失败的缓存。 + +## 网页端查看语料上传进度 + +您可以灵活设置端口转发规则,通过执行如下命令将容器端口映射到主机上的指定端口,并在任何设备上通过访问 http://<主机IP>:<映射端口>(例如 )来查看语料上传的详细情况。 + +```bash +kubectl port-forward rag-deploy-service-5b7887644c-sm58z 3000:8005 -n euler-copilot --address=0.0.0.0 +# 注意: 3000是主机上的端口,8005是rag的容器端口,可修改映射到主机上的端口 +``` + +## 验证上传后效果 + +上传语料成功之后你可以通过以下命令直接与 RAG 交互,来观察语料是否上传成功。 + +```bash +curl -k -X POST "http://{rag_url}:{rag_port}/kb/get_answer" -H "Content-Type: application/json" -d '{ \ + "question": "question", \ + "kb_sn": "kb_name", \ + "fetch_source": true, \ + "top_k": 3 \ +}' +``` + +- `question`:问题 + +- `kb_sn`:资产库名称 + +- `fetch_source`:是否返回关联片段以及片段来源,`false` 代表不返回,`true` 代表返回 + +- `top_k`:关联语料片段个数,需要大于等于3 diff --git a/docs/zh/tools/ai/euler_copilot/deployment_guide/offline.md b/docs/zh/tools/ai/euler_copilot/deployment_guide/offline.md new file mode 100644 index 0000000000000000000000000000000000000000..626bd3fb2a56cc03c7f203dbb56e9fba7d9e5874 --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/deployment_guide/offline.md @@ -0,0 +1,741 @@ +# 无网络环境下部署指南 + +## 介绍 + +openEuler Copilot System 是一款智能问答工具,使用 openEuler Copilot System 可以解决操作系统知识获取的便捷性,并且为OS领域模型赋能开发者及运维人员。作为获取操作系统知识,使能操作系统生产力工具 (如 A-Ops / A-Tune / x2openEuler / EulerMaker / EulerDevOps / StratoVirt / iSulad 等),颠覆传统命令交付方式,由传统命令交付方式向自然语义进化,并结合智能体任务规划能力,降低开发、使用操作系统特性的门槛。 + +### 组件介绍 + +| 组件 | 端口 | 说明 | +| ----------------------------- | --------------- | -------------------- | +| euler-copilot-framework | 8002 (内部端口) | 智能体框架服务 | +| euler-copilot-web | 8080 | 智能体前端界面 | +| euler-copilot-rag | 8005 (内部端口) | 检索增强服务 | +| euler-copilot-vectorize-agent | 8001 (内部端口) | 文本向量化服务 | +| mysql | 3306 (内部端口) | MySQL数据库 | +| redis | 6379 (内部端口) | Redis数据库 | +| postgres | 5432 (内部端口) | 向量数据库 | +| secret_inject | 无 | 配置文件安全复制工具 | + +## 环境要求 + +### 软件要求 + +| 类型 | 版本要求 | 说明 | +|------------| -------------------------------------|--------------------------------------| +| 操作系统 | openEuler 22.03 LTS 及以上版本 | 无 | +| K3s | >= v1.30.2,带有 Traefik Ingress 工具 | K3s 提供轻量级的 Kubernetes 集群,易于部署和管理 | +| Helm | >= v3.15.3 | Helm 是一个 Kubernetes 的包管理工具,其目的是快速安装、升级、卸载 openEuler Copilot System 服务 | +| python | >=3.9.9 | python3.9.9 以上版本为模型的下载和安装提供运行环境 | + +### 硬件要求 + +| 类型 | 硬件要求 | +|----------------| -----------------------------| +| 服务器 | 1台 | +| CPU | 鲲鹏或x86_64,>= 32 cores | +| RAM | >= 64GB | +| 存储 | >= 500 GB | +| GPU | Tesla V100 16GB,4张 | +| NPU | 910ProB、910B | + +注意: + +1. 若无 GPU 或 NPU 资源,建议通过调用 OpenAI 接口的方式来实现功能。(接口样例:) +2. 调用第三方 OpenAI 接口的方式不需要安装高版本的 python (>=3.9.9) +3. 英伟达 GPU 对 Docker 的支持必需要新版本 Docker (>= v25.4.0) + +### 部署视图 + +![部署图](./pictures/部署视图.png) + +## 获取 openEuler Copilot System + +- 从 openEuler Copilot System 的官方Git仓库 [euler-copilot-framework](https://gitee.com/openeuler/euler-copilot-framework) 下载最新的部署仓库 +- 如果您正在使用 Kubernetes,则不需要安装 k3s 工具。 + + ```bash + # 下载目录以 home 为例 + cd /home + ``` + + ```bash + git clone https://gitee.com/openeuler/euler-copilot-framework.git + ``` + +## 环境准备 + +如果您的服务器、硬件、驱动等全部就绪,即可启动环境初始化流程,以下部署步骤在无公网环境执行。 + +### 1. 环境检查 + +环境检查主要是对服务器的主机名、DNS、防火墙设置、磁盘剩余空间大小、网络、检查 SELinux 的设置。 + +- 主机名设置 + 在Shell中运行如下命令: + + ```bash + cat /etc/hostname + echo "主机名" > /etc/hostname + ``` + +- 系统DNS设置:需要给当前主机设置有效的DNS +- 防火墙设置 + + ```bash + # 查看防火墙状态 + systemctl status firewalld + # 查看防火墙列表 + firewall-cmd --list-all + # 关闭防火墙 + systemctl stop firewalld + systemctl disable firewalld + ``` + +- SELinux设置 + + ```bash + # 需要关闭selinux,可以临时关闭或永久关闭 + # 永久关闭SELinux + sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config + # 临时关闭 + setenforce 0 + ``` + +### 2. 文件下载 + +- 模型文件 bge-reranker-large、bge-mixed-model 下载 [模型文件下载链接](https://repo.oepkgs.net/openEuler/rpm/openEuler-22.03-LTS/contrib/EulerCopilot/) + + ```bash + mkdir -p /home/EulerCopilot/models + cd /home/EulerCopilot/models + # 将需要下载的bge文件放置在models目录 + wget https://repo.oepkgs.net/openEuler/rpm/openEuler-22.03-LTS/contrib/EulerCopilot/bge-mixed-model.tar.gz + wget https://repo.oepkgs.net/openEuler/rpm/openEuler-22.03-LTS/contrib/EulerCopilot/bge-reranker-large.tar.gz + ``` + +- 下载分词工具 text2vec-base-chinese-paraphrase [分词工具下载链接](https://repo.oepkgs.net/openEuler/rpm/openEuler-22.03-LTS/contrib/EulerCopilot/) + + ```bash + mkdir -p /home/EulerCopilot/text2vec + cd /home/EulerCopilot/text2vec + wget https://repo.oepkgs.net/openEuler/rpm/openEuler-22.03-LTS/contrib/EulerCopilot/text2vec-base-chinese-paraphrase.tar.gz + ``` + +- 镜像包下载 + - x86或arm架构的EulerCopilot服务的各组件镜像单独提供 + +### 3. 安装部署工具 + +#### 3.1 安装 Docker + +如需要基于 GPU/NPU 部署大模型,需要检查 Docker 版本是否满足>= v25.4.0 ,如不满足,请升级 Docker 版本 + +#### 3.2 安装 K3s 并导入镜像 + +- 安装 SELinux 配置文件 + + ```bash + yum install -y container-selinux selinux-policy-base + # packages里有k3s-selinux-0.1.1-rc1.el7.noarch.rpm的离线包 + rpm -i https://rpm.rancher.io/k3s-selinux-0.1.1-rc1.el7.noarch.rpm + ``` + +- x86 架构安装 k3s + + ```bash + # 在有网络的环境上获取k3s相关包,以v1.30.3+k3s1示例 + wget https://github.com/k3s-io/k3s/releases/download/v1.30.3%2Bk3s1/k3s + wget https://github.com/k3s-io/k3s/releases/download/v1.30.3%2Bk3s1/k3s-airgap-images-amd64.tar.zst + cp k3s /usr/local/bin/ + cd /var/lib/rancher/k3s/agent + mkdir images + cp k3s-airgap-images-arm64.tar.zst /var/lib/rancher/k3s/agent/images + # packages里有k3s-install.sh的离线包 + curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh + INSTALL_K3S_SKIP_DOWNLOAD=true ./k3s-install.sh + export KUBECONFIG=/etc/rancher/k3s/k3s.yaml + ``` + +- arm 架构安装 k3s + + ```bash + # 在有网络的环境上获取k3s相关包,以v1.30.3+k3s1示例 + wget https://github.com/k3s-io/k3s/releases/download/v1.30.3%2Bk3s1/k3s-arm64 + wget https://github.com/k3s-io/k3s/releases/download/v1.30.3%2Bk3s1/k3s-airgap-images-arm64.tar.zst + cp k3s-arm64 /usr/local/bin/k3s + cd /var/lib/rancher/k3s/agent + mkdir images + cp k3s-airgap-images-arm64.tar.zst /var/lib/rancher/k3s/agent/images + # packages里有k3s-install.sh的离线包 + curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh + INSTALL_K3S_SKIP_DOWNLOAD=true ./k3s-install.sh + export KUBECONFIG=/etc/rancher/k3s/k3s.yaml + ``` + +- 导入镜像 + + ```bash + # 导入已下载的镜像文件 + k3s ctr image import $(镜像文件) + ``` + +#### 3.3 安装 Helm 工具 + +- x86_64 架构 + + ```bash + wget https://get.helm.sh/helm-v3.15.0-linux-amd64.tar.gz + tar -xzf helm-v3.15.0-linux-amd64.tar.gz + mv linux-amd64/helm /usr/sbin + rm -rf linux-amd64 + ``` + +- arm64 架构 + + ```bash + wget https://get.helm.sh/helm-v3.15.0-linux-arm64.tar.gz + tar -xzf helm-v3.15.0-linux-arm64.tar.gz + mv linux-arm64/helm /usr/sbin + rm -rf linux-arm64 + ``` + +#### 3.4 大模型准备 + +提供第三方openai接口或基于硬件本都部署大模型,本地部署大模型可参考附录部分。 + +## 安装 + +您的环境现已就绪,接下来即可启动 openEuler Copilot System 的安装流程。 + +- 下载目录以home为例,进入 openEuler Copilot System 仓库的 Helm 配置文件目录 + + ```bash + cd /home/euler-copilot-framework && ll + ``` + + ```bash + total 28 + drwxr-xr-x 3 root root 4096 Aug 28 17:45 docs/ + drwxr-xr-x 5 root root 4096 Aug 28 17:45 deploy/ + ``` + +- 查看deploy的目录 + + ```bash + tree deploy + ``` + + ```bash + deploy/chart + ├── databases + │   ├── Chart.yaml + │   ├── configs + │   ├── templates + │   └── values.yaml + ├── authhub + │   ├── Chart.yaml + │   ├── configs + │   ├── templates + │   └── values.yaml + └── euler_copilot + ├── Chart.yaml + ├── configs + ├── templates + │   ├── NOTES.txt + │   ├── rag + │   ├── vectorize + │   └── web + └── values.yaml + ``` + +### 1. 安装数据库 + +- 编辑 values.yaml + + ```bash + cd deploy/chart/databases + ``` + + 仅需修改镜像tag为对应架构,其余可不进行修改 + + ```bash + vim values.yaml + ``` + +- 创建命名空间 + + ```bash + kubectl create namespace euler-copilot + ``` + + 设置环境变量 + + ```bash + export KUBECONFIG=/etc/rancher/k3s/k3s.yaml + ``` + +- 安装数据库 + + ```bash + helm install -n euler-copilot databases . + ``` + +- 查看 pod 状态 + + ```bash + kubectl -n euler-copilot get pods + ``` + + ```bash + pgsql-deploy-databases-86b4dc4899-ppltc 1/1 Running 0 17d + redis-deploy-databases-f8866b56-kj9jz 1/1 Running 0 17d + mysql-deploy-databases-57f5f94ccf-sbhzp 2/2 Running 0 17d + ``` + +- 若服务器之前部署过 mysql,则可预先清除下 pvc,再部署 databases。 + + ```bash + # 获取pvc + kubectl -n euler-copilot get pvc + ``` + + ```bash + # 删除pvc + kubectl -n euler-copilot delete pvc mysql-pvc + ``` + +### 2. 安装鉴权平台Authhub + +- 编辑 values.yaml + + ```bash + cd deploy/chart/authhub + ``` + + 请结合 YAML 中的注释中的[必填]项进行修改 + + ```bash + vim values.yaml + ``` + + - 注意: + 1. authHub 需要域名,可预先申请域名或在 'C:\Windows\System32\drivers\etc\hosts' 下配置。 + authhub和euler-copilot必须是同一个根域名的两个子域名, 例如authhub.test.com和 + eulercopilot.test.com + 2. 修改tag为对应架构的tag; + +- 安装 AuthHub + + ```bash + helm install -n euler-copilot authhub . + ``` + + AuthHub 默认账号 `administrator`, 密码 `changeme` + +- 查看 pod 状态 + + ```bash + kubectl -n euler-copilot get pods + ``` + + ```bash + NAME READY STATUS RESTARTS AGE + authhub-backend-deploy-authhub-64896f5cdc-m497f 2/2 Running 0 16d + authhub-web-deploy-authhub-7c48695966-h8d2p 1/1 Running 0 17d + pgsql-deploy-databases-86b4dc4899-ppltc 1/1 Running 0 17d + redis-deploy-databases-f8866b56-kj9jz 1/1 Running 0 17d + mysql-deploy-databases-57f5f94ccf-sbhzp 2/2 Running 0 17d + ``` + +- 登录 AuthHub + + AuthHub 的域名以 为例,浏览器输入`https://authhub.test.com`, 登录界面如下图所示: + + ![部署图](./pictures/authhub登录界面.png) + +- 创建应用eulercopilot + + ![部署图](./pictures/创建应用界面.png) + 点击创建应用,输入应用名称、应用主页和应用回调地址(登录后回调地址),参考如下: + - 应用名称:eulercopilot + - 应用主页: + - 应用回调地址: + - 应用创建好后会生成 Client ID 和 Client Secret,将生成的 Client ID 和 Client Secret 配置到应用里,以 eulercopilot 为例,创建应用后在配置文件中添加配置 `deploy/chart/euler_copilot/values.yaml` 中添加配置 + + ![部署图](./pictures/创建应用成功界面.png) + +### 2. 安装 openEuler Copilot System + +- 编辑 values.yaml + + ```bash + cd deploy/chart/euler_copilot + ``` + + 请结合 YAML 中的注释中的[必填]项进行修改 + + ```bash + vim values.yaml + ``` + + - 注意: + 1. 查看系统架构,并修改values.yaml中的tag; + 2. 修改values.yaml中的globals的domain为EulerCopilot域名,并配置大模型的相关信息 + 3. 手动创建`docs_dir`、`plugin_dir`、`models`三个文件挂载目录 + 4. 修改values.yaml中framework章节的web_url和oidc设置 + 5. 如果部署插件,则需要配置用于Function Call的模型,此时必须有GPU环境用于部署sglang,可参考附件 + +- 安装 openEuler Copilot System + + ```bash + helm install -n euler-copilot service . + ``` + +- 查看 Pod 状态 + + ```bash + kubectl -n euler-copilot get pods + ``` + + 镜像拉取过程可能需要大约一分钟的时间,请耐心等待。部署成功后,所有 Pod 的状态应显示为 Running。 + + ```bash + NAME READY STATUS RESTARTS AGE + authhub-backend-deploy-authhub-64896f5cdc-m497f 2/2 Running 0 16d + authhub-web-deploy-authhub-7c48695966-h8d2p 1/1 Running 0 17d + pgsql-deploy-databases-86b4dc4899-ppltc 1/1 Running 0 17d + redis-deploy-databases-f8866b56-kj9jz 1/1 Running 0 17d + mysql-deploy-databases-57f5f94ccf-sbhzp 2/2 Running 0 17d + framework-deploy-service-bb5b58678-jxzqr 2/2 Running 0 16d + rag-deploy-service-5b7887644c-sm58z 2/2 Running 0 110m + vectorize-deploy-service-57f5f94ccf-sbhzp 2/2 Running 0 17d + web-deploy-service-74fbf7999f-r46rg 1/1 Running 0 2d + ``` + + 注意:如果 Pod 状态出现失败,建议按照以下步骤进行排查 +注意:如果 Pod 状态出现失败,建议按照以下步骤进行排查 + + 1. 查看 Kubernetes 集群的事件 (Events),以获取更多关于 Pod 失败的上下文信息 + + ```bash + kubectl -n euler-copilot get events + ``` + + 2. 查看镜像拉取是否成功 + + ```bash + k3s crictl images + ``` + + 3. 检查 RAG 的 Pod 日志,以确定是否有错误信息或异常行为。 + + ```bash + kubectl logs rag-deploy-service-5b7887644c-sm58z -n euler-copilot + ``` + + 4. 验证 Kubernetes 集群的资源状态,检查服务器资源或配额是否足够,资源不足常导致 Pod 镜像服拉取失败。 + + ```bash + df -h + ``` + + 5. 如果未拉取成且镜像大小为0,请检查是否是 k3s 版本未满足要求,低于 v1.30.2 + + ```bash + k3s -v + ``` + + 6. 确认 values.yaml 中 framework 的 OIDC 设置是否正确配置,以确保身份验证和授权功能正常工作。 + + ```bash + vim /home/euler-copilot-framework/deploy/chart/euler_copilot/values.yaml + ``` + +## 验证安装 + +恭喜您,openEuler Copilot System 的部署已完成!现在,您可以开启智能问答的非凡体验之旅了。 +请在浏览器中输入 https://$(host_ip):8080 或 (其中 port 默认值为8080,若更改则需相应调整)访问 openEuler Copilot System 网页,并尝试进行智能问答体验。 + +首先请点击下方页面的“立即注册”按钮,完成账号的注册与登录。 +![Web登录界面](./pictures/WEB登录界面.png) + +![Web 界面](./pictures/WEB界面.png) + +## 安装插件 + +详细信息请参考文档 [插件部署指南](./plugin_deployment_guide) + +## 构建专有领域智能问答 + +### 1. 构建 openEuler 专业知识领域的智能问答 + + 1. 修改 values.yaml 的 pg 的镜像仓为 `pg-data` + 2. 修改 values.yaml 的 rag 部分的字段 `knowledgebaseID: openEuler_2bb3029f` + 3. 将 `vim deploy/chart/databases/templates/pgsql/pgsql-deployment.yaml` 的 volumes 相关字段注释 + 4. 进入 `cd deploy/chart/databases`,执行更新服务 `helm upgrade -n euler-copilot databases .` + 5. 进入 `cd deploy/chart/euler_copilot`,执行更新服务 `helm upgrade -n euler-copilot service .` + 6. 进入网页端进行 openEuler 专业知识领域的问答 + +### 2. 构建项目专属知识领域智能问答 + +详细信息请参考文档 [本地资产库构建指南](local_asset_library_setup_guide.md) + +## 附录 + +### 大模型准备 + +#### GPU 环境 + +参考以下方式进行部署 + +1. 下载模型文件: + + ```bash + huggingface-cli download --resume-download Qwen/Qwen1.5-14B-Chat --local-dir Qwen1.5-14B-Chat + ``` + +2. 创建终端 control + + ```bash + screen -S control + ``` + + ```bash + python3 -m fastchat.serve.controller + ``` + + - 按 Ctrl A+D 置于后台 + +3. 创建新终端 api + + ```bash + screen -S api + ``` + + ```bash + python3 -m fastchat.serve.openai_api_server --host 0.0.0.0 --port 30000 --api-keys sk-123456 + ``` + + - 按 Ctrl A+D 置于后台 + - 如果当前环境的 Python 版本是 3.12 或者 3.9 可以创建 python3.10 的 conda 虚拟环境 + + ```bash + mkdir -p /root/py310 + ``` + + ```bash + conda create --prefix=/root/py310 python==3.10.14 + ``` + + ```bash + conda activate /root/py310 + ``` + +4. 创建新终端 worker + + ```bash + screen -S worker + ``` + + ```bash + screen -r worker + ``` + + 安装 fastchat 和 vllm + + ```bash + pip install fschat vllm + ``` + + 安装依赖: + + ```bash + pip install fschat[model_worker] + ``` + + ```bash + python3 -m fastchat.serve.vllm_worker --model-path /root/models/Qwen1.5-14B-Chat/ --model-name qwen1.5 --num-gpus 8 --gpu-memory-utilization=0.7 --dtype=half + ``` + + - 按 Ctrl A+D 置于后台 + +5. 按照如下方式配置文件,并更新服务。 + + ```bash + vim deploy/chart/euler_copilot/values.yaml + ``` + + 修改如下部分 + + ```yaml + llm: + # 开源大模型,OpenAI兼容接口 + openai: + url: "http://$(IP):30000" + key: "sk-123456" + model: qwen1.5 + max_tokens: 8192 + ``` + +#### NPU 环境 + +NPU 环境部署可参考链接 [MindIE安装指南](https://www.hiascend.com/document/detail/zh/mindie/10RC2/whatismindie/mindie_what_0001.html) + +## FAQ + +### 1. huggingface 使用报错? + +```text +File "/usr/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn +raise NewConnectionError( +urllib3.exceptions.eanconectionError: : Failed to establish a new conmection: [Errno 101] Network is unreachable +``` + +- 解决办法 + +```bash +pip3 install -U huggingface_hub +``` + +```bash +export HF_ENDPOINT=https://hf-mirror.com +``` + +### 2. 如何在 RAG 容器中调用获取问答结果的接口? + +- 请先进入到 RAG 对应 Pod + +```bash +curl -k -X POST "http://localhost:8005/kb/get_answer" -H "Content-Type: application/json" -d '{ \ + "question": "", \ + "kb_sn": "default_test", \ + "fetch_source": true }' +``` + +### 3. 执行 `helm upgrade` 报错? + +```text +Error: INSTALLATI0N FAILED: Kubernetes cluster unreachable: Get "http:/localhost:880/version": dial tcp [:1:8089: connect: connection refused +``` + +或者 + +```text +Error: UPGRADE FAILED: Kubernetes cluster unreachable: the server could not find the requested resource +``` + +- 解决办法 + +```bash +export KUBECONFIG=/etc/rancher/k3s/k3s.yaml +``` + +### 4. 无法查看 Pod 日志? + +```text +[root@localhost euler-copilot]# kubectl logs rag-deployservice65c75c48d8-44vcp-n euler-copilotDefaulted container "rag" out of: rag.rag-copy secret (init)Error from server: Get "https://172.21.31.11:10250/containerlogs/euler copilot/rag deploy"service 65c75c48d8-44vcp/rag": Forbidden +``` + +- 解决办法 + 如果设置了代理,需要将本机的网络 IP 从代理中剔除 + +```bash +cat /etc/systemd/system/k3s.service.env +``` + +```text +http_proxy="http://172.21.60.51:3128" +https_proxy="http://172.21.60.51:3128" +no_proxy=172.21.31.10 # 代理中剔除本机IP +``` + +### 5. GPU环境部署大模型时出现无法流式回复? + +在服务执行 curl 大模型失败,但是将 `"stream": true` 改为 `"stream": false`就可以 curl 通? + +```bash +curl http://localhost:30000/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer sk-123456" -d '{ +"model": "qwen1.5", +"messages": [ +{ +"role": "system", +"content": "你是情感分析专家,你的任务是xxxx" +}, +{ +"role": "user", +"content": "你好" +} +], +"stream": true, +"n": 1, +"max_tokens": 32768 +}' +``` + +- 解决办法: + +```bash +pip install Pydantic=1.10.13 +``` + +### 6. 如何部署 sglang? + +```bash +# 1. 激活 Conda 环境, 并激活 Python 3.10 的 Conda 环境。假设你的环境名为 `myenv`: +conda activate myenv + +# 2. 在激活的环境中,安装 sglang[all] 和 flashinfer +pip install sglang[all]==0.3.0 +pip install flashinfer -i https://flashinfer.ai/whl/cu121/torch2.4/ + +# 3. 启动服务器 +python -m sglang.launch_server --served-model-name Qwen2.5-32B --model-path Qwen2.5-32B-Instruct-AWQ --host 0.0.0.0 --port 8001 --api-key sk-12345 --mem-fraction-static 0.5 --tp 8 +``` + +- 验证安装 + + ```bash + pip show sglang + pip show flashinfer + ``` + +- 注意: + + 1. API Key:请确保 `--api-key` 参数中的 API 密钥是正确的 + 2. 模型路径: 确保 `--model-path` 参数中的路径是正确的,并且模型文件存在于该路径下。 + 3. CUDA 版本:确保你的系统上安装了 CUDA 12.1 和 PyTorch 2.4,因为 `flashinfer` 包依赖于这些特定版本。 + 4. 线程池大小:根据你的GPU资源和预期负载调整线程池大小。如果你有 8 个 GPU,那么可以选择 --tp 8 来充分利用这些资源。 + +### 7. 如何 curl embedding? + +```bash +curl -k -X POST http://$IP:8001/embedding \ + -H "Content-Type: application/json" \ + -d '{"texts": ["sample text 1", "sample text 2"]}' +# $IP为vectorize的Embedding的内网地址 +``` + +### 8. 如何生成证书? + +```bash +下载地址: https://github.com/FiloSottile/mkcert/releases +# 1. 下载 mkcert +# x86_64 +wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64 +# arm64 +wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-arm64 + +# 2. 执行下面的命令生成秘钥 +mkcert -install +# mkcert 可直接接域名或 IP, 生成证书和秘钥 +mkcert example.com + +# 3. 将证书和秘钥拷贝到 /home/euler-copilot-framework_openeuler/deploy/chart_ssl/traefik-secret.yaml 中, 并执行下面命令使其生效。 +kubectl apply -f traefik-secret.yaml +``` + +### 8. Pod状态由runnning变为pending? + +在Pod正常运行一段时间后,其状态从“Running”全部转变为 “Pending” 或 “Completed”, +可执行命令`df -h`,查看Pod所在宿主机的存储空间,确保可用空间不低于30%,以保证pod的正常运行。 diff --git a/docs/zh/tools/ai/euler_copilot/deployment_guide/online.md b/docs/zh/tools/ai/euler_copilot/deployment_guide/online.md new file mode 100644 index 0000000000000000000000000000000000000000..6be9b862cd14db3681647939898087eb19c17ae3 --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/deployment_guide/online.md @@ -0,0 +1,625 @@ +# 网络环境部署指南 + +## 介绍 + +openEuler Copilot System 是一款智能问答工具,使用 openEuler Copilot System 可以解决操作系统知识获取的便捷性,并且为OS领域模型赋能开发者及运维人员。作为获取操作系统知识,使能操作系统生产力工具 (如 A-Ops / A-Tune / x2openEuler / EulerMaker / EulerDevOps / StratoVirt / iSulad 等),颠覆传统命令交付方式,由传统命令交付方式向自然语义进化,并结合智能体任务规划能力,降低开发、使用操作系统特性的门槛。 + +### 组件介绍 + +| 组件 | 端口 | 说明 | +| ----------------------------- | --------------- | -------------------- | +| euler-copilot-framework | 8002 (内部端口) | 智能体框架服务 | +| euler-copilot-web | 8080 | 智能体前端界面 | +| euler-copilot-rag | 8005 (内部端口) | 检索增强服务 | +| euler-copilot-vectorize-agent | 8001 (内部端口) | 文本向量化服务 | +| mysql | 3306 (内部端口) | MySQL数据库 | +| redis | 6379 (内部端口) | Redis数据库 | +| postgres | 5432 (内部端口) | 向量数据库 | +| secret_inject | 无 | 配置文件安全复制工具 | + +## 环境要求 + +### 软件要求 + +| 类型 | 版本要求 | 说明 | +|------------| -------------------------------------|--------------------------------------| +| 操作系统 | openEuler 22.03 LTS 及以上版本 | 无 | +| K3s | >= v1.30.2,带有 Traefik Ingress 工具 | K3s 提供轻量级的 Kubernetes 集群,易于部署和管理 | +| Helm | >= v3.15.3 | Helm 是一个 Kubernetes 的包管理工具,其目的是快速安装、升级、卸载 openEuler Copilot System 服务 | +| python | >=3.9.9 | python3.9.9 以上版本为模型的下载和安装提供运行环境 | + +### 硬件要求 + +| 类型 | 硬件要求 | +|----------------| -----------------------------| +| 服务器 | 1台 | +| CPU | 鲲鹏或x86_64,>= 32 cores | +| RAM | >= 64GB | +| 存储 | >= 500 GB | +| GPU | Tesla V100 16GB,4张 | +| NPU | 910ProB、910B | + +注意: + +1. 若无 GPU 或 NPU 资源,建议通过调用 OpenAI 接口的方式来实现功能。(接口样例: 参考链接:[API-KEY的获取与配置](https://help.aliyun.com/zh/dashscope/developer-reference/acquisition-and-configuration-of-api-key?spm=a2c4g.11186623.0.0.30e7694eaaxxGa)) +2. 调用第三方 OpenAI 接口的方式不需要安装高版本的 python (>=3.9.9) +3. 英伟达 GPU 对 Docker 的支持必需要新版本 Docker (>= v25.4.0) +4. 如果k8s集群环境,则不需要单独安装k3s,要求version >= 1.28 + +### 部署视图 + +![部署图](./pictures/部署视图.png) + +## 获取 openEuler Copilot System + +- 从 openEuler Copilot System 的官方Git仓库 [euler-copilot-framework](https://gitee.com/openeuler/euler-copilot-framework) 下载最新的部署仓库 +- 如果您正在使用 Kubernetes,则不需要安装 k3s 工具。 + +```bash +# 下载目录以 home 为例 +cd /home +``` + +```bash +git clone https://gitee.com/openeuler/euler-copilot-framework.git +``` + +## 环境准备 + +设备需联网并符合 openEuler Copilot System 的最低软硬件要求。确认服务器、硬件、驱动等准备就绪后,即可开始环境准备工作。为了顺利进行后续操作,请按照指引,先进入我 +们的脚本部署目录,并且按照提供的操作步骤和脚本路径依次执行,以确保初始化成功。 + +```bash +# 进入部署脚本目录 +cd /home/euler-copilot-framework/deploy/scripts && tree +``` + +```bash +. +├── check_env.sh +├── download_file.sh +├── get_log.sh +├── install_tools.sh +└── prepare_docker.sh +``` + +| 序号 | 步骤内容 | 相关指令 | 说明 | +|-------------- |----------|---------------------------------------------|------------------------------------------ | +|1| 环境检查 | `bash check_env.sh` | 主要对服务器的主机名、DNS、防火墙设置、磁盘剩余空间大小、网络、检查SELinux的设置 | +|2| 文件下载 | `bash download_file.sh` | 模型bge-reranker-large、bge-mixed-mode下载 | +|3| 安装部署工具 | `bash install_tools.sh v1.30.2+k3s1 v3.15.3 cn` | 安装helm、k3s工具。注意:cn的使用是使用镜像站,可以去掉不用 | +|4| 大模型准备 | 提供第三方 OpenAI 接口或基于硬件本都部署大模型 | 本地部署大模型可参考附录部分 | + +## 安装 + +您的环境现已就绪,接下来即可启动 openEuler Copilot System 的安装流程。 + +- 下载目录以home为例,进入 openEuler Copilot System 仓库的 Helm 配置文件目录 + + ```bash + cd /home/euler-copilot-framework && ll + ``` + + ```bash + total 28 + drwxr-xr-x 3 root root 4096 Aug 28 17:45 docs/ + drwxr-xr-x 5 root root 4096 Aug 28 17:45 deploy/ + ``` + +- 查看deploy的目录 + + ```bash + tree deploy + ``` + + ```bash + deploy/chart + ├── databases + │   ├── Chart.yaml + │   ├── configs + │   ├── templates + │   └── values.yaml + ├── authhub + │   ├── Chart.yaml + │   ├── configs + │   ├── templates + │   └── values.yaml + └── euler_copilot + ├── Chart.yaml + ├── configs + ├── templates + │   ├── NOTES.txt + │   ├── rag + │   ├── vectorize + │   └── web + └── values.yaml + ``` + +### 1. 安装数据库 + +- 编辑 values.yaml + + ```bash + cd deploy/chart/databases + ``` + + 仅需修改镜像tag为对应架构,其余可不进行修改 + + ```bash + vim values.yaml + ``` + +- 创建命名空间 + + ```bash + kubectl create namespace euler-copilot + ``` + + 设置环境变量 + + ```bash + export KUBECONFIG=/etc/rancher/k3s/k3s.yaml + ``` + +- 安装数据库 + + ```bash + helm install -n euler-copilot databases . + ``` + +- 查看 pod 状态 + + ```bash + kubectl -n euler-copilot get pods + ``` + + ```bash + pgsql-deploy-databases-86b4dc4899-ppltc 1/1 Running 0 17d + redis-deploy-databases-f8866b56-kj9jz 1/1 Running 0 17d + mysql-deploy-databases-57f5f94ccf-sbhzp 2/2 Running 0 17d + ``` + +- 若服务器之前部署过 mysql,则可预先清除下 pvc,再部署 databases。 + + ```bash + # 获取pvc + kubectl -n euler-copilot get pvc + ``` + + ```bash + # 删除pvc + kubectl -n euler-copilot delete pvc mysql-pvc + ``` + +### 2. 安装鉴权平台Authhub + +- 编辑 values.yaml + + ```bash + cd deploy/chart/authhub + ``` + + 请结合 YAML 中的注释中的[必填]项进行修改 + + ```bash + vim values.yaml + ``` + + - 注意: + 1. authHub 需要域名,可预先申请域名或在 'C:\Windows\System32\drivers\etc\hosts' 下配置。 + authhub和euler-copilot必须是同一个根域名的两个子域名, 例如authhub.test.com和 + eulercopilot.test.com + 2. 修改tag为对应架构的tag; + +- 安装 AuthHub + + ```bash + helm install -n euler-copilot authhub . + ``` + + AuthHub 默认账号 `administrator`, 密码 `changeme` + +- 查看 pod 状态 + + ```bash + kubectl -n euler-copilot get pods + ``` + + ```bash + NAME READY STATUS RESTARTS AGE + authhub-backend-deploy-authhub-64896f5cdc-m497f 2/2 Running 0 16d + authhub-web-deploy-authhub-7c48695966-h8d2p 1/1 Running 0 17d + pgsql-deploy-databases-86b4dc4899-ppltc 1/1 Running 0 17d + redis-deploy-databases-f8866b56-kj9jz 1/1 Running 0 17d + mysql-deploy-databases-57f5f94ccf-sbhzp 2/2 Running 0 17d + ``` + +- 登录 AuthHub + + AuthHub 的域名以 为例,浏览器输入`https://authhub.test.com`, 登录界面如下图所示: + + ![部署图](./pictures/authhub登录界面.png) + +- 创建应用eulercopilot + + ![部署图](./pictures/创建应用界面.png) + 点击创建应用,输入应用名称、应用主页和应用回调地址(登录后回调地址),参考如下: + - 应用名称:eulercopilot + - 应用主页: + - 应用回调地址: + - 应用创建好后会生成 Client ID 和 Client Secret,将生成的 Client ID 和 Client Secret 配置到应用里,以 eulercopilot 为例,创建应用后在配置文件中添加配置 `deploy/chart/euler_copilot/values.yaml` 中添加配置 + + ![部署图](./pictures/创建应用成功界面.png) + +### 2. 安装 openEuler Copilot System + +- 编辑 values.yaml + + ```bash + cd deploy/chart/euler_copilot + ``` + + 请结合 YAML 中的注释中的[必填]项进行修改 + + ```bash + vim values.yaml + ``` + + - 注意: + 1. 查看系统架构,并修改values.yaml中的tag; + 2. 修改values.yaml中的globals的domain为EulerCopilot域名,并配置大模型的相关信息 + 3. 手动创建`docs_dir`、`plugin_dir`、`models`三个文件挂载目录 + 4. 修改values.yaml中framework章节的web_url和oidc设置 + 5. 如果部署插件,则需要配置用于Function Call的模型,此时必须有GPU环境用于部署sglang,可参考附件 + +- 安装 openEuler Copilot System + + ```bash + helm install -n euler-copilot service . + ``` + +- 查看 Pod 状态 + + ```bash + kubectl -n euler-copilot get pods + ``` + + 镜像拉取过程可能需要大约一分钟的时间,请耐心等待。部署成功后,所有 Pod 的状态应显示为 Running。 + + ```bash + NAME READY STATUS RESTARTS AGE + authhub-backend-deploy-authhub-64896f5cdc-m497f 2/2 Running 0 16d + authhub-web-deploy-authhub-7c48695966-h8d2p 1/1 Running 0 17d + pgsql-deploy-databases-86b4dc4899-ppltc 1/1 Running 0 17d + redis-deploy-databases-f8866b56-kj9jz 1/1 Running 0 17d + mysql-deploy-databases-57f5f94ccf-sbhzp 2/2 Running 0 17d + framework-deploy-service-bb5b58678-jxzqr 2/2 Running 0 16d + rag-deploy-service-5b7887644c-sm58z 2/2 Running 0 110m + vectorize-deploy-service-57f5f94ccf-sbhzp 2/2 Running 0 17d + web-deploy-service-74fbf7999f-r46rg 1/1 Running 0 2d + ``` + + 注意:如果 Pod 状态出现失败,建议按照以下步骤进行排查 + +注意:如果 Pod 状态出现失败,建议按照以下步骤进行排查 + + 1. 查看 Kubernetes 集群的事件 (Events),以获取更多关于 Pod 失败的上下文信息 + + ```bash + kubectl -n euler-copilot get events + ``` + + 2. 查看镜像拉取是否成功 + + ```bash + k3s crictl images + ``` + + 3. 检查 RAG 的 Pod 日志,以确定是否有错误信息或异常行为。 + + ```bash + kubectl logs rag-deploy-service-5b7887644c-sm58z -n euler-copilot + ``` + + 4. 验证 Kubernetes 集群的资源状态,检查服务器资源或配额是否足够,资源不足常导致 Pod 镜像服拉取失败。 + + ```bash + df -h + ``` + + 5. 如果未拉取成且镜像大小为0,请检查是否是 k3s 版本未满足要求,低于 v1.30.2 + + ```bash + k3s -v + ``` + + 6. 确认 values.yaml 中 framework 的 OIDC 设置是否正确配置,以确保身份验证和授权功能正常工作。 + + ```bash + vim /home/euler-copilot-framework/deploy/chart/euler_copilot/values.yaml + ``` + +## 验证安装 + +恭喜您,openEuler Copilot System 的部署已完成!现在,您可以开启智能问答的非凡体验之旅了。 +请在浏览器中输入 https://$(host_ip):8080 或 (其中 port 默认值为8080,若更改则需相应调整)访问 openEuler Copilot System 网页,并尝试进行智能问答体验。 + +首先请点击下方页面的“立即注册”按钮,完成账号的注册与登录。 +![Web登录界面](./pictures/WEB登录界面.png) +![Web 界面](./pictures/WEB界面.png) + +## 安装插件 + +详细信息请参考文档 [插件部署指南](./plugin_deployment_guide) + +## 构建专有领域智能问答 + +### 1. 构建 openEuler 专业知识领域的智能问答 + + 1. 修改 values.yaml 的 pg 的镜像仓为 `pg-data` + 2. 修改 values.yaml 的 rag 部分的字段 `knowledgebaseID: openEuler_2bb3029f` + 3. 将 `vim deploy/chart/databases/templates/pgsql/pgsql-deployment.yaml` 的 volumes 相关字段注释 + 4. 进入 `cd deploy/chart/databases`,执行更新服务 `helm upgrade -n euler-copilot databases .` + 5. 进入 `cd deploy/chart/euler_copilot`,执行更新服务 `helm upgrade -n euler-copilot service .` + 6. 进入网页端进行 openEuler 专业知识领域的问答 + +### 2. 构建项目专属知识领域智能问答 + +详细信息请参考文档 [本地资产库构建指南](local_asset_library_setup_guide.md) + +## 附录 + +### 大模型准备 + +#### GPU 环境 + +参考以下方式进行部署 + +1. 下载模型文件: + + ```bash + huggingface-cli download --resume-download Qwen/Qwen1.5-14B-Chat --local-dir Qwen1.5-14B-Chat + ``` + +2. 创建终端 control + + ```bash + screen -S control + ``` + + ```bash + python3 -m fastchat.serve.controller + ``` + + - 按 Ctrl A+D 置于后台 + +3. 创建新终端 api + + ```bash + screen -S api + ``` + + ```bash + python3 -m fastchat.serve.openai_api_server --host 0.0.0.0 --port 30000 --api-keys sk-123456 + ``` + + - 按 Ctrl A+D 置于后台 + - 如果当前环境的 Python 版本是 3.12 或者 3.9 可以创建 python3.10 的 conda 虚拟环境 + + ```bash + mkdir -p /root/py310 + ``` + + ```bash + conda create --prefix=/root/py310 python==3.10.14 + ``` + + ```bash + conda activate /root/py310 + ``` + +4. 创建新终端 worker + + ```bash + screen -S worker + ``` + + ```bash + screen -r worker + ``` + + 安装 fastchat 和 vllm + + ```bash + pip install fschat vllm + ``` + + 安装依赖: + + ```bash + pip install fschat[model_worker] + ``` + + ```bash + python3 -m fastchat.serve.vllm_worker --model-path /root/models/Qwen1.5-14B-Chat/ --model-name qwen1.5 --num-gpus 8 --gpu-memory-utilization=0.7 --dtype=half + ``` + + - 按 Ctrl A+D 置于后台 + +5. 按照如下方式配置文件,并更新服务。 + + ```bash + vim deploy/chart/euler_copilot/values.yaml + ``` + + 修改如下部分 + + ```yaml + llm: + # 开源大模型,OpenAI兼容接口 + openai: + url: "http://$(IP):30000" + key: "sk-123456" + model: qwen1.5 + max_tokens: 8192 + ``` + +#### NPU 环境 + +NPU 环境部署可参考链接 [MindIE安装指南](https://www.hiascend.com/document/detail/zh/mindie/10RC2/whatismindie/mindie_what_0001.html) + +## FAQ + +### 1. huggingface 使用报错? + +```text +File "/usr/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn +raise NewConnectionError( +urllib3.exceptions.eanconectionError: : Failed to establish a new conmection: [Errno 101] Network is unreachable +``` + +- 解决办法 + +```bash +pip3 install -U huggingface_hub +``` + +```bash +export HF_ENDPOINT=https://hf-mirror.com +``` + +### 2. 如何在 RAG 容器中调用获取问答结果的接口? + +- 请先进入到 RAG 对应 Pod + +```bash +curl -k -X POST "http://localhost:8005/kb/get_answer" -H "Content-Type: application/json" -d '{ \ + "question": "", \ + "kb_sn": "default_test", \ + "fetch_source": true }' +``` + +### 3. 执行 `helm upgrade` 报错? + +```text +Error: INSTALLATI0N FAILED: Kubernetes cluster unreachable: Get "http:/localhost:880/version": dial tcp [:1:8089: connect: connection refused +``` + +或者 + +```text +Error: UPGRADE FAILED: Kubernetes cluster unreachable: the server could not find the requested resource +``` + +- 解决办法 + +```bash +export KUBECONFIG=/etc/rancher/k3s/k3s.yaml +``` + +### 4. 无法查看 Pod 日志? + +```text +[root@localhost euler-copilot]# kubectl logs rag-deployservice65c75c48d8-44vcp-n euler-copilotDefaulted container "rag" out of: rag.rag-copy secret (init)Error from server: Get "https://172.21.31.11:10250/containerlogs/euler copilot/rag deploy"service 65c75c48d8-44vcp/rag": Forbidden +``` + +- 解决办法 + 如果设置了代理,需要将本机的网络 IP 从代理中剔除 + +```bash +cat /etc/systemd/system/k3s.service.env +``` + +```text +http_proxy="http://172.21.60.51:3128" +https_proxy="http://172.21.60.51:3128" +no_proxy=172.21.31.10 # 代理中剔除本机IP +``` + +### 5. GPU环境部署大模型时出现无法流式回复? + +在服务执行 curl 大模型失败,但是将 `"stream": true` 改为 `"stream": false`就可以 curl 通? + +```bash +curl http://localhost:30000/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer sk-123456" -d '{ +"model": "qwen1.5", +"messages": [ +{ +"role": "system", +"content": "你是情感分析专家,你的任务是xxxx" +}, +{ +"role": "user", +"content": "你好" +} +], +"stream": true, +"n": 1, +"max_tokens": 32768 +}' +``` + +- 解决办法: + +```bash +pip install Pydantic=1.10.13 +``` + +### 6. 如何部署 sglang? + +```bash +# 1. 激活 Conda 环境, 并激活 Python 3.10 的 Conda 环境。假设你的环境名为 `myenv`: +conda activate myenv + +# 2. 在激活的环境中,安装 sglang[all] 和 flashinfer +pip install sglang[all]==0.3.0 +pip install flashinfer -i https://flashinfer.ai/whl/cu121/torch2.4/ + +# 3. 启动服务器 +python -m sglang.launch_server --served-model-name Qwen2.5-32B --model-path Qwen2.5-32B-Instruct-AWQ --host 0.0.0.0 --port 8001 --api-key sk-12345 --mem-fraction-static 0.5 --tp 8 +``` + +- 验证安装 + + ```bash + pip show sglang + pip show flashinfer + ``` + +- 注意: + + 1. API Key:请确保 `--api-key` 参数中的 API 密钥是正确的 + 2. 模型路径: 确保 `--model-path` 参数中的路径是正确的,并且模型文件存在于该路径下。 + 3. CUDA 版本:确保你的系统上安装了 CUDA 12.1 和 PyTorch 2.4,因为 `flashinfer` 包依赖于这些特定版本。 + 4. 线程池大小:根据你的GPU资源和预期负载调整线程池大小。如果你有 8 个 GPU,那么可以选择 --tp 8 来充分利用这些资源。 + +### 7. 如何 curl embedding? + +```bash +curl -k -X POST http://$IP:8001/embedding \ + -H "Content-Type: application/json" \ + -d '{"texts": ["sample text 1", "sample text 2"]}' +# $IP为vectorize的Embedding的内网地址 +``` + +### 8. 如何生成证书? + +```bash +下载地址: https://github.com/FiloSottile/mkcert/releases +# 1. 下载 mkcert +# x86_64 +wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64 +# arm64 +wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-arm64 +# 2. 执行下面的命令生成秘钥 +mkcert -install +# mkcert 可直接接域名或 IP, 生成证书和秘钥 +mkcert example.com +# 3. 将证书和秘钥拷贝到 `/home/euler-copilot-framework_openeuler/deploy/chart_ssl/traefik-secret.yaml` 中, 并执行下面命令使其生效。 +kubectl apply -f traefik-secret.yaml +``` + +### 8. Pod状态由runnning变为pending? + +在Pod正常运行一段时间后,其状态从“Running”全部转变为 “Pending” 或 “Completed”, +可执行命令`df -h`,查看Pod所在宿主机的存储空间,确保可用空间不低于30%,以保证pod的正常运行。 diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/WEB\347\225\214\351\235\242.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/WEB\347\225\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..bb9be4e33ce470865fe5a07decbc056b9ee4e9bb Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/WEB\347\225\214\351\235\242.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/WEB\347\231\273\345\275\225\347\225\214\351\235\242.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/WEB\347\231\273\345\275\225\347\225\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..fddbab4df70b940d5d5ed26fb8ec688f1592b5e8 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/WEB\347\231\273\345\275\225\347\225\214\351\235\242.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/authhub\347\231\273\345\275\225\347\225\214\351\235\242.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/authhub\347\231\273\345\275\225\347\225\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..341828b1b6f728888d1dd52eec755033680155da Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/authhub\347\231\273\345\275\225\347\225\214\351\235\242.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\345\210\233\345\273\272\345\272\224\347\224\250\346\210\220\345\212\237\347\225\214\351\235\242.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\345\210\233\345\273\272\345\272\224\347\224\250\346\210\220\345\212\237\347\225\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..a871907f348317e43633cf05f5241cb978476fb4 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\345\210\233\345\273\272\345\272\224\347\224\250\346\210\220\345\212\237\347\225\214\351\235\242.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\345\210\233\345\273\272\345\272\224\347\224\250\347\225\214\351\235\242.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\345\210\233\345\273\272\345\272\224\347\224\250\347\225\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..d82c736a94b106a30fd8d1f7b781f9e335bb441f Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\345\210\233\345\273\272\345\272\224\347\224\250\347\225\214\351\235\242.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/k8s\351\233\206\347\276\244\344\270\255postgres\346\234\215\345\212\241\347\232\204\345\220\215\347\247\260.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/k8s\351\233\206\347\276\244\344\270\255postgres\346\234\215\345\212\241\347\232\204\345\220\215\347\247\260.png" new file mode 100644 index 0000000000000000000000000000000000000000..473a0006c9710c92375e226a760c3a79989312f9 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/k8s\351\233\206\347\276\244\344\270\255postgres\346\234\215\345\212\241\347\232\204\345\220\215\347\247\260.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/postgres\346\234\215\345\212\241\347\253\257\345\217\243.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/postgres\346\234\215\345\212\241\347\253\257\345\217\243.png" new file mode 100644 index 0000000000000000000000000000000000000000..cfee6d88da56bc939886caece540f7de8cf77bbc Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/postgres\346\234\215\345\212\241\347\253\257\345\217\243.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/rag_port.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/rag_port.png" new file mode 100644 index 0000000000000000000000000000000000000000..b1d93f9c9d7587aa88a27d7e0bf185586583d438 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/rag_port.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/rag\351\205\215\347\275\256\344\277\241\346\201\257\346\210\220\345\212\237.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/rag\351\205\215\347\275\256\344\277\241\346\201\257\346\210\220\345\212\237.png" new file mode 100644 index 0000000000000000000000000000000000000000..fec3cdaa2b260e50f5523477da3e58a9e14e2130 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/rag\351\205\215\347\275\256\344\277\241\346\201\257\346\210\220\345\212\237.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\210\233\345\273\272\350\265\204\344\272\247\345\272\223\345\244\261\350\264\245\347\224\261\344\272\216\347\273\237\344\270\200\350\265\204\344\272\247\344\270\213\345\255\230\345\234\250\345\220\214\345\220\215\350\265\204\344\272\247\345\272\223.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\210\233\345\273\272\350\265\204\344\272\247\345\272\223\345\244\261\350\264\245\347\224\261\344\272\216\347\273\237\344\270\200\350\265\204\344\272\247\344\270\213\345\255\230\345\234\250\345\220\214\345\220\215\350\265\204\344\272\247\345\272\223.png" new file mode 100644 index 0000000000000000000000000000000000000000..624459821de4542b635eeffa115eeba780929a4e Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\210\233\345\273\272\350\265\204\344\272\247\345\272\223\345\244\261\350\264\245\347\224\261\344\272\216\347\273\237\344\270\200\350\265\204\344\272\247\344\270\213\345\255\230\345\234\250\345\220\214\345\220\215\350\265\204\344\272\247\345\272\223.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\210\233\345\273\272\350\265\204\344\272\247\346\210\220\345\212\237.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\210\233\345\273\272\350\265\204\344\272\247\346\210\220\345\212\237.png" new file mode 100644 index 0000000000000000000000000000000000000000..3104717bfa8f6615ad6726577a24938bc29884b2 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\210\233\345\273\272\350\265\204\344\272\247\346\210\220\345\212\237.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\210\240\351\231\244\344\270\215\345\255\230\345\234\250\347\232\204\350\265\204\344\272\247\345\244\261\350\264\245.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\210\240\351\231\244\344\270\215\345\255\230\345\234\250\347\232\204\350\265\204\344\272\247\345\244\261\350\264\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..454b9fdfa4b7f209dc370f78677a2f4e71ea49be Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\210\240\351\231\244\344\270\215\345\255\230\345\234\250\347\232\204\350\265\204\344\272\247\345\244\261\350\264\245.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\210\240\351\231\244\350\257\255\346\226\231.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\210\240\351\231\244\350\257\255\346\226\231.png" new file mode 100644 index 0000000000000000000000000000000000000000..d52d25d4778f6db2d2ec076d65018c40cd1da4d3 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\210\240\351\231\244\350\257\255\346\226\231.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\210\240\351\231\244\350\265\204\344\272\247\345\272\223\345\244\261\350\264\245\357\274\214\350\265\204\344\272\247\344\270\213\344\270\215\345\255\230\345\234\250\345\257\271\345\272\224\350\265\204\344\272\247\345\272\223.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\210\240\351\231\244\350\265\204\344\272\247\345\272\223\345\244\261\350\264\245\357\274\214\350\265\204\344\272\247\344\270\213\344\270\215\345\255\230\345\234\250\345\257\271\345\272\224\350\265\204\344\272\247\345\272\223.png" new file mode 100644 index 0000000000000000000000000000000000000000..82ed79c0154bd8e406621440c4e4a7caaab7e06e Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\210\240\351\231\244\350\265\204\344\272\247\345\272\223\345\244\261\350\264\245\357\274\214\350\265\204\344\272\247\344\270\213\344\270\215\345\255\230\345\234\250\345\257\271\345\272\224\350\265\204\344\272\247\345\272\223.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\210\240\351\231\244\350\265\204\344\272\247\346\210\220\345\212\237.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\210\240\351\231\244\350\265\204\344\272\247\346\210\220\345\212\237.png" new file mode 100644 index 0000000000000000000000000000000000000000..7dd2dea945f39ada1d7dd053d150a995b160f203 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\210\240\351\231\244\350\265\204\344\272\247\346\210\220\345\212\237.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\273\272\347\253\213\350\265\204\344\272\247\345\272\223.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\273\272\347\253\213\350\265\204\344\272\247\345\272\223.png" new file mode 100644 index 0000000000000000000000000000000000000000..84737b4185ce781d7b32ab42d39b8d2452138dad Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\345\273\272\347\253\213\350\265\204\344\272\247\345\272\223.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\214\207\345\256\232\344\270\215\345\255\230\345\234\250\347\232\204\350\265\204\344\272\247\345\210\233\345\273\272\350\265\204\344\272\247\345\272\223\345\244\261\350\264\245.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\214\207\345\256\232\344\270\215\345\255\230\345\234\250\347\232\204\350\265\204\344\272\247\345\210\233\345\273\272\350\265\204\344\272\247\345\272\223\345\244\261\350\264\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..be89bdfde2518bba3941eee5d475f52ad9124343 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\214\207\345\256\232\344\270\215\345\255\230\345\234\250\347\232\204\350\265\204\344\272\247\345\210\233\345\273\272\350\265\204\344\272\247\345\272\223\345\244\261\350\264\245.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\225\260\346\215\256\345\272\223\345\210\235\345\247\213\345\214\226.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\225\260\346\215\256\345\272\223\345\210\235\345\247\213\345\214\226.png" new file mode 100644 index 0000000000000000000000000000000000000000..27530840aaa5382a226e1ed8baea883895d9d75e Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\225\260\346\215\256\345\272\223\345\210\235\345\247\213\345\214\226.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\225\260\346\215\256\345\272\223\351\205\215\347\275\256\344\277\241\346\201\257\346\210\220\345\212\237.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\225\260\346\215\256\345\272\223\351\205\215\347\275\256\344\277\241\346\201\257\346\210\220\345\212\237.png" new file mode 100644 index 0000000000000000000000000000000000000000..aa04e6f7f0648adfca1240c750ca5b79b88da5f9 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\225\260\346\215\256\345\272\223\351\205\215\347\275\256\344\277\241\346\201\257\346\210\220\345\212\237.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\227\240\350\265\204\344\272\247\346\227\266\346\237\245\350\257\242\350\265\204\344\272\247.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\227\240\350\265\204\344\272\247\346\227\266\346\237\245\350\257\242\350\265\204\344\272\247.png" new file mode 100644 index 0000000000000000000000000000000000000000..74905172c0c0a0acc4c4d0e35efd2493dc421c4e Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\227\240\350\265\204\344\272\247\346\227\266\346\237\245\350\257\242\350\265\204\344\272\247.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\237\245\347\234\213\346\226\207\346\241\243\344\272\247\347\224\237\347\211\207\346\256\265\346\200\273\346\225\260\345\222\214\344\270\212\344\274\240\346\210\220\345\212\237\346\200\273\346\225\260.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\237\245\347\234\213\346\226\207\346\241\243\344\272\247\347\224\237\347\211\207\346\256\265\346\200\273\346\225\260\345\222\214\344\270\212\344\274\240\346\210\220\345\212\237\346\200\273\346\225\260.png" new file mode 100644 index 0000000000000000000000000000000000000000..432fbfcd02f6d2220e7d2a8512aee893d67be24d Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\237\245\347\234\213\346\226\207\346\241\243\344\272\247\347\224\237\347\211\207\346\256\265\346\200\273\346\225\260\345\222\214\344\270\212\344\274\240\346\210\220\345\212\237\346\200\273\346\225\260.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\237\245\350\257\242\345\205\250\351\203\250\350\257\255\346\226\231.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\237\245\350\257\242\345\205\250\351\203\250\350\257\255\346\226\231.png" new file mode 100644 index 0000000000000000000000000000000000000000..a4f4ea8a3999a9ab659ccd9ea39b80b21ff46e84 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\237\245\350\257\242\345\205\250\351\203\250\350\257\255\346\226\231.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\237\245\350\257\242\350\265\204\344\272\247.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\237\245\350\257\242\350\265\204\344\272\247.png" new file mode 100644 index 0000000000000000000000000000000000000000..675b40297363664007f96948fb21b1cb90d6beea Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\346\237\245\350\257\242\350\265\204\344\272\247.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\216\267\345\217\226\346\225\260\346\215\256\345\272\223pod\345\220\215\347\247\260.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\216\267\345\217\226\346\225\260\346\215\256\345\272\223pod\345\220\215\347\247\260.png" new file mode 100644 index 0000000000000000000000000000000000000000..8fc0c988e8b3830c550c6be6e42b88ac13448d1a Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\216\267\345\217\226\346\225\260\346\215\256\345\272\223pod\345\220\215\347\247\260.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\257\255\346\226\231\344\270\212\344\274\240\346\210\220\345\212\237.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\257\255\346\226\231\344\270\212\344\274\240\346\210\220\345\212\237.png" new file mode 100644 index 0000000000000000000000000000000000000000..5c897e9883e868bf5160d92cb106ea4e4e9bc356 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\257\255\346\226\231\344\270\212\344\274\240\346\210\220\345\212\237.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\257\255\346\226\231\345\210\240\351\231\244\345\244\261\350\264\245\357\274\214\346\234\252\346\237\245\350\257\242\345\210\260\347\233\270\345\205\263\350\257\255\346\226\231.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\257\255\346\226\231\345\210\240\351\231\244\345\244\261\350\264\245\357\274\214\346\234\252\346\237\245\350\257\242\345\210\260\347\233\270\345\205\263\350\257\255\346\226\231.png" new file mode 100644 index 0000000000000000000000000000000000000000..407e49b929b7ff4cf14703046a4ba0bfe1bb441e Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\257\255\346\226\231\345\210\240\351\231\244\345\244\261\350\264\245\357\274\214\346\234\252\346\237\245\350\257\242\345\210\260\347\233\270\345\205\263\350\257\255\346\226\231.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\257\255\346\226\231\346\237\245\350\257\242\346\210\220\345\212\237.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\257\255\346\226\231\346\237\245\350\257\242\346\210\220\345\212\237.png" new file mode 100644 index 0000000000000000000000000000000000000000..a4f4ea8a3999a9ab659ccd9ea39b80b21ff46e84 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\257\255\346\226\231\346\237\245\350\257\242\346\210\220\345\212\237.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\265\204\344\272\247\344\270\213\346\234\252\346\237\245\350\257\242\345\210\260\350\265\204\344\272\247\345\272\223.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\265\204\344\272\247\344\270\213\346\234\252\346\237\245\350\257\242\345\210\260\350\265\204\344\272\247\345\272\223.png" new file mode 100644 index 0000000000000000000000000000000000000000..45ab521ec5f5afbd81ad54f023aae3b7a867dbf2 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\265\204\344\272\247\344\270\213\346\234\252\346\237\245\350\257\242\345\210\260\350\265\204\344\272\247\345\272\223.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\265\204\344\272\247\344\270\213\346\237\245\350\257\242\350\265\204\344\272\247\345\272\223\346\210\220\345\212\237.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\265\204\344\272\247\344\270\213\346\237\245\350\257\242\350\265\204\344\272\247\345\272\223\346\210\220\345\212\237.png" new file mode 100644 index 0000000000000000000000000000000000000000..90ed5624ae93ff9784a750514c53293df4e961f0 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\265\204\344\272\247\344\270\213\346\237\245\350\257\242\350\265\204\344\272\247\345\272\223\346\210\220\345\212\237.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\265\204\344\272\247\345\272\223\345\210\233\345\273\272\346\210\220\345\212\237.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\265\204\344\272\247\345\272\223\345\210\233\345\273\272\346\210\220\345\212\237.png" new file mode 100644 index 0000000000000000000000000000000000000000..7b2cc38a931c9c236517c14c86fa93e3eb2b6dcd Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\265\204\344\272\247\345\272\223\345\210\233\345\273\272\346\210\220\345\212\237.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\265\204\344\272\247\345\272\223\345\210\240\351\231\244\345\244\261\350\264\245\357\274\214\344\270\215\345\255\230\345\234\250\350\265\204\344\272\247.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\265\204\344\272\247\345\272\223\345\210\240\351\231\244\345\244\261\350\264\245\357\274\214\344\270\215\345\255\230\345\234\250\350\265\204\344\272\247.png" new file mode 100644 index 0000000000000000000000000000000000000000..1365a8d69467dec250d3451ac63e2615a2194c18 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\265\204\344\272\247\345\272\223\345\210\240\351\231\244\345\244\261\350\264\245\357\274\214\344\270\215\345\255\230\345\234\250\350\265\204\344\272\247.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\265\204\344\272\247\345\272\223\345\210\240\351\231\244\346\210\220\345\212\237png.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\265\204\344\272\247\345\272\223\345\210\240\351\231\244\346\210\220\345\212\237png.png" new file mode 100644 index 0000000000000000000000000000000000000000..1bd944264baa9369e6f8fbfd04cabcd12730c0e9 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\265\204\344\272\247\345\272\223\345\210\240\351\231\244\346\210\220\345\212\237png.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\265\204\344\272\247\345\272\223\346\237\245\350\257\242\345\244\261\350\264\245\357\274\214\344\270\215\345\255\230\345\234\250\350\265\204\344\272\247.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\265\204\344\272\247\345\272\223\346\237\245\350\257\242\345\244\261\350\264\245\357\274\214\344\270\215\345\255\230\345\234\250\350\265\204\344\272\247.png" new file mode 100644 index 0000000000000000000000000000000000000000..58bcd320e145dd29d9e5d49cb6d86964ebb83b51 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\350\265\204\344\272\247\345\272\223\346\237\245\350\257\242\345\244\261\350\264\245\357\274\214\344\270\215\345\255\230\345\234\250\350\265\204\344\272\247.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\351\205\215\347\275\256\346\230\240\345\260\204\344\270\255\351\227\264\345\261\202.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\351\205\215\347\275\256\346\230\240\345\260\204\344\270\255\351\227\264\345\261\202.png" new file mode 100644 index 0000000000000000000000000000000000000000..809b785b999b6663d9e9bd41fed953925093d6bd Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\351\205\215\347\275\256\346\230\240\345\260\204\344\270\255\351\227\264\345\261\202.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\351\205\215\347\275\256\346\230\240\345\260\204\346\272\220\347\233\256\345\275\225.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\351\205\215\347\275\256\346\230\240\345\260\204\346\272\220\347\233\256\345\275\225.png" new file mode 100644 index 0000000000000000000000000000000000000000..62ba5f6615f18deb3d5a71fd68ee8c929638d814 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\351\205\215\347\275\256\346\230\240\345\260\204\346\272\220\347\233\256\345\275\225.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\351\205\215\347\275\256\346\230\240\345\260\204\347\233\256\346\240\207\347\233\256\345\275\225.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\351\205\215\347\275\256\346\230\240\345\260\204\347\233\256\346\240\207\347\233\256\345\275\225.png" new file mode 100644 index 0000000000000000000000000000000000000000..d32c672fafcb0ef665bda0bcfdce19d2df44db01 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\351\205\215\347\275\256\346\230\240\345\260\204\347\233\256\346\240\207\347\233\256\345\275\225.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\351\207\215\345\244\215\345\210\233\345\273\272\350\265\204\344\272\247\345\244\261\350\264\245.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\351\207\215\345\244\215\345\210\233\345\273\272\350\265\204\344\272\247\345\244\261\350\264\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..a5ecd6b65abc97320e7467f00d82ff1fd9bf0e44 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\346\234\254\345\234\260\350\265\204\344\272\247\345\272\223\346\236\204\345\273\272/\351\207\215\345\244\215\345\210\233\345\273\272\350\265\204\344\272\247\345\244\261\350\264\245.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\351\203\250\347\275\262\350\247\206\345\233\276.png" "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\351\203\250\347\275\262\350\247\206\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..181bf1d2ddbe15cfd296c27df27d865bdbce8d69 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/deployment_guide/pictures/\351\203\250\347\275\262\350\247\206\345\233\276.png" differ diff --git a/docs/zh/tools/ai/euler_copilot/deployment_guide/plugin_deployment_guide/ai_container/_toc.yaml b/docs/zh/tools/ai/euler_copilot/deployment_guide/plugin_deployment_guide/ai_container/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c26d7482b45cd01f097adc8317d3c69d1b14bc20 --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/deployment_guide/plugin_deployment_guide/ai_container/_toc.yaml @@ -0,0 +1,7 @@ +label: 部署指南 +isManual: true +description: +sections: + - label: AI容器栈部署指南 + href: ./ai_container_stack_deployment_guide.md + diff --git a/docs/zh/tools/ai/euler_copilot/deployment_guide/plugin_deployment_guide/ai_container/ai_container_stack_deployment_guide.md b/docs/zh/tools/ai/euler_copilot/deployment_guide/plugin_deployment_guide/ai_container/ai_container_stack_deployment_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..a1464bd68004ca16005ce813ddb72319276bb7b1 --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/deployment_guide/plugin_deployment_guide/ai_container/ai_container_stack_deployment_guide.md @@ -0,0 +1,35 @@ +# AI容器栈部署指南 + +## 准备工作 + ++ 提前安装 [openEuler Copilot System 命令行(智能 Shell)客户端](../../../usage_guide/cli_client/cli_assistant_user_guide.md) + ++ 修改 /xxxx/xxxx/values.yaml 文件的 `euler-copilot-tune` 部分,将 `enable` 字段改为 `True` + +```yaml +enable: True +``` + ++ 更新环境 + +```bash +helm upgrade euler-copilot . +``` + ++ 检查 Compatibility-AI-Infra 目录下的 openapi.yaml 中 `servers.url` 字段,确保AI容器服务的启动地址被正确设置 + ++ 获取 `$plugin_dir` 插件文件夹的路径,该变量位于 deploy/chart/euler_copilot/values.yaml 中的 `framework` 模块 + ++ 如果插件目录不存在,需新建该目录 + ++ 将该目录下的 Compatibility-AI-Infra 文件夹放到 `$plugin_dir` 中 + +```bash +cp -r ./Compatibility-AI-Infra $PLUGIN_DIR +``` + ++ 重建 framework pod,重载插件配置 + +```bash +kubectl delete pod framework-xxxx -n 命名空间 +``` diff --git a/docs/zh/tools/ai/euler_copilot/deployment_guide/plugin_deployment_guide/intelligent_diagnosis/_toc.yaml b/docs/zh/tools/ai/euler_copilot/deployment_guide/plugin_deployment_guide/intelligent_diagnosis/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..7348a8a25bcc005306c2855e9e590765ff76288f --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/deployment_guide/plugin_deployment_guide/intelligent_diagnosis/_toc.yaml @@ -0,0 +1,7 @@ +label: 部署指南 +isManual: true +description: +sections: + - label: 智能诊断部署指南 + href: ./intelligent_diagnosis_deployment_guide.md + diff --git a/docs/zh/tools/ai/euler_copilot/deployment_guide/plugin_deployment_guide/intelligent_diagnosis/intelligent_diagnosis_deployment_guide.md b/docs/zh/tools/ai/euler_copilot/deployment_guide/plugin_deployment_guide/intelligent_diagnosis/intelligent_diagnosis_deployment_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..00bf65c304861762f090a2253e793684ebd209e7 --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/deployment_guide/plugin_deployment_guide/intelligent_diagnosis/intelligent_diagnosis_deployment_guide.md @@ -0,0 +1,189 @@ +# 智能诊断部署指南 + +## 准备工作 + ++ 提前安装 [openEuler Copilot System 命令行(智能 Shell)客户端](../../../usage_guide/cli_client/cli_assistant_user_guide.md) + ++ 被诊断机器不能安装 crictl 和 isula,只能有 docker 一个容器管理工具 + ++ 在需要被诊断的机器上安装 gala-gopher 和 gala-anteater + +## 部署 gala-gopher + +### 1. 准备 BTF 文件 + +**如果Linux内核支持 BTF,则不需要准备 BTF 文件。**可以通过以下命令来查看Linux内核是否已经支持 BTF: + +```bash +cat /boot/config-$(uname -r) | grep CONFIG_DEBUG_INFO_BTF +``` + +如果输出结果为`CONFIG_DEBUG_INFO_BTF=y`,则表示内核支持BTF。否则表示内核不支持BTF。 +如果内核不支持BTF,需要手动制作BTF文件。步骤如下: + +1. 获取当前Linux内核版本的 vmlinux 文件 + + vmlinux 文件存放在 `kernel-debuginfo` 包里面,存放路径为 `/usr/lib/debug/lib/modules/$(uname -r)/vmlinux`。 + + 例如,对于 `kernel-debuginfo-5.10.0-136.65.0.145.oe2203sp1.aarch64`,对应的vmlinux路径为`/usr/lib/debug/lib/modules/5.10.0-136.65.0.145.oe2203sp1.aarch64/vmlinux`。 + +2. 制作 BTF 文件 + + 基于获取到 vmlinux 文件来制作 BTF 文件。这一步可以在自己的环境里操作。首先,需要安装相关的依赖包: + + ```bash + # 说明:dwarves 包中包含 pahole 命令,llvm 包中包含 llvm-objcopy 命令 + yum install -y llvm dwarves + ``` + + 执行下面的命令行,生成 BTF 文件。 + + ```bash + kernel_version=4.19.90-2112.8.0.0131.oe1.aarch64 # 说明:这里需要替换成目标内核版本,可通过 uname -r 命令获取 + pahole -J vmlinux + llvm-objcopy --only-section=.BTF --set-section-flags .BTF=alloc,readonly --strip-all vmlinux ${kernel_version}.btf + strip -x ${kernel_version}.btf + ``` + + 生成的 BTF 文件名称为`.btf`格式,其中 ``为目标机器的内核版本,可通过 `uname -r` 命令获取。 + +### 2. 下载 gala-gopher 容器镜像 + +#### 在线下载 + +gala-gopher 容器镜像已归档到 仓库中,可通过如下命令获取。 + +```bash +# 获取 aarch64 架构的镜像 +docker pull hub.oepkgs.net/a-ops/gala-gopher-profiling-aarch64:latest +# 获取 x86_64 架构的镜像 +docker pull hub.oepkgs.net/a-ops/gala-gopher-profiling-x86_64:latest +``` + +#### 离线下载 + +若无法通过在线下载的方式下载容器镜像,可联系我(何秀军 00465007)获取压缩包。 + +拿到压缩包后,放到目标机器上,解压并加载容器镜像,命令行如下: + +```bash +tar -zxvf gala-gopher-profiling-aarch64.tar.gz +docker load < gala-gopher-profiling-aarch64.tar +``` + +### 3. 启动 gala-gopher 容器 + +容器启动命令: + +```shell +docker run -d --name gala-gopher-profiling --privileged --pid=host --network=host -v /:/host -v /etc/localtime:/etc/localtime:ro -v /sys:/sys -v /usr/lib/debug:/usr/lib/debug -v /var/lib/docker:/var/lib/docker -v /tmp/$(uname -r).btf:/opt/gala-gopher/btf/$(uname -r).btf -e GOPHER_HOST_PATH=/host gala-gopher-profiling-aarch64:latest +``` + +启动配置参数说明: + ++ `-v /tmp/$(uname -r).btf:/opt/gala-gopher/btf/$(uname -r).btf` :如果内核支持 BTF,则删除该配置即可。如果内核不支持 BTF,则需要将前面准备好的 BTF 文件拷贝到目标机器上,并将 `/tmp/$(uname -r).btf` 替换为对应的路径。 ++ `gala-gopher-profiling-aarch64-0426` :gala-gopher容器对应的tag,替换成实际下载的tag。 + +探针启动: + ++ `container_id` 为需要观测的容器 id ++ 分别启动 sli 和 container 探针 + +```bash +curl -X PUT http://localhost:9999/sli -d json='{"cmd":{"check_cmd":""},"snoopers":{"container_id":[""]},"params":{"report_period":5},"state":"running"}' +``` + +```bash +curl -X PUT http://localhost:9999/container -d json='{"cmd":{"check_cmd":""},"snoopers":{"container_id":[""]},"params":{"report_period":5},"state":"running"}' +``` + +探针关闭 + +```bash +curl -X PUT http://localhost:9999/sli -d json='{"state": "stopped"}' +``` + +```bash +curl -X PUT http://localhost:9999/container -d json='{"state": "stopped"}' +``` + +## 部署 gala-anteater + +源码部署: + +```bash +# 请指定分支为 930eulercopilot +git clone https://gitee.com/GS-Stephen_Curry/gala-anteater.git +``` + +安装部署请参考 +(请留意python版本导致执行setup.sh install报错) + +镜像部署: + +```bash +docker pull hub.oepkgs.net/a-ops/gala-anteater:2.0.2 +``` + +`/etc/gala-anteater/config/gala-anteater.yaml` 中 Kafka 和 Prometheus 的 `server` 和 `port` 需要按照实际部署修改,`model_topic`、`meta_topic`、`group_id` 自定义 + +```yaml +Kafka: + server: "xxxx" + port: "xxxx" + model_topic: "xxxx" # 自定义,与rca配置中保持一致 + meta_topic: "xxxx" # 自定义,与rca配置中保持一致 + group_id: "xxxx" # 自定义,与rca配置中保持一致 + # auth_type: plaintext/sasl_plaintext, please set "" for no auth + auth_type: "" + username: "" + password: "" + +Prometheus: + server: "xxxx" + port: "xxxx" + steps: "5" +``` + +gala-anteater 中模型的训练依赖于 gala-gopher 采集的数据,因此请保证 gala-gopher 探针正常运行至少24小时,在运行 gala-anteater。 + +## 部署 gala-ops + +每个中间件的大致介绍: + +kafka : 一个数据库中间件, 分布式数据分流作用, 可以配置为当前的管理节点。 + +prometheus:性能监控, 配置需要监控的生产节点 ip list。 + +直接通过yum install安装kafka和prometheus,可参照安装脚本 + +只需要参照其中 kafka 和 prometheus 的安装即可 + +## 部署 euler-copilot-rca + +镜像拉取 + +```bash +docker pull hub.oepkgs.net/a-ops/euler-copilot-rca:0.9.1 +``` + ++ 修改 `config/config.json` 文件,配置 gala-gopher 镜像的 `container_id` 以及 `ip`,Kafka 和 Prometheus 的 `ip` 和 `port`(与上述 gala-anteater 配置保持一致) + +```yaml +"gopher_container_id": "xxxx", # gala-gopher的容器id + "remote_host": "xxxx" # gala-gopher的部署机器ip + }, + "kafka": { + "server": "xxxx", + "port": "xxxx", + "storage_topic": "usad_intermediate_results", + "anteater_result_topic": "xxxx", + "rca_result_topic": "xxxx", + "meta_topic": "xxxx" + }, + "prometheus": { + "server": "xxxx", + "port": "xxxx", + "steps": 5 + }, +``` diff --git a/docs/zh/tools/ai/euler_copilot/deployment_guide/plugin_deployment_guide/intelligent_tune/_toc.yaml b/docs/zh/tools/ai/euler_copilot/deployment_guide/plugin_deployment_guide/intelligent_tune/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8b65a0aa77dcbdf0a062c6ebb64b86b822c7c58f --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/deployment_guide/plugin_deployment_guide/intelligent_tune/_toc.yaml @@ -0,0 +1,7 @@ +label: 部署指南 +isManual: true +description: +sections: + - label: 智能调优部署指南 + href: ./intelligent_tune_deployment_guide.md + diff --git a/docs/zh/tools/ai/euler_copilot/deployment_guide/plugin_deployment_guide/intelligent_tune/intelligent_tune_deployment_guide.md b/docs/zh/tools/ai/euler_copilot/deployment_guide/plugin_deployment_guide/intelligent_tune/intelligent_tune_deployment_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..062d05da319bc60d756de7de4893341fa87935a2 --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/deployment_guide/plugin_deployment_guide/intelligent_tune/intelligent_tune_deployment_guide.md @@ -0,0 +1,131 @@ +# 智能调优部署指南 + +## 准备工作 + ++ 提前安装 [openEuler Copilot System 命令行(智能 Shell)客户端](../../../usage_guide/cli_client/cli_assistant_user_guide.md) + ++ 被调优机器需要为 openEuler 22.03 LTS-SP3 + ++ 在需要被调优的机器上安装依赖 + +```bash +yum install -y sysstat perf +``` + ++ 被调优机器需要开启 SSH 22端口 + +## 编辑配置文件 + +修改values.yaml文件的tune部分,将 `enable` 字段改为 `True` ,并配置大模型设置、 +Embedding模型文件地址、以及需要调优的机器和对应机器上的 mysql 的账号名以及密码 + +```bash +vim /home/euler-copilot-framework/deploy/chart/agents/values.yaml +``` + +```yaml +tune: + # 【必填】是否启用智能调优Agent + enabled: true + # 镜像设置 + image: + # 镜像仓库。留空则使用全局设置。 + registry: "" + # 【必填】镜像名称 + name: euler-copilot-tune + # 【必填】镜像标签 + tag: "0.9.1" + # 拉取策略。留空则使用全局设置。 + imagePullPolicy: "" + # 【必填】容器根目录只读 + readOnly: false + # 性能限制设置 + resources: {} + # Service设置 + service: + # 【必填】Service类型,ClusterIP或NodePort + type: ClusterIP + nodePort: + # 大模型设置 + llm: + # 【必填】模型地址(需要包含v1后缀) + url: + # 【必填】模型名称 + name: "" + # 【必填】模型API Key + key: "" + # 【必填】模型最大Token数 + max_tokens: 8096 + # 【必填】Embedding模型文件地址 + embedding: "" + # 待优化机器信息 + machine: + # 【必填】IP地址 + ip: "" + # 【必填】Root用户密码 + # 注意:必需启用Root用户以密码形式SSH登录 + password: "" + # 待优化应用设置 + mysql: + # 【必填】数据库用户名 + user: "root" + # 【必填】数据库密码 + password: "" +``` + +## 安装智能调优插件 + +```bash +helm install -n euler-copilot agents . +``` + +如果之前有执行过安装,则按下面指令更新插件服务 + +```bash +helm upgrade-n euler-copilot agents . +``` + +如果 framework未重启,则需要重启framework配置 + +```bash +kubectl delete pod framework-deploy-service-bb5b58678-jxzqr -n eulercopilot +``` + +## 测试 + ++ 查看 tune 的 pod 状态 + + ```bash + NAME READY STATUS RESTARTS AGE + authhub-backend-deploy-authhub-64896f5cdc-m497f 2/2 Running 0 16d + authhub-web-deploy-authhub-7c48695966-h8d2p 1/1 Running 0 17d + pgsql-deploy-databases-86b4dc4899-ppltc 1/1 Running 0 17d + redis-deploy-databases-f8866b56-kj9jz 1/1 Running 0 17d + mysql-deploy-databases-57f5f94ccf-sbhzp 2/2 Running 0 17d + framework-deploy-service-bb5b58678-jxzqr 2/2 Running 0 16d + rag-deploy-service-5b7887644c-sm58z 2/2 Running 0 110m + vectorize-deploy-service-57f5f94ccf-sbhzp 2/2 Running 0 17d + web-deploy-service-74fbf7999f-r46rg 1/1 Running 0 2d + tune-deploy-agents-5d46bfdbd4-xph7b 1/1 Running 0 2d + ``` + ++ pod启动失败排查办法 + + 检查 euler-copilot-tune 目录下的 openapi.yaml 中 `servers.url` 字段,确保调优服务的启动地址被正确设置 + + 检查 `$plugin_dir` 插件文件夹的路径是否配置正确,该变量位于 `deploy/chart/euler_copilot/values.yaml` 中的 `framework`模块,如果插件目录不存在,需新建该目录,并需要将该目录下的 euler-copilot-tune 文件夹放到 `$plugin_dir` 中。 + + 检查sglang的地址和key填写是否正确,该变量位于 `vim /home/euler-copilot-framework/deploy/chart/euler_copilot/values.yaml` + + ```yaml + # 用于Function Call的模型 + scheduler: + # 推理框架类型 + backend: sglang + # 模型地址 + url: "" + # 模型 API Key + key: "" + # 数据库设置 + ``` + ++ 命令行客户端使用智能调优 + + 具体使用可参考 [openEuler Copilot System 命令行(智能插件:智能调优)](../../../usage_guide/cli_client/tune.md) diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/_toc.yaml b/docs/zh/tools/ai/euler_copilot/usage_guide/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9f63b6bc6a4ddbf9c9d96ae7a6d9585a122770c9 --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/usage_guide/_toc.yaml @@ -0,0 +1,16 @@ +label: 使用指南 +isManual: true +description: +sections: + - label: 管理员:知识库管理 + href: ./usage_guide/knowledge_base_managenment//witchaind_guidance.md + - label: Web 端使用手册 + href: ./usage_guide/online_services/preface.md + href: ./usage_guide/online_services/registration_and_login.md + href: ./usage_guide/online_services/itelligent_plugin.md + href: ./usage_guide/online_services/qa_guide.md + - label: 智能 Shell 使用手册 + href: ./usage_guide/cli_client/cli_assiatant_user_guide.md + href: ./usage_guide/cli_client/obtaining_api_key.md + href: ./usage_guide/cli_client/tune.md + href: ./usage_guide/cli_client/diagnosis.md diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/_toc.yaml b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b6acca203118cf4d38e45546b9e90b988bfd4437 --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/_toc.yaml @@ -0,0 +1,12 @@ +label: 使用指南-命令行客户端 +isManual: true +description: +sections: + - label: 获取API KEY + href: ./obtaining_api_key.md + - label: 命令行助手指南 + href: ./cli_assistant_user_guide.md + - label: 智能诊断 + href: ./diagnosis.md + - label: 智能插件介绍 + href: ./tune.md diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/cli_assistant_user_guide.md b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/cli_assistant_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..d965d51e293c8304710c0469f1da4b605db7b32e --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/cli_assistant_user_guide.md @@ -0,0 +1,169 @@ +# 命令行助手使用指南 + +## 简介 + +openEuler Copilot System 命令行助手是一个命令行(Shell)AI 助手,您可以通过它来快速生成 Shell 命令并执行,从而提高您的工作效率。除此之外,基于 Gitee AI 在线服务的标准版本还内置了 openEuler 的相关知识,可以助力您学习与使用 openEuler 操作系统。 + +## 环境要求 + +- 操作系统:openEuler 22.03 LTS SP3,或者 openEuler 24.03 LTS 及以上版本 +- 命令行软件: + - Linux 桌面环境:支持 GNOME、KDE、DDE 等桌面环境的内置终端 + - 远程 SSH 链接:支持兼容 xterm-256 与 UTF-8 字符集的终端 + +## 安装 + +openEuler Copilot System 命令行助手支持通过 OEPKGS 仓库进行安装。 + +### 配置 OEPKGS 仓库 + +```bash +sudo dnf config-manager --add-repo https://repo.oepkgs.net/openeuler/rpm/`sed 's/release //;s/[()]//g;s/ /-/g' /etc/openEuler-release`/extras/`uname -m` +``` + +```bash +sudo dnf clean all +``` + +```bash +sudo dnf makecache +``` + +### 安装命令行助手 + +```bash +sudo dnf install eulercopilot-cli +``` + +若遇到 `Error: GPG check FAILED` 错误,使用 `--nogpgcheck` 跳过检查。 + +```bash +sudo dnf install --nogpgcheck eulercopilot-cli +``` + +## 初始化 + +```bash +copilot --init +``` + +然后根据提示输入 API Key 完成配置。 + +![shell-init](./pictures/shell-init.png) + +初次使用前请先退出终端或重新连接 SSH 会话使配置生效。 + +- **查看助手帮助页面** + + ```bash + copilot --help + ``` + + ![shell-help](./pictures/shell-help.png) + +## 使用 + +在终端中输入问题,按下 `Ctrl + O` 提问。 + +### 快捷键 + +- 输入自然语言问题后,按下 `Ctrl + O` 可以直接向 AI 提问。 +- 直接按下 `Ctrl + O` 可以自动填充命令前缀 `copilot`,输入参数后按下 `Enter` 即可执行。 + +### 智能问答 + +命令行助手初始化完成后,默认处于智能问答模式。 +命令提示符**左上角**会显示当前模式。 +若当前模式不是“智能问答”,执行 `copilot -c` (`copilot --chat`) 切换到智能问答模式。 + +![chat-ask](./pictures/shell-chat-ask.png) + +AI 回答完毕后,会根据历史问答生成推荐问题,您可以复制、粘贴到命令行中进行追问。输入追问的问题后,按下 `Enter` 提问。 + +![chat-next](./pictures/shell-chat-continue.png) + +![chat-next-result](./pictures/shell-chat-continue-result.png) + +智能问答模式下支持连续追问,每次追问最多可以关联3条历史问答的上下文。 + +输入 `exit` 可以退出智能问答模式,回到 Linux 命令行。 + +![chat-exit](./pictures/shell-chat-exit.png) + +- 若问答过程中遇到程序错误,可以按下 `Ctrl + C` 立即退出当前问答,再尝试重新提问。 + +### Shell 命令 + +AI 会根据您的问题返回 Shell 命令,openEuler Copilot System 命令行助手可以解释、编辑或执行这些命令,并显示命令执行结果。 + +![shell-cmd](./pictures/shell-cmd.png) + +命令行助手会自动提取 AI 回答中的命令,并显示相关操作。您可以通过键盘上下键选择操作,按下 `Enter` 确认。 + +![shell-cmd-interact](./pictures/shell-cmd-interact.png) + +#### 解释 + +如果 AI 仅返回了一条命令,选择解释后会直接请求 AI 解释命令,并显示回答。 +若 AI 回答了多条命令,选择后会显示命令列表,您每次可以选择**一条**请求 AI 解释。 + +![shell-cmd-explain-select](./pictures/shell-cmd-explain-select.png) + +完成解释后,您可以继续选择其他操作。 + +![shell-cmd-explain-result](./pictures/shell-cmd-explain-result.png) + +#### 编辑 + +![shell-cmd-edit](./pictures/shell-cmd-edit.png) + +选择一条命令进行编辑,编辑完成后按下 `Enter` 确认。 + +![shell-cmd-edit-result](./pictures/shell-cmd-edit-result.png) + +完成编辑后,您可以继续编辑其他命令或选择其他操作。 + +#### 执行 + +如果 AI 仅返回了一条命令,选择执行后会直接执行命令,并显示执行结果。 +若 AI 回答了多条命令,选择后会显示命令列表,您每次可以选择**多条**命令来执行。 + +您可以通过键盘上下键移动光标,按下 `空格键` 选择命令,按下 `Enter` 执行所选命令。 +被选中的命令会显示**蓝色高亮**,如图所示。 + +![shell-cmd-exec-multi-select](./pictures/shell-cmd-exec-multi-select.png) + +若不选择任何命令,直接按下 `Enter`,则会跳过执行命令,直接进入下一轮问答。 + +按下 `Enter` 后,被选中的命令会从上到下依次执行。 + +![shell-cmd-exec-result](./pictures/shell-cmd-exec-result.png) + +若执行过程中遇到错误,命令行助手会显示错误信息,并**终止执行命令**,进入下一轮问答。 +您可以在下一轮问答中提示 AI 更正命令,或要求 AI 重新生成命令。 + +### 智能插件 + +在 Linux 命令行中执行 `copilot -p` (`copilot --plugin`) 切换到智能插件模式。 + +![shell-plugin](./pictures/shell-plugin.png) + +输入问题并按下 `Ctrl + O` 提问后,从列表中选择插件,按下 `Enter` 调用插件回答问题。 + +![shell-plugin-select](./pictures/shell-plugin-select.png) + +![shell-plugin-result](./pictures/shell-plugin-result.png) + +## 卸载 + +```bash +sudo dnf remove eulercopilot-cli +``` + +然后使用以下命令删除配置文件。 + +```bash +rm ~/.config/eulercopilot/config.json +``` + +卸载完成后请重启终端或重新连接 SSH 会话使配置还原。 diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/diagnosis.md b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/diagnosis.md new file mode 100644 index 0000000000000000000000000000000000000000..eb999cb5483620450b2e2aea77a818382aeca2a4 --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/diagnosis.md @@ -0,0 +1,50 @@ +# 智能插件:智能诊断 + +部署智能诊断工具后,可以通过 openEuler Copilot System 智能体框架实现对本机进行诊断。 +在智能诊断模式提问,智能体框架服务可以调用本机的诊断工具诊断异常状况、分析并生成报告。 + +## 操作步骤 + +**步骤1** 切换到“智能插件”模式 + +```bash +copilot -p +``` + +![切换到智能插件模式](./pictures/shell-plugin-diagnose-switch-mode.png) + +**步骤2** 异常事件检测 + +```bash +帮我进行异常事件检测 +``` + +按下 `Ctrl + O` 键提问,然后在插件列表中选择“智能诊断”。 + +![异常事件检测](./pictures/shell-plugin-diagnose-detect.png) + +**步骤3** 查看异常事件详情 + +```bash +查看 XXX 容器的异常事件详情 +``` + +![查看异常事件详情](./pictures/shell-plugin-diagnose-detail.png) + +**步骤4** 执行异常事件分析 + +```bash +请对 XXX 容器的 XXX 指标执行 profiling 分析 +``` + +![异常事件分析](./pictures/shell-plugin-diagnose-profiling.png) + +**步骤5** 查看异常事件分析报告 + +等待 5 至 10 分钟,然后查看分析报告。 + +```bash +查看 对应的 profiling 报告 +``` + +![执行优化脚本](./pictures/shell-plugin-diagnose-report.png) diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/obtaining_api_key.md b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/obtaining_api_key.md new file mode 100644 index 0000000000000000000000000000000000000000..9d69b3c6ea26eb6af3c7ccd17b572699a8f6bd86 --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/obtaining_api_key.md @@ -0,0 +1,28 @@ +# 获取 API Key + +## 前言 + +openEuler Copilot System 命令行助手使用 API Key 来验证用户身份,并获取 API 访问权限。 +因此,开始使用前,您需要先获取 API Key。 + +## 注意事项 + +- 请妥善保管您的 API Key,不要泄露给他人。 +- API Key 仅用于命令行助手与 DevStation 桌面端,不用于其他用途。 +- 每位用户仅可拥有一个 API Key,重复创建 API Key 将导致旧密钥失效。 +- API Key 仅在创建时显示一次,请务必及时保存。若密钥丢失,您需要重新创建。 +- 若您在使用过程中遇到“请求过于频繁”的错误,您的 API Key 可能已被他人使用,请及时前往官网刷新或撤销 API Key。 + +## 获取方法 + +1. 登录 openEuler Copilot System 网页端。 +2. 点击右上角头像,选择“API KEY”。 +3. 点击“新建”按钮。 +4. **请立即保存 API Key,它仅在创建时显示一次,请勿泄露给他人。** + +## 管理 API Key + +1. 登录 openEuler Copilot System 网页端。 +2. 点击右上角头像,选择“API KEY”。 +3. 点击“刷新”按钮,刷新 API Key;点击“撤销”按钮,撤销 API Key。 + - 刷新 API Key 后,旧密钥失效,请立即保存新生成的 API Key。 diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-chat-ask.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-chat-ask.png new file mode 100644 index 0000000000000000000000000000000000000000..00d5cf5ecf894dd62366ec086bf96eae532f0b5d Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-chat-ask.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-chat-continue-result.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-chat-continue-result.png new file mode 100644 index 0000000000000000000000000000000000000000..f30f9fe7a015e775742bc184b8ac75790dc482fa Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-chat-continue-result.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-chat-continue.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-chat-continue.png new file mode 100644 index 0000000000000000000000000000000000000000..7e4801504fd53fab989574416e6220c4fa3f1d38 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-chat-continue.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-chat-exit.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-chat-exit.png new file mode 100644 index 0000000000000000000000000000000000000000..0bb81190a3039f6c5a311b365376ec230c1ad4b5 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-chat-exit.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-edit-result.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-edit-result.png new file mode 100644 index 0000000000000000000000000000000000000000..c5e6f8245e7d66cdbe5370f18d15a791a33a517a Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-edit-result.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-edit.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-edit.png new file mode 100644 index 0000000000000000000000000000000000000000..bb6209373a6d2a1881728bee352e7c3b46cc91d7 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-edit.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-exec-multi-select.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-exec-multi-select.png new file mode 100644 index 0000000000000000000000000000000000000000..2dda108a39af54fc15a4ff8c0dca107de38b9cf0 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-exec-multi-select.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-exec-result.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-exec-result.png new file mode 100644 index 0000000000000000000000000000000000000000..f4fff6a62b8b4220b52fdf55b133f2ba37850569 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-exec-result.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-explain-result.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-explain-result.png new file mode 100644 index 0000000000000000000000000000000000000000..707dd36aa7c7eadae4f29254cf5fc18ce877f597 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-explain-result.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-explain-select.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-explain-select.png new file mode 100644 index 0000000000000000000000000000000000000000..bf58b69e241ea11a6945f21e3fc69d22a401be2e Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-explain-select.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-interact.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-interact.png new file mode 100644 index 0000000000000000000000000000000000000000..00bb3a288fbd2fb962b08f34fbe90c733afe0343 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd-interact.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd.png new file mode 100644 index 0000000000000000000000000000000000000000..619172c8ed60a7b536364944a306fbf76fcbfb1f Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-cmd.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-help.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-help.png new file mode 100644 index 0000000000000000000000000000000000000000..97d0dedd3f7b1c749bc5fded471744923d766b8b Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-help.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-init.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-init.png new file mode 100644 index 0000000000000000000000000000000000000000..bbb2257eb1ff2bfec36110409fc6c55a26386c9e Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-init.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-diagnose-detail.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-diagnose-detail.png new file mode 100644 index 0000000000000000000000000000000000000000..7bd624e025eaae4b77c603d88bf1b9ad5e235fe7 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-diagnose-detail.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-diagnose-detect.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-diagnose-detect.png new file mode 100644 index 0000000000000000000000000000000000000000..2b38259ff0c1c7045dbff9abf64f36a109a3377b Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-diagnose-detect.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-diagnose-profiling.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-diagnose-profiling.png new file mode 100644 index 0000000000000000000000000000000000000000..0e63c01f35dbc291f805b56de749eac09e0a079d Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-diagnose-profiling.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-diagnose-report.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-diagnose-report.png new file mode 100644 index 0000000000000000000000000000000000000000..c16f0184a2ad3d2468466b33d0e861d2a31bc4e2 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-diagnose-report.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-diagnose-switch-mode.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-diagnose-switch-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..165c6c453353b70c3e1e2cb07d7f43d5ee3525e3 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-diagnose-switch-mode.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-result.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-result.png new file mode 100644 index 0000000000000000000000000000000000000000..3e3f45a974a0700d209f7d30af89eb2050a392d6 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-result.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-select.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-select.png new file mode 100644 index 0000000000000000000000000000000000000000..13959203c77eaa9f41051897cf9e847ff3642a8a Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-select.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-tuning-metrics-collect.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-tuning-metrics-collect.png new file mode 100644 index 0000000000000000000000000000000000000000..4d5678b7f77b05d48552fcb9656f4a4372dbbe61 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-tuning-metrics-collect.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-tuning-report.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-tuning-report.png new file mode 100644 index 0000000000000000000000000000000000000000..01daaa9a84c13158a95afddffeb8a7e3303f1e76 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-tuning-report.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-tuning-script-exec.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-tuning-script-exec.png new file mode 100644 index 0000000000000000000000000000000000000000..0b694c3fba6918ef39cca977b2072b2913d12b95 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-tuning-script-exec.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-tuning-script-gen.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-tuning-script-gen.png new file mode 100644 index 0000000000000000000000000000000000000000..6e95551767e213f59669d03fd4cceba05801a983 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-tuning-script-gen.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-tuning-script-view.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-tuning-script-view.png new file mode 100644 index 0000000000000000000000000000000000000000..c82c77bf6f4e4e19f400395aaadc9f99dc8d373c Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-tuning-script-view.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-tuning-switch-mode.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-tuning-switch-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..0f06c803ea3621a0f4fb83bbbe731e2bb4bba788 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin-tuning-switch-mode.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin.png b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin.png new file mode 100644 index 0000000000000000000000000000000000000000..4c1afd306a6aee029f5bda38aa7b1fce57227e31 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/pictures/shell-plugin.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/tune.md b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/tune.md new file mode 100644 index 0000000000000000000000000000000000000000..b5c40581668ae4f6074043e62a93b2c4b240e5b3 --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/usage_guide/cli_client/tune.md @@ -0,0 +1,53 @@ +# 智能插件:智能调优 + +部署智能调优工具后,可以通过 openEuler Copilot System 智能体框架实现对本机进行调优。 +在智能调优模式提问,智能体框架服务可以调用本机的调优工具采集性能指标,并生成性能分析报告和性能优化建议。 + +## 操作步骤 + +**步骤1** 切换到“智能调优”模式 + +```bash +copilot -t +``` + +![切换到智能调优模式](./pictures/shell-plugin-tuning-switch-mode.png) + +**步骤2** 采集性能指标 + +```bash +帮我进行性能指标采集 +``` + +![性能指标采集](./pictures/shell-plugin-tuning-metrics-collect.png) + +**步骤3** 生成性能分析报告 + +```bash +帮我生成性能分析报告 +``` + +![性能分析报告](./pictures/shell-plugin-tuning-report.png) + +**步骤4** 生成性能优化建议 + +```bash +请生成性能优化脚本 +``` + +![性能优化脚本](./pictures/shell-plugin-tuning-script-gen.png) + +**步骤5** 选择“执行命令”,运行优化脚本 + +![执行优化脚本](./pictures/shell-plugin-tuning-script-exec.png) + +- 脚本内容如图: + ![优化脚本内容](./pictures/shell-plugin-tuning-script-view.png) + +## 远程调优 + +如果需要对其他机器进行远程调优,请在上文示例的问题前面加上对应机器的 IP 地址。 + +例如:`请对 192.168.1.100 这台机器进行性能指标采集。` + +进行远程调优前请确保目标机器已部署智能调优工具,同时请确保 openEuler Copilot System 智能体框架能够访问目标机器。 diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/_toc.yaml b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4e984daadd81642f9f57e22b9ef930c8d07fff53 --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/_toc.yaml @@ -0,0 +1,6 @@ +label: witChainD 使用指南——知识库管理 +isManual: true +description: +sections: + - label: witChainD 使用指南——知识库管理 + href: ./witchaind_guidance.md diff --git "a/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\345\257\274\345\205\245\346\226\207\346\241\243.png" "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\345\257\274\345\205\245\346\226\207\346\241\243.png" new file mode 100644 index 0000000000000000000000000000000000000000..3d6818a10a728cd8bf7bd15b6f4f1a8e7817e9c4 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\345\257\274\345\205\245\346\226\207\346\241\243.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\345\257\274\345\207\272\350\265\204\344\272\247\345\272\223.png" "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\345\257\274\345\207\272\350\265\204\344\272\247\345\272\223.png" new file mode 100644 index 0000000000000000000000000000000000000000..73f3d3b92800e51bf00c9b71c82d76cabd5352de Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\345\257\274\345\207\272\350\265\204\344\272\247\345\272\223.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\211\271\351\207\217\345\220\257\347\224\250.png" "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\211\271\351\207\217\345\220\257\347\224\250.png" new file mode 100644 index 0000000000000000000000000000000000000000..3cf960c771ae2ce533f311a55584734c7853f07c Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\211\271\351\207\217\345\220\257\347\224\250.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\211\271\351\207\217\345\257\274\345\205\245\350\265\204\344\272\247\345\272\223.png" "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\211\271\351\207\217\345\257\274\345\205\245\350\265\204\344\272\247\345\272\223.png" new file mode 100644 index 0000000000000000000000000000000000000000..e08bc79f363a862e2a0f3780487c5614c6415b64 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\211\271\351\207\217\345\257\274\345\205\245\350\265\204\344\272\247\345\272\223.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\220\234\347\264\242\346\226\207\346\241\243.png" "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\220\234\347\264\242\346\226\207\346\241\243.png" new file mode 100644 index 0000000000000000000000000000000000000000..7f71660723fcc451152b73e12a0c630604efa390 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\220\234\347\264\242\346\226\207\346\241\243.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\226\207\346\234\254\345\235\227\347\273\223\346\236\234\351\242\204\350\247\210.png" "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\226\207\346\234\254\345\235\227\347\273\223\346\236\234\351\242\204\350\247\210.png" new file mode 100644 index 0000000000000000000000000000000000000000..05e003a48f4fb0a452448b0dc8bf74b598e6936e Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\226\207\346\234\254\345\235\227\347\273\223\346\236\234\351\242\204\350\247\210.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\226\207\346\241\243\347\256\241\347\220\206\347\225\214\351\235\242.png" "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\226\207\346\241\243\347\256\241\347\220\206\347\225\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..c17ea11b55489c10fa52eae2e9d8915313e3d39e Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\226\207\346\241\243\347\256\241\347\220\206\347\225\214\351\235\242.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\226\207\346\241\243\350\247\243\346\236\220.png" "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\226\207\346\241\243\350\247\243\346\236\220.png" new file mode 100644 index 0000000000000000000000000000000000000000..2524ce76edb826092b5dc9611d64537bed08b3ec Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\226\207\346\241\243\350\247\243\346\236\220.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\226\207\346\241\243\350\247\243\346\236\2202.png" "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\226\207\346\241\243\350\247\243\346\236\2202.png" new file mode 100644 index 0000000000000000000000000000000000000000..30dd2f5bef9b23c3dceb92b63817898076096a49 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\226\207\346\241\243\350\247\243\346\236\2202.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\226\260\345\242\236\350\265\204\344\272\247\345\272\223.png" "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\226\260\345\242\236\350\265\204\344\272\247\345\272\223.png" new file mode 100644 index 0000000000000000000000000000000000000000..d728d99741a03ff2f82e2c59bd424b848614aebe Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\226\260\345\242\236\350\265\204\344\272\247\345\272\223.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\250\241\345\236\213\351\205\215\347\275\256.png" "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\250\241\345\236\213\351\205\215\347\275\256.png" new file mode 100644 index 0000000000000000000000000000000000000000..97a489cc7637416306a88394a3faa7fa47cf9b95 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\346\250\241\345\236\213\351\205\215\347\275\256.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\347\274\226\350\276\221\346\226\207\346\241\243\351\205\215\347\275\256.png" "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\347\274\226\350\276\221\346\226\207\346\241\243\351\205\215\347\275\256.png" new file mode 100644 index 0000000000000000000000000000000000000000..bd0ed29ba5d6a4eb4dca5851b8469bd161f70300 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\347\274\226\350\276\221\346\226\207\346\241\243\351\205\215\347\275\256.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\347\274\226\350\276\221\350\265\204\344\272\247\345\272\223.png" "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\347\274\226\350\276\221\350\265\204\344\272\247\345\272\223.png" new file mode 100644 index 0000000000000000000000000000000000000000..3488720160efd58d2fd1f46046f04296f552b4d6 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\347\274\226\350\276\221\350\265\204\344\272\247\345\272\223.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\347\274\226\350\276\221\350\265\204\344\272\247\345\272\2230.png" "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\347\274\226\350\276\221\350\265\204\344\272\247\345\272\2230.png" new file mode 100644 index 0000000000000000000000000000000000000000..64d0cc3f8637592007503972267751f2bbe87b96 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\347\274\226\350\276\221\350\265\204\344\272\247\345\272\2230.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\347\274\226\350\276\221\350\265\204\344\272\247\345\272\223\351\205\215\347\275\256.png" "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\347\274\226\350\276\221\350\265\204\344\272\247\345\272\223\351\205\215\347\275\256.png" new file mode 100644 index 0000000000000000000000000000000000000000..e91dd94c7dc0a71e3f3ddee47c3d21926c27e619 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\347\274\226\350\276\221\350\265\204\344\272\247\345\272\223\351\205\215\347\275\256.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\350\247\243\346\236\220\345\256\214\346\210\220.png" "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\350\247\243\346\236\220\345\256\214\346\210\220.png" new file mode 100644 index 0000000000000000000000000000000000000000..9e9968fc2e71ace3a58ec454e19b25bcd961f0c0 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\350\247\243\346\236\220\345\256\214\346\210\220.png" differ diff --git "a/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\350\265\204\344\272\247\345\272\223\347\256\241\347\220\206\347\225\214\351\235\242.png" "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\350\265\204\344\272\247\345\272\223\347\256\241\347\220\206\347\225\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..33b9a3e0852f8e5ae1e95da572dcfc13f6d59da2 Binary files /dev/null and "b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/pictures/\350\265\204\344\272\247\345\272\223\347\256\241\347\220\206\347\225\214\351\235\242.png" differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/witchaind_guidance.md b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/witchaind_guidance.md new file mode 100644 index 0000000000000000000000000000000000000000..4759a57baa4e35ee529e9f4da70e1d1405612e6e --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/usage_guide/knowledge_base_management/witchaind_guidance.md @@ -0,0 +1,87 @@ +# witChainD 使用指南——知识库管理 + +完成 witChainD 部署之后,即可使用 witChainD 进行知识库管理管理。 + +下文会从页面的维度进行 witChainD 的功能介绍。 + +## 1. 资产库管理界面 + +该页面为资产库管理界面,用户登录后将会进入该界面。 + +![资产库管理界面](./pictures/资产库管理界面.png) + +**支持操作:** + +- 配置模型:点击右上角的设置按键,可以修改模型相关的配置。 + + ![模型配置](./pictures/模型配置.png) + +- 新增资产库:点击新建资产库按钮新建,支持自定义名称、描述、语言、嵌入模型、解析方法、文件分块大小、文档类别。注意:重复名称会自动将名称修改成资产库id。 + + ![新增资产库](./pictures/新增资产库.png) + +- 编辑资产库:点击资产库的编辑按钮编辑,支持修改名称、描述、语言、解析方法、文件分块大小、文档类别。注意:不能修改成重复名称。 + + ![编辑资产库](./pictures/编辑资产库0.png) + + ![编辑资产库](./pictures/编辑资产库.png) + +- 导出资产库:点击资产库的导出按钮导出,导出完成后需要按任务列表中的下载任务下载对应资产库到本地。 + + ![导出资产库](./pictures/导出资产库.png) + +- 批量导入资产库:点击批量导入,上传本地文件后选中即可导入。 + + ![批量导入资产库](./pictures/批量导入资产库.png) + +- 搜索资产库:在搜索栏中键入文本,可以搜索得到名称包含对应文本的资产库。 + +## 2. 文档管理界面 + +在资产管理界面点击对应资产库,可以进入文档管理界面。 + +![文档管理界面](./pictures/文档管理界面.png) + +**支持操作:** + +- 导入文档:点击导入文档,从本地上传文件导入,导入后会自动以该资产库默认配置开始解析。 + + ![导入文档](./pictures/导入文档.png) + +- 解析文档:点击操作中的解析,对文档进行解析。也可以选中多个文档批量解析。 + + ![文档解析](./pictures/文档解析.png) + + ![文档解析2](./pictures/文档解析2.png) + + ![解析完成](./pictures/解析完成.png) + +- 编辑文档配置:点击编辑对文档配置进行编辑,支持编辑文档名称、解析方法、类别、文件分块大小。 + + ![编辑文档配置](./pictures/编辑文档配置.png) + +- 下载文档:点击下载即可将文档下载至本地,也可以选中多个文档批量下载。 + +- 删除文档:点击删除即可将文档从资产库中删除,也可以选中多个文档批量删除。 + +- 搜索文档:点击文档名称旁的搜索键,在弹出的搜索框中键入搜索的文本,可以搜索得到名称包含这些文本的文档。 + + ![搜索文档](./pictures/搜索文档.png) + +- 编辑资产库配置:支持编辑资产库名称、描述、语言、默认解析方法、文件分块大小、文档信息类别。 + + ![编辑资产库配置](./pictures/编辑资产库配置.png) + +## 3. 解析结果管理界面 + +点击解析完成的文档,可以进入文档的解析结果管理界面。界面中会按照顺序显示文档解析后的文本块内容预览,每个文本块会附带一个标签,表示该文本块中的信息来源于文档中的段落、列表或者是图片。右侧的开关表示该文本块是否被启用。 + +![文本块结果预览](./pictures/文本块结果预览.png) + +**支持操作**: + +- 关闭/启用文本块:点击文本块右侧的开关即可关闭/启用对应文本块,也可以选中多个文本块批量关闭/启用。 + + ![批量启用](./pictures/批量启用.png) + +- 搜索文本块:在搜索框中键入内容,可以查找包含对应内容的文本块。 diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/_toc.yaml b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cd560181f695cb74418f3a87d2e3529b9c780c3c --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/_toc.yaml @@ -0,0 +1,12 @@ +label: 使用指南-网页端 +isManual: true +description: +sections: + - label: 前言 + href: ./preface.md + - label: 登录 openEuler Copilot System + href: ./registration_and_login.md + - label: 智能问题使用指南 + href: ./qa_guide.md + - label: 智能插件介绍 + href: ./intelligent_plugin.md diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/intelligent_plugin.md b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/intelligent_plugin.md new file mode 100644 index 0000000000000000000000000000000000000000..0ea19a2b1d0246b07c829da85533d6e43d6f734e --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/intelligent_plugin.md @@ -0,0 +1,38 @@ +# 智能插件 + +## 基本用法 + +1. 如图所示,在输入框左上角可以选择插件,点击显示插件列表。 + + ![智能插件](./pictures/plugin-list.png) + +2. 勾选一个插件,然后提问。 + + ![智能插件](./pictures/plugin-selected.png) + +3. 等待服务响应,查看返回结果。 + + 智能插件模式下,推荐问题将置顶推荐的工作流,蓝色文字为对应插件名称,点击后可快捷追问。 + + ![智能插件](./pictures/plugin-suggestion.png) + ![智能插件](./pictures/plugin-result.png) + +## 插件工作流 + +openEuler Copilot System 支持插件工作流。插件工作流由多个步骤组成,每个步骤都会调用一次插件。每个步骤的输出将作为下一个步骤的输入。下面以使用 CVE 漏洞查询插件查看漏洞修复任务完成情况为例,介绍插件工作流的使用方法。 + +1. 查询全部 CVE 修复任务信息 + + ![插件工作流](./pictures/plugin-workflow-case-step-1.png) + +2. 根据上一步的结果查询指定 CVE 修复任务的详细信息 + + ![插件工作流](./pictures/plugin-workflow-case-step-2.png) + ![插件工作流](./pictures/plugin-workflow-case-step-2-result.png) + +### 补全参数 + +当上下文信息不足时,插件会提示用户补充缺失的参数。 + +![补全参数](./pictures/plugin-workflow-fill-in-param.png) +![执行结果](./pictures/plugin-workflow-fill-in-param-result.png) diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/authhub-login-click2signup.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/authhub-login-click2signup.png new file mode 100644 index 0000000000000000000000000000000000000000..6e6f96b4a902d04c67eb2e299ad038423dcb04c7 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/authhub-login-click2signup.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/authhub-login.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/authhub-login.png new file mode 100644 index 0000000000000000000000000000000000000000..b5ea5a7577f2ce19fad4df5274847676134d95e0 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/authhub-login.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/authhub-signup.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/authhub-signup.png new file mode 100644 index 0000000000000000000000000000000000000000..c20a54d270988f56039a2b93eca6aa369d048884 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/authhub-signup.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/bulk-delete-confirmation.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/bulk-delete-confirmation.png new file mode 100644 index 0000000000000000000000000000000000000000..3cc5a6a25618eff0bfa9807e1c19e4f88edc7da4 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/bulk-delete-confirmation.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/bulk-delete-multi-select.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/bulk-delete-multi-select.png new file mode 100644 index 0000000000000000000000000000000000000000..772c51d903531cfe74245f08ecdca06d4677f935 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/bulk-delete-multi-select.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/bulk-delete.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/bulk-delete.png new file mode 100644 index 0000000000000000000000000000000000000000..929230cd06cc792b633ab183155225926d2c300d Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/bulk-delete.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/chat-area.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/chat-area.png new file mode 100644 index 0000000000000000000000000000000000000000..966432e02f08a6c769e8cd87b0468bd25f257f5e Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/chat-area.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/context-support.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/context-support.png new file mode 100644 index 0000000000000000000000000000000000000000..0bd5f091d0eff34d9b5f36eec6df63b191656daa Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/context-support.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/delete-session-confirmation.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/delete-session-confirmation.png new file mode 100644 index 0000000000000000000000000000000000000000..729096bdae14895b81e8725a8065d1f4bfcdbf6c Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/delete-session-confirmation.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/delete-session.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/delete-session.png new file mode 100644 index 0000000000000000000000000000000000000000..596af33f7be41d456a57e6a297820530f8485f34 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/delete-session.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/feedback-illegal.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/feedback-illegal.png new file mode 100644 index 0000000000000000000000000000000000000000..b6e84ba45977d911db960da97bdff714624ba18c Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/feedback-illegal.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/feedback-misinfo.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/feedback-misinfo.png new file mode 100644 index 0000000000000000000000000000000000000000..cc5505226add1e6fbde7b93ff09877038e8cfdce Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/feedback-misinfo.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/feedback.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/feedback.png new file mode 100644 index 0000000000000000000000000000000000000000..9fe1c27acb57d4d24a26c8dde61ee4272f954e46 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/feedback.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-ask-against-file.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-ask-against-file.png new file mode 100644 index 0000000000000000000000000000000000000000..2cf2c5e50c8c02c4c2713fde63c7e11c110c8bb2 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-ask-against-file.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-btn-prompt.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-btn-prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..45e38672d0c46ccc2ded83669875f7c832f2c73d Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-btn-prompt.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-btn.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-btn.png new file mode 100644 index 0000000000000000000000000000000000000000..2f6a7cee51e2cb02b52baf6ffa7136f5601a26e1 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-btn.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-history-tag.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-history-tag.png new file mode 100644 index 0000000000000000000000000000000000000000..487a48e6f72cbe8f115d8ce2001808b9b4a74dec Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-history-tag.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-parsing.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-parsing.png new file mode 100644 index 0000000000000000000000000000000000000000..812090a59ee3594b11ecfcb55cc7a8b7361ca2bb Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-parsing.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-showcase.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-showcase.png new file mode 100644 index 0000000000000000000000000000000000000000..60234df165d16abb976ffdf74d0b1ad890387e57 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-showcase.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-uploading.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-uploading.png new file mode 100644 index 0000000000000000000000000000000000000000..7f29ba755ce71d08098d0d5950239b69e1d7f16a Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/file-upload-uploading.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-arrow-next.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-arrow-next.png new file mode 100644 index 0000000000000000000000000000000000000000..1a36c84e0965f9dbf1f90e9a3daadcd1a2560951 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-arrow-next.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-arrow-prev.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-arrow-prev.png new file mode 100644 index 0000000000000000000000000000000000000000..eb667e93cc6d51aa191a0ac7607e72d4d6923cbc Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-arrow-prev.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-cancel.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..34d4454b6f92ee12db6841dafe0e94a12c3b9584 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-cancel.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-confirm.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-confirm.png new file mode 100644 index 0000000000000000000000000000000000000000..1d650f8192e04fae8f7b7c08cd527227c91b833a Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-confirm.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-edit.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-edit.png new file mode 100644 index 0000000000000000000000000000000000000000..f7b28aa605b5e899855a261d641d27a2674703eb Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-edit.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-search.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-search.png new file mode 100644 index 0000000000000000000000000000000000000000..7902923196c3394ae8eafaf5a2b6fdf7f19b1f40 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-search.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-thumb-down.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-thumb-down.png new file mode 100644 index 0000000000000000000000000000000000000000..cda14d196d92898da920ed64ad37fa9dd124c775 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-thumb-down.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-thumb-up.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-thumb-up.png new file mode 100644 index 0000000000000000000000000000000000000000..c75ce44bff456e24bc19040c18e4e644bbb77bd1 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-thumb-up.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-user.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-user.png new file mode 100644 index 0000000000000000000000000000000000000000..e6b06878b76d9e6d268d74070539b388129fa8c4 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/icon-user.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/login-popup.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/login-popup.png new file mode 100644 index 0000000000000000000000000000000000000000..7834248e8603aca100b8b7e33a93611777cc6ede Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/login-popup.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/logout.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/logout.png new file mode 100644 index 0000000000000000000000000000000000000000..da51441e632cb77dfbe0f86056e333f69485c500 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/logout.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/main-page-clean-ref.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/main-page-clean-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..2e00878b62408e75d8f82c40b3a1f5e0f4f878f6 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/main-page-clean-ref.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/main-page-sections.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/main-page-sections.png new file mode 100644 index 0000000000000000000000000000000000000000..9d8f013318c840a5b05b3010b9b08047870be822 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/main-page-sections.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/new-chat.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/new-chat.png new file mode 100644 index 0000000000000000000000000000000000000000..784a0da650df405e1df147409b785a026109e239 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/new-chat.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-list.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-list.png new file mode 100644 index 0000000000000000000000000000000000000000..90270b4c9d8991463e4a4129625ab0325ac09922 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-list.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-result.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-result.png new file mode 100644 index 0000000000000000000000000000000000000000..a810a8c123f34f51c06c2dd22c9fc1e9cb4efa06 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-result.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-selected.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-selected.png new file mode 100644 index 0000000000000000000000000000000000000000..fa5342091d0a023a545c3edab8c4368654df8a90 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-selected.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-suggestion.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-suggestion.png new file mode 100644 index 0000000000000000000000000000000000000000..bb416881550349000f61b0c1bd3dd540878bd6ad Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-suggestion.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-workflow-case-step-1.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-workflow-case-step-1.png new file mode 100644 index 0000000000000000000000000000000000000000..e961ddc5b9aa6b687c69e4587ea3a59f54b6ad27 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-workflow-case-step-1.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-workflow-case-step-2-result.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-workflow-case-step-2-result.png new file mode 100644 index 0000000000000000000000000000000000000000..dfc52217a1595613a934c5860704d688a2876a37 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-workflow-case-step-2-result.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-workflow-case-step-2.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-workflow-case-step-2.png new file mode 100644 index 0000000000000000000000000000000000000000..0cb59551c2695151491aa1120163ea0c1aabb317 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-workflow-case-step-2.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-workflow-fill-in-param-result.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-workflow-fill-in-param-result.png new file mode 100644 index 0000000000000000000000000000000000000000..899ee2672ba8b5eb8518fb9b80104577159d1cb4 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-workflow-fill-in-param-result.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-workflow-fill-in-param.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-workflow-fill-in-param.png new file mode 100644 index 0000000000000000000000000000000000000000..4c03312d72f49c51868826d62bc59d0f2f925cc7 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/plugin-workflow-fill-in-param.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/privacy-policy-entry.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/privacy-policy-entry.png new file mode 100644 index 0000000000000000000000000000000000000000..d7efce3e6e8d477ef47a1bc8a9bba0d087cf8058 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/privacy-policy-entry.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/privacy-policy.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/privacy-policy.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc0980a7dd78e055fc920d591a77d5394b5fb84 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/privacy-policy.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/recommend-questions.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/recommend-questions.png new file mode 100644 index 0000000000000000000000000000000000000000..076ec7092af7fe7987e5dc7c864a6b9f8b2b1160 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/recommend-questions.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/regenerate.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/regenerate.png new file mode 100644 index 0000000000000000000000000000000000000000..655c9d5002df4a17aaf84e8780fff4a0118c6c01 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/regenerate.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/rename-session-confirmation.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/rename-session-confirmation.png new file mode 100644 index 0000000000000000000000000000000000000000..d64708bd57d53deafdc5ddbb70d9deaeaca0d132 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/rename-session-confirmation.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/rename-session.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/rename-session.png new file mode 100644 index 0000000000000000000000000000000000000000..73e7e19c5ac8e8035df0e4b553a9b78ff5c9a051 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/rename-session.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/report-options.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/report-options.png new file mode 100644 index 0000000000000000000000000000000000000000..8a54fd2598d51fc40b57052f404dd830cf621f4d Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/report-options.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/report.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/report.png new file mode 100644 index 0000000000000000000000000000000000000000..471bcbe8614fc8bab4dcc1805fa1bf4574990fc8 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/report.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/search-history.png b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/search-history.png new file mode 100644 index 0000000000000000000000000000000000000000..2239d14a7aa8bc13a7b8d3ec71ba9ed71b95e850 Binary files /dev/null and b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/pictures/search-history.png differ diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/preface.md b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/preface.md new file mode 100644 index 0000000000000000000000000000000000000000..08fc0c72504544c8800140476c101d51254f8472 --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/preface.md @@ -0,0 +1,67 @@ +# 前言 + +## 概述 + +本文档介绍了 openEuler Copilot System 的使用方法,对 openEuler Copilot System 线上服务的 Web 界面的各项功能做了详细介绍,同时提供了常见的问题解答,详细请参考对应手册。 + +## 读者对象 + +本文档主要适用于 openEuler Copilot System 的使用人员。使用人员必须具备以下经验和技能: + +- 熟悉 openEuler 操作系统相关情况。 +- 有 AI 对话使用经验。 + +## 修改记录 + +| 文档版本 | 发布日期 | 修改说明 | +|--------|------------|----------------| +| 03 | 2024-09-19 | 更新新版界面。 | +| 02 | 2024-05-13 | 优化智能对话操作指引。 | +| 01 | 2024-01-28 | 第一次正式发布。 | + +## 介绍 + +### 免责声明 + +- 使用过程中涉及的非工具本身验证功能所用的用户名和密码,不作他用,且不会被保存在系统环境中。 +- 在您进行对话或操作前应当确认您为应用程序的所有者或已获得所有者的充足授权同意。 +- 对话结果中可能包含您所分析应用的内部信息和相关数据,请妥善管理。 +- 除非法律法规或双方合同另有规定,openEuler 社区对分析结果不做任何明示或暗示的声明和保证,不对分析结果的适销性、满意度、非侵权性或特定用途适用性等作出任何保证或者承诺。 +- 您根据分析记录所采取的任何行为均应符合法律法规的要求,并由您自行承担风险。 +- 未经所有者授权,任何个人或组织均不得使用应用程序及相关分析记录从事任何活动。openEuler 社区不对由此造成的一切后果负责,亦不承担任何法律责任。必要时,将追究其法律责任。 + +### openEuler Copilot System 简介 + +openEuler Copilot System 是一个基于 openEuler 操作系统的人工智能助手,可以帮助用户解决各种技术问题,提供技术支持和咨询服务。它使用了最先进的自然语言处理技术和机器学习算法,能够理解用户的问题并提供相应的解决方案。 + +### 场景内容 + +1. OS 领域通用知识:openEuler Copilot System 可以咨询 Linux 常规知识、上游信息和工具链介绍和指导。 +2. openEuler 专业知识:openEuler Copilot System 可以咨询 openEuler 社区信息、技术原理和使用指导。 +3. openEuler 扩展知识:openEuler Copilot System 可以咨询 openEuler 周边硬件特性知识和ISV、OSV相关信息。 +4. openEuler 应用案例:openEuler Copilot System 可以提供 openEuler 技术案例、行业应用案例。 +5. shell 命令生成:openEuler Copilot System 可以帮助用户生成单条 shell 命令或者复杂命令。 + +总之,openEuler Copilot System 可以应用于各种场景,帮助用户提高工作效率和了解 Linux、openEuler 等的相关知识。 + +### 访问和使用 + +openEuler Copilot System 通过网址访问 Web 网页进行使用。账号注册与登录请参考[注册与登录](./registration_and_login.md)。使用方法请参考[智能问答使用指南](./qa_guide.md)。 + +### 界面说明 + +#### 界面分区 + +openEuler Copilot System 界面主要由如图 1 所示的区域组成,各个区域的作用如表 1 所示。 + +- 图 1 openEuler Copilot System 界面 +![Copilot 界面](./pictures/main-page-sections.png) + +- 表 1 openEuler Copilot System 首页界面分区说明 + +| 区域 | 名称 | 说明 | +|-----|------------|----------------------------------------------------------------| +| 1 | 设置管理区 | 提供账号登录和退出操作入口和明亮/黑暗模式切换功能 | +| 2 | 对话管理区 | 用于用户新建对话、对话历史记录管理和对话历史记录批量删除操作 | +| 3 | 对话区 | 用于用户和 openEuler Copilot System 的对话聊天 | +| 4 | 服务协议和隐私政策区 | 提供查看服务协议和隐私政策入口 | diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/qa_guide.md b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/qa_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..64b4a1881e5224360463b97b09dab11e7bb2f3e6 --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/qa_guide.md @@ -0,0 +1,179 @@ +# 智能问答使用指南 + +## 开始对话 + +在对话区下侧输入框即可输入对话想要提问的内容,输入 `Shift + Enter` 可进行换行,输入 `Enter` 即可发送对话提问内容,或者单击“发送”也可发送对话提问内容。 + +> **说明** +> +> 对话区位于页面的主体部分,如图 1 所示。 + +- 图 1 对话区 + ![对话区](./pictures/chat-area.png) + +### 多轮连续对话 + +openEuler Copilot System 智能问答支持多轮连续对话。只需要在同一个对话中继续追问即可使用,如图 2 所示。 + +- 图 2 多轮对话 + ![多轮对话](./pictures/context-support.png) + +### 重新生成 + +如遇到 AI 生成的内容有误或不完整的特殊情况,可以要求 AI 重新回答问题。单击对话回答左下侧的“重新生成”文字,可让 openEuler Copilot System 重新回答用户问题,重新回答后,在对话回答右下侧,会出现回答翻页的图标![向前翻页](./pictures/icon-arrow-prev.png)和![向后翻页](./pictures/icon-arrow-next.png),单击![向前翻页](./pictures/icon-arrow-prev.png)或![向后翻页](./pictures/icon-arrow-next.png)可查看不同的回答,如图 3 所示。 + +- 图 3 重新生成 + ![重新生成](./pictures/regenerate.png) + +### 推荐问题 + +在 AI 回答的下方,会展示一些推荐的问题,单击即可进行提问,如图 4 所示。 + +- 图 4 推荐问题 + ![推荐问题](./pictures/recommend-questions.png) + +## 自定义背景知识 + +openEuler Copilot System 支持上传文件功能。上传文件后,AI 会将上传的文件内容作为背景知识,在回答问题时,会结合背景知识进行回答。上传的背景知识只会作用于当前对话,不会影响其他对话。 + +### 上传文件 + +**步骤1** 单击对话区左下角的“上传文件”按钮,如图 5 所示。 + +- 图 5 上传文件按钮 + ![上传文件](./pictures/file-upload-btn.png) + +> **说明** +> +> 鼠标悬停到“上传文件”按钮上,会显示提示允许上传文件的规格和格式,如图 6 所示。 + +- 图 6 鼠标悬停显示上传文件规格提示 + ![上传文件提示](./pictures/file-upload-btn-prompt.png) + +**步骤2** 在弹出的文件选择框中,选择需要上传的文件,单击“打开”,即可上传文件。最多上传10个文件,总大小限制为64MB。接受 PDF、docx、doc、txt、md、xlsx。 + +开始上传后,对话区下方会显示上传进度,如图 7 所示。 + +- 图 7 同时上传的所有文件排列在问答输入框下方 + ![上传文件](./pictures/file-upload-uploading.png) + +文件上传完成后会自动解析,如图 8 所示,解析完成后,对话区下方会显示每个文件的大小信息。 + +- 图 8 文件上传至服务器后将显示“正在解析” + ![文件解析](./pictures/file-upload-parsing.png) + +文件上传成功后,左侧历史记录区会显示上传的文件数量,如图 9 所示。 + +- 图 9 对话历史记录标签上会展示上传文件数量 + ![历史记录标记](./pictures/file-upload-history-tag.png) + +### 针对文件提问 + +文件上传完成后,即可针对文件进行提问,提问方式同普通对话模式,如图 10 所示。 +回答结果如图 11 所示。 + +- 图 10 询问与上传的文件相关的问题 + ![针对文件提问](./pictures/file-upload-ask-against-file.png) + +- 图 11 AI 以上传的为背景知识进行回答 + ![根据自定义背景知识回答](./pictures/file-upload-showcase.png) + +## 管理对话 + +> **说明** +> +> 对话管理区在页面左侧。 + +### 新建对话 + +单击“新建对话”按钮即可新建对话,如图 12 所示。 + +- 图 12 “新建对话”按钮在页面左上方 + ![新建对话](./pictures/new-chat.png) + +### 对话历史记录搜索 + +在页面左侧历史记录搜索输入框输入关键词,然后单击![搜索](./pictures/icon-search.png)即可进行对话历史记录搜索如图 13 所示。 + +- 图 13 对话历史记录搜索框 + ![对话历史记录搜索](./pictures/search-history.png) + +### 对话历史记录单条管理 + +历史记录的列表位于历史记录搜索栏的下方,在每条对话历史记录的右侧,单击![编辑](./pictures/icon-edit.png)即可编辑对话历史记录的名字,如图 14 所示。 + +- 图 14 点击“编辑”图标重命名历史记录 + ![重命名历史记录](./pictures/rename-session.png) + +在对话历史记录名字重新书写完成后,单击右侧![确认](./pictures/icon-confirm.png)即可完成重命名,或者单击右侧![取消](./pictures/icon-cancel.png)放弃本次重命名,如图 15 所示。 + +- 图 15 完成/取消重命名历史记录 + ![完成/取消重命名历史记录](./pictures/rename-session-confirmation.png) + +另外,单击对话历史记录右侧的删除图标,如图 16 所示,即可对删除单条对话历史记录进行二次确认,在二次确认弹出框,如图 17 所示,单击“确认”,可确认删除单条对话历史记录,或者单击“取消”,取消本次删除。 + +- 图 16 点击“垃圾箱”图标删除单条历史记录 + ![删除单条历史记录](./pictures/delete-session.png) + +- 图 17 二次确认后删除历史记录 + ![删除单条历史记录二次确认](./pictures/delete-session-confirmation.png) + +### 对话历史记录批量删除 + +首先单击“批量删除”,如图 18 所示。 + +- 图 18 批量删除功能在历史记录搜索框右上方 + ![批量删除](./pictures/bulk-delete.png) + +然后可对历史记录进行选择删除,如图 19 所示。单击“全选”,即对所有历史记录选中,单击单条历史记录或历史记录左侧的选择框,可对单条历史记录进行选中。 + +- 图 19 在左侧勾选要批量删除历史记录 + ![批量删除历史记录选择](./pictures/bulk-delete-multi-select.png) + +最后需要对批量删除历史记录进行二次确认,如图 20 所示,单击“确认”,即删除,单击“取消”,即取消本次删除。 + +- 图 20 二次确认后删除所选的历史记录 + ![批量删除二次确认](./pictures/bulk-delete-confirmation.png) + +## 反馈与举报 + +在对话记录区,对话回答的右下侧,可进行对话回答反馈,如图 21 所示,单击![满意](./pictures/icon-thumb-up.png),可给对话回答点赞;单击![不满意](./pictures/icon-thumb-down.png),可以给对话回答反馈不满意的原因。 + +- 图 21 点赞和不满意反馈 + ![点赞和不满意反馈](./pictures/feedback.png) + +对于反馈不满意原因,如图 22 所示,在单击![不满意](./pictures/icon-thumb-down.png)之后,对话机器人会展示反馈内容填写的对话框,可选择相关的不满意原因的选项。 + +- 图 22 回答不满意反馈 + ![回答不满意反馈](./pictures/feedback-illegal.png) + +其中单击选择“存在错误信息”,需要填写参考答案链接和描述,如图 23 所示。 + +- 图 23 回答不满意反馈——存在错误信息 + ![回答不满意反馈——存在错误信息](./pictures/feedback-misinfo.png) + +### 举报 + +如果发现 AI 返回的内容中有违规信息,可以点击右下角按钮举报,如图 24 所示。点击举报后选择举报类型并提交,若没有合适的选项,请选择“其他”并输入原因,如图 25 所示。 + +- 图 24 举报按钮在对话块的右下角 + ![举报1](./pictures/report.png) + +- 图 25 点击后可选择举报类型 + ![举报2](./pictures/report-options.png) + +## 查看服务协议和隐私政策 + +单击文字“服务协议”,即可查看服务协议,单击文字“隐私政策”,即可查看隐私政策,如图 26、图 27 所示。 + +- 图 26 服务协议和隐私政策入口在页面底部信息栏 + ![服务协议和隐私政策入口](./pictures/privacy-policy-entry.png) + +- 图 27 点击后显示服务协议或隐私政策弹窗 + ![服务协议和隐私政策](./pictures/privacy-policy.png) + +## 附录 + +### 用户信息导出说明 + +openEuler Copilot System 后台存在用户信息导出功能,如用户需要,需主动通过 邮箱联系我们,运维会将导出的用户信息通过邮箱回送给用户。 diff --git a/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/registration_and_login.md b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/registration_and_login.md new file mode 100644 index 0000000000000000000000000000000000000000..14c30c32be2ccf22c5bec73d9892936cd214cc49 --- /dev/null +++ b/docs/zh/tools/ai/euler_copilot/usage_guide/online_services/registration_and_login.md @@ -0,0 +1,55 @@ +# 登录 openEuler Copilot System + +本章节介绍登录通过 *[openEuler Copilot System 部署指南](../../deployment_guide)* 部署的 openEuler Copilot System 网页端的操作步骤。 + +## 浏览器要求 + +浏览器要求如表 1 所示。 + +- 表 1 浏览器要求 + +| 浏览器类型 | 最低版本 | 推荐版本 | +| ----- | ----- | ----- | +| Google Chrome | 72 | 121 或更高版本 | +| Mozilla Firefox | 89 | 122 或更高版本 | +| Apple Safari | 11.0 | 16.3 或更高版本 | + +## 操作步骤 + +**步骤1** 打开本地 PC 机的浏览器,在地址栏输入 *[部署指南](../../部署指南/网络环境下部署指南.md#2-安装-openeuler-copilot-system)* 中配置好的域名,按下 `Enter`。在未登录状态,进入 openEuler Copilot System,会出现登录提示弹出框,如图 1 所示。 + +- 图 1 未登录 +![未登录](./pictures/login-popup.png) + +**步骤2** 登录 openEuler Copilot System(已注册账号)。 + +打开登录界面,如图 2 所示。 + +- 图 2 登录 openEuler Copilot System +![登录 openEuler Copilot System](./pictures/authhub-login.png) + +## 注册 openEuler Copilot System 账号 + +**步骤1** 在登录信息输入框右下角单击“立即注册”,如图 3 所示。 + +- 图 3 立即注册 +![立即注册](./pictures/authhub-login-click2signup.png) + +**步骤2** 进入账号注册页,根据页面提示填写相关内容,如图 4 所示。 + +- 图 4 账号注册 +![账号注册](./pictures/authhub-signup.png) + +**步骤3** 按页面要求填写账号信息后,单击“注册”,即可注册成功。注册后即可返回登录。 + +## 退出登录 + +**步骤1** 单击![退出登录](./pictures/icon-user.png)后,会出现“退出登录”下拉框,如图 5 所示。 + +> **说明** +> 账号管理区位于页面的右上角部分,如图 5 所示。 + +- 图 5 账号管理区 +![账号管理区](./pictures/logout.png) + +**步骤2** 单击“退出登录”即可退出登录,如图 5 所示。 diff --git a/docs/zh/tools/cloud/cpds/_toc.yaml b/docs/zh/tools/cloud/cpds/_toc.yaml index 283ed72599969bb0a95d467483f1d21f3b04bb77..4801d63f15109dafb6f4baa2bd3e460a93f9f73c 100644 --- a/docs/zh/tools/cloud/cpds/_toc.yaml +++ b/docs/zh/tools/cloud/cpds/_toc.yaml @@ -7,4 +7,4 @@ sections: - label: 安装与部署 href: ./installation_and_deployment.md - label: 使用方法 - href: ./cpds_userguide.md + href: ./usage_instructions.md diff --git a/docs/zh/tools/cloud/ctinspector/installation_and_deployment.md b/docs/zh/tools/cloud/ctinspector/installation_and_deployment.md index 6fcd94016df11cf3473c84a4e19723afe0175446..ac0d235f585e9cd251f4246b77549279790e2e0f 100644 --- a/docs/zh/tools/cloud/ctinspector/installation_and_deployment.md +++ b/docs/zh/tools/cloud/ctinspector/installation_and_deployment.md @@ -6,7 +6,11 @@ ## 环境准备 +<<<<<<< HEAD:docs/zh/tools/cloud/ctinspector/installation_and_deployment.md * 安装openEuler系统,安装方法参考 《[安装指南](../../../server/installation_upgrade/installation/installation-on-servers.md)》。 +======= +* 安装openEuler系统,安装方法参考 《[安装指南](../../../server/installation_upgrade/installation/installation_on_servers.md)》。 +>>>>>>> 6b124a04c (文档整改):docs/zh/docs/tools/cloud/ctinspector/installation_and_deployment.md * 安装CTinspector需要使用root权限。 diff --git a/docs/zh/tools/community_tools/_toc.yaml b/docs/zh/tools/community_tools/_toc.yaml index 44feffbde578d7897c4b92d10deca18a51cb4a8e..784a20fb78a38c119a884257c32b2658005a6678 100644 --- a/docs/zh/tools/community_tools/_toc.yaml +++ b/docs/zh/tools/community_tools/_toc.yaml @@ -13,3 +13,7 @@ sections: - label: epkg软件包 sections: - href: ./epkg_use/_toc.yaml + - href: ./autopkg/_toc.yaml + - label: 编译 + sections: + - href: ./pin/_toc.yaml diff --git a/docs/zh/tools/community_tools/pin/_toc.yaml b/docs/zh/tools/community_tools/pin/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5d2b6b2bd0f0df39de7c320b6d63d7dda3aed07a --- /dev/null +++ b/docs/zh/tools/community_tools/pin/_toc.yaml @@ -0,0 +1,6 @@ +label: GCC插件框架特性用户指南 +isManual: true +description: GCC插件框架特性用户指南 +sections: + - label: GCC插件框架特性用户指南 + href: ./pin_user_guide.md diff --git a/docs/zh/tools/community_tools/pin/pin_user_guide.md b/docs/zh/tools/community_tools/pin/pin_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..0bb198d57631f7d5a4a7831cafa9b41e3aa4c696 --- /dev/null +++ b/docs/zh/tools/community_tools/pin/pin_user_guide.md @@ -0,0 +1,112 @@ +# 安装与部署 +## 软件要求 +* 操作系统:openEuler 24.03 +## 硬件要求 +* x86_64架构 +* ARM架构 +## 环境准备 +<<<<<<<< HEAD:archive/Pin/插件框架特性用户指南.md +* 安装openEuler系统,安装方法参考 《[安装指南](../../../../server/installation_upgrade/installation/installation_on_servers.md)》。 +======== +* 安装openEuler系统,安装方法参考 《[安装指南](../../../../server/installation_upgrade/installation/installation_on_servers.md)》。 +>>>>>>>> 6b124a04c (文档整改):docs/zh/docs/tools/community_tools/pin/pin_user_guide.md +### 安装依赖软件 +#### 安装插件框架GCC客户端依赖软件 +```shell +yum install -y grpc +yum install -y grpc-devel +yum install -y grpc-plugins +yum install -y protobuf-devel +yum install -y jsoncpp +yum install -y jsoncpp-devel +yum install -y gcc-plugin-devel +yum install -y llvm-mlir +yum install -y llvm-mlir-devel +yum install -y llvm-devel +``` +#### 安装插件框架服务端依赖软件 +```shell +yum install -y grpc +yum install -y grpc-devel +yum install -y grpc-plugins +yum install -y protobuf-devel +yum install -y jsoncpp +yum install -y jsoncpp-devel +yum install -y llvm-mlir +yum install -y llvm-mlir-devel +yum install -y llvm-devel +``` +## 安装Pin +### rpm构建 +#### 构建插件框架GCC客户端 +```shell +git clone https://gitee.com/src-openeuler/pin-gcc-client.git +cd pin-gcc-client +mkdir -p ~/rpmbuild/SOURCES +cp *.path pin-gcc-client.tar.gz ~/rpmbuild/SOURCES +rpmbuild -ba pin-gcc-client.spec +cd ~/rpmbuild/RPMS +rpm -ivh pin-gcc-client.rpm +``` +#### 构建插件框架服务端 +```shell +git clone https://gitee.com/src-openeuler/pin-server.git +cd pin-server +mkdir -p ~/rpmbuild/SOURCES +cp *.path pin-server.tar.gz ~/rpmbuild/SOURCES +rpmbuild -ba pin-server.spec +cd ~/rpmbuild/RPMS +rpm -ivh pin-server.rpm +``` +### 编译构建 +#### 构建插件框架GCC客户端 +```shell +git clone https://gitee.com/openeuler/pin-gcc-client.git +cd pin-gcc-client +mkdir build +cd build +cmake ../ -DMLIR_DIR=${MLIR_PATH} -DLLVM_DIR=${LLVM_PATH} +make +``` +#### 构建插件框架服务端 +```shell +git clone https://gitee.com/openeuler/pin-server.git +cd pin-server +mkdir build +cd build +cmake ../ -DMLIR_DIR=${MLIR_PATH} -DLLVM_DIR=${LLVM_PATH} +make +``` + +# 使用方法 +用户可以通过`-fplugin`和`-fplugin-arg-libpin_xxx`使能插件工具。 +命令如下: +```shell +$(TARGET): $(OBJS) + $(CXX) -fplugin=${CLIENT_PATH}/build/libpin_gcc_client.so \ + -fplugin-arg-libpin_gcc_client-server_path=${SERVER_PATH}/build/pin_server \ + -fplugin-arg-libpin_gcc_client-log_level="1" \ + -fplugin-arg-libpin_gcc_client-arg1="xxx" +``` + +为了方便用户使用,可以通过`${INSTALL_PATH}/bin/pin-gcc-client.json`文件,进行插件配置。配置选项如下: + +`path` : 配置插件框架服务端可执行文件路径 + +`sha256file` : 配置插件工具的校验文件`xxx.sha256`路径 + +`timeout` : 配置跨进程通信超时时间,单位`ms` + +编译选项: + +`-fplugin`:指定插件客户端.so所在路径 + +`-fplugin-arg-libpin_gcc_client-server_path`:指定插件服务端可执行程序所在路径 + +`-fplugin-arg-libpin_gcc_client-log_level`:指定日志系统默认记录等级,取值`0~3`。默认为`1` + +`-fplugin-arg-libpin_gcc_client-argN`:用户可以根据插件工具要求,指定其他参数。argN代指插件工具要求的参数字段。 + +# 兼容性说明 +此节主要列出当前一些特殊场景下的兼容性问题。本项目持续迭代中,会尽快进行修复,也欢迎广大开发者加入。 +* 插件框架在`-flto`阶段使能时,不支持使用`make -j`多进程编译。建议改用`make -j1`进行编译。 diff --git a/docs/zh/tools/community_tools/virtualization/euler_launcher/_toc.yaml b/docs/zh/tools/community_tools/virtualization/euler_launcher/_toc.yaml index 5eed95f335793377960a708b7f0e1a9396afade5..d94a686b1d172c386bf0b72bb1119c25a47e32f7 100644 --- a/docs/zh/tools/community_tools/virtualization/euler_launcher/_toc.yaml +++ b/docs/zh/tools/community_tools/virtualization/euler_launcher/_toc.yaml @@ -5,6 +5,6 @@ sections: - label: 概述 href: ./overall.md - label: 在Windows下安装与运行EulerLauncher - href: ./win-user-manual.md + href: ./win_user_manual.md - label: 在MacOS下安装与运行EulerLauncher - href: ./mac-user-manual.md + href: ./mac_user_manual.md diff --git a/docs/zh/tools/community_tools/virtualization/euler_launcher/mac-user-manual.md b/docs/zh/tools/community_tools/virtualization/euler_launcher/mac_user_manual.md similarity index 100% rename from docs/zh/tools/community_tools/virtualization/euler_launcher/mac-user-manual.md rename to docs/zh/tools/community_tools/virtualization/euler_launcher/mac_user_manual.md diff --git a/docs/zh/tools/community_tools/virtualization/euler_launcher/win-user-manual.md b/docs/zh/tools/community_tools/virtualization/euler_launcher/win_user_manual.md similarity index 100% rename from docs/zh/tools/community_tools/virtualization/euler_launcher/win-user-manual.md rename to docs/zh/tools/community_tools/virtualization/euler_launcher/win_user_manual.md diff --git a/docs/zh/tools/desktop/dde/_toc.yaml b/docs/zh/tools/desktop/dde/_toc.yaml index f59a438adcbe01006407ac1f2e30790eaebac08f..7e4add2629d56f6a1025f023b0042cc1a54fb2dd 100644 --- a/docs/zh/tools/desktop/dde/_toc.yaml +++ b/docs/zh/tools/desktop/dde/_toc.yaml @@ -2,6 +2,8 @@ label: DDE用户指南 isManual: true description: 安装并使用 DDE 桌面环境 sections: + - label: DDE概述 + href: ./dde_installation1.md - label: 安装 DDE href: ./dde_installation.md - label: 使用 DDE diff --git a/docs/zh/tools/desktop/gnome/_toc.yaml b/docs/zh/tools/desktop/gnome/_toc.yaml index efdb46b5e0f97ddd34c1f7cb00595a258dbbf6a6..e9d3724f626796e1d68d96e3810e9a51d4ad3325 100644 --- a/docs/zh/tools/desktop/gnome/_toc.yaml +++ b/docs/zh/tools/desktop/gnome/_toc.yaml @@ -2,6 +2,8 @@ label: Gnome用户指南 isManual: true description: 安装并使用 Gnome 桌面环境 sections: + - label: Gnome + href: ./gnome.md - label: 安装 Gnome href: ./gnome_installation.md - label: 使用 Gnome diff --git a/docs/zh/tools/desktop/kiran/_toc.yaml b/docs/zh/tools/desktop/kiran/_toc.yaml index 4ee827a9500cb1f0cea9772d11c8b78aa9c9c732..f81b6a49255d56f366ef1bc6aac76f74e5cffe9e 100644 --- a/docs/zh/tools/desktop/kiran/_toc.yaml +++ b/docs/zh/tools/desktop/kiran/_toc.yaml @@ -2,6 +2,8 @@ label: Kiran用户指南 isManual: true description: 安装并使用 Kiran 桌面环境 sections: + - label: Kiran + href: ./kiran.md - label: 安装 Kiran href: ./kiran_installation.md - label: 使用 Kiran diff --git a/docs/zh/tools/desktop/ukui/_toc.yaml b/docs/zh/tools/desktop/ukui/_toc.yaml index 253f465b0c87999ee15d72d34b7065b698e316c5..d18776361c1508f783cb56417eff2967f60e0884 100644 --- a/docs/zh/tools/desktop/ukui/_toc.yaml +++ b/docs/zh/tools/desktop/ukui/_toc.yaml @@ -2,6 +2,8 @@ label: UKUI用户指南 isManual: true description: 安装并使用 UKUI 桌面环境 sections: + - label: UKUI + href: ./ukui.md - label: 安装 UKUI href: ./ukui_installation.md - label: 使用 UKUI diff --git a/docs/zh/tools/devops/EulerMaker/_toc.yaml b/docs/zh/tools/devops/EulerMaker/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d3fea3174a5aaef13b6936e65a464774070b4234 --- /dev/null +++ b/docs/zh/tools/devops/EulerMaker/_toc.yaml @@ -0,0 +1,8 @@ +label: eulermaker +isManual: true +description: eulermaker +sections: + - label: eulermaker 快速入门 + href: ./eulermaker_user_guide.md + - label: eulermaker 使用 + href: ./merge_configs.md diff --git "a/docs/zh/tools/devops/EulerMaker/EulerMaker\347\224\250\346\210\267\346\214\207\345\215\227.md" b/docs/zh/tools/devops/EulerMaker/eulermaker_user_guide.md similarity index 100% rename from "docs/zh/tools/devops/EulerMaker/EulerMaker\347\224\250\346\210\267\346\214\207\345\215\227.md" rename to docs/zh/tools/devops/EulerMaker/eulermaker_user_guide.md diff --git a/docs/zh/tools/devops/EulerMaker/merge-configs.md b/docs/zh/tools/devops/EulerMaker/merge_configs.md similarity index 100% rename from docs/zh/tools/devops/EulerMaker/merge-configs.md rename to docs/zh/tools/devops/EulerMaker/merge_configs.md diff --git a/docs/zh/tools/devops/EulerPipeline/_toc.yaml b/docs/zh/tools/devops/EulerPipeline/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..334826b737abd056627761a515d5f3a1c0820b9c --- /dev/null +++ b/docs/zh/tools/devops/EulerPipeline/_toc.yaml @@ -0,0 +1,12 @@ +label: eulerpipeline +isManual: true +description: eulerpipeline +sections: + - label: eulerpipeline 用户指南 + href: ./eulerpipeline_user_guide.md + - label: v1.0 语法说明文档 + href: ./v1.0_grammar.md + - label: v1.1 语法说明文档 + href: ./v1.1_grammar.md + - label: kernel-ci + href: ./kernel_ci_guide.md diff --git "a/docs/zh/tools/devops/EulerPipeline/EulerPipeline\347\224\250\346\210\267\346\214\207\345\215\227.md" b/docs/zh/tools/devops/EulerPipeline/eulerpipeline_user_guide.md similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/EulerPipeline\347\224\250\346\210\267\346\214\207\345\215\227.md" rename to docs/zh/tools/devops/EulerPipeline/eulerpipeline_user_guide.md diff --git a/docs/zh/tools/devops/EulerPipeline/kernel-ci-guide.md b/docs/zh/tools/devops/EulerPipeline/kernel_ci_guide.md similarity index 98% rename from docs/zh/tools/devops/EulerPipeline/kernel-ci-guide.md rename to docs/zh/tools/devops/EulerPipeline/kernel_ci_guide.md index 7003bb6f0be483acd9aae4dcb46ac620a2f05192..cfa73f5c828b135a99369f9d9b0a771876713d21 100644 --- a/docs/zh/tools/devops/EulerPipeline/kernel-ci-guide.md +++ b/docs/zh/tools/devops/EulerPipeline/kernel_ci_guide.md @@ -230,7 +230,7 @@ vars: 参考文档: -[如何设置 webhook 触发条件](EulerPipeline用户指南.md) +[如何设置 webhook 触发条件](eulerpipeline_user_guide.md) **(2)webhook 流水线未触发** diff --git a/docs/zh/tools/devops/EulerPipeline/v1.0_grammar.md b/docs/zh/tools/devops/EulerPipeline/v1.0_grammar.md new file mode 100644 index 0000000000000000000000000000000000000000..0a1cbb62199a2c7c6b9b62b47687a72df59ac98d --- /dev/null +++ b/docs/zh/tools/devops/EulerPipeline/v1.0_grammar.md @@ -0,0 +1,1065 @@ +# 从零开始编写workflow.yaml + +workflow,即流水线,是一连串具备一定串并联关系的任务组合,描述一连串的任务之间存在的依赖关系、输入输出参数,以及整个流水线的触发条件。 + +不同版本具备不同的语法规则,从零编写和学会workflow的声明方法请详阅对应版本的文档,避免无法正常解析。 + +## 版本信息 + +| 版本 | v1.0 | +| -------- | ------------------------------------- | +| 维护者 | Ethan-Zhang() | +| 创建时间 | 2023-09-30 | +| 是否废弃 | 否 | + +## 1. 语法特性 + +流水线通过YAML描述,描述文件的YAML语法规则基于YAML 1.2版本,书写时需要基于YAML 1.2支持的书写方式进行书写。后文中提及的语法特性是描述的基于此之上的解析规则,不涉及YAML 1.2语法的说明。 + +> YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化标准,它被广泛用于配置文件、数据交换语言、云计算等场景。YAML 1.2 是 YAML 的最新版本,于 2009 年发布。 +> +> 相比于之前的版本,做了一些重要的改进和修正,包括: +> +> - 更严格的类型转换规则,以避免一些常见的类型转换错误。 +> - 支持 JSON,即任何有效的 JSON 文件也是一个有效的 YAML 1.2 文件。 +> - 更好的 Unicode 支持。 +> +> YAML 1.2 的官方文档可以在以下链接找到:[YAML 1.2 官方文档](http://yaml.org/spec/1.2/spec.html)。这份文档详细地描述了 YAML 1.2 的所有特性和语法规则。 + +### 1.0. 编码风格 + +- 键命名风格 + + 为使流水线描述文档风格统一,建议所有的键命名均采用"lower_case"的命名方式,尽量不使用大写字符,如下示例: + + ```yaml + this_is_a_key: value + jobs.this_is_a_job: job + ``` + + 注意:命名风格不等于命名规则,如果不遵循建议的键命名风格并不会出现错误。 + +- 一级key声明风格 + + 一级key的含义为整个YAML文档的第一级键,虽然第一级键无论以何种顺序排列不会影响解析结果,但基于统一风格的出发点考虑,建议用户按照如下顺序对一级key进行排列,且一级key之间通过一行空行间隔,如下示例: + + ```yaml + # 版本声明,可以不存在 + version: + + # 流水线命名 + name: + + # 流水线触发设置,可以不存在 + on: + + # 流水线变量,可以不存在 + vars: + + # 流水线额外事件声明,可以不存在 + events.xxx: + + # 流水线job声明,至少需要声明一个job + jobs.xxx: + + # 流水线控制流说明 + sequence: + xxx: + ``` + + 对于本版本流水线语法而言,一级key仅识别上述6类关键字,在这七种关键字之外的一级key将被忽略。如果某个关键字不存在,比如vars,剩余关键字建议仍保持上述先后顺序排列。 + + 对于关键字的含义和详细语法说明见后文。 + +- 每行文本长度 + + 为了保持良好的可读性,建议每行文本长度不要超过**80**个字符。这是一种常见的编程规范,可以使代码在大多数编辑器和终端中看起来更清晰。但这并不是强制性的规定,根据实际情况和个人习惯,可以适当调整。 + + 对于长文本,可以利用YAML的特性转行声明,如下示例: + + ```yaml + # 通过"|"语法保留换行符"\n" + key: | + this is a long long story, + you could learn it step by step. + # key = "this is a long long story,\nyou could learn it step by step." + + # 通过"|+"语法保留所有换行符"\n" + key: |+ + this is a long long story, + you could learn it step by step. + + + # key = "this is a long long story,\nyou could learn it step by step.\n\n\n" + + # 通过"|-"语法,去除末尾换行符"\n" + key: |- + this is a long long story, + you could learn it step by step. + + + # key = "this is a long long story,\nyou could learn it step by step." + + # 通过">"语法,虽然内容书写存在换行,但解析后的内容去除换行,以空格代替 + key: > + https://repo1/ + https://repo2/ + # key = "https://repo1/ https://repo2" + ``` + + 更多的说明请参考YAML1.2官方文档(见 **章节1. 语法特性** 开头) + +### 1.1. 基本声明 + +基本声明包含**version**与**name**两个一级key,前者用以锚定语法解析版本,后者用以标识流水线名称。 + +#### 1.1.1. 语法版本声明 + +workflow支持多版本语法解析,对于不声明version的workflow而言,采用默认版本语法(v1.0)进行解析。 +声明版本通过关键字version定义: + +```yaml +# 一般情况下,version会被声明在workflow.yaml的顶部 +# 但version的位置并不会影响解析,确保version并非嵌套于其他key下即可 + +version: v1.0 +``` + +根据声明的version的不同,请查阅不同版本的语法特性介绍。 + +#### 1.1.2. 流水线命名 + +无论在什么版本,workflow的名字均由name字段定义。流水线的名字不要求唯一,可以是任意**字符串**。 + +name为一定需要定义的key,如果流水线yaml中缺少这个key解析器将不予通过。 + +```yaml +version: v1.0 + +name: my workflow +``` + +### 1.2. 触发条件定义 + +#### 1.2.1. workflow支持三种触发方式 + +- 手动触发: 基本的触发方式,不传递触发事件数据的方式,触发后将提交所有不存在依赖的任务 +- 定时触发: 周期性自动触发方式,通过设定时间条件,系统自动触发。 +- webhook触发: git仓库配置服务的webhook回调地址等信息,通过webhook回调请求自动触发。 + + 定时触发和webhook触发方式通过关键字"on"定义,如果不需要这两种触发方式,on可以不声明。 + + 示例: + +```yaml + version: v1.1 + + name: workflow + + on: + # webhook触发事件定义 + - type: webhook/pr + git_repo: https://gitee.com/openeuler/radiaTest.git + branch: master + # 定时触发事件定义 + - type: cron + crontab: 0 15 10 ? * MON-FRI + + other_keys: other_values +``` + +#### 1.2.2. webhook触发 + + webhook事件分为webhook/pr,webhook/push,webhook/note,webhook/issue四种类型。 + +- PullRequest类事件 + + 声明的事件键值对必须包含type(webhook/pr),git_repo(仓库地址),branch(仓库分支),action(场景,共8类) + + 即当对应的仓库分支存在PullRequest相关事件时,均会触发此流水线,包括新建PR/删除PR/合入PR/...等事件。 + + 如果需要对PR事件进行更细致的筛选,用户可以指定action进行过滤。 + +- Push类事件 + + 声明的事件键值对必须包含type(webhook/push),git_repo(仓库地址),branch(仓库分支) + + 即当对应的仓库分支被推送更新后,均会触发此流水线。 + +- 评论类事件 + + 声明的事件键值对必须包含type(webhook/note),git_repo(仓库地址),branch(仓库分支,仅支持PullRequest场景存在),notable_type(评论主体),notes(评论钩子) + + 即当对应的仓库分支的指定被评论主体(如PullRequest作为被评论主体)并且评论内容能够匹配评论钩子时,会触发此流水线。 + +- Issue类事件 + + 声明的事件键值对必须包含type(webhook/issue),git_repo(仓库地址),state(问题单状态) + + 即当对应的仓库分支存在Issue相关事件时,均会触发此流水线,包括新建issue/删除issue/...等事件。 + + state提供了对issue的场景细分能力,通过配置状态可以拆分不同场景。 + + webhook事件的声明支持矩阵式声明方式,从而帮助减少重复描述,如下所示: + +```yaml +on: + - type: webhook/note + git_repo: https://gitee.com/openeuler/radiaTest.git + branch: + - master + - dev + - test + notable_type: + - PullRequest + notes: + - /retry + - /retest +``` + +这个例子意味着多个分支下的PullReques被评论了"/retry"或"/retest"都会触发此流水线 + +以上关于webhook讲解较为粗略,建议阅读更详细的webhook配置文档,以便更好的使用: + + + +特别说明: 如果不仅仅需要触发,还需要在流水线中引用(该特性将在后文详述)触发事件中的字段,建议编辑者通过查阅不同git仓库的webhook文档了解。 + +1. Gitee: + +2. Github: + +3. Gitlab: + +#### 1.2.3. 定时触发事件 + + 当配置的触发事件type字段为[cron,interval,date]值时,说明该事件为定时事件,对于某一个定时任务,type仅可为其中某一个取值,以下为简单示例: + +```yaml +on: + - type: cron + crontab: 0 15 10 ? * MON-FRI + - type: interval + seconds: 60 + - type: date + run_date: 2024-01-01 00:00:00 + - type: date + run_date: 164900500 +``` + +以上配置,意味着时间满足任意一个场景时,流水线被执行。 + +关于三种类型的定时参数,参看以下官方文档配置即可: + + + + + + + +### 1.3. 流水线全局变量定义 + +流水线的全局变量通过vars字段声明,当前版本支持字符串、数组、对象(字典/哈希表)三种格式。 + +```yaml +version: v1.0 + +name: workflow + +vars: + # 字符串 + varA: string + # 数组 + varB: + - elementA + - elementB + # 对象(支持多级结构嵌套) + varC: + keyA: valueA + # 嵌套数组 + keyB: + - valueB1 + - valueB2 + # 嵌套对象 + keyC: + keyC1: +``` + +流水线变量定义的目的在于定义整个流水线可以利用的若干变量(常量),定义后的变量可以被流水线任意阶段任务引用,从而避免每个任务对于该变量的重复冗余声明。 + +举例而言,假设某个流水线的10个任务均需要上述案例的varB变量作为Input(输入/入参),则只需要引用varB赋予给对应参数即可。 + +具体的引用方式详见后文对于引用语法的介绍。 + +如果一个流水线不需要定义任何流水线变量时,vars关键字可以不存在: + +```yaml +version: v1.0 + +name: workflow + +other_keys: other_values +``` + +### 1.4. 额外事件声明 + +如果流水线内部的某个任务除了依赖于前置的任务外,还实际依赖于额外的webhook事件,或者依赖于一些额外的事件,则需要对这些额外的事件进行预声明。 + +用户通过events.xxx模式的key进行额外事件的声明,"xxx"为额外事件的命名。 + +**注意:**大多数情况下,用户不需要定义额外事件。额外事件不支持定时以及手动事件声明。 + +#### 1.4.1. webhook事件 + +当定义额外webhook事件时,该事件需求定义的key-values与上文流水线触发设置中介绍的一致,如下示例: + +```yaml +version: v1.0 + +name: workflow + +vars: + +events.eventA: + type: webhook/pr + git_repo: https://gitee.com/openeuler/repository.git + branch: + - master + - dev +``` + +#### 1.4.2. job事件 + +除了webhook事件外,额外事件可以定义一种新的事件类型,即job类型事件。job类型事件分为stage和step两个子类,如下示例: + +```yaml +version: v1.0 + +name: workflow + +vars: + +# 额外事件A - jobA进入boot阶段 +events.eventA: + type: job/stage + job: jobA + job_stage: boot + +# 额外事件B - jobA进入名为testcase001的步骤 +events.eventB: + type: job/step + job: jobA + job_step: testcase001 + +# 额外事件C - jobA进入finish阶段且incomplete +events.eventC: + type: job/stage + job: jobA + job_stage: finish + job_health: incomplete +``` + +job类型的事件除了type和job必填外,其他字段可以根据需求从job类型事件的全集keys中选取(job_stage/job_health/job_step/nickname)。 + +定义后的job类型事件如何使用见后文任务定义和控制流声明章节。 + +### 1.5. 任务定义 + +#### 1.5.1. 基础概念 + +对于所有流水线涉及的任务,都需要通过jobs.xxx模式的一级key进行一次声明,主要目的为定义任务的Input(输入/入参),且每个被声明job的value均要求为对象(字典/哈希表)格式(或者为空)。 + +jobs.xxx类关键字常见的两种二级关键字为**defaults**和**overrides**,这两个二级key可以不声明,但如果具备value,则value必须为对象(字典/哈希表)格式,用以声明待提交的job即为模板所具备的所有参数。 + +如下所示: + +```yaml +name: workflow + +vars: + +# 空value的job缺省声明 +jobs.jobA: + +# 空defaults value, 空overrides value声明 +jobs.jobB: + defaults: + overrides: + +# 缺省defaults,overrides非空声明 +jobs.jobB: + overrides: + # 字符串 + keyA: valueA + # 数组 + keyB: + - valueB1 + - valueB2 + # 对象(支持多级嵌套) + keyC: + keyC1: valueC1 + keyC2: + - valueC2 +``` + +除了嵌套的声明方式,流水线语法支持扁平化的方式减少声明的难度,如下示例: + +```yaml +jobs.jobB: + overrides: + keyC.keyC1: valueC1 + +# 等价于 +jobs.jobB: + overrides: + keyC: + keyC1: valueC1 +``` + +**注意:**这种等价仅于defaults和overrides下有效。 + +defaults和overrides意义如字面含义所示,defaults中定义的key-values如果原job中存在对应key,则以原job中的value为实际提交value;overrides中定义的key-values将无条件覆盖到原job的值提交。 + +对于job的概念,以及原job.yaml的内容,建议查阅compass-ci/lkp-tests的文档进行了解: + +1. 如何向compass-ci/lkp-tests新增job: +2. job的定义: +3. job示例: + +#### 1.5.2. 任务别名定义 + +通常情况下,jobs.xxx模式中xxx即为被声明的job名,如如果计划声明一个ltp-bm的任务,则声明jobs.ltp-bm。但在某些流水线中,可能同一个任务需要运行多次,且任务实际的入参并不相同,因此设计多次声明的可能。在这种情况下,则需要利用"别名"语法特性。 + +别名的声明方式如下示例: + +```yaml +jobs.ltp-bm:first-ltp-bm: + +jobs.ltp-bm:second-ltp-bm: +``` + +这两个被声明的任务实际指向的都是ltp-bm这同一个job,但是因为别名所以流水线会将其看作两个不同的个体。 + +#### 1.5.3. 额外事件依赖声明 + +除了defaults和overrides两种常用的二级keys外,jobs.xxx还支持声明depends字段,本字段用以声明额外依赖(额外事件,即上文**章节1.3**内容的应用) + +```yaml +events.eventA: + xxx: xxx + +events.eventC: + xxx: xxx + +jobs.jobA: + defaults: + default_keyA: valueA + overrides: + override_keyB: valueB + depends: + # 额外依赖于上文中通过events.eventA声明的事件 + # 只需要写key:的形式,不需要填value,填了也会被忽略 + eventA: + # 且额外依赖于上文中通过events.eventC声明的事件 + eventC: +``` + +对于jobA而言,depends字段相当于定义了若干AND逻辑关系的额外依赖,当且仅当所有依赖的事件均发生后jobA才会被提交执行。 + +当depends不声明的时候,jobA的依赖仅取决于其处于控制流的位置(详见后文控制流声明),否则为控制流依赖于额外依赖的逻辑与结果。 + +```yaml +submit_jobA = [jobA's depends parsed from controlflow] AND [jobA's depends defined from 'depends'] +``` + +### 1.6. 控制流声明 + +#### 1.6.1. 基础特性 + +流水线任务的串并行结构通过控制流声明对已通过一级key”jobs.xxx“预声明的各个任务进行编排,通过一级key“sequence”定义,如下所示: + +```yaml +version: v1.0 + +name: workflow + +# jobA:first进入boot阶段 +events.eventA: + type: job/stage + job: jobA + nickname: first + job_stage: boot + +# 定义别名为first的jobA +jobs.jobA:first: + overrides: + +jobs.jobB: + overrides: + # 额外依赖于"jobA:first进入boot阶段"事件 + depends: + eventA: + +# 控制流声明 +sequence: + # 声明并行子结构 + parallel: + # jobA:first和jobB并行 + jobA:first: + jobB: +``` + +控制流声明中,存在sequence、parallel、matrix三种关键字,除了关键字外,所有key都会被认作对已预声明的job的引用。对于所有job的引用,需要确保引用的job全称(包含别名)在流水线一级key中存在(以jobs.xxx预声明)。如果sequence中引用了jobA,但流水线一级key中缺少jobs.jobA这个key,解析器将不会给予通过。 + +**注意:**控制流声明的根(一级key)必须为sequence。 + +- 关键字sequence + + sequence意在声明一个串行结构,在sequence下的所有key将被解析为按声明顺序(从上到下)排列的一连串成员,每一个成员必然依赖于其上面一个的成员。 + + ```yaml + sequence: |---------| |---------| + jobA: = | jobA | =========> | jobB | + jobB: |---------| |---------| + ``` + + sequence和job一样,可以通过sequence:xxx:的方式定义别名,该别名仅在一级串行子结构中存在实际意义,非一级子结构的别名仅起标识作用,具体参考下文stage声明说明。 + + ```yaml + # 根sequence,不可添加别名,为控制流声明关键字 + sequence: + # 一级串行子结构,别名为seqA + sequence:seqA: + # 二级串行子结构,别名为seqB + sequence:seqB: + ``` + + 如上所示,sequence的key并不一定只能是job,当sequence内部的key同样是sequence时,意味着串行结构的嵌套。当然,对于纯sequence的嵌套是不具备实际意义的,仅为分组标识,单纯的串行嵌套相当于没有嵌套。 + + ```yaml + sequence: < - - - - - seqA - - - - - - > + sequence:seqA: |---------| |---------| |---------| + jobA: = | jobA | =========> | jobB | =========> | jobC | + jobB: |---------| |---------| |---------| + jobC: + ``` + +- 关键字parallel + + parallel意在声明一个并行结构,在parallel下的所有key将被解析为并列的若干成员,每一个成员都依赖于整个parallel都前置依赖,互相之间不存在控制流定义的依赖关系(可以存在通过depends额外声明的依赖,额外跳线依赖不被控制流声明控制) + + ```yaml + ___________|___________ + sequence: | | + parallel: |---------| |---------| + jobA: = | jobA | | jobB | + jobB: |---------| |---------| + |______________________| + | + ``` + + 注意,parallel一定不可以声明在workflow.yaml的一级key,对于控制流声明而言,根key一定是sequence。 + + 和sequence一致,parallel也可以以parallel:xxx:的方式定义别名,该别名同样仅在一级并行子结构中存在实际含义,非一级子结构的别名仅起标识作用,具体参考下文stage声明说明。 + + 同理,单纯的并行嵌套相当于没有嵌套,如下示例,等价于jobA、jobB、jobC三者并行。 + + ```yaml + ___ _________________|_______________ + sequence: | | _________|__________ ___ + parallel:prlA: | |---------| |----|----| |----|----| | + jobA: = prlA | jobA | | jobB | | jobC | prlB + parallel:prlB: | |---------| |----|----| |----|----| | + jobB: | | |__________________| _|_ + jobC: _|_ |_______________________________| + | + ``` + +#### 1.6.2. job的补充声明 + +由上文可知,job无论是defaults、overrides还是depends的声明,可以声明在jobs.xxx这个key之下,这也是比较推荐的用法。但其实在控制流声明中,用户可以对job进行补充声明,补充的声明将深层update到预定义的job声明中,如下所示: + +```yaml +name: workflow + +jobs.jobA: + defaults: + keyA: valueA + overrides: + keyB: + keyB1: valueB1 + keyB2: + keyB21: valueB21 + +sequence: + jobA: + overrides: + # 与上文中jobs下的overrides特性相同 + # 采用keyB.keyB2.keyB21和keyB.keyB2.keyB22为key,即 + # keyB.keyB2.keyB21: valueB21_new + # keyB.keyB2.keyB22: valueB22 + # 与下述声明方式等价 + keyB: + keyB2: + keyB21: valueB21_new + keyB22: valueB22 +``` + +在这个例子中,sequence中将jobA的预定义的overrides下的keyB21重新定义为valueB2_new,且在keyB2下新创建了一个keyB22的键值对。 + +补充声明特性以对象(字典/哈希表)的递归update实现,一定为控制流中的定义覆写jobs的预定义。 + +### 1.7. 流水线阶段(stage)声明 + +在**章节1.6. 控制流声明**中有提及,无论是sequence还是parallel分别可以通过sequence:xxx:和parallel:xxx:的形式声明别名。流水线web服务将基于下述规则划分控制流的不同阶段,规则如下所示: + +```yaml +1. 当且仅当sequence和parallel为根sequence下的一级结构时,其别名等同于阶段名。 +2. 当根sequence下存在job名时(非sequence也非parallel),该job以自身job的别名作为阶段名(若无别名则以job名)独立被识别为一个阶段。 +3. 阶段存在向后包裹的特点,直到下一个有效阶段声明前,所有结构属于同一个阶段。 +3. 沿着根sequence向下检索,在遇到第一个有效的stage命名之前,所有的结构均属于“未命名”阶段。 +sequence: + 阶段(stage) + parallel: ——| + job0: > 未命名 + job1: ——| + + job2:build-job: —— > build-job + + jobA: ——| + sequence: > jobA + jobB: ——| + + parallel:prlA: ——| + jobC: | + jobD: | + sequence:seqB: > prlA + jobE: | + jobF: ——| + + sequence:seqC: —— > seqC + jobG: ——| +``` + +p.s. 阶段仅会影响web端的渲染,控制流的实际意义不依赖于阶段的定义,换而言之,如果不考虑可视化的便利性,可以不对阶段命名深究。 + +### 1.8. Matrix语法特性 + +#### 1.8.1. 基本概念 + +用户可以在控制流**串行结构的任意位置**可以插入一个matrix关键字,用以混入(Mixin)局部的矩阵(参数组合),从而改变后续任务的上下文(Context)。 + +matrix关键字同样可以声明别名,用以避免对象(字典/哈希表)的重key异常,但除了区别外没有实际意义。 + +**注意:** matrix不能直接声明在parallel关键字下,只能声明在sequence关键字下。 + +matrix的声明结构一定为如下格式: + +```yaml +sequence: + matrix: + paramA: + - valueA1 + - valueA2 + - valueAn + paramB: + - valueB1 + - valueB2 +``` + +即,matrix是一个对象(字典/哈希表),且所有一级value均为数组(列表)。 + +上述例子中matrix的含义为,对所处位置的流水线上下文混入矩阵,其中paramA有三种可能的取值,paramB有两种可能的取值,即共3*2共6种取值组合。 + +```yaml +matrix: _ + paramA: | 1. paramA = valueA1; paramB = valueB1 + - valueA1 | 2. paramA = valueA1; paramB = valueB2 + - valueA2 | 3. paramA = valueA2; paramB = valueB1 + - valueAn => { 4. paramA = valueA2; paramB = valueB2 + paramB: | 5. paramA = valueAn; paramB = valueB1 + - valueB1 |_ 6. paramA = valueAn; paramB = valueB2 + - valueB2 +``` + +当流水线上下文混入(Mixin)一个局部的矩阵后,流水线的上下文将会根据参数取值组合的种数裂解成多个“分支”,每一个“分支”的上下文依据其中一种取值组合。当这个分支之后的任务直接引用上下文中的paramA时,会根据当前上下文的paramA取值,后续任务的驱动也会与其他”分支“独立。 + +举例而言: + +```yaml +sequence: + jobA: + parallel: + jobB: + sequence: + matrix: + arch: + - aarch64 + - x86_64 + jobC: + jobD: +``` + +根据 **章节1.5. 控制流声明** 的介绍,不难看出,这个描述声明的结构如下: + +```yaml + ________ + | | + |-------| jobB |----------------------------| + | |________| | + ________ | | ________ + | | | | | | +-------| jobA |-------| |-------| jobD |--------> + |________| | | |________| + | ________ | + | / \ | | | + |-------| matrix |-------| jobC |---------| + \ / |________| + 1. arch = aarch64; + 2. arch = x86_64 +``` + +对于jobA和jobB,如果他们在被提交的时候引用“当前上下文”(所谓当前为被提交的时间点)中的arch变量,他们将取不到任何值。 + +p.s. 关于引用的概念详见**章节1.6.** + +而对于jobC和jobD而言,他们实际上被裂解到了并行的两个“分支”上,其中一个分支上下文中的arch是aarch64而另一个分支上的arch是x86_64,即上述控制流结构等价于: + +```yaml +1. arch = aarch64; + ________ + | | + |----------| jobB |---------| + | |________| | + ________ | | ________ + | | | | | | +-------| jobA |-------| |-------| jobD |--------> + |________| | | |________| + | ________ | aarch64 + | | | | + |----------| jobC |---------| + |________| + aarch64 + +2. arch = x86_64 + ________ + | | + |----------| jobB |---------| + | |________| | + ________ | | ________ + | | | | | | +-------| jobA |-------| |-------| jobD |--------> + |________| | | |________| + | ________ | x86_64 + | | | | + |----------| jobC |---------| + |________| + x86_64 +``` + +这两个矩阵参数组合“分支”共享jobA和jobB的前置依赖,但aarch64的jobD只会依赖于aarch64的jobC,即各分支依赖独立。 + +这样避免了在很多场景下的相同结构的重复声明。 + +#### 1.8.2. 矩阵x矩阵 + +流水线控制流支持多matrix在不同位置声明,在这种情况下,下文矩阵受到上文矩阵影响,下文矩阵实际为上下文矩阵相乘的结果,如下示例: + +```yaml +sequence: + matrix:m1: + os: + - openeuler + os_version: + - 20.03 + - 22.03-LTS + jobA: + matrix:m2: + arch: + - aarch64 + - x86_64 + jobB: +``` + +对于这个例子而言,jobA共有两种上下文分支,而jobB共有4种,如下所示: + +```yaml + ________ ________ + | | | | +--------------| jobA |-----------------------------------------| jobB |-----------------------> + |________| |________| + 1. os=openeuler; os_version=20.03 1. os=openeuler;os_version=20.03;arch=aarch64; + 2. os=openeuler; os_version=22.03-LTS 2. os=openeuler;os_version=20.03;arch=x86_64; + 3. os=openeuler;os_version=22.03-LTS;arch=aarch64; + 4. os=openeuler;os_version=22.03-LTS;x86_64; +``` + +因此对于声明此例控制流的关于jobA和jobB的流水线,实际jobA将会被提交两次,jobB将会被提交4次,jobB的1和2分支依赖于jobA的1分支,jobB的3和4分支依赖于jobA的2分支,jobB的最终参数组合即jobA之前声明的matrix与jobB之前的matrix相乘的结果。 + +#### 1.8.3. excludes语法特性 + +matrix支持通过excludes声明排除特定的组合,如下所示: + +```yaml +sequence: + matrix: + os: + - openeuler + - centos + os_version: + - "20.03" + - 7 + excludes: + # 下述两种描述形式均可支持 + - {"os": "openeuler", "os_version": "7"} + - os: centos + os_version: "20.03" +``` + +此声明方式意为此矩阵只存在两种参数组合,即 ”os=openeuler;os_version=20.03“ 和 “os=centos;os_version=7”。 + +#### 1.8.4. 参数组合语法糖 + +同时,matrix具备一种简化excludes声明的语法糖"|",以上述样例可以改写为: + +```yaml +sequence: + matrix: + os|os_version: + - openeuler | 20.03 #有无空格或者制表符均支持 + - centos | 7 #推荐以制表符分隔,这样的声明较为直观 +``` + +### 1.9. "引用"表达式声明 + +#### 1.9.1. 基本概念 + +对于一条正在运作的流水线而言,其上下文是动态的,每执行完成一个任务,每感知到一个有效事件,“当前”上下文都会发生变化。 + +流水线运行上下文(Context)由六个固定的namespace组成: + +- vars,流水线变量空间(流水线静态变量全集) +- event,事件空间(事件数据全集) +- jobs,任务空间(前置已完成的任务数据) +- matrix,矩阵空间(当前矩阵参数组合分支的参数集合) +- depends,未满足的依赖事件清单(此namespace一般不会被引用) +- fulfilled,已履行的依赖事件清单(此namespace一般不会被引用) + +流水线不仅仅支持对定量的声明,流水线具备“引用”的语法特性,可以对“当前上下文”的变量进行引用,以及进行字符串拼接和python表达式运算。 + +“引用”由模式 ${{ xxxx }} 识别,通过"."的方式获取不同namespace下的所有value,支持下述两种使用方式: + +- 字符串拼接引用 + + ```yaml + # 取vars空间中的varA变量的值,并且与vars空间中的varB变量的值,最后通过"-"拼接 + key: ${{ vars.varA }}-${{ vars.varB }} + # 取当前矩阵参数组合的os、os_version、arch拼接命名 + project_name: my_project:${{ matrix.os }}:${{ matrix.os_version }}:${{ matrix.arch }} + ``` + + 对于这种拼接引用的方式,需要用户确保引用变量的值一定是字符串。如果实际的值不为字符串或者无法转换为字符串,那么采用这种引用声明的job很可能无法正常提交。 + +- 单引用 + + 单引用的情况下,引用表达式的结果可以为字符串、数字、数组(列表)或者哈希表(字典),不受类型影响。 + + ```yaml + # 取vars空间中的数组arrayA,作为key的值 + key: ${{ vars.arrayA }} + # 取前置已完成的jobA的输出result.arrayB,作为key的值 + key: ${{ jobs.jobA.result.arrayB }} + ``` + +**注意:**引用特性仅支持在defaults和overrides下使用,即jobs.xxx下的defaults和overrides或者sequence下某个job的defaults和overrides。后续演进的语法版本中将加入"在matrix中引用vars变量"的支持。 + +#### 1.9.2. python语法支持 + +对于任意引用内部而言,在引用的变量被实际的值替换后,替换后的内容将会被当作python表达式运行,如下示例: + +```yaml +# 取多个不同namespace的变量进行数值运算 +key: ${{ vars.numA + jobs.jobA.result.success_num }} + +# 调用python datetime模块,获取年月日并拼接字符串 +project_name: ${{ vars.my_name }}-${{ datetime.datetime.now().year }}-{{ datetime.datetime.now().month }}-${{ datetime.datetime.now().day }} + +# 调用字符串处理方法,对字符串进行大小写转换,split等操作 +key: ${{ vars.stringA.lower() }} +key: ${{ vars.stringA.split(':') }} + +# 单纯通过python表达式计算数值,不对变量进行引用,如计算一天一共有多少秒 +key: ${{ 24*60*60 }} +``` + +支持的非内置Python模块: + +| 模块名 | 作用 | 官方文档链接 | +| -------- | ---------------------- | ----------------------------------------------- | +| re | 提供正则表达式匹配操作 | | +| math | 提供数学运算函数 | | +| time | 提供时间相关函数 | | +| datetime | 提供日期和时间处理函数 | | + +支持的安全内置Python模块: + +| 类型 | 模块名 | +| ------------ | ------------------------------------------------------------ | +| 数据类型 | object, bool, int, float, complex, str, bytes, bytearray, tuple, list, set, frozenset, dict | +| 数学运算 | abs, round, pow, divmod | +| 迭代器 | iter, next | +| 集合操作 | len, sum, min, max, all, any, map, filter, zip, enumerate, sorted, reversed | +| 数字转换 | bin, hex, oct | +| 字符串格式化 | ascii, repr, chr, ord, format | +| 变量和内存 | dir, locals, globals, id, hash | +| 类型检查 | isinstance, issubclass, callable | + +### 1.10. 特殊语法 + +#### 1.10.1. 具有特殊含义配置项的变量 + +**group_sync_exec_id: 1** + +字段说明:当前变量值为1时,表明每次运行流水线会同步workflow_exec.id的值给group_id这个变量,这个配置项必须在group_id变>量存在的时候才起作用,不然只是一个普通变量 + +```yaml +vars: + # 当前流水线编号 + group_id: workflow_exec.200005545959096344 + group_sync_exec_id: 1 +``` + +## 2. workflow.yaml完整示例 + +以下是一个完整的workflow.yaml文件示例: + +```yaml +# 语法版本声明 +version: v1.0 + +# 流水线命名 +name: 每日构建 + +# 触发设置 +on: + # 设定定时触发事件,每天00:00触发 + - type: cron + week_day: + - Monday + - Tuesday + - Wednesday + - Thursday + - Friday + - Saturday + - Sunday + time: 00:00 + start_date: 2023-10-18 + +# 流水线变量设置 +vars: + eulermaker_account: account + eulermaker_password: passwd + os: os + os_version: version + +# 任务声明 +jobs.eulermaker-build-project:everything: + overrides: + project_name: ${{ vars.os }}-${{ vars.os_version }}:everything + build_type: full + build_arch: ${{ matrix.arch }} + secrets: + ACCOUNT: ${{ vars.eulermaker_account }} + PASSWORD: ${{ vars.eulermaker_password }} + testbox: vm-2p8g + +jobs.eulermaker-build-project:epol: + overrides: + project_name: ${{ vars.os }}-${{ vars.os_version }}:epol + build_type: full + build_arch: ${{ matrix.arch }} + secrets: + ACCOUNT: ${{ vars.eulermaker_account }} + PASSWORD: ${{ vars.eulermaker_password }} + testbox: vm-2p8g + +jobs.eulermaker-create-image: + overrides: + image_project_params: + pipeline_info: + pipeline_name: ${{ vars.os }}-${{ vars.os_version }}-${{ datetime.datetime.now().year }}-${{ datetime.datetime.now().month }}-${{ datetime.datetime.now().day }}-1 + group: dailybuild + category: standard + scene: cloud + image_format: qcow2 + arch: ${{ matrix.arch }} + image_config: + release_image_config: + repo_url: > + http://xxxxx/ + http://xxxx/ + http://xxx/ + http://xxxxxx/ + product: ${{ vars.os.lower() }} + version: ${{ vars.os_version }}-${{ datetime.datetime.now().year }}-${{ datetime.datetime.now().month }}-${{ datetime.datetime.now().day }} + secrets: + ACCOUNT: ${{ vars.eulermaker_account }} + PASSWORD: ${{ vars.eulermaker_password }} + testbox: vm-2p8g + +jobs.eulermaker-build-image: + overrides: + secrets: + ACCOUNT: ${{ vars.eulermaker_account }} + PASSWORD: ${{ vars.eulermaker_password }} + pipeline_id: ${{ jobs.eulermaker-create-image.result.id }} + testbox: vm-2p8g + runtime: ${{ 24*60*60 }} + +jobs.qcow2rootfs: + overrides: + qcow2rootfs.qcow2_os: ${{ jobs.eulermaker-build-image.result.product }} + qcow2rootfs.qcow2_arch: ${{ matrix.arch }} + qcow2rootfs.qcow2_version: ${{ jobs.eulermaker-build-image.result.version }} + qcow2rootfs.qcow2_url: ${{ jobs.eulermaker-build-image.result.image_link }} + qcow2rootfs.rootfs_protocol: nfs + qcow2rootfs.rootfs_server: "172.168.131.2" + qcow2rootfs.rootfs_path: os-rw + testbox: vm-2p32g + +jobs.mugen-smoke-baseinfo: + overrides: + os: ${{ jobs.qcow2rootfs.result.os }} + os_version: ${{ jobs.qcow2rootfs.result.version }} + os_mount: nfs + arch: ${{ jobs.qcow2rootfs.result.arch }} + testbox: vm-2p8g + +jobs.mugen-smoke-basic-os: + overrides: + os: ${{ jobs.qcow2rootfs.result.os }} + os_version: ${{ jobs.qcow2rootfs.result.version }} + os_mount: nfs + arch: ${{ jobs.qcow2rootfs.result.arch }} + testbox: vm-2p8g + +# 控制流声明 +sequence: + # 矩阵声明 + matrix: + arch: + - aarch64 + - x86_64 + # 并行子结构声明 + parallel:build: + eulermaker-build-project:everything: + eulermaker-build-project:epol: + # 串行子结构声明 + sequence:create-image: + eulermaker-create-image: + eulermaker-build-image: + qcow2rootfs: + parallel:AT: + mugen-smoke-baseinfo: + mugen-smoke-basic-os: +``` diff --git a/docs/zh/tools/devops/EulerPipeline/v1.1_grammar.md b/docs/zh/tools/devops/EulerPipeline/v1.1_grammar.md new file mode 100644 index 0000000000000000000000000000000000000000..354fca5b785e887d8233ffebc67baa3d06f248ad --- /dev/null +++ b/docs/zh/tools/devops/EulerPipeline/v1.1_grammar.md @@ -0,0 +1,1270 @@ +# V1.1语法说明文档 + +workflow,即流水线,是一连串具备一定串并联关系的任务组合,描述一连串的任务之间存在的依赖关系、输入输出参数,以及整个流水线的触发条件。 + +不同版本具备不同的语法规则,从零编写和学会workflow的声明方法请详阅对应版本的文档,避免无法正常解析。 + +## 版本信息 + +| 版本 | v1.1 | +| --- | --- | +| 维护者 | wanglin | +| 创建时间 | 2024-01-03 | +| 是否废弃 | 否 | + +## 1. 语法特性 + +流水线通过YAML描述,描述文件的YAML语法规则基于YAML 1.2版本,书写时需要基于YAML 1.2支持的书写方式进行书写。后文中提及的语法特性是描述的基于此之上的解析规则,不涉及YAML 1.2语法的说明。 + +> YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化标准,它被广泛用于配置文件、数据交换语言、云计算等场景。YAML 1.2 是 YAML 的最新版本,于 2009 年发布。 +> +> 相比于之前的版本,做了一些重要的改进和修正,包括: +> +> - 更严格的类型转换规则,以避免一些常见的类型转换错误。 +> - 支持 JSON,即任何有效的 JSON 文件也是一个有效的 YAML 1.2 文件。 +> - 更好的 Unicode 支持。 +> +> YAML 1.2 的官方文档可以在以下链接找到:[YAML 1.2 官方文档](http://yaml.org/spec/1.2/spec.html)。这份文档详细地描述了 YAML 1.2 的所有特性和语法规则。 + +### 1.0. 编码风格 + +- 键命名风格 + + 为使流水线描述文档风格统一,建议所有的键命名均采用"lower_case"的命名方式,尽量不使用大写字符,如下示例: + + ```yaml + this_is_a_key: value + jobs.this_is_a_job: job + ``` + + 注意:命名风格不等于命名规则,如果不遵循建议的键命名风格并不会出现错误。 + +- 一级key声明风格 + + 一级key的含义为整个YAML文档的第一级键,虽然第一级键无论以何种顺序排列不会影响解析结果,但基于统一风格的出发点考虑,建议用户按照如下顺序对一级key进行排列,且一级key之间通过一行空行间隔,如下示例: + + ```yaml + # 版本声明,可以不存在,则默认使用v1.0语法解析 + version: v1.1 + + # 流水线命名,必填 + name: + + # 流水线触发设置,可以不存在 + on: + + # 流水线变量,可以不存在 + vars: + + # 流水线额外事件声明,可以不存在 + events.xxx: + + # 流水线job声明,至少需要声明一个job + jobs.xxx: + + # 流水线控制流说明 + sequence: + xxx: + ``` + + 对于本版本流水线语法而言,一级key仅识别上述6类关键字,在这七种关键字之外的一级key将被忽略。如果某个关键字不存在,比如vars,剩余关键字建议仍保持上述先后顺序排列。 + + 对于关键字的含义和详细语法说明见后文。 + +- 每行文本长度 + + 为了保持良好的可读性,建议每行文本长度不要超过**80**个字符。这是一种常见的编程规范,可以使代码在大多数编辑器和终端中看起来更清晰。但这并不是强制性的规定,根据实际情况和个人习惯,可以适当调整。 + + 对于长文本,可以利用YAML的特性转行声明,如下示例: + + ```yaml + # 通过"|"语法保留换行符"\n" + key: | + this is a long long story, + you could learn it step by step. + # key = "this is a long long story,\nyou could learn it step by step." + + # 通过"|+"语法保留所有换行符"\n" + key: |+ + this is a long long story, + you could learn it step by step. + + + # key = "this is a long long story,\nyou could learn it step by step.\n\n\n" + + # 通过"|-"语法,去除末尾换行符"\n" + key: |- + this is a long long story, + you could learn it step by step. + + + # key = "this is a long long story,\nyou could learn it step by step." + + # 通过">"语法,虽然内容书写存在换行,但解析后的内容去除换行,以空格代替 + key: > + https://repo1/ + https://repo2/ + # key = "https://repo1/ https://repo2" + ``` + + 更多的说明请参考YAML1.2官方文档(见 **章节1. 语法特性** 开头) + +### 1.1. 基本声明 + +基本声明包含**version**与**name**两个一级key,前者用以锚定语法解析版本,后者用以标识流水线名称。 + +#### 1.1.1. 语法版本声明 + +workflow支持多版本语法解析,对于不声明version的workflow而言,采用默认版本语法(v1.0)进行解析。 +声明版本通过关键字version定义: + +```yaml +# 一般情况下,version会被声明在workflow.yaml的顶部 +# 但version的位置并不会影响解析,确保version并非嵌套于其他key下即可 + +version: v1.1 +``` + +根据声明的version的不同,请查阅不同版本的语法特性介绍。 + +#### 1.1.2. 流水线命名 + +无论在什么版本,workflow的名字均由name字段定义。流水线的名字不要求唯一,可以是任意**字符串**。 + +name为一定需要定义的key,如果流水线yaml中缺少这个key解析器将不予通过。 + +```yaml +version: v1.0 + +name: my workflow +``` + +### 1.2. 触发条件定义 + +#### 1.2.1. workflow支持三种触发方式 + +- 手动触发: 基本的触发方式,不传递触发事件数据的方式,触发后将提交所有不存在依赖的任务 +- 定时触发: 周期性自动触发方式,通过设定时间条件,系统自动触发。 +- webhook触发: git仓库配置服务的webhook回调地址等信息,通过webhook回调请求自动触发。 + + 定时触发和webhook触发方式通过关键字"on"定义,如果不需要这两种触发方式,on可以不声明。 + + 示例: + + ```yaml + version: v1.1 + + name: workflow + + on: + # webhook触发事件定义 + - type: webhook/pr + git_repo: https://gitee.com/openeuler/radiaTest.git + branch: master + # 定时触发事件定义 + - type: cron + crontab: 0 15 10 ? * MON-FRI + + other_keys: other_values + ``` + +#### 1.2.2. webhook触发 + + webhook事件分为webhook/pr,webhook/push,webhook/note,webhook/issue四种类型。 + +- PullRequest类事件 + + 声明的事件键值对必须包含type(webhook/pr),git_repo(仓库地址),branch(仓库分支),action(场景,共8类) + + 即当对应的仓库分支存在PullRequest相关事件时,均会触发此流水线,包括新建PR/删除PR/合入PR/...等事件。 + + 如果需要对PR事件进行更细致的筛选,用户可以指定action进行过滤。 + +- Push类事件 + + 声明的事件键值对必须包含type(webhook/push),git_repo(仓库地址),branch(仓库分支) + + 即当对应的仓库分支被推送更新后,均会触发此流水线。 + +- 评论类事件 + + 声明的事件键值对必须包含type(webhook/note),git_repo(仓库地址),branch(仓库分支,仅支持PullRequest场景存在),notable_type(评论主体),notes(评论钩子) + + 即当对应的仓库分支的指定被评论主体(如PullRequest作为被评论主体)并且评论内容能够匹配评论钩子时,会触发此流水线。 + +- Issue类事件 + + 声明的事件键值对必须包含type(webhook/issue),git_repo(仓库地址),state(问题单状态) + + 即当对应的仓库分支存在Issue相关事件时,均会触发此流水线,包括新建issue/删除issue/...等事件。 + + state提供了对issue的场景细分能力,通过配置状态可以拆分不同场景。 + + webhook事件的声明支持矩阵式声明方式,从而帮助减少重复描述,如下所示: + + ```yaml + on: + - type: webhook/note + git_repo: https://gitee.com/openeuler/radiaTest.git + branch: + - master + - dev + - test + notable_type: + - PullRequest + notes: + - /retry + - /retest + ``` + +这个例子意味着多个分支下的PullReques被评论了"/retry"或"/retest"都会触发此流水线 + +以上关于webhook讲解较为粗略,建议阅读更详细的webhook配置文档,以便更好的使用: + + + +特别说明: 如果不仅仅需要触发,还需要在流水线中引用(该特性将在后文详述)触发事件中的字段,建议编辑者通过查阅不同git仓库的webhook文档了解。 + +1. Gitee: + +2. Github: + +3. Gitlab: + +#### 1.2.3. 定时触发事件 + + 当配置的触发事件type字段为[cron,interval,date]值时,说明该事件为定时事件,对于某一个定时任务,type仅可为其中某一个取值,以下为简单示例: + + ```yaml +on: + - type: cron + crontab: 0 15 10 ? * MON-FRI + - type: interval + seconds: 60 + - type: date + run_date: 2024-01-01 00:00:00 + - type: date + run_date: 164900500 + ``` + +以上配置,意味着时间满足任意一个场景时,流水线被执行。 + +关于三种类型的定时参数,参看以下官方文档配置即可: + + + + + + + +### 1.3. 流水线全局变量定义 + +流水线的全局变量通过vars字段声明,当前版本支持字符串、数组、对象(字典/哈希表)三种格式。 + +```yaml +version: v1.1 + +name: workflow + +vars: + # 字符串 + varA: string + # 数组 + varB: + - elementA + - elementB + # 对象(支持多级结构嵌套) + varC: + keyA: valueA + # 嵌套数组 + keyB: + - valueB1 + - valueB2 + # 嵌套对象 + keyC: + keyC1: +``` + +流水线变量定义的目的在于定义整个流水线可以利用的若干变量(常量),定义后的变量可以被流水线任意阶段任务引用,从而避免每个任务对于该变量的重复冗余声明。 + +举例而言,假设某个流水线的10个任务均需要上述案例的varB变量作为Input(输入/入参),则只需要引用varB赋予给对应参数即可。 + +具体的引用方式详见后文对于引用语法的介绍。 + +如果一个流水线不需要定义任何流水线变量时,vars关键字可以不存在: + +```yaml +version: v1.1 + +name: workflow + +other_keys: other_values +``` + +> 💡 注:v1.1相较上一个版本v1.0的新语法说明 + +除了在一级key中声明vars外,还可以在sequence中定义某些job特殊的vars,并且局部vars的优先级高于全局vars。 + +### 1.4. 额外事件声明 + +如果流水线内部的某个任务除了依赖于前置的任务外,还实际依赖于额外的webhook事件,或者依赖于一些额外的事件,则需要对这些额外的事件进行预声明。 + +用户通过events.xxx模式的key进行额外事件的声明,"xxx"为额外事件的命名。 + +**注意:**大多数情况下,用户不需要定义额外事件。额外事件不支持定时以及手动事件声明。 + +#### 1.4.1. webhook事件 + +当定义额外webhook事件时,该事件需求定义的key-values与上文流水线触发设置中介绍的一致,如下示例: + +```yaml +version: v1.1 + +name: workflow + +vars: + +events.eventA: + type: webhook/pr + git_repo: https://gitee.com/openeuler/repository.git + branch: + - master + - dev +``` + +#### 1.4.2. job事件 + +除了webhook事件外,额外事件可以定义一种新的事件类型,即job类型事件。job类型事件分为stage和step两个子类,如下示例: + +```yaml +version: v1.1 + +name: workflow + +vars: + +# 额外事件A - jobA进入boot阶段 +events.eventA: + type: job/stage + job: jobA + job_stage: boot + +# 额外事件B - jobA进入名为testcase001的步骤 +events.eventB: + type: job/step + job: jobA + job_step: testcase001 + +# 额外事件C - jobA进入finish阶段且incomplete +events.eventC: + type: job/stage + job: jobA + job_stage: finish + job_health: incomplete +``` + +job类型的事件除了type和job必填外,其他字段可以根据需求从job类型事件的全集keys中选取(job_stage/job_health/job_step/nickname)。 + +定义后的job类型事件如何使用见后文任务定义和控制流声明章节。 + +### 1.5. 任务定义 + +#### 1.5.1. 基础概念 + +对于所有流水线涉及的任务,都需要通过jobs.xxx模式的一级key进行一次声明,主要目的为定义任务的Input(输入/入参),且每个被声明job的value均要求为对象(字典/哈希表)格式(或者为空)。 + +jobs.xxx类关键字常见的两种二级关键字为**defaults**和**overrides**,这两个二级key可以不声明,但如果具备value,则value必须为对象(字典/哈希表)格式,用以声明待提交的job即为模板所具备的所有参数。 + +如下所示: + +```yaml +name: workflow + +vars: + +# 空value的job缺省声明 +jobs.jobA: + +# 空defaults value, 空overrides value声明 +jobs.jobB: + defaults: + overrides: + +# 缺省defaults,overrides非空声明 +jobs.jobB: + overrides: + # 字符串 + keyA: valueA + # 数组 + keyB: + - valueB1 + - valueB2 + # 对象(支持多级嵌套) + keyC: + keyC1: valueC1 + keyC2: + - valueC2 +``` + +除了嵌套的声明方式,流水线语法支持扁平化的方式减少声明的难度,如下示例: + +```yaml +jobs.jobB: + overrides: + keyC.keyC1: valueC1 + +# 等价于 +jobs.jobB: + overrides: + keyC: + keyC1: valueC1 +``` + +**注意:**这种等价仅于defaults和overrides下有效。 + +defaults和overrides意义如字面含义所示,defaults中定义的key-values如果原job中存在对应key,则以原job中的value为实际提交value;overrides中定义的key-values将无条件覆盖到原job的值提交。 + +对于job的概念,以及原job.yaml的内容,建议查阅compass-ci/lkp-tests的文档进行了解: + +1. 如何向compass-ci/lkp-tests新增job: +2. job的定义: +3. job示例: + +> 💡 注:v1.1相较上一个版本v1.0的新语法说明 + +在v1.1版语法中,允许jobs.XX方式定义job,在sequence控制流中并不全部引用,并不会解析报错。 + +#### 1.5.2. 任务别名定义 + +通常情况下,jobs.xxx模式中xxx即为被声明的job名,如如果计划声明一个ltp-bm的任务,则声明jobs.ltp-bm。但在某些流水线中,可能同一个任务需要运行多次,且任务实际的入参并不相同,因此设计多次声明的可能。在这种情况下,则需要利用"别名"语法特性。 + +别名的声明方式如下示例: + +```yaml +jobs.ltp-bm:first-ltp-bm: + +jobs.ltp-bm:second-ltp-bm: +``` + +这两个被声明的任务实际指向的都是ltp-bm这同一个job,但是因为别名所以流水线会将其看作两个不同的个体。 + +#### 1.5.3. 额外事件依赖声明 + +除了defaults和overrides两种常用的二级keys外,jobs.xxx还支持声明depends字段,本字段用以声明额外依赖(额外事件,即上文**章节1.3**内容的应用) + +```yaml +events.eventA: + xxx: xxx + +events.eventC: + xxx: xxx + +jobs.jobA: + defaults: + default_keyA: valueA + overrides: + override_keyB: valueB + depends: + # 额外依赖于上文中通过events.eventA声明的事件 + # 只需要写key:的形式,不需要填value,填了也会被忽略 + eventA: + # 且额外依赖于上文中通过events.eventC声明的事件 + eventC: +``` + +对于jobA而言,depends字段相当于定义了若干AND逻辑关系的额外依赖,当且仅当所有依赖的事件均发生后jobA才会被提交执行。 + +当depends不声明的时候,jobA的依赖仅取决于其处于控制流的位置(详见后文控制流声明),否则为控制流依赖于额外依赖的逻辑与结果。 + +```yaml +submit_jobA = [jobA's depends parsed from controlflow] AND [jobA's depends defined from 'depends'] +``` + +### 1.6. 控制流声明 + +#### 1.6.1. 基础特性 + +流水线任务的串并行结构通过控制流声明对已通过一级key”jobs.xxx“预声明的各个任务进行编排,通过一级key“sequence”定义,如下所示: + +```yaml +version: v1.1 + +name: workflow + +# jobA:first进入boot阶段 +events.eventA: + type: job/stage + job: jobA + nickname: first + job_stage: boot + +# 定义别名为first的jobA +jobs.jobA:first: + overrides: + +jobs.jobB: + overrides: + # 额外依赖于"jobA:first进入boot阶段"事件 + depends: + eventA: + +# 控制流声明 +sequence: + # 声明并行子结构 + parallel: + # jobA:first和jobB并行 + jobA:first: + jobB: +``` + +控制流声明中,存在sequence、parallel、matrix、vars四种关键字,除了关键字外,所有key都会被认作对已预声明的job的引用。对于所有job的引用,需要确保引用的job全称(包含别名)在流水线一级key中存在(以jobs.xxx预声明)。如果sequence中引用了jobA,但流水线一级key中缺少jobs.jobA这个key,解析器将不会给予通过。 + +**注意:**控制流声明的根(一级key)必须为sequence。 + +- 关键字sequence + + sequence意在声明一个串行结构,在sequence下的所有key将被解析为按声明顺序(从上到下)排列的一连串成员,每一个成员必然依赖于其上面一个的成员。 + + ```yaml + sequence: |---------| |---------| + jobA: = | jobA | =========> | jobB | + jobB: |---------| |---------| + ``` + + sequence和job一样,可以通过sequence:xxx:的方式定义别名,该别名仅在一级串行子结构中存在实际意义,非一级子结构的别名仅起标识作用,具体参考下文stage声明说明。 + + ```yaml + # 根sequence,不可添加别名,为控制流声明关键字 + sequence: + # 一级串行子结构,别名为seqA + sequence:seqA: + # 二级串行子结构,别名为seqB + sequence:seqB: + ``` + + 如上所示,sequence的key并不一定只能是job,当sequence内部的key同样是sequence时,意味着串行结构的嵌套。当然,对于纯sequence的嵌套是不具备实际意义的,仅为分组标识,单纯的串行嵌套相当于没有嵌套。 + + ```yaml + sequence: < - - - - - seqA - - - - - - > + sequence:seqA: |---------| |---------| |---------| + jobA: = | jobA | =========> | jobB | =========> | jobC | + jobB: |---------| |---------| |---------| + jobC: + ``` + +- 关键字parallel + + parallel意在声明一个并行结构,在parallel下的所有key将被解析为并列的若干成员,每一个成员都依赖于整个parallel都前置依赖,互相之间不存在控制流定义的依赖关系(可以存在通过depends额外声明的依赖,额外跳线依赖不被控制流声明控制) + + ```yaml + ___________|___________ + sequence: | | + parallel: |---------| |---------| + jobA: = | jobA | | jobB | + jobB: |---------| |---------| + |______________________| + | + ``` + + 注意,parallel一定不可以声明在workflow.yaml的一级key,对于控制流声明而言,根key一定是sequence。 + + 和sequence一致,parallel也可以以parallel:xxx:的方式定义别名,该别名同样仅在一级并行子结构中存在实际含义,非一级子结构的别名仅起标识作用,具体参考下文stage声明说明。 + + 同理,单纯的并行嵌套相当于没有嵌套,如下示例,等价于jobA、jobB、jobC三者并行。 + + ```yaml + ___ _________________|_______________ + sequence: | | _________|__________ ___ + parallel:prlA: | |---------| |----|----| |----|----| | + jobA: = prlA | jobA | | jobB | | jobC | prlB + parallel:prlB: | |---------| |----|----| |----|----| | + jobB: | | |__________________| _|_ + jobC: _|_ |_______________________________| + | + ``` + +- 关键字matrix + + matrix关键字将在1.7章节中详细说明。 + +> 💡 注:vars关键字为v1.1相较上一个版本v1.0的新语法 + +- 关键字vars + + sequence中声明的vars和一级key中vars的含义和用法完全相同,sequence中的vars存在局部作用域,并且局部作用域的优先级高于全局作用域的优先级,即声明位置越近优先级越高,常用于某些job要引用的变量与全局变量的值不同,需要覆盖全局定义变量的场景。另外,vars可以定义在任意sequence或parallel结构中。 + + 优先级的说明如下示例: + + ```yaml + # 全局定义的变量 + vars: + keyA: valueA + + jobs.job1: + overrides: + key1: ${{ vars.keyA }} + + jobs.job2: + overrides: + key1: ${{ vars.keyA }} + + jobs.job3: + overrides: + key1: ${{ vars.keyA }} + + sequence: + job1: + sequence:s1: + # 此处定义的vars只对sequence:s1结构生效 + vars: + keyA: valueB + job2: + parallel:p1: + # 此处定义的vars只对parallel:p1结构生效 + vars: + keyA: valueC + job3: + + # 各job变量引用的实际值: + # job1.key1 = valueA + # job2.key1 = valueB + # job3.key1 = valueC + + ``` + +#### 1.6.2. job的补充声明 + +由上文可知,job无论是defaults、overrides还是depends的声明,可以声明在jobs.xxx这个key之下,这也是比较推荐的用法。但其实在控制流声明中,用户可以对job进行补充声明,补充的声明将深层update到预定义的job声明中,如下所示: + +```yaml +name: workflow + +jobs.jobA: + defaults: + keyA: valueA + overrides: + keyB: + keyB1: valueB1 + keyB2: + keyB21: valueB21 + +sequence: + jobA: + overrides: + # 与上文中jobs下的overrides特性相同 + # 采用keyB.keyB2.keyB21和keyB.keyB2.keyB22为key,即 + # keyB.keyB2.keyB21: valueB21_new + # keyB.keyB2.keyB22: valueB22 + # 与下述声明方式等价 + keyB: + keyB2: + keyB21: valueB21_new + keyB22: valueB22 +``` + +在这个例子中,sequence中将jobA的预定义的overrides下的keyB21重新定义为valueB2_new,且在keyB2下新创建了一个keyB22的键值对。 + +补充声明特性以对象(字典/哈希表)的递归update实现,一定为控制流中的定义覆写jobs的预定义。 + +> 💡 注:以下为v1.1相较上一个版本v1.0的新语法 + +在sequence中除了可以补充定义job的overrides和defaults字段外,还支持定义always、if、unless执行条件语法。 + +- always关键字 + + always用于决定job是否一定会被提交。在常规控制流的依赖关系中,如果前置job执行失败,后面依赖它的job将会阻塞不会再被提交,如果在job中声明了**always: true**,前置job运行失败或者异常,后面的任务都会被提交。 + + ```yaml + sequence: + jobA: + jobB: + # jobB运行结束,运行结果成功、失败或是异常,jobC都会被提交运行 + jobC: + always: true + + ``` + + always关键字有一种语法糖的写法:jobX!,如下示例的写法和上面yaml作用相同: + + ```yaml + sequence: + jobA: + jobB: + # jobB运行结束,运行结果成功、失败或是异常,jobC都会被提交运行 + jobC!: + + ``` + +​ 另外,如果always关键字没有声明,缺省值取false。 + +- if/unless关键字 + + if和unless关键字用于控制job是否需要被提交,如果if条件判断的结果为true,job才会被提交,否则此job将被跳过,并将job_stage设置为finish,job_health设置为skipped,unless的判断逻辑和if正好相反。 + + ```yaml + sequence: + jobA: + jobB: + if: ${{ jobs.jobA.result.id }} # 如果jobA的result.id有值,jobB会被提交,否则jobB不会被运行 + jobC: + ``` + + 如果job中没有声明关键字if,缺省值取true;如果job中always和if关键字同时存在,优先判断if关键字的执行逻辑。 + +### 1.7. 流水线阶段(stage)声明 + +在**章节1.6. 控制流声明**中有提及,无论是sequence还是parallel分别可以通过sequence:xxx:和parallel:xxx:的形式声明别名。流水线web服务将基于下述规则划分控制流的不同阶段,规则如下所示: + +1. 当且仅当sequence和parallel为根sequence下的一级结构时,其别名等同于阶段名。 +2. 当根sequence下存在job名时(非sequence也非parallel),该job以自身job的别名作为阶段名(若无别名则以job名)独立被识别为一个阶段。 +3. 阶段存在向后包裹的特点,直到下一个有效阶段声明前,所有结构属于同一个阶段。 +4. 沿着根sequence向下检索,在遇到第一个有效的stage命名之前,所有的结构均属于“未命名”阶段。 + +```yaml +sequence: + 阶段(stage) + parallel: ——| + job0: > 未命名 + job1: ——| + + job2:build-job: —— > build-job + + jobA: ——| + sequence: > jobA + jobB: ——| + + parallel:prlA: ——| + jobC: | + jobD: | + sequence:seqB: > prlA + jobE: | + jobF: ——| + + sequence:seqC: —— > seqC + jobG: ——| +``` + +p.s. 阶段仅会影响web端的渲染,控制流的实际意义不依赖于阶段的定义,换而言之,如果不考虑可视化的便利性,可以不对阶段命名深究。 + +### 1.8. Matrix语法特性 + +#### 1.8.1. 基本概念 + +用户可以在控制流**串行结构的任意位置**可以插入一个matrix关键字,用以混入(Mixin)局部的矩阵(参数组合),从而改变后续任务的上下文(Context)。 + +matrix关键字同样可以声明别名,用以避免对象(字典/哈希表)的重key异常,但除了区别外没有实际意义。 + +**注意:** matrix不能直接声明在parallel关键字下,只能声明在sequence关键字下。 + +matrix的声明结构一定为如下格式: + +```yaml +sequence: + matrix: + paramA: + - valueA1 + - valueA2 + - valueAn + paramB: + - valueB1 + - valueB2 +``` + +即,matrix是一个对象(字典/哈希表),且所有一级value均为数组(列表)。 + +上述例子中matrix的含义为,对所处位置的流水线上下文混入矩阵,其中paramA有三种可能的取值,paramB有两种可能的取值,即共3*2共6种取值组合。 + +```yaml +matrix: _ + paramA: | 1. paramA = valueA1; paramB = valueB1 + - valueA1 | 2. paramA = valueA1; paramB = valueB2 + - valueA2 | 3. paramA = valueA2; paramB = valueB1 + - valueAn => { 4. paramA = valueA2; paramB = valueB2 + paramB: | 5. paramA = valueAn; paramB = valueB1 + - valueB1 |_ 6. paramA = valueAn; paramB = valueB2 + - valueB2 +``` + +当流水线上下文混入(Mixin)一个局部的矩阵后,流水线的上下文将会根据参数取值组合的种数裂解成多个“分支”,每一个“分支”的上下文依据其中一种取值组合。当这个分支之后的任务直接引用上下文中的paramA时,会根据当前上下文的paramA取值,后续任务的驱动也会与其他”分支“独立。 + +举例而言: + +```yaml +sequence: + jobA: + parallel: + jobB: + sequence: + matrix: + arch: + - aarch64 + - x86_64 + jobC: + jobD: +``` + +根据 **章节1.5. 控制流声明** 的介绍,不难看出,这个描述声明的结构如下: + +```yaml + ________ + | | + |-------| jobB |----------------------------| + | |________| | + ________ | | ________ + | | | | | | +-------| jobA |-------| |-------| jobD |--------> + |________| | | |________| + | ________ | + | / \ | | | + |-------| matrix |-------| jobC |---------| + \ / |________| + 1. arch = aarch64; + 2. arch = x86_64 +``` + +对于jobA和jobB,如果他们在被提交的时候引用“当前上下文”(所谓当前为被提交的时间点)中的arch变量,他们将取不到任何值。 + +p.s. 关于引用的概念详见**章节1.6.** + +而对于jobC和jobD而言,他们实际上被裂解到了并行的两个“分支”上,其中一个分支上下文中的arch是aarch64而另一个分支上的arch是x86_64,即上述控制流结构等价于: + +```yaml +1. arch = aarch64; + ________ + | | + |----------| jobB |---------| + | |________| | + ________ | | ________ + | | | | | | +-------| jobA |-------| |-------| jobD |--------> + |________| | | |________| + | ________ | aarch64 + | | | | + |----------| jobC |---------| + |________| + aarch64 + +2. arch = x86_64 + ________ + | | + |----------| jobB |---------| + | |________| | + ________ | | ________ + | | | | | | +-------| jobA |-------| |-------| jobD |--------> + |________| | | |________| + | ________ | x86_64 + | | | | + |----------| jobC |---------| + |________| + x86_64 +``` + +这两个矩阵参数组合“分支”共享jobA和jobB的前置依赖,但aarch64的jobD只会依赖于aarch64的jobC,即各分支依赖独立。 + +这样避免了在很多场景下的相同结构的重复声明。 + +#### 1.8.2. 矩阵x矩阵 + +流水线控制流支持多matrix在不同位置声明,在这种情况下,下文矩阵受到上文矩阵影响,下文矩阵实际为上下文矩阵相乘的结果,如下示例: + +```yaml +sequence: + matrix:m1: + os: + - openeuler + os_version: + - 20.03 + - 22.03-LTS + jobA: + matrix:m2: + arch: + - aarch64 + - x86_64 + jobB: +``` + +对于这个例子而言,jobA共有两种上下文分支,而jobB共有4种,如下所示: + +```yaml + ________ ________ + | | | | +--------------| jobA |-----------------------------------------| jobB |-----------------------> + |________| |________| + 1. os=openeuler; os_version=20.03 1. os=openeuler;os_version=20.03;arch=aarch64; + 2. os=openeuler; os_version=22.03-LTS 2. os=openeuler;os_version=20.03;arch=x86_64; + 3. os=openeuler;os_version=22.03-LTS;arch=aarch64; + 4. os=openeuler;os_version=22.03-LTS;x86_64; +``` + +因此对于声明此例控制流的关于jobA和jobB的流水线,实际jobA将会被提交两次,jobB将会被提交4次,jobB的1和2分支依赖于jobA的1分支,jobB的3和4分支依赖于jobA的2分支,jobB的最终参数组合即jobA之前声明的matrix与jobB之前的matrix相乘的结果。 + +#### 1.8.3. excludes语法特性 + +matrix支持通过excludes声明排除特定的组合,如下所示: + +```yaml +sequence: + matrix: + os: + - openeuler + - centos + os_version: + - "20.03" + - 7 + excludes: + # 下述两种描述形式均可支持 + - {"os": "openeuler", "os_version": "7"} + - os: centos + os_version: "20.03" +``` + +此声明方式意为此矩阵只存在两种参数组合,即 ”os=openeuler;os_version=20.03“ 和 “os=centos;os_version=7”。 + +#### 1.8.4. 参数组合语法糖 + +同时,matrix具备一种简化excludes声明的语法糖"|",以上述样例可以改写为: + +```yaml +sequence: + matrix: + os|os_version: + - openeuler | 20.03 #有无空格或者制表符均支持 + - centos | 7 #推荐以制表符分隔,这样的声明较为直观 +``` + +### 1.8. "引用"表达式声明 + +#### 1.8.1. 基本概念 + +对于一条正在运作的流水线而言,其上下文是动态的,每执行完成一个任务,每感知到一个有效事件,“当前”上下文都会发生变化。 + +流水线运行上下文(Context)由六个固定的namespace组成: + +- vars,流水线变量空间(流水线静态变量全集) +- event,事件空间(事件数据全集) +- jobs,任务空间(前置已完成的任务数据) +- matrix,矩阵空间(当前矩阵参数组合分支的参数集合) +- depends,未满足的依赖事件清单(此namespace一般不会被引用) +- fulfilled,已履行的依赖事件清单(此namespace一般不会被引用) + +流水线不仅仅支持对定量的声明,流水线具备“引用”的语法特性,可以对“当前上下文”的变量进行引用,以及进行字符串拼接和python表达式运算。 + +“引用”由模式 ${{ xxxx }} 识别,通过"."的方式获取不同namespace下的所有value,支持下述两种使用方式: + +- 字符串拼接引用 + + ```yaml + # 取vars空间中的varA变量的值,并且与vars空间中的varB变量的值,最后通过"-"拼接 + key: ${{ vars.varA }}-${{ vars.varB }} + # 取当前矩阵参数组合的os、os_version、arch拼接命名 + project_name: my_project:${{ matrix.os }}:${{ matrix.os_version }}:${{ matrix.arch }} + ``` + + 对于这种拼接引用的方式,需要用户确保引用变量的值一定是字符串。如果实际的值不为字符串或者无法转换为字符串,那么采用这种引用声明的job很可能无法正常提交。 + +- 单引用 + + 单引用的情况下,引用表达式的结果可以为字符串、数字、数组(列表)或者哈希表(字典),不受类型影响。 + + ```yaml + # 取vars空间中的数组arrayA,作为key的值 + key: ${{ vars.arrayA }} + # 取前置已完成的jobA的输出result.arrayB,作为key的值 + key: ${{ jobs.jobA.result.arrayB }} + ``` + +**注意:**引用特性仅支持在defaults和overrides下使用,即jobs.xxx下的defaults和overrides或者sequence下某个job的defaults和overrides。后续演进的语法版本中将加入"在matrix中引用vars变量"的支持。 + +#### 1.8.2. python语法支持 + +对于任意引用内部而言,在引用的变量被实际的值替换后,替换后的内容将会被当作python表达式运行,如下示例: + +```yaml +# 取多个不同namespace的变量进行数值运算 +key: ${{ vars.numA + jobs.jobA.result.success_num }} + +# 调用python datetime模块,获取年月日并拼接字符串 +project_name: ${{ vars.my_name }}-${{ datetime.datetime.now().year }}-{{ datetime.datetime.now().month }}-${{ datetime.datetime.now().day }} + +# 调用字符串处理方法,对字符串进行大小写转换,split等操作 +key: ${{ vars.stringA.lower() }} +key: ${{ vars.stringA.split(':') }} + +# 单纯通过python表达式计算数值,不对变量进行引用,如计算一天一共有多少秒 +key: ${{ 24*60*60 }} +``` + +支持的非内置Python模块: + +| 模块名 | 作用 | 官方文档链接 | +| ------ | ---- | ------------ | +| re | 提供正则表达式匹配操作 | | +| math | 提供数学运算函数 | | +| time | 提供时间相关函数 | | +| datetime | 提供日期和时间处理函数 | | + +支持的安全内置Python模块: + +| 类型 | 模块名 | +| ---- | ------ | +| 数据类型 | object, bool, int, float, complex, str, bytes, bytearray, tuple, list, set, frozenset, dict | +| 数学运算 | abs, round, pow, divmod | +| 迭代器 | iter, next | +| 集合操作 | len, sum, min, max, all, any, map, filter, zip, enumerate, sorted, reversed | +| 数字转换 | bin, hex, oct | +| 字符串格式化 | ascii, repr, chr, ord, format | +| 变量和内存 | dir, locals, globals, id, hash | +| 类型检查 | isinstance, issubclass, callable | + +### 1.9. 特殊语法 + +#### 1.9.1. 具有特殊含义配置项的变量 + +**group_sync_exec_id: 1** + +字段说明:当前变量值为1时,表明每次运行流水线会同步workflow_exec.id的值给group_id这个变量,这个配置项必须在group_id变量存在的时候才起作用,不然只是一个普通变量 + +```yaml +vars: + # 当前流水线编号 + group_id: workflow_exec.200005545959096344 + group_sync_exec_id: 1 +``` + +## 2. workflow.yaml完整示例 + +以下是一个完整的workflow.yaml文件示例: + +```yaml +# 语法版本声明 +version: v1.0 + +# 流水线命名 +name: 每日构建 + +# 触发设置 +on: + # 设定定时触发事件,每天00:00触发 + - type: cron + week_day: + - Monday + - Tuesday + - Wednesday + - Thursday + - Friday + - Saturday + - Sunday + time: "00:00" + start_date: "2023-10-18" + +# 流水线变量设置 +vars: + eulermaker_account: account + eulermaker_password: passwd + os: os + os_version: version + +# 任务声明 +jobs.eulermaker-build-project:everything: + overrides: + project_name: ${{ vars.os }}-${{ vars.os_version }}:everything + build_type: full + build_arch: ${{ matrix.arch }} + secrets: + ACCOUNT: ${{ vars.eulermaker_account }} + PASSWORD: ${{ vars.eulermaker_password }} + testbox: vm-2p8g + +jobs.eulermaker-build-project:epol: + overrides: + project_name: ${{ vars.os }}-${{ vars.os_version }}:epol + build_type: full + build_arch: ${{ matrix.arch }} + secrets: + ACCOUNT: ${{ vars.eulermaker_account }} + PASSWORD: ${{ vars.eulermaker_password }} + testbox: vm-2p8g + +jobs.eulermaker-create-image: + overrides: + image_project_params: + pipeline_info: + pipeline_name: ${{ vars.os }}-${{ vars.os_version }}-${{ datetime.datetime.now().year }}-${{ datetime.datetime.now().month }}-${{ datetime.datetime.now().day }}-1 + group: dailybuild + category: standard + scene: cloud + image_format: qcow2 + arch: ${{ matrix.arch }} + image_config: + release_image_config: + repo_url: > + http://xxxxx/ + http://xxxx/ + http://xxx/ + http://xxxxxx/ + product: ${{ vars.os.lower() }} + version: ${{ vars.os_version }}-${{ datetime.datetime.now().year }}-${{ datetime.datetime.now().month }}-${{ datetime.datetime.now().day }} + secrets: + ACCOUNT: ${{ vars.eulermaker_account }} + PASSWORD: ${{ vars.eulermaker_password }} + testbox: vm-2p8g + +jobs.eulermaker-build-image: + overrides: + secrets: + ACCOUNT: ${{ vars.eulermaker_account }} + PASSWORD: ${{ vars.eulermaker_password }} + pipeline_id: ${{ jobs.eulermaker-create-image.result.id }} + testbox: vm-2p8g + runtime: ${{ 24*60*60 }} + +jobs.qcow2rootfs: + overrides: + qcow2rootfs.qcow2_os: ${{ jobs.eulermaker-build-image.result.product }} + qcow2rootfs.qcow2_arch: ${{ matrix.arch }} + qcow2rootfs.qcow2_version: ${{ jobs.eulermaker-build-image.result.version }} + qcow2rootfs.qcow2_url: ${{ jobs.eulermaker-build-image.result.image_link }} + qcow2rootfs.rootfs_protocol: nfs + qcow2rootfs.rootfs_server: "172.168.131.2" + qcow2rootfs.rootfs_path: os-rw + testbox: vm-2p32g + +jobs.mugen-smoke-baseinfo: + overrides: + os: ${{ jobs.qcow2rootfs.result.os }} + os_version: ${{ jobs.qcow2rootfs.result.version }} + os_mount: nfs + arch: ${{ jobs.qcow2rootfs.result.arch }} + testbox: vm-2p8g + +jobs.mugen-smoke-basic-os: + overrides: + os: ${{ jobs.qcow2rootfs.result.os }} + os_version: ${{ jobs.qcow2rootfs.result.version }} + os_mount: nfs + arch: ${{ jobs.qcow2rootfs.result.arch }} + testbox: vm-2p8g + +# 控制流声明 +sequence: + # 矩阵声明 + matrix: + arch: + - aarch64 + - x86_64 + # 并行子结构声明 + parallel:build: + eulermaker-build-project:everything: + eulermaker-build-project:epol: + # 串行子结构声明 + sequence:create-image: + eulermaker-create-image: + eulermaker-build-image: + qcow2rootfs: + parallel:AT: + mugen-smoke-baseinfo: + mugen-smoke-basic-os: +``` + +## 3. v1.1新语法 + +### 3.1 sequence局部变量定义 + +控制流中新增对vars关键字的支持。sequence中声明的vars和一级key中vars的含义和用法完全相同,sequence中的vars存在局部作用域,并且局部作用域的优先级高于全局作用域的优先级,即声明位置越近优先级越高,常用于某些job要引用的变量与全局变量的值不同,需要覆盖全局定义变量的场景。另外,vars可以定义在任意sequence或parallel结构中。 + +优先级的说明如下示例: + +```yaml +# 全局定义的变量 +vars: + keyA: valueA + +jobs.job1: + overrides: + key1: ${{ vars.keyA }} + +jobs.job2: + overrides: + key1: ${{ vars.keyA }} + +jobs.job3: + overrides: + key1: ${{ vars.keyA }} + +sequence: + job1: + sequence:s1: + # 此处定义的vars只对sequence:s1结构生效 + vars: + keyA: valueB + job2: + parallel:p1: + # 此处定义的vars只对parallel:p1结构生效 + vars: + keyA: valueC + job3: + +# 各job变量引用的实际值: +# job1.key1 = valueA +# job2.key1 = valueB +# job3.key1 = valueC + +``` + +#### 3.2 判断job执行条件 + +在sequence中除了可以补充定义job的overrides和defaults字段外,还支持定义always、if、unless执行条件语法。 + +- always关键字 + + always用于决定job是否一定会被提交。在常规控制流的依赖关系中,如果前置job执行失败,后面依赖它的job将会阻塞不会再被提交,如果在job中声明了**always: true**,前置job运行失败或者异常,后面的任务都会被提交。 + + ```yaml + sequence: + jobA: + jobB: + # jobB运行结束,运行结果成功、失败或是异常,jobC都会被提交运行 + jobC: + always: true + + ``` + + always关键字有一种语法糖的写法:jobX!,如下示例的写法和上面yaml作用相同: + + ```yaml + sequence: + jobA: + jobB: + # jobB运行结束,运行结果成功、失败或是异常,jobC都会被提交运行 + jobC!: + + ``` + +​ 另外,如果always关键字没有声明,缺省值取false。 + +- if/unless关键字 + + if和unless关键字用于控制job是否需要被提交,如果if条件判断的结果为true,job才会被提交,否则此job将被跳过,并将job_stage设置为finish,job_health设置为skipped,unless的判断逻辑和if正好相反。 + + ```yaml + sequence: + jobA: + jobB: + if: ${{ jobs.jobA.result.id }} # 如果jobA的result.id有值,jobB会被提交,否则jobB不会被运行 + jobC: + ``` + + 如果job中没有声明关键字if,缺省值取true;如果job中always和if关键字同时存在,优先判断if关键字的执行逻辑。 + +#### 3.3 job声明不选用 + +通过jobs.jobX方式声明的job不一定全部在sequence中选用。 + +```yaml +jobs.jobA: +jobs.jobB: + +sequence: + jobB: +``` diff --git a/docs/zh/tools/devops/_toc.yaml b/docs/zh/tools/devops/_toc.yaml index 6d4e7bf576a98227a3fddebf36b1d83c8199a1f6..eb4b0f8b7437dd7fc9da8fd505612e45c385abf9 100644 --- a/docs/zh/tools/devops/_toc.yaml +++ b/docs/zh/tools/devops/_toc.yaml @@ -6,3 +6,9 @@ sections: - label: 包管理 sections: - href: ./pkgship/_toc.yaml + - label: eulermaker + sections: + - href: ./eulermaker/_toc.yaml + - label: eulerpipeline + sections: + - href: ./eulerpipeline/_toc.yaml \ No newline at end of file diff --git a/docs/zh/tools/devops/patch_tracking/patch_tracking.md b/docs/zh/tools/devops/patch_tracking/patch_tracking.md index 1b5f2aa1d1a70023b3f4053486207c0aeebe616a..64dfa7bcb4519b53950c9129d5d6cde41956fbb2 100644 --- a/docs/zh/tools/devops/patch_tracking/patch_tracking.md +++ b/docs/zh/tools/devops/patch_tracking/patch_tracking.md @@ -72,7 +72,11 @@ rpm 包获取地址:[https://repo.openeuler.org/](https://repo.openeuler.org/) 方法1:从repo源安装 +<<<<<<< HEAD:docs/zh/tools/devops/patch_tracking/patch_tracking.md 1. 使用 dnf 挂载 repo源(具体方法参考[应用开发指南](../../../server/development/application_dev/preparations-for-development-environment.md))。 +======= +1. 使用 dnf 挂载 repo源(具体方法参考[应用开发指南](../../../server/development/application_dev/preparations_for_development_environment.md)。 +>>>>>>> 6b124a04c (文档整改):docs/zh/docs/tools/devops/patch_tracking/patch_tracking.md 2. 执行以下命令安装`patch-tracking`及其依赖。 ```shell diff --git a/docs/zh/virtualization/virtualization_platform/virtualization/_toc.yaml b/docs/zh/virtualization/virtualization_platform/virtualization/_toc.yaml index a13a57957526713446b9e46d1f195b8dedadd5d8..4d08516382d8a6ec826ce262cbbd9eeac4139a46 100644 --- a/docs/zh/virtualization/virtualization_platform/virtualization/_toc.yaml +++ b/docs/zh/virtualization/virtualization_platform/virtualization/_toc.yaml @@ -33,3 +33,5 @@ sections: href: ./skylark.md - label: 附录 href: ./appendix.md + - label: 常见问题与使用方法 + href: ./faqs_and_solutions.md diff --git a/docs/zh/virtualization/virtualization_platform/virtualization/faqs_and_solutions.md b/docs/zh/virtualization/virtualization_platform/virtualization/faqs_and_solutions.md new file mode 100644 index 0000000000000000000000000000000000000000..a3bbbec6e0c97274490d1d87c6930c2aed346e34 --- /dev/null +++ b/docs/zh/virtualization/virtualization_platform/virtualization/faqs_and_solutions.md @@ -0,0 +1,17 @@ +# 常见问题与解决方法 + +## **问题1:使用libcareplus工具制作的qemu热补丁无法加载** + +原因:qemu版本和热补丁版本不一致。 + +解决方法:下载qemu对应版本的源码,同时需保持制作热补丁的环境和制作qemu包环境一致,buildID可作为二者是否一致的判定标准。因用户无qemu版本的制作环境,故可以 **自行编包并安装** ,使用自编包中的/usr/libexec/qemu-kvm的buildID。 + +## **问题2:使用libcareplus工具制作的热补丁已加载但未生效** + +原因:不支持死循环、不退出、递归的函数,不支持对初始化函数、inline 函数以及小于5字节的短函数。 + +解决方法:查看补丁所在函数是否在约束限制中。 + +## **问题3:使用kvmtop工具第一次显示的结果为间隔0.05秒的两次采样计算得到的结果,波动较大** + +此为开源top框架缺陷导致,暂无解决方案。 \ No newline at end of file diff --git a/docs/zh/x_diagnosis/_toc.yaml b/docs/zh/x_diagnosis/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f82bbffa855535399413297e0ec88f3f2596b7e7 --- /dev/null +++ b/docs/zh/x_diagnosis/_toc.yaml @@ -0,0 +1,3 @@ +label: x_diagnosis +sections: + - href: ./x_diagnosis.md diff --git a/docs/zh/x_diagnosis/x_diagnosis.md b/docs/zh/x_diagnosis/x_diagnosis.md new file mode 100644 index 0000000000000000000000000000000000000000..e9e5b89395f34788df2aeb6fe174e54171d12149 --- /dev/null +++ b/docs/zh/x_diagnosis/x_diagnosis.md @@ -0,0 +1,433 @@ +# x-diagnose + +## 概述 + +X-diagnose基于EulerOS维护团队多年运维经验,通过对案例的总结/分析形成的系统运维工具集, +主要功能包含问题定位、系统巡检/监控、ftrace增强、一键收集日志等功能,是一款集成分析、 +流程跟踪、信息定时记录、历史经验固化等功能于一体的OS内核问题定位工具。 + +## 安装x-diagnose + +**(1) 依赖软件** + +* python 3.7+ + +**(2) 下载rpm包** + +``` +rpm -ivh xdiagnose-1.x-x.rpm +```P + +## 1. 命令汇总 + +* xdiag +* xd_tcpreststackPF +* xd_tcpskinfo +* xd_arpstormcheck +* xd_sysinspect +* xd_scsiiocount +* xd_scsiiotrace + +### 1.0 xdiag + +```shell +usage: xdiag [-h] [--inspect] {tcphandcheck,eftrace,ntrace,hook} ... + +xdiagnose tool + +optional arguments: + -h, --help show this help message and exit + --inspect inspector module + +select module: + {tcphandcheck,eftrace,ntrace,hook} + tcphandcheck tcp_hand_check module + eftrace eftrace module + ntrace net trace module + hook hook module +``` + +**--inspect :系统异常巡检(可以和select module一起使用)支持如下检测项:** + +* ipv6路由缓存满 +* TIMEWAIT状态连接满 +* arp、连接跟踪满 +* snmp或者stat异常 +* 网卡异常统计pause帧、tx_timeout、drop、error +* bond4异常检测: +1)网卡速率不相等 +2)lacp协商没有成功 +* tcp、udp、ip分片等内存满 +* dns无法解析(gethostbyname) +* cron没法运行 +* ntp时钟不准 +* ip冲突检测 +* cpu冲高检测 +* 磁盘满、inode句柄不足 +* 内存不足、sysctl/sshd配置运行过程中修改 + +**tcphandcheck:跟踪tcp的3次握手阶段经常会出现问题,支持定位如下问题:** + +* 连接队列满 +* bind失败 +* timewait连接复用失败 +* 文件句柄超出导致无法创建socket +* 端口复用场景下连接闪断后seq序号异常导致的无法建链 + +**eftrace** + +#### 概述 + +eftrace是ftrace命令生成的偏移计算辅助工具。用户可以使用eftrace方便地生成不同内核版本下的ftrace命令。 + +#### 使用方法 + +#### (1) 举例 + +生成在协议栈调用`ip_rcv_core`函数时打印源地址为`192.168.56.102`的命令: + +```shell +xdiag eftrace 'p:ip_rcv_core ip_rcv_core srcip=(struct iphdr *)($r0->data)->saddr f:srcip==0x6638a8c0' +``` + +生成在协议栈调用`inet_csk_accept`函数结束时返回值为0的命令: + +```shell +xdiag eftrace 'r:inet_csk_accept inet_csk_accept ret=$retval f:ret==0' +``` + +#### (2) 命令解析 + +* `p:` 表示kprobe event +* `r:` 表示kretprobe event +* `f:` 表示kprobe filter过滤 +* `$rx` 表示函数参数,x为参数位置,第一个参数为`$r0` + +#### (3) 可以使用强制类型转换,以及手动指定偏移 + +```shell +xdiag eftrace 'p:ip_rcv_finish ip_rcv_finish +srcip=(struct iphdr *)($r2->data)->saddr +srcport=(struct tcphdr *)($r2->data + 20)->source' +``` + +在函数`ip_rcv_finish`中,`sk_buff`的`data`成员是`unsigned char *`类型,指向报文的ip头,可以强制转换为`iphdr *`获取ip头的内容。 + +当想获取tcp头的内容时,对`data`进行ip头长度的偏移后可指向tcp头并获取信息。 + +额外的偏移可以直接指定,或者使用`sizeof`的方式获取偏移长度: + +`srcport=(struct tcphdr *)($r2->data + sizeof(struct iphdr))->source` + +**xd_sysinspect** + +#### 参数说明 + +xd_sysinspect [-i interval] [-r rotate] [-d dest] [-z gzip] [-s size] [-c cpu_thresh] [-m mem_thresh] [-o] + +* -i interval: + 收集日志的时间间隔,单位秒 +* -r rotate: + 保留日志的份数 +* -d dest: + 日志文件保存的路径 +* -z gzip: + 用于压缩日志文件的命令,默认gzip +* -s size: + 指定该参数后使用日志文件的大小(MB)进行日志分割,超过设定值后会被压缩保存。不指定该参数默认按照小时压缩分割 +* -o: + 只记录触发CPU、内存阈值门限时的日志。如不指定该参数,则按照时间间隔收集日志 +* -c cpu_thresh: + CPU使用率的阈值,超过阈值、恢复阈值会触发日志记录 +* -m mem_thresh: + 内存使用率的阈值,超过阈值、恢复阈值会触发日志记录 + +#### 日志收集方式 + +* 每个interval在系统内收集一次信息 +* cpu,mem统计以interval为间隔,通过读取/proc下的数据计算使用率 + +#### 使用示例 + +#### 以时间为单位抓取日志 + +`xd_sysinspect -i 30 -r 48` + +* -i 30: + 每30秒收集一次日志 +* -r 48: + 每小时分割一次日志文件,保留48份日志 + +#### 以CPU、内存使用率阈值抓取日志 + +`xd_sysinspect -i 30 -r 20 -s 10 -c 80` + +* -i 30 + CPU、内存检查时间间隔30秒 +* -r 20 + 日志文件保留20份 +* -s 10 + 日志文件分割大小10(MB)。当日志文件达到指定值10MB时会进行分割 +* -c 80 + 指定CPU阈值,CPU使用率达到80%时记录一次日志;当使用率降至阈值以下,并重新冲高超过阈值,会再次记录 + +**ntrace:** + +```shell +usage: xdiag ntrace [-h] [-r READ_FILE] [-w WRITE_FILE] [-t TIMEOUT] [--qlen QLEN] [--cpu_mask CPU_MASK] [-b] [-i INTERFACE] {tcp,udp,icmp} ... + +optional arguments: + -h, --help show this help message and exit + -r READ_FILE, --read_file READ_FILE + read an existing trace file + -w WRITE_FILE, --write_file WRITE_FILE + trace write to a specified file + -t TIMEOUT, --timeout TIMEOUT + specify a running time of process + --cpu_mask CPU_MASK set ftrace cpu tracing_mask + -i INTERFACE, --interface INTERFACE + specify an interface + +select protocol: + {tcp,udp,icmp} + tcp tcp protocol + udp udp protocol + icmp icmp protocol +``` + +**expression** :指定一个过滤报文的表达式,协议[tcp|udp],地址[host|src|dst],端口号[port|sport|dport],逻辑运算符[and|or]。 +**-r** READFILE:读取一个已存在的trace输出文件,比如/var/log/x-diagnose/rawlog/raw_diag.log +**-w** WRITEFILE:将trace命令日志写入文件 +**-i** INTERFACE:指定抓取的网卡 +**-t** TIMEOUT:运行时间,单位为秒 +**--cpu_mask** CPU_MASK:设置ftrace的cpumask用以跟踪指定的cpu + +***说明***: +由于使用ftrace实现,xdiag下的select module功能模块不能复用 + +**hook:在定位问题时,方便确认各hook点的流程,跟踪这些钩子函数:** + +```shell +Usage: hook [ OPTIONS ] + --dev 网络设备过滤 + --host IP地址过滤 +``` + +### 1.1 xd_tcpreststack + +```shell +Usage: xd_tcpreststack [ OPTIONS ] + -h,--help this message + -t,--time The frequency of the probe/ms + -d,--depth Kernel stack Depth\n +``` + +#### 功能 + +监控tcp协议栈(v4/v6)reset信息。 + +#### -t,--time + +监控的时间间隔,单位ms, 建议保持默认值500ms; + +#### -d,--depth + +内核调用栈深度,默认3层 + +### 1.2 xd_tcpskinfo + +```shell +Usage: xd_tcpskinfo [ OPTIONS ] + -h,--help this message + -a,--addr filter IP addr + -p,--port filter port +``` + +#### 功能 + +查看tcp连接socket关键的信息,ss命令抓的信息不够全部一些关键信息没有包含。该工具总结tcp连接在debug过程中经常需要的信息,用来辅助协议栈问题定位。包括如下信息: + +#### -a,--addr + +IP地址过滤,不区分源地址或者目的地。 + +#### -p,--port + +端口过滤,不区分源端口或者目的端口。 + +### 1.3 xd_arpstormcheck + +```shell +Usage: xd_arpstormcheck [ OPTIONS ] + -h,--help this message + -i,--interval The interval time of the probe/s + -c,--count check count, default 1 + -f,--freq filter freq, $$ times per second +``` + +#### 功能 + +监控当前网络是否发发生网络风暴。 + +#### -i,--interval + +监控的时间间隔,默认1s。 + +#### -c,--count + +总监控的次数,监控次数完成后监控工具自动退出。 + +#### -f,--freq + +监控的告警阈值,每秒收到的报文,超过了此阈值,则告警提示网络风暴相关信息; + +### 1.4 xd_scsiiotrace + +```shell +USAGE: xd_scsiiotrace [--help] [-d h:c:t:l] [-E] + +EXAMPLES: + xd_scsiiotrace # Report all scsi cmnd result + xd_scsiiotrace -E # Report error/timeout scsi cmnd result + xd_scsiiotrace -p 0x8000002 # Parse the scsi cmnd result. + xd_scsiiotrace -d 0:0:0:1 # Trace the scsi device only. + + -d, --device=h:c:t:l Trace this scsi device only + -E, --error Trace error/timeout scsi cmnd. (default trace all + scsi cmnd) + -p, --parse=result Parse the scsi cmnd result.(format hex) + -?, --help Give this help list + --usage Give a short usage message +``` + +#### 功能 + +用于监控scsi命令执行结果: +DRIVER_RESULT: 驱动返回结果 +SCSI_RESULT: SCSI转换后的结果。 +DISPOSION: +1)SUCCESS:成功 +2)NEEDS_RETRY/ADD_TO_MLQUEUE:重新入队列 +3)TIMEOUT_ERROR: 命令超时 + +#### -d,--device + +指定需要监控的设备,默认监控所有。 + +#### -E,--error + +只监控不成功的命令(错误或者超时),默认监控所有命令。 + +#### -p,--parse + +用于解析 DRIVER_RESULT或者SCSI_RESULT值具体含义. 默认显示hex值 + +### 1.5 xd_scsiiocount + +```shell +USAGE: xd_scsiiocount [--help] [-t times] [-d device] [-i interval] + +EXAMPLES: + xd_scsiiocount # report all scsi device I/O scsi cmnd count + xd_scsiiocount -i 10 # print 10 second summaries + xd_scsiiocount -d sdc # Trace sdc only + xd_scsiiocount -t 5 # report times + + -d, --device=device Trace this disk only + -i, --interval=interval refresh interval(secs) + -t, --times=times report scsi device I/O times + -?, --help Give this help list + --usage Give a short usage message +``` + +#### 功能 + +用于监控scsi命令下发的命令统计. + +#### -d,--device + +指定需要监控的设备,默认监控所有。 + +#### -i,--interval + +监控的时间间隔,默认5s。 + +#### -t,--times + +监控的次数. 次数达到后,则结束本次监控 + +### 1.6 xd_ext4fsstat + +```shell +USAGE: xd_ext4fstat [--help] [-t times] [-i interval] [-s SORT] [-o opcode] + +EXAMPLES: + xd_ext4fsstat#Trace file read/write stat for ext4 filesystem + xd_ext4fsstat -i 10#printf 10 second summaries + xd_ext4fsstat -m /mnt/test#Trace the special mount point for ext4 filesystem. + xd_ext4fsstat -s r#Sort the read bytes + xd_ext4fsstat -o r#Trace read only, default read and wriete + xd_ext4fsstat -t 5#Trace 5 times + xd_ext4fsstat -v p#show the pid view + + -c, --clean Clean the trace data + -C, --clear Clear the screen + -i, --interval=INTERVAL Refreash interval(secs), default 5s. + -m, --mnt=MNTPOINT the special mount point + -o, --opcode=OPCODE Trace file r/w, defalut both. + -p, --pid=PID Trace the pid only + -s, --sort=SORT Sort r/w/wb, default read + -t, --times=TIMES Trace times + -T, --top=TOP show the topN (1~8192) + -v, --view=VIEW p:pids view, f: files view, defaut file view + -?, --help Give this help list + --usage Give a short usage message +``` + +#### 功能 + +用于监控ext4 文件系统读/写数据量统计. + +#### -c,--clean + +每个周期统计完数据后,历史数据将被清空,重新统计,默认是累积. + +#### -C,--clear + +每个周期显示统结果后,清理屏幕 + +#### -i,--interval + +监控的时间间隔,默认5s. + +#### -m,--mnt + +指定监控特定ext4挂载点数据. + +#### -o,--opcode + +指定监控read或者write,默认两者都监控. + +#### -p,--pid + +指定监控特定pid. + +#### -s,--sort + +指定对监控数据进行排序,默认对read进行排序. + +#### -t,--times + +监控的次数. 次数达到后,则结束本次监控. + +#### -T,--top + +指定只显示top数据,默认显示所有监控到的数据. + +#### -v,--view + +指定显示模式,p:进程模式,f:文件默认,默认只显示文件模式 +注:进程模式下,多进程对同一有写入场景下,显示的writeback数据为文件写入总数据 + 非该单进程写入总数据. + +####