diff --git a/docs/zh/cloud/cluster_deployment/isulad+k8s/iSulad+k8s_environment_deploy.md b/docs/zh/cloud/cluster_deployment/isulad+k8s/isulad+k8s_environment_deploy.md similarity index 100% rename from docs/zh/cloud/cluster_deployment/isulad+k8s/iSulad+k8s_environment_deploy.md rename to docs/zh/cloud/cluster_deployment/isulad+k8s/isulad+k8s_environment_deploy.md diff --git a/docs/zh/cloud/cluster_deployment/kubernetes/_toc.yaml b/docs/zh/cloud/cluster_deployment/kubernetes/_toc.yaml index 81d1fdfc9a78e968d43def188715c49cbe4be6e4..aef523ff51953b09a04fed355b09715d5d1f8966 100644 --- a/docs/zh/cloud/cluster_deployment/kubernetes/_toc.yaml +++ b/docs/zh/cloud/cluster_deployment/kubernetes/_toc.yaml @@ -10,7 +10,7 @@ sections: href: ./deploying_a_kubernets_cluster_manually.md sections: - label: 安装Kubernetes软件包 - href: ./installing_the_Kubernetes_software_package.md + href: ./installing_the_kubernetes_software_package.md - label: 准备证书 href: ./preparing_certificates.md - label: 安装etcd diff --git a/docs/zh/cloud/container_engine/isula_container_engine/cri.md b/docs/zh/cloud/container_engine/isula_container_engine/cri.md index aa8e1424395a91684ad977dc9e873c0d303b8fbe..56462175df3206fb2a9f8ef925a68799e14ccb1e 100644 --- a/docs/zh/cloud/container_engine/isula_container_engine/cri.md +++ b/docs/zh/cloud/container_engine/isula_container_engine/cri.md @@ -2,7 +2,7 @@ ## 描述 -CRI API 接口是由kubernetes 推出的容器运行时接口,CRI定义了容器和镜像的服务接口。ISulad使用CRI接口,实现和kubernetes 的对接。 +CRI API接口是由kubernetes推出的容器运行时接口,CRI定义了容器和镜像的服务接口。ISulad使用CRI接口,实现和kubernetes的对接。 因为容器运行时与镜像的生命周期是彼此隔离的,因此需要定义两个服务。该接口使用[Protocol Buffer](https://developers.google.com/protocol-buffers/)定义,基于[gRPC](https://grpc.io/)。 diff --git a/docs/zh/cloud/container_engine/isula_container_engine/isulad_support_cgroup_v2.md b/docs/zh/cloud/container_engine/isula_container_engine/isulad_support_cgroup_v2.md index 2f57e7802e35880867f6ff83e5181663a6301c4d..e8ec831a0edadaf24eca016182646ba7dac17238 100644 --- a/docs/zh/cloud/container_engine/isula_container_engine/isulad_support_cgroup_v2.md +++ b/docs/zh/cloud/container_engine/isula_container_engine/isulad_support_cgroup_v2.md @@ -6,12 +6,12 @@ cgroup是linux中用于限制进程组资源的机制。cgroup目前包括两个 cgroup v2的目标是取代cgroup v1,cgroup v2相较于cgroup v1具有以下优势: -- 统一层次结构:cgroup v2 引入了一个统一的层次结构,将不同的资源控制(如 CPU、内存等)合并到一个层次结构中。这消除了 cgroup v1 中的分离层次结构,使得资源配置更加直观和简化。 -- 细粒度资源控制:cgroup v2 提供了更细粒度的资源控制,允许用户对各个进程组进行更精细的资源限制和分配。它支持对 CPU、内存、IO、网络、设备等资源进行精确的控制和配额分配。 -- 改进的性能:cgroup v2 在性能方面进行了一些改进,包括减少锁竞争和提高资源分配的效率。这可能导致更好的性能和扩展性,特别是在大规模部署和高负载环境下。 -- cgroup v2 结合 eBPF 可以在运行时动态修改设备访问规则,而无需重新加载内核模块或重启容器。这使得容器的设备访问策略可以根据实际需求进行动态调整和更新,提高了容器环境的灵活性和可管理性。 +- 统一层次结构:cgroup v2引入了一个统一的层次结构,将不同的资源控制(如 CPU、内存等)合并到一个层次结构中。这消除了cgroup v1中的分离层次结构,使得资源配置更加直观和简化。 +- 细粒度资源控制:cgroup v2提供了更细粒度的资源控制,允许用户对各个进程组进行更精细的资源限制和分配。它支持对CPU、内存、IO、网络、设备等资源进行精确的控制和配额分配。 +- 改进的性能:cgroup v2在性能方面进行了一些改进,包括减少锁竞争和提高资源分配的效率。这可能导致更好的性能和扩展性,特别是在大规模部署和高负载环境下。 +- cgroup v2结合eBPF可以在运行时动态修改设备访问规则,而无需重新加载内核模块或重启容器。这使得容器的设备访问策略可以根据实际需求进行动态调整和更新,提高了容器环境的灵活性和可管理性。 -iSulad目前已支持 cgroup v2。 +iSulad目前已支持cgroup v2。 ## 配置iSulad支持cgroup v2 diff --git a/docs/zh/cloud/container_form/system_container/installation_guideline.md b/docs/zh/cloud/container_form/system_container/installation_guideline.md index 30c03ebbb641e3eee94d83b581a47403ae8666de..9d0b906c29d3846e3b3fac6ea83919db1e0e2a5a 100644 --- a/docs/zh/cloud/container_form/system_container/installation_guideline.md +++ b/docs/zh/cloud/container_form/system_container/installation_guideline.md @@ -1,7 +1,7 @@ # 安装指导 ->[!NOTE]说明 ->系统容器的安装需要使用root权限。 +>[!NOTE]说明 +>系统容器的安装需要使用root权限。 1. 首先需要安装iSulad容器引擎。 diff --git a/docs/zh/cloud/container_form/system_container/security_and_isolation.md b/docs/zh/cloud/container_form/system_container/security_and_isolation.md index eeb0ff1c893d64f5c9e43ca05f4ab2ff4317e148..c26febe0c0d8d37957a6c86513d4cc4a3a47f1cb 100644 --- a/docs/zh/cloud/container_form/system_container/security_and_isolation.md +++ b/docs/zh/cloud/container_form/system_container/security_and_isolation.md @@ -43,7 +43,7 @@ user namespace是将容器的root映射到主机的普通用户,使得容器 ### 使用指导 ->[!NOTE]说明 +>[!NOTE]说明 >指定--user-remap参数前,请先将rootfs下所有目录和文件的uid和gid做整体偏移,偏移量为--user-remap指定uid和gid的偏移量。 >例如将dev目录的uid和gid整体uid和gid偏移100000的参考命令为: >chown 100000:100000 dev @@ -117,7 +117,7 @@ exit - authz需要配置用户权限策略,策略文件默认为/var/lib/authz-broker/policy.json,该配置文件支持动态修改,修改完即时生效,不需要重启插件服务。 - 由于容器引擎为root用户启动,放开一般用户使用的一些命令可能会导致该用户不当获得过大权限,需谨慎配置。目前container\_attach、container\_create和container\_exec\_create动作可能会有风险。 - 对于某些复合操作,比如isula exec、isula attach等命令依赖isula inspect是否有权限,如果用户没有inspect权限会直接报错。 -- 采用SSL/TLS 加密通道在增加安全性的同时也会带来性能损耗,如增加延时,消耗较多的CPU资源,除了数据传输外,加解密需要更大吞吐量,因此在并发场景下,相比非TLS通信,其并发量有一定程度上的下降。经实测,在ARM服务器(Cortex-A72 64核)接近空载情况下,采用TLS并发起容器,其最大并发量在200\~250范围内。 +- 采用SSL/TLS加密通道在增加安全性的同时也会带来性能损耗,如增加延时,消耗较多的CPU资源,除了数据传输外,加解密需要更大吞吐量,因此在并发场景下,相比非TLS通信,其并发量有一定程度上的下降。经实测,在ARM服务器(Cortex-A72 64核)接近空载情况下,采用TLS并发起容器,其最大并发量在200\~250范围内。 - 服务端指定--tlsverify时,认证文件默认配置路径为/etc/isulad。且默认文件名分别为ca.pem、cert.pem、key.pem。 ### 使用示例 @@ -184,10 +184,10 @@ exit - Alice可以执行任何container操作:\{"name":"policy\_5","users":\["alice"\],"actions":\["container"\]\}。 - Alice可以执行任何container操作,但请求的种类只能是get:\{"name":"policy\_5","users":\["alice"\],"actions":\["container"\], "readonly":true \}。 - >[!NOTE]说明 - >- 配置中匹配action支持正则表达式。 - >- users不支持正则表达式。 - >- users不能有重复用户,即同一用户不能被多条规则匹配。 + >[!NOTE]说明 + >- 配置中匹配action支持正则表达式。 + >- users不支持正则表达式。 + >- users不能有重复用户,即同一用户不能被多条规则匹配。 5. 配置并更新完之后,客户端配置TLS参数连接容器引擎,即是以受限的权限访问。 @@ -195,7 +195,7 @@ exit [root@localhost ~]# isula version --tlsverify --tlscacert=/root/.iSulad/ca.pem --tlscert=/root/.iSulad/cert.pem --tlskey=/root/.iSulad/key.pem -H=tcp://127.0.0.1:2375 ``` - 如果想默认配置TLS认证进行客户端连接,可以将文件移动到\~/.iSulad,并设置 ISULAD\_HOST和ISULAD\_TLS\_VERIFY变量(而不是每次调用时传递 -H=tcp://$HOST:2375和--tlsverify)。 + 如果想默认配置TLS认证进行客户端连接,可以将文件移动到\~/.iSulad,并设置ISULAD\_HOST和ISULAD\_TLS\_VERIFY变量(而不是每次调用时传递 -H=tcp://$HOST:2375和--tlsverify)。 ```sh [root@localhost ~]# mkdir -pv ~/.iSulad @@ -264,10 +264,10 @@ lxcfs-tools [OPTIONS] COMMAND [COMMAND_OPTIONS] ### 约束限制 -- 当前只支持proc文件系统下的cpuinfo, meminfo, stat, diskstats, partitions,swaps和uptime文件,其他的文件和其他内核API文件系统(比如sysfs)未做隔离 。 +- 当前只支持proc文件系统下的cpuinfo, meminfo, stat, diskstats, partitions,swaps和uptime文件,其他的文件和其他内核API文件系统(比如sysfs)未做隔离。 - 安装rpm包后会在/var/lib/isulad/hooks/hookspec.json生成样例json文件,用户如果需要增加日志功能,需要在定制时加入--log配置。 - diskstats只能显示支持cfq调度的磁盘信息,无法显示分区信息。容器内设备会被显示为/dev目录下的名字。若不存在则为空。此外,容器根目录所在设备会被显示为sda。 -- 挂载lxcfs时必须使用slave参数。若使用shared参数,可能会导致容器内挂载点泄露到主机,影响主机运行 。 +- 挂载lxcfs时必须使用slave参数。若使用shared参数,可能会导致容器内挂载点泄露到主机,影响主机运行。 - lxcfs支持服务优雅降级使用,若lxcfs服务crash或者不可用,容器内查看到的cpuinfo, meminfo, stat, diskstats, partitions, swaps和uptime均为host信息,容器其他业务功能不受影响。 - lxcfs底层依赖fuse内核模块以及libfuse库,因此需要内核支持fuse。 - lxcfs当前仅支持容器内运行64位的app,如果容器内运行32位的app可能会导致app读取到的cpuinfo信息不符合预期。 diff --git a/docs/zh/cloud/image_builder/isula_build/isula_build.md b/docs/zh/cloud/image_builder/isula_build/isula_build.md index e85a681fd3b4c914ae0d88db85b2f1997af59792..6f1e19031236a9b4c1e0325ddc3e5b3e4a5e13d2 100644 --- a/docs/zh/cloud/image_builder/isula_build/isula_build.md +++ b/docs/zh/cloud/image_builder/isula_build/isula_build.md @@ -6,7 +6,7 @@ * 支持的机器架构:x86_64 和 AArch64 * 支持的操作系统:openEuler -* 用户具有root权限。 +* 用户具有root权限 ### 安装isula-build @@ -58,7 +58,7 @@ | group | 可选 | 设置本地套接字isula_build.sock文件属组使得加入该组的非特权用户可以操作isula-build | isula | | experimental | 可选 | 设置是否开启实验特性 | true:开启实验特性;false:关闭实验特性 | -* /etc/isula-build/storage.toml: 本地持久化存储的配置文件,包含所使用的存储驱动的配置。 +* /etc/isula-build/storage.toml:本地持久化存储的配置文件,包含所使用的存储驱动的配置。 | 配置项 | 是否可选 | 配置项含义 | | ------ | -------- | ------------------------------ | @@ -212,7 +212,7 @@ isula-build ctr-img build [flags] * --build-static:KeyValue值,构建二进制一致性。目前包含如下Key值: * build-time:string,使用固定时间戳来构建容器镜像;时间戳格式为“YYYY-MM-DD HH-MM-SS”。 * -f, --filename:string,Dockerfile的路径,不指定则是使用当前路径的Dockerfile文件。 -* --format: string, 设置构建镜像的镜像格式:oci | docker(需开启实验特性选项)。 +* --format: string,设置构建镜像的镜像格式:oci | docker(需开启实验特性选项)。 * --iidfile:string,输出 image ID 到本地文件。 * -o, --output:string,镜像导出的方式和路径。 * --proxy:布尔值,继承主机侧环境的proxy环境变量(默认为true)。 @@ -279,6 +279,7 @@ Build success with image id: 39b62a3342eed40b41a1bcd9cd455d77466550dfa0f0109af7a 以此方式,同一环境多次构建出来的容器镜像和镜像ID均会保持一致。 **\--format** + 开始实验特性后该选项可用,默认为OCI镜像格式。可以手动指定镜像格式进行构建,例如,下面分别为构建OCI镜像格式以及Docker镜像格式镜像的命令。 ```sh @@ -334,7 +335,7 @@ $ cat testfile * `oci-archive:/:image:tag`:将构建成功的镜像以OCI镜像的格式保存至本地。比如:`-o oci-archive:/root/image.tar:busybox:latest`。 -除去各个flags之外,build子命令的命令行最后还会接收一个argument,该argument类型是string,意义为context,即该Dockerfile构建环境的上下文。该参数缺省值为isula-build被执行的当前路径。该路径会影响 .dockerignore 和 Dockerfile的ADD/COPY指令 所检索的路径。 +除去各个flags之外,build子命令的命令行最后还会接收一个argument,该argument类型是string,意义为context,即该Dockerfile构建环境的上下文。该参数缺省值为isula-build被执行的当前路径。该路径会影响 .dockerignore 和 Dockerfile的ADD/COPY指令所检索的路径。 **\--proxy** @@ -364,9 +365,9 @@ sudo isula-build ctr-img build --cap-add CAP_SYS_ADMIN --cap-add CAP_SYS_PTRACE > [!NOTE]说明 > -> * isula-build最大支持并发构建100个容器镜像。 -> * isula-build支持Dockerfile最大为1MiB。 -> * isula-build支持 .dockerignore 最大为 1MiB。 +> * isula-build 最大支持并发构建100个容器镜像。 +> * isula-build 支持Dockerfile最大为1MiB。 +> * isula-build 支持 .dockerignore 最大为 1MiB。 > * 用户需保证Dockerfile文件的权限为仅当前用户可读写,避免别的用户进行篡改。 > * 构建时,RUN指令会启动容器在容器内进行构建,目前 isula-build 仅支持使用主机网络。 > * isula-build 导出的镜像压缩格式,目前仅支持tar格式。 diff --git a/docs/zh/cloud/kmesh/kmesh/getting_to_know_kmesh.md b/docs/zh/cloud/kmesh/kmesh/getting_to_know_kmesh.md index d82f45f673d721178235b9202323c81f7f59b94f..5c72fc80f5dbf53987a704e949d6d12bc7fe7072 100644 --- a/docs/zh/cloud/kmesh/kmesh/getting_to_know_kmesh.md +++ b/docs/zh/cloud/kmesh/kmesh/getting_to_know_kmesh.md @@ -7,10 +7,10 @@ 基于k8s的云基础设施能够帮助应用实现敏捷的部署管理,但在应用流量编排方面有所欠缺,serviceMesh的出现很好的弥补了k8s流量编排的缺陷,与k8s互补,真正实现敏捷的云应用开发运维;但随着对serviceMesh应用的逐步深入,当前基于sidecar的网格架构在数据面存在明显的性能缺陷,已成为业界共识的问题: * 时延性能差 - 以serviceMesh典型软件istio为例,网格化后,服务访问单跳时延增加2.65ms;无法满足时延敏感型应用诉求 + 以serviceMesh典型软件istio为例,网格化后,服务访问单跳时延增加2.65ms;无法满足时延敏感型应用诉求。 * 底噪开销大 - istio中,每个sidecar软件占用内存50M+,CPU默认独占2 core,对于大规模集群底噪开销太大,降低了业务容器的部署密度 + istio中,每个sidecar软件占用内存50M+,CPU默认独占2 core,对于大规模集群底噪开销太大,降低了业务容器的部署密度。 Kmesh基于可编程内核,将网格流量治理下沉OS,数据路径3跳->1跳,大幅提升网格数据面的时延性能,帮助业务快速创新。 @@ -23,16 +23,16 @@ Kmesh总体架构如下图所示: Kmesh的主要部件包括: * kmesh-controller: - kmesh管理程序,负责Kmesh生命周期管理、XDS协议对接、观测运维等功能 + kmesh管理程序,负责Kmesh生命周期管理、XDS协议对接、观测运维等功能。 * kmesh-api: - kmesh对外提供的api接口层,主要包括:xds转换后的编排API、观测运维通道等 + kmesh对外提供的api接口层,主要包括:xds转换后的编排API、观测运维通道等。 * kmesh-runtime: - kernel中实现的支持L3~L7流量编排的运行时 + kernel中实现的支持L3~L7流量编排的运行时。 * kmesh-orchestration: - 基于ebpf实现L3~L7流量编排,如路由、灰度、负载均衡等 + 基于ebpf实现L3~L7流量编排,如路由、灰度、负载均衡等。 * kmesh-probe: - 观测运维探针,提供端到端观测能力 + 观测运维探针,提供端到端观测能力。 diff --git a/docs/zh/cloud/kubeos/kubeos/overview.md b/docs/zh/cloud/kubeos/kubeos/overview.md index 3b9405aa48795ce6ede124d3aa67b17f00c590d9..27e75e27e6fc717c2bb5558484f84f4e98703dcd 100644 --- a/docs/zh/cloud/kubeos/kubeos/overview.md +++ b/docs/zh/cloud/kubeos/kubeos/overview.md @@ -5,4 +5,4 @@ 本文档适用于使用openEuler系统并希望了解和使用容器OS的社区开发者、开源爱好者以及相关合作伙伴。使用人员需要具备以下经验和技能: * 熟悉Linux基本操作。 -* 对kubernetes和docker有一定了解 +* 对kubernetes和docker有一定了解。 diff --git a/docs/zh/edge_computing/kube_edge/kube_edge_deployment_guide.md b/docs/zh/edge_computing/kube_edge/kube_edge_deployment_guide.md index 9738604a11a2f085db6af7982406a95ef9eec9b1..96a617910ac7180d82de4dff01513352bd42fee4 100644 --- a/docs/zh/edge_computing/kube_edge/kube_edge_deployment_guide.md +++ b/docs/zh/edge_computing/kube_edge/kube_edge_deployment_guide.md @@ -4,7 +4,7 @@ ### KubeEdge -KubeEdge 是一个致力于解决边缘场景问题的开源系统,它将容器化应用程序编排和设备管理的能力扩展到边缘设备。基于 Kubernetes,KubeEdge 为网络、应用程序部署以及云侧与边缘侧之间的元数据同步提供核心基础设施支持。KubeEdge 支持 MQTT,并允许开发人员编写自定义逻辑,在边缘上启用资源受限的设备通信。KubeEdge 由云部分和边缘部分组成,目前均已开源。 +KubeEdge 是一个致力于解决边缘场景问题的开源系统,它将容器化应用程序编排和设备管理的能力扩展到边缘设备。基于 Kubernetes、KubeEdge 为网络、应用程序部署以及云侧与边缘侧之间的元数据同步提供核心基础设施支持。KubeEdge 支持 MQTT,并允许开发人员编写自定义逻辑,在边缘上启用资源受限的设备通信。KubeEdge 由云部分和边缘部分组成,目前均已开源。 > @@ -38,7 +38,7 @@ iSulad 是一个轻量级容器 runtime 守护程序,专为 IOT 和 Cloud 基 ### 下载工具包 -[kubeedge-tools](https://gitee.com/Poorunga/kubeedge-tools) 工具包提供了完备的离线安装包以及部署脚本,降低了部署复杂度并且支持在节点无法访问外网的条件下快速搭建 KubeEdge 集群。 +[kubeedge-tools](https://gitee.com/Poorunga/kubeedge-tools) 工具包提供了完备的离线安装包以及部署脚本,降低了部署复杂度,并且支持在节点无法访问外网的条件下快速搭建 KubeEdge 集群。 ```bash # 下载 kubeedge-tools 工具包并解压(包括云侧和边缘侧) @@ -51,7 +51,7 @@ $ cd kubeedge-tools-master ### 部署 k8s -以下操作仅在云侧执行 +以下操作仅在云侧执行。 #### 初始化云侧环境 @@ -61,7 +61,7 @@ $ ./setup-cloud.sh #### 安装 k8s -k8s 的安装部署使用 openEuler 22.03 SP2 的版本 +k8s 的安装部署使用 openEuler 22.03 SP2 的版本。 #### 安装云侧容器网络 diff --git a/docs/zh/edge_computing/kube_edge/kube_edge_user_document.md b/docs/zh/edge_computing/kube_edge/kube_edge_user_document.md index 6f59f8cf48cc2eeeb4c1695c6b606fa49867dd7f..2b8da61b07828cc02574cb9128c290324db90a3b 100644 --- a/docs/zh/edge_computing/kube_edge/kube_edge_user_document.md +++ b/docs/zh/edge_computing/kube_edge/kube_edge_user_document.md @@ -221,4 +221,4 @@ kubeedge-pi-counter-c69698d6-rb4xz 1/1 Running 0 2m 192 3. 自定义云边消息路由 - + diff --git a/docs/zh/embedded/uniproton/uniproton_apis.md b/docs/zh/embedded/uniproton/uniproton_apis.md index 07cea125d484287f884ca7c2c12e2ecddc517b9a..a8b38420160472d77c0596c70529654b2f80ae41 100644 --- a/docs/zh/embedded/uniproton/uniproton_apis.md +++ b/docs/zh/embedded/uniproton/uniproton_apis.md @@ -176,7 +176,7 @@ ### 查询任务基本信息 -获取任务基本信息,包括任务切换时的PC,SP、任务状态、优先级、任务栈大小、栈顶值,任务名等。 +获取任务基本信息,包括任务切换时的PC、SP、任务状态、优先级、任务栈大小、栈顶值和任务名等。 **输入**:任务PID,用于存放任务基本信息查询结果的缓冲区 @@ -274,7 +274,7 @@ 创建一个队列,创建时可以设定队列长度和队列结点大小。 -**输入**: 队列节点个数、每个队列节点大小、队列ID指针。 +**输入**:队列节点个数、每个队列节点大小、队列ID指针。 **处理**: @@ -503,7 +503,7 @@ **处理**:清除所有的中断请求位或指定的中断请求位。 -**输出**:所有的中断请求位或指定的中断请求位被清除 +**输出**:所有的中断请求位或指定的中断请求位被清除。 ## 定时器 @@ -527,7 +527,7 @@ 删除指定的定时器。 -**输入**: 定时器句柄 +**输入**: 定时器句柄。 **处理**:根据传入的定时器句柄,找到定时器控制块,将其内容清空并将控制块挂接到相应的空闲链表中。 @@ -540,7 +540,7 @@ 指定的定时器开始计时。 -**输入**: 定时器句柄 +**输入**: 定时器句柄。 **处理**:对于软件定时器,根据当前Tick计数以及定时器周期,计算结束时间,将此定时器控制块挂入定时器SortLink。 @@ -623,7 +623,7 @@ 申请指定的信号量,若其计数值大于0,则直接将计数值减1返回,否则发生任务阻塞,等待时间可通过入参设定。 -**输入**:信号量句柄、等待时间 +**输入**:信号量句柄、等待时间。 **处理**: @@ -659,7 +659,7 @@ **输出**: -- 成功:指定信号量的计数值被修改; +- 成功:指定信号量的计数值被修改。 - 失败:返回错误码。 ### 信号量计数值获取 @@ -778,7 +778,7 @@ **输出**: - 成功:注册成功。 -- 失败:错误码 +- 失败:错误码。 ## OS启动 @@ -791,7 +791,7 @@ **输出**: - 成功:返回OK。 -- 失败:错误码 +- 失败:错误码。 ### 用户业务入口 @@ -802,7 +802,7 @@ PRT_AppInit 用户业务函数入口,在 main 函数后调用,在此函数 **输出**: - 成功:返回OK。 -- 失败:错误码 +- 失败:错误码。 ### 硬件驱动初始化入口 @@ -813,7 +813,7 @@ PRT_HardDrvInit 硬件驱动初始化函数入口,在 main 函数后调用, **输出**: - 成功:返回OK。 -- 失败:错误码 +- 失败:错误码。 ### 硬件启动流程入口 @@ -832,7 +832,7 @@ PRT_HardBootInit 在 OS 启动时调用,在main函数前被调用,可以用 初始化保留内存,初始化 remoteproc、virtio、rpmsg,建立 Uniproton 与 Linux 两端配对的 endpoint,供消息收发使用。 -**输入**:无。 +**输入**:无 **输出**: @@ -841,7 +841,7 @@ PRT_HardBootInit 在 OS 启动时调用,在main函数前被调用,可以用 ### 消息接收函数 -接收消息,并触发SGI中断 +接收消息,并触发SGI中断。 **输入**: @@ -856,7 +856,7 @@ PRT_HardBootInit 在 OS 启动时调用,在main函数前被调用,可以用 ### 消息发送函数 -发送消息和SGI中断 +发送消息和SGI中断。 **输入**:类型为 unsigned char * 的存储消息的缓冲区、类型为 int 的消息长度。 @@ -3047,7 +3047,7 @@ errno: **参数**: 1. timespec结构体指针ts。 -2. 时基base +2. 时基base。 **输出**: @@ -3060,11 +3060,11 @@ errno: #### wcsftime -暂不支持 +暂不支持。 #### wcsftime_l -暂不支持 +暂不支持。 ### 内存管理 diff --git a/docs/zh/embedded/uniproton/uniproton_functions.md b/docs/zh/embedded/uniproton/uniproton_functions.md index d3c5480cf6c35d40053b17d3d466b04ac835fda3..346230df00c43cba106005644898c5235c008ba0 100644 --- a/docs/zh/embedded/uniproton/uniproton_functions.md +++ b/docs/zh/embedded/uniproton/uniproton_functions.md @@ -10,9 +10,9 @@ UniProton任务管理模块提供任务创建、任务删除、任务挂起、 ## 支持事件管理 -事件机制可以实现线程之间的通讯。事件通讯只能是事件类型的通讯,无数据传输。 +事件机制可以实现线程之间的通讯。事件通讯只能是事件类型的通讯,无数据传输。 -UniProton事件作为任务的扩展,实现任务之间的通讯。每个任务支持32种类型事件(32个 bit位,每bit代表一种事件类型)。 +UniProton事件作为任务的扩展,实现任务之间的通讯。每个任务支持32种类型事件(32个bit位,每bit代表一种事件类型)。 UniProton提供读取本任务事件和写指定任务事件的功能。读事件时可以同时读取多种事件,也可以只读取一种事件,写事件时也可以同时写一种或多种类型事件。 @@ -139,11 +139,11 @@ OpenAMP是一个开源软件框架,旨在通过非对称多处理器的开源 ## 支持POSIX标准接口 -[UniProton支持posix标准接口](./uniproton_apis.md) +《[UniProton支持posix标准接口](./uniproton_apis.md)》 ## 支持设备驱动 -UniProton的驱动结构、风格与linux类似,将驱动设备文件化,即VFS系统,通过驱动注册接口,将驱动注册到文件系统中,应用层只需要通过标准系统调用,即可调用底层驱动。整个驱动框架代码适配自开源RTOS系统Nuttx的驱动模块,因此接口调用也与Nuttx基本一致。struct file_operations结构体保存设备文件操作的方法,定义在fs.h头文件中,通过register_driver接口将驱动设备挂到对应的struct inode节点中,struct inode描述了每个设备节点的位置和数据。当系统调用操作设备文件时,根据对应文件的inode就能索引到对应的函数。接口详细信息可以查看[UniProton接口说明](./uniproton_apis.md)。 +UniProton的驱动结构、风格与linux类似,将驱动设备文件化,即VFS系统,通过驱动注册接口,将驱动注册到文件系统中,应用层只需要通过标准系统调用,即可调用底层驱动。整个驱动框架代码适配自开源RTOS系统Nuttx的驱动模块,因此接口调用也与Nuttx基本一致。struct file_operations结构体保存设备文件操作的方法,定义在fs.h头文件中,通过register_driver接口将驱动设备挂到对应的struct inode节点中,struct inode描述了每个设备节点的位置和数据。当系统调用操作设备文件时,根据对应文件的inode就能索引到对应的函数。接口详细信息可以查看《[UniProton接口说明](./uniproton_apis.md)》。 ## 支持Shell命令行 diff --git a/docs/zh/server/_toc.yaml b/docs/zh/server/_toc.yaml index 680cfae4f4235c29188522b614735e83375d05be..78db11c5b6e4ee7579fe3786207471b37d2a839c 100644 --- a/docs/zh/server/_toc.yaml +++ b/docs/zh/server/_toc.yaml @@ -31,6 +31,7 @@ sections: - href: ./security/cve_ease/_toc.yaml - href: ./security/cert_signature/_toc.yaml - href: ./security/shangmi/_toc.yaml + - href: ./security/secdetector/_toc.yaml - label: 内存与存储 sections: - href: ./memory_storage/lvm/_toc.yaml @@ -60,6 +61,8 @@ sections: sections: - href: ./development/application_dev/_toc.yaml - href: ./development/gcc/_toc.yaml + - href: ./development/ai4c/_toc.yaml + - href: ./development/fangtian/_toc.yaml - label: HA高可用 sections: - href: ./high_availability/ha/_toc.yaml diff --git a/docs/zh/server/administration/administrator/configuring_the_web_server.md b/docs/zh/server/administration/administrator/configuring_the_web_server.md index db694de7fd18bc4d6c4d4bf36b01bfbf8b61bbb5..4f6ebf9f0698fee5ca68d09b75f0dbb8d7292445 100644 --- a/docs/zh/server/administration/administrator/configuring_the_web_server.md +++ b/docs/zh/server/administration/administrator/configuring_the_web_server.md @@ -89,7 +89,7 @@ openEuler系统中的web服务器版本是Apache HTTP服务器2.4版本,即htt #### 验证服务状态 -验证httpd服务是否正在运行 +验证httpd服务是否正在运行。 ```shell # systemctl is-active httpd diff --git a/docs/zh/server/development/FangTian/_toc.yaml b/docs/zh/server/development/fangtian/_toc.yaml similarity index 100% rename from docs/zh/server/development/FangTian/_toc.yaml rename to docs/zh/server/development/fangtian/_toc.yaml diff --git a/docs/zh/server/development/FangTian/fangtian_environment_configuration.md b/docs/zh/server/development/fangtian/fangtian_environment_configuration.md similarity index 100% rename from docs/zh/server/development/FangTian/fangtian_environment_configuration.md rename to docs/zh/server/development/fangtian/fangtian_environment_configuration.md diff --git a/docs/zh/server/development/FangTian/fangtian_for_linux_waylan_and_openharmony_applications.md b/docs/zh/server/development/fangtian/fangtian_for_linux_waylan_and_openharmony_applications.md similarity index 100% rename from docs/zh/server/development/FangTian/fangtian_for_linux_waylan_and_openharmony_applications.md rename to docs/zh/server/development/fangtian/fangtian_for_linux_waylan_and_openharmony_applications.md diff --git a/docs/zh/server/development/FangTian/figures/arkui_ele.png b/docs/zh/server/development/fangtian/figures/arkui_ele.png similarity index 100% rename from docs/zh/server/development/FangTian/figures/arkui_ele.png rename to docs/zh/server/development/fangtian/figures/arkui_ele.png diff --git a/docs/zh/server/development/FangTian/figures/desktop_simple_apps.png b/docs/zh/server/development/fangtian/figures/desktop_simple_apps.png similarity index 100% rename from docs/zh/server/development/FangTian/figures/desktop_simple_apps.png rename to docs/zh/server/development/fangtian/figures/desktop_simple_apps.png diff --git a/docs/zh/server/development/FangTian/figures/wayland_apps.png b/docs/zh/server/development/fangtian/figures/wayland_apps.png similarity index 100% rename from docs/zh/server/development/FangTian/figures/wayland_apps.png rename to docs/zh/server/development/fangtian/figures/wayland_apps.png diff --git a/docs/zh/server/development/FangTian/overview.md b/docs/zh/server/development/fangtian/overview.md similarity index 100% rename from docs/zh/server/development/FangTian/overview.md rename to docs/zh/server/development/fangtian/overview.md diff --git a/docs/zh/server/development/gcc/_toc.yaml b/docs/zh/server/development/gcc/_toc.yaml index 45aaeacbc8039f52adb471c9cd1f85d12244d0dc..f74787c682953f7a305ee24210036eaf525c03a0 100644 --- a/docs/zh/server/development/gcc/_toc.yaml +++ b/docs/zh/server/development/gcc/_toc.yaml @@ -8,4 +8,6 @@ sections: - label: 内核反馈优化特性 href: ./kernel_fdo_user_guide.md - label: 全场景链接时二进制库内联优化 - href: ./link_time_binary_library_inlining_optimization.md \ No newline at end of file + href: ./link_time_binary_library_inlining_optimization.md + - label: GCC插件框架特性用户指南 + href: ./pin_user_guide.md \ No newline at end of file diff --git a/docs/zh/tools/community_tools/pin/pin_user_guide.md b/docs/zh/server/development/gcc/pin_user_guide.md similarity index 100% rename from docs/zh/tools/community_tools/pin/pin_user_guide.md rename to docs/zh/server/development/gcc/pin_user_guide.md diff --git a/docs/zh/server/diversified_computing/dpu_offload/imperceptible_container_management_plane_offload.md b/docs/zh/server/diversified_computing/dpu_offload/imperceptible_container_management_plane_offload.md index 695aad726c184805e4df0b36adcd7053379ec618..faad9b537f7195d28cb9c1753d272e6639603737 100644 --- a/docs/zh/server/diversified_computing/dpu_offload/imperceptible_container_management_plane_offload.md +++ b/docs/zh/server/diversified_computing/dpu_offload/imperceptible_container_management_plane_offload.md @@ -10,7 +10,7 @@ DPU的出现就是为了将这部分算力资源从主机CPU上解放出来, ## 架构介绍 -#### 容器管理面DPU无感卸载架构 +### 容器管理面DPU无感卸载架构 **图1**容器管理面DPU无感卸载架构 @@ -20,12 +20,12 @@ 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_deployment_guide.md) +容器管理面无感卸载的操作步骤可参考《[部署指导文档](./offload_deployment_guide.md)》。 > ![](./public_sys-resources/icon-note.gif)**说明**: > -> 上述操作指导涉及对容器管理面组件的少量改动和rexec工具修改,这些修改基于指定版本,其他版本可基于实际执行环境做适配修改。文档中提供的patch仅供验证指导使用,不具备实际商用的条件 \ No newline at end of file +> 上述操作指导涉及对容器管理面组件的少量改动和rexec工具修改,这些修改基于指定版本,其他版本可基于实际执行环境做适配修改。文档中提供的patch仅供验证指导使用,不具备实际商用的条件。 diff --git a/docs/zh/server/diversified_computing/dpu_offload/libvirt_direct_connection_aggregation_environment_establishment.md b/docs/zh/server/diversified_computing/dpu_offload/libvirt_direct_connection_aggregation_environment_establishment.md index 5b01719913a968b6cf0a9533b130522018bc717b..1d72f90b0a31914f7c279d69f65d5cf34cc3c062 100644 --- a/docs/zh/server/diversified_computing/dpu_offload/libvirt_direct_connection_aggregation_environment_establishment.md +++ b/docs/zh/server/diversified_computing/dpu_offload/libvirt_direct_connection_aggregation_environment_establishment.md @@ -23,7 +23,7 @@ ## **3.1** QTFS文件系统部署 -可参考qtfs主页:https://gitee.com/openeuler/dpu-utilities/tree/master/qtfs +可参考qtfs主页: QTFS建联需要关闭防火墙。 @@ -97,7 +97,7 @@ nohup /usr/bin/udsproxyd 1 192.168.10.11 12121 192.168.10.10 12121 2>&1 & a) 通过配置工具qtcfg加载,进入qtfs/qtinfo目录编译工具: -在qtfs的client端执行 +在qtfs的client端执行: ```bash @@ -105,7 +105,8 @@ make role=client make install ``` -在qtfs的server端执行 + +在qtfs的server端执行: ```bash @@ -121,6 +122,7 @@ make install qtcfg -x /var/lib/libvirt/ ``` + 查询白名单为: ```bash @@ -128,6 +130,7 @@ qtcfg -x /var/lib/libvirt/ qtcfg -z ``` + 删除白名单为: ```bash @@ -135,6 +138,7 @@ qtcfg -z qtcfg -y 0 ``` + 删除白名单时,参数为查询白名单时列出来的index序号。 b) 通过配置文件增加,这需要在qtfs或qtfs_server内核模块加载前配置,通过内核模块初始化时读取该文件进行白名单配置。 @@ -159,6 +163,7 @@ rexec是一个用c语言开发的远程执行组件,分为rexec client和rexec chmod 400 /etc/rexec/whitelist ``` + 如果想仅用于测试,可以不进行白名单配置,删除此文件重启rexec_server进程后则没有白名单限制。 下载dpu-utilities代码后,进入qtfs/rexec主目录下,执行:`make && make install`即可安装rexec所需全部二进制到/usr/bin目录下,包括了:`rexec、rexec_server`两个二进制可执行文件。 @@ -207,7 +212,7 @@ systemctl start rexec - 方式2: -手动后台拉起 +手动后台拉起: ```bash @@ -233,7 +238,7 @@ 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版本。 b) 将qcow2挂载出来: @@ -277,6 +282,7 @@ yum groupinstall "Development tools" -y yum install -y vim meson qemu qemu-img strace edk2-aarch64 tar ``` + 其中edk2-aarch64是arm环境下虚拟机启动需要的。 b) 安装libvirt编译需要的依赖包: @@ -287,11 +293,11 @@ 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。源码包:。 d) 获取直连聚合libvirt patch: -https://gitee.com/openeuler/dpu-utilities/tree/master/usecases/transparent-offload/patches/libvirt + e)将源码包解压到chroot环境下的目录,如/home。将patch打上。 @@ -303,7 +309,7 @@ meson build --prefix=/usr -Ddriver_remote=enabled -Ddriver_network=enabled -Ddri ``` -g) 安装成功 +g) 安装成功。 ```bash @@ -342,6 +348,7 @@ LD_PRELOAD=/usr/lib64/libudsproxy.so virtlogd -d LD_PRELOAD=/usr/lib64/libudsproxy.so libvirtd -d ```` + 如果已配置qtfs使用udsproxyd白名单,则不需要增加LD_PRELOAD前缀: ```bash diff --git a/docs/zh/server/diversified_computing/dpu_offload/offload_deployment_guide.md b/docs/zh/server/diversified_computing/dpu_offload/offload_deployment_guide.md index 8363931a67044640282a26bf88b7136d424828ea..851e5ed5a5847ad295ffa2bb67e58da8a828a284 100644 --- a/docs/zh/server/diversified_computing/dpu_offload/offload_deployment_guide.md +++ b/docs/zh/server/diversified_computing/dpu_offload/offload_deployment_guide.md @@ -55,7 +55,7 @@ kubelet暂不需要功能性改动,可能会遇到容器QoS管理器首次设 创建容器管理面所需要的文件夹,然后插入qtfs_server.ko,并拉起engine进程。 -此外在服务器端,还需要创建rexec脚本/usr/bin/dockerd. +此外在服务器端,还需要创建rexec脚本/usr/bin/dockerd。 ``` shell #!/bin/bash @@ -138,7 +138,7 @@ CMD_NET_ADDR=tcp://<服务端ip>: /usr/bin/rexec /usr/bin/kill $ CMD_NET_ADDR=tcp://<服务端ip>: /usr/bin/rexec /usr/sbin/modprobe $* ``` -在chroot到dockerd和containerd运行所需的rootfs后,用如下的命令拉起dockerd和containerd +在chroot到dockerd和containerd运行所需的rootfs后,用如下的命令拉起dockerd和containerd。 * containerd diff --git a/docs/zh/server/installation_upgrade/installation/installation_guide.md b/docs/zh/server/installation_upgrade/installation/installation_guide.md index 5e09ccdca5ef700482924caedae0d3a6d61d2dd1..0159d5356632b0906e14d8d921d493ce58a71838 100644 --- a/docs/zh/server/installation_upgrade/installation/installation_guide.md +++ b/docs/zh/server/installation_upgrade/installation/installation_guide.md @@ -58,7 +58,7 @@ 可以通过键盘操作图形化安装程序。 -- “Tab”、“shift Tab”:界面控件(按钮、区域框、复选框等)间的移动。 +- “Tab”、“Shift Tab”:界面控件(按钮、区域框、复选框等)间的移动。 - “↑”、“↓”方向键:列表里的移动。 - “←”、“→”方向键:水平工具条和表条间移动。 - “空格”、“Enter”:选择或删除高亮显示的选项、展开或折叠下拉菜单。 @@ -199,7 +199,7 @@ >![](./public_sys-resources/icon-note.gif) **说明:** > >- 在进行分区时,出于系统性能和安全的考虑,建议您划分如下单独分区:/boot、/var、/var/log、/var/log/audit、/home、/tmp。 分区建议如[表1](#table1)所示。 ->- 系统如果配置了swap分区,当系统的物理内存不够用时,会使用swap分区。虽然 swap分区可以增大物理内存大小的限制,但是如果由于内存不足使用到swap分区,会增加系统的响应时间,性能变差。因此在物理内存充足或者性能敏感的系统中,不建议配置swap分区。 +>- 系统如果配置了swap分区,当系统的物理内存不够用时,会使用swap分区。虽然swap分区可以增大物理内存大小的限制,但是如果由于内存不足使用到swap分区,会增加系统的响应时间,性能变差。因此在物理内存充足或者性能敏感的系统中,不建议配置swap分区。 >- 如果需要拆分逻辑卷组则需要选择“自定义”进行手动分区,并在“手动分区”界面单击“卷组”区域中的“修改”按钮重新配置卷组。 **表1** 磁盘分区建议 @@ -229,7 +229,7 @@ 在“手动分区”界面可以通过如下两种方式进行分区,分区完成后如[图13](#fig1277151815248)所示。 -- 自动创建:在界面单击“点击这里自动创建它们”,系统会根据可用的存储空间,自动分出5个挂载点:/boot、/、/home、/boot/efi、swap。 +- 自动创建:在界面单击“点击这里自动创建它们”,系统会根据可用的存储空间,自动分出5个挂载点:/boot、/、/home、/boot/efi、/swap。 - 手动创建:单击“![](./figures/zh-cn_image_0229291243.png)”添加新挂载点,建议每个挂载点的期望容量不超过可用空间。 @@ -264,20 +264,20 @@ ## 设置Root帐户 -在“安装概览”页面中选择“Root帐户”,弹出设置“ROOT帐户”界面,如[图16](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1323165793018)所示,根据[密码复杂度](#密码复杂度)输入密码并再次输入密码进行确认。 +在“安装概览”页面中选择“Root帐户”,弹出设置“Root帐户”界面,如[图16](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1323165793018)所示,根据[密码复杂度](#密码复杂度)输入密码并再次输入密码进行确认。 >![](./public_sys-resources/icon-note.gif) **说明:** > ->- root帐户是用来执行关键系统管理任务,不建议您在日常工作及系统访问时使用root帐户。 +>- Root帐户是用来执行关键系统管理任务,不建议您在日常工作及系统访问时使用Root帐户。 > ->- 在“ROOT帐户”界面若选择“禁用root帐户”则root帐户将禁用。 +>- 在“Root帐户”界面若选择“禁用Root帐户”则Root帐户将禁用。 -**图 16** root帐户 +**图 16** Root帐户 ![](./figures/root_password.png) ### 密码复杂度 -用户设置的root用户密码或新创建用户的密码均需要满足密码复杂度要求,否则会导致密码设置或用户创建失败。设置密码的复杂度的要求如下: +用户设置的Root用户密码或新创建用户的密码均需要满足密码复杂度要求,否则会导致密码设置或用户创建失败。设置密码的复杂度的要求如下: 1. 口令长度至少8个字符。 2. 口令至少包含大写字母、小写字母、数字和特殊字符中的任意3种。 diff --git a/docs/zh/server/installation_upgrade/installation/installation_modes.md b/docs/zh/server/installation_upgrade/installation/installation_modes.md index 2e2b93c19fcf1cf82de0165b4d499f542dbbf5a7..6baad0b3b65fcd104e1194b503d32b0843decf04 100644 --- a/docs/zh/server/installation_upgrade/installation/installation_modes.md +++ b/docs/zh/server/installation_upgrade/installation/installation_modes.md @@ -86,7 +86,7 @@ # dd if=/home/testuser/Downloads/openEuler-{version}-aarch64-dvd.iso of=/dev/sdb bs=512k ``` >![](./public_sys-resources/icon-note.gif) **说明:** ->如isolinux描述,由mkisofs命令创建的ISO 9660 文件系统会通过BIOS固件启动,但只能从CD、DVD和BD等介质启动。所以在使用dd命令制作x86的启动U盘前需要使用 isohybrid -u your.iso 对iso进行处理,然后正常使用dd命令将iso写入u盘即可。(该问题仅影响X86)。 +>如isolinux描述,由mkisofs命令创建的ISO 9660 文件系统会通过BIOS固件启动,但只能从CD、DVD和BD等介质启动。所以在使用dd命令制作x86的启动U盘前需要使用 isohybrid -u your.iso 对iso进行处理,然后正常使用dd命令将iso写入u盘即可。(该问题仅影响x86)。 5. 等待镜像写入完成,拔掉USB盘。 @@ -176,4 +176,4 @@ ### 启动安装 -华为公有云的x86虚拟化平台的启动请参见[弹性云服务器 ECS的用户指南](https://support.huaweicloud.com/wtsnew-ecs/index.html)。 +华为公有云的x86虚拟化平台的启动请参见《[弹性云服务器 ECS的用户指南](https://support.huaweicloud.com/wtsnew-ecs/index.html)》。 diff --git a/docs/zh/server/installation_upgrade/installation/installation_modes_1.md b/docs/zh/server/installation_upgrade/installation/installation_modes_1.md index 38331efd8227dff4dc0474f9424968593cf720eb..f024e620a66d0b60b6a70aa946f73d2dcc56df63 100644 --- a/docs/zh/server/installation_upgrade/installation/installation_modes_1.md +++ b/docs/zh/server/installation_upgrade/installation/installation_modes_1.md @@ -36,7 +36,7 @@ 2. 右键选择“以管理员身份运行”,打开 Win32 Disk Imager。 3. 在“映像文件”中选择 img 格式的镜像文件路径。 4. 在“设备”中选择待写入的 SD 卡盘符。 -5. 单击“写入”。界面通过任务进度条显示写入 SD 卡的进度。 +5. 单击“写入”,界面通过任务进度条显示写入 SD 卡的进度。 6. 写入完成后会弹出 “写入成功” 的提示框,单击“OK”完成写入。 ## Linux 下刷写镜像 @@ -88,7 +88,7 @@ 1. 如果获取的是压缩后的镜像,需要先执行 `xz -d openEuler-{version}-raspi-aarch64.img.xz` 命令将压缩文件解压得到“openEuler-{version}-raspi-aarch64.img”镜像文件;否则,跳过该步骤。 2. 将镜像 `openEuler-{version}-raspi-aarch64.img` 刷入 SD 卡,在 root 权限下执行以下命令: - `dd bs=4m if=openEuler-{version}-raspi-aarch64.img of=/dev/disk3` + `dd bs=4M if=openEuler-{version}-raspi-aarch64.img of=/dev/disk3` >![](./public_sys-resources/icon-note.gif) **说明:** >一般情况下,将块大小设置为 4M。如果写入失败或者写入的镜像无法使用,可以尝试将块大小设置为 1M 重新写入,但是设置为 1M 比较耗时。 diff --git a/docs/zh/server/installation_upgrade/installation/installation_preparations.md b/docs/zh/server/installation_upgrade/installation/installation_preparations.md index 3b57571d035a409f457a7709e8329c42c68d2d2f..989cf10aad1d22bb47c17c0f48cc7cf4011d0407 100644 --- a/docs/zh/server/installation_upgrade/installation/installation_preparations.md +++ b/docs/zh/server/installation_upgrade/installation/installation_preparations.md @@ -9,7 +9,7 @@ 请按以下步骤获取openEuler的发布包和校验文件: 1. 登录[openEuler社区](https://openeuler.org)网站。 -2. 点击页面上的“下载”按钮。 +2. 单击页面上的“下载”按钮。 3. 在“获取openEuler”标签下,选择一个版本并进入“社区发行版”页面。点击“所有版本”查看完整版本列表。 4. 在版本列表的“openEuler 24.03 LTS SP1”版本处单击“前往下载”按钮,进入 openEuler 24.03 LTS SP1 版本下载列表。 5. 根据实际待安装环境的架构和场景选择需要下载的 openEuler 的发布包和校验文件。 @@ -24,7 +24,7 @@ >![](./public_sys-resources/icon-note.gif) **说明:** > -> - 网络安装方式的 ISO 发布包较小,在有网络的安装环境可以选择网络安装方式。 +> - 网络安装方式的iso发布包较小,在有网络的安装环境可以选择网络安装方式。 > - AArch64架构的发布包支持UEFI模式,x86_64架构的发布包支持UEFI模式和Legacy模式。 ## 发布包完整性校验 @@ -44,7 +44,7 @@ - iso文件:openEuler-24.03-LTS-SP1-aarch64-dvd.iso。 -- 校验文件:ISO对应完整性校验值,复制保存对应的ISO值。 +- 校验文件:iso对应完整性校验值,复制保存对应的iso值。 ### 操作指导 @@ -86,8 +86,8 @@ openEuler所需的最小硬件要求如[表2](#tff48b99c9bf24b84bb602c53229e2541 | :---- | :---- | | 架构 | AArch64或x86_64 | | CPU | 2个CPU | -| 内存 | 不小于4GB(为了获得更好的应用体验,建议不小于8GB) | -| 硬盘 | 不小于32GB(为了获得更好的应用体验,建议不小于120GB) | +| 内存 | 大于或等于4GB(为了获得更好的应用体验,建议大于或等于8GB) | +| 硬盘 | 大于或等于32GB(为了获得更好的应用体验,建议大于或等于120GB) | ## 虚拟机的安装要求 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 index e265cd02a8fdbd40930e106b65244ceb2677d61e..74b3e5ebd035a313e67d4e794125e8c549097209 100644 --- a/docs/zh/server/installation_upgrade/installation/risc_v_pioneer1.3.md +++ b/docs/zh/server/installation_upgrade/installation/risc_v_pioneer1.3.md @@ -34,7 +34,7 @@ > 推荐使用设备板载 `RJ45` 网口而非厂家附送的 `PCIe` 电口网卡。 > -> 设备出厂未附送 `WiFi` 网卡,不具备 `WiFi` 或蓝牙连接能力。如有需要请自备对应设备。 +> 设备出厂未附送 `Wi-Fi` 网卡,不具备 `Wi-Fi` 或蓝牙连接能力。如有需要请自备对应设备。 ## 镜像种类 @@ -55,13 +55,13 @@ > `Image` 镜像支持 `Legacy` 方式启动,对应下文的**非 UEFI 版**固件 -从官网下载页面获取内含镜像 `Image` 的 `Zip` 压缩包(如 `openEuler-24.03-LTS-SP1-riscv64-sg2042.img.zip`),并将其直接烧录至 **SDCARD** 或 **固态硬盘** 中即可。 +从官网下载页面获取内含镜像 `Image` 的 `ZIP` 压缩包(如 `openEuler-24.03-LTS-SP1-riscv64-sg2042.img.zip`),并将其直接烧录至 **SD Card** 或 **固态硬盘** 中即可。 ## 设备固件 > 因设备出厂固件目前并未支持 `UEFI`,`ISO` 版本使用者需先手动替换固件为基于 `EDK2` 的 `UEFI` 版固件。 > -从官网下载页面 **嵌入式分类** 中下载设备固件压缩包:`sg2042_firmware_uefi.zip`,解压后烧录其中 `img` 文件至 **SDCARD** +从官网下载页面 **嵌入式分类** 中下载设备固件压缩包:`sg2042_firmware_uefi.zip`,解压后烧录其中 `img` 文件至 **SD Card** ```txt ~$ sudo dd if=firmware_single_sg2042-master.img of=/dev/sda bs=512K iflag=fullblock oflag=direct conv=fsync status=progress @@ -74,9 +74,9 @@ > 因设备出厂固件版本较老,Image 镜像使用者如果想要使用较新版本的固件,可以更新**非 UEFI 版**固件。 > -从官网下载页面 **嵌入式分类** 中下载设备固件压缩包:`sg2042_firmware_uboot.zip`,参考 UEFI 版固件的操作,解压后烧录其中 img 文件至 **SDCARD**。 +从官网下载页面 **嵌入式分类** 中下载设备固件压缩包:`sg2042_firmware_uboot.zip`,参考 UEFI 版固件的操作,解压后烧录其中 img 文件至 **SD Card**。 -烧录完成后,请将 **SDCARD** 插入设备的卡槽中。 +烧录完成后,请将 **SD Card** 插入设备的卡槽中。 ## 启动前检查 diff --git a/docs/zh/server/installation_upgrade/installation/risc_v_qemu.md b/docs/zh/server/installation_upgrade/installation/risc_v_qemu.md index 89a8166a5e2b87bb912a0c1ebbcf6656a20038f2..928d4dbeb3b7b59c87ae2c36f8803bcc4910bfce 100644 --- a/docs/zh/server/installation_upgrade/installation/risc_v_qemu.md +++ b/docs/zh/server/installation_upgrade/installation/risc_v_qemu.md @@ -11,7 +11,7 @@ RISCV_VIRT_CODE.fd RISCV_VIRT_VARS.fd ``` -或者根据[官方文档](https://github.com/tianocore/edk2/tree/master/OvmfPkg/RiscVVirt)本地自行编译最新 EDK2 OVMF 固件。 +或者根据《[官方文档](https://github.com/tianocore/edk2/tree/master/OvmfPkg/RiscVVirt)》本地自行编译最新 EDK2 OVMF 固件。 ### 具备 Penglai TEE 支持的 EFI 固件 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 index 7fb632cc6be154e4b6a2c1a7b54e57b7cf136d72..0c3bf3072c65066e1719a23d137508968156a156 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 @@ -51,7 +51,7 @@ kickstart 安装提供一个安装过程自动化的方法,可以是部分自 **PXE** -PXE(Pre-boot Execution Environment,预启动执行环境),工作于Client/Server的网络模式,支持PXE的客户端在启动过程中,能够从DHCP服务器获取IP,结合TFTP(trivial file transfer protocol)等协议可以实现客户端的网络引导和安装。 +PXE(Pre-boot Execution Environment,预启动执行环境),工作于Client/Server的网络模式,支持PXE的客户端在启动过程中,能够从DHCP服务器获取IP,结合TFTP(Trivial File Transfer Protocol)等协议可以实现客户端的网络引导和安装。 **TFTP** @@ -65,7 +65,7 @@ TFTP(Trivial File Transfer Protocol,简单文件传输协议),该协议 - 物理机/虚拟机(虚拟机创建可参考对应厂商的资料)。包括使用kickstart工具进行自动化安装的计算机和被安装的计算机。 - httpd:存放kickstart文件。 -- ISO: openEuler-{version}-aarch64-dvd.iso +- ISO:openEuler-{version}-aarch64-dvd.iso。 ### 操作步骤 @@ -185,7 +185,7 @@ TFTP(Trivial File Transfer Protocol,简单文件传输协议),该协议 - 物理机/虚拟机(虚拟机创建可参考对应厂商的资料)。包括使用kickstart工具进行自动化安装的计算机和被安装的计算机。 - httpd:存放kickstart文件。 - tftp:提供vmlinuz和initrd文件。 -- dhcpd/pxe:提供DHCP服务。 +- dhcpd/PXE:提供DHCP服务。 - ISO:openEuler-{version}-aarch64-dvd.iso。 ### 操作步骤 diff --git a/docs/zh/server/installation_upgrade/upgrade/_toc.yaml b/docs/zh/server/installation_upgrade/upgrade/_toc.yaml index b88809a6c6cc1014806240a92e072a806ee774d6..6c60e745618d6dea6c65b51dd503c2f7ea591e54 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/performance/system_optimzation/atune/installation_and_deployment.md b/docs/zh/server/performance/system_optimzation/atune/installation_and_deployment.md index 4ce722d352bc86df927d1a85dfff91765e540146..5b873aabf303774daa238b07bb39d3e545f5b1ba 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 @@ -129,12 +129,12 @@ A-Tune配置文件/etc/atuned/atuned.cnf的配置项说明如下: - tlsserverkeyfile:gRPC服务端密钥路径。 - rest_tls:系统rest service的SSL/TLS证书校验开关,默认开启。 - tlsrestcacertfile:系统rest service的服务端CA证书路径。 - - tlsrestservercertfile:系统rest service的服务端证书路径 + - tlsrestservercertfile:系统rest service的服务端证书路径。 - tlsrestserverkeyfile:系统rest service的服务端密钥路径。 - engine_tls:系统atune engine service的SSL/TLS证书校验开关,默认开启。 - tlsenginecacertfile:系统atune engine service的客户端CA证书路径。 - - tlsengineclientcertfile:系统atune engine service的客户端证书路径 - - tlsengineclientkeyfile:系统atune engine service的客户端密钥路径 + - tlsengineclientcertfile:系统atune engine service的客户端证书路径。 + - tlsengineclientkeyfile:系统atune engine service的客户端密钥路径。 - system信息 @@ -316,6 +316,7 @@ A-Tune安装完成后,需要配置A-Tune服务,然后启动A-Tune服务。 ``` - 关于证书: + 因为A-Tune的引擎和客户端使用了grpc通信协议,所以为了系统安全,需要配置证书。因为信息安全的原因,A-Tune不会提供证书生成方法,请用户自行配置系统证书。 如果不考虑安全问题,可以将/etc/atuned/atuned.cnf中的rest_tls 和 engine_tls配置选项设置为false,并且将/etc/atuned/engine.cnf中的engine_tls配置选项设为false。 如果不配置安全证书导致的一切后果与A-Tune无关。 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 index 92b622dcf4fd805ee9033c4c551e11bfbfb705a4..92bedd3403a305668e8d9a47240fd0a621db755a 100644 --- a/docs/zh/server/performance/tuning_framework/oeaware/oeaware_user_guide.md +++ b/docs/zh/server/performance/tuning_framework/oeaware/oeaware_user_guide.md @@ -271,7 +271,7 @@ oeawarectl analysis -t 10 No solution. ``` -报告分为三部分 +报告分为三部分: - Suggest:根据系统运行状态,给出调优建议。 - Network:网络使用情况。 diff --git a/docs/zh/server/quickstart/quickstart/quick_start.md b/docs/zh/server/quickstart/quickstart/quick_start.md index 9f6d704b0b15a0d2a12c14273f80838187caf9f1..0bd367d14a0dc06138d648f8188c230a21046e3b 100644 --- a/docs/zh/server/quickstart/quickstart/quick_start.md +++ b/docs/zh/server/quickstart/quickstart/quick_start.md @@ -252,8 +252,10 @@ iso文件:openEuler-24.03-LTS-SP1-aarch64-dvd.iso 3. 单击“开始安装”进行系统安装,如[图13](#fig1717019357392)所示。 - **图 13** 开始安装 + **图 13** 开始安装 + ![](./figures/Installation_Procedure.png) + 4. 安装完成后重启系统。 openEuler完成安装后,单击“重启”按钮,系统将重新启动。 diff --git a/docs/zh/server/releasenotes/releasenotes/contribution.md b/docs/zh/server/releasenotes/releasenotes/contribution.md index dfa92dba434461ede22104f608dd4c3e7cb552ef..24acc55accae0102936a25dc451dbdb40d222b41 100644 --- a/docs/zh/server/releasenotes/releasenotes/contribution.md +++ b/docs/zh/server/releasenotes/releasenotes/contribution.md @@ -6,7 +6,7 @@ openEuler将拥有共同兴趣的人们聚在一起,组成了不同的特别兴趣小组(SIG)。当前已有的SIG请参见[SIG列表](https://www.openeuler.org/zh/sig/sig-list/)。 -我们欢迎并鼓励你加入已有的SIG或创建新的SIG,创建方法请参见[SIG管理指南](https://gitee.com/openeuler/community/blob/master/zh/technical-committee/governance/README.md)。 +我们欢迎并鼓励你加入已有的SIG或创建新的SIG,创建方法请参见《[SIG管理指南](https://gitee.com/openeuler/community/blob/master/zh/technical-committee/governance/README.md)》。 ## 邮件列表和任务 diff --git a/docs/zh/server/releasenotes/releasenotes/key_features.md b/docs/zh/server/releasenotes/releasenotes/key_features.md index bfed4217cc6ffae6ed93d7c7bcf1ca0e84ed76aa..3bacff5a478264cd349fa285c36cc723a48e46c8 100644 --- a/docs/zh/server/releasenotes/releasenotes/key_features.md +++ b/docs/zh/server/releasenotes/releasenotes/key_features.md @@ -10,7 +10,7 @@ 2. AI框架镜像:以SDK镜像为基础,安装AI框架软件,如PyTorch或TensorFlow。此外,通过此部分镜像也可快速搭建AI分布式场景,如Ray等AI分布式框架。 3. 模型应用镜像:在AI框架镜像的基础上,包含完整的工具链和模型应用。 - 相关使用方式请参考[openEuler AI 容器镜像用户指南](https://forum.openeuler.org/t/topic/4189/4)。 + 相关使用方式请参考《[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能主动询问用户,以澄清或获取更多信息。 @@ -18,7 +18,7 @@ 3. RAG:openEluer Copilot System中的RAG技术能更强的适应多种文档格式和内容场景,在不为系统增加较大负担的情况下,增强问答服务体验。 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) + 相关使用方式请参考《[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入口。 在上述功能入口,用户可通过与openEluer Copilot System进行自然语言交互,完成性能数据采集、系统性能分析、系统性能优化等作业,实现启发式调优。 - 智能诊断: @@ -198,8 +198,8 @@ gala-anteater是一款基于AI的操作系统灰度故障的异常检测平台 gala-anteater通过线上线下相结合,利用在线学习技术,实现模型的线下学习,线上更新,并应用于线上异常检测。 -1. Offline: 首先,利用线下历史KPI数据集,经过数据预处理、特征选择,得到训练集;然后,利用得到的训练集,对无监督神经网络模型(例如Variational Autoencoder)进行训练调优。最后,利用人工标注的测试集,选择最优模型。 -2. Online: 将线下训练好的模型,部署到线上,然后利用线上真实的数据集,对模型进行在线训练以及参数调优,然后利用训练好的模型,进行线上环境的实时异常检测。 +1. Offline:首先,利用线下历史KPI数据集,经过数据预处理、特征选择,得到训练集;然后,利用得到的训练集,对无监督神经网络模型(例如Variational Autoencoder)进行训练调优。最后,利用人工标注的测试集,选择最优模型。 +2. Online:将线下训练好的模型,部署到线上,然后利用线上真实的数据集,对模型进行在线训练以及参数调优,然后利用训练好的模型,进行线上环境的实时异常检测。 ## Aops适配authHub统一用户鉴权 @@ -297,7 +297,7 @@ virtCCA机密虚机特性基于鲲鹏920系列S-EL2能力,在TEE侧实现机 1. 设备直通: 设备直通是基于华为鲲鹏920新型号通过预埋在PCIE Root Complex里的PCIE保护组件,在PCIE总线上增加选通器,对CPU与外设间的通信进行选通,即对SMMU的Outbound Traffic和Inbound Traffic的控制流和数据流进行控制,以此保证整体数据链路的安全性。 -基于virtCCA PCIPC的设备直通能力,实现对PCIE设备的安全隔离和性能提升,存在以下优势: +基于virtCCA PCIPC的设备直通能力,实现对PCIE设备的安全隔离和性能提升,存在以下优势: (1)安全隔离 TEE侧控制设备的访问权限,Host侧软件无法访问TEE侧设备; (2)高性能 diff --git a/docs/zh/server/security/secgear/api_reference.md b/docs/zh/server/security/secgear/api_reference.md index 033431c373babbc5a63183024ee286be4ab7277d..5771de30561f1cde22386628b4bb0f1d3428deef 100644 --- a/docs/zh/server/security/secgear/api_reference.md +++ b/docs/zh/server/security/secgear/api_reference.md @@ -20,13 +20,13 @@ cc_enclave_result_t cc_enclave_create(const char* path, enclave_type_t type, uin **参数:** -- Path:入参,要加载的 enclave 路径 -- Type:入参,用来指定 TEE 解决方案, 如 SGX_ENCLAVE_TYPE、GP_ENCLAVE_TYPE、AUTO_ENCLAVE_TYPE +- Path:入参,要加载的 enclave 路径。 +- Type:入参,用来指定 TEE 解决方案, 如 SGX_ENCLAVE_TYPE、GP_ENCLAVE_TYPE、AUTO_ENCLAVE_TYPE。 - version:入参,指定的 enclave engine 的版本,目前只有一个版本,取值为 0。 -- Flags:入参,标志位,说明这个 enclave 运行状态,例如调试状态 SECGEAR_DEBUG_FLAG、模拟状态 SECGEAR_SIMULATE_FLAG(目前不支持) -- features:入参,用于设置一些关于 enclave 支持的特性,例如 SGX 的 PCL、 switchless 等。目前不支持,请设置为 NULL -- features_count:入参,入参 features 特性结构体的数量。目前不支持,请设置为 0 -- enclave:出参,创建的 enclave 上下文 +- Flags:入参,标志位,说明这个 enclave 运行状态,例如调试状态 SECGEAR_DEBUG_FLAG、模拟状态 SECGEAR_SIMULATE_FLAG(目前不支持)。 +- features:入参,用于设置一些关于 enclave 支持的特性,例如 SGX 的 PCL、 switchless 等。目前不支持,请设置为 NULL。 +- features_count:入参,入参 features 特性结构体的数量。目前不支持,请设置为 0。 +- enclave:出参,创建的 enclave 上下文。 **返回值:** diff --git a/docs/zh/server/security/secgear/developer_guide.md b/docs/zh/server/security/secgear/developer_guide.md index c41e8ea0e24d8bfe2bececc8370419ceef13d65e..1945abc7bb9d99fb76c29c375f8aca3961a7d4ba 100644 --- a/docs/zh/server/security/secgear/developer_guide.md +++ b/docs/zh/server/security/secgear/developer_guide.md @@ -53,8 +53,8 @@ cd examples/helloworld 开发步骤如下图所示: 1. 开发非安全侧main函数及接口,管理enclave并调用安全侧函数。 -2. 开发EDL文件(类似C语言头文件定义非安全侧与安全侧交互接口) -3. 开发安全侧接口实现 +2. 开发EDL文件(类似C语言头文件定义非安全侧与安全侧交互接口)。 +3. 开发安全侧接口实现。 4. 调用代码生成工具,根据EDL自动生成非安全侧与安全侧交互源码,并分别编译到非安全侧与安全侧二进制文件中,非安全侧逻辑直接调用安全侧对应的接口即可,无需关心自动的生成的交互代码,降低开发成本。 5. 调用签名工具对安全侧二进制签名,实现安全侧程序可信启动。 diff --git a/docs/zh/server/security/secgear/introduction_to_secGear.md b/docs/zh/server/security/secgear/introduction_to_secgear.md similarity index 97% rename from docs/zh/server/security/secgear/introduction_to_secGear.md rename to docs/zh/server/security/secgear/introduction_to_secgear.md index cb1d697d83b4466d88fc56bbb08a769850589d29..936eac758dc57da7f879b2a1c9b10798904b60f9 100644 --- a/docs/zh/server/security/secgear/introduction_to_secGear.md +++ b/docs/zh/server/security/secgear/introduction_to_secgear.md @@ -2,7 +2,7 @@ ## 概述 -随着云计算的快速发展,越来越多的企业把计算业务部署到云上,面对第三方云基础设施,云上用户数据安全面临着巨大的挑战。机密计算是一种基于硬件可信执行环境的隐私保护技术,旨在依赖最底层硬件,构建最小信任依赖,将操作系统、Hypervisor、基础设施、系统管理员、服务提供商等都从信任实体列表中删除,视为未经授权的实体,从而减少潜在的风险,保护可信执行环境中数据的机密性、完整性。然而随着机密计算技术的兴起,业界机密计算技术种类繁多(如主流的Intel SGX、ARM Trustzone、RSIC-V keystone等),各技术SDK也千差万别,给开发者带来较大的开发维护成本,长远考虑,还造成了机密计算应用生态隔离。为方便开发者快速构建保护云上数据安全的机密计算解决方案,openEuler推出机密计算统一开发框架secGear。 +随着云计算的快速发展,越来越多的企业把计算业务部署到云上,面对第三方云基础设施,云上用户数据安全面临着巨大的挑战。机密计算是一种基于硬件可信执行环境的隐私保护技术,旨在依赖最底层硬件,构建最小信任依赖,将操作系统、Hypervisor、基础设施、系统管理员、服务提供商等都从信任实体列表中删除,视为未经授权的实体,从而减少潜在的风险,保护可信执行环境中数据的机密性、完整性。然而随着机密计算技术的兴起,业界机密计算技术种类繁多(如主流的Intel SGX、ARM Trustzone、RISC-V keystone等),各技术SDK也千差万别,给开发者带来较大的开发维护成本,长远考虑,还造成了机密计算应用生态隔离。为方便开发者快速构建保护云上数据安全的机密计算解决方案,openEuler推出机密计算统一开发框架secGear。 ## 架构介绍 @@ -34,15 +34,15 @@ secGear机密计算统一开发框架技术架构如图所示,主要包括三 ```c typedef struct { - uint32_t num_uworkers; - uint32_t num_tworkers; - uint32_t switchless_calls_pool_size; - uint32_t retries_before_fallback; - uint32_t retries_before_sleep; - uint32_t parameter_num; - uint32_t workers_policy; - uint32_t rollback_to_common; - cpu_set_t num_cores; + uint32_t num_uworkers; + uint32_t num_tworkers; + uint32_t switchless_calls_pool_size; + uint32_t retries_before_fallback; + uint32_t retries_before_sleep; + uint32_t parameter_num; + uint32_t workers_policy; + uint32_t rollback_to_common; + cpu_set_t num_cores; } cc_sl_config_t; ``` @@ -73,13 +73,17 @@ secGear机密计算统一开发框架技术架构如图所示,主要包括三 ``` ### 安全通道 + #### 客户痛点 + 数据拥有者在请求云上机密计算服务时,需要把待处理数据上传到云上TEE环境中处理,由于TEE没有网络,用户数据需要经过网络先传输到REE,REE接收到数据的明文后,再传入TEE中。用户数据的明文暴露在REE内存中,存在安全风险。 #### 解决方案 + 安全通道是一种结合机密计算远程证明,实现数据拥有者与云上TEE之间安全的密钥协商技术,协商出仅数据拥有者与云上TEE拥有的sessionkey,再通过sessionkey加密用户数据,网络传输的是sessionkey加密后的数据,REE接收到密文数据,再传入TEE中解密,处理。 #### 使用方法 + 安全通道以lib库方式提供,分为客户端、服务端host、服务端enclave三部分,分别由业务程序的客户端、服务端CA、服务端TA调用。 | 模块 | 头文件 | 库文件 | 依赖 | |------------|--------------------------|-----------------------|---------| @@ -88,6 +92,7 @@ secGear机密计算统一开发框架技术架构如图所示,主要包括三 | 服务端enclave | secure_channel_enclave.h | libtsecure_channel.so | TEE及TEE软件栈 | ##### 接口列表 + | 接口名 | 所属头文件、库 | 功能 | 备注 | |----------------------------------------------------------------------------------------------------------------------------------------------|-----------------------|--------------|----| | cc_sec_chl_client_init | secure_channel_client.h libcsecure_channel.so | 安全通道客户端初始化 | 调用前需初始化参数ctx中网络连接和消息发送钩子函数 | @@ -101,19 +106,24 @@ secGear机密计算统一开发框架技术架构如图所示,主要包括三 | cc_sec_chl_svr_callback | secure_channel_host.h libusecure_channel.so | 安全通道协商消息处理函数 | 处理安全通道协商过程中,客户端发送给服务端的消息。在服务端消息接收处调用,调用前需初始化与客户端的网络连接和发送消息函数,详见[样例](https://gitee.com/openeuler/secGear/blob/master/examples/secure_channel/host/server.c#:~:text=conn_ctx.conn_kit.send)。 | | cc_sec_chl_enclave_encrypt | secure_channel_enclave.h libtsecure_channel.so | 安全通道enclave中的加密接口 | 无 | | cc_sec_chl_enclave_decrypt | secure_channel_enclave.h libtsecure_channel.so | 安全通道enclave中的解密接口 | 无 | + ##### 注意事项 + 安全通道仅封装密钥协商过程、加解密接口,不建立网络连接,协商过程复用业务的网络连接。其中客户端和服务端的网络连接由业务建立和维护,在安全通道客户端和服务端初始化时传入消息发送钩子函数和网络连接指针。 详见[安全通道样例](https://gitee.com/openeuler/secGear/tree/master/examples/secure_channel)。 ### 远程证明 #### 客户痛点 + 随着机密计算技术的发展,逐渐形成几大主流技术(如Arm Trustzone/CCA、Intel SGX/TDX、擎天Enclave、海光CSV等),产品解决方案中可能存在多种机密计算硬件,甚至不同TEE之间的协同,其中远程证明是任何一种机密计算技术信任链的重要一环,每种技术的远程证明报告格式及验证流程各有差异,用户对接不同的TEE,需要集成不同TEE证明报告的验证流程,增加了用户的集成负担,并且不利于扩展新的TEE类型。 #### 解决方案 + secGear远程证明统一框架是机密计算远程证明相关的关键组件,屏蔽不同TEE远程证明差异,提供Attestation Agent和Attestation Service两个组件,Agent供用户集成获取证明报告,对接证明服务;Service可独立部署,支持iTrustee、virtCCA远程证明报告的验证。 #### 功能描述 + 远程证明统一框架聚焦机密计算相关功能,部署服务时需要的服务运维等相关能力由服务部署第三方提供。远程证明统一框架的关键技术如下: - 报告校验插件框架:支持运行时兼容iTrustee、vritCCA、CCA等不同TEE平台证明报告检验,支持扩展新的TEE报告检验插件。 @@ -147,7 +157,9 @@ secGear远程证明统一框架是机密计算远程证明相关的关键组件 > ![](./public_sys-resources/icon-note.gif) **说明:** > > 点对点验证和远程证明服务验证时的证明代理不同,在编译时可通过编译选项,决定编译有证明服务和点对点模式的证明代理。 + #### 应用场景 + 在金融、AI等场景下,基于机密计算保护运行中的隐私数据安全时,远程证明是校验机密计算环境及应用合法性的技术手段,远程证明统一框架提供了易集成、易部署的组件,帮助用户快速使能机密计算远程证明能力。 ## 缩略语 diff --git a/docs/zh/server/security/secharden/secHarden.md b/docs/zh/server/security/secharden/secharden.md similarity index 100% rename from docs/zh/server/security/secharden/secHarden.md rename to docs/zh/server/security/secharden/secharden.md diff --git a/docs/zh/tools/cloud/pilotgo/usage_instructions.md b/docs/zh/tools/cloud/pilotgo/usage_instructions.md index 3c65c351f17e5f35e173cec18ab0b7e1b328778a..64bfe6e0293b2bc2abd1fdf252414450c8678ed8 100644 --- a/docs/zh/tools/cloud/pilotgo/usage_instructions.md +++ b/docs/zh/tools/cloud/pilotgo/usage_instructions.md @@ -9,7 +9,7 @@ PilotGo可以单机部署也可以采用集群式部署。安装之前先关闭 ### 1.1 PilotGo-server 安装与配置 安装mysql; -安装redis,设置redis密码(修改),运行命令: +安装redis,设置redis密码(修改),运行命令: `dnf install redis6` diff --git a/docs/zh/tools/community_tools/_toc.yaml b/docs/zh/tools/community_tools/_toc.yaml index bf08865cc27dcf1b7514b5e37385cd4a9a8cce92..ed58fe4e556db8c58274db748466686520356c03 100644 --- a/docs/zh/tools/community_tools/_toc.yaml +++ b/docs/zh/tools/community_tools/_toc.yaml @@ -15,4 +15,8 @@ sections: - href: ./epkg_use/_toc.yaml - label: 编译 sections: - - href: ./pin/_toc.yaml + - href: ../../server/development/gcc/_toc.yaml + - label: 性能优化 + sections: + - href: ../../server/performance/system_optimzation/atune/_toc.yaml + - href: ../../server/performance/tuning_framework/oeaware/_toc.yaml diff --git a/docs/zh/tools/community_tools/image_tailor/imagetailor_userguide.md b/docs/zh/tools/community_tools/image_tailor/imagetailor_userguide.md index a8a3974e7121bdce328a5fa7b42c17bff3b7c9b4..2114e0e0db817adbfafb611ba1afd7d2b930bebd 100644 --- a/docs/zh/tools/community_tools/image_tailor/imagetailor_userguide.md +++ b/docs/zh/tools/community_tools/image_tailor/imagetailor_userguide.md @@ -442,7 +442,7 @@ openEuler 提供的默认配置如下,用户可以根据需要进行修改: - null/NULL:表示不配置。如果裁剪系统(sys_cut=“yes”),则/usr/lib/gconv 和 /usr/lib64/gconv 会被删除。 - all/ALL:不裁剪 /usr/lib/gconv 和 /usr/lib64/gconv 。 - - xxx,xxx: 保留 /usr/lib/gconv 和 /usr/lib64/gconv 目录下对应的文件。若需要保留多个文件,可用 "," 分隔。 + - xxx,xxx:保留 /usr/lib/gconv 和 /usr/lib64/gconv 目录下对应的文件。若需要保留多个文件,可用 "," 分隔。 - sys_man_cut @@ -643,7 +643,7 @@ hd0 /home max logical ext4 - 【分区类型】 分区有以下三种类型: - - 主分区: primary + - 主分区:primary - 扩展分区:extended(该分区只需配置 hd 磁盘号即可) - 逻辑分区:logical diff --git a/docs/zh/tools/community_tools/pin/_toc.yaml b/docs/zh/tools/community_tools/pin/_toc.yaml deleted file mode 100644 index 5d2b6b2bd0f0df39de7c320b6d63d7dda3aed07a..0000000000000000000000000000000000000000 --- a/docs/zh/tools/community_tools/pin/_toc.yaml +++ /dev/null @@ -1,6 +0,0 @@ -label: GCC插件框架特性用户指南 -isManual: true -description: GCC插件框架特性用户指南 -sections: - - label: GCC插件框架特性用户指南 - href: ./pin_user_guide.md diff --git a/docs/zh/tools/desktop/dde/dde_userguide.md b/docs/zh/tools/desktop/dde/dde_userguide.md index bfd3f5a98f911064c7d1a619f4ae4bd3bd5be1dc..666ddcd8452f751c359ed151e3d36d1b18b77576 100644 --- a/docs/zh/tools/desktop/dde/dde_userguide.md +++ b/docs/zh/tools/desktop/dde/dde_userguide.md @@ -404,7 +404,7 @@ DDE桌面操作系统通过控制中心来管理系统的基本设置,包括 1. 在控制中心首页,单击 ![display_normal](./figures/icon72-o.svg)。 2. 单击 **多屏显示模式**。 3. 选择一种显示模式。 - - **复制**将主屏的显示内容复制到其他屏幕。 + - **复制** 将主屏的显示内容复制到其他屏幕。 - **扩展** 将主屏的显示内容扩展到其他屏幕,扩大桌面区域。 - **自定义** 设置显示模式,主屏、分辨率、刷新率和屏幕旋转方向。 diff --git a/docs/zh/tools/desktop/gnome/gnome_Installation.md b/docs/zh/tools/desktop/gnome/gnome_installation.md similarity index 94% rename from docs/zh/tools/desktop/gnome/gnome_Installation.md rename to docs/zh/tools/desktop/gnome/gnome_installation.md index c9b091f792fa725e2af40fa998b3d81336f5b107..3b8347446296b27baa260f4fd9104b57e9e0bcb2 100644 --- a/docs/zh/tools/desktop/gnome/gnome_Installation.md +++ b/docs/zh/tools/desktop/gnome/gnome_installation.md @@ -84,39 +84,39 @@ sudo systemctl set-default graphical.target sudo reboot ``` -7.当gdm不能工作 +7.当gdm不能工作。 -如果默认安装了gdm,则停用gdm +如果默认安装了gdm,则停用gdm。 ```shell sudo systemctl disable gdm ``` -安装lightdm显示管理器替代 +安装lightdm显示管理器替代。 ```shell sudo dnf install lightdm lightdm-gtk ``` -设置默认桌面为GNOME,通过root权限用户设置 +设置默认桌面为GNOME,通过root权限用户设置。 ```shell echo 'user-session=gnome' >> /etc/lightdm/lightdm.conf.d/60-lightdm-gtk-greeter.conf ``` -启动lightdm显示管理器 +启动lightdm显示管理器。 ```shell sudo systemctl enable lightdm ``` -设置系统默认以图形界面登录 +设置系统默认以图形界面登录。 ```shell sudo systemctl set-default graphical.target ``` -重启验证 +重启验证。 ```shell sudo reboot diff --git a/docs/zh/tools/desktop/kiran/kiran_userguide.md b/docs/zh/tools/desktop/kiran/kiran_userguide.md index 65697fc0ccad8cc9986bd424593ab70520549df6..51bb6f02d132a3f503efaa416ab2939210d212b5 100644 --- a/docs/zh/tools/desktop/kiran/kiran_userguide.md +++ b/docs/zh/tools/desktop/kiran/kiran_userguide.md @@ -109,6 +109,7 @@ Kiran桌面是一款以用户和市场需求为主导的稳定、高效、易用 2)修改用户属性; 3)显示用户属性; 4)删除用户; + 用户属性包括:账号、口令(密码)、登录 shell,用户组属性指在该组包含哪些用户。 #### 4.5.1.启动账户管理工具 @@ -118,6 +119,7 @@ Kiran桌面是一款以用户和市场需求为主导的稳定、高效、易用 ![图20-账户管理工具](figures/kiran-20.png) 在这个界面中您可以看到有左侧菜用户栏和右侧详细信息栏两个部分。目前在列出的是系统中的所有用户(除root用户除外)。点击左侧某个用户,详细信息栏将显示用户的基本信息(用户ID、用户类型等)。 + 点击“创建用户”,在右侧出现页面,如下图所示,按照要求填写您要添加的用户名、用户类型、设置密码、头像。填写完毕后,单击“创建”即完成添加。 ![图21-创建账户](figures/kiran-21.png) @@ -172,6 +174,7 @@ e.指针; #### 4.6.2.背景 用户可以对桌面背景进行设置,可以修改颜色、样式。 + 1)背景图片设置 如下图所示,点击壁纸文件浏览对话框中的壁纸,即可将桌面设置为此壁纸。 diff --git a/docs/zh/tools/devops/EulerPipeline/v1.0_grammar.md b/docs/zh/tools/devops/EulerPipeline/v1.0_grammar.md deleted file mode 100644 index 0a1cbb62199a2c7c6b9b62b47687a72df59ac98d..0000000000000000000000000000000000000000 --- a/docs/zh/tools/devops/EulerPipeline/v1.0_grammar.md +++ /dev/null @@ -1,1065 +0,0 @@ -# 从零开始编写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 deleted file mode 100644 index 354fca5b785e887d8233ffebc67baa3d06f248ad..0000000000000000000000000000000000000000 --- a/docs/zh/tools/devops/EulerPipeline/v1.1_grammar.md +++ /dev/null @@ -1,1270 +0,0 @@ -# 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/EulerMaker/_toc.yaml b/docs/zh/tools/devops/eulermaker/_toc.yaml similarity index 100% rename from docs/zh/tools/devops/EulerMaker/_toc.yaml rename to docs/zh/tools/devops/eulermaker/_toc.yaml diff --git a/docs/zh/tools/devops/EulerMaker/eulermaker_user_guide.md b/docs/zh/tools/devops/eulermaker/eulermaker_user_guide.md similarity index 87% rename from docs/zh/tools/devops/EulerMaker/eulermaker_user_guide.md rename to docs/zh/tools/devops/eulermaker/eulermaker_user_guide.md index 06f316169160bda833607e73caa23090b2fb11bb..07d860c3bad564e44e81eca3a20a8c53a97b841c 100644 --- a/docs/zh/tools/devops/EulerMaker/eulermaker_user_guide.md +++ b/docs/zh/tools/devops/eulermaker/eulermaker_user_guide.md @@ -19,7 +19,7 @@ - 已绑定:页面返回首页 ![image](images/home.png) - 未绑定:页面跳转至帐号注册页面,填写用户信息,完成注册。 - ![image](images/regist.png) + ![image](images/register.png) ### 创建工程 @@ -138,7 +138,7 @@ ![image](images/custom_package.png) 3. 填写产品名称,填写安装镜像时的所展示的产品名称。 4. 配置内核参数,为了系统能够更稳定高效地运行,用户可以根据需要修改内核命令行参数,多个参数使用空格分隔。 -
例如:"net.ifnames=0 biosdevname=0 crashkernel=512M oops=panic softlockup_panic=1 reserve_kbox_mem=16M crash_kexec_post_notifiers panic=3 console=tty0" +
例如:"net.ifnames=0 biosdevname=0 crashkernel=512M oops=panic softlockup_panic=1 reserve_kbox_mem=16M crash_kexec_post_notifiers panic=3 console=tty0" 5. 添加repo源,输入需要添加rpm包的repo源的正确url地址。 6. 添加rpm包:配置好正确的repo源后,点击添加按钮,弹出添加rpm包弹窗,勾选需要的rpm包,也可以通过弹窗右上角搜索需要的rpm包,点击确认即可保存。若要删除已添加的rpm包,点击rpm包表格操作列的移除或者勾选需要删除的rpm包,点击批量移除按钮即可。 ![image](images/add_rpms.png) @@ -146,36 +146,36 @@ 8. 添加命令:填写系统命令,多个以空格分隔,可选填。 9. 添加库文件:填写库文件名称,多个以空格分隔,可选填。 10. 删除其他文件:填写需要删除的文件路径及文件名,多个以空格分隔,可选填。 -11.配置分区:点击加号图标,新增一条配置分区,根据需要填写以下配置。 +11. 配置分区:点击加号图标,新增一条配置分区,根据需要填写以下配置。 ![image](images/config_partition.png) -- 磁盘索引:磁盘的编号,请按照hdx的格式填写,x指第x块盘。 -- 挂载目录:指定分区挂载的路径。用户既可以配置业务分区,也可以对默认配置中的系统分区进行调整。 -- 分区大小:分区大小的取值有四种,可通过点击单位按钮来更换,最大上限为16T。其中MAX为指定将硬盘上剩余的空间全部用来创建一个分区,只能在最后一个分区配置该值。 -- 分区类型:分区有三种,主分区:primary;扩展分区:extended(该分区只需配置hd磁盘号即可);逻辑分区:logical。 -- 分区文件系统类型:目前支持的文件系统类型有:ext4、vfat。 -- 是否二次格式化:表示二次安装时是否格式化,选择是或否。 + - 磁盘索引:磁盘的编号,请按照hdx的格式填写,x指第x块盘。 + - 挂载目录:指定分区挂载的路径。用户既可以配置业务分区,也可以对默认配置中的系统分区进行调整。 + - 分区大小:分区大小的取值有四种,可通过点击单位按钮来更换,最大上限为16T。其中MAX为指定将硬盘上剩余的空间全部用来创建一个分区,只能在最后一个分区配置该值。 + - 分区类型:分区有三种,主分区:primary;扩展分区:extended(该分区只需配置hd磁盘号即可);逻辑分区:logical。 + - 分区文件系统类型:目前支持的文件系统类型有:ext4、vfat。 + - 是否二次格式化:表示二次安装时是否格式化,选择是或否。 -12.配置网络:点击加号图标,新增一条配置网络,根据需要填写以下配置。
+12. 配置网络:点击加号图标,新增一条配置网络,根据需要填写以下配置。
![image](images/config_net.png) -- BOOTPROTO:none:引导时不使用协议,不配地址;static:静态分配地址;dhcp:使用DHCP协议动态获取地址。
-- DEVICE:网卡名称,如eth0。 -- IPADDR:IP地址。当BOOTPROTO参数为static时,该参数必配,如:192.168.11.100;其他情况下,该参数不用配置。
-- NETMASK:子网掩码。当BOOTPROTO参数为static时,该参数必配,如:255.255.255.0;其他情况下,该参数不用配置。
-- STARTMODE:启用网卡的方法。manual:用户在终端执行ifup命令启用网卡。auto\hotplug\ifplugd\nfsroot:当OS识别到该网卡时,便启用该网卡。off:任何情况下,网卡都无法被启用。 + - BOOTPROTO:none:引导时不使用协议,不配地址;static:静态分配地址;dhcp:使用DHCP协议动态获取地址。
+ - DEVICE:网卡名称,如eth0。 + - IPADDR:IP地址。当BOOTPROTO参数为static时,该参数必配,如:192.168.11.100;其他情况下,该参数不用配置。
+ - NETMASK:子网掩码。当BOOTPROTO参数为static时,该参数必配,如:255.255.255.0;其他情况下,该参数不用配置。
+ - STARTMODE:启用网卡的方法。manual:用户在终端执行ifup命令启用网卡。auto\hotplug\ifplugd\nfsroot:当OS识别到该网卡时,便启用该网卡。off:任何情况下,网卡都无法被启用。 -13.添加用户自定义文件:点击加号图标,弹出文件管理器弹窗,选择需要上传的文件,点击打开按钮即可上传,上传成功后状态变为成功,并且需要填写目标存放路径。若要删除文件,点击操作列的删除字段即可。 +13. 添加用户自定义文件:点击加号图标,弹出文件管理器弹窗,选择需要上传的文件,点击打开按钮即可上传,上传成功后状态变为成功,并且需要填写目标存放路径。若要删除文件,点击操作列的删除字段即可。 > 注:用户自定义文件上传大小不得超过16M -14.添加hook脚本:点击加号图标,弹出文件管理器弹窗,选择需要上传的hook脚本文件,文件名称需符合“S+数字(至少两位,个位数以0开头)”开头,数字代表hook脚本的执行顺序(脚本名称示例:S01xxx.sh),点击打开按钮即可上传,上传成功后状态变为成功,并且需要选择hook脚本存放的子目录。若要删除文件,点击操作列的删除字段即可。 +14. 添加hook脚本:点击加号图标,弹出文件管理器弹窗,选择需要上传的hook脚本文件,文件名称需符合“S+数字(至少两位,个位数以0开头)”开头,数字代表hook脚本的执行顺序(脚本名称示例:S01xxx.sh),点击打开按钮即可上传,上传成功后状态变为成功,并且需要选择hook脚本存放的子目录。若要删除文件,点击操作列的删除字段即可。 > 注:hook脚本上传文件大小不得超过16M ![image](images/add_file.png) -15.填好各项配置后,点击右上角保存按钮。 +15. 填好各项配置后,点击右上角保存按钮。 ##### docker/mini_docker/mini_cpio/iso_normal/qcow2格式 @@ -263,7 +263,7 @@ EulerMaker将[lkp-tests](https://gitee.com/openeuler-customization/lkp-tests.git - #{ENV['HOME']}/.config/cli/defaults/*.yaml 优先 -``` +```yaml GATEWAY_IP: xxx GATEWAY_PORT: xxx SRV_HTTP_REPOSITORIES_HOST: xxx @@ -285,7 +285,7 @@ EulerMaker将[lkp-tests](https://gitee.com/openeuler-customization/lkp-tests.git 配置完成后可执行以下命令,查看是否可以正常使用ccb命令。 -``` +```shell ccb -h/--help ``` @@ -293,7 +293,7 @@ ccb -h/--help ## 命令总览 -``` +```txt # CRUD # Elasticsearch 7.x文档基本操作(CRUD) https://www.cnblogs.com/liugp/p/11848408.html @@ -318,7 +318,7 @@ ccb build-single os_project= packages= k=v|--json JS **查询所有的projects全部信息** -``` +```shell ccb select projects ``` @@ -326,39 +326,39 @@ ccb select projects rpms和rpm_repos,这两个表由于数据量过大,无法通过`ccb select 表名`命令直接查询该表的全部信息, 查询rpms表必须使用-f指定过滤字段或者使用key=value指定明确的过滤条件。 -``` +```shell ccb select rpms -f repo_id ccb select rpms repo_id=openEuler-24.03-LTS:baseos-openEuler:24.03-LTS-x86_64-313 ``` 查询rpm_repos表必须使用key=value指定明确的过滤条件,如果不知道value的值,可以先查询其他表获取,然后再使用key=value查询rpm_repos表。 -``` +```shell ccb select builds -f repo_id # 先查询builds获得repo_id值 ccb select rpm_repos repo_id=openEuler-24.03-LTS:baseos-openEuler:24.03-LTS-x86_64-313 # 使用上个命令获得的repo_id值查询rpm_repos表 ``` **查询符合要求的projects的全部信息** -``` +```shell ccb select projects os_project=openEuler:Mainline owner=xxx ``` **查询符合要求的projects的部分信息** -``` +```shell ccb select projects os_project=openEuler:Mainline --field os_project,users ``` **查询符合要求的projects的部分信息并排序** -``` +```shell ccb select projects os_project=openEuler:Mainline --field os_project,users --sort create_time:desc,os_project:asc ``` **列出指定project的所有snapshot** -``` +```shell ccb select snapshots os_project=openEuler:Mainline ``` @@ -368,7 +368,7 @@ ccb select snapshots os_project=openEuler:Mainline **创建project** -``` +```json ccb create projects test-project --json config.json config.json: { @@ -407,7 +407,7 @@ config.json: **project添加package** -``` +```json ccb update projects $os_project --json update.json update.json: { @@ -424,7 +424,7 @@ update.json: **project增删user** -``` +```json ccb update projects $os_project --json update.json update.json: { @@ -438,13 +438,13 @@ update.json: **锁定某个package** -``` +```shell ccb update projects test-project package_overrides.$package.lock=true ``` **解锁某个package** -``` +```shell ccb update projects test-project package_overrides.$package.lock=false ``` @@ -452,7 +452,7 @@ ccb update projects test-project package_overrides.$package.lock=false build_targets可以不传,可以有1或多个,如果不传,采用os_project默认配置的build_targets。 -``` +```json ccb build-single os_project=test-project packages=gcc --json build_targets.json build_targets.json: { @@ -475,7 +475,7 @@ build_targets.json: build_targets参数与单包构建中的build_targets一样,可以不传,可以有1或多个,如果不传,采用os_project默认配置的build_targets; 如果指定snapshot_id,则os_project可不传,表示基于某个历史快照创建全量/增量构建。 -``` +```json ccb build os_project=test-project build_type=full --json build_targets.json # 全量构建 ccb build snapshot_id=xxx build_type=incremental --json build_targets.json # 增量构建 build_targets.json: @@ -500,28 +500,28 @@ dest表示指定软件包下载后存放的路径,可不传,默认使用当 #### 基本用法 -``` +```shell ccb download os_project=test-project packages=python-flask architecture=aarch64 dest=/tmp/rpm ccb download snapshot_id=123456 packages=python-flask architecture=aarch64 dest=/tmp/rpm ``` #### -s的用法 -``` +```shell # 使用-s 表示下载该packages的源码包。示例如下所示: ccb download os_project=test-project packages=python-flask architecture=aarch64 -s ``` #### -d的用法 -``` +```shell # 使用-d 表示下载该packages的debug(debuginfo和debugsource)包。示例如下所示: ccb download os_project=test-project packages=python-flask architecture=aarch64 -d ``` #### -b的用法 -``` +```shell # 使用-b all 表示下载该packages的所有子包。示例如下所示: ccb download os_project=test-project packages=python-flask architecture=aarch64 -b all @@ -532,7 +532,7 @@ ccb download os_project=test-project packages=python-flask architecture=aarch64 #### -s -d -b 组合使用 -``` +```shell # 使用-b all -s -d 表示下载该packages的debug包,源码包和所有子包。示例如下所示: ccb download os_project=test-project packages=python-flask architecture=aarch64 -b all -s -d @@ -543,14 +543,14 @@ ccb download os_project=test-project packages=python-flask architecture=aarch64 ### 7. cancel 取消构建任务 -``` +```shell ccb cancel $build_id ``` ### 8. 查看job日志 -``` +```shell ccb log ``` diff --git a/docs/zh/tools/devops/EulerMaker/figures/1686189862936_image.png b/docs/zh/tools/devops/eulermaker/figures/1686189862936_image.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/figures/1686189862936_image.png rename to docs/zh/tools/devops/eulermaker/figures/1686189862936_image.png diff --git a/docs/zh/tools/devops/EulerMaker/figures/1686190779219_image.png b/docs/zh/tools/devops/eulermaker/figures/1686190779219_image.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/figures/1686190779219_image.png rename to docs/zh/tools/devops/eulermaker/figures/1686190779219_image.png diff --git a/docs/zh/tools/devops/EulerMaker/figures/1686190839529_image.png b/docs/zh/tools/devops/eulermaker/figures/1686190839529_image.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/figures/1686190839529_image.png rename to docs/zh/tools/devops/eulermaker/figures/1686190839529_image.png diff --git a/docs/zh/tools/devops/EulerMaker/figures/1686193530087_image.png b/docs/zh/tools/devops/eulermaker/figures/1686193530087_image.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/figures/1686193530087_image.png rename to docs/zh/tools/devops/eulermaker/figures/1686193530087_image.png diff --git a/docs/zh/tools/devops/EulerMaker/figures/1686193606679_image.png b/docs/zh/tools/devops/eulermaker/figures/1686193606679_image.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/figures/1686193606679_image.png rename to docs/zh/tools/devops/eulermaker/figures/1686193606679_image.png diff --git a/docs/zh/tools/devops/EulerMaker/figures/1686193747460_image.png b/docs/zh/tools/devops/eulermaker/figures/1686193747460_image.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/figures/1686193747460_image.png rename to docs/zh/tools/devops/eulermaker/figures/1686193747460_image.png diff --git a/docs/zh/tools/devops/EulerMaker/figures/1686194008501_image.png b/docs/zh/tools/devops/eulermaker/figures/1686194008501_image.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/figures/1686194008501_image.png rename to docs/zh/tools/devops/eulermaker/figures/1686194008501_image.png diff --git a/docs/zh/tools/devops/EulerMaker/figures/1686194042686_image.png b/docs/zh/tools/devops/eulermaker/figures/1686194042686_image.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/figures/1686194042686_image.png rename to docs/zh/tools/devops/eulermaker/figures/1686194042686_image.png diff --git a/docs/zh/tools/devops/EulerMaker/figures/image.png b/docs/zh/tools/devops/eulermaker/figures/image.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/figures/image.png rename to docs/zh/tools/devops/eulermaker/figures/image.png diff --git a/docs/zh/tools/devops/EulerMaker/images/.keep b/docs/zh/tools/devops/eulermaker/images/.keep similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/.keep rename to docs/zh/tools/devops/eulermaker/images/.keep diff --git a/docs/zh/tools/devops/EulerMaker/images/add_file.png b/docs/zh/tools/devops/eulermaker/images/add_file.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/add_file.png rename to docs/zh/tools/devops/eulermaker/images/add_file.png diff --git a/docs/zh/tools/devops/EulerMaker/images/add_package.png b/docs/zh/tools/devops/eulermaker/images/add_package.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/add_package.png rename to docs/zh/tools/devops/eulermaker/images/add_package.png diff --git a/docs/zh/tools/devops/EulerMaker/images/add_rpms.png b/docs/zh/tools/devops/eulermaker/images/add_rpms.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/add_rpms.png rename to docs/zh/tools/devops/eulermaker/images/add_rpms.png diff --git a/docs/zh/tools/devops/EulerMaker/images/add_rpms_2.png b/docs/zh/tools/devops/eulermaker/images/add_rpms_2.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/add_rpms_2.png rename to docs/zh/tools/devops/eulermaker/images/add_rpms_2.png diff --git a/docs/zh/tools/devops/EulerMaker/images/brach_package.png b/docs/zh/tools/devops/eulermaker/images/brach_package.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/brach_package.png rename to docs/zh/tools/devops/eulermaker/images/brach_package.png diff --git a/docs/zh/tools/devops/EulerMaker/images/branch_package.png b/docs/zh/tools/devops/eulermaker/images/branch_package.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/branch_package.png rename to docs/zh/tools/devops/eulermaker/images/branch_package.png diff --git a/docs/zh/tools/devops/EulerMaker/images/build_detail.png b/docs/zh/tools/devops/eulermaker/images/build_detail.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/build_detail.png rename to docs/zh/tools/devops/eulermaker/images/build_detail.png diff --git a/docs/zh/tools/devops/EulerMaker/images/build_history.png b/docs/zh/tools/devops/eulermaker/images/build_history.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/build_history.png rename to docs/zh/tools/devops/eulermaker/images/build_history.png diff --git a/docs/zh/tools/devops/EulerMaker/images/certification.png b/docs/zh/tools/devops/eulermaker/images/certification.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/certification.png rename to docs/zh/tools/devops/eulermaker/images/certification.png diff --git a/docs/zh/tools/devops/EulerMaker/images/config.png b/docs/zh/tools/devops/eulermaker/images/config.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/config.png rename to docs/zh/tools/devops/eulermaker/images/config.png diff --git a/docs/zh/tools/devops/EulerMaker/images/config_net.png b/docs/zh/tools/devops/eulermaker/images/config_net.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/config_net.png rename to docs/zh/tools/devops/eulermaker/images/config_net.png diff --git a/docs/zh/tools/devops/EulerMaker/images/config_partition.png b/docs/zh/tools/devops/eulermaker/images/config_partition.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/config_partition.png rename to docs/zh/tools/devops/eulermaker/images/config_partition.png diff --git a/docs/zh/tools/devops/EulerMaker/images/config_passwd.png b/docs/zh/tools/devops/eulermaker/images/config_passwd.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/config_passwd.png rename to docs/zh/tools/devops/eulermaker/images/config_passwd.png diff --git a/docs/zh/tools/devops/EulerMaker/images/config_system.png b/docs/zh/tools/devops/eulermaker/images/config_system.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/config_system.png rename to docs/zh/tools/devops/eulermaker/images/config_system.png diff --git a/docs/zh/tools/devops/EulerMaker/images/create-project.png b/docs/zh/tools/devops/eulermaker/images/create-project.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/create-project.png rename to docs/zh/tools/devops/eulermaker/images/create-project.png diff --git a/docs/zh/tools/devops/EulerMaker/images/create_project.png b/docs/zh/tools/devops/eulermaker/images/create_project.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/create_project.png rename to docs/zh/tools/devops/eulermaker/images/create_project.png diff --git a/docs/zh/tools/devops/EulerMaker/images/custom_package.png b/docs/zh/tools/devops/eulermaker/images/custom_package.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/custom_package.png rename to docs/zh/tools/devops/eulermaker/images/custom_package.png diff --git a/docs/zh/tools/devops/EulerMaker/images/custom_package_2.png b/docs/zh/tools/devops/eulermaker/images/custom_package_2.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/custom_package_2.png rename to docs/zh/tools/devops/eulermaker/images/custom_package_2.png diff --git a/docs/zh/tools/devops/EulerMaker/images/dag_relation.PNG b/docs/zh/tools/devops/eulermaker/images/dag_relation.PNG similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/dag_relation.PNG rename to docs/zh/tools/devops/eulermaker/images/dag_relation.PNG diff --git a/docs/zh/tools/devops/EulerMaker/images/dag_relationships.png b/docs/zh/tools/devops/eulermaker/images/dag_relationships.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/dag_relationships.png rename to docs/zh/tools/devops/eulermaker/images/dag_relationships.png diff --git a/docs/zh/tools/devops/EulerMaker/images/download.png b/docs/zh/tools/devops/eulermaker/images/download.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/download.png rename to docs/zh/tools/devops/eulermaker/images/download.png diff --git a/docs/zh/tools/devops/EulerMaker/images/enter_pipeline.png b/docs/zh/tools/devops/eulermaker/images/enter_pipeline.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/enter_pipeline.png rename to docs/zh/tools/devops/eulermaker/images/enter_pipeline.png diff --git a/docs/zh/tools/devops/EulerMaker/images/fork_backlight.png b/docs/zh/tools/devops/eulermaker/images/fork_backlight.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/fork_backlight.png rename to docs/zh/tools/devops/eulermaker/images/fork_backlight.png diff --git a/docs/zh/tools/devops/EulerMaker/images/full_build.png b/docs/zh/tools/devops/eulermaker/images/full_build.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/full_build.png rename to docs/zh/tools/devops/eulermaker/images/full_build.png diff --git a/docs/zh/tools/devops/EulerMaker/images/home.png b/docs/zh/tools/devops/eulermaker/images/home.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/home.png rename to docs/zh/tools/devops/eulermaker/images/home.png diff --git a/docs/zh/tools/devops/EulerMaker/images/host_parameters.png b/docs/zh/tools/devops/eulermaker/images/host_parameters.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/host_parameters.png rename to docs/zh/tools/devops/eulermaker/images/host_parameters.png diff --git a/docs/zh/tools/devops/EulerMaker/images/image-build-1.png b/docs/zh/tools/devops/eulermaker/images/image-build-1.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/image-build-1.png rename to docs/zh/tools/devops/eulermaker/images/image-build-1.png diff --git a/docs/zh/tools/devops/EulerMaker/images/image-build-2.png b/docs/zh/tools/devops/eulermaker/images/image-build-2.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/image-build-2.png rename to docs/zh/tools/devops/eulermaker/images/image-build-2.png diff --git a/docs/zh/tools/devops/EulerMaker/images/image-build.png b/docs/zh/tools/devops/eulermaker/images/image-build.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/image-build.png rename to docs/zh/tools/devops/eulermaker/images/image-build.png diff --git a/docs/zh/tools/devops/EulerMaker/images/image-his-2.png b/docs/zh/tools/devops/eulermaker/images/image-his-2.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/image-his-2.png rename to docs/zh/tools/devops/eulermaker/images/image-his-2.png diff --git a/docs/zh/tools/devops/EulerMaker/images/image-his.png b/docs/zh/tools/devops/eulermaker/images/image-his.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/image-his.png rename to docs/zh/tools/devops/eulermaker/images/image-his.png diff --git a/docs/zh/tools/devops/EulerMaker/images/image_details.png b/docs/zh/tools/devops/eulermaker/images/image_details.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/image_details.png rename to docs/zh/tools/devops/eulermaker/images/image_details.png diff --git a/docs/zh/tools/devops/EulerMaker/images/incremental_build.png b/docs/zh/tools/devops/eulermaker/images/incremental_build.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/incremental_build.png rename to docs/zh/tools/devops/eulermaker/images/incremental_build.png diff --git a/docs/zh/tools/devops/EulerMaker/images/inherit_project.png b/docs/zh/tools/devops/eulermaker/images/inherit_project.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/inherit_project.png rename to docs/zh/tools/devops/eulermaker/images/inherit_project.png diff --git a/docs/zh/tools/devops/EulerMaker/images/jobs.png b/docs/zh/tools/devops/eulermaker/images/jobs.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/jobs.png rename to docs/zh/tools/devops/eulermaker/images/jobs.png diff --git a/docs/zh/tools/devops/EulerMaker/images/login.png b/docs/zh/tools/devops/eulermaker/images/login.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/login.png rename to docs/zh/tools/devops/eulermaker/images/login.png diff --git a/docs/zh/tools/devops/EulerMaker/images/openeuler-community-login.png b/docs/zh/tools/devops/eulermaker/images/openeuler-community-login.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/openeuler-community-login.png rename to docs/zh/tools/devops/eulermaker/images/openeuler-community-login.png diff --git a/docs/zh/tools/devops/EulerMaker/images/package_overview.png b/docs/zh/tools/devops/eulermaker/images/package_overview.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/package_overview.png rename to docs/zh/tools/devops/eulermaker/images/package_overview.png diff --git a/docs/zh/tools/devops/EulerMaker/images/pipeline_add.png b/docs/zh/tools/devops/eulermaker/images/pipeline_add.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/pipeline_add.png rename to docs/zh/tools/devops/eulermaker/images/pipeline_add.png diff --git a/docs/zh/tools/devops/EulerMaker/images/pipeline_clone.png b/docs/zh/tools/devops/eulermaker/images/pipeline_clone.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/pipeline_clone.png rename to docs/zh/tools/devops/eulermaker/images/pipeline_clone.png diff --git a/docs/zh/tools/devops/EulerMaker/images/pipeline_delete.png b/docs/zh/tools/devops/eulermaker/images/pipeline_delete.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/pipeline_delete.png rename to docs/zh/tools/devops/eulermaker/images/pipeline_delete.png diff --git a/docs/zh/tools/devops/EulerMaker/images/pipeline_list.png b/docs/zh/tools/devops/eulermaker/images/pipeline_list.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/pipeline_list.png rename to docs/zh/tools/devops/eulermaker/images/pipeline_list.png diff --git a/docs/zh/tools/devops/EulerMaker/images/pipeline_param.png b/docs/zh/tools/devops/eulermaker/images/pipeline_param.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/pipeline_param.png rename to docs/zh/tools/devops/eulermaker/images/pipeline_param.png diff --git a/docs/zh/tools/devops/EulerMaker/images/pipeline_start.png b/docs/zh/tools/devops/eulermaker/images/pipeline_start.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/pipeline_start.png rename to docs/zh/tools/devops/eulermaker/images/pipeline_start.png diff --git a/docs/zh/tools/devops/EulerMaker/images/regist.png b/docs/zh/tools/devops/eulermaker/images/register.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/regist.png rename to docs/zh/tools/devops/eulermaker/images/register.png diff --git a/docs/zh/tools/devops/EulerMaker/images/release-image_build.png b/docs/zh/tools/devops/eulermaker/images/release-image_build.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/release-image_build.png rename to docs/zh/tools/devops/eulermaker/images/release-image_build.png diff --git a/docs/zh/tools/devops/EulerMaker/images/run-job.png b/docs/zh/tools/devops/eulermaker/images/run-job.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/run-job.png rename to docs/zh/tools/devops/eulermaker/images/run-job.png diff --git a/docs/zh/tools/devops/EulerMaker/images/sign-up-local-account.png b/docs/zh/tools/devops/eulermaker/images/sign-up-local-account.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/sign-up-local-account.png rename to docs/zh/tools/devops/eulermaker/images/sign-up-local-account.png diff --git a/docs/zh/tools/devops/EulerMaker/images/single_build.png b/docs/zh/tools/devops/eulermaker/images/single_build.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/single_build.png rename to docs/zh/tools/devops/eulermaker/images/single_build.png diff --git a/docs/zh/tools/devops/EulerMaker/images/user_add.png b/docs/zh/tools/devops/eulermaker/images/user_add.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/user_add.png rename to docs/zh/tools/devops/eulermaker/images/user_add.png diff --git a/docs/zh/tools/devops/EulerMaker/images/user_manager.png b/docs/zh/tools/devops/eulermaker/images/user_manager.png similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/user_manager.png rename to docs/zh/tools/devops/eulermaker/images/user_manager.png diff --git a/docs/zh/tools/devops/EulerMaker/images/web-project.PNG b/docs/zh/tools/devops/eulermaker/images/web-project.PNG similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/web-project.PNG rename to docs/zh/tools/devops/eulermaker/images/web-project.PNG diff --git a/docs/zh/tools/devops/EulerMaker/images/wgcloud-web.PNG b/docs/zh/tools/devops/eulermaker/images/wgcloud-web.PNG similarity index 100% rename from docs/zh/tools/devops/EulerMaker/images/wgcloud-web.PNG rename to docs/zh/tools/devops/eulermaker/images/wgcloud-web.PNG diff --git a/docs/zh/tools/devops/EulerMaker/merge_configs.md b/docs/zh/tools/devops/eulermaker/merge_configs.md similarity index 82% rename from docs/zh/tools/devops/EulerMaker/merge_configs.md rename to docs/zh/tools/devops/eulermaker/merge_configs.md index 2e719ac31e91379818aaccbe8f747144658685f0..edff8176853b5f4afc625ce383f3aa7e9f0c978b 100644 --- a/docs/zh/tools/devops/EulerMaker/merge_configs.md +++ b/docs/zh/tools/devops/eulermaker/merge_configs.md @@ -4,17 +4,17 @@ # 安装与卸载 -#### 安装 +## 安装 pip install merge_configs-0.0.6-py3-none-any.whl -#### 卸载 +## 卸载 pip uninstall merge-configs # 使用方法 -#### 命令行 +## 命令行 merge-configs --help -p PACKAGES, --packages PACKAGES: 设置需要merge的软件包,多个软件包用空格隔开。 @@ -33,17 +33,17 @@ ![](./figures/1686189862936_image.png) -#### 软件包定制 +## 软件包定制 软件包编译信息经过的分层的架构分开保存,分成yaml主要配置、files.yaml文件配置、编译执行脚本、运行时执行脚本和changelog。其各个文件中定制的内容经由merge-configs工具解析转换,会在编译中生效。 -##### 参数定制 +### 参数定制 1. 参数名定制: -参数名可以根据定制需求修改,通常只修改source,patch的编号,随意修改可能导致spec语法不支持。 + 参数名可以根据定制需求修改,通常只修改source,patch的编号,随意修改可能导致spec语法不支持。 2. 参数值定制: -参数值定制的范围比较大,根据需求可随意修改内容,但是尽量不要修改值类型,如string类型改为list类型,可能导致转换错误。 + 参数值定制的范围比较大,根据需求可随意修改内容,但是尽量不要修改值类型,如string类型改为list类型,可能导致转换错误。 修改Patch编号和它的值: @@ -53,7 +53,7 @@ ![](./figures/1686190839529_image.png) -##### 条件定制 +### 条件定制 条件定制的方式是在yaml配置层的key中添加when条件。 @@ -75,7 +75,7 @@ ``` 2. 标签定制: -defineFlags字段将会转换为bcond_with/bcond_without。 + defineFlags字段将会转换为bcond_with/bcond_without。 ```sh defineFlags: @@ -85,7 +85,7 @@ defineFlags字段将会转换为bcond_with/bcond_without。 ``` 3. 宏定制: -%%{rpmGlobal.}表示在包信息中定义的宏,%%%{rpmGlobal.}表示在rpm系统中定义的宏。 + %%{rpmGlobal.}表示在包信息中定义的宏,%%%{rpmGlobal.}表示在rpm系统中定义的宏。 ```sh rpmGloal: @@ -104,6 +104,6 @@ defineFlags字段将会转换为bcond_with/bcond_without。 ![](./figures/1686194008501_image.png) -#### 转换 +## 转换 目前eulermaker仅支持yaml->spec的转换,仅支持rpmbuild编译rpm包的编译方式。 diff --git a/docs/zh/tools/devops/EulerPipeline/_toc.yaml b/docs/zh/tools/devops/eulerpipeline/_toc.yaml similarity index 100% rename from docs/zh/tools/devops/EulerPipeline/_toc.yaml rename to docs/zh/tools/devops/eulerpipeline/_toc.yaml diff --git a/docs/zh/tools/devops/EulerPipeline/eulerpipeline_user_guide.md b/docs/zh/tools/devops/eulerpipeline/eulerpipeline_user_guide.md similarity index 99% rename from docs/zh/tools/devops/EulerPipeline/eulerpipeline_user_guide.md rename to docs/zh/tools/devops/eulerpipeline/eulerpipeline_user_guide.md index 6a43fe3445de16a36e6e67fe9365e2ad1df535e5..ed2615d9029d75e86fdb096d221e69b3479f8387 100644 --- a/docs/zh/tools/devops/EulerPipeline/eulerpipeline_user_guide.md +++ b/docs/zh/tools/devops/eulerpipeline/eulerpipeline_user_guide.md @@ -82,7 +82,7 @@ EulerPipeline原生开发服务支持基于lkp-tests仓库中的流水线yaml模 - 通过YAML编排需要熟悉流水线支持的语法,流水线支持多版本语法解析,语法版本通过“version”关键字声明,目前仅支持v1.0版本语法。 - - v1.0语法请参考文档:[EulerPipeline原生开发服务流水线语法v1.0](grammar/v1/v1.0_grammar.md) + - v1.0语法请参考文档:[EulerPipeline原生开发服务流水线语法v1.0](./v1.0_grammar.md) ![yaml](./image/YAML编排.jpg) diff --git "a/docs/zh/tools/devops/EulerPipeline/image/UI\347\274\226\346\216\222.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/UI\347\274\226\346\216\222.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/UI\347\274\226\346\216\222.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/UI\347\274\226\346\216\222.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/YAML\347\274\226\346\216\222.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/YAML\347\274\226\346\216\222.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/YAML\347\274\226\346\216\222.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/YAML\347\274\226\346\216\222.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/cci\345\270\220\346\210\267\346\263\250\345\206\214.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/cci\345\270\220\346\210\267\346\263\250\345\206\214.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/cci\345\270\220\346\210\267\346\263\250\345\206\214.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/cci\345\270\220\346\210\267\346\263\250\345\206\214.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/cci\345\270\220\346\210\267\347\273\221\345\256\232.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/cci\345\270\220\346\210\267\347\273\221\345\256\232.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/cci\345\270\220\346\210\267\347\273\221\345\256\232.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/cci\345\270\220\346\210\267\347\273\221\345\256\232.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/kernel-ci_yaml\347\274\226\346\216\222.png" "b/docs/zh/tools/devops/eulerpipeline/image/kernel-ci_yaml\347\274\226\346\216\222.png" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/kernel-ci_yaml\347\274\226\346\216\222.png" rename to "docs/zh/tools/devops/eulerpipeline/image/kernel-ci_yaml\347\274\226\346\216\222.png" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/kernel-ci\346\250\241\346\235\277.png" "b/docs/zh/tools/devops/eulerpipeline/image/kernel-ci\346\250\241\346\235\277.png" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/kernel-ci\346\250\241\346\235\277.png" rename to "docs/zh/tools/devops/eulerpipeline/image/kernel-ci\346\250\241\346\235\277.png" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/kernel-ci\350\257\204\350\256\272.png" "b/docs/zh/tools/devops/eulerpipeline/image/kernel-ci\350\257\204\350\256\272.png" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/kernel-ci\350\257\204\350\256\272.png" rename to "docs/zh/tools/devops/eulerpipeline/image/kernel-ci\350\257\204\350\256\272.png" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/kernel-ci\351\224\231\350\257\257\350\257\246\346\203\205.png" "b/docs/zh/tools/devops/eulerpipeline/image/kernel-ci\351\224\231\350\257\257\350\257\246\346\203\205.png" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/kernel-ci\351\224\231\350\257\257\350\257\246\346\203\205.png" rename to "docs/zh/tools/devops/eulerpipeline/image/kernel-ci\351\224\231\350\257\257\350\257\246\346\203\205.png" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/matrix\346\200\273\350\247\210.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/matrix\346\200\273\350\247\210.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/matrix\346\200\273\350\247\210.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/matrix\346\200\273\350\247\210.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/webhook\350\257\267\346\261\202\347\273\223\346\236\234.png" "b/docs/zh/tools/devops/eulerpipeline/image/webhook\350\257\267\346\261\202\347\273\223\346\236\234.png" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/webhook\350\257\267\346\261\202\347\273\223\346\236\234.png" rename to "docs/zh/tools/devops/eulerpipeline/image/webhook\350\257\267\346\261\202\347\273\223\346\236\234.png" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\344\273\223\345\272\223\351\205\215\347\275\256webhook1.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\344\273\223\345\272\223\351\205\215\347\275\256webhook1.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\344\273\223\345\272\223\351\205\215\347\275\256webhook1.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\344\273\223\345\272\223\351\205\215\347\275\256webhook1.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\344\273\223\345\272\223\351\205\215\347\275\256webhook2.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\344\273\223\345\272\223\351\205\215\347\275\256webhook2.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\344\273\223\345\272\223\351\205\215\347\275\256webhook2.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\344\273\223\345\272\223\351\205\215\347\275\256webhook2.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\344\273\273\345\212\241\350\257\246\346\203\205.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\344\273\273\345\212\241\350\257\246\346\203\205.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\344\273\273\345\212\241\350\257\246\346\203\205.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\344\273\273\345\212\241\350\257\246\346\203\205.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\344\273\273\345\212\241\351\207\215\350\257\225.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\344\273\273\345\212\241\351\207\215\350\257\225.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\344\273\273\345\212\241\351\207\215\350\257\225.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\344\273\273\345\212\241\351\207\215\350\257\225.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\344\277\256\346\224\271\350\247\222\350\211\262.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\344\277\256\346\224\271\350\247\222\350\211\262.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\344\277\256\346\224\271\350\247\222\350\211\262.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\344\277\256\346\224\271\350\247\222\350\211\262.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\344\277\256\346\224\271\350\247\222\350\211\262\346\235\203\351\231\2201.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\344\277\256\346\224\271\350\247\222\350\211\262\346\235\203\351\231\2201.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\344\277\256\346\224\271\350\247\222\350\211\262\346\235\203\351\231\2201.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\344\277\256\346\224\271\350\247\222\350\211\262\346\235\203\351\231\2201.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\344\277\256\346\224\271\350\247\222\350\211\262\346\235\203\351\231\2202.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\344\277\256\346\224\271\350\247\222\350\211\262\346\235\203\351\231\2202.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\344\277\256\346\224\271\350\247\222\350\211\262\346\235\203\351\231\2202.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\344\277\256\346\224\271\350\247\222\350\211\262\346\235\203\351\231\2202.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\345\210\240\351\231\244\346\265\201\346\260\264\347\272\277.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\345\210\240\351\231\244\346\265\201\346\260\264\347\272\277.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\345\210\240\351\231\244\346\265\201\346\260\264\347\272\277.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\345\210\240\351\231\244\346\265\201\346\260\264\347\272\277.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\345\216\206\345\217\262\350\277\220\350\241\214.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\345\216\206\345\217\262\350\277\220\350\241\214.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\345\216\206\345\217\262\350\277\220\350\241\214.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\345\216\206\345\217\262\350\277\220\350\241\214.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\345\217\230\346\233\264\346\265\201\346\260\264\347\272\277\347\261\273\345\236\213.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\345\217\230\346\233\264\346\265\201\346\260\264\347\272\277\347\261\273\345\236\213.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\345\217\230\346\233\264\346\265\201\346\260\264\347\272\277\347\261\273\345\236\213.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\345\217\230\346\233\264\346\265\201\346\260\264\347\272\277\347\261\273\345\236\213.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\346\210\220\345\221\230\347\256\241\347\220\206.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\346\210\220\345\221\230\347\256\241\347\220\206.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\346\210\220\345\221\230\347\256\241\347\220\206.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\346\210\220\345\221\230\347\256\241\347\220\206.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\346\226\260\345\273\272\346\265\201\346\260\264\347\272\277.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\346\226\260\345\273\272\346\265\201\346\260\264\347\272\277.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\346\226\260\345\273\272\346\265\201\346\260\264\347\272\277.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\346\226\260\345\273\272\346\265\201\346\260\264\347\272\277.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\346\237\245\347\234\213\346\234\200\346\226\260\350\277\220\350\241\214\350\257\246\346\203\205.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\346\237\245\347\234\213\346\234\200\346\226\260\350\277\220\350\241\214\350\257\246\346\203\205.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\346\237\245\347\234\213\346\234\200\346\226\260\350\277\220\350\241\214\350\257\246\346\203\205.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\346\237\245\347\234\213\346\234\200\346\226\260\350\277\220\350\241\214\350\257\246\346\203\205.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\346\267\273\345\212\240webhook\350\247\246\345\217\221\346\235\241\344\273\266.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\346\267\273\345\212\240webhook\350\247\246\345\217\221\346\235\241\344\273\266.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\346\267\273\345\212\240webhook\350\247\246\345\217\221\346\235\241\344\273\266.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\346\267\273\345\212\240webhook\350\247\246\345\217\221\346\235\241\344\273\266.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\346\267\273\345\212\240\346\210\220\345\221\230.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\346\267\273\345\212\240\346\210\220\345\221\230.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\346\267\273\345\212\240\346\210\220\345\221\230.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\346\267\273\345\212\240\346\210\220\345\221\230.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\347\231\273\345\275\225.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\347\231\273\345\275\225.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\347\231\273\345\275\225.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\347\231\273\345\275\225.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\347\244\276\345\214\272\351\211\264\346\235\203.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\347\244\276\345\214\272\351\211\264\346\235\203.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\347\244\276\345\214\272\351\211\264\346\235\203.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\347\244\276\345\214\272\351\211\264\346\235\203.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\347\273\223\345\257\271\345\244\215\347\216\260.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\347\273\223\345\257\271\345\244\215\347\216\260.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\347\273\223\345\257\271\345\244\215\347\216\260.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\347\273\223\345\257\271\345\244\215\347\216\260.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\347\273\223\345\257\271\345\244\215\347\216\260\350\260\203\350\257\225.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\347\273\223\345\257\271\345\244\215\347\216\260\350\260\203\350\257\225.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\347\273\223\345\257\271\345\244\215\347\216\260\350\260\203\350\257\225.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\347\273\223\345\257\271\345\244\215\347\216\260\350\260\203\350\257\225.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\347\274\226\346\216\222\347\233\256\346\240\207\346\265\201\346\260\264\347\272\277.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\347\274\226\346\216\222\347\233\256\346\240\207\346\265\201\346\260\264\347\272\277.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\347\274\226\346\216\222\347\233\256\346\240\207\346\265\201\346\260\264\347\272\277.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\347\274\226\346\216\222\347\233\256\346\240\207\346\265\201\346\260\264\347\272\277.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\350\256\276\347\275\256\346\265\201\346\260\264\347\272\277\346\235\203\351\231\220.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\350\256\276\347\275\256\346\265\201\346\260\264\347\272\277\346\235\203\351\231\220.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\350\256\276\347\275\256\346\265\201\346\260\264\347\272\277\346\235\203\351\231\220.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\350\256\276\347\275\256\346\265\201\346\260\264\347\272\277\346\235\203\351\231\220.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\350\277\220\350\241\214\346\265\201\346\260\264\347\272\2771.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\350\277\220\350\241\214\346\265\201\346\260\264\347\272\2771.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\350\277\220\350\241\214\346\265\201\346\260\264\347\272\2771.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\350\277\220\350\241\214\346\265\201\346\260\264\347\272\2771.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\350\277\220\350\241\214\346\265\201\346\260\264\347\272\2772.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\350\277\220\350\241\214\346\265\201\346\260\264\347\272\2772.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\350\277\220\350\241\214\346\265\201\346\260\264\347\272\2772.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\350\277\220\350\241\214\346\265\201\346\260\264\347\272\2772.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\350\277\220\350\241\214\350\257\246\346\203\205.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\350\277\220\350\241\214\350\257\246\346\203\205.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\350\277\220\350\241\214\350\257\246\346\203\205.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\350\277\220\350\241\214\350\257\246\346\203\205.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\351\200\211\346\213\251\345\244\215\347\216\260\346\226\271\345\274\217.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\351\200\211\346\213\251\345\244\215\347\216\260\346\226\271\345\274\217.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\351\200\211\346\213\251\345\244\215\347\216\260\346\226\271\345\274\217.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\351\200\211\346\213\251\345\244\215\347\216\260\346\226\271\345\274\217.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\351\200\211\346\213\251\345\256\242\346\210\267\347\253\257.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\351\200\211\346\213\251\345\256\242\346\210\267\347\253\257.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\351\200\211\346\213\251\345\256\242\346\210\267\347\253\257.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\351\200\211\346\213\251\345\256\242\346\210\267\347\253\257.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\351\200\211\346\213\251\346\250\241\346\235\277.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\351\200\211\346\213\251\346\250\241\346\235\277.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\351\200\211\346\213\251\346\250\241\346\235\277.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\351\200\211\346\213\251\346\250\241\346\235\277.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\351\205\215\347\275\256\345\256\232\346\227\266\350\247\246\345\217\221\346\235\241\344\273\266.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\351\205\215\347\275\256\345\256\232\346\227\266\350\247\246\345\217\221\346\235\241\344\273\266.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\351\205\215\347\275\256\345\256\232\346\227\266\350\247\246\345\217\221\346\235\241\344\273\266.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\351\205\215\347\275\256\345\256\232\346\227\266\350\247\246\345\217\221\346\235\241\344\273\266.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\351\205\215\347\275\256\346\265\201\346\260\264\347\272\277\345\217\230\351\207\217.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\351\205\215\347\275\256\346\265\201\346\260\264\347\272\277\345\217\230\351\207\217.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\351\205\215\347\275\256\346\265\201\346\260\264\347\272\277\345\217\230\351\207\217.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\351\205\215\347\275\256\346\265\201\346\260\264\347\272\277\345\217\230\351\207\217.jpg" diff --git "a/docs/zh/tools/devops/EulerPipeline/image/\351\207\215\350\257\225\346\265\201\346\260\264\347\272\2771.jpg" "b/docs/zh/tools/devops/eulerpipeline/image/\351\207\215\350\257\225\346\265\201\346\260\264\347\272\2771.jpg" similarity index 100% rename from "docs/zh/tools/devops/EulerPipeline/image/\351\207\215\350\257\225\346\265\201\346\260\264\347\272\2771.jpg" rename to "docs/zh/tools/devops/eulerpipeline/image/\351\207\215\350\257\225\346\265\201\346\260\264\347\272\2771.jpg" diff --git a/docs/zh/tools/devops/EulerPipeline/kernel_ci_guide.md b/docs/zh/tools/devops/eulerpipeline/kernel_ci_guide.md similarity index 100% rename from docs/zh/tools/devops/EulerPipeline/kernel_ci_guide.md rename to docs/zh/tools/devops/eulerpipeline/kernel_ci_guide.md diff --git a/docs/zh/tools/devops/EulerPipeline/grammar/v1/v1.0_grammar.md b/docs/zh/tools/devops/eulerpipeline/v1.0_grammar.md similarity index 100% rename from docs/zh/tools/devops/EulerPipeline/grammar/v1/v1.0_grammar.md rename to docs/zh/tools/devops/eulerpipeline/v1.0_grammar.md diff --git a/docs/zh/tools/devops/EulerPipeline/grammar/v1.1/v1.1_grammar.md b/docs/zh/tools/devops/eulerpipeline/v1.1_grammar.md similarity index 100% rename from docs/zh/tools/devops/EulerPipeline/grammar/v1.1/v1.1_grammar.md rename to docs/zh/tools/devops/eulerpipeline/v1.1_grammar.md diff --git a/docs/zh/tools/devops/patch_tracking/patch_tracking.md b/docs/zh/tools/devops/patch_tracking/patch_tracking.md index ae981b2bf93432679d205c9146cf3bbca878d52e..9d7e983c6ece9c511ff822c0ffedd62f87d6c2fa 100644 --- a/docs/zh/tools/devops/patch_tracking/patch_tracking.md +++ b/docs/zh/tools/devops/patch_tracking/patch_tracking.md @@ -64,15 +64,15 @@ b. Maintainer对提交的补丁处理流程 ### 软件下载 -Repo 源地址:[https://repo.openeuler.org/](https://repo.openeuler.org/) +Repo 源地址:[https://repo.openeuler.org](https://repo.openeuler.org) -rpm 包获取地址:[https://repo.openeuler.org/](https://repo.openeuler.org/),依次选择正确的版本号、everything、正确的架构、Packages,找到需要的rpm包,点击即可下载。 +rpm 包获取地址:[https://repo.openeuler.org](https://repo.openeuler.org),依次选择正确的版本号、everything、正确的架构、Packages,找到需要的rpm包,点击即可下载。 ### 安装工具 方法1:从repo源安装 -1. 使用 dnf 挂载 repo源(具体方法参考[应用开发指南](../../../server/development/application_dev/preparations_for_development_environment.md)。 +1. 使用 dnf 挂载 repo源(具体方法参考《[应用开发指南](../../../server/development/application_dev/preparations_for_development_environment.md)》)。 2. 执行以下命令安装`patch-tracking`及其依赖。 diff --git a/docs/zh/tools/devops/pkgship/pkgship.md b/docs/zh/tools/devops/pkgship/pkgship.md index 43120ee9a43cdc99cd2b95ebaabc79e595cb081e..03dbf521d8e4df7f402c53a93a757c3dac788bfa 100644 --- a/docs/zh/tools/devops/pkgship/pkgship.md +++ b/docs/zh/tools/devops/pkgship/pkgship.md @@ -4,7 +4,7 @@ pkgship是一款管理OS软件包依赖关系,提供依赖和被依赖关系完整图谱的查询工具,pkgship提供软件包依赖查询、生命周期管理等功能。 -1. 软件包基本信息查询:方便社区人员快速获取软件包的名称,版本,描述等基本信息。 +1. 软件包基本信息查询:方便社区人员快速获取软件包的名称、版本、描述等基本信息。 2. 软件包依赖查询:方便社区人员在软件包引入、更新和删除的时候了解软件的影响范围。 ## 架构 @@ -15,13 +15,13 @@ pkgship是一款管理OS软件包依赖关系,提供依赖和被依赖关系 ## 在线使用 -pkgship提供了公网地址 +pkgship提供了公网地址,若无定制化需求,可直接使用在线查询。 若需要定制查询数据源,可按照文档进行本地安装、配置、使用。 ## 软件下载 -- Repo源挂载正式发布地址: +- Repo源挂载正式发布地址: - 源码获取地址: - RPM包版本获取地址: @@ -54,7 +54,7 @@ pkgship提供了公网地址 @@ -602,7 +602,7 @@ swtpm提供了一个可集成到虚拟化环境中的TPM仿真器(TPM1.2和TPM # virsh define MeasuredBoot.xml ``` -3. 启动虚拟机 +3. 启动虚拟机。 启动虚拟机前需要使用chmod命令给目录/var/lib/swtpm-localca/赋予如下权限,否则libvirt无法拉起swtpm。 diff --git a/docs/zh/virtualization/virtualization_platform/virtualization/environment_preparation.md b/docs/zh/virtualization/virtualization_platform/virtualization/environment_preparation.md index 228c7360dbd4721a32752ee4e6136e0797610283..23b6f0fb2d10bd5e66d9339c2a1f79465572c625 100644 --- a/docs/zh/virtualization/virtualization_platform/virtualization/environment_preparation.md +++ b/docs/zh/virtualization/virtualization_platform/virtualization/environment_preparation.md @@ -269,13 +269,13 @@ Open vSwitch网桥,具有更便捷的自动化编排能力。搭建Open vSwitc 1. 安装edk软件包,使用root用户执行如下命令: - 在AArch64架构下edk2的包名为edk2-aarch64 + 在AArch64架构下edk2的包名为edk2-aarch64。 ```sh yum install -y edk2-aarch64 ``` - 在x86\_64架构下edk2的包名为edk2-ovmf + 在x86\_64架构下edk2的包名为edk2-ovmf。 ```sh yum install -y edk2-ovmf @@ -283,7 +283,7 @@ Open vSwitch网桥,具有更便捷的自动化编排能力。搭建Open vSwitc 2. 查询edk软件是否安装成功,命令如下: - 在AArch64架构下查询如下 + 在AArch64架构下查询如下: ```sh rpm -qi edk2-aarch64 @@ -300,7 +300,7 @@ Open vSwitch网桥,具有更便捷的自动化编排能力。搭建Open vSwitc Group : Applications/Emulators ``` - 在x86\_64架构下查询如下 + 在x86\_64架构下查询如下: ```sh # rpm -qi edk2-ovmf @@ -360,19 +360,19 @@ openEuler虚拟化使用virsh管理虚拟机。如果希望在非root用户使 5. 在虚拟机XML配置文件中的domain根元素中添加如下内容,使qemu-kvm进程可以访问磁盘镜像文件。 - 执行如下命令查询当前运行的虚拟机 + 执行如下命令查询当前运行的虚拟机。 ```sh virsh list ``` - 使用如下命令编辑对应虚拟机的XML,name参数为上一步查询到的需要修改的目标虚拟机名称 + 使用如下命令编辑对应虚拟机的XML,name参数为上一步查询到的需要修改的目标虚拟机名称。 ```sh virsh edit ``` - 添加如下配置,编辑后保存即可生效 + 添加如下配置,编辑后保存即可生效。 ```xml diff --git a/docs/zh/virtualization/virtualization_platform/virtualization/managing_devices.md b/docs/zh/virtualization/virtualization_platform/virtualization/managing_devices.md index 8fa7a269bb5deb8675f832d70bd38cacb2d1b735..e2923d97dcf24dd8260d3c8043e401baff4599b0 100644 --- a/docs/zh/virtualization/virtualization_platform/virtualization/managing_devices.md +++ b/docs/zh/virtualization/virtualization_platform/virtualization/managing_devices.md @@ -433,6 +433,7 @@ SR-IOV(Single Root I/O Virtualization)是一种基于硬件的虚拟化解 关闭SR-IOV功能: + 在虚拟机使用完毕后(虚拟机关机,所有的VF均没有在使用中的时候),若要关闭SR-IOV功能。执行操作如下: 这里以Hi1822网卡(eth0对应PF的网口名称)为例: diff --git a/docs/zh/virtualization/virtualization_platform/virtualization/managing_vms.md b/docs/zh/virtualization/virtualization_platform/virtualization/managing_vms.md index e014039c2844ad79077fa2c57118d120ae795724..d9adb5e3f889bf2187a40b372146550f124d58fa 100644 --- a/docs/zh/virtualization/virtualization_platform/virtualization/managing_vms.md +++ b/docs/zh/virtualization/virtualization_platform/virtualization/managing_vms.md @@ -504,13 +504,13 @@ Libvirt组件提供了一组查询虚拟机状态信息的命令,包括虚拟 ``` [!NOTE]说明 - >登录 VNC 需要配置防火墙规则,允许 VNC 端口的连接。参考命令如下,其中X为数值“5900 + 端口号” ,例如本例中为5903。 + >登录 VNC 需要配置防火墙规则,允许 VNC 端口的连接。参考命令如下,其中X为数值“5900 + 端口号”,例如本例中为5903。 > >```sh >firewall-cmd --zone=public --add-port=X/tcp >``` -2. 打开VncViewer软件,输入主机IP和端口号。格式为“主机IP:端口号”,例如:“10.133.205.53:3”。 +2. 打开VncViewer软件,输入主机IP和端口号。格式为“主机IP:端口号”,例如:“10.133.205.53:3”。 3. 单击“确定”输入VNC密码(可选),登录到虚拟机VNC进行操作。 ### 配置VNC-TLS登录 @@ -674,7 +674,7 @@ VNC开启TLS加密认证模式的操作步骤如下: - 在UEFI BIOS开启安全启动的情况下,如果相关部件没有签名或签名不正确,则无法正常启动系统。 - 在UEFI BIOS关闭安全启动的情况下,启动过程的验证功能都会被关闭。 - 安全启动验证链后半段,即shim->grub->kernel引导内核启动这部分的验证链由操作系统镜像实现,若操作系统不支持引导内核安全启动过程,则虚拟机安全启动失败。 -- 当前不提供x86架构使用nvram文件配置虚拟机安全启动 +- 当前不提供x86架构使用nvram文件配置虚拟机安全启动。 ### 安全启动实践 @@ -698,7 +698,7 @@ edk rpm包中的组件安装于/usr/share/edk2/aarch64目录下,包括`QEMU_EF 虚拟机安全启动时的证书从BIOS界面导入,在证书导入前需要将证书文件导入到虚拟机中。可以通过挂载磁盘的方式将证书文件所在目录挂载到虚拟机中,例如制作包含证书的镜像,并在虚拟机的配置文件xml中配置挂载该镜像: -制作证书文件镜像 +制作证书文件镜像: ```con dd of='/path/to/data.img' if='/dev/zero' bs=1M count=64 @@ -711,7 +711,7 @@ umount /path/to/mnt/ 其中,/path/to/certificates/为证书文件所在路径,/path/to/data.img为证书文件镜像所在路径,/path/to/mnt/为镜像挂载路径。 -在虚拟机xml文件中配置挂载该镜像 +在虚拟机xml文件中配置挂载该镜像: ```conf @@ -725,9 +725,9 @@ umount /path/to/mnt/ ``` -启动虚拟机,导入PK证书,流程如下(KEK证书,DB证书导入方式相同): +启动虚拟机,导入PK证书,流程如下(KEK证书,DB证书导入方式相同): -虚拟机启动后,点击F2进入bios界面 +虚拟机启动后,点击F2进入bios界面: **图 1*- 进入bios界面 @@ -749,13 +749,13 @@ umount /path/to/mnt/ ![](./figures/CertEnrollP5.png) -在File Explorer界面可以看到很多磁盘目录,其中包括我们通过磁盘挂载的证书文件目录 +在File Explorer界面可以看到很多磁盘目录,其中包括我们通过磁盘挂载的证书文件目录: **图 6*- File Explorer ![](./figures/CertEnrollP6.png) -在磁盘目录中选择要导入的PK证书 +在磁盘目录中选择要导入的PK证书: **图 7*- 进入证书所在磁盘 diff --git a/docs/zh/virtualization/virtualization_platform/virtualization/system_resource_management.md b/docs/zh/virtualization/virtualization_platform/virtualization/system_resource_management.md index ec9f4d29a0f8fab1f7ce4321daba1c29e0271491..6668d1ae92c8017fd7f7b7b515012475fadc404c 100644 --- a/docs/zh/virtualization/virtualization_platform/virtualization/system_resource_management.md +++ b/docs/zh/virtualization/virtualization_platform/virtualization/system_resource_management.md @@ -294,10 +294,10 @@ virsh setvcpus 进行虚拟机CPU热拔操作的格式如下: virsh setvcpus [--config] [--live] ``` -- domain: 参数,必填。指定虚拟机名称。 -- count: 参数,必填。指定目标CPU数目,即热拔后虚拟机CPU数目。 -- --config: 选项,选填。虚拟机下次启动时仍有效。 -- --live: 选项,选填。在线生效。 +- domain:参数,必填。指定虚拟机名称。 +- count:参数,必填。指定目标CPU数目,即热拔后虚拟机CPU数目。 +- --config:选项,选填。虚拟机下次启动时仍有效。 +- --live:选项,选填。在线生效。 ## 管理虚拟内存 @@ -305,7 +305,7 @@ virsh setvcpus [--config] [--live] 传统的多核运算使用SMP(Symmetric Multi-Processor)模式:将多个处理器与一个集中的存储器和I/O总线相连。所有处理器只能访问同一个物理存储器,因此SMP系统也被称为一致存储器访问(UMA)系统。一致性指无论在什么时候,处理器只能为内存的每个数据保持或共享唯一一个数值。很显然,SMP的缺点是可伸缩性有限,因为在存储器和I/O接口达到饱和的时候,增加处理器并不能获得更高的性能。 -NUMA(Non Uniform Memory Access Architecture) 模式是一种分布式存储器访问方式,处理器可以同时访问不同的存储器地址,大幅度提高并行性。 NUMA模式下,处理器被划分成多个“节点”(NODE), 每个节点分配一块本地存储器空间。所有节点中的处理器都可以访问全部的物理存储器,但是访问本节点内的存储器所需要的时间,比访问某些远程节点内的存储器所花的时间要少得多。 +NUMA(Non Uniform Memory Access Architecture) 模式是一种分布式存储器访问方式,处理器可以同时访问不同的存储器地址,大幅度提高并行性。 NUMA模式下,处理器被划分成多个“节点”(NODE),每个节点分配一块本地存储器空间。所有节点中的处理器都可以访问全部的物理存储器,但是访问本节点内的存储器所需要的时间,比访问某些远程节点内的存储器所花的时间要少得多。 ### 配置Host-NUMA diff --git a/docs/zh/virtualization/virtualization_platform/virtualization/vm_configuration.md b/docs/zh/virtualization/virtualization_platform/virtualization/vm_configuration.md index 8395496236be0e049f2a37ee9af262eebd8bcf2e..f357c870da1098f5ebd135a8797ede19c7098b6b 100644 --- a/docs/zh/virtualization/virtualization_platform/virtualization/vm_configuration.md +++ b/docs/zh/virtualization/virtualization_platform/virtualization/vm_configuration.md @@ -92,6 +92,7 @@ XML配置文件的基本格式如下,其中label代表具体标签名,attrib 子元素topology:元素cpu的子元素,用于描述虚拟CPU模式的拓扑结构。 - 子元素topology的属性socket、cores、threads分别描述了虚拟机具有多少个cpu socket,每个cpu socket中包含多少个处理核心(core),每个处理器核心具有多少个超线程(threads),属性值为正整数且三者的乘积等于虚拟CPU的个数。 + - ARM架构支持虚拟超线程, 虚拟CPU热插与虚拟超线程功能互斥。 子元素model:元素cpu的子元素,当mode为custom时用于描述CPU的模型。 diff --git a/docs/zh/virtualization/virtualization_platform/virtualization/vm_live_migration.md b/docs/zh/virtualization/virtualization_platform/virtualization/vm_live_migration.md index fd1df824d29f8e5ad0b8be50778bd339f020e0f5..dc2a2cfeab4eb9ea732a95840a4a2e740375cd87 100644 --- a/docs/zh/virtualization/virtualization_platform/virtualization/vm_live_migration.md +++ b/docs/zh/virtualization/virtualization_platform/virtualization/vm_live_migration.md @@ -26,7 +26,6 @@ - 迁移过程中,不允许对虚拟机进行生命周期和管理虚拟机硬件设备等操作。 - 虚拟机正在迁移的过程中,应尽可能保证源端、目的端服务器不被意外下电或重启,否则会导致热迁移失败,甚至可能导致虚拟机被下电。 - 虚拟机正在迁移的过程中,不允许对虚拟机做关机、重启或恢复操作,否则可能会导致热迁移失败,当执行ACPI方式重启时,再执行热迁移会导致虚拟机关闭。 - - 只支持同构热迁移,即源端和目的端CPU型号需要相同。 - 跨业务网段虚拟机迁移可以成功,但是到目的端后会出现网络异常,为了防止该情况发生,需要用户保证迁移业务网段一致。 - 如果源端虚拟机vCPU数大于目的端的物理机CPU核数,则迁移后将会影响到虚拟机的性能,应保证目的端物理机CPU核数大于等于源端虚拟机vCPU数。 @@ -91,11 +90,11 @@ virsh qemu-monitor-command openEulerVM '{"execute":"query-dirty-rate"}' 用户可以使用migrate-set-parameters来设置热迁移时相关的参数,与热迁移压缩的参数如下所示: -1. compress-level: 压缩级别,缺省值:1 -2. compress-threads: 压缩线程数目,缺省值:8 -3. compress-wait-thread: 是否等待压缩线程,缺省值:true -4. decompress-threads: 解压缩线程数目,缺省值:2 -5. compress-method: 压缩算法选择(zlib、zstd),缺省值:zlib +1. compress-level:压缩级别,缺省值:1 +2. compress-threads:压缩线程数目,缺省值:8 +3. compress-wait-thread:是否等待压缩线程,缺省值:true +4. decompress-threads:解压缩线程数目,缺省值:2 +5. compress-method:压缩算法选择(zlib、zstd),缺省值:zlib 例如,指定名为openEulerVM的虚拟机热迁算法为zstd,其余参数采用默认设置。