diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000000000000000000000000000000000..c3907f34f5aedb1b3cd2cfa4d8f91389f14d3210 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,73 @@ +{ + "markdown.validate.ignoredLinks": [ + ".\\figures\\en-us_image_1706077646.png", + "#en-us_topic_0151920971_fd25e3f1d664b4087ae26631719990a71", + "#en-us_topic_0151920971_f1f9f3d086e454b9cba29a7cae96a4c54", + "#en-us_topic_0151921017_fig1880404110396", + "#en-us_topic_0151921029_t34619d964a3d41ad8694189ec383359c", + "#en-us_topic_0151921029_f289234fcdbac453796200d80e9889cd1", + "#fig26022387391", + "#table62020913417", + "#fig13492418164520", + "#li197143190587", + "#li15634560582", + "#fig77646143214", + "#fig10319114217337", + "#fig18306181103615", + "#fig6762111693811", + "#fig18351153518389", + "#fig1475845284011", + "#fig17480830144217", + "#fig12152145615438", + "#fig115949762617", + "#fig115949762618", + "#zh-cn_topic_0151920806_f6ff7658b349942ea87f4521c0256c315", + "#zh-cn_topic_0186390264_zh-cn_topic_0122145831_fig123700157297", + "#zh-cn_topic_0186390264_zh-cn_topic_0122145831_fig6", + "#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1323165793018", + "#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1237715313319", + "#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig128716531312", + "#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1590863119306", + "#table14948632047", + "#tff48b99c9bf24b84bb602c53229e2541", + "#password_complexity", + "#fig1011938131018", + "#fig1648754873314", + "#fig1133717611109", + "#fig874344811484", + "#fig153381468101", + "#fig_root_password", + "#fig1785384714917", + "#fig671014583483", + "#table84397266483", + "#table389518422611", + "#table10582103963816", + "#table2204014971491143", + "#table14200183410353", + "#table4866134925114", + "#table191911761111", + "#table1200165711314", + "#en-us_topic_0184347952_table425023335913", + "#fig17734185518269", + "#table24341012096", + "#en-us_topic_0151921012_t2dcb6d973cc249ed9ccd56729751ca6b", + "#en-us_topic_0151921012_t2523a0a9a0c54f9b849e52d1efa0160c", + "#en-us_topic_0151920917_ta7039963b0c74b909b72c22cbc9f2e28", + "#en-us_topic_0151920917_t36cd267d69244ed39ae06bb117ed8e62", + "#en-us_topic_0151920939_t9af92c282ad240ea9a79fb08d26e8181", + "#en-us_topic_0151920964_t3daaaba6a03b4c36be9668efcdb61f3b", + "#table154419352610", + "#li6236932222", + "#table780410493819", + "#table634145764320", + "#table1342946175212", + "#tff48b99c9bf24b84bb602c53229e2542", + "#table1388812373315", + "#li65701520154311", + "#table1919220557576", + "#table2819164611311", + "#table9803156161910", + "#table58847714266", + "#table201221044172117" + ] +} \ No newline at end of file diff --git a/docs/en/_toc.yaml b/docs/en/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/en/cloud/.DS_Store b/docs/en/cloud/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..51e6f471b80ef74e0dafe4f8c2ad42d0ab93923b Binary files /dev/null and b/docs/en/cloud/.DS_Store differ diff --git a/docs/en/cloud/_toc.yaml b/docs/en/cloud/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..921b2ae8c57351c9191f2af95eb58febfd3392bd --- /dev/null +++ b/docs/en/cloud/_toc.yaml @@ -0,0 +1,27 @@ +label: Cloud +sections: + - label: Container Engines + sections: + - href: ./container_engine/isula_container_engine/_toc.yaml + - href: ./container_engine/docker_engine/_toc.yaml + - label: Container Forms + sections: + - href: ./container_form/secure_container/_toc.yaml + - href: ./container_form/system_container/_toc.yaml + - label: Container Image Building + sections: + - href: ./image_builder/isula_build/_toc.yaml + - label: Cloud-Native OS + sections: + - href: ./kubeos/kubeos/_toc.yaml + - label: Cloud Base OS + sections: + - href: ./nestos/nestos/_toc.yaml + - label: Hybrid Deployment + sections: + - href: ./hybrid_deployment/rubik/_toc.yaml + - href: ./hybrid_deployment/oncn_bwm/_toc.yaml + - label: Cluster Deployment + sections: + - href: ./cluster_deployment/kubernetes/_toc.yaml + - href: ./cluster_deployment/isulad+k8s/_toc.yaml diff --git a/docs/en/cloud/cluster_deployment/isulad+k8s/_toc.yaml b/docs/en/cloud/cluster_deployment/isulad+k8s/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..08aa3837c383e943e994023202a791164b0107d5 --- /dev/null +++ b/docs/en/cloud/cluster_deployment/isulad+k8s/_toc.yaml @@ -0,0 +1,12 @@ +label: iSulad + Kubernetes Cluster Deployment Guide +isManual: true +description: Deploy a Kubernetes cluster using the iSulad container engine on openEuler +sections: + - label: Overview + href: ./overview.md + - label: iSulad + Kubernetes Environment Deployment + href: ./isulad+k8s_environment_deploy.md + - label: GitLab Deployment + href: ./gitlab_deploy.md + - label: GitLab Runner Deployment + href: ./gitlab_runner_deploy.md diff --git a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/1.view-required-images.png b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/1.view-required-images.png new file mode 100644 index 0000000000000000000000000000000000000000..74cdae5726cec83d5d74b0b8bd01694fd388e342 Binary files /dev/null and b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/1.view-required-images.png differ diff --git "a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/10.\350\207\252\345\256\232\344\271\211\351\241\271\347\233\256\345\220\215\347\247\260.jpg" "b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/10.\350\207\252\345\256\232\344\271\211\351\241\271\347\233\256\345\220\215\347\247\260.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..2062c62a6aae63e9700f6ceedf73daea0876eb44 Binary files /dev/null and "b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/10.\350\207\252\345\256\232\344\271\211\351\241\271\347\233\256\345\220\215\347\247\260.jpg" differ diff --git "a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/11.\350\256\276\347\275\256-cicd-runner.png" "b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/11.\350\256\276\347\275\256-cicd-runner.png" new file mode 100644 index 0000000000000000000000000000000000000000..838cf1b6625439e44c7d09162fb71edbe1eaf3d3 Binary files /dev/null and "b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/11.\350\256\276\347\275\256-cicd-runner.png" differ diff --git "a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/12.\350\256\260\344\270\213runner\345\234\260\345\235\200\344\270\216\344\273\244\347\211\214.jpg" "b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/12.\350\256\260\344\270\213runner\345\234\260\345\235\200\344\270\216\344\273\244\347\211\214.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..d3aaaf9ff4b66e4b536bc0afaa33c121bc6b53f6 Binary files /dev/null and "b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/12.\350\256\260\344\270\213runner\345\234\260\345\235\200\344\270\216\344\273\244\347\211\214.jpg" differ diff --git a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/13.view-cert-config.png b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/13.view-cert-config.png new file mode 100644 index 0000000000000000000000000000000000000000..8e9ce44af5a01670add1b8b2f5a7223a8bd0f35d Binary files /dev/null and b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/13.view-cert-config.png differ diff --git a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/14.import-cert.png b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/14.import-cert.png new file mode 100644 index 0000000000000000000000000000000000000000..2a1fdb24d6f5c1c9d44cbce08276289adc5c876c Binary files /dev/null and b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/14.import-cert.png differ diff --git a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/15.register-gitlab-runner.jpg b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/15.register-gitlab-runner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..896f13bdc6411b719283f30d9973973950f27a1c Binary files /dev/null and b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/15.register-gitlab-runner.jpg differ diff --git "a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/16.web\347\253\257\345\267\262\345\212\240\345\205\245_LI.jpg" "b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/16.web\347\253\257\345\267\262\345\212\240\345\205\245_LI.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..fd8ae15ef7bce7120c7ba24b6240b33dbcf610b8 Binary files /dev/null and "b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/16.web\347\253\257\345\267\262\345\212\240\345\205\245_LI.jpg" differ diff --git a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/17.png b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/17.png new file mode 100644 index 0000000000000000000000000000000000000000..86f90a67185f532b362f4710ce8f7615cf40c9e1 Binary files /dev/null and b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/17.png differ diff --git a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/18.dns-config.png b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/18.dns-config.png new file mode 100644 index 0000000000000000000000000000000000000000..46b85396db34577b67679da759b6160ee707dec5 Binary files /dev/null and b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/18.dns-config.png differ diff --git "a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/19.CICD\347\225\214\351\235\242.png" "b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/19.CICD\347\225\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..f8193e005253eb4a6bd036ec8afdf6566f9fd6d2 Binary files /dev/null and "b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/19.CICD\347\225\214\351\235\242.png" differ diff --git a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/2.calico-config.png b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/2.calico-config.png new file mode 100644 index 0000000000000000000000000000000000000000..d656f86d8ce5e110cf240a58e58b05b42aba8c15 Binary files /dev/null and b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/2.calico-config.png differ diff --git a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/20.yaml.png b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/20.yaml.png new file mode 100644 index 0000000000000000000000000000000000000000..4a609d864f0ca184d94e9108656a8652a6dad55d Binary files /dev/null and b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/20.yaml.png differ diff --git "a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/21.\346\265\201\346\260\264\347\272\277\347\212\266\346\200\201.png" "b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/21.\346\265\201\346\260\264\347\272\277\347\212\266\346\200\201.png" new file mode 100644 index 0000000000000000000000000000000000000000..fff7063f17fd203390302a6245a8ce4a16cf428e Binary files /dev/null and "b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/21.\346\265\201\346\260\264\347\272\277\347\212\266\346\200\201.png" differ diff --git a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/3.png b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/3.png new file mode 100644 index 0000000000000000000000000000000000000000..7394b5f21821ce8d352c2f935c3ea3e490dc0519 Binary files /dev/null and b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/3.png differ diff --git a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/4.gitlab-entrance.jpg b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/4.gitlab-entrance.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d3eb0d59d6dee5051470621a4969651668687789 Binary files /dev/null and b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/4.gitlab-entrance.jpg differ diff --git a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/5.view-password.jpg b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/5.view-password.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e3902815108e9e91a07c382a4aae090b7cc6fe9 Binary files /dev/null and b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/5.view-password.jpg differ diff --git a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/6.logged-in.png b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/6.logged-in.png new file mode 100644 index 0000000000000000000000000000000000000000..5f4d2c2a9a8bf337263028e859e49499155920b0 Binary files /dev/null and b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/6.logged-in.png differ diff --git a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/7.image.png b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/7.image.png new file mode 100644 index 0000000000000000000000000000000000000000..26c811ae616d2fe86e7b8b75c78ef88aff83616b Binary files /dev/null and b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/7.image.png differ diff --git "a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/8.\346\226\260\345\273\272\351\241\271\347\233\256.png" "b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/8.\346\226\260\345\273\272\351\241\271\347\233\256.png" new file mode 100644 index 0000000000000000000000000000000000000000..0c56662e6bdedcc78dea32b6e2afada466193096 Binary files /dev/null and "b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/8.\346\226\260\345\273\272\351\241\271\347\233\256.png" differ diff --git "a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/9.\345\210\233\345\273\272\347\251\272\347\231\275\351\241\271\347\233\256.png" "b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/9.\345\210\233\345\273\272\347\251\272\347\231\275\351\241\271\347\233\256.png" new file mode 100644 index 0000000000000000000000000000000000000000..117da11ee289d88b51539e027606cc9da526936a Binary files /dev/null and "b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/9.\345\210\233\345\273\272\347\251\272\347\231\275\351\241\271\347\233\256.png" differ diff --git a/docs/en/cloud/cluster_deployment/isulad+k8s/figures/public_sys-resources/icon-note.gif b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/cloud/cluster_deployment/isulad+k8s/figures/public_sys-resources/icon-note.gif differ diff --git a/docs/en/cloud/cluster_deployment/isulad+k8s/gitlab_deploy.md b/docs/en/cloud/cluster_deployment/isulad+k8s/gitlab_deploy.md new file mode 100644 index 0000000000000000000000000000000000000000..ea24d8006a11aabc4074d84867a6da7f2fea4519 --- /dev/null +++ b/docs/en/cloud/cluster_deployment/isulad+k8s/gitlab_deploy.md @@ -0,0 +1,311 @@ +# GitLab Deployment + +## Description + +GitLab deployment is required in Scenario 1 (openEuler native deployment CI/CD based on GitLab CI/CD). In Scenario 2 (openEuler native development cluster managed by GitLab CI/CD), skip this step. + +## Preparing the Server + +Prepare a machine running openEuler 20.03 LTS or later versions. + +## Starting GitLab + +Copy the required YAML files to the **/home** directory and start the related pod. +> **Note**: The YAML files related to GitLab can be obtained from the GitLab official site. + +Example YAML files are as follows. Modify them as required. + +gitlab-redis.yaml + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: redis + namespace: default + labels: + name: redis +spec: + selector: + matchLabels: + name: redis + template: + metadata: + name: redis + labels: + name: redis + spec: + containers: + - name: redis + image: 10.35.111.11:5000/redis:latest + imagePullPolicy: IfNotPresent + ports: + - name: redis + containerPort: 6379 + volumeMounts: + - mountPath: /var/lib/redis + name: data + livenessProbe: + exec: + command: + - redis-cli + - ping + initialDelaySeconds: 30 + timeoutSeconds: 5 + readinessProbe: + exec: + command: + - redis-cli + - ping + initialDelaySeconds: 5 + timeoutSeconds: 1 + volumes: + - name: data + emptyDir: {} + +--- +apiVersion: v1 +kind: Service +metadata: + name: redis + namespace: default + labels: + name: redis +spec: + ports: + - name: redis + port: 6379 + targetPort: redis + selector: + name: redis +``` + +gitlab-postgresql.yaml + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: postgresql + namespace: default + labels: + name: postgresql +spec: + selector: + matchLabels: + name: postgresql + template: + metadata: + name: postgresql + labels: + name: postgresql + spec: + containers: + - name: postgresql + image: 10.35.111.11:5000/postgres:13.6 + imagePullPolicy: IfNotPresent + env: + - name: POSTGRES_HOST_AUTH_METHOD + value: trust + - name: DB_USER + value: gitlab + - name: DB_PASS + value: passw0rd + - name: DB_NAME + value: gitlab_production + - name: DB_EXTENSION + value: pg_trgm + ports: + - name: postgres + containerPort: 5432 + volumeMounts: + - mountPath: /var/lib/postgresql + name: data + livenessProbe: + exec: + command: + - pg_isready + - -h + - localhost + - -U + - postgres + initialDelaySeconds: 30 + timeoutSeconds: 5 + readinessProbe: + exec: + command: + - pg_isready + - -h + - localhost + - -U + - postgres + initialDelaySeconds: 5 + timeoutSeconds: 1 + volumes: + - name: data + emptyDir: {} + +--- +apiVersion: v1 +kind: Service +metadata: + name: postgresql + namespace: default + labels: + name: postgresql +spec: + ports: + - name: postgres + port: 5432 + targetPort: postgres + selector: + name: postgresql +``` + +gitlab.yaml + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: gitlab + namespace: default + labels: + name: gitlab +spec: + selector: + matchLabels: + name: gitlab + template: + metadata: + name: gitlab + labels: + name: gitlab + spec: + containers: + - name: gitlab + image: 10.35.111.11:5000/yrzr/gitlab-ce-arm64v8:14.3.2-ce.0 + imagePullPolicy: IfNotPresent + env: + - name: TZ + value: Asia/Shanghai + - name: GITLAB_TIMEZONE + value: Beijing + - name: GITLAB_SECRETS_DB_KEY_BASE + value: long-and-random-alpha-numeric-string + - name: GITLAB_SECRETS_SECRET_KEY_BASE + value: long-and-random-alpha-numeric-string + - name: GITLAB_SECRETS_OTP_KEY_BASE + value: long-and-random-alpha-numeric-string + - name: GITLAB_ROOT_PASSWORD + value: admin321 + - name: GITLAB_ROOT_EMAIL + value: 517554016@qq.com + - name: GITLAB_HOST + value: git.qikqiak.com + - name: GITLAB_PORT + value: "80" + - name: GITLAB_SSH_PORT + value: "22" + - name: GITLAB_NOTIFY_ON_BROKEN_BUILDS + value: "true" + - name: GITLAB_NOTIFY_PUSHER + value: "false" + - name: GITLAB_BACKUP_SCHEDULE + value: daily + - name: GITLAB_BACKUP_TIME + value: 01:00 + - name: DB_TYPE + value: postgres + - name: DB_HOST + value: postgresql + - name: DB_PORT + value: "5432" + - name: DB_USER + value: gitlab + - name: DB_PASS + value: passw0rd + - name: DB_NAME + value: gitlab_production + - name: REDIS_HOST + value: redis + - name: REDIS_PORT + value: "6379" + ports: + - name: http + containerPort: 80 + - name: ssh + containerPort: 22 + volumeMounts: + - mountPath: /home/git/data + name: data + livenessProbe: + httpGet: + path: / + port: 80 + initialDelaySeconds: 180 + timeoutSeconds: 5 + readinessProbe: + httpGet: + path: / + port: 80 + initialDelaySeconds: 5 + timeoutSeconds: 1 + volumes: + - name: data + emptyDir: {} + +--- +apiVersion: v1 +kind: Service +metadata: + name: gitlab + namespace: default + labels: + name: gitlab +spec: + ports: + - name: http + port: 80 + targetPort: http + nodePort: 30852 + - name: ssh + port: 22 + nodePort: 32353 + targetPort: ssh + selector: + name: gitlab + type: NodePort +``` + +Start the containers. + +```shell +kubectl apply -f gitlab-redis.yaml +kubectl apply -f gitlab-postgresql.yaml +kubectl apply -f gitlab.yaml +``` + +Check whether the GitLab pod is set up successfully. + +```shell +kubectl get pod -A -owide +``` + +## Logging in to GitLab + +Log in to the GitLab Web UI. The address is the IP address and the configured port. + +![](figures/4.gitlab-entrance.jpg) +The user name is **root**. The default password can be viewed in the password file in the container. + +```shell +kubectl exec -it gitlab-lab -n default /bin/sh +cat /etc/gitlab/initial_root_password +``` + +![](figures/5.view-password.jpg) + +- After you log in, this page is displayed: + +![](figures/6.logged-in.png) diff --git a/docs/en/cloud/cluster_deployment/isulad+k8s/gitlab_runner_deploy.md b/docs/en/cloud/cluster_deployment/isulad+k8s/gitlab_runner_deploy.md new file mode 100644 index 0000000000000000000000000000000000000000..2972f750ab738cc13a39ffd2a71a15cc75dabd53 --- /dev/null +++ b/docs/en/cloud/cluster_deployment/isulad+k8s/gitlab_runner_deploy.md @@ -0,0 +1,179 @@ +# GitLab Runner Deployment and Testing + +## Images and Software + +The following table lists the images required during installation. The version numbers are for reference only. + +| Image | Version | +|------------------------------------|----------| +| gitlab/gitlab-runner | alpine-v14.4.0 | +| gitlab/gitlab-runner-helper | x86_64-54944146 | + + If the Internet is unavailable in the environment, download the required images in advance. Download the images from the Docker Hub official website. + +## Using gitlab-runner.yaml to Start the Runner Container + +In the **gitlab-runner.yaml** file, change the image name. The following is an example of the **.yaml** file. Modify the file as required. + +```bash +vim gitlab-runner.yaml +``` + +```conf +apiVersion: apps/v1 +kind: Deployment +metadata: + name: gitlab-runner + namespace: default +spec: + replicas: 1 + selector: + matchLabels: + name: gitlab-runner + template: + metadata: + labels: + name: gitlab-runner + spec: + containers: + - args: + - run + image: gitlab/gitlab-runner:alpine-v14.4.0 + imagePullPolicy: IfNotPresent + name: gitlab-runner + volumeMounts: + - mountPath: /etc/gitlab-runner + name: config + readOnly: false + - mountPath: /etc/ssl/certs + name: cacerts + readOnly: true + restartPolicy: Always + volumes: + - hostPath: + path: /etc/gitlab-runner + name: config + - hostPath: + path: /etc/ssl/key + name: cacerts + +``` + +Start the container. + +```bash +# kubectl apply -f gitlab-runner.yaml +# kubectl get pod -A -o wide +``` + +![image](figures/7.image.png) + +## Creating a Container Project That Uses User Certificates for Authentication in GitLab + +1. Click **New project**. + +2. Select **Create blank project**. + +3. Enter a name for the project. + +4. Choose **Settings** > **CI/CD** > **Runners** > **Expand**. + +5. Record the address and token for registering the Runner. + +6. Import certificate files. + + Check and generate certificate files **admin.crt**, **admin.key**, and **ca.crt** on the master node. + + - View certificate information. + + ```bash + # cat /etc/kubernetes/admin.conf + ``` + + ![view-cert-config](figures/13.view-cert-config.png) + + - Generate the encrypted **admin.crt**. + + ```bash + # echo “${client-certificate-data}” | base64 -d > admin.crt + ``` + + - Generate the encrypted **admin.key**. + + ```bash + # echo “${client-key-data}” | base64 -d > admin.key + ``` + + - Obtain the CA certificate on the manager node. + + ```bash + # cp /etc/kubernetes/pki/ca.crt ./ + ``` + +7. Import the three certificate files to the GitLab Runner container on the node where the Runner is running. + + > [!NOTE]**Note** + > + > To import the certificate files, check the node where the GitLab Runner is running, copy the certificate files to the node, and run the **isula cp** command to import the certificate files. + + ```bash + # isula cp admin.crt [Container ID]:Storage path + # isula cp admin.key [Container ID]:Storage path + # isula cp ca.crt [Container ID]:Storage path + ``` + + Note: The **isula cp** command can copy only one file at a time. + + ![import-cert](figures/14.import-cert.png) + +## Registering the GitLab Runner + +Perform registration in the GitLab Runner container. Currently, interactive registration is used. Obtain the registration information from GitLab. Choose **GitLab** > **Group runners** > **Settings** > **CI/CD** > **Runners**. + +![register-gitlab-runner](figures/15.register-gitlab-runner.jpg) + +Upload the prepared **gitlab-runner-helper** image to the private image repository in advance, go to the GitLab Runner container, and modify the configuration file. + +```bash +# cd /etc/gitlab-runner +# mkdir kubessl +# cp /home/admin.crt /etc/gitlab-runner/kubessl +# cp /home/ca.crt /etc/gitlab-runner/kubessl +# cp /home/admin.key /etc/gitlab-runner/kubessl +# vim /etc/gitlab-runner/config.toml +``` + +![](figures/17.png) + +## Adding the DNS Record of the GitLab Container to the Manager Node + +1. View the IP address of the GitLab container. + + ```bash + # kubectl get pods –Aowide + ``` + +2. Add the IP address of the GitLab container to the Kubernetes DNS configuration file. + + ```bash + # kubectl edit configmaps coredns -n kube-system + ``` + + ![dns](figures/18.dns-config.png) + +3. Restart the CoreDNS service. + + ```bash + # kubectl scale deployment coredns -n kube-system --replicas=0 + # kubectl scale deployment coredns -n kube-system --replicas=2 + ``` + +## GitLab Running Testing + +Return to the GitLab web IDE and choose **CI/CD** > **Editor** > **Create new CI/CD pipeline**. + +- Compile the YAML file as follows: + +![yaml](figures/20.yaml.png) + +- Choose **Pipelines** and view the status. diff --git a/docs/en/cloud/cluster_deployment/isulad+k8s/isulad+k8s_environment_deploy.md b/docs/en/cloud/cluster_deployment/isulad+k8s/isulad+k8s_environment_deploy.md new file mode 100644 index 0000000000000000000000000000000000000000..94080b7810d36e6534087500e3eb62d98c0d2494 --- /dev/null +++ b/docs/en/cloud/cluster_deployment/isulad+k8s/isulad+k8s_environment_deploy.md @@ -0,0 +1,406 @@ +# Kubernetes+iSulad Environment Deployment + +## Preparing Cluster Servers + +Prepare at least 3 machines running openEuler 20.03 LTS or later versions. The following table lists information about the machines. + +| Host Name | IP Address | OS | Role | Component | +|-------|-------------|------------------------|----------|-----------| +| lab1 | 197.xxx.xxx.xxx | openEuler 20.03 LTS SP4 | Control node | iSulad/Kubernetes | +| lab2 | 197.xxx.xxx.xxx | openEuler 20.03 LTS SP4 | Worker node 1 | iSulad/Kubernetes | +| lab3 | 197.xxx.xxx.xxx | openEuler 20.03 LTS SP4 | Worker node 2 | iSulad/Kubernetes | + +## Preparing Images and Software Packages + +The following table lists software packages and images used in the example. The versions are for reference only. + +| Software | Version | +|------------------------------------|----------| +| iSulad | 2.0.17-2 | +| kubernetes-client | 1.20.2-9 | +| kubernetes-kubeadm | 1.20.2-9 | +| kubernetes-kubelet | 1.20.2-9 | + +| Image | Version | +|------------------------------------|----------| +| k8s.gcr.io/kube-proxy | v1.20.2 | +| k8s.gcr.io/kube-apiserver | v1.20.2 | +| k8s.gcr.io/kube-controller-manager | v1.20.2 | +| k8s.gcr.io/kube-scheduler | v1.20.2 | +| k8s.gcr.io/etcd | 3.4.13-0 | +| k8s.gcr.io/coredns | 1.7.0 | +| k8s.gcr.io/pause | 3.2 | +| calico/node | v3.14.2 | +| calico/pod2daemon-flexvol | v3.14.2 | +| calico/cni | v3.14.2 | +| calico/kube-controllers | v3.14.2 | + +> If you perform the deployment in without an Internet connection, download the software packages, dependencies, and images in advance. + +- Download software packages: +- Download images from Docker Hub: + +## Modifying the hosts File + +1. Change the host name of the machine, for example, **lab1**. + + ```shell + hostnamectl set-hostname lab1 + sudo -i + ``` + +2. Configure host name resolution by modifying the **/etc/hosts** file on each machine. + + ```shell + vim /etc/hosts + ``` + +3. Add the following content (IP address and host name) to the **hosts** file: + + ```text + 197.xxx.xxx.xxx lab1 + 197.xxx.xxx.xxx lab2 + 197.xxx.xxx.xxx lab3 + ``` + +## Preparing the Environment + +1. Disable the firewall/ + + ```shell + systemctl stop firewalld + systemctl disable firewalld + ``` + +2. Disable SELinux. + + ```shell + setenforce 0 + ``` + +3. Disable memory swapping. + + ```shell + swapoff -a + sed -ri 's/.*swap.*/#&/' /etc/fstab + ``` + +4. Configure the network and enable forwarding. + + ```shell + $ cat > /etc/sysctl.d/kubernetes.conf <" + ], + "pod-sandbox-image": "k8s.gcr.io/pause:3.2", + "native.umask": "normal", + "network-plugin": "cni", + "cni-bin-dir": "/opt/cni/bin", + "cni-conf-dir": "/etc/cni/net.d", + "image-layer-check": false, + "use-decrypted-key": true, + "insecure-skip-verify-enforce": false, + "cri-runtimes": { + "kata": "io.containerd.kata.v2" + } +} +``` + +1. Restart the isulad service. + + ```shell + systemctl restart isulad + ``` + +### Loading the isulad Images + +1. Check the required system images. + + ```shell + kubeadm config images list + ``` + +Pay attention to the versions in the output, as shown in the figure. +![](figures/1.view-required-images.png) + +1. Pull the images using the `isula` command. + + >**Note**: The versions in the following commands are for reference only. Use the versions in the preceding output. + + ```shell + isula pull k8simage/kube-apiserver:v1.20.15 + isula pull k8smx/kube-controller-manager:v1.20.15 + isula pull k8smx/kube-scheduler:v1.20.15 + isula pull k8smx/kube-proxy:v1.20.15 + isula pull k8smx/pause:3.2 + isula pull k8smx/coredns:1.7.0 + isula pull k8smx/etcd:3.4.13-0 + ``` + +2. Modify the tags of the pulled images. + + ```shell + isula tag k8simage/kube-apiserver:v1.20.15 k8s.gcr.io/kube-apiserver:v1.20.15 + isula tag k8smx/kube-controller-manager:v1.20.15 k8s.gcr.io/kube-controller-manager:v1.20.15 + isula tag k8smx/kube-scheduler:v1.20.15 k8s.gcr.io/kube-scheduler:v1.20.15 + isula tag k8smx/kube-proxy:v1.20.15 k8s.gcr.io/kube-proxy:v1.20.15 + isula tag k8smx/pause:3.2 k8s.gcr.io/pause:3.2 + isula tag k8smx/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0 + isula tag k8smx/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4.13-0 + ``` + +3. Remove the old images. + + ```shell + isula rmi k8simage/kube-apiserver:v1.20.15 + isula rmi k8smx/kube-controller-manager:v1.20.15 + isula rmi k8smx/kube-scheduler:v1.20.15 + isula rmi k8smx/kube-proxy:v1.20.15 + isula rmi k8smx/pause:3.2 + isula rmi k8smx/coredns:1.7.0 + isula rmi k8smx/etcd:3.4.13-0 + ``` + +4. View pulled images. + + ```shell + isula images + ``` + +### Installing crictl + +```shell +yum install -y cri-tools +``` + +### Initializing the Master Node + +Initialize the master node. + +```shell +kubeadm init --kubernetes-version v1.20.2 --cri-socket=/var/run/isulad.sock --pod-network-cidr= +``` + +- `--kubernetes-version` indicates the current Kubernetes version. +- `--cri-socket` specifies the engine, that is, isulad. +- `--pod-network-cidr` specifies the IP address range of the pods. + +Enter the following commands as prompted: + +```shell +mkdir -p $HOME/.kube +sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config +sudo chown $(id -u):$(id -g) $HOME/.kube/config +``` + +After the initialization, copy the last two lines of the output and run the copied commands on the nodes to add them to the master cluster. The commands can also be generated using the following command: + +```sh +kubeadm token create --print-join-command +``` + +### Adding Nodes + +Paste the `kubeadm join` command generated on Master, add `--cri-socket=/var/run/isulad.sock` before `--discovery-token-ca-cert-hash`, and then run the command. + +```shell +kubeadm join --token bgyis4.euwkjqb7jwuenwvs --cri-socket=/var/run/isulad.sock --discovery-token-ca-cert-hash sha256:3792f02e136042e2091b245ac71c1b9cdcb97990311f9300e91e1c339e1dfcf6 +``` + +### Installing Calico Network Plugins + +1. Pull Calico images. + + Configure the Calico network plugins on the Master node and pull the required images on each node. + + ```shell + isula pull calico/node:v3.14.2 + isula pull calico/cni:v3.14.2 + isula pull calico/kube-controllers:v3.14.2 + isula pull calico/pod2daemon-flexvol:v3.14.2 + ``` + +2. Download the configuration file on Master. + + ```shell + wget https://docs.projectcalico.org/v3.14/manifests/calico.yaml + ``` + +3. Modify **calico.yaml**. + + ```yaml + # vim calico.yaml + + # Modify the following parameters. + + - name: IP_AUTODERECTION_METHOD + Value: ”can-reach=197.3.10.254” + + - name: CALICO_IPV4POOL_IPIP + Value: ”CrossSubnet” + ``` + + ![](figures/2.calico-config.png) + + - If the default CNI of the pod is Flannel, add the following content to **flannel.yaml**: + + ```yaml + --iface=enp4s0 + ``` + + ![](figures/3.png) + +4. Create a pod. + + ```shell + kubectl apply -f calico.yaml + ``` + + - If you want to delete the configuration file, run the following command: + + ```shell + kubectl delete -f calico.yaml + ``` + +5. View pod information. + + ```shell + kubectl get pod -A -o wide + ``` + +### Checking the Master Node Information + +```shell +kubectl get nodes -o wide +``` + +To reset a node, run the following command: + +```shell +kubeadm reset +``` diff --git a/docs/en/cloud/cluster_deployment/isulad+k8s/overview.md b/docs/en/cloud/cluster_deployment/isulad+k8s/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..0a063292fe9d5938c95675a5f77fd8790aba8e40 --- /dev/null +++ b/docs/en/cloud/cluster_deployment/isulad+k8s/overview.md @@ -0,0 +1,23 @@ +# iSulad + Kubernetes Cluster Deployment Guide + +This document outlines the process of deploying a Kubernetes cluster with kubeadm on the openEuler OS, configuring a Kubernetes + iSulad environment, and setting up gitlab-runner. It serves as a comprehensive guide for creating a native openEuler development environment cluster. + +The guide addresses two primary scenarios: + +**Scenario 1**: A complete walkthrough for establishing a native openEuler development CI/CD pipeline from scratch using gitlab-ci. +**Scenario 2**: Instructions for integrating an existing native openEuler development execution machine cluster into gitlab-ci. + +For scenario 1, the following steps are required: + +1. Set up the Kubernetes + iSulad environment. +2. Deploy GitLab. +3. Install and test gitlab-runner. + +For scenario 2, where a gitlab-ci platform is already available, the process involves: + +1. Configure the Kubernetes + iSulad environment. +2. Install and test gitlab-runner. + +> [!NOTE] Note +> +> All operations described in this document must be executed with root privileges. diff --git a/docs/en/cloud/cluster_deployment/kubernetes/_toc.yaml b/docs/en/cloud/cluster_deployment/kubernetes/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d797c138de298594e1ceecd4374ecaa734c5024a --- /dev/null +++ b/docs/en/cloud/cluster_deployment/kubernetes/_toc.yaml @@ -0,0 +1,33 @@ +label: Kubernetes Cluster Deployment Guide +isManual: true +description: This guide offers essential instructions for deploying a reliable and + high-performance Kubernetes cluster on openEuler +sections: + - label: Overview + href: ./overview.md + - label: Preparing VMs + href: ./preparing_vms.md + - label: Manual Cluster Deployment + href: ./deploying_a_kubernetes_cluster_manually.md + sections: + - label: Installing the Kubernetes Software Package + href: ./installing_the_kubernetes_software_package.md + - label: Preparing Certificates + href: ./preparing_certificates.md + - label: Installing etcd + href: ./installing_etcd.md + - label: Deploying Components on the Control Plane + href: ./deploying_control_plane_components.md + - label: Deploying a Node Component + href: ./deploying_a_node_component.md + - label: Automatic Cluster Deployment + href: ./eggo_automatic_deployment.md + sections: + - label: Tool Introduction + href: ./eggo_tool_introduction.md + - label: Deploying a Cluster + href: ./eggo_deploying_a_cluster.md + - label: Dismantling a Cluster + href: ./eggo_dismantling_a_cluster.md + - label: Running the Test Pod + href: ./running_the_test_pod.md diff --git a/docs/en/cloud/cluster_deployment/kubernetes/deploying_a_kubernetes_cluster_manually.md b/docs/en/cloud/cluster_deployment/kubernetes/deploying_a_kubernetes_cluster_manually.md new file mode 100644 index 0000000000000000000000000000000000000000..13902ed2d8246d3d6bcf9546e3dbe1103151934e --- /dev/null +++ b/docs/en/cloud/cluster_deployment/kubernetes/deploying_a_kubernetes_cluster_manually.md @@ -0,0 +1,18 @@ +# Deploying a Kubernetes Cluster Manually + +**Note: Manual deployment applies only to experimental and learning environments and is not intended for commercial environments.** + +This chapter describes how to deploy a Kubernetes cluster. + +## Environment + +Deploy VMs based on the VM installation section and obtain the following VM list: + +| HostName | MAC | IPv4 | +| ---------- | ----------------- | -------------------| +| k8smaster0 | 52:54:00:00:00:80 | 192.168.122.154/24 | +| k8smaster1 | 52:54:00:00:00:81 | 192.168.122.155/24 | +| k8smaster2 | 52:54:00:00:00:82 | 192.168.122.156/24 | +| k8snode1 | 52:54:00:00:00:83 | 192.168.122.157/24 | +| k8snode2 | 52:54:00:00:00:84 | 192.168.122.158/24 | +| k8snode3 | 52:54:00:00:00:85 | 192.168.122.159/24 | diff --git a/docs/en/cloud/cluster_deployment/kubernetes/deploying_a_node_component.md b/docs/en/cloud/cluster_deployment/kubernetes/deploying_a_node_component.md new file mode 100644 index 0000000000000000000000000000000000000000..f5a732324f085f8432a07171a80bf7e18927e62d --- /dev/null +++ b/docs/en/cloud/cluster_deployment/kubernetes/deploying_a_node_component.md @@ -0,0 +1,378 @@ +# Deploying a Node Component + +This section uses the `k8snode1` node as an example. + +## Environment Preparation + +```bash +# A proxy needs to be configured for the intranet. +$ dnf install -y docker iSulad conntrack-tools socat containernetworking-plugins +$ swapoff -a +$ mkdir -p /etc/kubernetes/pki/ +$ mkdir -p /etc/cni/net.d +$ mkdir -p /opt/cni +# Delete the default kubeconfig file. +$ rm /etc/kubernetes/kubelet.kubeconfig + +## Use iSulad as the runtime ########. +# Configure the iSulad. +cat /etc/isulad/daemon.json +{ + "registry-mirrors": [ + "docker.io" + ], + "insecure-registries": [ + "k8s.gcr.io", + "quay.io" + ], + "pod-sandbox-image": "k8s.gcr.io/pause:3.2",# pause type + "network-plugin": "cni", # If this parameter is left blank, the CNI network plug-in is disabled. In this case, the following two paths become invalid. After the plug-in is installed, restart iSulad. + "cni-bin-dir": "/usr/libexec/cni/", + "cni-conf-dir": "/etc/cni/net.d", +} + +# Add the proxy to the iSulad environment variable and download the image. +cat /usr/lib/systemd/system/isulad.service +[Service] +Type=notify +Environment="HTTP_PROXY=http://name:password@proxy:8080" +Environment="HTTPS_PROXY=http://name:password@proxy:8080" + +# Restart the iSulad and set it to start automatically upon power-on. +systemctl daemon-reload +systemctl restart isulad + +## If Docker is used as the runtime, run the following command: ######## +$ dnf install -y docker +# If a proxy environment is required, configure a proxy for Docker, add the configuration file http-proxy.conf, and edit the following content. Replace name, password, and proxy-addr with the actual values. +$ cat /etc/systemd/system/docker.service.d/http-proxy.conf +[Service] +Environment="HTTP_PROXY=http://name:password@proxy-addr:8080" +$ systemctl daemon-reload +$ systemctl restart docker +``` + +## Creating kubeconfig Configuration Files + +Perform the following operations on each node to create a configuration file: + +```bash +$ kubectl config set-cluster openeuler-k8s \ + --certificate-authority=/etc/kubernetes/pki/ca.pem \ + --embed-certs=true \ + --server=https://192.168.122.154:6443 \ + --kubeconfig=k8snode1.kubeconfig + +$ kubectl config set-credentials system:node:k8snode1 \ + --client-certificate=/etc/kubernetes/pki/k8snode1.pem \ + --client-key=/etc/kubernetes/pki/k8snode1-key.pem \ + --embed-certs=true \ + --kubeconfig=k8snode1.kubeconfig + +$ kubectl config set-context default \ + --cluster=openeuler-k8s \ + --user=system:node:k8snode1 \ + --kubeconfig=k8snode1.kubeconfig + +$ kubectl config use-context default --kubeconfig=k8snode1.kubeconfig +``` + +**Note: Change k8snode1 to the corresponding node name.** + +## Copying the Certificate + +Similar to the control plane, all certificates, keys, and related configurations are stored in the `/etc/kubernetes/pki/` directory. + +```bash +$ ls /etc/kubernetes/pki/ +ca.pem k8snode1.kubeconfig kubelet_config.yaml kube-proxy-key.pem kube-proxy.pem +k8snode1-key.pem k8snode1.pem kube_proxy_config.yaml kube-proxy.kubeconfig +``` + +## CNI Network Configuration + +containernetworking-plugins is used as the CNI plug-in used by kubelet. In the future, plug-ins such as calico and flannel can be introduced to enhance the network capability of the cluster. + +```bash +# Bridge Network Configuration +$ cat /etc/cni/net.d/10-bridge.conf +{ + "cniVersion": "0.3.1", + "name": "bridge", + "type": "bridge", + "bridge": "cnio0", + "isGateway": true, + "ipMasq": true, + "ipam": { + "type": "host-local", + "subnet": "10.244.0.0/16", + "gateway": "10.244.0.1" + }, + "dns": { + "nameservers": [ + "10.244.0.1" + ] + } +} + +# Loopback Network Configuration +$ cat /etc/cni/net.d/99-loopback.conf +{ + "cniVersion": "0.3.1", + "name": "lo", + "type": "loopback" +} +``` + +## Deploying the kubelet Service + +### Configuration File on Which Kubelet Depends + +```bash +$ cat /etc/kubernetes/pki/kubelet_config.yaml +kind: KubeletConfiguration +apiVersion: kubelet.config.k8s.io/v1beta1 +authentication: + anonymous: + enabled: false + webhook: + enabled: true + x509: + clientCAFile: /etc/kubernetes/pki/ca.pem +authorization: + mode: Webhook +clusterDNS: +- 10.32.0.10 +clusterDomain: cluster.local +runtimeRequestTimeout: "15m" +tlsCertFile: "/etc/kubernetes/pki/k8snode1.pem" +tlsPrivateKeyFile: "/etc/kubernetes/pki/k8snode1-key.pem" +``` + +**Note: The IP address of the cluster DNS is 10.32.0.10, which must be the same as the value of service-cluster-ip-range.** + +### Compiling the systemd Configuration File + +```bash +$ cat /usr/lib/systemd/system/kubelet.service +[Unit] +Description=kubelet: The Kubernetes Node Agent +Documentation=https://kubernetes.io/docs/ +Wants=network-online.target +After=network-online.target + +[Service] +ExecStart=/usr/bin/kubelet \ + --config=/etc/kubernetes/pki/kubelet_config.yaml \ + --network-plugin=cni \ + --pod-infra-container-image=k8s.gcr.io/pause:3.2 \ + --kubeconfig=/etc/kubernetes/pki/k8snode1.kubeconfig \ + --register-node=true \ + --hostname-override=k8snode1 \ + --cni-bin-dir="/usr/libexec/cni/" \ + --v=2 + +Restart=always +StartLimitInterval=0 +RestartSec=10 + +[Install] +WantedBy=multi-user.target +``` + +**Note: If iSulad is used as the runtime, add the following configuration:** + +```bash +--container-runtime=remote \ +--container-runtime-endpoint=unix:///var/run/isulad.sock \ +``` + +## Deploying kube-proxy + +### Configuration File on Which kube-proxy Depends + +```bash +cat /etc/kubernetes/pki/kube_proxy_config.yaml +kind: KubeProxyConfiguration +apiVersion: kubeproxy.config.k8s.io/v1alpha1 +clientConnection: + kubeconfig: /etc/kubernetes/pki/kube-proxy.kubeconfig +clusterCIDR: 10.244.0.0/16 +mode: "iptables" +``` + +### Compiling the systemd Configuration File + +```bash +$ cat /usr/lib/systemd/system/kube-proxy.service +[Unit] +Description=Kubernetes Kube-Proxy Server +Documentation=https://kubernetes.io/docs/reference/generated/kube-proxy/ +After=network.target + +[Service] +EnvironmentFile=-/etc/kubernetes/config +EnvironmentFile=-/etc/kubernetes/proxy +ExecStart=/usr/bin/kube-proxy \ + $KUBE_LOGTOSTDERR \ + $KUBE_LOG_LEVEL \ + --config=/etc/kubernetes/pki/kube_proxy_config.yaml \ + --hostname-override=k8snode1 \ + $KUBE_PROXY_ARGS +Restart=on-failure +LimitNOFILE=65536 + +[Install] +WantedBy=multi-user.target +``` + +## Starting a Component Service + +```bash +systemctl enable kubelet kube-proxy +systemctl start kubelet kube-proxy +``` + +Deploy other nodes in sequence. + +## Verifying the Cluster Status + +Wait for several minutes and run the following command to check the node status: + +```bash +$ kubectl get nodes --kubeconfig /etc/kubernetes/pki/admin.kubeconfig +NAME STATUS ROLES AGE VERSION +k8snode1 Ready 17h v1.20.2 +k8snode2 Ready 19m v1.20.2 +k8snode3 Ready 12m v1.20.2 +``` + +## Deploying coredns + +coredns can be deployed on a node or master node. In this document, coredns is deployed on the `k8snode1` node. + +### Compiling the coredns Configuration File + +```bash +$ cat /etc/kubernetes/pki/dns/Corefile +.:53 { + errors + health { + lameduck 5s + } + ready + kubernetes cluster.local in-addr.arpa ip6.arpa { + pods insecure + endpoint https://192.168.122.154:6443 + tls /etc/kubernetes/pki/ca.pem /etc/kubernetes/pki/admin-key.pem /etc/kubernetes/pki/admin.pem + kubeconfig /etc/kubernetes/pki/admin.kubeconfig default + fallthrough in-addr.arpa ip6.arpa + } + prometheus :9153 + forward . /etc/resolv.conf { + max_concurrent 1000 + } + cache 30 + loop + reload + loadbalance +} +``` + +Note: + +- Listen to port 53. +- Configure the Kubernetes plug-in, including the certificate and the URL of kube api. + +### Preparing the service File of systemd + +```bash +cat /usr/lib/systemd/system/coredns.service +[Unit] +Description=Kubernetes Core DNS server +Documentation=https://github.com/coredns/coredns +After=network.target + +[Service] +ExecStart=bash -c "KUBE_DNS_SERVICE_HOST=10.32.0.10 coredns -conf /etc/kubernetes/pki/dns/Corefile" + +Restart=on-failure +LimitNOFILE=65536 + +[Install] +WantedBy=multi-user.target +``` + +### Starting the Service + +```bash +systemctl enable coredns +systemctl start coredns +``` + +### Creating the Service Object of coredns + +```bash +$ cat coredns_server.yaml +apiVersion: v1 +kind: Service +metadata: + name: kube-dns + namespace: kube-system + annotations: + prometheus.io/port: "9153" + prometheus.io/scrape: "true" + labels: + k8s-app: kube-dns + kubernetes.io/cluster-service: "true" + kubernetes.io/name: "CoreDNS" +spec: + clusterIP: 10.32.0.10 + ports: + - name: dns + port: 53 + protocol: UDP + - name: dns-tcp + port: 53 + protocol: TCP + - name: metrics + port: 9153 + protocol: TCP +``` + +### Creating the Endpoint Object of coredns + +```bash +$ cat coredns_ep.yaml +apiVersion: v1 +kind: Endpoints +metadata: + name: kube-dns + namespace: kube-system +subsets: + - addresses: + - ip: 192.168.122.157 + ports: + - name: dns-tcp + port: 53 + protocol: TCP + - name: dns + port: 53 + protocol: UDP + - name: metrics + port: 9153 + protocol: TCP +``` + +### Confirming the coredns Service + +```bash +# View the service object. +$ kubectl get service -n kube-system kube-dns +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +kube-dns ClusterIP 10.32.0.10 53/UDP,53/TCP,9153/TCP 51m +# View the endpoint object. +$ kubectl get endpoints -n kube-system kube-dns +NAME ENDPOINTS AGE +kube-dns 192.168.122.157:53,192.168.122.157:53,192.168.122.157:9153 52m +``` diff --git a/docs/en/cloud/cluster_deployment/kubernetes/deploying_control_plane_components.md b/docs/en/cloud/cluster_deployment/kubernetes/deploying_control_plane_components.md new file mode 100644 index 0000000000000000000000000000000000000000..a9b9bb2faff7c208fe6fb3fb1f02616d5c2f7f18 --- /dev/null +++ b/docs/en/cloud/cluster_deployment/kubernetes/deploying_control_plane_components.md @@ -0,0 +1,357 @@ +# Deploying Components on the Control Plane + +## Preparing the kubeconfig File for All Components + +### kube-proxy + +```bash +kubectl config set-cluster openeuler-k8s --certificate-authority=/etc/kubernetes/pki/ca.pem --embed-certs=true --server=https://192.168.122.154:6443 --kubeconfig=kube-proxy.kubeconfig +kubectl config set-credentials system:kube-proxy --client-certificate=/etc/kubernetes/pki/kube-proxy.pem --client-key=/etc/kubernetes/pki/kube-proxy-key.pem --embed-certs=true --kubeconfig=kube-proxy.kubeconfig +kubectl config set-context default --cluster=openeuler-k8s --user=system:kube-proxy --kubeconfig=kube-proxy.kubeconfig +kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig +``` + +### kube-controller-manager + +```bash +kubectl config set-cluster openeuler-k8s --certificate-authority=/etc/kubernetes/pki/ca.pem --embed-certs=true --server=https://127.0.0.1:6443 --kubeconfig=kube-controller-manager.kubeconfig +kubectl config set-credentials system:kube-controller-manager --client-certificate=/etc/kubernetes/pki/kube-controller-manager.pem --client-key=/etc/kubernetes/pki/kube-controller-manager-key.pem --embed-certs=true --kubeconfig=kube-controller-manager.kubeconfig +kubectl config set-context default --cluster=openeuler-k8s --user=system:kube-controller-manager --kubeconfig=kube-controller-manager.kubeconfig +kubectl config use-context default --kubeconfig=kube-controller-manager.kubeconfig +``` + +### kube-scheduler + +```bash +kubectl config set-cluster openeuler-k8s --certificate-authority=/etc/kubernetes/pki/ca.pem --embed-certs=true --server=https://127.0.0.1:6443 --kubeconfig=kube-scheduler.kubeconfig +kubectl config set-credentials system:kube-scheduler --client-certificate=/etc/kubernetes/pki/kube-scheduler.pem --client-key=/etc/kubernetes/pki/kube-scheduler-key.pem --embed-certs=true --kubeconfig=kube-scheduler.kubeconfig +kubectl config set-context default --cluster=openeuler-k8s --user=system:kube-scheduler --kubeconfig=kube-scheduler.kubeconfig +kubectl config use-context default --kubeconfig=kube-scheduler.kubeconfig +``` + +### admin + +```bash +kubectl config set-cluster openeuler-k8s --certificate-authority=/etc/kubernetes/pki/ca.pem --embed-certs=true --server=https://127.0.0.1:6443 --kubeconfig=admin.kubeconfig +kubectl config set-credentials admin --client-certificate=/etc/kubernetes/pki/admin.pem --client-key=/etc/kubernetes/pki/admin-key.pem --embed-certs=true --kubeconfig=admin.kubeconfig +kubectl config set-context default --cluster=openeuler-k8s --user=admin --kubeconfig=admin.kubeconfig +kubectl config use-context default --kubeconfig=admin.kubeconfig +``` + +### Obtaining the kubeconfig Configuration File + +```bash +admin.kubeconfig kube-proxy.kubeconfig kube-controller-manager.kubeconfig kube-scheduler.kubeconfig +``` + +## Configuration for Generating the Key Provider + +When api-server is started, a key pair `--encryption-provider-config=/etc/kubernetes/pki/encryption-config.yaml` needs to be provided. In this document, a key pair `--encryption-provider-config=/etc/kubernetes/pki/encryption-config.yaml` is generated by using urandom: + +```bash +$ cat generate.bash +#!/bin/bash + +ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64) + +cat > encryption-config.yaml < [!NOTE]**NOTE:** +> +> - When a cluster is deleted, all data in the cluster is deleted and cannot be restored. Exercise caution when performing this operation. +> - Currently, dismantling a cluster does not delete the containers and the container images. However, if the Kubernetes cluster is configured to install a container engine during the deployment, the container engine will be deleted. As a result, the containers may run abnormally. +> - Some error information may be displayed when dismantling the cluster. Generally, this is caused by the error results returned during the delete operations. The cluster can still be properly dismantled. +> + +You can use the command line to delete the entire cluster. For example, run the following command to delete the k8s-cluster: + +```shell +eggo -d cleanup --id k8s-cluster +``` diff --git a/docs/en/cloud/cluster_deployment/kubernetes/eggo_tool_introduction.md b/docs/en/cloud/cluster_deployment/kubernetes/eggo_tool_introduction.md new file mode 100644 index 0000000000000000000000000000000000000000..7240d45c1931ff018c06d8519d889993e3796d83 --- /dev/null +++ b/docs/en/cloud/cluster_deployment/kubernetes/eggo_tool_introduction.md @@ -0,0 +1,431 @@ +# Tool Introduction + +This chapter describes the information related to the automatic deployment tool. You are advised to read this chapter before deployment. + +## Deployment Modes + +The automatic Kubernetes cluster deployment tool provided by openEuler supports one-click deployment using the CLI. The tool provides the following deployment modes: + +- Offline deployment: Prepare all required RPM packages, binary files, plugins, and container images on the local host, pack the packages into a tar.gz file in a specified format, and compile the corresponding YAML configuration file. Then, you can run commands to deploy the cluster in one-click. This deployment mode can be used when the VM cannot access the external network. +- Online deployment: Compile the YAML configuration file. The required RPM packages, binary files, plugins, and container images are automatically downloaded from the Internet during installation and deployment. In this mode, the VM must be able to access the software sources and the image repository on which the cluster depends, for example, Docker Hub. + +## Configurations + +When you use the automatic Kubernetes cluster deployment tool, use the YAML configuration file to describe the cluster deployment information. This section describes the configuration items and provides configuration examples. + +### Configuration Items + +- cluster-id: Cluster name, which must comply with the naming rules for the DNS names. Example: k8s-cluster + +- username: User name used to log in to the hosts using SSH where the Kubernetes cluster is to be deployed. The user name must be identical on all hosts. + +- private-key-path:The path of the key for password-free SSH login. You only need to configure either private-key-path or password. If both are configured, private-key-path is used preferentially. + +- masters: The master node list. It is recommended that each master node is also set as a worker node. Each master node contains the following sub-items. Each master node must be configured with a group of sub-items: + - name: The name of the master node, which is the node name displayed to the Kubernetes cluster. + - ip: The IP address of the master node. + - port: The port for SSH login of the node. The default value is 22. + - arch: CPU architecture of the master node. For example, the value for x86_64 CPUs is amd64. + +- workers: The list of the worker nodes. Each worker node contains the following sub-items. Each worker node must be configured with a group of sub-items: + - name: The name of the worker node, which is the node name displayed to the Kubernetes cluster. + - ip: The IP address of the master node. + - port: The port for SSH login of the node. The default value is 22. + - arch: CPU architecture of the worker node. For example, the value for x86_64 CPUs is amd64. + +- etcds: The list of etcd nodes. If this parameter is left empty, one etcd node is deployed for each master node. Otherwise, only the configured etcd node is deployed. Each etcd node contains the following sub-items. Each etcd node must be configured with a group of sub-items: + - name: The name of the etcd node, which is the node name displayed to the Kubernetes cluster. + - ip: The IP address of the etcd node. + - port: The port for SSH login. + - arch: CPU architecture of the etcd node. For example, the value for x86_64 CPUs is amd64. + +- loadbalance: The loadbalance node list. Each loadbalance node contains the following sub-items. Each loadbalance node must be configured with a group of sub-items: + - name: The name of the loadbalance node, which is the node name displayed to the Kubernetes cluster. + - ip: The IP address of the loadbalance node. + - port: The port for SSH login. + - arch: CPU architecture of the loadbalance node. For example, the value for x86_64 CPUs is amd64. + - bind-port: The listening port of the load balancing service. + +- external-ca: Whether to use an external CA certificate. If yes, set this parameter to true. Otherwise, set this parameter to false. + +- external-ca-path: The path of the external CA certificate file. This parameter takes affect only when external-ca is set to true. + +- service: service information created by Kubernetes. The service configuration item contains the following sub-items: + - cidr: The IP address segment of the service created by Kubernetes. + - dnsaddr: DNS address of the service created by Kubernetes + - gateway: The gateway address of the service created by Kubernetes. + - dns: The configuration item of the CoreDNS created by Kubernetes. The dns configuration item contains the following sub-items: + - corednstype: The deployment type of the CoreDNS created by Kubernetes. The value can be pod or binary. + - imageversion: The CoreDNS image version of the pod deployment type. + - replicas: The number of CoreDNS replicas of the pod deployment type. + +- network: The network configuration of the Kubernetes cluster. The network configuration item contains the following sub-items: + - podcidr: IP address segment of the Kubernetes cluster network. + - plugin: The network plugin deployed in the Kubernetes cluster + - plugin-args: The configuration file path of the network plugin of the Kubernetes cluster network. Example: {"NetworkYamlPath": "/etc/kubernetes/addons/calico.yaml"} + +- apiserver-endpoint: The IP address or domain name of the APIServer service that can be accessed by external systems. If loadbalance is configured, set this parameter to the IP address of the loadbalance node. Otherwise, set this parameter to the IP address of the first master node. + +- apiserver-cert-sans: The IP addresses and domain names that need to be configured in the APIServer certificate. This configuration item contains the following sub-items: + - dnsnames: The array list of the domain names that need to be configured in the APIServer certificate. + - ips: The array list of IP addresses that need to be configured in the APIServer certificate. + +- apiserver-timeout: APIServer response timeout interval. + +- etcd-token: The etcd cluster name. + +- dns-vip: The virtual IP address of the DNS. + +- dns-domain: The DNS domain name suffix. + +- pause-image: The complete image name of the pause container. + +- network-plugin: The type of the network plugin. This parameter can only be set to cni. If this item is not configured, the default Kubernetes network is used. + +- cni-bin-dir: network plugin address. Use commas (,) to separate multiple addresses. For example: /usr/libexec/cni,/opt/cni/bin. + +- runtime: The type of the container runtime. Currently, docker and iSulad are supported. + +- runtime-endpoint: The endpoint of the container runtime. This parameter is optional when runtime is set to docker. + +- registry-mirrors: The mirror site address of the image repository used for downloading container images. + +- insecure-registries: The address of the image repository used for downloading container images through HTTP. + +- config-extra-args: The extra parameters for starting services of each component (such as kube-apiserver and etcd). This configuration item contains the following sub-items: + - name: The component name. The value can be etcd, kube-apiserver, kube-controller-manager, kube-scheduler, kube-proxy or kubelet. + + - extra-args: The extended parameters of the component. The format is key: value. Note that the component parameter corresponding to key must be prefixed with a hyphen (-) or two hyphens (--). + + - open-ports: Configure the ports that need to be enabled additionally. The ports required by Kubernetes do not need to be configured. Other plugin ports need to be configured additionally. + - worker | master | etcd | loadbalance: The type of the node where the ports are enabled. Each configuration item contains one or more port and protocol sub-items. + - port: The port address. + - protocol: The port type. The value can be tcp or udp. + + - install: Configure the detailed information about the installation packages or binary files to be installed on each type of nodes. Note that the corresponding files must be packaged in a tar.gz installation package. The following describes the full configuration. Select the configuration items as needed. + - package-source: The detailed information about the installation package. + - type: The compression type of the installation package. Currently, only tar.gz installation packages are supported. + - dstpath: The path where the installation package is to be decompressed on the peer host. The path must be valid absolute path. + - srcpath: The path for storing the installation packages of different architectures. The architecture must correspond to the host architecture. The path must be a valid absolute path. + - arm64: The path of the installation package of the ARM64 architecture. This parameter is required if any ARM64 node is included in the configuration. + - amd64: The path of the installation package of the AMD64 architecture. This parameter is required if any x86_64 node is included in the configuration. + + > [!NOTE]**NOTE**: + > + > - In the install configuration item, the sub-items of etcd, kubernetes-master, kubernetes-worker, network, loadbalance, container, image, and dns are the same, that is, name, type, dst, schedule, and TimeOut. dst, schedule, and TimeOut are optional. You can determine whether to configure them based on the files to be installed. The following uses the etcd and kubernetes-master nodes as an example. + + - etcd: The list of packages or binary files to be installed on etcd nodes. + - name: The names of the software packages or binary files to be installed. If the software package is an installation package, enter only the name and do not specify the version. During the installation, `$name*` is used for identification. Example: etcd. If there are multiple software packages, use commas (,) to separate them. + - type: The type of the configuration item. The value can be pkg, repo, bin, file, dir, image, yaml, or shell. If type is set to repo, configure the repo source on the corresponding node. + - dst: The path of the destination folder. This parameter is required when type is set to bin, file, or dir. It indicates the directory where a file or folder is stored. To prevent users from incorrectly configuring a path and deleting important files during cleanup, this parameter must be set to a path in the whitelist. For details, see "Whitelist Description." + - kubernetes-master: The list of packages or binary files to be installed on the Kubernetes master nodes. + - kubernetes-worker: The list of packages or binary files to be installed on the Kubernetes worker nodes. + - network: The list of packages or binary files to be installed for the network. + - loadbalance: The list of packages or binary files to be installed on the loadbalance nodes. + - container: The list of packages or binary files to be installed for the containers. + - image: The tar package of the container image. + - dns: Kubernetes CoreDNS installation package. If corednstype is set to pod, this parameter is not required. + - addition: The list of additional installation packages or binary files. + - master: The following configurations will be installed on all master nodes. + - name: The name of the software package or binary file to be installed. + - type: The type of the configuration item. The value can be pkg, repo, bin, file, dir, image, yaml, or shell. If type is set to repo, configure the repo source on the corresponding node. + - schedule: Valid only when type is set to shell. This parameter indicates when the user wants to execute the script. The value can be prejoin (before the node is added), postjoin (after the node is added), precleanup (before the node is removed), or postcleanup (after the node is removed). + - TimeOut: The script execution timeout interval. If the execution times out, the process is forcibly stopped. The default value is 30s. + - worker: The configurations will be installed on all worker nodes. The configuration format is the same as that of master under addition. + +### Whitelist Description + +The value of dst under install must match the whitelist rules. Set it to a path in the whitelist or a subdirectory of the path. The current whitelist is as follows: + +- /usr/bin +- /usr/local/bin +- /opt/cni/bin +- /usr/libexec/cni +- /etc/kubernetes +- /usr/lib/systemd/system +- /etc/systemd/system +- /tmp + +### Configuration Example + +The following is an example of the YAML file configuration. As shown in the example, nodes of different types can be deployed on a same host, but the configurations of these nodes must be the same. For example, a master node and a worker node are deployed on test0. + +```yaml +cluster-id: k8s-cluster +username: root +private-key-path: /root/.ssh/private.key +masters: +- name: test0 + ip: 192.168.0.1 + port: 22 + arch: arm64 +workers: +- name: test0 + ip: 192.168.0.1 + port: 22 + arch: arm64 +- name: test1 + ip: 192.168.0.3 + port: 22 + arch: arm64 +etcds: +- name: etcd-0 + ip: 192.168.0.4 + port: 22 + arch: amd64 +loadbalance: + name: k8s-loadbalance + ip: 192.168.0.5 + port: 22 + arch: amd64 + bind-port: 8443 +external-ca: false +external-ca-path: /opt/externalca +service: + cidr: 10.32.0.0/16 + dnsaddr: 10.32.0.10 + gateway: 10.32.0.1 + dns: + corednstype: pod + imageversion: 1.8.4 + replicas: 2 +network: + podcidr: 10.244.0.0/16 + plugin: calico + plugin-args: {"NetworkYamlPath": "/etc/kubernetes/addons/calico.yaml"} +apiserver-endpoint: 192.168.122.222:6443 +apiserver-cert-sans: + dnsnames: [] + ips: [] +apiserver-timeout: 120s +etcd-external: false +etcd-token: etcd-cluster +dns-vip: 10.32.0.10 +dns-domain: cluster.local +pause-image: k8s.gcr.io/pause:3.2 +network-plugin: cni +cni-bin-dir: /usr/libexec/cni,/opt/cni/bin +runtime: docker +runtime-endpoint: unix:///var/run/docker.sock +registry-mirrors: [] +insecure-registries: [] +config-extra-args: + - name: kubelet + extra-args: + "--cgroup-driver": systemd +open-ports: + worker: + - port: 111 + protocol: tcp + - port: 179 + protocol: tcp +install: + package-source: + type: tar.gz + dstpath: "" + srcpath: + arm64: /root/rpms/packages-arm64.tar.gz + amd64: /root/rpms/packages-x86.tar.gz + etcd: + - name: etcd + type: pkg + dst: "" + kubernetes-master: + - name: kubernetes-client,kubernetes-master + type: pkg + kubernetes-worker: + - name: docker-engine,kubernetes-client,kubernetes-node,kubernetes-kubelet + type: pkg + dst: "" + - name: conntrack-tools,socat + type: pkg + dst: "" + network: + - name: containernetworking-plugins + type: pkg + dst: "" + loadbalance: + - name: gd,gperftools-libs,libunwind,libwebp,libxslt + type: pkg + dst: "" + - name: nginx,nginx-all-modules,nginx-filesystem,nginx-mod-http-image-filter,nginx-mod-http-perl,nginx-mod-http-xslt-filter,nginx-mod-mail,nginx-mod-stream + type: pkg + dst: "" + container: + - name: emacs-filesystem,gflags,gpm-libs,re2,rsync,vim-filesystem,vim-common,vim-enhanced,zlib-devel + type: pkg + dst: "" + - name: libwebsockets,protobuf,protobuf-devel,grpc,libcgroup + type: pkg + dst: "" + - name: yajl,lxc,lxc-libs,lcr,clibcni,iSulad + type: pkg + dst: "" + image: + - name: pause.tar + type: image + dst: "" + dns: + - name: coredns + type: pkg + dst: "" + addition: + master: + - name: prejoin.sh + type: shell + schedule: "prejoin" + TimeOut: "30s" + - name: calico.yaml + type: yaml + dst: "" + worker: + - name: docker.service + type: file + dst: /usr/lib/systemd/system/ + - name: postjoin.sh + type: shell + schedule: "postjoin" +``` + +### Installation Package Structure + +For offline deployment, you need to prepare the Kubernetes software package and the related offline installation packages, and store the offline installation packages in a specific directory structure. The directory structure is as follows: + +```shell +package +├── bin +├── dir +├── file +├── image +├── pkg +└── packages_notes.md +``` + +The preceding directories are described as follows: + +- The directory structure of the offline deployment package corresponds to the package types in the cluster configuration file config. The package types include pkg, repo, bin, file, dir, image, yaml and shell. + +- The bin directory stores binary files, corresponding to the bin package type. + +- The dir directory stores the directory that needs to be copied to the target host. You need to configure the dst destination path, corresponding to the dir package type. + +- The file directory stores three types of files: file, yaml, and shell. The file type indicates the files to be copied to the target host, and requires the dst destination path to be configured. The yaml type indicates the user-defined YAML files, which will be applied after the cluster is deployed. The shell type indicates the scripts to be executed, and requires the schedule execution time to be configured. The execution time includes prejoin (before the node is added), postjoin (after the node is added), precleanup (before the node is removed), and postcleanup (after the node is removed). + +- The image directory stores the container images to be imported. The container images must be in a tar package format that is compatible with Docker (for example, images exported by Docker or isula-build). + +- The pkg directory stores the rpm/deb packages to be installed, corresponding to the pkg package type. You are advised to use binary files to facilitate cross-release deployment. + +### Command Reference + +To utilize the cluster deployment tool provided by openEuler, use the eggo command to deploy the cluster. + +#### Deploying the Kubernetes Cluster + +Run the following command to deploy a Kubernetes cluster using the specified YAML configuration: + +**eggo deploy** \[ **-d** ] **-f** *deploy.yaml* + +| Parameter| Mandatory (Yes/No)| Description | +| ------------- | -------- | --------------------------------- | +| --debug \| -d | No| Displays the debugging information.| +| --file \| -f | Yes| Specifies the path of the YAML file for the Kubernetes cluster deployment.| + +#### Adding a Single Node + +Run the following command to add a specified single node to the Kubernetes cluster: + +**eggo** **join** \[ **-d** ] **--id** *k8s-cluster* \[ **--type** *master,worker* ] **--arch** *arm64* **--port** *22* \[ **--name** *master1*] *IP* + +| Parameter| Mandatory (Yes/No) | Description| +| ------------- | -------- | ------------------------------------------------------------ | +| --debug \| -d | No| Displays the debugging information.| +| --id | Yes| Specifies the name of the Kubernetes cluster where the node is to be added.| +| --type \| -t | No| Specifies the type of the node to be added. The value can be master or worker. Use commas (,) to separate multiple types. The default value is worker.| +| --arch \| -a | Yes| Specifies the CPU architecture of the node to be added.| +| --port \| -p | Yes| Specifies the port number for SSH login of the node to be added.| +| --name \| -n | No| Specifies the name of the node to be added.| +| *IP* | Yes| Actual IP address of the node to be added.| + +#### Adding Multiple Nodes + +Run the following command to add specified multiple nodes to the Kubernetes cluster: + +**eggo** **join** \[ **-d** ] **--id** *k8s-cluster* **-f** *nodes.yaml* + +| Parameter| Mandatory (Yes/No) | Description | +| ------------- | -------- | -------------------------------- | +| --debug \| -d | No| Displays the debugging information.| +| --id | Yes| Specifies the name of the Kubernetes cluster where the nodes are to be added.| +| --file \| -f | Yes| Specifies the path of the YAML configuration file for adding the nodes.| + +#### Deleting Nodes + +Run the following command to delete one or more nodes from the Kubernetes cluster: + +**eggo delete** \[ **-d** ] **--id** *k8s-cluster* *node* \[*node...*] + +| Parameter| Mandatory (Yes/No) | Description | +| ------------- | -------- | -------------------------------------------- | +| --debug \| -d | No| Displays the debugging information.| +| --id | Yes| Specifies the name of the cluster where the one or more nodes to be deleted are located.| +| *node* | Yes| Specifies the IP addresses or names of the one or more nodes to be deleted.| + +#### Deleting the Cluster + +Run the following command to delete the entire Kubernetes cluster: + +**eggo cleanup** \[ **-d** ] **--id** *k8s-cluster* \[ **-f** *deploy.yaml* ] + +| Parameter| Mandatory (Yes/No) | Description| +| ------------- | -------- | ------------------------------------------------------------ | +| --debug \| -d | No| Displays the debugging information.| +| --id | Yes| Specifies the name of the Kubernetes cluster to be deleted.| +| --file \| -f | No| Specifies the path of the YAML file for the Kubernetes cluster deletion. If this parameter is not specified, the cluster configuration cached during cluster deployment is used by default. In normal cases, you are advised not to set this parameter. Set this parameter only when an exception occurs.| + +> [!NOTE]**NOTE**: +> +> - The cluster configuration cached during cluster deployment is recommended when you delete the cluster. That is, you are advised not to set the --file | -f parameter in normal cases. Set this parameter only when the cache configuration is damaged or lost due to an exception. + +#### Querying the Cluster + +Run the following command to query all Kubernetes clusters deployed using eggo: + +**eggo list** \[ **-d** ] + +| Parameter| Mandatory (Yes/No) | Description | +| ------------- | -------- | ------------ | +| --debug \| -d | No| Displays the debugging information.| + +#### Generating the Cluster Configuration File + +Run the following command to quickly generate the required YAML configuration file for the Kubernetes cluster deployment. + +**eggo template** **-d** **-f** *template.yaml* **-n** *k8s-cluster* **-u** *username* **-p** *password* **--etcd** \[*192.168.0.1,192.168.0.2*] **--masters** \[*192.168.0.1,192.168.0.2*] **--workers** *192.168.0.3* **--loadbalance** *192.168.0.4* + +| Parameter| Mandatory (Yes/No) | Description | +| ------------------- | -------- | ------------------------------- | +| --debug \| -d | No| Displays the debugging information.| +| --file \| -f | No| Specifies the path of the generated YAML file.| +| --name \| -n | No| Specifies the name of the Kubernetes cluster.| +| --username \| -u | No| Specifies the user name for SSH login of the configured node.| +| --password \| -p | No| Specifies the password for SSH login of the configured node.| +| --etcd | No| Specifies the IP address list of the etcd nodes.| +| --masters | No| Specifies the IP address list of the master nodes.| +| --workers | No| Specifies the IP address list of the worker nodes.| +| --loadbalance \| -l | No| Specifies the IP address of the loadbalance node.| + +#### Querying the Help Information + +Run the following command to query the help information of the eggo command: + + **eggo help** + +#### Querying the Help Information of Subcommands + +Run the following command to query the help information of the eggo subcommands: + +**eggo deploy | join | delete | cleanup | list | template -h** + +| Parameter| Mandatory (Yes/No) | Description | +| ----------- | -------- | ------------ | +| --help\| -h | Yes| Displays the help information.| diff --git a/docs/en/cloud/cluster_deployment/kubernetes/figures/advertiseAddress.png b/docs/en/cloud/cluster_deployment/kubernetes/figures/advertiseAddress.png new file mode 100644 index 0000000000000000000000000000000000000000..b36e5c4664f2d2e5faaa23128fd4711c11e30179 Binary files /dev/null and b/docs/en/cloud/cluster_deployment/kubernetes/figures/advertiseAddress.png differ diff --git a/docs/en/cloud/cluster_deployment/kubernetes/figures/arch.png b/docs/en/cloud/cluster_deployment/kubernetes/figures/arch.png new file mode 100644 index 0000000000000000000000000000000000000000..650e4a67959136e12e49975196a4f3af28e6170e Binary files /dev/null and b/docs/en/cloud/cluster_deployment/kubernetes/figures/arch.png differ diff --git a/docs/en/cloud/cluster_deployment/kubernetes/figures/flannelConfig.png b/docs/en/cloud/cluster_deployment/kubernetes/figures/flannelConfig.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9e7c665edd02fad16d3e6f4970e3125efcbef8 Binary files /dev/null and b/docs/en/cloud/cluster_deployment/kubernetes/figures/flannelConfig.png differ diff --git a/docs/en/cloud/cluster_deployment/kubernetes/figures/name.png b/docs/en/cloud/cluster_deployment/kubernetes/figures/name.png new file mode 100644 index 0000000000000000000000000000000000000000..dd6ddfdc3476780e8c896bfd5095025507f62fa8 Binary files /dev/null and b/docs/en/cloud/cluster_deployment/kubernetes/figures/name.png differ diff --git a/docs/en/cloud/cluster_deployment/kubernetes/figures/podSubnet.png b/docs/en/cloud/cluster_deployment/kubernetes/figures/podSubnet.png new file mode 100644 index 0000000000000000000000000000000000000000..b368f77dd7dfd7722dcf7751b3e37ec28755e42d Binary files /dev/null and b/docs/en/cloud/cluster_deployment/kubernetes/figures/podSubnet.png differ diff --git a/docs/en/cloud/cluster_deployment/kubernetes/installing_etcd.md b/docs/en/cloud/cluster_deployment/kubernetes/installing_etcd.md new file mode 100644 index 0000000000000000000000000000000000000000..aff62d1a9418fd99a45efa4ce21520f4b318dbdd --- /dev/null +++ b/docs/en/cloud/cluster_deployment/kubernetes/installing_etcd.md @@ -0,0 +1,88 @@ +# Installing etcd + +## Preparing the Environment + +Run the following command to enable the port used by etcd: + +```bash +firewall-cmd --zone=public --add-port=2379/tcp +firewall-cmd --zone=public --add-port=2380/tcp +``` + +## Installing the etcd Binary Package + +Currently, the RPM package is used for installation. + +```bash +rpm -ivh etcd*.rpm +``` + +Prepare the directories. + +```bash +mkdir -p /etc/etcd /var/lib/etcd +cp ca.pem /etc/etcd/ +cp kubernetes-key.pem /etc/etcd/ +cp kubernetes.pem /etc/etcd/ +# Disabling SELinux +setenforce 0 +# Disabling the Default Configuration of the /etc/etcd/etcd.conf File +# Commenting Out the Line, for example, ETCD_LISTEN_CLIENT_URLS="http://localhost:2379". +``` + +## Compiling the etcd.service File + +The following uses the `k8smaster0` machine as an example: + +```bash +$ cat /usr/lib/systemd/system/etcd.service +[Unit] +Description=Etcd Server +After=network.target +After=network-online.target +Wants=network-online.target + +[Service] +Type=notify +WorkingDirectory=/var/lib/etcd/ +EnvironmentFile=-/etc/etcd/etcd.conf +# set GOMAXPROCS to number of processors +ExecStart=/bin/bash -c "ETCD_UNSUPPORTED_ARCH=arm64 /usr/bin/etcd --name=k8smaster0 --cert-file=/etc/etcd/kubernetes.pem --key-file=/etc/etcd/kubernetes-key.pem --peer-cert-file=/etc/etcd/kubernetes.pem --peer-key-file=/etc/etcd/kubernetes-key.pem --trusted-ca-file=/etc/etcd/ca.pem --peer-trusted-ca-file=/etc/etcd/ca.pem --peer-client-cert-auth --client-cert-auth --initial-advertise-peer-urls https://192.168.122.154:2380 --listen-peer-urls https://192.168.122.154:2380 --listen-client-urls https://192.168.122.154:2379,https://127.0.0.1:2379 --advertise-client-urls https://192.168.122.154:2379 --initial-cluster-token etcd-cluster-0 --initial-cluster k8smaster0=https://192.168.122.154:2380,k8smaster1=https://192.168.122.155:2380,k8smaster2=https://192.168.122.156:2380 --initial-cluster-state new --data-dir /var/lib/etcd" + +Restart=always +RestartSec=10s +LimitNOFILE=65536 + +[Install] +WantedBy=multi-user.target +``` + +**Caution:** + +- The boot setting `ETCD_UNSUPPORTED_ARCH=arm64` needs to be added to ARM64; +- In this document, etcd and Kubernetes control are deployed on the same machine. Therefore, the `kubernetes.pem` and `kubernetes-key.pem` certificates are used to start etcd and Kubernetes control. +- A CA certificate is used in the entire deployment process. etcd can generate its own CA certificate and use its own CA certificate to sign other certificates. However, the certificate signed by the CA certificate needs to be used when the APIServer accesses the etcd client. +- `initial-cluster` needs to be added to all configurations for deploying etcd. +- To improve the storage efficiency of etcd, you can use the directory of the SSD as `data-dir`. + +Start the etcd service. + +```bash +systemctl enable etcd +systemctl start etcd +``` + +Then, deploy other hosts in sequence. + +## Verifying Basic Functions + +```bash +$ ETCDCTL_API=3 etcdctl -w table endpoint status --endpoints=https://192.168.122.155:2379,https://192.168.122.156:2379,https://192.168.122.154:2379 --cacert=/etc/etcd/ca.pem --cert=/etc/etcd/kubernetes.pem --key=/etc/etcd/kubernetes-key.pem ++------------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ +| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFTAPPLIED INDEX | ERRORS | ++------------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ +| https://192.168.122.155:2379 | b50ec873e253ebaa | 3.4.14 | 262 kB | false | false | 819 | 21 | 21 | | +| https://192.168.122.156:2379 | e2b0d126774c6d02 | 3.4.14 | 262 kB | true | false | 819 | 21 | 21 | | +| https://192.168.122.154:2379 | f93b3808e944c379 | 3.4.14 | 328 kB | false | false | 819 | 21 | 21 | | ++------------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ +``` diff --git a/docs/en/cloud/cluster_deployment/kubernetes/installing_the_kubernetes_software_package.md b/docs/en/cloud/cluster_deployment/kubernetes/installing_the_kubernetes_software_package.md new file mode 100644 index 0000000000000000000000000000000000000000..52af7f257994793d2ce8014c14527fe6ddda43f8 --- /dev/null +++ b/docs/en/cloud/cluster_deployment/kubernetes/installing_the_kubernetes_software_package.md @@ -0,0 +1,11 @@ +# Installing the Kubernetes Software Package + +```bash +dnf install -y docker conntrack-tools socat +``` + +In versions later than EPOL, Kubernetes can be directly installed through DNF. + +```bash +dnf install kubernetes* +``` diff --git a/docs/en/cloud/cluster_deployment/kubernetes/overview.md b/docs/en/cloud/cluster_deployment/kubernetes/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..90c8d32af3d35279e446201c715c4cd67f3b8172 --- /dev/null +++ b/docs/en/cloud/cluster_deployment/kubernetes/overview.md @@ -0,0 +1,13 @@ +# Kubernetes Cluster Deployment Guide + +This document describes how to deploy a Kubernetes cluster in binary mode on openEuler. + +>[!NOTE] **Note:** +> All operations in this document are performed using **root** permissions. + +## Cluster Status + +The cluster status used in this document is as follows: + +- Cluster structure: six VMs running the openEuler 22.03 LTS SP4 OS, three master nodes, and three nodes. +- Physical machine: x86/Arm server running openEuler 22.03 LTS SP4. diff --git a/docs/en/cloud/cluster_deployment/kubernetes/preparing_certificates.md b/docs/en/cloud/cluster_deployment/kubernetes/preparing_certificates.md new file mode 100644 index 0000000000000000000000000000000000000000..c1820288d8f887e5a17ef78a1f5a298090f12e30 --- /dev/null +++ b/docs/en/cloud/cluster_deployment/kubernetes/preparing_certificates.md @@ -0,0 +1,414 @@ + +# Preparing Certificates + +**Statement: The certificate used in this document is self-signed and cannot be used in a commercial environment.** + +Before deploying a cluster, you need to generate certificates required for communication between components in the cluster. This document uses the open-source CFSSL as the verification and deployment tool to help users understand the certificate configuration and the association between certificates of cluster components. You can select a tool based on the site requirements, for example, OpenSSL. + +## Building and Installing CFSSL + +The following commands for building and installing CFSSL are for your reference (the CFSSL website access permission is required, and the proxy must be configured first): + +```bash +wget --no-check-certificate https://github.com/cloudflare/cfssl/archive/v1.5.0.tar.gz +tar -zxf v1.5.0.tar.gz +cd cfssl-1.5.0/ +yum -y install git go +make -j6 +cp bin/* /usr/local/bin/ +``` + +## Generating a Root Certificate + +Compile the CA configuration file, for example, ca-config.json: + +```bash +$ cat ca-config.json | jq +{ + "signing": { + "default": { + "expiry": "8760h" + }, + "profiles": { + "kubernetes": { + "usages": [ + "signing", + "key encipherment", + "server auth", + "client auth" + ], + "expiry": "8760h" + } + } + } +} +``` + +Compile a CA CSR file, for example, ca-csr.json: + +```bash +$ cat ca-csr.json | jq +{ + "CN": "Kubernetes", + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "L": "HangZhou", + "O": "openEuler", + "OU": "WWW", + "ST": "BinJiang" + } + ] +} +``` + +Generate the CA certificate and key: + +```bash +cfssl gencert -initca ca-csr.json | cfssljson -bare ca +``` + +The following certificates are obtained: + +```bash +ca.csr ca-key.pem ca.pem +``` + +## Generating the admin Account Certificate + +admin is an account used by K8S for system management. Compile the CSR configuration of the admin account, for example, admin-csr.json: + +```bash +cat admin-csr.json | jq +{ + "CN": "admin", + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "L": "HangZhou", + "O": "system:masters", + "OU": "Containerum", + "ST": "BinJiang" + } + ] +} +``` + +Generate a certificate: + +```bash +cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin +``` + +The result is as follows: + +```bash +admin.csr admin-key.pem admin.pem +``` + +## Generating a service-account Certificate + +Compile the CSR configuration file of the service-account account, for example, service-account-csr.json: + +```bash +cat service-account-csr.json | jq +{ + "CN": "service-accounts", + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "L": "HangZhou", + "O": "Kubernetes", + "OU": "openEuler k8s install", + "ST": "BinJiang" + } + ] +} +``` + +Generate a certificate: + +```bash +cfssl gencert -ca=../ca/ca.pem -ca-key=../ca/ca-key.pem -config=../ca/ca-config.json -profile=kubernetes service-account-csr.json | cfssljson -bare service-account +``` + +The result is as follows: + +```bash +service-account.csr service-account-key.pem service-account.pem +``` + +## Generating the kube-controller-manager Certificate + +Compile the CSR configuration of kube-controller-manager: + +```bash +{ + "CN": "system:kube-controller-manager", + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "L": "HangZhou", + "O": "system:kube-controller-manager", + "OU": "openEuler k8s kcm", + "ST": "BinJiang" + } + ] +} +``` + +Generate a certificate: + +```bash +cfssl gencert -ca=../ca/ca.pem -ca-key=../ca/ca-key.pem -config=../ca/ca-config.json -profile=kubernetes kube-controller-manager-csr.json | cfssljson -bare kube-controller-manager +``` + +The result is as follows: + +```bash +kube-controller-manager.csr kube-controller-manager-key.pem kube-controller-manager.pem +``` + +## Generating the kube-proxy Certificate + +Compile the CSR configuration of kube-proxy: + +```bash +{ + "CN": "system:kube-proxy", + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "L": "HangZhou", + "O": "system:node-proxier", + "OU": "openEuler k8s kube proxy", + "ST": "BinJiang" + } + ] +} +``` + +Generate a certificate: + +```bash +cfssl gencert -ca=../ca/ca.pem -ca-key=../ca/ca-key.pem -config=../ca/ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy +``` + +The result is as follows: + +```bash +kube-proxy.csr kube-proxy-key.pem kube-proxy.pem +``` + +## Generating the kube-scheduler Certificate + +Compile the CSR configuration of kube-scheduler: + +```bash +{ + "CN": "system:kube-scheduler", + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "L": "HangZhou", + "O": "system:kube-scheduler", + "OU": "openEuler k8s kube scheduler", + "ST": "BinJiang" + } + ] +} +``` + +Generate a certificate: + +```bash +cfssl gencert -ca=../ca/ca.pem -ca-key=../ca/ca-key.pem -config=../ca/ca-config.json -profile=kubernetes kube-scheduler-csr.json | cfssljson -bare kube-scheduler +``` + +The result is as follows: + +```bash +kube-scheduler.csr kube-scheduler-key.pem kube-scheduler.pem +``` + +## Generating the kubelet Certificate + +The certificate involves the host name and IP address of the server where kubelet is located. Therefore, the configuration of each node is different. The script is compiled as follows: + +```bash +$ cat node_csr_gen.bash + +#!/bin/bash + +nodes=(k8snode1 k8snode2 k8snode3) +IPs=("192.168.122.157" "192.168.122.158" "192.168.122.159") + +for i in "${!nodes[@]}"; do + +cat > "${nodes[$i]}-csr.json" < + k8smaster0 + 8 + 8 + + hvm + /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw + /var/lib/libvirt/qemu/nvram/k8smaster0.fd + + + + + + + + + 1 + + destroy + restart + restart + + /usr/libexec/qemu-kvm + + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` + +The VM configuration must be unique. Therefore, you need to modify the following to ensure that the VM is unique: + +- name: host name of the VM. You are advised to use lowercase letters. In this example, the value is `k8smaster0`. +- nvram: handle file path of the NVRAM, which must be globally unique. In this example, the value is `/var/lib/libvirt/qemu/nvram/k8smaster0.fd`. +- disk source file: VM disk file path. In this example, the value is `/mnt/vm/images/master0.img`. +- mac address of the interface: MAC address of the interface. In this example, the value is `52:54:00:00:00:80`. + +## Installing a VM + +1. Create and start a VM. + + ```shell + virsh define master.xml + virsh start k8smaster0 + ``` + +2. Obtain the VNC port number of the VM. + + ```shell + virsh vncdisplay k8smaster0 + ``` + +3. Use a VM connection tool, such as VNC Viewer, to remotely connect to the VM and perform configurations as prompted. + +4. Set the host name of the VM, for example, k8smaster0. + + ```shell + hostnamectl set-hostname k8smaster0 + ``` diff --git a/docs/en/cloud/cluster_deployment/kubernetes/public_sys-resources/icon-note.gif b/docs/en/cloud/cluster_deployment/kubernetes/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/cloud/cluster_deployment/kubernetes/public_sys-resources/icon-note.gif differ diff --git a/docs/en/cloud/cluster_deployment/kubernetes/running_the_test_pod.md b/docs/en/cloud/cluster_deployment/kubernetes/running_the_test_pod.md new file mode 100644 index 0000000000000000000000000000000000000000..4ead1ca6fae8a709fb41adf958762076dd034602 --- /dev/null +++ b/docs/en/cloud/cluster_deployment/kubernetes/running_the_test_pod.md @@ -0,0 +1,42 @@ +# Running the Test Pod + +## Configuration File + +```bash +$ cat nginx.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment + labels: + app: nginx +spec: + replicas: 3 + selector: + matchLabels: + app: nginx + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.14.2 + ports: + - containerPort: 80 +``` + +## Starting the Pod + +Run the kubectl command to run Nginx. + +```bash +$ kubectl apply -f nginx.yaml +deployment.apps/nginx-deployment created +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +nginx-deployment-66b6c48dd5-6rnwz 1/1 Running 0 33s +nginx-deployment-66b6c48dd5-9pq49 1/1 Running 0 33s +nginx-deployment-66b6c48dd5-lvmng 1/1 Running 0 34s +``` diff --git a/docs/en/cloud/container_engine/docker_engine/_toc.yaml b/docs/en/cloud/container_engine/docker_engine/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8fa89da19af2aa8fd524c9e015296ee9a8e61200 --- /dev/null +++ b/docs/en/cloud/container_engine/docker_engine/_toc.yaml @@ -0,0 +1,25 @@ +label: Docker Container +isManual: true +description: Docker is an open source container engine that facilitates quick application + packaging, deployment, and delivery +sections: + - label: Overview + href: ./overview.md + - label: Installation and Configuration + href: ./installation_and_configuration_3.md + - label: Container Management + href: ./container_management_1.md + - label: Image Management + href: ./image_management_1.md + - label: Command Reference + href: ./command_reference.md + sections: + - label: Container Engine + href: ./container_engine.md + - label: Container Management + href: ./container_management_2.md + - label: Image Management + href: ./image_management_2.md + - label: Statistics + href: ./statistics.md + diff --git a/docs/en/cloud/container_engine/docker_engine/command_reference.md b/docs/en/cloud/container_engine/docker_engine/command_reference.md new file mode 100644 index 0000000000000000000000000000000000000000..1e802b41f6d63b2fd4b81bd30faeefce0b4f43af --- /dev/null +++ b/docs/en/cloud/container_engine/docker_engine/command_reference.md @@ -0,0 +1,3 @@ +# Command Reference + +This chapter describes Docker container commands. diff --git a/docs/en/cloud/container_engine/docker_engine/container_engine.md b/docs/en/cloud/container_engine/docker_engine/container_engine.md new file mode 100644 index 0000000000000000000000000000000000000000..d3307a37c3909833096302c26dac45540d329353 --- /dev/null +++ b/docs/en/cloud/container_engine/docker_engine/container_engine.md @@ -0,0 +1,304 @@ +# Container Engine + +Docker daemon is a system process that resides in the background. Before you run a docker subcommand, start Docker daemon. + +If the Docker daemon is installed using the RPM package or system package management tool, you can run the **systemctl start docker** command to start the Docker daemon. + +The **docker** command supports the following parameters: + +1. To combine parameters of a single character, run the following command: + + ```shell + docker run -t -i busybox /bin/sh + ``` + + The command can be written as follows: + + ```shell + docker run -ti busybox /bin/sh + ``` + +2. **bool** command parameters such as **--icc=true**, are displayed in the command help. If this parameter is not used, the default value displayed in the command help is used. If this parameter is used, the opposite value of the value displayed in the command help is used. In addition, if **--icc** is not added when Docker daemon is started, **--icc=true** is used by default. Otherwise, **--icc=false** is used. +3. Parameters such as **--attach=\[\]** in the command help indicate that these parameters can be set for multiple times. For example: + + ```shell + docker run --attach=stdin --attach=stdout -i -t busybox /bin/sh + ``` + +4. Parameters such as **-a** and **--attach=\[\]** in the command help indicate that the parameter can be specified using either **-a** _value_ or **--attach=**_value_. For example: + + ```shell + docker run -a stdin --attach=stdout -i -t busybox /bin/sh + ``` + +5. Parameters such as **--name=""** can be configured with a character string and can be configured only once. Parameters such as **-c=** can be configured with an integer and can be configured only once. + +**Table 1** Parameters specified during the Docker daemon startup + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

--api-cors-header

+

CORS header information for enabling remote API calling. This interface supports the secondary development of upper-layer applications, which sets the CORS header for a remote API.

+

--authorization-plugin=[]

+

Authentication plug-in.

+

-b, --bridge=""

+

Existing bridge device mounting to the docker container. Note: none can be used to disable the network in the container.

+

--bip=""

+

Bridge IP address, which is automatically created using the CIDR address. Note: this parameter cannot be used with -b .

+

--cgroup-parent

+

cgroup parent directory configured for all containers.

+

--config-file=/etc/docker/daemon.json

+

Configuration file for starting Docker daemon.

+

--containerd

+

Socket path of containerd.

+

-D, --debug=false

+

Specifies whether to enable the debugging mode.

+

--default-gateway

+

Default gateway of the container IPv4 address.

+

--default-gateway-v6

+

Default gateway of the container IPv6 address.

+

--default-ulimit=[]

+

Default ulimit value of the container.

+

--disable-legacy-registry

+

Disables the original registry.

+

--dns=[]

+

DNS server of the forcibly used container.

+

Example: --dns 8.8.x.x

+

--dns-opt=[]

+

DNS option.

+

--dns-search=[]

+

Forcibly searches DNS search domain name used by a container.

+

Example: --dns-search example.com

+

--exec-opt=[]

+

Parameter to be executed when a container is started.

+

For example, set the native.umask parameter.

+
# The umask value of the started container is 0022.--exec-opt native.umask=normal 
+\# The umask value of the started container is 0027 (default value).
+--exec-opt  native.umask=secure    
+

Note: If native.umask is also configured in docker create or docker run command, the configuration in command is used.

+

--exec-root=/var/run/docker

+

Root directory for storing the execution status file.

+

--fixed-cidr=""

+

Fixed IP address (for example, 10.20.0.0/16) of the subnet. The IP address of the subnet must belong to the network bridge.

+

--fixed-cidr-v6

+

Fixed IPv6 address.

+

-G, --group="docker"

+

Group assigned to the corresponding Unix socket in the background running mode. Note: When an empty string is configured for this parameter, the group information is removed.

+

-g, --graph="/var/lib/docker"

+

The root directory for running docker.

+

-H, --host=[]

+

Socket bound in background mode. One or more sockets can be configured using tcp://host:port, unix:///path to socket, fd://* or fd://socketfd. Example:

+

$ dockerd -H tcp://0.0.0.0:2375

+

or

+

$ export DOCKER_HOST="tcp://0.0.0.0:2375"

+

--insecure-registry=[]

+

Registry for insecure connections. By default, the Docker uses TLS certificates to ensure security for all connections. If the registry does not support HTTPS connections or the certificate is issued by an unknown certificate authority of the Docker daemon, you need to configure --insecure-registry=192.168.1.110:5000 when starting the daemon. This parameter needs to be configured if a private registry is used.

+

--image-layer-check=true

+

Image layer integrity check. To enable the function, set this parameter to true. Otherwise, set this parameter to false. If this parameter is not configured, the function is disabled by default.

+

When Docker is started, the image layer integrity is checked. If the image layer is damaged, the related images are unavailable. Docker cannot verify empty files, directories, or link files. Therefore, if the preceding files are lost due to a power failure, the integrity check of Docker image data may fail. When the Docker version changes, check whether the parameter is supported. If not supported, delete it from the configuration file.

+

--icc=true

+

Enables communication between containers.

+

--ip="0.0.0.0"

+

Default IP address used when a container is bound to a port.

+

--ip-forward=true

+

Starts the net.ipv4.ip_forward process of the container.

+

--ip-masq=true

+

Enables IP spoofing.

+

--iptables=true

+

Starts the iptables rules defined by the Docker container.

+

-l, --log-level=info

+

Log level.

+

--label=[]

+

Daemon label, in key=value format.

+

--log-driver=json-file

+

Default log driver of container logs.

+

--log-opt=map[]

+

Log drive parameters.

+

--mtu=0

+

MTU value of the container network. If this parameter is not configured, value of route MTU is used by default. If the default route is not configured, set this parameter to the constant value 1500.

+

-p, --pidfile="/var/run/docker.pid"

+

PID file path of the background process.

+

--raw-logs

+

Logs with all timestamps and without the ANSI color scheme.

+

--registry-mirror=[]

+

Image registry preferentially used by the dockerd.

+

-s, --storage-driver=""

+

Storage driver used when a container is forcibly run.

+

--selinux-enabled=false

+

Enables SELinux. If the kernel version is 3.10.0-862.14 or later, this parameter cannot be set to true.

+

--storage-opt=[]

+

Storage driver parameter. This parameter is valid only when the storage driver is devicemapper. Example: dockerd --storage-opt dm.blocksize=512K

+

--tls=false

+

Enables the TLS authentication.

+

--tlscacert="/root/.docker/ca.pem"

+

Certificate file path that has been authenticated by the CA.

+

--tlscert="/root/.docker/cert.pem"

+

File path of the TLS certificates.

+

--tlskey="/root/.docker/key.pem"

+

File path of TLS keys.

+

--tlsverify=false

+

Verifies the communication between the background processes and the client using TLS.

+

--insecure-skip-verify-enforce

+

Whether to forcibly skip the verification of the certificate host or domain name. The default value is false.

+

--use-decrypted-key=true

+

Whether to use the decryption private key.

+

--userland-proxy=true

+

Whether to use the userland proxy for the container LO device.

+

--userns-remap

+

User namespace-based user mapping table in the container.

+
NOTE:

This parameter is not supported in the current version.

+
+
diff --git a/docs/en/cloud/container_engine/docker_engine/container_management_1.md b/docs/en/cloud/container_engine/docker_engine/container_management_1.md new file mode 100644 index 0000000000000000000000000000000000000000..fd41dd53741af8db3060cd2fd6467f9b60231de0 --- /dev/null +++ b/docs/en/cloud/container_engine/docker_engine/container_management_1.md @@ -0,0 +1,698 @@ +# Container Management + +## Creating a Container + +### Downloading Images + +Only user **root** can run the **docker** command. If you log in as a common user, you need to use the **sudo** command before running the **docker** command. + +```console +[root@localhost ~]# docker pull busybox +``` + +This command is used to download the **busybox:latest** image from the official Docker registry. \(If no tag is specified in the command, the default tag name **latest** is used.\) During the image download, the system checks whether the dependent layer exists locally. If yes, the image download is skipped. When downloading images from a private registry, specify the registry description. For example, if a private registry containing some common images is created and its IP address is **192.168.1.110:5000**, you can run the following command to download the image from the private registry: + +```console +[root@localhost ~]# docker pull 192.168.1.110:5000/busybox +``` + +The name of the image downloaded from the private registry contains the registry address information, which may be too long. Run the **docker tag** command to generate an image with a shorter name. + +```console +[root@localhost ~]# docker tag 192.168.1.110:5000/busybox busybox +``` + +Run the **docker images** command to view the local image list. + +### Running a Simple Application + +```console +[root@localhost ~]# docker run busybox /bin/echo "Hello world" +Hello world +``` + +This command uses the **busybox:latest** image to create a container, and executes the **echo "Hello world"** command in the container. Run the following command to view the created container: + +```console +[root@localhost ~]# docker ps -l +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +d8c0a3315bc0 busybox"/bin/echo 'Hello wo..." 5 seconds ago Exited (0) 3 seconds ago practical_franklin +``` + +### Creating an Interactive Container + +```console +[root@localhost ~]# docker run -it busybox /bin/bash +root@bf22919af2cf:/# ls +bin boot dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var +root@bf22919af2cf:/# pwd +/ +``` + +The **-ti** option allocates a pseudo terminal to the container and uses standard input \(STDIN\) for interaction. You can run commands in the container. In this case, the container is an independent Linux VM. Run the **exit** command to exit the container. + +### Running a Container in the Background + +Run the following command. **-d** indicates that the container is running in the background. **--name=container1** indicates that the container name is **container1**. + +```console +[root@localhost ~]# docker run -d --name=container1 busybox /bin/sh -c "while true;do echo hello world;sleep 1;done" +7804d3e16d69b41aac5f9bf20d5f263e2da081b1de50044105b1e3f536b6db1c +``` + +The command output contains the container ID but does not contain **hello world**. In this case, the container is running in the background. You can run the **docker ps** command to view the running container. + +```console +[root@localhost ~]# docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +7804d3e16d69 busybox "/bin/sh -c 'while tr" 11 seconds ago Up 10 seconds container1 +``` + +Run the following **docker logs** command to view the output during container running: + +```console +[root@localhost ~]# docker logs container1 +hello world +hello world +hello world +... +``` + +### Container Network Connection + +By default, a container can access an external network, while port mapping is required when an external network accesses a container. The following uses how to run the private registry service in Docker as an example. In the following command, **-P** is used to expose open ports in the registry to the host. + +```console +[root@localhost ~]# docker run --name=container_registry -d -P registry +cb883f6216c2b08a8c439b3957fb396c847a99079448ca741cc90724de4e4731 +``` + +The container\_registry container has been started, but the mapping between services in the container and ports on the host is not clear. You need to run the **docker port** command to view the port mapping. + +```console +[root@localhost ~]# docker port container_registry +5000/tcp -> 0.0.0.0:49155 +``` + +The command output shows that port 5000 in the container is mapped to port 49155 on the host. You can access the registry service by using the host IP address **49155**. Enter **** in the address box of the browser and press **Enter**. The registry version information is displayed. + +When running registry images, you can directly specify the port mapping, as shown in the following: + +```shell +docker run --name=container_registry -d -p 5000:5000 registry +``` + +**-p 5000:5000** is used to map port 5000 in the container to port 5000 on the host. + +### Precautions + +- **Do Not Add -a stdin Independently During Container Startup** + + When starting a container, you must add **-a stdout** or **-a stderr** together with **-a stdin** instead of **-a stdin** only. Otherwise, the device stops responding even after the container exits. + +- **Do Not Use the Long Or Short ID of an Existing Container As the Name of a New Container** + + When creating a container, do not use the long or short ID of the existing container A as the name of the new container B. If the long ID of container A is used as the name of container B, Docker will match container A even though the name of container B is used as the specified target container for operations. If the short ID of container A is used as the name of container B, Docker will match container B even though the short ID of container A is used as the specified target container for operations. This is because Docker matches the long IDs of all containers first. If the matching fails, the system performs exact matching using the value of **container\_name**. If matching failure persists, the container ID is directly matched in fuzzy mode. + +- **Containers That Depend on Standard Input and Output, Such As sh/bash, Must Use the -ti Parameter to Avoid Exceptions** + + Normal case: If you do not use the **-ti** parameter to start a process container such as sh/bash, the container exits immediately. + + The cause of this problem is that Docker creates a stdin that matches services in the container first. If the interactive parameters such as **-ti** are not set, Docker closes pipe after the container is started and the service container process sh/bash exits after stdin is closed. + + Exception: If Docker daemon is forcibly killed in a specific phase \(before pipe is closed\), daemon of the pipe is not closed in time. In this case, the sh/bash process does not exit even without **-ti**. As a result, an exception occurs. You need to manually clear the container. + + After being restarted, daemon takes over the original container stream. Containers without the **-ti** parameter may not be able to process the stream because these containers do not have streams to be taken over in normal cases. In actual services, sh/bash without the **-ti** parameter does not take effect and is seldom used. To avoid this problem, the **-ti** parameter is used to restrict interactive containers. + +- **Container Storage Volumes** + + If you use the **-v** parameter to mount files on the host to a container when the container is started, the inodes of the files may be changed when you run the **vi** or **sed** command to modify the files on the host or in the container. As a result, files on the host and in the container are not synchronized. Do not mount files in the container in this mode \(or do not use together with the **vi** and **sed** commands\). You can also mount the upper-layer directories of the files to avoid exceptions. The **nocopy** option can be used to prevent original files in the mount point directory of a container from being copied to the source directory of the host when Docker mounts volumes. However, this option can be used only when an anonymous volume is mounted and cannot be used in the bind mount scenario. + +- **Do Not Use Options That May Affect the Host** + + The **--privileged** option enables all permissions for a container. On the container, mounting operations can be performed and directories such as **/proc** and **/sys** can be modified, which may affect the host. Therefore, do not use this option for common containers. + + A host-shared namespace, such as the **--pid host**, **--ipc host**, or **--net host** option, can enable a container to share the namespace with the host, which will also affect the host. Therefore, do not use this option. + +- **Do Not Use the Unstable Kernel Memory Cgroup** + + Kernel memory cgroup on the Linux kernel earlier than 4.0 is still in the experimental phase and runs unstably. Therefore, do not use kernel memory cgroup. + + When the **docker run --kernel-memory** command is executed, the following alarm is generated: + + ```console + WARNING: You specified a kernel memory limit on a kernel older than 4.0. Kernel memory limits are experimental on older kernels, it won't work as expected as expected and can cause your system to be unstable. + ``` + +- **blkio-weight Parameter Is Unavailable in the Kernel That Supports blkio Precise Control** + + **--blkio-weight-device** can implement more accurate blkio control in a container. The control requires a specified disk device, which can be implemented through the **--blkio-weight-device** parameter of Docker. In this kernel, Docker does not provide the **--blkio-weight** mode to limit the container blkio. If you use this parameter to create a container, the following error is reported: + + ```console + docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "process_linux.go:398: container init caused \"process_linux.go:369: setting cgroup config for ready process caused \\\"blkio.weight not supported, use weight_device instead\\\"\"" + ``` + +- **Using --blkio-weight-device in CFQ Scheduling Policy** + + The **--blkio-weight-device** parameter works only when the disk works in the Completely Fair Queuing \(CFQ\) policy. + + You can view the scheduler file \(**/sys/block/**_disk_**/queue/scheduler**\) to obtain the policies supported by the disk and the current policy. For example, you can run the following command to view **sda**. + + ```shell + cat /sys/block/sda/queue/scheduler noop [deadline] cfq + ``` + + **sda** supports the following scheduling policies: **noop**, **deadline**, and **cfq**, and the **deadline** policy is being used. You can run the **echo** command to change the policy to **cfq**. + + ```shell + echo cfq > /sys/block/sda/queue/scheduler + ``` + +- **systemd Usage Restrictions in Basic Container Images** + + When containers created from basic images are used, systemd in basic images is used only for system containers. + +### Concurrent Performance + +- There is an upper limit for the message buffer in Docker. If the number of messages exceeds the upper limit, the messages are discarded. Therefore, it is recommended that the number of commands executed concurrently should not exceed 1000. Otherwise, the internal messages in Docker may be lost and the container may fail to be started. +- When containers are concurrently created and restarted, the error message"oci runtime error: container init still running" is occasionally reported. This is because containerd optimizes the performance of the event waiting queue. When a container is stopped, the **runc delete** command is executed to kill the init processes in the container within 1s. If the init processes are not killed within 1s, runC returns this error message. The garbage collection \(GC\) mechanism of containerd reclaims residual resources after **runc delete** is executed at an interval of 10s. Therefore, operations on the container are not affected. If the preceding error occurs, wait for 4 or 5s and restart the container. + +### Security Feature Interpretation + +1. The following describes default permission configuration analysis of Docker. + + In the default configuration of a native Docker, capabilities carried by each default process are as follows: + + ```text + "CAP_CHOWN", + "CAP_DAC_OVERRIDE", + "CAP_FSETID", + "CAP_FOWNER", + "CAP_MKNOD", + "CAP_NET_RAW", + "CAP_SETGID", + "CAP_SETUID", + "CAP_SETFCAP", + "CAP_SETPCAP", + "CAP_NET_BIND_SERVICE", + "CAP_SYS_CHROOT", + "CAP_KILL", + "CAP_AUDIT_WRITE", + ``` + + The default seccomp configuration is a whitelist. If any syscall is not in the whitelist, **SCMP\_ACT\_ERRNO** is returned by default. Different system invoking is enabled for different caps of Docker. If a capability is not in the whitelist, Docker will not assign it to the container by default. + +2. CAP\_SYS\_MODULE + + CAP\_SYS\_MODULE allows a container to insert or remove ko modules. Adding this capability allows the container to escape or even damage the kernel. Namespace provides the maximum isolation for a container. In the ko module, you only need to point its namespace to **init\_nsproxy**. + +3. CAP\_SYS\_ADMIN + + The sys\_admin permission provides the following capabilities for a container: + + - For file system: **mount**, **umount**, and **quotactl** + - For namespace setting: **setns**, **unshare**, and **clone new namespace** + - driver ioctl + - For PCI control: **pciconfig\_read**, **pciconfig\_write**, and **pciconfig\_iobase** + - **sethostname** + +4. CAP\_NET\_ADMIN + + CAP\_NET\_ADMIN allows a container to access network interfaces and sniff network traffic. The container can obtain the network traffic of all containers including the host, which greatly damages network isolation. + +5. CAP\_DAC\_READ\_SEARCH + + CAP\_DAC\_READ\_SEARCH calls the open\_by\_handle\_at and name\_to\_handle\_at system calls. If the host is not protected by SELinux, the container can perform brute-force search for the inode number of the file\_handle structure to open any file on the host, which affects the isolation of the file system. + +6. CAP\_SYS\_RAWIO + + CAP\_SYS\_RAWIO allows a container to write I/O ports to the host, which may cause the host kernel to crash. + +7. CAP\_SYS\_PTRACE + + The ptrace permission for a container provides ptrace process debugging in the container. RunC has fixed this vulnerability. However, some tools, such as nsenter and docker-enter, are not protected. In a container, processes executed by these tools can be debugged to obtain resource information \(such as namespace and fd\) brought by these tools. In addition, ptrace can bypass seccomp, greatly increasing attack risks of the kernel. + +8. Docker capability interface: --cap-add all + + --cap-add all grants all permissions to a container, including the dangerous permissions mentioned in this section, which allows the container to escape. + +9. Do not disable the seccomp feature of Docker. + + Docker has a default seccomp configuration with a whitelist. **sys\_call** that is not in the whitelist is disabled by seccomp. You can disable the seccomp feature by running **--security-opt 'seccomp:unconfined'**. If seccomp is disabled or the user-defined seccomp configuration is used but the filtering list is incomplete, attack risks of the kernel in the container are increased. + +10. Do not set the **/sys** and **/proc** directories to writable. + + The **/sys** and **/proc** directories contain Linux kernel maintenance parameters and device management interfaces. If the write permission is configured for the directories in a container, the container may escape. + +11. Docker open capability: --CAP\_AUDIT\_CONTROL + + The permission allows a container to control the audit system and run the **AUDIT\_TTY\_GET** and **AUDIT\_TTY\_SET** commands to obtain the TTY execution records \(including the **root** password\) recorded in the audit system. + +12. CAP\_BLOCK\_SUSPEND and CAP\_WAKE\_ALARM + + The permission provides a container the capability to block the system from suspending \(epoll\). + +13. CAP\_IPC\_LOCK + + With this permission, a container can break the max locked memory limit in **ulimit** and use any mlock large memory block to cause DoS attacks. + +14. CAP\_SYS\_LOG + + In a container with this permission, system kernel logs can be read by using dmesg to break through kernel kaslr protection. + +15. CAP\_SYS\_NICE + + In a container with this permission, the scheduling policy and priority of a process can be changed, causing DoS attacks. + +16. CAP\_SYS\_RESOURCE + + With this permission, a container can bypass resource restrictions, such as disk space resource restriction, keymaps quantity restriction, and **pipe-size-max** restriction, causing DoS attacks. + +17. CAP\_SYS\_TIME + + In a container with this capability, the time on the host can be changed. + +18. Risk analysis of Docker default capabilities + + The default capabilities of Docker include CAP\_SETUID and CAP\_FSETID. If the host and a container share a directory, the container can set permissions for the binary file in the shared directory. Common users on the host can use this method to elevate privileges. With the CAP\_AUDIT\_WRITE capability, a container can write logs to the host, and the host must be configured with log anti-explosion measures. + +19. Docker and host share namespace parameters, such as **--pid**, **--ipc**, and **--uts**. + + This parameter indicates that the container and host share the namespace. The container can attack the host as the namespace of the container is not isolated from that of the host. For example, if you use **--pid** to share PID namespace with the host, the PID on the host can be viewed in the container, and processes on the host can be killed at will. + +20. **--device** is used to map the sensitive directories or devices of the host to the container. + + The Docker management plane provides interfaces for mapping directories or devices on a host to the container, such as **--device** and **-v**. Do not map sensitive directories or devices on the host to the container. + +## Creating Containers Using hook-spec + +### Principles and Application Scenarios + +Docker supports the extended features of hooks. The execution of hook applications and underlying runC complies with the [OCI standards](https://github.com/opencontainers/runtime-spec/blob/main/config.md/#hooks). + +There are three types of hooks: prestart, poststart, and poststop. They are respectively used before applications in the container are started, after the applications are started, and after the applications are stopped. + +### API Reference + +The **--hook-spec** parameter is added to the **docker run** and **create** commands and is followed by the absolute path of the **spec** file. You can specify the hooks to be added during container startup. These hooks will be automatically appended after the hooks that are dynamically created by Docker \(currently only libnetwork prestart hook\) to execute programs specified by users during the container startup or destruction. + +The structure of **spec** is defined as follows: + +```text +// Hook specifies a command that is run at a particular event in the lifecycle of a container +type Hook struct{ + Path string `json:"path"` + Args []string `json:"args,omitempty"` + Env []string `json:"env,omitempty"` + Timeout *int `json:"timeout,omitempty"` +} +// Hooks for container setup and teardown +type Hooks struct{ + // Prestart is a list of hooks to be run before the container process is executed. + // On Linux, they are run after the container namespaces are created. + Prestart []Hook `json:"prestart,omitempty"` + // Poststart is a list of hooks to be run after the container process is started. + Poststart []Hook `json:"poststart,omitempty"` + // Poststop is a list of hooks to be run after the container process exits. + Poststop []Hook `json:"poststop,omitempty"` +} +``` + +- The **Path**, **Args**, and **Env** parameters are mandatory. +- **Timeout** is optional, while you are advised to set this parameter to a value ranging from 1 to 120. The parameter type is int. Floating point numbers are not allowed. +- The content of the **spec** file must be in JSON format as shown in the preceding example. If the format is incorrect, an error is reported. +- Both **docker run --hook-spec /tmp/hookspec.json**_xxx_, and **docker create --hook-spec /tmp/hookspec.json**_xxx_**&& docker start**_xxx_ can be used. + +### Customizing Hooks for a Container + +Take adding a NIC during the startup as an example. The content of the **hook spec** file is as follows: + +```json +{ + "prestart": [ + { + "path": "/var/lib/docker/hooks/network-hook", + "args": ["network-hook", "tap0", "myTap"], + "env": [], + "timeout": 5 + } + ], + "poststart":[], + "poststop":[] +} +``` + +Specify prestart hook to add the configuration of a network hook. The path is **/var/lib/docker/hooks/network-hook**. **args** indicates the program parameters. Generally, the first parameter is the program name, and the second parameter is the parameter accepted by the program. For the network-hook program, two parameters are required. One is the name of the NIC on the host, and the other is the name of the NIC in the container. + +- Precautions + 1. The **hook** path must be in the**hooks** folder in the **graph** directory \(**--graph**\) of Docker. Its default value is **/var/lib/docker/hooks**. You can run the **docker info** command to view the root path. + + ```console + [root@localhost ~]# docker info + ... + Docker Root Dir: /var/lib/docker + ... + ``` + + This path may change due to the user's manual configuration and the use of user namespaces \(**daemon --userns-remap**\). After the symbolic link of the path is parsed, the parsed path must start with _Docker Root Dir_**/hooks** \(for example, **/var/lib/docker/hooks**\). Otherwise, an error message is displayed. + + 2. The **hook** path must be an absolute path because daemon cannot properly process a relative path. In addition, an absolute path meets security requirements. + 3. The information output by the hook program to stderr is output to the client and affects the container lifecycle \(for example, the container may fail to be started\). The information output to stdout is ignored. + 4. Do not reversely call Docker instructions in hooks. + 5. The execute permission must have been granted on the configured hook execution file. Otherwise, an error is reported during hook execution. + 6. The execution time of the hook operation must be as short as possible. If the prestart period is too long \(more than 2 minutes\), the container startup times out. If the poststop period is too long \(more than 2 minutes\), the container is abnormal. + + The known exceptions are as follows: When the **docker stop** command is executed to stop a container and the clearing operation is performed after 2 minutes, the hook operation is not complete. Therefore, the system waits until the hook operation is complete \(the process holds a lock\). As a result, all operations related to the container stop responding. The operations can be recovered only after the hook operation is complete. In addition, the two-minute timeout processing of the **docker stop** command is an asynchronous process. Therefore, even if the **docker stop** command is successfully executed, the container status is still **up**. The container status is changed to **exited** only after the hook operation is completed. + +- Suggestions + 1. You are advised to set the hook timeout threshold to a value less than 5s. + 2. You are advised to configure only one prestart hook, one poststart hook, and one poststop hook for each container. If too many hooks are configured, the container startup may take a long time. + 3. You are advised to identify the dependencies between multiple hooks. If required, you need to adjust the sequence of the hook configuration files according to the dependencies. The execution sequence of hooks is based on the sequence in the configured **spec** file. + +### Multiple **hook-spec** + +If multiple hook configuration files are available and you need to run multiple hooks, you must manually combine these files into a configuration file and specify the new configuration file by using the **--hook-spec** parameter. Then all hooks can take effect. If multiple **--hook-spec** parameters are configured, only the last one takes effect. + +Configuration examples: + +The content of the **hook1.json** file is as follows: + +```shell +$ cat /var/lib/docker/hooks/hookspec.json +{ + "prestart": [ + { + "path": "/var/lib/docker/hooks/lxcfs-hook", + "args": ["lxcfs-hook", "--log", "/var/log/lxcfs-hook.log"], + "env": [] + } + ], + "poststart":[], + "poststop":[] +} +``` + +The content of the **hook2.json** file is as follows: + +```shell +$ cat /etc/isulad-tools/hookspec.json +{ + "prestart": [ + { + "path": "/docker-root/hooks/docker-hooks", + "args": ["docker-hooks", "--state", "prestart"], + "env": [] + } + ], + "poststart":[], + "poststop":[ + { + "path": "/docker-root/hooks/docker-hooks", + "args": ["docker-hooks", "--state", "poststop"], + "env": [] + } + ] +} +``` + +The content in JSON format after manual combination is as follows: + +```json +{ + "prestart":[ + { + "path": "/var/lib/docker/hooks/lxcfs-hook", + "args": ["lxcfs-hook", "--log", "/var/log/lxcfs-hook.log"], + "env": [] + }, + { + "path": "/docker-root/hooks/docker-hooks", + "args": ["docker-hooks", "--state", "prestart"], + "env": [] + } + ], + "poststart":[], + "poststop":[ + { + "path": "/docker-root/hooks/docker-hooks", + "args": ["docker-hooks", "--state", "poststop"], + "env": [] + } + ] +} +``` + +Docker daemon reads the binary values of hook in actions such as prestart in the hook configuration files in sequence based on the array sequence and executes the actions. Therefore, you need to identify the dependencies between multiple hooks. If required, you need to adjust the sequence of the hook configuration files according to the dependencies. + +### Customizing Default Hooks for All Containers + +Docker daemon can receive the **--hook-spec** parameter. The semantics of **--hook-spec** is the same as that of **--hook-spec** in **docker create** or **docker run**. You can also add hook configurations to the **/etc/docker/daemon.json** file. + +```json +{ + "hook-spec": "/tmp/hookspec.json" +} +``` + +When a container is running, hooks specified in **--hook-spec** defined by daemon are executed first, and then hooks customized for each container are executed. + +## Configuring Health Check During Container Creation + +Docker provides the user-defined health check function for containers. You can configure the **HEALTHCHECK CMD** option in the Dockerfile, or configure the **--health-cmd** option when a container is created so that commands are periodically executed in the container to monitor the health status of the container based on return values. + +### Configuration Methods + +- Add the following configurations to the Dockerfile file: + + ```text + HEALTHCHECK --interval=5m --timeout=3s --health-exit-on-unhealthy=true \ + CMD curl -f http://localhost/ || exit 1 + ``` + + The configurable options are as follows: + + 1. **--interval=DURATION**: interval between two consecutive command executions. The default value is **30s**. After a container is started, the first check is performed after the interval time. + 2. **--timeout=DURATION**: maximum duration for executing a single check command. If the execution times out, the command execution fails. The default value is **30s**. + 3. **--start-period=DURATION**: container initialization period. The default value is **0s**. During the initialization, the health check is also performed, while the health check failure is not counted into the maximum number of retries. However, if the health check is successful during initialization, the container is considered as started. All subsequent consecutive check failures are counted in the maximum number of retries. + 4. **--retries=N**. maximum number of retries for the health check. The default value is **3**. + 5. **--health-exit-on-unhealthy=BOOLEAN**: whether to kill a container when it is unhealthy. The default value is **false**. + 6. **CMD**: This option is mandatory. If **0** is returned after a command is run in a container, the command execution succeeds. If a value other than **0** is returned, the command execution fails. + + After **HEALTHCHECK** is configured, related configurations are written into the image configurations during image creation. You can run the **docker inspect** command to view the configurations. For example: + + ```json + "Healthcheck": { + "Test": [ + "CMD-SHELL", + "/test.sh" + ] + }, + ``` + +- Configurations during container creation: + + ```shell + docker run -itd --health-cmd "curl -f http://localhost/ || exit 1" --health-interval 5m --health-timeout 3s --health-exit-on-unhealthy centos bash + ``` + + The configurable options are as follows: + + 1. **--health-cmd**: This option is mandatory. If **0** is returned after a command is run in a container, the command execution succeeds. If a value other than **0** is returned, the command execution fails. + 2. **--health-interval**: interval between two consecutive command executions. The default value is **30s**. The upper limit of the value is the maximum value of Int64 \(unit: nanosecond\). + 3. **--health-timeout**: maximum duration for executing a single check command. If the execution times out, the command execution fails. The default value is **30s**. The upper limit of the value is the maximum value of Int64 \(unit: nanosecond\). + 4. **--health-start-period**: container initialization time. The default value is **0s**. The upper limit of the value is the maximum value of Int64 \(unit: nanosecond\). + 5. **--health-retries**: maximum number of retries for the health check. The default value is **3**. The maximum value is the maximum value of Int32. + 6. **--health-exit-on-unhealthy**: specifies whether to kill a container when it is unhealthy. The default value is **false**. + + After the container is started, the **HEALTHCHECK** configurations are written into the container configurations. You can run the **docker inspect** command to view the configurations. For example: + + ```json + "Healthcheck": { + "Test": [ + "CMD-SHELL", + "/test.sh" + ] + }, + ``` + +### Check Rules + +1. After a container is started, the container status is **health:starting**. +2. After the period specified by **start-period**, the **cmd** command is periodically executed in the container at the interval specified by **interval**. That is, after the command is executed, the command will be executed again after the specified period. +3. If the **cmd** command is successfully executed within the time specified by **timeout** and the return value is **0**, the check is successful. Otherwise, the check fails. If the check is successful, the container status changes to **health:healthy**. +4. If the **cmd** command fails to be executed for the number of times specified by **retries**, the container status changes to **health:unhealthy**, and the container continues the health check. +5. When the container status is **health:unhealthy**, the container status changes to **health:healthy** if a check succeeds. +6. If **--health-exit-on-unhealthy** is set, and the container exits due to reasons other than being killed \(the returned exit code is **137**\), the health check takes effect only after the container is restarted. +7. When the **cmd** command execution is complete or times out, Docker daemon will record the start time, return value, and standard output of the check to the configuration file of the container. A maximum of five latest records can be recorded. In addition, the configuration file of the container stores health check parameters. + +Run the **docker ps** command to view the container status. + +```console +[root@bac shm]# docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +7de2228674a2 testimg "bash" About an hour ago Up About an hour (unhealthy) cocky_davinci +``` + +When the container is running, the health check status is written into the container configurations. You can run the **docker inspect** command to view the configurations. + +```json +"Health": { + "Status": "healthy", + "FailingStreak": 0, + "Log": [ + { + "Start": "2018-03-07T07:44:15.481414707-05:00", + "End": "2018-03-07T07:44:15.556908311-05:00", + "ExitCode": 0, + "Output": "" + }, + { + "Start": "2018-03-07T07:44:18.557297462-05:00", + "End": "2018-03-07T07:44:18.63035891-05:00", + "ExitCode": 0, + "Output": "" + }, + ...... +} +``` + +> [!NOTE] **NOTE:** +> +>- A maximum of five health check status records can be stored in a container. The last five records are saved. +>- Only one health check configuration item can take effect in a container at a time. The later items configured in the Dockerfile will overwrite the earlier ones. Configurations during container creation will overwrite those in images. +>- In the Dockerfile, you can set **HEALTHCHECK NONE** to cancel the health check configuration in a referenced image. When a container is running, you can set **--no-healthcheck** to cancel the health check configuration in an image. Do not configure the health check and **--no-healthcheck** parameters at the same time during the startup. +>- After a container with configured health check parameters is started, if Docker daemon exits, the health check is not executed. After Docker daemon is restarted, the container health status changes to **starting**. Afterwards, the check rules are the same as above. +>- If health check parameters are set to **0** during container image creation, the default values are used. +>- If health check parameters are set to **0** during container startup, the default values are used. + +## Stopping and Deleting a Container + +Run the **docker stop** command to stop the container named **container1**. + +```console +[root@localhost ~]# docker stop container1 +``` + +Or run the **docker kill** command to kill and stop the container. + +```console +[root@localhost ~]# docker kill container1 +``` + +After the container is stopped, run the **docker rm** command to delete the container. + +```console +[root@localhost ~]# docker rm container1 +``` + +Or run the **docker rm -f** command to forcibly delete the container. + +```console +[root@localhost ~]# docker rm -f container1 +``` + +### Precautions + +- Do not run the **docker rm -f**_XXX_ command to delete a container. If you forcibly delete a container, the **docker rm** command ignores errors during the process, which may cause residual metadata of the container. If you delete an image in common mode and an error occurs during the deletion process, the deletion fails and no metadata remains. +- Do not run the **docker kill** command. The **docker kill** command sends related signals to service processes in a container. Depending on the signal processing policies of service processes in the container may cause the result that the signal execution cannot be performed as expected. +- A container in the restarting state may not stop immediately when you run the **docker stop** command. If a container uses the restart rules, when the container is in the restarting state, there is a low probability that the **docker stop** command on the container returns immediately. The container will still be restarted with the impact of the restart rule. +- Do not run the **docker restart** command to restart a container with the **--rm** parameter. When a container with the **--rm** parameter exits, the container is automatically deleted. If the container with the **--rm** parameter is restarted, exceptions may occur. For example, if both the **--rm** and **-ti** parameters are added when the container is started, the restart operation cannot be performed on the container, otherwise, the container may stop responding and cannot exit. + +### When Using docker stop/restart to Specify -t and t<0, Ensure That Applications in the Container Can Process Stop Signal + +Stop Principle: \(The stop process is called by **Restart**.\) + +1. The SIGTERM \(15\) signal can be sent to a container for the first time. +2. Wait for a period of time \(**t** entered by the user\). +3. If the container process still exists, send the SIGKILL \(9\) signal to forcibly kill the process. + +The meaning of the input parameter **t** \(unit: s\) is as follows: + +- **t** < 0: Wait for graceful stop. This setting is preferred when users are assured that their applications have a proper stop signal processing mechanism. +- **t** = 0: Do not wait and send **kill -9** to the container immediately. +- **t** \> 0: Wait for a specified period and send **kill -9** to the container if the container does not stop within the specified period. + +Therefore, if **t** is set to a value less than 0 \(for example, **t** = **-1**\), ensure that the container application correctly processes the SIGTERM signal. If the container ignores this signal, the container will be suspended when the **docker stop** command is run. + +### Manually Deleting Containers in the Dead State As the Underlying File System May Be Busy + +When Docker deletes a container, it stops related processes of the container, changes the container status to Dead, and then deletes the container rootfs. When the file system or devicemapper is busy, the last step of deleting rootfs fails. Run the **docker ps -a** command. The command output shows that the container is in the Dead state. Containers in the Dead state cannot be started again. Wait until the file system is not busy and run the **docker rm** command again to delete the containers. + +### In PID namespace Shared Containers, If Child Container Is in pause State, Parent Container Stops Responding and the docker run Command Cannot Be Executed + +When the **--pid** parameter is used to create the parent and child containers that share PID namespace, if any process in the child container cannot exit \(for example, it is in the D or pause state\) when the **docker stop** command is executed, the **docker stop** command of the parent container is waiting. You need to manually recover the process so that the command can be executed normally. + +In this case, run the **docker inspect** command on the container in the pause state to check whether the parent container corresponding to **PidMode** is the container that requires **docker stop**. For the required container, run the **docker unpause** command to cancel the pause state of the child container. Then, proceed to the next step. + +Generally, the possible cause is that the PID namespace corresponding to the container cannot be destroyed due to residual processes. If the problem persists, use Linux tools to obtain the residual processes and locate the cause of the process exit failure in PID namespace. After the problem is solved, the container can exit. + +- Obtain PID namespace ID in a container. + + ```shell + docker inspect --format={{.State.Pid}} CONTAINERID | awk '{print "/proc/"$1"/ns/pid"}' |xargs readlink + ``` + +- Obtain threads in the namespace. + + ```shell + ls -l /proc/*/task/*/ns/pid |grep -F PIDNAMESPACE_ID |awk '{print $9}' |awk -F \/ '{print $5}' + ``` + +## Querying Container Information + +In any case, the container status should not be determined based on whether the **docker** command is successfully returned. To view the container status, you are advised to use the following command: + +```shell +docker inspect +``` + +## Modification Operations + +### Precautions for Starting Multiple Processes in Container Using docker exec + +When the first **docker exec** command executed in a container is the **bash** command, ensure that all processes started by **exec** are stopped before you run the **exit** command. Otherwise, the device may stop responding when you run the **exit** command. To ensure that the process started by **exec** is still running in the background when the **exit** command is run, add **nohup** when starting the process. + +### Usage Conflict Between docker rename and docker stats _container\_name_ + +If you run the **docker stats**_container\_name_ command to monitor a container in real time, after the container is renamed by using **docker rename**, the name displayed after **docker stats** is executed is the original name instead of the renamed one. + +### Failed to Perform docker rename Operation on Container in restarting State + +When the rename operation is performed on a container in the restarting state, Docker modifies the container network configuration accordingly. The container in the restarting state may not be started and the network does not exist. As a result, the rename operation reports an error indicating that the sandbox does not exist. You are advised to rename only containers that are not in the restarting state. + +### docker cp + +1. When you run **docker cp** to copy files to a container, all operations on the container can be performed only after the **docker cp** command is executed. +2. When a container runs as a non-**root** user, and you run the **docker cp** command to copy a non-**root** file on the host to the container, the permission role of the file in the container changes to **root**. Different from the **cp** command, the **docker cp** command changes UIDs and GIDs of the files copied to the container to **root**. + +### docker login + +After the **docker login** command is executed, **user/passwd** encrypted by AES \(256-bit\) is saved in **/root/.docker/config.json**. At the same time, _root_**.docker/aeskey** \(permission 0600\) is generated to decrypt **user/passwd** in **/root/.docker/config.json**. Currently, AES key cannot be updated periodically. You need to manually delete the AES key for updating. After AES key is updated, you need to log in to Docker daemon again to push the AES key no matter whether Docker daemon is restarted. For example: + +```console +root@hello:~/workspace/dockerfile# docker login +Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. +Username: example Password: +Login Succeeded +root@hello:~/workspace/dockerfile# docker push example/empty +The push refers to a repository [docker.io/example/empty] +547b6288eb33: Layer already exists +latest: digest: sha256:99d4fb4ce6c6f850f3b39f54f8eca0bbd9e92bd326761a61f106a10454b8900b size: 524 +root@hello:~/workspace/dockerfile# rm /root/.docker/aeskey +root@hello:~/workspace/dockerfile# docker push example/empty +WARNING: Error loading config file:/root/.docker/config.json - illegal base64 data at input byte 0 +The push refers to a repository [docker.io/example/empty] +547b6288eb33: Layer already exists +errors: +denied: requested access to the resource is denied +unauthorized: authentication required +root@hello:~/workspace/dockerfile# docker login +Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. +Username: example +Password: +Login Succeeded +root@hello:~/workspace/dockerfile# docker push example/empty +The push refers to a repository [docker.io/example/empty] +547b6288eb33: Layer already exists +latest: digest: sha256:99d4fb4ce6c6f850f3b39f54f8eca0bbd9e92bd326761a61f106a10454b8900b size: 524 +``` diff --git a/docs/en/cloud/container_engine/docker_engine/container_management_2.md b/docs/en/cloud/container_engine/docker_engine/container_management_2.md new file mode 100644 index 0000000000000000000000000000000000000000..ff73352babce2f530b73e4ef2cb3a003b2fe13b2 --- /dev/null +++ b/docs/en/cloud/container_engine/docker_engine/container_management_2.md @@ -0,0 +1,1234 @@ +# Container Management + +## Overall Description + +Subcommands supported by Docker are classified into the following groups by function: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function

+

Command

+

Description

+

Host environment

+

version

+

Views the Docker version.

+

info

+

Views the Docker system and host environment information.

+

Container-related information

+

Container lifecycle management

+

create

+

Creates a container using an image.

+

run

+

Creates and runs a container using an image.

+

start

+

Starts a stopped container.

+

stop

+

Stops a running container.

+

restart

+

Restarts a container.

+

wait

+

Waits for a container to stop and prints the exit code.

+

rm

+

Deletes a container.

+

Container process management

+

pause

+

Suspends all processes in a container.

+

unpause

+

Resumes a suspended process in a container.

+

top

+

Views processes in a container.

+

exec

+

Executes a process in containers.

+

Container inspection tool

+

ps

+

Views running containers (without attaching any option).

+

logs

+

Displays the log information of a container.

+

attach

+

Connects standard input and output to a container.

+

inspect

+

Returns the bottom-layer information of a container.

+

port

+

Lists the port mappings between containers and hosts.

+

diff

+

Returns the changes made by the container compared with rootfs in the image.

+

cp

+

Copies files between containers and hosts.

+

export

+

Exports the file system in a container in a .tar package.

+

stats

+

Views the resource usage of a container in real time.

+

Images

+

Generates an image.

+

build

+

Creates an image using a Dockerfile.

+

commit

+

Creates an image based on the container rootfs.

+

import

+

Creates an image using the content in the .tar package as the file system.

+

load

+

Loads an image from the .tar package.

+

Image registry

+

login

+

Logs in to a registry.

+

logout

+

Logs out of a registry.

+

pull

+

Pulls an image from the registry.

+

push

+

Pushes an image to the registry.

+

search

+

Searches for an image in the registry.

+

Image management

+

images

+

Displays images in the system.

+

history

+

Displays the change history of an image.

+

rmi

+

Deletes an image.

+

tag

+

Adds a tag to an image.

+

save

+

Saves an image to a .tar package.

+

Others

+

events

+

Obtains real-time events from the Docker daemon.

+

rename

+

Renames a container.

+
+ +Some subcommands have some parameters, such as **docker run**. You can run the **docker**_command_**--help** command to view the help information of the command. For details about the command parameters, see the preceding command parameter description. The following sections describe how to use each command. + +## attach + +Syntax: **docker attach \[**_options_**\]** _container_ + +Function: Attaches an option to a running container. + +Parameter description: + +**--no-stdin=false**: Does not attach any STDIN. + +**--sig-proxy=true**: Proxies all signals of the container, except SIGCHLD, SIGKILL, and SIGSTOP. + +Example: + +```shell +$ sudo docker attach attach_test +root@2988b8658669:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var +``` + +## commit + +Syntax: **docker commit \[**_options_**\]**_container_**\[**_repository\[:tag\]_**\]** + +Function: creates an image from a container. + +Parameter description: + +**-a**, **--author=""**: specifies an author. + +**-m**, **--message=""**: specifies the submitted information. + +**-p**, **--pause=true**: pauses the container during submission. + +Example: + +Run the following command to start a container and submit the container as a new image: + +```shell +$ sudo docker commit test busybox:test +sha256:be4672959e8bd8a4291fbdd9e99be932912fe80b062fba3c9b16ee83720c33e1 + +$ sudo docker images +REPOSITORY TAG IMAGE ID CREATED SIZE +busybox latest e02e811dd08f 2 years ago 1.09MB +``` + +## cp + +Syntax: **docker cp \[**_options_**\]**_container_**:**_src\_path_ _dest\_path_**|-** + +**docker cp \[**_options_**\]** _src\_path_**|-** _container_**:**_dest\_path_ + +Function: Copies a file or folder from a path in a container to a path on the host or copies a file or folder from the host to the container: + +Precautions: The **docker cp** command does not support the copy of files in virtual file systems such as **/proc**, **/sys**, **/dev**, and **/tmp** in the container and files in the file systems mounted by users in the container. + +Parameter description: + +**-a**, **--archive**: Sets the owner of the file copied to the container to the **container** user \(**--user**\). + +**-L**, **--follow-link**: Parses and traces the symbolic link of a file. + +Example: + +Run the following command to copy the **/test** directory in the registry container to the **/home/**_aaa_ directory on the host: + +```shell +sudo docker cp registry:/test /home/aaa +``` + +## create + +Syntax: **docker create \[**_options_**\]** _image_ **\[**_command_**\] \[**_arg_**...\]** + +Function: Creates a container using an image file and return the ID of the container. After the container is created, run the **docker start** command to start the container. _options_ are used to configure the container during container creation. Some parameters will overwrite the container configuration in the image file. _command_ indicates the command to be executed during container startup. + +Parameter description: + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

-a --attach=[]

+

Attaches the console to the STDIN, STDOUT, and STDERR of the process in the container.

+

--name=""

+

Name of a container.

+

--add-host=[host:ip]

+

Adds a mapping between the host name and IP address to the /etc/hosts in the container.

+

For example, --add-host=test:10.10.10.10.

+

--annotation

+

Sets annotations for the container. For example, set the native.umask parameter.

+
--annotation native.umask=normal #The umask value of the started container is 0022.
+--annotation native.umask=secure #The umask value of the started container is 0027.
+

If this parameter is not set, the umask configuration in dockerd is used.

+

--blkio-weight

+

Relative weight of blockio, which ranges from 10 to 1000.

+

--blkio-weight-device=[]

+

Blockio weight, which configures the relative weight.

+

-c, --cpu-shares=0

+

Relative weight of the host CPU obtained by the container. This parameter can be used to obtain a higher priority. By default, all containers obtain the same CPU priority.

+

--cap-add=[]

+

Adds Linux functions.

+

--cap-drop=[]

+

Clears Linux functions.

+

--cgroup-parent

+

cgroup parent directory for the container.

+

--cidfile=""

+

Writes the container ID to a specified file.

+

For example: --cidfile=/home/cidfile-test writes the container ID to the /home/cidfile-test file.

+

--cpu-period

+

CPU CFS period.

+

The default value is 100 ms. Generally, --cpu-period and --cpu-quota are used together. For example, --cpu-period=50000 --cpu-quota=25000 indicates that if there is one CPU, the container can obtain 50% of the CPU every 50 ms.

+

--cpus=0.5 has the same effect.

+

--cpu-quota

+

CPU CFS quota. The default value is 0, indicating that there is no restriction on the quota.

+

--cpuset-cpus

+

Number of CPUs (0-3, 0, 1) that can be used by processes in the container. By default, there is no restriction on this parameter.

+

--cpuset-mems

+

Memory nodes (0-3, 0, 1) for running processes in the container. This parameter is valid only for the NUMA system.

+

--device=[]

+

Adds the host device to a container, for example, --device=/dev/sdc:/dev/xvdc:rwm.

+

--dns=[]

+

Forcibly enables the container to use the specified DNS server. For example, --dns=114.114.xxx.xxx indicates that nameserver 114.114.xxx.xxx is written to /etc/resolv.conf of the created container and the original content is overwritten.

+

--dns-opt=[]

+

DNS options.

+

--dns-search=[]

+

Forcibly searches DNS search domain name used by a container.

+

-e, --env=[]

+

Sets environment variable for the container.

+

--env=[KERNEL_MODULES=]:

+

Inserts a specified module into a container. Currently, only the modules on the host can be inserted. After the container is deleted, the modules still reside on the host, and the --hook-spec option must be configured for the container. The following are valid parameter formats:

+

KERNEL_MODULERS=

+

KERNEL_MODULERS=a

+

KERNEL_MODULERS=a,b

+

KERNEL_MODULERS=a,b,

+

--entrypoint=""

+

Overwrites the original entrypoint in the image. The entrypoint is used to set the command executed when the container is started.

+

--env-file=[]

+

Reads environment variables from a file. Multiple environment variables are separated by lines in the file. For example: --env-file=/home/test/env indicates multiple environment variables are stored in the env file.

+

--expose=[]

+

Enables an internal port of a container. The -P option described in the following section maps the enabled port to a port on the host.

+

--group-add=[]

+

Adds a specified container to an additional group.

+

-h, --hostname=""

+

Host name.

+

--health-cmd

+

Container health check command.

+

--health-interval

+

Interval between two consecutive command executions. The default value is 30s.

+

--health-timeout

+

Maximum duration for executing a single check command. If the execution times out, the command fails to be executed. The default value is 30s.

+

--health-start-period

+

Interval between the time when the container is started and the time when the first health check is performed. The default value is 0s.

+

--health-retries

+

Maximum number of retries after a health check fails. The default value is 3.

+

--health-exit-on-unhealthy

+

Specifies whether to stop a container when the container is unhealthy. The default value is false.

+

--host-channel=[]

+

Sets a channel for communication between processes in the container and the host, in host path:container path:rw/ro:size limit format.

+

-i, --interactive=false

+

Enables STDIN even if it is not attached.

+

--ip

+

IPv4 address of a container.

+

--ip6

+

IPv6 address of a container.

+

--ipc

+

IPC namespace of a container.

+

--isolation

+

Container isolation policy.

+

-l, --label=[]

+

Label of a container.

+

--label-file=[]

+

Obtains the label from the file.

+

--link=[]

+

Links to another container. This parameter adds environment variables of the IP address and port number of the linked container to the container and adds a mapping to the /etc/hosts file, for example, --link=name:alias.

+

--log-driver

+

Log driver of a container.

+

--log-opt=[]

+

Log driver option.

+

-m, --memory=""

+

Memory limit of a container. The format is numberoptional unit, and available units are b, k, m, and g. The minimum value of this parameter is 4m.

+

--mac-address

+

MAC address of a container, for example, 92:d0:c6:0a:xx:xx.

+

--memory-reservation

+

Container memory limit. The default value is the same as that of --memory. --memory is a hard limit, and --memory-reservation is a soft limit. When the memory usage exceeds the preset value, the memory usage is dynamically adjusted (the system attempts to reduce the memory usage to a value less than the preset value when reclaiming the memory). However, the memory usage may exceed the preset value. Generally, this parameter can be used together with --memory. The value must be less than the preset value of --memory.

+

--memory-swap

+

Total usage of the common memory and swap partition. -1 indicates no restriction is set on the usage. If this parameter is not set, the swap partition size is twice the value of --memory. That is, the swap partition can use the same amount of memory as --memory.

+

--memory-swappiness=-1

+

Time when the container uses the swap memory. The value ranges from 0 to 100, in percentage.

+

--net="bridge"

+

Network mode of the container. Docker 1.3.0 has the following network modes: bridge, host, none, and container:name|id. The default value is bridge.

+
  • bridge: Creates a network stack on the bridge when the Docker daemon is started.
  • host: Uses the network stack of the host in the container.
  • none: Does not use networks.
  • container:name|id: Reuses the network stack of another container.
+

--no-healthcheck

+

Does not perform health check for a container.

+

--oom-kill-disable

+

Disables the OOM killer. You are advised not to set this parameter if the -m parameter is not set.

+

--oom-score-adj

+

Adjusts the OOM rule of a container. The value ranges from -1000 to 1000.

+

-P, --publish-all=false

+

Maps all enabled ports of a container to host ports. Containers can be accessed through the host ports. You can run the docker port command to view the mapping between container ports and host ports.

+

-p, --publish=[]

+

Maps a port in a container to a port on the host, in IP address:host port:container port | IP address::container port | host port:container port | container port format. If no IP address is configured, accesses of all NICs on the host is listened. If no host port is configured, the host port is automatically allocated.

+

--pid

+

PID namespace of a container.

+

--privileged=false

+

Grants extra permission to a container. If the --privileged option is used, the container can access all devices on the host.

+

--restart=""

+

Configures restart rule when the container exits. Currently, version 1.3.1 supports the following rules:

+
  • no: indicates that the container is not restarted when it is stopped.
  • on-failure: indicates that the container is restarted when the container exit code is not 0. This rule can be used to add the maximum number of restart times, for example, on-failure:5, indicating that the container can be restarted for a maximum of five times.
  • always: indicates the container is exited regardless of the exit code.
+

--read-only

+

Mounts the root file system of the container in read-only mode.

+

--security-opt=[]

+

Container security rule.

+

--shm-size

+

Size of the /dev/shm device. The default value is 64M.

+

--stop-signal=SIGTERM

+

Container stop signal. The default value is SIGTERM.

+

-t, --tty=false

+

Allocates a pseudo terminal.

+

--tmpfs=[]

+

Mounts the tmpfs directory.

+

-u, --user=""

+

User name or user ID.

+

--ulimit=[]

+

ulimit option.

+

--userns

+

User namespace of a container.

+

-v, --volume=[]

+

Mounts a directory of the host to the container, or create a volume in the container. For example, -v /home/test:/home mounts the /home/test directory of the host to the /home directory of the container, and -v /tmp creates the tmp folder in the root directory of the container, the folder can be shared by other containers using the --volumes-from option. The host directory cannot be mounted to the /proc subdirectory of the container. Otherwise, an error is reported when the container is started.

+

--volume-driver

+

Data volume driver of the container. This parameter is optional.

+

--volumes-from=[]

+

Mounts the volume of another container to the current container to share the volume. For example, -volumes-from container_name mounts the volume of container_name to the current container. -v and --volumes-from=[] are two very important options for data backup and live migration.

+

-w, --workdir=""

+

Specifies the working directory of the container.

+
+ +Example: + +Run the following command to create a container named **busybox** and run the **docker start** command to start the container. + +```shell +sudo docker create -ti --name=busybox busybox /bin/bash +``` + +## diff + +Syntax: **docker diff** _container_ + +Function: Checks the differences between containers and determines the changes have been made compared with the container creation. + +Parameter description: none. + +Example: + +```shell +$ sudo docker diff registry +C /root +A /root/.bash_history +A /test +``` + +## exec + +Syntax: **docker exec \[**_options_**\]** _container_ _command_ **\[**_arg..._**\]** + +Function: Runs a command in the container. + +Parameter description: + +**-d** and **--detach=false**: Run in the background. + +**-i** and **--interactive=false**: Keep the STDIN of the container enabled. + +**-t** and **--tty=false**: Allocate a virtual terminal. + +**--privileged**: Executes commands in privilege mode. + +**-u** and **--user**: Specifies the user name or UID. + +Example: + +```shell +$ sudo docker exec -ti exec_test ls +bin etc lib media opt root sbin sys tmp var +dev home lib64 mnt proc run srv test usr +``` + +## export + +Syntax: **docker export** _container_ + +Function: Exports the file system content of a container to STDOUT in .tar format. + +Parameter description: none. + +Example: + +Run the following commands to export the contents of the container named **busybox** to the **busybox.tar** package: + +```shell +$ sudo docker export busybox > busybox.tar +$ ls +busybox.tar +``` + +## inspect + +Syntax: **docker inspect \[**_options_**\]**_container_**|**_image_**\[**_container_|_image..._**\]** + +Function: Returns the underlying information about a container or image. + +Parameter description: + +**-f** and **--format=""**: Output information in a specified format. + +**-s** and **--size**: Display the total file size of the container when the query type is container. + +**--type**: Returns the JSON format of the specified type. + +**-t** and **--time=120**: Timeout interval, in seconds. If the **docker inspect** command fails to be executed within the timeout interval, the system stops waiting and immediately reports an error. The default value is **120**. + +Example: + +1. Run the following command to return information about a container: + + ```shell + $ sudo docker inspect busybox_test + [ + { + "Id": "9fbb8649d5a8b6ae106bb0ac7686c40b3cbd67ec2fd1ab03e0c419a70d755577", + "Created": "2019-08-28T07:43:51.27745746Z", + "Path": "bash", + "Args": [], + "State": { + "Status": "running", + "Running": true, + "Paused": false, + "Restarting": false, + "OOMKilled": false, + "Dead": false, + "Pid": 64177, + "ExitCode": 0, + "Error": "", + "StartedAt": "2019-08-28T07:43:53.021226383Z", + "FinishedAt": "0001-01-01T00:00:00Z" + }, + ...... + ``` + +2. Run the following command to return the specified information of a container in a specified format. The following uses the IP address of the busybox\_test container as an example. + + ```shell + $ sudo docker inspect -f {{.NetworkSettings.IPAddress}} busybox_test + 172.17.0.91 + ``` + +## logs + +Syntax: **docker logs \[**_options_**\]** _container_ + +Function: Captures logs in a container that is in the **running** or **stopped** state. + +Parameter description: + +**-f** and **--follow=false**: Print logs in real time. + +**-t** and **--timestamps=false**: Display the log timestamp. + +**--since**: Displays logs generated after the specified time. + +**--tail="all"**: Sets the number of lines to be displayed. By default, all lines are displayed. + +Example: + +1. Run the following command to check the logs of the jaegertracing container where a jaegertracing service runs: + + ```shell + $ sudo docker logs jaegertracing + {"level":"info","ts":1566979103.3696961,"caller":"healthcheck/handler.go:99","msg":"Health Check server started","http-port":14269,"status":"unavailable"} + {"level":"info","ts":1566979103.3820567,"caller":"memory/factory.go:55","msg":"Memory storage configuration","configuration":{"MaxTraces":0}} + {"level":"info","ts":1566979103.390773,"caller":"tchannel/builder.go:94","msg":"Enabling service discovery","service":"jaeger-collector"} + {"level":"info","ts":1566979103.3908608,"caller":"peerlistmgr/peer_list_mgr.go:111","msg":"Registering active peer","peer":"127.0.0.1:14267"} + {"level":"info","ts":1566979103.3922884,"caller":"all-in-one/main.go:186","msg":"Starting agent"} + {"level":"info","ts":1566979103.4047635,"caller":"all-in-one/main.go:226","msg":"Starting jaeger-collector TChannel server","port":14267} + {"level":"info","ts":1566979103.404901,"caller":"all-in-one/main.go:236","msg":"Starting jaeger-collector HTTP server","http-port":14268} + {"level":"info","ts":1566979103.4577134,"caller":"all-in-one/main.go:256","msg":"Listening for Zipkin HTTP traffic","zipkin.http-port":9411} + ``` + +2. Add **-f** to the command to output the logs of the jaegertracing container in real time. + + ```shell + $ sudo docker logs -f jaegertracing + {"level":"info","ts":1566979103.3696961,"caller":"healthcheck/handler.go:99","msg":"Health Check server started","http-port":14269,"status":"unavailable"} + {"level":"info","ts":1566979103.3820567,"caller":"memory/factory.go:55","msg":"Memory storage configuration","configuration":{"MaxTraces":0}} + {"level":"info","ts":1566979103.390773,"caller":"tchannel/builder.go:94","msg":"Enabling service discovery","service":"jaeger-collector"} + {"level":"info","ts":1566979103.3908608,"caller":"peerlistmgr/peer_list_mgr.go:111","msg":"Registering active peer","peer":"127.0.0.1:14267"} + {"level":"info","ts":1566979103.3922884,"caller":"all-in-one/main.go:186","msg":"Starting agent"} + ``` + +## pause/unpause + +Syntax: **docker pause** _container_ + +**docker unpause** _container_ + +Function: The two commands are used in pairs. The **docker pause** command suspends all processes in a container, and the **docker unpause** command resumes the suspended processes. + +Parameter description: none. + +Example: + +The following uses a container where the docker registry service runs as an example. After the **docker pause** command is executed to pause the process of the container, access of the registry service by running the **curl** command is blocked. You can run the **docker unpause** command to resume the suspended registry service. The registry service can be accessed by running the **curl** command. + +1. Run the following command to start a registry container: + + ```shell + sudo docker run -d --name pause_test -p 5000:5000 registry + ``` + + Run the **curl** command to access the service. Check whether the status code **200 OK** is returned. + + ```shell + sudo curl -v 127.0.0.1:5000 + ``` + +2. Run the following command to stop the processes in the container: + + ```shell + sudo docker pause pause_test + ``` + + Run the **curl** command to access the service to check whether it is blocked and wait until the service starts. + +3. Run the following command to resume the processes in the container: + + ```shell + sudo docker unpause pause_test + ``` + + The cURL access in step 2 is restored and the request status code **200 OK** is returned. + +## port + +Syntax: **docker port**_container_ **\[**_private\_port\[/proto\]_**\]** + +Function: Lists the port mapping of a container or queries the host port where a specified port resides. + +Parameter description: none. + +Example: + +1. Run the following command to list all port mappings of a container: + + ```shell + $ sudo docker port registry + 5000/tcp -> 0.0.0.0.:5000 + ``` + +2. Run the following command to query the mapping of a specified container port: + + ```shell + $ sudo docker port registry 5000 + 0.0.0.0.:5000 + ``` + +## ps + +Syntax: **docker ps \[**_options_**\]** + +Function: Lists containers in different states based on different parameters. If no parameter is added, all running containers are listed. + +Parameter description: + +**-a** and **--all=false**: Display the container. + +**-f** and **--filter=\[\]**: Filter values. The available options are: **exited=**_int_ \(exit code of the container\) **status=**_restarting|running|paused|exited_ \(status code of the container\), for example, **-f status=running**: lists the running containers. + +**-l** and **--latest=false**: List the latest created container. + +**-n=-1**: Lists the latest created _n_ containers. + +**--no-trunc=false**: Displays all 64-bit container IDs. By default, 12-bit container IDs are displayed. + +**-q** and **--quiet=false**: Display the container ID. + +**-s** and **--size=false**: Display the container size. + +Example: + +1. Run the following command to lists running containers: + + ```shell + sudo docker ps + ``` + +2. Run the following command to display all containers: + + ```shell + sudo docker ps -a + ``` + +## rename + +Syntax: **docker rename OLD\_NAME NEW\_NAME** + +Function: Renames a container. + +Example: + +Run the **docker run** command to create and start a container, run the **docker rename** command to rename the container, and check whether the container name is changed. + +```shell +$ sudo docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +b15976967abb busybox:latest "bash" 3 seconds ago Up 2 seconds festive_morse +$ sudo docker rename festive_morse new_name +$ sudo docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +b15976967abb busybox:latest "bash" 34 seconds ago Up 33 seconds new_name +``` + +## restart + +Syntax: **docker restart \[**_options_**\]** _container_ **\[**_container..._**\]** + +Function: Restarts a running container. + +Parameter description: + +**-t** and **--time=10**: Number of seconds to wait for the container to stop before the container is killed. If the container has stopped, restart the container. The default value is **10**. + +Example: + +```shell +sudo docker restart busybox +``` + +>[!NOTE] **NOTE:** +>During the container restart, if a process in the **D** or **Z** state exists in the container, the container may fail to be restarted. In this case, you need to analyze the cause of the **D** or **Z** state of the process in the container. Restart the container after the **D** or **Z** state of the process in the container is released. + +## rm + +Syntax: **docker rm \[**_options_**\]**_container_ **\[**_container..._**\]** + +Function: Deletes one or more containers. + +Parameter description: + +**-f** and **--force=false**: Forcibly delete a running container. + +**-l** and **--link=false**: Remove the specified link and do not remove the underlying container. + +**-v** and **--volumes=false**: Remove the volumes associated with the container. + +Example: + +1. Run the following command to delete a stopped container: + + ```shell + sudo docker rm test + ``` + +2. Run the following command to delete a running container: + + ```shell + sudo docker rm -f rm_test + ``` + +## run + +Syntax: **docker run \[**_options_**\]**_image_ **\[**_command_**\] \[**_arg_**...\]** + +Function: Creates a container from a specified image \(if the specified image does not exist, an image is downloaded from the official image registry\), starts the container, and runs the specified command in the container. This command integrates the **docker create**, **docker start**, and **docker exec** commands. + +Parameter description: \(The parameters of this command are the same as those of the **docker create** command. For details, see the parameter description of the **docker create** command. Only the following two parameters are different.\) + +**--rm=false**: Specifies the container to be automatically deleted when it exits. + +**-v**: Mounts a local directory or an anonymous volume to the container. Note: When a local directory is mounted to a container with a SELinux security label, do not add or delete the local directory at the same time. Otherwise, the security label may not take effect. + +**--sig-proxy=true**: Receives proxy of the process signal. SIGCHLD, SIGSTOP, and SIGKILL do not use the proxy. + +Example: + +Run the busybox image to start a container and run the **/bin/sh** command after the container is started: + +```shell +sudo docker run -ti busybox /bin/sh +``` + +## start + +Syntax: **docker start \[**_options_**\]** _container_ **\[**_container_**...\]** + +Function: Starts one or more containers that are not running. + +Parameter description: + +**-a** and **--attach=false**: Attach the standard output and error output of a container to STDOUT and STDERR of the host. + +**-i** and **--interactive=false**: Attach the standard input of the container to the STDIN of the host. + +Example: + +Run the following command to start a container named **busybox** and add the **-i -a** to the command to add standard input and output. After the container is started, directly enter the container. You can exist the container by entering **exit**. + +If **-i -a** is not added to the command when the container is started, the container is started in the background. + +```shell +sudo docker start -i -a busybox +``` + +## stats + +Syntax: **docker stats \[**_options_**\] \[**_container_**...\]** + +Function: Continuously monitors and displays the resource usage of a specified container. \(If no container is specified, the resource usage of all containers is displayed by default.\) + +Parameter description: + +**-a**, and **--all**: Display information about all containers. By default, only running containers are displayed. + +**--no-stream**: Displays only the first result and does not continuously monitor the result. + +Example: + +Run the **docker run** command to start and create a container, and run the **docker stats** command to display the resource usage of the container: + +```shell +$ sudo docker stats +CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS +2e242bcdd682 jaeger 0.00% 77.08MiB / 125.8GiB 0.06% 42B / 1.23kB 97.9MB / 0B 38 +02a06be42b2c relaxed_chandrasekhar 0.01% 8.609MiB / 125.8GiB 0.01% 0B / 0B 0B / 0B 10 +deb9e49fdef1 hardcore_montalcini 0.01% 12.79MiB / 125.8GiB 0.01% 0B / 0B 0B / 0B 9 +``` + +## stop + +Syntax: **docker stop \[**_options_**\]** _container_ **\[**_container_**...\]** + +Function: Sends a SIGTERM signal to a container and then sends a SIGKILL signal to stop the container after a certain period. + +Parameter description: + +**-t** and **--time=10**: Number of seconds that the system waits for the container to exit before the container is killed. The default value is **10**. + +Example: + +```shell +sudo docker stop -t=15 busybox +``` + +## top + +Syntax: **docker top** _container_ **\[**_ps options_**\]** + +Function: Displays the processes running in a container. + +Parameter description: none. + +Example: + +Run the top\_test container and run the **top** command in the container. + +```shell +$ sudo docker top top_test +UID PID PPID C STIME TTY TIME CMD +root 70045 70028 0 15:52 pts/0 00:00:00 bash +``` + +The value of **PID** is the PID of the process in the container on the host. + +## update + +Syntax: **docker update \[**_options_**\]** _container_ **\[**_container_**...\]** + +Function: Hot changes one or more container configurations. + +Parameter description: + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

--accel=[]

+

Configures one or more container accelerators.

+

--blkio-weight

+

Relative weight of the container blockio. The value ranges from 10 to 1000.

+

--cpu-shares

+

Relative weight of the host CPU obtained by the container. This parameter can be used to obtain a higher priority. By default, all containers obtain the same CPU priority.

+

--cpu-period

+

CPU CFS period.

+

The default value is 100 ms. Generally, --cpu-period and --cpu-quota are used together. For example, --cpu-period=50000 --cpu-quota=25000 indicates that if there is one CPU, the container can obtain 50% of the CPU every 50 ms.

+

--cpu-quota

+

CPU CFS quota. The default value is 0, indicating that there is no restriction on the quota.

+

--cpuset-cpus

+

Number of CPUs (0-3, 0, 1) that can be used by processes in the container. By default, there is no restriction on this parameter.

+

--cpuset-mems

+

Memory nodes (0-3, 0, 1) for running processes in the container. This parameter is valid only for the NUMA system.

+

--kernel-memory=""

+

Kernel memory limit of a container. The format is numberoptional unit, and available units are b, k, m, and g.

+

-m, --memory=""

+

Memory limit of a container. The format is numberoptional unit, and available units are b, k, m, and g. The minimum value of this parameter is 4m.

+

--memory-reservation

+

Container memory limit. The default value is the same as that of --memory. --memory is a hard limit, and --memory-reservation is a soft limit. When the memory usage exceeds the preset value, the memory usage is dynamically adjusted (the system attempts to reduce the memory usage to a value less than the preset value when reclaiming the memory). However, the memory usage may exceed the preset value. Generally, this parameter can be used together with --memory. The value must be less than the preset value of --memory.

+

--memory-swap

+

Total usage of the common memory and swap partition. -1 indicates no restriction is set on the usage. If this parameter is not set, the swap partition size is twice the value of --memory. That is, the swap partition can use the same amount of memory as --memory.

+

--restart=""

+

Configures restart rule when the container exits. Currently, version 1.3.1 supports the following rules:

+
  • no: indicates that the container is not restarted when it is stopped.
  • on-failure: indicates that the container is restarted when the container exit code is not 0. This rule can be used to add the maximum number of restart times, for example, on-failure:5, indicating that the container can be restarted for a maximum of five times.
  • always: indicates the container is exited regardless of the exit code.
+

--help

+

Help information.

+
+ +Example: + +Run the following command to change the CPU and memory configurations of the container named **busybox**, including changing the relative weight of the host CPU obtained by the container to **512**, the CPU cores that can be run by processes in the container to **0,1,2,3**, and the memory limit for running the container to **512 m**. + +```shell +sudo docker update --cpu-shares 512 --cpuset-cpus=0,3 --memory 512m ubuntu +``` + +## wait + +Syntax: **docker wait** _container_ **\[**_container..._**\]** + +Function: Waits for a container to stop and print the exit code of the container: + +Parameter description: none. + +Example: + +Run the following command to start a container named **busybox**: + +```shell +sudo docker start -i -a busybox +``` + +Run the **docker wait** command: + +```shell +$ sudo docker wait busybox +0 +``` + +Wait until the busybox container exits. After the busybox container exits, the exit code **0** is displayed. diff --git a/docs/en/cloud/container_engine/docker_engine/image_management_1.md b/docs/en/cloud/container_engine/docker_engine/image_management_1.md new file mode 100644 index 0000000000000000000000000000000000000000..e74e8b97ca1059306b839d4f70d2bba9630fa36e --- /dev/null +++ b/docs/en/cloud/container_engine/docker_engine/image_management_1.md @@ -0,0 +1,57 @@ +# Image Management + +## Creating an Image + +You can use the **docker pull**, **docker build**, **docker commit**, **docker import**, or **docker load** command to create an image. For details about how to use these commands, see Image Management. + +### Precautions + +1. Do not concurrently run the **docker load** and **docker rmi** commands. If both of the following conditions are met, concurrency problems may occur: + + - An image exists in the system. + - The docker rmi and docker load operations are concurrently performed on an image. + + Therefore, avoid this scenario. \(All concurrent operations between the image creation operations such as running the **tag**, **build**, and **load**, and **rmi** commands, may cause similar errors. Therefore, do not concurrently perform these operations with **rmi**.\) + +2. If the system is powered off when docker operates an image, the image may be damaged. In this case, you need to manually restore the image. + + When the docker operates images \(using the **pull**, **load**, **rmi**, **build**, **combine**, **commit**, or **import** commands\), image data operations are asynchronous, and image metadata is synchronous. Therefore, if the system power is off when not all image data is updated to the disk, the image data may be inconsistent with the metadata. Users can view images \(possibly none images\), but cannot start containers, or the started containers are abnormal. In this case, run the **docker rmi** command to delete the image and perform the previous operations again. The system can be recovered. + +3. Do not store a large number of images on nodes in the production environment. Delete unnecessary images in time. + + If the number of images is too large, the execution of commands such as **docker image** is slow. As a result, the execution of commands such as **docker build** or **docker commit** fails, and the memory may be stacked. In the production environment, delete unnecessary images and intermediate process images in time. + +4. When the **--no-parent** parameter is used to build images, if multiple build operations are performed at the same time and the FROM images in the Dockerfile are the same, residual images may exist. There are two cases: + - If FROM images are incomplete, the images generated when images of FROM are running may remain. Names of the residual images are similar to **base\_v1.0.0-app\_v2.0.0**, or they are none images. + - If the first several instructions in the Dockerfile are the same, none images may remain. + +### None Image May Be Generated + +1. A none image is the top-level image without a tag. For example, the image ID of **ubuntu** has only one tag **ubuntu**. If the tag is not used but the image ID is still available, the image ID becomes a none image. +2. An image is protected because the image data needs to be exported during image saving. However, if a deletion operation is performed, the image may be successfully untagged and the image ID may fail to be deleted \(because the image is protected\). As a result, the image becomes a none image. +3. If the system is powered off when you run the **docker pull** command or the system is in panic, a none image may be generated. To ensure image integrity, you can run the **docker rmi** command to delete the image and then restart it. +4. If you run the **docker save** command to save an image and specify the image ID as the image name, the loaded image does not have a tag and the image name is **none**. + +### A Low Probability That Image Fails to Be Built If the Image Is Deleted When Being Built + +Currently, the image build process is protected by reference counting. After an image is built, reference counting of the image is increased by 1 \(holdon operation\). Once the holdon operation is successful, the image will not be deleted. However, there is a low probability that before the holdon operation is performed, the image can still be deleted, causing the image build failure. + +## Viewing Images + +Run the following command to view the local image list: + +```shell +docker images +``` + +## Deleting Images + +Run the following command to remove an image (**image** indicates the actual image name). + +```shell +docker rmi image +``` + +### Precautions + +Do not run the **docker rmi -f** _XXX_ command to delete images. If you forcibly delete an image, the **docker rmi** command ignores errors during the process, which may cause residual metadata of containers or images. If you delete an image in common mode and an error occurs during the deletion process, the deletion fails and no metadata remains. diff --git a/docs/en/cloud/container_engine/docker_engine/image_management_2.md b/docs/en/cloud/container_engine/docker_engine/image_management_2.md new file mode 100644 index 0000000000000000000000000000000000000000..48187bbb9baec41b99422423727fc25596cb926c --- /dev/null +++ b/docs/en/cloud/container_engine/docker_engine/image_management_2.md @@ -0,0 +1,453 @@ +# Image Management + +## build + +Syntax: **docker build \[**_options_**\]** _path_ **|** _URL_ **| -** + +Function: Builds an image using the Dockerfile in the specified path. + +Parameter description: Common parameters are as follows. For details about more parameters, see the **docker help build** command section. + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

--force-rm=false

+

Deletes containers generated during the build process even if the build is not successful.

+

--no-cache=false

+

Builds cache without using cache.

+

-q, --quiet=false

+

Prevents the redundant information generation during the build.

+

--rm=true

+

Deletes the container generated during the build after the build is successful.

+

-t, --tag=""

+

Tag name of the image generated during the build.

+

--build-arg=[]

+

Configures the build parameters.

+

--label=[]

+

Image-related parameters. The description of each parameter is similar to that of the create command.

+

--isolation

+

Container isolation method.

+

--pull

+

Obtains the latest image during the build.

+
+ +**Dockerfile Command** + +Dockerfile is used to describe how to build an image and automatically build a container. The format of all **Dockerfile** commands is _instruction_ _arguments_. + +**FROM Command** + +Syntax: **FROM** _image_ or **FROM** _image_:_tag_ + +Function: Specifies a basic image, which is the first command for all Dockerfile files. If the tag of a basic image is not specified, the default tag name **latest** is used. + +**RUN Command** + +Syntax: **RUN** _command_ \(for example, **run in a shell - \`/bin/sh -c\`**\) or + +**RUN \[**_executable_, _param1_, _param2_ ... **\]** \(in the **exec** command format\) + +Function: Runs any command in the image specified by the **FROM** command and then commits the result. The committed image can be used in later commands. The **RUN** command is equivalent to: + +**docker run** _image_ _command_ + +**docker commit** _container\_id_ + +**Remarks** + +The number sign \(\#\) is used to comment out. + +**MAINTAINER Command** + +Syntax: **MAINTAINER**_name_ + +Function: Specifies the name and contact information of the maintenance personnel. + +**ENTRYPOINT Command** + +Syntax: **ENTRYPOINT cmd **_param1 param2..._ or **ENTRYPOINT \[**_"cmd", "param1", "param2"..._**\]** + +Function: Configures the command to be executed during container startup. + +**USER Command** + +Syntax: **USER** _name_ + +Function: Specifies the running user of memcached. + +**EXPOSE Command** + +Syntax: **EXPOSE **_port_** \[**_port_**...\]** + +Function: Enables one or more ports for images. + +**ENV Command** + +Syntax: **ENV** _key value_ + +Function: Configures environment variables. After the environment variables are configured, they can be used by subsequent **RUN** commands. + +**ADD Command** + +Syntax: **ADD** _src dst_ + +Function: Copies a file from the _src_ directory to the _dest_ directory of a container. _src_ indicates the relative path of the source directory to be built. It can be the path of a file or directory, or a remote file URL. _dest_ indicates the absolute path of the container. + +**VOLUME Command** + +Syntax: **VOLUME \["**_mountpoint_**"\]** + +Function: Creates a mount point for sharing a directory. + +**WORKDIR Command** + +Syntax: **workdir** _path_ + +Function: Runs the **RUN**, **CMD**, and **ENTRYPOINT** commands to set the current working path. The current working path can be set multiple times. If the current working path is a relative path, it is relative to the previous **WORKDIR** command. + +**CMD command** + +Syntax: **CMD \[**_"executable","param1","param2"_**\]** \(This command is similar to the **exec** command and is preferred.\) + +**CMD \["**_param1_**","**_param2_**"\]** \(The parameters are the default parameters for ENTRYPOINT.\) + +**CMD** _command_ _param1_ _param2_ \(This command is similar to the **shell** command.\) + +Function: A Dockerfile can contain only one CMD command. If there are multiple CMD commands, only the last one takes effect. + +**ONBUILD Commands** + +Syntax: **ONBUILD \[**_other commands_**\]** + +Function: This command is followed by other commands, such as the **RUN** and **COPY** commands. This command is not executed during image build and is executed only when the current image is used as the basic image to build the next-level image. + +The following is a complete example of the Dockerfile command that builds an image with the sshd service installed. + + + + + +
FROM busybox
+ENV  http_proxy http://192.168.0.226:3128
+ENV  https_proxy https://192.168.0.226:3128
+RUN apt-get update && apt-get install -y openssh-server
+RUN mkdir -p /var/run/sshd
+EXPOSE 22
+ENTRYPOINT /usr/sbin/sshd -D
+
+ +Example: + +1. Run the following command to build an image using the preceding Dockerfile: + + ```shell + sudo docker build -t busybox:latest + ``` + +2. Run the following command to view the generated image: + + ```shell + docker images | grep busybox + ``` + +## history + +Syntax: **docker history \[**_options_**\]** _image_ + +Function: Displays the change history of an image. + +Parameter description: + +-H, --human=true + +**--no-trunc=false**: Does not delete any output. + +**-q** and **--quiet=false**: Display only IDs. + +Example: + +```shell +$ sudo docker history busybox:test +IMAGE CREATED CREATED BY SIZE COMMENT +be4672959e8b 15 minutes ago bash 23B +21970dfada48 4 weeks ago 128MB Imported from - +``` + +## images + +Syntax: **docker images \[**_options_**\] \[**_name_**\]** + +Function: Lists existing images. The intermediate image is not displayed if no parameter is configured. + +Parameter description: + +**-a** and **--all=false**: Display all images. + +**-f** and **--filter=\[\]**: Specify a filtering value, for example, **dangling=true**. + +**--no-trunc=false**: Does not delete any output. + +**-q** and **--quiet=false**: Display only IDs. + +Example: + +```shell +$ sudo docker images +REPOSITORY TAG IMAGE ID CREATED SIZE +busybox latest e02e811dd08f 2 years ago 1.09MB +``` + +## import + +Syntax: **docker import URL|- \[**_repository_**\[**_:tag_**\]\]** + +Function: Imports a .tar package that contains rootfs as an image. This parameter corresponds to the **docker export** command. + +Parameter description: none. + +Example: + +Run the following command to generate a new image for **busybox.tar** exported using the **docker export** command: + +```shell +$ sudo docker import busybox.tar busybox:test +sha256:a79d8ae1240388fd3f6c49697733c8bac4d87283920defc51fb0fe4469e30a4f +$ sudo docker images +REPOSITORY TAG IMAGE ID CREATED SIZE +busybox test a79d8ae12403 2 seconds ago 1.3MB +``` + +## load + +Syntax: **docker load \[**_options_**\]** + +Function: Reloads an image from .tar package obtained by running the **docker save** command. This parameter corresponds to the **docker save** command. + +Parameter description: + +**-i** and **--input=""** can be used. + +Example: + +```shell +$ sudo docker load -i busybox.tar +Loaded image ID: sha256:e02e811dd08fd49e7f6032625495118e63f597eb150403d02e3238af1df240ba +$ sudo docker images +REPOSITORY TAG IMAGE ID CREATED SIZE +busybox latest e02e811dd08f 2 years ago 1.09MB +``` + +## login + +Syntax: **docker login \[**_options_**\] \[**_server_**\]** + +Function: Logs in to an image server. If no server is specified, the system logs in to **** by default. + +Parameter description: + +**-e** and **--email=""**: Email address. + +**-p** and **--password=""**: Password. + +**-u** and **--username=""**: User name. + +Example: + +```shell +sudo docker login +``` + +## logout + +Syntax: **docker logout \[**_server_**\]** + +Function: Logs out of an image server. If no server is specified, the system logs out of **** by default. + +Parameter description: none. + +Example: + +```shell +sudo docker logout +``` + +## pull + +Syntax: **docker pull \[**_options_**\]** _name_**\[**_:tag_**\]** + +Function: Pulls an image from an official or private registry. + +Parameter description: + +**-a** and **--all-tags=false**: Download all images in a registry. \(A registry can be tagged with multiple tags. For example, a busybox registry may have multiple tags, such as **busybox:14.04**, **busybox:13.10**, **busybox:latest**. If **-a** is used, all busybox images with tags are pulled.\) + +Example: + +1. Run the following command to obtain the Nginx image from the official registry: + + ```shell + $ sudo docker pull nginx + Using default tag: latest + latest: Pulling from official/nginx + 94ed0c431eb5: Pull complete + 9406c100a1c3: Pull complete + aa74daafd50c: Pull complete + Digest: sha256:788fa27763db6d69ad3444e8ba72f947df9e7e163bad7c1f5614f8fd27a311c3 + Status: Downloaded newer image for nginx:latest + ``` + + When an image is pulled, the system checks whether the dependent layer exists. If yes, the local layer is used. + +2. Pull an image from a private registry. + + Run the following command to pull the Fedora image from the private registry, for example, the address of the private registry is **192.168.1.110:5000**: + + ```shell + sudo docker pull 192.168.1.110:5000/fedora + ``` + +## push + +Syntax: **docker push** _name_**\[**_:tag_**\]** + +Function: Pushes an image to the image registry. + +Parameter description: none. + +Example: + +1. Run the following command to push an image to the private image registry at 192.168.1.110:5000. +2. Label the image to be pushed. \(The **docker tag** command is described in the following section.\) In this example, the image to be pushed is busybox:sshd. + + ```shell + sudo docker tag ubuntu:sshd 192.168.1.110:5000/busybox:sshd + ``` + +3. Run the following command to push the tagged image to the private image registry: + + ```shell + sudo docker push 192.168.1.110:5000/busybox:sshd + ``` + + During the push, the system automatically checks whether the dependent layer exists in the image registry. If yes, the layer is skipped. + +## rmi + +Syntax: **docker rmi \[**_options_**\] **_image_**\[**_image..._**\]** + +Function: Deletes one or more images. If an image has multiple tags in the image library, only the untag operation is performed when the image is deleted. If the image has only one tag, the dependent layers are deleted in sequence. + +Parameter description: + +**-f** and **--force=false**: Forcibly delete an image. + +**--no-prune=false**: Does not delete parent images without tags. + +Example: + +```shell +sudo docker rmi 192.168.1.110:5000/busybox:sshd +``` + +## save + +Syntax: **docker save \[**_options_**\] **_image _**\[**_image..._**\]** + +Function: Saves an image to a TAR package. The output is **STDOUT** by default. + +Parameter description: + +**-o** and **--output=""**: Save an image to a file rather than STDOUT. + +Example: + +```shell +$ sudo docker save -o nginx.tar nginx:latest +$ ls +nginx.tar +``` + +## search + +Syntax: **docker search**_options_ _TERM_ + +Function: Searches for a specific image in the image registry. + +Parameter description: + +**--automated=false**: Displays the automatically built image. + +**--no-trunc=false**: Does not delete any output. + +**-s** and **--stars=0**: Display only images of a specified star level or higher. + +Example: + +1. Run the following command to search for Nginx in the official image library: + + ```shell + $ sudo docker search nginx + NAME DESCRIPTION STARS OFFICIAL AUTOMATED + nginx Official build of Nginx. 11873 [OK] + jwilder/nginx-proxy Automated Nginx reverse proxy for docker con... 1645 [OK] + richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of... 739 [OK] + linuxserver/nginx An Nginx container, brought to you by LinuxS... 74 + bitnami/nginx Bitnami nginx Docker Image 70 [OK] + tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp... 51 [OK] + ``` + +2. Run the following command to search for busybox in the private image library. The address of the private image library must be added during the search. + + ```shell + sudo docker search 192.168.1.110:5000/busybox + ``` + +## tag + +Syntax: **docker tag \[**_options_**\] **_image_**\[**_:tag_**\] \[**_registry host/_**\]\[**_username/_**\]**_name_**\[**_:tag_**\]** + +Function: Tags an image to a registry. + +Parameter description: + +**-f** or **--force=false**: Forcibly replaces the original image when the same tag name exists. + +Example: + +```shell +sudo docker tag busybox:latest busybox:test +``` diff --git a/docs/en/cloud/container_engine/docker_engine/installation_and_configuration_3.md b/docs/en/cloud/container_engine/docker_engine/installation_and_configuration_3.md new file mode 100644 index 0000000000000000000000000000000000000000..faf01f389f17850b6e0e9a136363976ecbb4f214 --- /dev/null +++ b/docs/en/cloud/container_engine/docker_engine/installation_and_configuration_3.md @@ -0,0 +1,405 @@ +# Installation and Configuration + +This chapter describes important configurations related to the installation of the open source container Docker. + +## Precautions + +- The root permission is required for installing a Docker container. +- The **docker-engine** RPM package cannot be installed together with the **containerd**, **runc**, or **podman** RPM package. This is because the **docker-engine** RPM package contains all components required for Docker running, including **containerd**, **runc**, and **podman** binary files. Yet the **containerd**, **runc**, and **podman** RPM packages also contain the corresponding binary files. Software package conflicts may occur due to repeated installation. + +## Basic Installation Configuration + +### Daemon Parameter Configuration + +You can add configuration items to the **/etc/docker/daemon.json** file to customize parameters. You can run the **dockerd --help** command to view related configuration items and their usage methods. A configuration example is as follows: + +```shell +$ cat /etc/docker/daemon.json +{ + "debug": true, + "storage-driver": "overlay2", + "storage-opts": ["overlay2.override_kernel_check=true"] +} +``` + +### Daemon Running Directory Configuration + +Re-configuring various running directories and files \(including **--graph** and **--exec-root**\) may cause directory conflicts or file attribute changes, affecting the normal use of applications. + +>[!TIP] **NOTICE:** +>Therefore, the specified directories or files should be used only by Docker to avoid file attribute changes and security issues caused by conflicts. + +- Take **--graph** as an example. When **/new/path/** is used as the new root directory of the daemon, if a file exists in **/new/path/** and the directory or file name conflicts with that required by Docker \(for example, **containers**, **hooks**, and **tmp**\), Docker may update the original directory or file attributes, including the owner and permission. + +>[!TIP] **NOTICE:** +>From Docker 17.05, the **--graph** parameter is marked as **Deprecated** and replaced with the **--data-root** parameter. + +### Daemon Network Configuration + +- After the network segment of the docker0 bridge is specified by using the **--bip** parameter on Docker daemon, if the **--bip** parameter is deleted during the next Docker daemon restart, the docker0 bridge uses the previous value of **--bip**, even if the docker0 bridge is deleted before the restart. The reason is that Docker saves the network configuration and restores the previous configuration by default during the next restart. +- When running the **docker network create** command to concurrently create networks, you can create two networks with the same name. The reason is that Docker networks are distinguished by IDs. The name is only an alias that is easy to identify and may not be unique. +- In the Docker bridge network mode, a Docker container establishes external communication through NAT on the host. When Docker daemon starts a Docker container, a docker-proxy process is started for each port mapped on the host to access the proxy. It is recommended that you map only the necessary ports when using userland-proxy to reduce the resources consumed by the port mapping of docker-proxy. + +### Daemon umask Configuration + +The default **umask** value of the main container process and exec process is **0022**. To meet security specifications and prevent containers from being attacked, the default value of **umask** is changed to **0027** after runC implementation is modified. After the modification, the other groups cannot access new files or directories. + +The default value of **umask** is **0027** when Docker starts a container. You can change the value to **0022** by running the **--exec-opt native.umask=normal** command during container startup. + +>[!TIP] **NOTICE:** +>If **native.umask** is configured in **docker create** or **docker run** command, its value is used. + +For details, see the parameter description in **docker create** and **docker run**. + +### Daemon Start Time + +The Docker service is managed by systemd, which restricts the startup time of each service. If the Docker service fails to be started within the specified time, the possible causes are as follows: + +- If Docker daemon is started for the first time using devicemapper, the Docker daemon needs to perform the initialization operation on the device. This operation, however, will perform a large number of disk I/O operations. When the disk performance is poor or many I/O conflicts exist, the Docker daemon startup may time out. devicemapper needs to be initialized only once and does not need to be initialized again during later Docker daemon startup. +- If the usage of the current system resources is too high, the system responses slowly, all operations in the system slow down, and the startup of the Docker service may time out. +- During the restart, a daemon traverses and reads configuration files and the init layer and writable layer configurations of each container in the Docker working directory. If there are too many containers \(including the created and exited containers\) in the current system and the disk read and write performance is limited, the startup of the Docker service may time out due to the long-time daemon traversing. + +If the service startup times out, you are advised to rectify the fault as follows: + +- Ensure that the container orchestration layer periodically deletes unnecessary containers, especially the exited containers. +- Based on performance requirements of the solution, adjust the cleanup period of the orchestration layer and the start time of the Docker service. + +### Journald Component + +After systemd-journald is restarted, Docker daemon needs to be restarted. Journald obtains the Docker daemon logs through a pipe. If the journald service is restarted, the pipe is disabled. The write operation of Docker logs triggers the SIGPIPE signal, which causes the Docker daemon crash. If this signal is ignored, the subsequent Docker daemon logs may fail to be recorded. Therefore, you are advised to restart Docker daemon after the journald service is restarted or becomes abnormal, ensuring that Docker logs can be properly recorded and preventing status exceptions caused by daemon crash. + +### Firewalld Component + +You need to restart the Docker service after restarting or starting firewalld. + +- When the firewalld service is started, the iptables rules of the current system are cleared. Therefore, if the firewalld service is restarted during Docker daemon startup, the Docker service may fail to insert iptables rules, causing the Docker service startup failure. +- If the firewalld service is restarted after the Docker service is started, or the status of the firewalld service \(service paused or resumed\) is changed, the iptables rules of the Docker service are deleted. As a result, the container with port mapping fails to be created. + +### Iptables Component + +If the **--icc=false** option is added in Docker, the communication between containers can be restricted. However, if the OS has some rules, the communication between containers may not be restricted. For example: + +```text +Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) +... +0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 +... +0 0 DROP all -- docker0 docker0 0.0.0.0/0 0.0.0.0/0 +... +``` + +In the **Chain FORWARD** command, the ACCEPT icmp rule is added to DROP. As a result, after the **--icc=false** option is added, containers can be pinged, but the peer end is unreachable if UDP or TCP is used. + +Therefore, if you want to add the **--icc=false** option when using Docker in a container OS, you are advised to clear iptables rules on the host first. + +### Audit Component + +You can configure audit for Docker. However, this configuration is not mandatory. For example: + +```text +-w /var/lib/docker -k docker +-w /etc/docker -k docker +-w /usr/lib/systemd/system/docker.service -k docker +-w /usr/lib/systemd/system/docker.socket -k docker +-w /etc/sysconfig/docker -k docker +-w /usr/bin/docker-containerd -k docker +-w /usr/bin/docker-runc -k docker +-w /etc/docker/daemon.json -k docker +``` + +Configuring audit for Docker brings certain benefits for auditing, while it does not have any substantial effects on attack defense. In addition, the audit configurations cause serious efficiency problems, for example, the system may not respond smoothly. Therefore, exercise caution in the production environment. + +The following uses **-w /var/lib/docker -k docker** as an example to describe how to configure Docker audit. + +```shell +cat /etc/audit/rules.d/audit.rules | grep docker -w /var/lib/docker/ -k docker +auditctl -R /etc/audit/rules.d/audit.rules | grep docker +auditctl -l | grep docker -w /var/lib/docker/ -p rwxa -k docker +``` + +>[!NOTE] **NOTE:** +>**-p \[r|w|x|a\]** and **-w** are used together to monitor the read, write, execution, and attribute changes \(such as timestamp changes\) of the directory. In this case, any file or directory operation in the **/var/lib/docker** directory will be recorded in the **audit.log** file. As a result, too many logs will be recorded in the **audit.log** file, which severely affects the memory or CPU usage of the auditd, and further affects the OS. For example, logs similar to the following will be recorded in the **/var/log/audit/audit.log** file each time the **ls /var/lib/docker/containers** command is executed: + +```text +type=SYSCALL msg=audit(1517656451.457:8097): arch=c000003e syscall=257 success=yes exit=3 a0=ffffffffffffff9c a1=1b955b0 a2=90800 a3=0 items=1 ppid=17821 pid=1925 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts6 ses=4 comm="ls" exe="/usr/bin/ls" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="docker"type=CWD msg=audit(1517656451.457:8097): cwd="/root"type=PATH msg=audit(1517656451.457:8097): item=0 name="/var/lib/docker/containers" inode=1049112 dev=fd:00 mode=040700 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:container_var_lib_t:s0 objtype=NORMAL +``` + +### Security Configuration seccomp + +During the container network performance test, it is found that the performance of Docker is lower than that of the native kernel namespace. After seccomp is enabled, system calls \(such as sendto\) are not performed through system\_call\_fastpath. Instead, tracesys is called, which greatly deteriorates the performance. Therefore, you are advised to disable seccomp in container scenarios where services require high performance. For example: + +```shell +docker run -itd --security-opt seccomp=unconfined busybox:latest +``` + +### Do Not Modify Private Directory of Docker Daemon + +Do not modify the root directory used by Docker \(**/var/lib/docker** by default\), the directory during operation \(**/run/docker** by default\), or the files or directories in the two directories. The forbidden operations include deleting files, adding files, creating soft or hard links for the directories or files, or modifying attributes, permissions, or contents of the files. If any modification is required, contact the Euler container team for review. + +### Precautions for Common Users in the Scenario Where a Large Number of Containers Are Deployed + +The maximum number of processes that a common user can create on an OS host can be restricted by creating the **/etc/security/limits.d/20-nproc.conf** file in the system. Similarly, the maximum number of processes that a common user can create in a container is determined by the value in the **/etc/security/limits.d/20-nproc.conf** file in the container image, as shown in the following example: + +```shell +$ cat /etc/security/limits.d/20-nproc.conf +* soft nproc 4096 +``` + +If an error is reported due to insufficient resources when a large number of containers are deployed by a common user, increase the value **4096** in the **/etc/security/limits.d/20-nproc.conf** file. + +Configure the maximum value based on the maximum capability of the kernel, as shown in the following example: + +```shell +$ sysctl -a | grep pid_max +kernel.pid_max = 32768 +``` + +## Storage Driver Configuration + +This Docker version supports two storage drivers: overlay2 and devicemapper. Since overlay2 has better performance than devicemapper, it is recommended that overlay2 be preferentially used in the production environment. + +### overlay2 Storage Driver Configuration + +#### Configuration Methods + +overlay2 is the default storage driver of Docker. You can also use either of the following methods to explicitly configure the driver: + +- Edit the **/etc/docker/daemon.json** file to explicitly configure the **storage-driver** field. + + ```shell + $ cat /etc/docker/daemon.json + { + "storage-driver": "overlay2" + } + ``` + +- Edit the **/etc/sysconfig/docker-storage** file and explicitly configure the Docker daemon startup parameters. + + ```shell + $ cat /etc/sysconfig/docker-storage + DOCKER_STORAGE_OPTIONS="--storage-driver=overlay2" + ``` + +#### Precautions + +- When you perform lifecycle management operations on some containers, an error may be reported, indicating that the corresponding rootfs or executable file cannot be found. +- If the health check of a container is configured to execute executable files in the container, an error may be reported, which causes the health check failure of the container. + +- When you use overlay2 as the graphdriver and modify an image file in a container for the first time, the modification fails if the file size is greater than the remaining space of the system. Even if a little modification on the file is involved, the whole file must be copied to the upper layer. If the remaining space is insufficient, the modification fails. +- Compared with common file systems, the overlay2 file system has the following behavior differences: + - Kernel version + + overlay2 is compatible only with the native kernel 4.0 or later. You are advised to use the Ext4 file system. + + - Copy-UP performance + + Modifying files at the lower layer triggers file replication to the upper layer. Data block replication and fsync are time-consuming. + + - Rename directories + - The rename system call is allowed only when both the source and the destination paths are at the merged layer. Otherwise, the EXDEV error is reported. + - Kernel 4.10 introduces the redirect directory feature to fix this issue. The corresponding kernel option is **CONFIG\_OVERLAY\_FS\_REDIRECT\_DIR**. + + When overlay2 is used, a file system directory fails to be renamed because the related feature configured in the **/sys/module/overlay/parameters/redirect\_dir** file has been disabled. To use this feature, you need to manually set **/sys/module/overlay/parameters/redirect\_dir** to **Y**. + + - Hard link disconnection + - If there are multiple hard links in the lower-layer directory, writing data to the merged layer will trigger Copy-UP, resulting in hard link disconnection. + - The index feature is introduced in kernel 4.13 to fix this issue. The corresponding kernel option is **CONFIG\_OVERLAY\_FS\_INDEX**. Note that this option is not forward compatible and does not support hot upgrade. + + - Changes of **st\_dev** and **st\_ino** + + After Copy-UP is triggered, you can view only new files at the merged layer, and inodes change. Although **attr** and **xattr** can be replicated, **st\_dev** and **st\_ino** are unique and cannot be replicated. As a result, the results of the **stat** and **ls** commands change accordingly. + + - fd change + + Before Copy-UP is triggered, you can obtain the descriptor fd1 when opening a file in read-only mode. After Copy-UP is trigger, you can obtain the descriptor fd2 when opening the file with the same name. The two descriptors point to different files. The data written to fd2 is not displayed in fd1. + +#### Abnormal Scenarios + +When a container uses the overlay2 storage driver, mount points may be overwritten. + +#### Abnormal Scenario: Mount Point Being Overwritten + +In the faulty container, there is a mount point in **/var/lib/docker/overlay2**. + +```shell +$ mount -l | grep overlay +overlay on /var/lib/docker/overlay2/844fd3bca8e616572935808061f009d106a8748dfd29a0a4025645457fa21785/merged type overlay (rw,relatime,seclabel,lowerdir=/var/lib/docker/overlay2/l/JL5PZQLNDCIBU3ZOG3LPPDBHIJ:/var/lib/docker/overlay2/l/ELRPYU4JJG4FDPRLZJCZZE4UO6,upperdir=/var/lib/docker/overlay2/844fd3bca8e616572935808061f009d106a8748dfd29a0a4025645457fa21785/diff,workdir=/var/lib/docker/overlay2/844fd3bca8e616572935808061f009d106a8748dfd29a0a4025645457fa21785/work) +/dev/mapper/dm-root on /var/lib/docker/overlay2 type ext4 (rw,relatime,seclabel,data=ordered) +``` + +An error as follows may occur when some Docker commands are executed: + +```shell +$ docker rm 1348136d32 +docker rm: Error response from daemon: driver "overlay2" failed to remove root filesystem for 1348136d32: error while removing /var/lib/docker/overlay2/844fd3bca8e616572935808061f009d106a8748dfd29a0a4025645457fa21785: invalid argument +``` + +You will find that the rootfs of the corresponding container cannot be found on the host. However, this does not mean that the rootfs is lost. The rootfs is overwritten by the mount point in **/var/lib/docker/overlay2**, and services are still running properly. The solutions are as follows: + +- Solution 1 + 1. Run the following command to check the graphdriver used by Docker: + + ```shell + docker info | grep "Storage Driver" + ``` + + 2. Run the following commands to query the current mount point: + + ```shell + # Devicemapper + mount -l | grep devicemapper + # Overlay2 + mount -l | grep overlay2 + ``` + + The output format is _A_ on _B_ type _C_ \(_D_\). + + - _A_: block device name or **overlay** + - _B_: mount point + - _C_: file system type + - _D_: mounting attribute + + 3. Run the **umount** command on the mount points \(_B_\) one by one from bottom to top. + 4. Run the **docker restart** command on all the containers or delete all the containers. + 5. Run the following command to restart Docker: + + ```shell + systemctl restart docker + ``` + +- Solution 2 + 1. Migrate services. + 2. Restart nodes. + +### devicemapper Storage Driver Configuration + +If you need to set the storage driver of Docker to devicemapper, you can also use either of the following methods to explicitly configure the driver: + +- Edit the **/etc/docker/daemon.json** file to explicitly configure the **storage-driver** field. + + ```shell + $ cat /etc/docker/daemon.json + { + "storage-driver": "devicemapper" + } + ``` + +- Edit the **/etc/sysconfig/docker-storage** file and explicitly configure the Docker daemon startup parameters. + + ```shell + $ cat /etc/sysconfig/docker-storage + DOCKER_STORAGE_OPTIONS="--storage-driver=devicemapper" + ``` + +#### Precautions + +- To use devicemapper, you must use the direct-lvm mode. For details about the configuration method, refer to . +- When configuring devicemapper, if the system does not have sufficient space for automatic capacity expansion of thinpool, disable the automatic capacity expansion function. +- Do not set both the following two parameters in the **/etc/lvm/profile/docker-thinpool.profile** file to **100**: + + ```text + activation { + thin_pool_autoextend_threshold=80 + thin_pool_autoextend_percent=20 + } + ``` + +- You are advised to add **--storage-opt dm.use\_deferred\_deletion=true** and **--storage-opt dm.use\_deferred\_removal=true** when using devicemapper. +- When devicemapper is used, you are advised to use Ext4 as the container file system. You need to add **--storage-opt dm.fs=ext4** to the configuration parameters of Docker daemon. +- If graphdriver is devicemapper and the metadata files are damaged and cannot be restored, you need to manually restore the metadata files. Do not directly operate or tamper with metadata of the devicemapper storage driver in Docker daemon. +- When the devicemapper LVM is used, if the devicemapper thinpool is damaged due to abnormal power-off, you cannot ensure the data integrity or whether the damaged thinpool can be restored. Therefore, you need to rebuild the thinpool. + +**Precautions for Switching the devicemapper Storage Pool When the User Namespace Feature Is Enabled on Docker Daemon** + +- Generally, the path of the deviceset-metadata file is **/var/lib/docker/devicemapper/metadata/deviceset-metadata** during container startup. +- If user namespaces are used, the path of the deviceset-metadata file is **/var/lib/docker/**_userNSUID.GID_**/devicemapper/metadata/deviceset-metadata**. +- When you use the devicemapper storage driver and the container is switched between the user namespace scenario and common scenario, the **BaseDeviceUUID** content in the corresponding deviceset-metadata file needs to be cleared. In the thinpool capacity expansion or rebuild scenario, you also need to clear the **BaseDeviceUUID** content in the deviceset-metadata file. Otherwise, the Docker service fails to be restarted. + +## Impact of Forcibly Killing Docker Background Processes + +### Semaphores May Be Residual + +When the devicemapper is used as the graphdriver, forcible killing may cause residual semaphores. Docker creates semaphores when performing operations on devicemapper. If daemon is forcibly killed before the semaphores are released, the release may fail. A maximum of one semaphore can be leaked at a time, and the leakage probability is low. However, the Linux OS has an upper limit on semaphores. When the number of semaphore leakage times reaches the upper limit, new semaphores cannot be created. As a result, Docker daemon fails to be started. The troubleshooting method is as follows: + +1. Check the residual semaphores in the system. + + ```shell + $ ipcs + ------ Message Queues -------- + key msqid owner perms used-bytes messages + ------ Shared Memory Segments -------- + key shmid owner perms bytes nattch status + ------ Semaphore Arrays -------- + key semid owner perms nsems + 0x0d4d3358 238977024 root 600 1 + 0x0d4d0ec9 270172161 root 600 1 + 0x0d4dc02e 281640962 root 600 1 + ``` + +2. Run the **dmsetup** command to check semaphores created by devicemapper. The semaphore set is the subset of the system semaphores queried in the previous step. + + ```shell + dmsetup udevcookies + ``` + +3. Check the upper limit of kernel semaphores. The fourth value is the upper limit of the current system semaphores. + + ```shell + $ cat /proc/sys/kernel/sem + 250 32000 32 128 + ``` + + If the number of residual semaphores in step 1 is the same as the upper limit of semaphores in step 3, the number of residual semaphores reaches the upper limit. In this case, Docker daemon cannot be normally started. You can run the following command to increase the upper limit to restart Docker: + + ```shell + echo 250 32000 32 1024 > /proc/sys/kernel/sem + ``` + + You can also run the following command to manually clear the residual devicemapper semaphores. The following describes how to clear the devicemapper semaphores applied one minute ago. + + ```shell + $ dmsetup udevcomplete_all 1 + This operation will destroy all semaphores older than 1 minutes with keys that have a prefix 3405 (0xd4d). + Do you really want to continue? [y/n]: y + 0 semaphores with keys prefixed by 3405 (0xd4d) destroyed. 0 skipped. + ``` + +### NICs May Be Residual + +When a container is started in bridge mode, forcibly killing may cause residual NICs. In bridge network mode, when Docker creates a container, a pair of veths are created on the host, and then the NIC information is saved to the database. If daemon is forcibly killed before the NIC information is saved to the database of Docker, the NIC cannot be associated with Docker and cannot be deleted during the next startup because Docker deletes unused NICs from its database. + +### Failed to Restart a Container + +If container hook takes a long time, and containerd is forcibly killed during container startup, the container start operation may fail. When containerd is forcibly killed during container startup, an error is returned for the Docker start operation. After containerd is restarted, the last startup may still be in the **runc create** execution phase \(executing the user-defined hook may take a long time\). If you run the **docker start** command again to start the container, the following error message may be displayed: + +```text +Error response from daemon: oci runtime error: container with id exists: xxxxxx +``` + +This error is caused by running **runc create** on an existing container \(or being created\). After the **runc create** operation corresponding to the first start operation is complete, the **docker start** command can be successfully executed. + +The execution of hook is not controlled by Docker. In this case, if the container is recycled, the containerd process may be suspended when an unknown hook program is executed. In addition, the risk is controllable \(although the creation of the current container is affected in a short period\). + +- After the first operation is complete, the container can be successfully started again. +- Generally, a new container is created after the container fails to be started. The container that fails to be started cannot be reused. + +In conclusion, this problem has a constraint on scenarios. + +### Failed to Restart the Docker Service + +The Docker service cannot be restarted properly due to frequent startup in a short period The Docker system service is monitored by systemd. If the Docker service is restarted for more than five times within 10s, the systemd service detects the abnormal startup. Therefore, the Docker service is disabled. Docker can respond to the restart command and be normally restarted only when the next period of 10s starts. + +## Impact of System Power-off + +When a system is unexpectedly powered off or system panic occurs, Docker daemon status may not be updated to the disk in time. As a result, Docker daemon is abnormal after the system is restarted. The possible problems include but are not limited to the following: + +- A container is created before the power-off. After the restart, the container is not displayed when the **docker ps –a** command is run, as the file status of the container is not updated to the disk. As a result, daemon cannot obtain the container status after the restart. +- Before the system power-off, a file is being written. After daemon is restarted, the file format is incorrect or the file content is incomplete. As a result, loading fails. +- As Docker database \(DB\) will be damaged during power-off, all DB files in **data-root** will be deleted during node restart. Therefore, the following information created before the restart will be deleted after the restart: + - Network: Resources created through Docker network will be deleted after the node is restarted. + - Volume: Resources created through Docker volume will be deleted after the node is restarted. + - Cache construction: The cache construction information will be deleted after the node is restarted. + - Metadata stored in containerd: Metadata stored in containerd will be recreated when a container is started. Therefore, the metadata stored in containerd will be deleted when the node is restarted. + + >[!NOTE] **NOTE:** + >If you want to manually clear data and restore the environment, you can set the environment variable **DISABLE\_CRASH\_FILES\_DELETE** to **true** to disable the function of clearing DB files when the daemon process is restarted due to power-off. diff --git a/docs/en/cloud/container_engine/docker_engine/overview.md b/docs/en/cloud/container_engine/docker_engine/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..f969fe304af412f9affe9e74ad3aa2a12de54042 --- /dev/null +++ b/docs/en/cloud/container_engine/docker_engine/overview.md @@ -0,0 +1,7 @@ +# Docker Container + +Docker is an open-source Linux container engine that enables quick application packaging, deployment, and delivery. The original meaning of Docker is dork worker, whose job is to pack the goods to the containers, and move containers, and load containers. Similarly, the job of Docker in Linux is to pack applications to containers, and deploy and run applications on various platforms using containers. Docker uses Linux Container technology to turn applications into standardized, portable, and self-managed components, enabling the "build once" and "run everywhere" features of applications. Features of Docker technology include: quick application release, easy application deployment and management, and high application density. + +> [!NOTE]**Note:** +> +> Root privileges are necessary for installing and operating Docker containers. diff --git a/docs/en/cloud/container_engine/docker_engine/statistics.md b/docs/en/cloud/container_engine/docker_engine/statistics.md new file mode 100644 index 0000000000000000000000000000000000000000..f831f80b70c66f602e227c625ee05a7d99ec44c0 --- /dev/null +++ b/docs/en/cloud/container_engine/docker_engine/statistics.md @@ -0,0 +1,97 @@ +# Statistics + +## events + +Syntax: **docker events \[**_options_**\]** + +Function: Obtains real-time events from the docker daemon. + +Parameter description: + +**--since=""**: Displays events generated after the specified timestamp. + +**--until=""**: Displays events generated before the specified timestamp. + +Example: + +After the **docker events** command is executed, a container is created and started by running the **docker run** command. create and start events are output. + +```sh +$ sudo docker events +2019-08-28T16:23:09.338838795+08:00 container create 53450588a20800d8231aa1dc4439a734e16955387efb5f259c47737dba9e2b5e (image=busybox:latest, name=eager_wu) +2019-08-28T16:23:09.339909205+08:00 container attach 53450588a20800d8231aa1dc4439a734e16955387efb5f259c47737dba9e2b5e (image=busybox:latest, name=eager_wu) +2019-08-28T16:23:09.397717518+08:00 network connect e2e20f52662f1ee2b01545da3b02e5ec7ff9c85adf688dce89a9eb73661dedaa (container=53450588a20800d8231aa1dc4439a734e16955387efb5f259c47737dba9e2b5e, name=bridge, type=bridge) +2019-08-28T16:23:09.922224724+08:00 container start 53450588a20800d8231aa1dc4439a734e16955387efb5f259c47737dba9e2b5e (image=busybox:latest, name=eager_wu) +2019-08-28T16:23:09.924121158+08:00 container resize 53450588a20800d8231aa1dc4439a734e16955387efb5f259c47737dba9e2b5e (height=48, image=busybox:latest, name=eager_wu, width=210) +``` + +## info + +Syntax: **docker info** + +Function: Displays the Docker system information, including the number of containers, number of images, image storage driver, container execution driver, kernel version, and host OS version. + +Parameter description: none. + +Example: + +```sh +$ sudo docker info +Containers: 4 + Running: 3 + Paused: 0 + Stopped: 1 +Images: 45 +Server Version: 18.09.0 +Storage Driver: overlay2 + Pool Name: docker-thinpool + Pool Blocksize: 524.3kB + Base Device Size: 10.74GB + Backing Filesystem: ext4 + Udev Sync Supported: true + Data Space Used: 11GB + Data Space Total: 51GB + Data Space Available: 39.99GB + Metadata Space Used: 5.083MB + Metadata Space Total: 532.7MB + Metadata Space Available: 527.6MB + Thin Pool Minimum Free Space: 5.1GB + Deferred Removal Enabled: true + Deferred Deletion Enabled: true + Deferred Deleted Device Count: 0 +...... +``` + +## version + +Syntax: **docker version** + +Function: Displays the Docker version information, including the client version, server version, Go version, and OS and Arch information. + +Parameter description: none. + +Example: + +```sh +$ sudo docker version +Client: + Version: 18.09.0 + EulerVersion: 18.09.0.325 + API version: 1.39 + Go version: go1.17.3 + Git commit: ce4ae23 + Built: Mon Jun 26 00:00:00 2023 + OS/Arch: linux/arm64 + Experimental: false + +Server: + Engine: + Version: 18.09.0 + EulerVersion: 18.09.0.325 + API version: 1.39 (minimum version 1.12) + Go version: go1.17.3 + Git commit: ce4ae23 + Built: Mon Jun 26 00:00:00 2023 + OS/Arch: linux/arm64 + Experimental: false +``` diff --git a/docs/en/cloud/container_engine/isula_container_engine/_toc.yaml b/docs/en/cloud/container_engine/isula_container_engine/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..af4eaf13a8d9e4a526e57d2acf3fe07abcb32aa9 --- /dev/null +++ b/docs/en/cloud/container_engine/isula_container_engine/_toc.yaml @@ -0,0 +1,44 @@ +label: iSula Container Engine +isManual: true +description: iSula is a C/C++-based container engine known for its lightweight design, flexibility, simplicity, and high performance +sections: +- label: Overview + href: ./overview.md +- label: Installation, Upgrade, and Uninstallation + href: ./installation_upgrade_uninstallation.md + sections: + - label: Installation and Configuration + href: ./installation_configuration.md + - label: Upgrade + href: ./upgrade_methods.md + - label: Uninstallation + href: ./uninstallation.md +- label: User Guide + href: ./application_scenarios.md + sections: + - label: Container Management + href: ./container_management.md + - label: Interconnection with the CNI Network + href: ./interconnection_with_the_cni_network.md + - label: Container Resource Management + href: ./container_resource_management.md + - label: Privileged Container + href: ./privileged_container.md + - label: CRI API + href: ./cri.md + - label: Image Management + href: ./image_management.md + - label: Checking the Container Health Status + href: ./checking_the_container_health_status.md + - label: Querying Information + href: ./querying_information.md + - label: Security Features + href: ./security_features.md + - label: Supporting OCI Hooks + href: ./supporting_oci_hooks.md + - label: Local Volume Management + href: ./local_volume_management.md + - label: Interconnecting iSulad shim v2 with StratoVirt + href: ./interconnecting_isula_shim_v2_with_stratovirt.md +- label: Appendix + href: ./appendix.md diff --git a/docs/en/cloud/container_engine/isula_container_engine/appendix.md b/docs/en/cloud/container_engine/isula_container_engine/appendix.md new file mode 100644 index 0000000000000000000000000000000000000000..1589c0b04b985b5a7327b2b93f1f1b5c958e4809 --- /dev/null +++ b/docs/en/cloud/container_engine/isula_container_engine/appendix.md @@ -0,0 +1,877 @@ +# Appendix + +## Command Line Parameters + +**Table 1** login command parameters + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

login

+

  

+

  

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

--help

+

Prints help information.

+

-p, --password

+

Specifies the password for logging in to the registry.

+

--password-stdin

+

Specifies the password for obtaining the registry from standard input.

+

-u, --username

+

Specifies the username for logging in to the registry.

+
+ +
+ +**Table 2** logout command parameters + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

logout

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

--help

+

Prints help information.

+
+ +
+ +**Table 3** pull command parameters + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

pull

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

--help

+

Prints help information.

+
+ +
+ +**Table 4** rmi command parameters + + + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

rmi

+

  

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

--help

+

Prints help information.

+

-D, --debug

+

Enables the debug mode.

+

-f, --force

+

Forcibly removes an image.

+
+ +
+ +**Table 5** load command parameters + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

load

+

-H, --host (supported only by iSula)

+

Specifies the iSulad socket file path to be accessed.

+

--help

+

Prints help information.

+

-D, --debug

+

Enables the debug mode.

+

-i, --input

+

Specifies where to import an image. If the image is of the docker type, the value is the image package path. If the image is of the embedded type, the value is the image manifest path.

+

--tag

+

Uses the image name specified by TAG instead of the default image name. This parameter is supported when the type is set to docker.

+
+ +
+ +**Table 6** images command parameters + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

images

+

  

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

--help

+

Prints help information.

+

-D, --debug

+

Enables the debug mode.

+

-f, --filter

+

Filters information about a specified image.

+

-q, --quit

+

Displays only the image name.

+
+ +
+ +**Table 7** inspect command parameters + + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

inspect

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

--help

+

Prints help information.

+

-D, --debug

+

Enables the debug mode.

+

-f, --format

+

Outputs using a template.

+

-t, --time

+

Timeout interval, in seconds. If the inspect command fails to query container information within the specified period, the system stops waiting and reports an error immediately. The default value is 120s. If the value is less than or equal to 0, the inspect command keeps waiting until the container information is obtained successfully.

+
+ +**Table 8** tag command parameters + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

tag

+

-H, --host

+

Specifies the path of the iSulad socket file to be connected.

+

--help

+

Prints help information.

+

-D, --debug

+

Enables the debug mode.

+
+ +
+ +**Table 9** import command parameters + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

import

+

-H, --host

+

Specifies the path of the iSulad socket file to be connected.

+

--help

+

Prints help information.

+

-D, --debug

+

Enables the debug mode.

+
+ +
+ +**Table 10** export command parameters + + + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

export

+

-H, --host

+

Specifies the path of the iSulad socket file to be connected.

+

--help

+

Prints help information.

+

-D, --debug

+

Enables the debug mode.

+

-o, --output

+

Outputs to a specified file.

+
+ +
+ +## CNI Parameters + +**Table 1** CNI single network parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Type

+

Mandatory or Not

+

Description

+

cniVersion

+

string

+

Yes

+

CNI version. Only 0.3.0 and 0.3.1 are supported.

+

name

+

string

+

Yes

+

Network name, which is user-defined and must be unique.

+

type

+

string

+

Yes

+

Network type. The following types are supported:

+

underlay_ipvlan

+

overlay_l2

+

underlay_l2

+

vpc-router

+

dpdk-direct

+

phy-direct

+

ipMasq

+

bool

+

No

+

Configures the IP masquerade.

+

ipam

+

structure

+

No

+

For details, see the IPAM parameter definition.

+

ipam.type

+

string

+

No

+

IPAM type. The following types are supported:

+

(1) For underlay_l2, overlay_l2, and vpc-router networking, only the default value distributed_l2 is supported.

+

(2) For underlay_ipvlan networking, the default value is distributed_l2. In the CCN scenario, only null and fixed are supported. In the CCE and FST 5G core scenarios, only null and distributed_l2 are supported.

+

(3) For phy-direct and dpdk-direct networking, the default value is l2, and optional values are null and distributed_l2. In the FST 5G core scenario, only null and distributed_l2 are supported.

+

Description:

+

If the value is out of the range (for example, host-local), Canal automatically sets the value to the default value and no error is returned.

+

null: Canal is not used to manage IP addresses.

+

fixed: fixed IP address, which is used in the CCN scenario.

+

l2: This value is not used in any scenario.

+

distributed_l2: The distributed small subnet is used to manage IP addresses.

+

ipam.subnet

+

string

+

No

+

Subnet information. Canal supports the subnet mask ranging from 8 to 29. The IP address cannot be a multicast address (for example, 224.0.0.0/4), reserved address (240.0.0.0/4), local link address (169.254.0.0/16), or local loop address (127.0.0.0/8).

+

ipam.gateway

+

string

+

No

+

Gateway IP address.

+

ipam.range-start

+

string

+

No

+

Available start IP address.

+

ipam.range-end

+

string

+

No

+

Available end IP address.

+

ipam.routes

+

structure

+

No

+

Subnet list. Each element is a route dictionary. For details, see the route definition.

+

ipam.routes.dst

+

string

+

No

+

Destination network.

+

ipam.routes.gw

+

string

+

No

+

Gateway address.

+

dns

+

structure

+

No

+

Contains some special DNS values.

+

dns.nameservers

+

[]string

+

No

+

NameServers

+

dns.domain

+

string

+

No

+

Domain

+

dns.search

+

[]string

+

No

+

Search

+

dns.options

+

[]string

+

No

+

Options

+

multi_entry

+

int

+

No

+

Number of IP addresses required by a vNIC. The value ranges from 0 to 16. For physical passthrough, a maximum of 128 IP addresses can be applied for a single NIC.

+

backup_mode

+

bool

+

No

+

Active/Standby mode, which is used only for phy-direct and dpdk-direct networking.

+

vlanID

+

int

+

No

+

The value ranges from 0 to 4095. It can be specified through PaaS.

+

vlan_inside

+

bool

+

No

+

The value true indicates that the VLAN function is implemented internally on the node, and the value false indicates that the VLAN function is implemented externally.

+

vxlanID

+

int

+

No

+

The value ranges from 0 to 16777215. It can be specified through PaaS.

+

vxlan_inside

+

bool

+

No

+

The value true indicates that the VLAN function is implemented internally on the node, and the value false indicates that the VLAN function is implemented externally.

+

action

+

string

+

No

+

This parameter can be used only with the special container ID 000000000000.

+

Create: creates a network.

+

Delete: deletes a network.

+

args

+

map[string]interface{}

+

No

+

Key-value pair type.

+

runtimeConfig

+

structure

+

No

+

None

+

capabilities

+

structure

+

No

+

None

+
+ +**Table 2** CNI args parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Type

+

Mandatory

+

Description

+

K8S_POD_NAME

+

string

+

No

+

Set this parameter when you apply for a fixed IP address (runtimeConfig.ican_caps.fixed_ip is set to true).

+

K8S_POD_NAMESPACE

+

string

+

No

+

Set this parameter when you apply for a fixed IP address (runtimeConfig.ican_caps.fixed_ip is set to true).

+

SECURE_CONTAINER

+

string

+

No

+

Secure container flag.

+

multi_port

+

int

+

No

+

The value ranges from 1 to 8. The default value is 1. Specifies the number of passthrough NICs. Only phy-direct and dpdk-direct networks are supported.

+

phy-direct

+

string

+

No

+

Specifies the NIC to be connected when you create an SR-IOV container network.

+

dpdk-direct

+

string

+

No

+

Specifies the NIC to be connected when you create a DPDK passthrough container network.

+

tenant_id

+

string

+

No

+

Indicates the tenant ID.

+

Only vpc-router networks are supported.

+

vpc_id

+

string

+

No

+

VPC ID.

+

Only vpc-router networks are supported.

+

secret_name

+

string

+

No

+

Specifies the AK/SK object name on the K8S APIServer.

+

Only vpc-router networks are supported.

+

For details, see the configuration of VPC-Router logical networks.

+

IP

+

string

+

No

+

IP address specified by the user, in the format of 192.168.0.10.

+

K8S_POD_NETWORK_ARGS

+

string

+

No

+

Specifies an IP address, in the format of 192.168.0.10. If both IP and K8S_POD_NETWORK_ARGS in args are not empty, the value of K8S_POD_NETWORK_ARGS prevails.

+

INSTANCE_NAME

+

string

+

No

+

INSTANCE ID.

+

Refer to fixed IP addresses that support containers.

+

dist_gateway_disable

+

bool

+

No

+

The value true indicates that no gateway is created, and the value false indicates that a gateway is created.

+

phynet

+

string or []string

+

No

+

Specifies the name of the physical plane to be added. The physical plane name is predefined and corresponds to that in the SNC system. When two plane names are entered, the active and standby planes are supported. Example: phy_net1 or ["phy_net2","phy_net3"]

+

endpoint_policies

+

struct

+

No

+

"endpoint_policies": [

+

{

+

"Type": "",

+

"ExceptionList": [

+

""

+

],

+

"NeedEncap": true,

+

"DestinationPrefix": ""

+

}

+

]

+

port_map

+

struct

+

No

+

On a NAT network, container ports can be advertised to host ports.

+

"port_map": [

+

{

+

"local_port": number,

+

"host_port": number,

+

"protocol": [string...]

+

}...

+

]

+
+ +**Table 3** CNI multiple network parameters + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Type

+

Mandatory

+

Description

+

cniVersion

+

string

+

Yes

+

CNI version. Only 0.3.0 and 0.3.1 are supported.

+

name

+

string

+

Yes

+

Network name, which is user-defined and must be unique.

+

plugins

+

struct

+

Yes

+

For details, see CNI single network parameters.

+
diff --git a/docs/en/cloud/container_engine/isula_container_engine/application_scenarios.md b/docs/en/cloud/container_engine/isula_container_engine/application_scenarios.md new file mode 100644 index 0000000000000000000000000000000000000000..25eb4459ae6f152e3994778da491e657e7640aec --- /dev/null +++ b/docs/en/cloud/container_engine/isula_container_engine/application_scenarios.md @@ -0,0 +1,3 @@ +# Application Scenarios + +This section describes how to use the iSula. diff --git a/docs/en/cloud/container_engine/isula_container_engine/checking_the_container_health_status.md b/docs/en/cloud/container_engine/isula_container_engine/checking_the_container_health_status.md new file mode 100644 index 0000000000000000000000000000000000000000..f19b64a21ef94d1606701448e69f4ac4faabcce0 --- /dev/null +++ b/docs/en/cloud/container_engine/isula_container_engine/checking_the_container_health_status.md @@ -0,0 +1,61 @@ +# Checking the Container Health Status + +## Scenarios + +In the production environment, bugs are inevitable in applications provided by developers or services provided by platforms. Therefore, a management system is indispensable for periodically checking and repairing applications. The container health check mechanism adds a user-defined health check function for containers. When a container is created, the **--health-cmd** option is configured so that commands are periodically executed in the container to monitor the health status of the container based on return values. + +## Configuration Methods + +Configurations during container startup: + +```sh +isula run -itd --health-cmd "echo iSulad >> /tmp/health_check_file || exit 1" --health-interval 5m --health-timeout 3s --health-exit-on-unhealthy busybox bash +``` + +The configurable options are as follows: + +- **--health-cmd**: This option is mandatory. If **0** is returned after a command is run in a container, the command execution succeeds. If a value other than **0** is returned, the command execution fails. +- **--health-interval**: interval between two consecutive command executions. The default value is **30s**. The value ranges from **1s** to the maximum value of Int64 \(unit: nanosecond\). If the input parameter is set to **0s**, the default value is used. +- **--health-timeout**: maximum duration for executing a single check command. If the execution times out, the command execution fails. The default value is **30s**. The value ranges from **1s** to the maximum value of Int64 \(unit: nanosecond\). If the input parameter is set to **0s**, the default value is used. +- **--health-start-period**: container initialization time. The default value is **0s**. The value ranges from **1s** to the maximum value of Int64 \(unit: nanosecond\). +- **--health-retries**: maximum number of retries for the health check. The default value is **3**. The maximum value is the maximum value of Int32. +- **--health-exit-on-unhealthy**: specifies whether to kill a container when it is unhealthy. The default value is **false**. + +## Check Rules + +1. After a container is started, the container status is **health:starting**. +2. After the period specified by **start-period**, the **cmd** command is periodically executed in the container at the interval specified by **interval**. That is, after the command is executed, the command will be executed again after the specified period. +3. If the **cmd** command is successfully executed within the time specified by **timeout** and the return value is **0**, the check is successful. Otherwise, the check fails. If the check is successful, the container status changes to **health:healthy**. +4. If the **cmd** command fails to be executed for the number of times specified by **retries**, the container status changes to **health:unhealthy**, and the container continues the health check. +5. When the container status is **health:unhealthy**, the container status changes to **health:healthy** if a check succeeds. +6. If **--exit-on-unhealthy** is set, and the container exits due to reasons other than being killed \(the returned exit code is **137**\), the health check takes effect only after the container is restarted. +7. When the **cmd** command execution is complete or times out, the iSulad daemon will record the start time, return value, and standard output of the check to the configuration file of the container. A maximum of five records can be recorded. In addition, the configuration file of the container stores health check parameters. +8. When the container is running, the health check status is written into the container configurations. You can run the **isula inspect** command to view the status. + +```conf +"Health": { + "Status": "healthy", + "FailingStreak": 0, + "Log": [ + { + "Start": "2018-03-07T07:44:15.481414707-05:00", + "End": "2018-03-07T07:44:15.556908311-05:00", + "ExitCode": 0, + "Output": "" + }, + { + "Start": "2018-03-07T07:44:18.557297462-05:00", + "End": "2018-03-07T07:44:18.63035891-05:00", + "ExitCode": 0, + "Output": "" + }, + ...... +} +``` + +## Usage Restrictions + +- A maximum of five health check status records can be stored in a container. The last five records are saved. +- If health check parameters are set to **0** during container startup, the default values are used. +- After a container with configured health check parameters is started, if iSulad daemon exits, the health check is not executed. After iSulad daemon is restarted, the health status of the running container changes to **starting**. Afterwards, the check rules are the same as above. +- If the health check fails for the first time, the health check status will not change from **starting** to **unhealthy** until the specified number of retries \(**--health-retries**\) is reached, or to **healthy** until the health check succeeds. diff --git a/docs/en/cloud/container_engine/isula_container_engine/container_management.md b/docs/en/cloud/container_engine/isula_container_engine/container_management.md new file mode 100644 index 0000000000000000000000000000000000000000..a6c567a4ac352e1b43b5442cb3db58a30349734d --- /dev/null +++ b/docs/en/cloud/container_engine/isula_container_engine/container_management.md @@ -0,0 +1,2480 @@ +# Container Management + +## Creating a Container + +### Description + +To create a container, run the **isula create** command. The container engine will use the specified container image to create a read/write layer, or use the specified local rootfs as the running environment of the container. After the creation is complete, the container ID is output as standard output. You can run the **isula start** command to start the container. The new container is in the **inited** state. + +### Usage + +```shell +isula create [OPTIONS] IMAGE [COMMAND] [ARG...] +``` + +### Parameters + +The following table lists the parameters supported by the **create** command. + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

create

+

  

+

--add-host

+

Adds the mapping between the custom host and the IP address (host:ip).

+

--annotation

+

Sets annotations for the container. For example, set the native.umask parameter.

+
--annotation native.umask=normal #The umask value of the started container is 0022.
+--annotation native.umask=secure #The umask value of the started container is 0027.
+

If this parameter is not set, the umask configuration in iSulad is used.

+

--blkio-weight

+

Specifies the block I/O (relative weight). The value ranges from 10 to 1000. The default value is 0, indicating that this function is disabled.

+

--blkio-weight-device

+

Specifies the block I/O weight (relative device weight). The format is DEVICE_NAME: weight. The weight value ranges from 10 to 1000. The default value is 0, indicating that this function is disabled.

+

--cap-add

+

Adds the Linux permission function.

+

--cap-drop

+

Deletes Linux permissions.

+

--cgroup-parent

+

Specifies the cgroup parent path of the container.

+

--cpu-period

+

Limits the period of CPU CFS.

+

--cpu-quota

+

Limits the CPU CFS quota.

+

--cpu-rt-period

+

Limits the real-time CPU period (in microseconds).

+

--cpu-rt-runtime

+

Limits the real-time running time of the CPU (in microseconds).

+

--cpu-shares

+

CPU share (relative weight).

+

--cpus

+

Specifies the number of CPUs.

+

--cpuset-cpus

+

Specifies the CPU that can be executed. Example values: 0-3, 0, 1.

+

--cpuset-mems

+

Specifies memory that can be executed. Example values: 0-3, 0, 1.

+

--device

+

Adds a device to the container.

+

--device-cgroup-rule

+

Adds a rule to the list of devices allowed by the cgroup.

+

--device-read-bps

+

Limits the read rate (bytes per second) of the device.

+

--device-read-iops

+

Limits the read rate (I/Os per second) of the device.

+

--device-write-bps

+

Limits the write rate (bytes per second) of the device.

+

--device-write-iops

+

Limits the write rate (I/Os per second) of the device.

+

--dns

+

Adds a DNS server.

+

--dns-opt

+

Adds DNS options.

+

--dns-search

+

Sets the search domain of a container.

+

--entrypoint

+

Specifies the entry point to be run when a container is started.

+

-e, --env

+

Sets environment variables.

+

--env-file

+

Configures environment variables using a file.

+

--env-target-file

+

Specifies the target file path in rootfs to which environment variables are exported.

+

--external-rootfs=PATH

+

Specifies a rootfs (a folder or block device) that is not managed by iSulad for the container.

+

--files-limit

+

Limits the number of file handles that can be opened in a container. The value -1 indicates no limit.

+

--group-add=[]

+

Adds additional user groups to the container.

+

--help

+

Prints help information.

+

--health-cmd

+

Command executed in a container.

+

--health-exit-on-unhealthy

+

Determines whether to kill a container when the container is detected unhealthy.

+

--health-interval

+

Interval between two consecutive command executions.

+

--health-retries

+

Maximum number of health check retries.

+

--health-start-period

+

Container initialization interval.

+

--health-timeout

+

Maximum time for executing a single check command.

+

--hook-spec

+

Hook configuration file.

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

--host-channel

+

Creates the shared memory between the host and the container.

+

-h, --hostname

+

Container host name.

+

--hugetlb-limit=[]

+

Limits the huge page file. For example, --hugetlb-limit 2MB:32MB.

+

-i, --interactive

+

Enables the standard input of the container even if it is not connected to the standard input of the container.

+

--ipc

+

Specifies the IPC namespace.

+

--kernel-memory

+

Limits the kernel memory.

+

-l,--label

+

Sets a label for a container.

+

--lablel-file

+

Sets container labels using files.

+

--log-driver

+

Records the container driver.

+

--log-opt=[]

+

Log driver option. By default, the function of recording container serial port logs is disabled. You can enable it by setting --log-opt disable-log=false.

+

-m, --memory

+

Memory limit.

+

--memory-reservation

+

Sets the container memory limit. The default value is the same as that of --memory. --memory is a hard limit, and --memory-reservation is a soft limit. When the memory usage exceeds the preset value, the memory usage is dynamically adjusted (the system attempts to reduce the memory usage to a value less than the preset value when reclaiming the memory). However, the memory usage may exceed the preset value. Generally, this parameter can be used together with --memory. The value must be less than the preset value of --memory. The minimum value is 4 MB.

+

--memory-swap

+

Memory swap space, which should be a positive integer. The value -1 indicates no limit.

+

--memory-swappiness

+

The value of swappiness is a positive integer ranging from 0 to 100. The smaller the value is, the less the swap partition is used and the more the memory is used in the Linux system. The larger the value is, the more the swap space is used by the kernel. The default value is -1, indicating that the default system value is used.

+

--mount

+

Mounts the host directory, volume, or file system to the container.

+

--name=NAME

+

Container name.

+

--net=none

+

Connects the container to the network.

+

--no-healthcheck

+

Disables the health check configuration.

+

--ns-change-opt

+

Namespace kernel parameter option of the system container.

+

--oom-kill-disable

+

Disables OOM.

+

--oom-score-adj

+

Adjusts the OOM preference of the host (from -1000 to 1000).

+

--pid

+

Specifies the PID namespace to be used.

+

--pids-limit

+

Limits the number of processes that can be executed in the container. The value -1 indicates no limit.

+

--privileged

+

Grants container extension privileges.

+

--pull

+

Pulls the image before running.

+

-R, --runtime

+

Container runtime. The parameter value can be runc or lcr, which is case insensitive. Therefore, LCR and lcr are equivalent.

+

--read-only

+

Sets the rootfs of a container to read-only.

+

--restart

+

Restart policy upon container exit.

+

For a system container, --restart on-reboot is supported.

+

--security-opt

+

Security option.

+

--shm-size

+

Size of /dev/shm. The default value is 64MB.

+

--stop-signal

+

Stop signal for a container. The default value is SIGTERM.

+

--storage-opt

+

Configures the storage driver option for a container.

+

--sysctl

+

Sets the sysctl option.

+

--system-container

+

Starts the system container.

+

--tmpfs

+

Mounts the tmpfs directory.

+

-t, --tty

+

Allocates a pseudo terminal.

+

--ulimit

+

Sets the ulimit for a container.

+

-u, --user

+

User name or UID, in the format of [<name|uid>][:<group|gid>].

+

--user-remap

+

Maps users to the system container.

+

--userns

+

Sets the user command space for a container when the user-remap option is enabled.

+

--uts

+

Sets the PID namespace.

+

-v, --volume=[]

+

Mounts a volume.

+

--volumes-from=[]

+

Uses the mounting configuration of the specified container.

+

--workdir

+

Sets the working directory in the container.

+
+ +### Constraints + +- When the **--user** or **--group-add** parameter is used to verify the user or group during container startup, if the container uses an OCI image, the verification is performed in the **etc/passwd** and **etc/group** files of the actual rootfs of the image. If a folder or block device is used as the rootfs of the container, the **etc/passwd** and **etc/group** files in the host are verified. The rootfs ignores mounting parameters such as **-v** and **--mount**. That is, when these parameters are used to attempt to overwrite the **etc/passwd** and **etc/group** files, the parameters do not take effect during the search and take effect only when the container is started. The generated configuration is saved in the **iSulad root directory/engine/container ID/start\_generate\_config.json** file. The file format is as follows: + + ```json + { + "uid": 0, + "gid": 8, + "additionalGids": [ + 1234, + 8 + ] + } + ``` + +### Example + +Create a container. + +```shell +# isula create busybox +fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 +# isula ps -a +STATUS PID IMAGE COMMAND EXIT_CODE RESTART_COUNT STARTAT FINISHAT RUNTIME ID NAMES +inited - busybox "sh" 0 0 - - runc fd7376591a9c fd7376591a9c4521... +``` + +## Starting a Container + +### Description + +To start one or more containers, run the **isula start** command. + +### Usage + +```shell +isula start [OPTIONS] CONTAINER [CONTAINER...] +``` + +### Parameters + +The following table lists the parameters supported by the **start** command. + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

start

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

-a, --attach

+

Connects to STDOUT and STDERR of the container.

+

-D, --debug

+

Enables the debug mode.

+

--help

+

Prints help information.

+
+ +### Example + +Start a new container. + +```shell +isula start fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 +``` + +## Running a Container + +### Description + +To create and start a container, run the **isula run** command. You can use a specified container image to create a container read/write layer and prepare for running the specified command. After the container is created, run the specified command to start the container. The **run** command is equivalent to creating and starting a container. + +### Usage + +```shell +isula run [OPTIONS] ROOTFS|IMAGE [COMMAND] [ARG...] +``` + +### Parameters + +The following table lists the parameters supported by the **run** command. + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

run

+

--annotation

+

Sets annotations for the container. For example, set the native.umask option.

+
--annotation native.umask=normal #The umask value of the started container is 0022.
+--annotation native.umask=secure #The umask value of the started container is 0027.
+

If this parameter is not set, the umask configuration in iSulad is used.

+

--add-host

+

Adds the mapping between the custom host and the IP address (host:ip).

+

--blkio-weight

+

Specifies the block I/O (relative weight). The value ranges from 10 to 1000. The default value is 0, indicating that this function is disabled.

+

--blkio-weight-device

+

Specifies the block I/O weight (relative device weight). The format is DEVICE_NAME: weight. The weight value ranges from 10 to 1000. The default value is 0, indicating that this function is disabled.

+

--cap-add

+

Adds Linux functions.

+

--cap-drop

+

Deletes Linux functions.

+

--cgroup-parent

+

Specifies the cgroup parent path of the container.

+

--cpu-period

+

Limits the period of CPU CFS.

+

--cpu-quota

+

Limits the CPU CFS quota.

+

--cpu-rt-period

+

Limits the real-time CPU period (in microseconds).

+

--cpu-rt-runtime

+

Limits the real-time running time of the CPU (in microseconds).

+

--cpu-shares

+

CPU share (relative weight).

+

--cpus

+

Specifies the number of CPUs.

+

--cpuset-cpus

+

Specifies the CPU that can be executed. Example values: 0-3, 0, 1.

+

--cpuset-mems

+

Specifies memory that can be executed. Example values: 0-3, 0, 1.

+

-d, --detach

+

Runs the container in the background and displays the container ID.

+

--device=[]

+

Adds a device to the container.

+

--device-cgroup-rule

+

Adds a rule to the list of devices allowed by the cgroup.

+

--device-read-bps

+

Limits the read rate (bytes per second) of the device.

+

--device-read-iops

+

Limits the read rate (I/Os per second) of the device.

+

--device-write-bps

+

Limits the write rate (bytes per second) of the device.

+

--device-write-iops

+

Limits the write rate (I/Os per second) of the device.

+

--dns

+

Adds a DNS server.

+

--dns-opt

+

Adds DNS options.

+

--dns-search

+

Sets the search domain of a container.

+

--entrypoint

+

Specifies the entry point to be run when a container is started.

+

-e, --env

+

Sets environment variables.

+

--env-file

+

Configures environment variables using a file.

+

--env-target-file

+

Specifies the target file path in rootfs to which environment variables are exported.

+

--external-rootfs=PATH

+

Specifies a rootfs (a folder or block device) that is not managed by iSulad for the container.

+

--files-limit

+

Limits the number of file handles that can be opened in the container. The value -1 indicates no limit.

+

--group-add=[]

+

Adds additional user groups to the container.

+

--help

+

Prints help information.

+

--health-cmd

+

Command executed in a container.

+

--health-exit-on-unhealthy

+

Determines whether to kill a container when the container is detected unhealthy.

+

--health-interval

+

Interval between two consecutive command executions.

+

--health-retries

+

Maximum number of health check retries.

+

--health-start-period

+

Container initialization interval.

+

--health-timeout

+

Maximum time for executing a single check command.

+

--hook-spec

+

Hook configuration file.

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

--host-channel

+

Creates the shared memory between the host and the container.

+

-h, --hostname

+

Container host name.

+

--hugetlb-limit=[]

+

Limits the size of huge-page files, for example, --hugetlb-limit 2MB:32MB.

+

-i, --interactive

+

Enables the standard input of the container even if it is not connected to the standard input of the container.

+

--ipc

+

Specifies the IPC namespace.

+

--kernel-memory

+

Limits the kernel memory.

+

-l, --label

+

Sets a label for a container.

+

--lablel-file

+

Sets the container label through a file.

+

--log-driver

+

Sets the log driver. syslog and json-file are supported.

+

--log-opt=[]

+

Log driver option. By default, the container serial port log function is disabled. You can run the --log-opt disable-log=false command to enable it.

+

-m, --memory

+

Memory limit.

+

--memory-reservation

+

Sets the container memory limit. The default value is the same as that of --memory. --memory is a hard limit, and --memory-reservation is a soft limit. When the memory usage exceeds the preset value, the memory usage is dynamically adjusted (the system attempts to reduce the memory usage to a value less than the preset value when reclaiming the memory). However, the memory usage may exceed the preset value. Generally, this parameter can be used together with --memory. The value must be less than the preset value of --memory. The minimum value is 4 MB.

+

--memory-swap

+

Memory swap space, which should be a positive integer. The value -1 indicates no limit.

+

--memory-swappiness

+

The value of swappiness is a positive integer ranging from 0 to 100. The smaller the value is, the less the swap partition is used and the more the memory is used in the Linux system. The larger the value is, the more the swap space is used by the kernel. The default value is -1, indicating that the default system value is used.

+

--mount

+

Mounts a host directory to a container.

+

--name=NAME

+

Container name

+

--net=none

+

Connects a container to the network.

+

--no-healthcheck

+

Disables the health check configuration.

+

--ns-change-opt

+

Namespace kernel parameter option of the system container.

+

--oom-kill-disable

+

Disables OOM.

+

--oom-score-adj

+

Adjusts the OOM preference of the host (from -1000 to 1000).

+

--pid

+

Specifies the PID namespace to be used.

+

--pids-limit

+

Limits the number of processes that can be executed in the container. The value -1 indicates no limit.

+

--privileged

+

Grants container extension privileges.

+

--pull

+

Pulls the image before running.

+

-R, --runtime

+

Container runtime. The parameter value can be runc or lcr, which is case insensitive. Therefore, LCR and lcr are equivalent.

+

--read-only

+

Sets the rootfs of a container to read-only.

+

--restart

+

Restart policy upon container exit.

+

For a system container, --restart on-reboot is supported.

+

--rm

+

Automatically clears a container upon exit.

+

--security-opt

+

Security option.

+

--shm-size

+

Size of /dev/shm. The default value is 64MB.

+

--stop-signal

+

Stop signal for a container. The default value is SIGTERM.

+

--storage-opt

+

Configures the storage driver option of a container.

+

--sysctl

+

Sets the sysctl option.

+

--system-container

+

Starts the system container.

+

--tmpfs

+

Mounts the tmpfs directory.

+

-t, --tty

+

Allocates a pseudo terminal.

+

--ulimit

+

Sets the ulimit for a container.

+

-u, --user

+

User name or UID, in the format of [<name|uid>][:<group|gid>].

+

--user-remap

+

Maps users to the system container.

+

--userns

+

Sets the user command space for a container when the user-remap option is enabled.

+

--uts

+

Sets the PID namespace.

+

-v, --volume=[]

+

Mounts a volume.

+

--volumes-from=[]

+

Uses the mounting configuration of the specified container.

+

--workdir

+

Sets the working directory in the container.

+
+ +### Constraints + +- When the parent process of a container exits, the corresponding container automatically exits. +- When a common container is created, the parent process cannot be initiated because the permission of common containers is insufficient. As a result, the container does not respond when you run the **attach** command though it is created successfully. +- If **--net** is not specified when the container is running, the default host name is **localhost**. +- If the **--files-limit** parameter is to transfer a small value, for example, 1, when the container is started, iSulad creates a cgroup, sets the files.limit value, and writes the PID of the container process to the **cgroup.procs** file of the cgroup. At this time, the container process has opened more than one handle. As a result, a write error is reported, and the container fails to be started. +- If both**--mount** and **--volume** exist and their destination paths conflict, **--mount** will be run after **--volume** \(that is, the mount point in **--volume** will be overwritten\). + + Note: The value of the **type** parameter of lightweight containers can be **bind** or **squashfs**. When **type** is set to **squashfs**, **src** is the image path. The value of the **type** parameter of the native Docker can be **bind**, **volume**, and **tmpfs**. + +- The restart policy does not support **unless-stopped**. +- The values returned for Docker and lightweight containers are 127 and 125 respectively in the following three scenarios: + + The host device specified by **--device** does not exist. + + The hook JSON file specified by **--hook-spec** does not exist. + + The entry point specified by **--entrypoint** does not exist. + +- When the **--volume** parameter is used, /dev/ptmx will be deleted and recreated during container startup. Therefore, do not mount the **/dev** directory to that of the container. Use **--device** to mount the devices in **/dev** of the container. +- When the **-it** parameter is used, the **/dev/ptmx** device will be deleted and rebuilt when the container is started. Therefore, do not mount the **/dev** directory to the **/dev** directory of the container. Instead, use **--device** to mount the devices in the **/dev** directory to the container. +- Do not use the echo option to input data to the standard input of the **run** command. Otherwise, the client will be suspended. The echo value should be directly transferred to the container as a command line parameter. + + ```shell + # echo ls | isula run -i busybox /bin/sh + + ^C + # + ``` + + The client is suspended when the preceding command is executed because the preceding command is equivalent to input **ls** to **stdin**. Then EOF is read and the client does not send data and waits for the server to exit. However, the server cannot determine whether the client needs to continue sending data. As a result, the server is suspended in reading data, and both parties are suspended. + + The correct execution method is as follows: + + ```shell + # isula run -i busybox ls + bin + dev + etc + home + proc + root + sys + tmp + usr + var + # + ``` + +- If the root directory \(/\) of the host is used as the file system of the container, the following situations may occur during the mounting: + + **Table 2** Mounting scenarios + + + + + + + + + + + + + +

Host Path (Source)

+

Container Path (Destination)

+

/home/test1

+

/mnt/

+

/home/test2

+

/mnt/abc

+
+ + >[!TIP] **NOTICE:** + >Scenario 1: Mount **/home/test1** and then **/home/test2**. In this case, the content in **/home/test1** overwrites the content in **/mnt**. As a result, the **abc** directory does not exist in **/mnt**, and mounting**/home/test2** to **/mnt/abc** fails. + >Scenario 2: Mount **/home/test2** and then **/home/test1**. In this case, the content of **/mnt** is replaced with the content of **/home/test1** during the second mounting. In this way, the content mounted during the first mounting from **/home/test2** to **/mnt/abc** is overwritten. + >The first scenario is not supported. For the second scenario, users need to understand the risk of data access failures. + +- Exercise caution when configuring the **/sys** and **/proc** directories to be writable. + + The **/sys** and **/proc** directories contain the APIs for maintaining Linux kernel parameters and managing devices. If the directories are writable in a container, container escape may occur. + +- Exercise caution when configuring containers to share namespaces with hosts. + + For example, if you use **--pid**, **--ipc**, **--uts**, or **--net** to configure namespace sharing between the container and the host, the namespace isolation between the container and the host is lost, and the host can be attacked from the container. For example, if you use **--pid** to configure PID namespace sharing between the container and the host, the PID of the process on the host can be viewed in the container and the process can be killed in the container. + +- Exercise caution when configuring parameters that can be used to mount host resources, such as **--device** and **-v**. Do not map sensitive directories or devices of the host to containers to prevent leakage of sensitive information. + +- Exercise caution when using the **--privileged** option to start a container. If the **--privileged** option is used, the container will have excessive permissions, affecting the host configuration. + + >[!TIP] **NOTICE:** + > + > - In high concurrency scenarios (200 containers are concurrently started), the memory management mechanism of Glibc may cause memory holes and large virtual memory (for example, 10 GB). This problem is caused by the restriction of the Glibc memory management mechanism in the high concurrency scenario, but not by memory leakage. Therefore, the memory consumption does not increase infinitely. You can set the **MALLOC\_ARENA\_MAX** environment variable to reduce the virtual memory and increase the probability of reducing the physical memory. However, this environment variable will cause the iSulad concurrency performance to deteriorate. Set this environment variable based on the site requirements. + > + > ```text + > To balance performance and memory usage, set MALLOC_ARENA_MAX to 4. (The iSulad performance deterioration on the ARM64 server is controlled by less than 10%.) + > Configuration method: + > 1. To manually start iSulad, run the export MALLOC_ARENA_MAX=4 command and then start the iSulad. + > 2. If systemd manages iSulad, you can modify the /etc/sysconfig/iSulad file by adding MALLOC_ARENA_MAX=4. + > ``` + +### Example + +Run a new container. + +```shell +# isula run -itd busybox +9c2c13b6c35f132f49fb7ffad24f9e673a07b7fe9918f97c0591f0d7014c713b +``` + +## Stopping a Container + +### Description + +To stop a container, run the **isula stop** command. The SIGTERM signal is sent to the first process in the container. If the container is not stopped within the specified time \(10s by default\), the SIGKILL signal is sent. + +### Usage + +```shell +isula stop [OPTIONS] CONTAINER [CONTAINER...] +``` + +### Parameters + +The following table lists the parameters supported by the **stop** command. + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

stop

+

-f, --force

+

Forcibly stops a running container.

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

-D, --debug

+

Enables the debug mode.

+

--help

+

Prints help information.

+

-t, --time

+

Time for graceful stop. If the time exceeds the value of this parameter, the container is forcibly stopped.

+
+ +### Constraints + +- If the **t** parameter is specified and the value of **t** is less than 0, ensure that the application in the container can process the stop signal. + + Principle of the Stop command: Send the SIGTERM signal to the container, and then wait for a period of time \(**t** entered by the user\). If the container is still running after the period of time, the SIGKILL signal is sent to forcibly kill the container. + +- The meaning of the input parameter **t** is as follows: + + **t** < 0: Wait for graceful stop. This setting is preferred when users are assured that their applications have a proper stop signal processing mechanism. + + **t** = 0: Do not wait and send **kill -9** to the container immediately. + + **t** \> 0: Wait for a specified period and send **kill -9** to the container if the container does not stop within the specified period. + + Therefore, if **t** is set to a value less than 0 \(for example, **t** = -1\), ensure that the container application correctly processes the SIGTERM signal. If the container ignores this signal, the container will be suspended when the **isula stop** command is run. + +### Example + +Stop a container. + +```shell +# isula stop fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 +fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 +``` + +## Forcibly Stopping a Container + +### Description + +To forcibly stop one or more running containers, run the **isula kill** command. + +### Usage + +```shell +isula kill [OPTIONS] CONTAINER [CONTAINER...] +``` + +### Parameters + +The following table lists the parameters supported by the **kill** command. + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

kill

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

-D, --debug

+

Enables the debug mode.

+

--help

+

Prints help information.

+

-s, --signal

+

Signal sent to the container.

+
+ +### Example + +Kill a container. + +```shell +# isula kill fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 +fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 +``` + +## Removing a Container + +### Description + +To remove a container, run the **isula rm** command. + +### Usage + +```shell +isula rm [OPTIONS] CONTAINER [CONTAINER...] +``` + +### Parameters + +The following table lists the parameters supported by the **rm** command. + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

rm

+

-f, --force

+

Forcibly removes a running container.

+

-D, --debug

+

Enables the debug mode.

+

--help

+

Prints help information.

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

-v, --volume

+

Removes a volume mounted to a container. (Note: Currently, iSulad does not use this function.)

+
+ +### Constraints + +- In normal I/O scenarios, it takes T1 to delete a running container in an empty environment (with only one container). In an environment with 200 containers (without a large number of I/O operations and with normal host I/O), it takes T2 to delete a running container. The specification of T2 is as follows: T2 = max \{T1 x 3, 5\}s. + +### Example + +Delete a stopped container. + +```shell +# isula rm fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 +fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 +``` + +## Attaching to a Container + +### Description + +To attach standard input, standard output, and standard error of the current terminal to a running container, run the **isula attach** command. + +### Usage + +```shell +isula attach [OPTIONS] CONTAINER +``` + +### Parameters + +The following table lists the parameters supported by the **attach** command. + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

attach

+

--help

+

Prints help information.

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

-D, --debug

+

Enables the debug mode.

+
+ +### Constraints + +- For the native Docker, running the **attach** command will directly enter the container. For the iSulad container, you have to run the **attach** command and press **Enter** to enter the container. + +### Example + +Attach to a running container. + +```shell +# isula attach fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 +/ # +/ # +``` + +## Renaming a Container + +### Description + +To rename a container, run the **isula rename** command. + +### Usage + +```shell +isula rename [OPTIONS] OLD_NAME NEW_NAME +``` + +### Parameters + +The following table lists the parameters supported by the **rename** command. + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

rename

+

--help

+

Prints help information.

+

-H, --host

+

Specifies the path of the iSulad socket file to be connected.

+

-D, --debug

+

Enables the debug mode.

+
+ +### Example + +Rename a container. + +```shell +isula rename my_container my_new_container +``` + +## Executing a Command in a Running Container + +### Description + +To execute a command in a running container, run the **isula exec** command. This command is executed in the default directory of the container. If a user-defined directory is specified for the basic image, the user-defined directory is used. + +### Usage + +```shell +isula exec [OPTIONS] CONTAINER COMMAND [ARG...] +``` + +### Parameters + +The following table lists the parameters supported by the **exec** command. + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

exec

+

  

+

-d, --detach

+

Runs a command in the background.

+

-D, --debug

+

Enables the debug mode.

+

-e, --env

+

Sets environment variables. (Note: Currently, iSulad does not use this function.)

+

--help

+

Prints help information.

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

-i, --interactive

+

Enables the standard input though no connection is set up. (Note: Currently, iSulad does not use this function.)

+

-t, --tty

+

Allocates a pseudo terminal. (Note: Currently, iSulad does not use this function.)

+

-u, --user

+

Logs in to the container as a specified user.

+

--workdir

+

Specifies the working directory for running the command. This function is supported only when runtime is set to lcr.

+
+ +### Constraints + +- If no parameter is specified in the **isula exec** command, the **-it** parameter is used by default, indicating that a pseudo terminal is allocated and the container is accessed in interactive mode. +- When you run the **isula exec** command to execute a script and run a background process in the script, you need to use the **nohup** flag to ignore the **SIGHUP** signal. + + When you run the **isula exec** command to execute a script and run a background process in the script, you need to use the **nohup** flag. Otherwise, the kernel sends the **SIGHUP** signal to the process executed in the background when the process \(first process of the session\) exits. As a result, the background process exits and zombie processes occur. + +- After running the **isula exec** command to access the container process, do not run background programs. Otherwise, the system will be suspended. + + To run the **isula exec** command to execute a background process, perform the following steps: + + 1. Run the **isula exec container\_name bash** command to access the container. + 2. After entering the container, run the **script &** command. + 3. Run the **exit** command. The terminal stops responding. + + >After the isula exec command is executed to enter the container, the background program stops responding because the isula exec command is executed to enter the container and run the background while1 program. When the bash command is run to exit the process, the while1 program does not exit and becomes an orphan process, which is taken over by process 1. + >The while1 process is executed by the initial bash process fork &exec of the container. The while1 process copies the file handle of the bash process. As a result, the handle is not completely closed when the bash process exits. + >The console process cannot receive the handle closing event, epoll_wait stops responding, and the process does not exit. + +- Do not run the **isula exec** command in the background. Otherwise, the system may be suspended. + + Run the **isula exec** command in the background as follows: + + Run the **isula exec script &** command in the background, for example, **isula exec container\_name script &,isula exec**. The command is executed in the background. The script continuously displays a file by running the **cat** command. Normally, there is output on the current terminal. If you press **Enter** on the current terminal, the client exits the stdout read operation due to the I/O read failure. As a result, the terminal does not output data. The server continues to write data to the buffer of the FIFO because the process is still displaying files by running the **cat** command. When the buffer is full, the process in the container is suspended in the write operation. + +- When a lightweight container uses the **exec** command to execute commands with pipe operations, you are advised to run the **/bin/bash -c** command. + + Typical application scenarios: + + Run the **isula exec container\_name -it ls /test | grep "xx" | wc -l** command to count the number of xx files in the test directory. The output is processed by **grep** and **wc** through the pipe because **ls /test** is executed with **exec**. The output of **ls /test** executed by **exec** contains line breaks. When the output is processed, the result is incorrect. + + Cause: Run the **ls /test** command using **exec**. The command output contains a line feed character. Run the**| grep "xx" | wc -l** command for the output. The processing result is 2 \(two lines\). + + ```shell + # isula exec -it container ls /test + xx xx10 xx12 xx14 xx3 xx5 xx7 xx9 + xx1 xx11 xx13 xx2 xx4 xx6 xx8 + # + ``` + + Suggestion: When running the **run/exec** command to perform pipe operations, run the **/bin/bash -c** command to perform pipe operations in the container. + + ```shell + # isula exec -it container /bin/sh -c "ls /test | grep "xx" | wc -l" + 15 + # + ``` + +- Do not use the **echo** option to input data to the standard input of the **exec** command. Otherwise, the client will be suspended. The echo value should be directly transferred to the container as a command line parameter. + + ```shell + # echo ls | isula exec 38 /bin/sh + + ^C + # + ``` + + The client is suspended when the preceding command is executed because the preceding command is equivalent to input **ls** to **stdin**. Then EOF is read and the client does not send data and waits for the server to exit. However, the server cannot determine whether the client needs to continue sending data. As a result, the server is suspended in reading data, and both parties are suspended. + + The correct execution method is as follows: + + ```shell + # isula exec 38 ls + bin dev etc home proc root sys tmp usr var + ``` + +### Example + +Run the echo command in a running container. + +```shell +# isula exec c75284634bee echo "hello,world" +hello,world +``` + +## Querying Information About a Single Container + +### Description + +To query information about a single container, run the **isula inspect** command. + +### Usage + +```shell +isula inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...] +``` + +### Parameters + +The following table lists the parameters supported by the **inspect** command. + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

inspect

+

  

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

-D, --debug

+

Enables the debug mode.

+

--help

+

Prints help information.

+

-f, --format

+

Output format.

+

-t, --time

+

Timeout interval, in seconds. If the inspect command fails to query container information within the specified period, the system stops waiting and reports an error immediately. The default value is 120s. If the value is less than or equal to 0, the inspect command keeps waiting until the container information is obtained successfully.

+
+ +### Example + +Query information about a container. + +```shell +# isula inspect -f '{{.State.Status} {{.State.Running}}' c75284634bee +running +true + +# isula inspect c75284634bee +[ + { + "Id": "c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a", + "Created": "2019-08-01T22:48:13.993304927-04:00", + "Path": "sh", + "Args": [], + "State": { + "Status": "running", + "Running": true, + "Paused": false, + "Restarting": false, + "Pid": 21164, + "ExitCode": 0, + "Error": "", + "StartedAt": "2019-08-02T06:09:25.535049168-04:00", + "FinishedAt": "2019-08-02T04:28:09.479766839-04:00", + "Health": { + "Status": "", + "FailingStreak": 0, + "Log": [] + } + }, + "Image": "busybox", + "ResolvConfPath": "", + "HostnamePath": "", + "HostsPath": "", + "LogPath": "none", + "Name": "c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a", + "RestartCount": 0, + "HostConfig": { + "Binds": [], + "NetworkMode": "", + "GroupAdd": [], + "IpcMode": "", + "PidMode": "", + "Privileged": false, + "SystemContainer": false, + "NsChangeFiles": [], + "UserRemap": "", + "ShmSize": 67108864, + "AutoRemove": false, + "AutoRemoveBak": false, + "ReadonlyRootfs": false, + "UTSMode": "", + "UsernsMode": "", + "Sysctls": {}, + "Runtime": "runc", + "RestartPolicy": { + "Name": "no", + "MaximumRetryCount": 0 + }, + "CapAdd": [], + "CapDrop": [], + "Dns": [], + "DnsOptions": [], + "DnsSearch": [], + "ExtraHosts": [], + "HookSpec": "", + "CPUShares": 0, + "Memory": 0, + "OomScoreAdj": 0, + "BlkioWeight": 0, + "BlkioWeightDevice": [], + "CPUPeriod": 0, + "CPUQuota": 0, + "CPURealtimePeriod": 0, + "CPURealtimeRuntime": 0, + "CpusetCpus": "", + "CpusetMems": "", + "SecurityOpt": [], + "StorageOpt": {}, + "KernelMemory": 0, + "MemoryReservation": 0, + "MemorySwap": 0, + "OomKillDisable": false, + "PidsLimit": 0, + "FilesLimit": 0, + "Ulimits": [], + "Hugetlbs": [], + "HostChannel": { + "PathOnHost": "", + "PathInContainer": "", + "Permissions": "", + "Size": 0 + }, + "EnvTargetFile": "", + "ExternalRootfs": "" + }, + "Mounts": [], + "Config": { + "Hostname": "localhost", + "User": "", + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "TERM=xterm", + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "Tty": true, + "Cmd": [ + "sh" + ], + "Entrypoint": [], + "Labels": {}, + "Annotations": { + "log.console.file": "none", + "log.console.filerotate": "7", + "log.console.filesize": "1MB", + "rootfs.mount": "/var/lib/isulad/mnt/rootfs", + "native.umask": "secure" + }, + "HealthCheck": { + "Test": [], + "Interval": 0, + "Timeout": 0, + "StartPeriod": 0, + "Retries": 0, + "ExitOnUnhealthy": false + } + }, + "NetworkSettings": { + "IPAddress": "" + } + } +] +``` + +## Querying Information About All Containers + +### Description + +To query information about all containers, run the **isula ps** command. + +### Usage + +```shell +isula ps [OPTIONS] +``` + +### Parameters + +The following table lists the parameters supported by the **ps** command. + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

ps

+

  

+

  

+

  

+

  

+

-a, --all

+

Displays all containers.

+

-D, --debug

+

Enables the debug mode.

+

--help

+

Prints help information.

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

-q, --quiet

+

Displays only the container name.

+

-f, --filter

+

Adds filter criteria.

+

--format

+

Output format.

+

--no-trunc

+

Do not truncate the container ID.

+
+ +### Example + +Query information about all containers. + +```shell +# isula ps -a + +ID IMAGE STATUS PID COMMAND EXIT_CODE RESTART_COUNT STARTAT FINISHAT RUNTIME NAMES +e84660aa059c rnd-dockerhub.huawei.com/official/busybox running 304765 "sh" 0 0 13 minutes ago - runc e84660aa059cafb0a77a4002e65cc9186949132b8e57b7f4d76aa22f28fde016 +# isula ps -a --format "table {{.ID}} {{.Image}}" --no-trunc +ID IMAGE +e84660aa059cafb0a77a4002e65cc9186949132b8e57b7f4d76aa22f28fde016 rnd-dockerhub.huawei.com/official/busybox +``` + +## Restarting a Container + +### Description + +To restart one or more containers, run the **isula restart** command. + +### Usage + +```shell +isula restart [OPTIONS] CONTAINER [CONTAINER...] +``` + +### Parameters + +The following table lists the parameters supported by the **restart** command. + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

restart

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

-D, --debug

+

Enables the debug mode.

+

--help

+

Prints help information.

+

-t, --time

+

Time for graceful stop. If the time exceeds the value of this parameter, the container is forcibly stopped.

+
+ +### Constraints + +- If the **t** parameter is specified and the value of **t** is less than 0, ensure that the application in the container can process the stop signal. + + The restart command first calls the stop command to stop the container. Send the SIGTERM signal to the container, and then wait for a period of time \(**t** entered by the user\). If the container is still running after the period of time, the SIGKILL signal is sent to forcibly kill the container. + +- The meaning of the input parameter **t** is as follows: + + **t** < 0: Wait for graceful stop. This setting is preferred when users are assured that their applications have a proper stop signal processing mechanism. + + **t** = 0: Do not wait and send **kill -9** to the container immediately. + + **t** \> 0: Wait for a specified period and send **kill -9** to the container if the container does not stop within the specified period. + + Therefore, if **t** is set to a value less than 0 \(for example, **t** = -1\), ensure that the container application correctly processes the SIGTERM signal. If the container ignores this signal, the container will be suspended when the **isula stop** command is run. + +### Example + +Restart a container. + +```shell +# isula restart c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a + c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a +``` + +## Waiting for a Container to Exit + +### Description + +To wait for one or more containers to exit, run the **isula wait** command. Only containers whose runtime is of the LCR type are supported. + +### Usage + +```shell +isula wait [OPTIONS] CONTAINER [CONTAINER...] +``` + +### Parameters + +The following table lists the parameters supported by the **wait** command. + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

wait

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

-D, --debug

+

Enables the debug mode.

+

--help

+

Prints help information.

+
+ +### Example + +Wait for a single container to exit. + +```shell +$ isula wait c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a + 137 +``` + +## Viewing Process Information in a Container + +### Description + +To view process information in a container, run the **isula top** command. Only containers whose runtime is of the LCR type are supported. + +### Usage + +```shell +isula top [OPTIONS] container [ps options] +``` + +### Parameters + +The following table lists the parameters supported by the **top** command. + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

top

+

  

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

-D, --debug

+

Enables the debug mode.

+

--help

+

Prints help information.

+
+ +### Example + +Query process information in a container. + +```shell +# isula top 21fac8bb9ea8e0be4313c8acea765c8b4798b7d06e043bbab99fc20efa72629c +UID PID PPID C STIME TTY TIME CMD +root 22166 22163 0 23:04 pts/1 00:00:00 sh +``` + +## Displaying Resource Usage Statistics of a Container + +### Description + +To display resource usage statistics in real time, run the **isula stats** command. Only containers whose runtime is of the LCR type are supported. + +### Usage + +```shell +isula stats [OPTIONS] [CONTAINER...] +``` + +### Parameters + +The following table lists the parameters supported by the **stats** command. + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

stats

+

  

+

  

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

-D, --debug

+

Enables the debug mode.

+

--help

+

Prints help information.

+

-a, --all

+

Displays all containers. (By default, only running containers are displayed.)

+

--no-stream

+

Display the first result only. Only statistics in non-stream mode are displayed.

+

--original

+

Displays the original data of the container without statistics calculation.

+
+ +### Example + +Display resource usage statistics. + +```shell +# isula stats --no-stream 21fac8bb9ea8e0be4313c8acea765c8b4798b7d06e043bbab99fc20efa72629c CONTAINER CPU % MEM USAGE / LIMIT MEM % BLOCK I / O PIDS +21fac8bb9ea8 0.00 56.00 KiB / 7.45 GiB 0.00 0.00 B / 0.00 B 1 +``` + +## Obtaining Container Logs + +### Description + +To obtain container logs, run the **isula logs** command. + +### Usage + +```shell +isula logs [OPTIONS] [CONTAINER...] +``` + +### Parameters + +The following table lists the parameters supported by the **logs** command. + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

logs

+

  

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

-D, --debug

+

Enables the debug mode.

+

--help

+

Prints help information.

+

-f, --follow

+

Traces log output.

+

--tail

+

Displays the number of log records.

+

-t, --timestamps

+

Displays the timestamp.

+
+ +### Constraints + +- By default, the container log function is enabled. To disable this function, run the **isula create --log-opt disable-log=true** or **isula run --log-opt disable-log=true** command. + +### Example + +Obtain container logs. + +```shell +# isula logs 6a144695f5dae81e22700a8a78fac28b19f8bf40e8827568b3329c7d4f742406 +hello, world +hello, world +hello, world +``` + +## Copying Data Between a Container and a Host + +### Description + +To copy data between a host and a container, run the **isula cp** command. Only containers whose runtime is of the LCR type are supported. + +### Usage + +```shell +isula cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH +isula cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH +``` + +### Parameters + +The following table lists the parameters supported by the **cp** command. + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

cp

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

-D, --debug

+

Enables the debug mode.

+

--help

+

Prints help information.

+
+ +### Constraints + +- When iSulad copies files, note that the **/etc/hostname**, **/etc/resolv.conf**, and **/etc/hosts** files are not mounted to the host, neither the **--volume** and **--mount** parameters. Therefore, the original files in the image instead of the files in the real container are copied. + + ```shell + # isula cp b330e9be717a:/etc/hostname /tmp/hostname + # cat /tmp/hostname + # + ``` + +- When decompressing a file, iSulad does not check the type of the file or folder to be overwritten in the file system. Instead, iSulad directly overwrites the file or folder. Therefore, if the source is a folder, the file with the same name is forcibly overwritten as a folder. If the source file is a file, the folder with the same name will be forcibly overwritten as a file. + + ```shell + # rm -rf /tmp/test_file_to_dir && mkdir /tmp/test_file_to_dir + # isula exec b330e9be717a /bin/sh -c "rm -rf /tmp/test_file_to_dir && touch /tmp/test_file_to_dir" + # isula cp b330e9be717a:/tmp/test_file_to_dir /tmp + # ls -al /tmp | grep test_file_to_dir + -rw-r----- 1 root root 0 Apr 26 09:59 test_file_to_dir + ``` + +- The **cp** command is used only for maintenance and fault locating. Do not use the **cp** command in the production environment. + +### Example + +Copy the **/test/host** directory on the host to the **/test** directory on container 21fac8bb9ea8. + +```shell +isula cp /test/host 21fac8bb9ea8:/test +``` + +Copy the **/www** directory on container 21fac8bb9ea8 to the **/tmp** directory on the host. + +```shell +isula cp 21fac8bb9ea8:/www /tmp/ +``` + +## Pausing All Processes in a Container + +### Description + +The **isula pause** command is used to pause all processes in one or more containers. + +### Usage + +```shell +isula pause [OPTIONS] CONTAINER [CONTAINER...] +``` + +### Parameters + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

pause

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

-D, --debug

+

Enables the debug mode.

+

--help

+

Prints help information.

+
+ +### Constraints + +- Only containers in the running state can be paused. +- After a container is paused, other lifecycle management operations \(such as **restart**, **exec**, **attach**, **kill**, **stop**, and **rm**\) cannot be performed. +- After a container with health check configurations is paused, the container status changes to unhealthy. + +### Example + +Pause a running container. + +```shell +# isula pause 8fe25506fb5883b74c2457f453a960d1ae27a24ee45cdd78fb7426d2022a8bac + 8fe25506fb5883b74c2457f453a960d1ae27a24ee45cdd78fb7426d2022a8bac +``` + +## Resuming All Processes in a Container + +### Description + +The **isula unpause** command is used to resume all processes in one or more containers. It is a reversible process of **isula pause**. + +### Usage + +```shell +isula unpause [OPTIONS] CONTAINER [CONTAINER...] +``` + +### Parameters + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

pause

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

-D, --debug

+

Enables the debug mode.

+

--help

+

Prints help information.

+
+ +### Constraints + +- Only containers in the paused state can be unpaused. + +### Example + +Resume a paused container. + +```shell +# isula unpause 8fe25506fb5883b74c2457f453a960d1ae27a24ee45cdd78fb7426d2022a8bac + 8fe25506fb5883b74c2457f453a960d1ae27a24ee45cdd78fb7426d2022a8bac +``` + +## Obtaining Event Messages from the Server in Real Time + +### **Description** + +The **isula events** command is used to obtain real-time events from the server. + +### Usage + +```shell +isula events [OPTIONS] +``` + +### Parameter + + + + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Parameter

+

Description

+

events

+

-H, --host

+

Specifies the iSulad socket file path to be accessed.

+

-D, --debug

+

Enables the debug mode.

+

--help

+

Prints help information.

+

-n, --name

+

Obtains event messages of a specified container.

+

-S, --since

+

Obtains event messages generated since a specified time.

+

-U, --until

+

Obtains the event at the specified time point.

+
+ +### Constraints + +- Support container-related events: create, start, restart, stop, exec_create, exec_die, attach, kill, top, rename, archive-path, extract-to-dir, update, pause, unpause, export, and resize. +- Supported image-related events: load, remove, pull, login, and logout. + +### Example + +Run the following command to obtain event messages from the server in real time: + +```shell +# isula events +``` diff --git a/docs/en/cloud/container_engine/isula_container_engine/container_resource_management.md b/docs/en/cloud/container_engine/isula_container_engine/container_resource_management.md new file mode 100644 index 0000000000000000000000000000000000000000..fce57b4708ba2fafcd8aff1e19360e80c53890a0 --- /dev/null +++ b/docs/en/cloud/container_engine/isula_container_engine/container_resource_management.md @@ -0,0 +1,735 @@ +# Container Resource Management + +## Description + +You can use namespaces and cgroups to manage container resources. iSula can use cgroup v1 and cgroup v2 to restrict resources. cgroup v2 is an experimental feature and cannot be put into commercial use. When the system is configured to support only cgroup v2 and cgroup v2 is mounted to the **/sys/fs/cgroup** directory, iSula uses cgroup v2 for resource management. Whether cgroup v1 or cgroup v2 is used to manage container resources, iSula provides the same interface for users to implement resource restriction. + +## Sharing Resources + +### Description + +Containers or containers and hosts can share namespace information mutually, including PID, network, IPC, and UTS information. + +>[!NOTE] **NOTE:** +>When namespace information is shared with a host, the namespace isolation mechanism is unavailable. As a result, information on the host can be queried and operated in a container, causing security risks. For example, if **--pid=host** is used to share the PID namespace of a host, information about other processes on the host can be viewed, causing information leakage or even killing the host process. Exercise caution when using the shared host namespace function to ensure security. + +### Usage + +When running the **isula create/run** command, you can set the namespace parameters to share resources. For details, see the following parameter description table. + +### Parameters + +You can specify the following parameters when running the **isula create/run** command: + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

Value Range

+

Mandatory or Not

+

--pid

+

Specifies the PID namespace to be shared.

+

[none, host, container:<containerID>]: none indicates that the namespace is not shared. host indicates that the namespace is shared with the host. container:<containerID> indicates that the namespace is shared with the container.

+

No

+

--net

+

Specifies the network namespace to be shared.

+

[none, host, container:<containerID>]: none indicates that the namespace is not shared. host indicates that the namespace is shared with the host. container:<containerID> indicates that the namespace is shared with the container.

+

No

+

--ipc

+

Specifies the IPC namespace to be shared.

+

[none, host, container:<containerID>]: none indicates that the namespace is not shared. host indicates that the namespace is shared with the host. container:<containerID> indicates that the namespace is shared with the container.

+

No

+

--uts

+

Specifies the UTS namespace to be shared.

+

[none, host, container:<containerID>]: none indicates that the namespace is not shared. host indicates that the namespace is shared with the host. container:<containerID> indicates that the namespace is shared with the container.

+

No

+
+ +### Example + +If two containers need to share the same PID namespace, add **--pid container:** when running the container. For example: + +```shell +isula run -tid --name test_pid busybox sh +isula run -tid --name test --pid container:test_pid busybox sh +``` + +## Restricting CPU Resources of a Running Container + +### Description + +You can set parameters to restrict the CPU resources of a container. + +### Usage + +When running the **isula create/run** command, you can set CPU-related parameters to limit the CPU resources of a container. For details about the parameters and values, see the following table. + +### Parameters + +You can specify the following parameters when running the **isula create/run** command: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

Value Range

+

Mandatory or Not

+

--cpu-period

+

Limits the CPU CFS period in a container.

+

64-bit integer

+

No

+

--cpu-quota

+

Limits the CPU CFS quota in a container.

+

64-bit integer

+

No

+

--cpu-shares

+

Limit the CPU share (relative weight) in a container.

+

64-bit integer

+

No

+

--cpu-rt-period

+

Limits the real-time CPU period in a container, in microseconds.

+

64-bit integer

+

No

+

--cpu-rt-runtime

+

Limits the real-time running time of the CPU in a container, in microseconds.

+

64-bit integer

+

No

+

--cpuset-cpus

+

Limits the CPU nodes used by a container.

+

Character string. The value is the number of CPUs to be set. For example, the value can be **0-3** or **0,1**.

. +

No

+

--cpuset-mems

+

Limits the memory nodes used by cpuset in a container.

+

Character string. The value is the number of CPUs to be set. For example, the value can be **0-3** or **0,1**.

. +

No

+
+ +### Example + +To restrict a container to use a specific CPU, add **--cpuset-cpus number** when running the container. For example: + +```shell +isula run -tid --cpuset-cpus 0,2-3 busybox sh +``` + +>[!NOTE] **NOTE:** +>You can check whether the configuration is successful. For details, see "Querying Information About a Single Container." + +## Restricting the Memory Usage of a Running Container + +### Description + +You can set parameters to restrict the memory usage of a container. + +### Usage + +When running the **isula create/run** command, you can set memory-related parameters to restrict memory usage of containers. For details about the parameters and values, see the following table. + +### Parameters + +You can specify the following parameters when running the **isula create/run** command: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

Value Range

+

Mandatory or Not

+

--memory

+

Specifies the upper limit of the memory usage of a container.

+

64-bit integer The value is a non-negative number. The value 0 indicates that no limit is set. The unit can be empty (byte), KB, MB, GB, TB, or PB.

+

No

+

--memory-reservation

+

Specifies the soft upper limit of the memory of a container.

+

64-bit integer The value is a non-negative number. The value 0 indicates that no limit is set. The unit can be empty (byte), KB, MB, GB, TB, or PB.

+

No

+

--memory-swap

+

Specifies the upper limit of the swap memory of the container.

+

64-bit integer The value can be -1 or a non-negative number. The value -1 indicates no limit, and the value 0 indicates that no limit is set. The unit can be empty (byte), KB, MB, GB, TB, or PB.

+

No

+

--kernel-memory

+

Specifies the upper limit of the kernel memory of the container.

+

64-bit integer The value is a non-negative number. The value 0 indicates that no limit is set. The unit can be empty (byte), KB, MB, GB, TB, or PB.

+

No

+
+ +### Example + +To set the upper limit of the memory of a container, add **--memory \[\]** when running the container. For example: + +```shell +isula run -tid --memory 1G busybox sh +``` + +## Restricting I/O Resources of a Running Container + +### Description + +You can set parameters to limit the read/write speed of devices in the container. + +### Usage + +When running the **isula create/run** command, you can set **--device-read-bps/--device-write-bps :\[\]** to limit the read/write speed of devices in the container. + +### Parameters + +When running the **isula create/run** command, set **--device-read/write-bps**. + + + + + + + + + + + + + + +

Parameter

+

Description

+

Value Range

+

Mandatory or Not

+

--device-read-bps/--device-write-bps

+

Limits the read/write speed of devices in the container.

+

64-bit integer The value is a positive integer. The value can be 0, indicating that no limit is set. The unit can be empty (byte), KB, MB, GB, TB, or PB.

+

No

+
+ +### Example + +To limit the read/write speed of devices in the container, add **--device-write-bps/--device-read-bps :\[\]** when running the container. For example, to limit the read speed of the device **/dev/sda** in the container **busybox** to 1 Mbit/s, run the following command: + +```shell +isula run -tid --device-read-bps /dev/sda:1mb busybox sh +``` + +To limit the write speed, run the following command: + +```shell +isula run -tid --device-write-bps /dev/sda:1mb busybox sh +``` + +## Restricting the Rootfs Storage Space of a Container + +### Description + +When the overlay2 storage driver is used on the EXT4 file system, the file system quota of a single container can be set. For example, the quota of container A is set to 5 GB, and the quota of container B is set to 10 GB. + +This feature is implemented by the project quota function of the EXT4 file system. If the kernel supports this function, use the syscall SYS\_IOCTL to set the project ID of a directory, and then use the syscall SYS\_QUOTACTL to set the hard limit and soft limit of the corresponding project ID. + +### Usage + +1. Prepare the environment. + + Ensure that the file system supports the **Project ID** and **Project Quota** attributes, the kernel version is 4.19 or later, and the version of the peripheral package e2fsprogs is 1.43.4-2 or later. + +2. Before mounting overlayfs to a container, set different project IDs for the upper and work directories of different containers and set inheritance options. After overlayfs is mounted to a container, the project IDs and inherited attributes cannot be modified. +3. Set the quota as a privileged user outside the container. +4. Add the following configuration to daemon: + + ```shell + -s overlay2 --storage-opt overlay2.override_kernel_check=true + ``` + +5. Daemon supports the following options for setting default restrictions for containers: + + **--storage-opt overlay2.basesize=128M** specifies the default limit. If **--storage-opt size** is also specified when you run the **isula run** command, the value of this parameter takes effect. If no size is specified during the daemon process or when you run the **isula run** command, the size is not limited. + +6. Enable the **Project ID** and **Project Quota** attributes of the file system. + - Format and mount the file system. + + ```shell + mkfs.ext4 -O quota,project /dev/sdb + mount -o prjquota /dev/sdb /var/lib/isulad + ``` + +### Parameters + +When running the **create/run** command, set **--storage-opt**. + + + + + + + + + + + + + + +

Parameter

+

Description

+

Value Range

+

Mandatory or Not

+

--storage-opt size=${rootfsSize}

+

Restricts the root file system (rootfs) storage space of the container.

+

The parsed value of rootfsSize is a positive number expressed in bytes within the int64 range. The default unit is B. You can also set the unit to [kKmMgGtTpP])?[iI]?[bB]?$. (The minimum value is 10G in the device mapper scenario.)

+

No

+
+ +### Example + +In the **isula run/create** command, use the existing parameter **--storage-opt size=**_value_ to set the quota. The value is a positive number in the unit of **\[kKmMgGtTpP\]?\[iI\]?\[bB\]?**. If the value does not contain a unit, the default unit is byte. + +```console +$ [root@localhost ~]# isula run -ti --storage-opt size=10M busybox +/ # df -h +Filesystem Size Used Available Use% Mounted on +overlay 10.0M 48.0K 10.0M 0% / +none 64.0M 0 64.0M 0% /dev +none 10.0M 0 10.0M 0% /sys/fs/cgroup +tmpfs 64.0M 0 64.0M 0% /dev +shm 64.0M 0 64.0M 0% /dev/shm +/dev/mapper/vg--data-ext41 + 9.8G 51.5M 9.2G 1% /etc/hostname +/dev/mapper/vg--data-ext41 + 9.8G 51.5M 9.2G 1% /etc/resolv.conf +/dev/mapper/vg--data-ext41 + 9.8G 51.5M 9.2G 1% /etc/hosts +tmpfs 3.9G 0 3.9G 0% /proc/acpi +tmpfs 64.0M 0 64.0M 0% /proc/kcore +tmpfs 64.0M 0 64.0M 0% /proc/keys +tmpfs 64.0M 0 64.0M 0% /proc/timer_list +tmpfs 64.0M 0 64.0M 0% /proc/sched_debug +tmpfs 3.9G 0 3.9G 0% /proc/scsi +tmpfs 64.0M 0 64.0M 0% /proc/fdthreshold +tmpfs 64.0M 0 64.0M 0% /proc/fdenable +tmpfs 3.9G 0 3.9G 0% /sys/firmware +/ # +/ # dd if=/dev/zero of=/home/img bs=1M count=12 && sync +dm-4: write failed, project block limit reached. +10+0 records in +9+0 records out +10432512 bytes (9.9MB) copied, 0.011782 seconds, 844.4MB/s +/ # df -h | grep overlay +overlay 10.0M 10.0M 0 100% / +/ # +``` + +### Constraints + +1. The quota applies only to the rw layer. + + The quota of overlay2 is for the rw layer of the container. The image size is not included. + +2. The kernel supports and enables this function. + + The kernel must support the EXT4 project quota function. When running **mkfs**, add **-O quota,project**. When mounting the file system, add **-o prjquota**. If any of the preceding conditions is not met, an error is reported when **--storage-opt size=**_value_ is used. + + ```console + $ [root@localhost ~]# isula run -it --storage-opt size=10Mb busybox df -h + Error response from daemon: Failed to prepare rootfs with error: time="2019-04-09T05:13:52-04:00" level=fatal msg="error creating read- + write layer with ID "a4c0e55e82c55e4ee4b0f4ee07f80cc2261cf31b2c2dfd628fa1fb00db97270f": --storage-opt is supported only for overlay over + xfs or ext4 with 'pquota' mount option" + ``` + +3. Description of the limit of quota: + 1. If the quota is greater than the size of the partition where user **root** of iSulad is located, the file system quota displayed by running the **df** command in the container is the size of the partition where user **root** of iSulad is located, not the specified quota. + 2. **--storage-opt size=0** indicates that the size is not limited and the value cannot be less than 4096. The precision of size is one byte. If the specified precision contains decimal bytes, the decimal part is ignored. For example, if size is set to **0.1**, the size is not limited. \(The value is restricted by the precision of the floating point number stored on the computer. That is, 0.999999999999999999999999999 is equal to 1. The number of digits 9 may vary according to computers. Therefore, 4095.999999999999999999999999999 is equal to 4096.\) Note that running **isula inspect** displays the original command line specified format. If the value contains decimal bytes, you need to ignore the decimal part. + 3. If the quota is too small, for example,**--storage-opt size=4k**, the container may fail to be started because some files need to be created for starting the container. + 4. The **-o prjquota** option is added to the root partition of iSulad when iSulad is started last time. If this option is not added during this startup, the setting of the container with quota created during the last startup does not take effect. + 5. The value range of the daemon quota **--storage-opt overlay2.basesize** is the same as that of **--storage-opt size**. + +4. When **storage-opt** is set to 4 KB, the lightweight container startup is different from that of Docker. + + Use the **storage-opt size=4k** and image **rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest** to run the container. + + Docker fails to be started. + + ```console + [root@localhost ~]# docker run -itd --storage-opt size=4k rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest + docker: Error response from daemon: symlink /proc/mounts /var/lib/docker/overlay2/e6e12701db1a488636c881b44109a807e187b8db51a50015db34a131294fcf70-init/merged/etc/mtab: disk quota exceeded. + See 'docker run --help'. + ``` + + The lightweight container is started properly and no error is reported. + + ```console + [root@localhost ~]# isula run -itd --storage-opt size=4k rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest + 636480b1fc2cf8ac895f46e77d86439fe2b359a1ff78486ae81c18d089bbd728 + [root@localhost ~]# isula ps + STATUS PID IMAGE COMMAND EXIT_CODE RESTART_COUNT STARTAT FINISHAT RUNTIME ID NAMES + running 17609 rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest /bin/bash 0 0 2 seconds ago - runc 636480b1fc2c 636480b1fc2cf8ac895f46e77d86439fe2b359a1ff78486ae81c18d089bbd728 + ``` + + During container startup, if you need to create a file in the **rootfs** directory of the container, the image size exceeds 4 KB, and the quota is set to 4 KB, the file creation will fail. + + When Docker starts the container, it creates more mount points than iSulad to mount some directories on the host to the container, such as **/proc/mounts** and **/dev/shm**. If these files do not exist in the image, the creation will fail, therefore, the container fails to be started. + + When a lightweight container uses the default configuration during container startup, there are few mount points. The lightweight container is created only when the directory like **/proc** or **/sys** does not exist. The image **rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest** in the test case contains **/proc** and **/sys**. Therefore, no new file or directory is generated during the container startup. As a result, no error is reported during the lightweight container startup. To verify this process, when the image is replaced with **rnd-dockerhub.huawei.com/official/busybox-aarch64:latest**, an error is reported when the lightweight container is started because **/proc** does not exist in the image. + + ```console + [root@localhost ~]# isula run -itd --storage-opt size=4k rnd-dockerhub.huawei.com/official/busybox-aarch64:latest + 8e893ab483310350b8caa3b29eca7cd3c94eae55b48bfc82b350b30b17a0aaf4 + Error response from daemon: Start container error: runtime error: 8e893ab483310350b8caa3b29eca7cd3c94eae55b48bfc82b350b30b17a0aaf4:tools/lxc_start.c:main:404 starting container process caused "Failed to setup lxc, + please check the config file." + ``` + +5. Other description: + + When using iSulad with the quota function to switch data disks, ensure that the data disks to be switched are mounted using the **prjquota** option and the mounting mode of the **/var/lib/isulad/storage/overlay2** directory is the same as that of the **/var/lib/isulad** directory. + + > [!NOTE] **NOTE:** + > Before switching the data disk, ensure that the mount point of **/var/lib/isulad/storage/overlay2** is unmounted. + +## Restricting the Number of File Handles in a Container + +### Description + +You can set parameters to limit the number of file handles that can be opened in a container. + +### Usage + +When running the **isula create/run** command, set the **--files-limit** parameter to limit the number of file handles that can be opened in a container. + +### Parameters + +Set the **--files-limit** parameter when running the **isula create/run** command. + + + + + + + + + + + + + + +

Parameter

+

Description

+

Value Range

+

Mandatory or Not

+

--files-limit

+

Limits the number of file handles that can be opened in a container.

+

64-bit integer The value can be 0 or a negative number, but cannot be greater than 2 to the power of 63 minus 1. The value 0 or a negative number indicates no limit.

+

During container creation, some handles are opened temporarily. Therefore, the value cannot be too small. Otherwise, the container may not be restricted by the file limit. If the value is less than the number of opened handles, the cgroup file cannot be written. It is recommended that the value be greater than 30.

+

No

+
+ +### Example + +When running the container, add **--files-limit n**. For example: + +```shell +isula run -ti --files-limit 1024 busybox bash +``` + +### Constraints + +1. If the **--files-limit** parameter is set to a small value, for example, 1, the container may fail to be started. + + ```console + [root@localhost ~]# isula run -itd --files-limit 1 rnd-dockerhub.huawei.com/official/busybox-aarch64 + 004858d9f9ef429b624f3d20f8ba12acfbc8a15bb121c4036de4e5745932eff4 + Error response from daemon: Start container error: Container is not running:004858d9f9ef429b624f3d20f8ba12acfbc8a15bb121c4036de4e5745932eff4 + ``` + + Docker will be started successfully, and the value of **files.limit cgroup** is **max**. + + ```console + [root@localhost ~]# docker run -itd --files-limit 1 rnd-dockerhub.huawei.com/official/busybox-aarch64 + ef9694bf4d8e803a1c7de5c17f5d829db409e41a530a245edc2e5367708dbbab + [root@localhost ~]# docker exec -it ef96 cat /sys/fs/cgroup/files/files.limit + max + ``` + + The root cause is that the startup principles of the lxc and runc processes are different. After the lxc process creates the cgroup, the files.limit value is set, and then the PID of the container process is written into the cgroup.procs file of the cgroup. At this time, the process has opened more than one handle. As a result, an error is reported, and the startup fails. After you create a cgroup by running the **runc** command, the PID of the container process is written to the cgroup.procs file of the cgroup, and then the files.limit value is set. Because more than one handle is opened by the process in the cgroup, the file.limit value does not take effect, the kernel does not report any error, and the container is started successfully. + +## Restricting the Number of Processes or Threads that Can Be Created in a Container + +### Description + +You can set parameters to limit the number of processes or threads that can be created in a container. + +### Usage + +When creating or running a container, use the **--pids-limit** parameter to limit the number of processes or threads that can be created in the container. + +### Parameters + +When running the **create/run** command, set the **--pids-limit** parameter. + + + + + + + + + + + + + + +

Parameter

+

Description

+

Value Range

+

Mandatory or Not

+

--pids-limit

+

Limits the number of file handles that can be opened in a container.

+

64-bit integer The value can be 0 or a negative number, but cannot be greater than 2 to the power of 63 minus 1. The value 0 or a negative number indicates no limit.

+

No

+
+ +### Example + +When running the container, add **--pids-limit n**. For example: + +```shell +isula run -ti --pids-limit 1024 busybox bash +``` + +### Constraints + +During container creation, some processes are created temporarily. Therefore, the value cannot be too small. Otherwise, the container may fail to be started. It is recommended that the value be greater than 10. + +## Configuring the ulimit Value in a Container + +### Description + +You can use parameters to control the resources for executed programs. + +### Usage + +Set the **--ulimit** parameter when creating or running a container, or configure the parameter on the daemon to control the resources for executed programs in the container. + +### Parameters + +Use either of the following methods to configure ulimit: + +1. When running the **isula create/run** command, use **--ulimit =\[:\]** to control the resources of the executed shell program. + + + + + + + + + + + + + + +

Parameter

+

Description

+

Value Range

+

Mandatory or Not

+

--ulimit

+

Limits the resources of the executed shell program.

+

64-bit integer The value of the soft limit must be less than or equal to that of the hard limit. If only the soft limit is specified, the value of the hard limit is equal to that of the soft limit. Some types of resources do not support negative numbers. For details, see the following table.

+

No

+
+ +2. Use daemon parameters or configuration files. + + For details, see **--default-ulimits** in [Configuration Mode](./installation_configuration.md#configuration-mode). + + **--ulimit** can limit the following types of resources: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Type

+

Description

+

Value Range

+

core

+

limits the core file size (KB)

+

64-bit integer, without unit. The value can be 0 or a negative number. The value -1 indicates no limit. Other negative numbers are forcibly converted into a large positive integer.

+

cpu

+

max CPU time (MIN)

+

data

+

max data size (KB)

+

fsize

+

maximum filesize (KB)

+

locks

+

max number of file locks the user can hold

+

memlock

+

max locked-in-memory address space (KB)

+

msgqueue

+

max memory used by POSIX message queues (bytes)

+

nice

+

nice priority

+

nproc

+

max number of processes

+

rss

+

max resident set size (KB)

+

rtprio

+

max realtime priority

+

rttime

+

realtime timeout

+

sigpending

+

max number of pending signals

+

stack

+

max stack size (KB)

+

nofile

+

max number of open file descriptors

+

64-bit integer, without unit. The value cannot be negative. A negative number is forcibly converted to a large positive number. In addition, "Operation not permitted" is displayed during the setting.

+
+ +### Example + +When creating or running a container, add **--ulimit =\[:\]**. For example: + +```shell +isula create/run -tid --ulimit nofile=1024:2048 busybox sh +``` + +### Constraints + +The ulimit cannot be configured in the **daemon.json** and **/etc/sysconfig/iSulad** files \(or the iSulad command line\). Otherwise, an error is reported when iSulad is started. diff --git a/docs/en/cloud/container_engine/isula_container_engine/cri.md b/docs/en/cloud/container_engine/isula_container_engine/cri.md new file mode 100644 index 0000000000000000000000000000000000000000..9481222b8fa9657ceb3f6df243422d506928bbe2 --- /dev/null +++ b/docs/en/cloud/container_engine/isula_container_engine/cri.md @@ -0,0 +1,1970 @@ +# CRI + +## Description + +The Container Runtime Interface \(CRI\) provided by Kubernetes defines container and image service APIs. iSulad uses the CRI to interconnect with Kubernetes. + +Since the container runtime is isolated from the image lifecycle, two services need to be defined. This API is defined by using [Protocol Buffer](https://developers.google.com/protocol-buffers/) based on [gRPC](https://grpc.io/). + +The current CRI version is v1alpha1. For official API description, access the following link: + +[https://github.com/kubernetes/kubernetes/blob/release-1.14/pkg/kubelet/apis/cri/runtime/v1alpha2/api.proto](https://github.com/kubernetes/kubernetes/blob/release-1.14/pkg/kubelet/apis/cri/runtime/v1alpha2/api.proto) + +iSulad uses the API description file of version 1.14 used by Pass, which is slightly different from the official API description file. API description in this document prevails. + +>[!NOTE] **NOTE:** +>The listening IP address of the CRI WebSocket streaming service is **127.0.0.1** and the port number is **10350**. The port number can be configured in the **--websocket-server-listening-port** command or in the **daemon.json** configuration file. + +## APIs + +The following tables list the parameters that may be used in each API. Some parameters do not take effect now, which have been noted in the corresponding parameter description. + +### API Parameters + +- **DNSConfig** + + This API is used to configure DNS servers and search domains of a sandbox. + + + + + + + + + + + + + + + +

Parameter

+

Description

+

repeated string servers

+

DNS server list of a cluster.

+

repeated string searches

+

DNS search domain list of a cluster.

+

repeated string options

+

DNS option list. For details, see https://linux.die.net/man/5/resolv.conf.

+
+ +- **Protocol** + + This API is used to specify enum values of protocols. + + + + + + + + + + + + +

Parameter

+

Description

+

TCP = 0↵

+

Transmission Control Protocol (TCP).

+

UDP = 1

+

User Datagram Protocol (UDP).

+
+ +- **PortMapping** + + This API is used to configure the port mapping for a sandbox. + + | **参数成员** | **描述** | + |----------------------|--------------------| + | Protocol protocol | Protocol used for port mapping. | + | int32 container_port | Port number in the container. | + | int32 host_port | Port number on the host. | + | string host_ip | Host IP address. | + +- **MountPropagation** + + This API is used to specify enums of mount propagation attributes. + + + + + + + + + + + + + + + +

Parameter

+

Description

+

PROPAGATION_PRIVATE = 0

+

No mount propagation attributes, that is, private in Linux.

+

PROPAGATION_HOST_TO_CONTAINER = 1

+

Mount attribute that can be propagated from the host to the container, that is, rslave in Linux.

+

PROPAGATION_BIDIRECTIONAL = 2

+

Mount attribute that can be propagated between a host and a container, that is, rshared in Linux.

+
+ +- **Mount** + + This API is used to mount a volume on the host to a container. \(Only files and folders are supported.\) + + | **Parameter** | **Description** | + |------------------------------|---------------------------------------------------------------------------------| + | string container_path | Path in the container. | + | string host_path | Path on the host. | + | bool readonly | Whether the configuration is read-only in the container. Default value: **false** | + | bool selinux_relabel | Whether to set the SELinux label. This parameter does not take effect now. | + | MountPropagation propagation | Mount propagation attribute. The value can be **0**, **1**, or **2**, corresponding to the **private**, **rslave**, or **rshared** propagation attributes, respectively. The default value i **0**. | + +- **NamespaceOption** + + + + + + + + + + + + + + + +

Parameter

+

Description

+

bool host_network

+

Whether to use host network namespaces.

+

bool host_pid

+

Whether to use host PID namespaces.

+

bool host_ipc

+

Whether to use host IPC namespaces.

+
+ +- **Capability** + + This API is used to specify the capabilities to be added and deleted. + + + + + + + + + + + + +

Parameter

+

Description

+

repeated string add_capabilities

+

Capabilities to be added.

+

repeated string drop_capabilities

+

Capabilities to be deleted.

+
+ +- **Int64Value** + + This API is used to encapsulate data of the signed 64-bit integer type. + + + + + + + + + +

Parameter

+

Description

+

int64 value

+

Actual value of the signed 64-bit integer type.

+
+ +- **UInt64Value** + + This API is used to encapsulate data of the unsigned 64-bit integer type. + + + + + + + + + +

Parameter

+

Description

+

uint64 value

+

Actual value of the unsigned 64-bit integer type.

+
+ +- **LinuxSandboxSecurityContext** + + This API is used to configure the Linux security options of a sandbox. + + Note that these security options are not applied to containers in the sandbox, and may not be applied to the sandbox without any running process. + + | **参数成员** | **描述** | + |------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| + | NamespaceOption namespace_options | Sandbox namespace options. | + | SELinuxOption selinux_options | SELinux options. This parameter does not take effect now. | + | Int64Value run_as_user | Process UID in the sandbox. | + | bool readonly_rootfs | Whether the root file system of the sandbox is read-only. | + | repeated int64 supplemental_groups | Information of the user group of the init process in the sandbox (except the primary GID). | + | bool privileged | Whether the sandbox is a privileged container. | + | string seccomp_profile_path | Path to the seccomp configuration file. Valid values are as follows:
**// unconfined**: seccomp is not configured.
**// localhost/**\
// \
// **// unconfined** is the default value. | + +- **LinuxPodSandboxConfig** + + This API is used to configure information related to the Linux host and containers. + + | **参数成员** | **描述** | + |----------------------------------------------|-----------------------------------------------------------------------------------------| + | string cgroup_parent | Parent path of the cgroup of the sandbox. The runtime can use the cgroupfs or systemd syntax based on site requirements. This parameter does not take effect now. | + | LinuxSandboxSecurityContext security_context | Security attribute of the sandbox. | + | map\ sysctls | Linux sysctls configuration of the sandbox. | + +- **PodSandboxMetadata** + + Sandbox metadata contains all information that constructs a sandbox name. It is recommended that the metadata be displayed on the user interface during container running to improve user experience. For example, a unique sandbox name can be generated based on the metadata during running. + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

string name

+

Sandbox name.

+

string uid

+

Sandbox UID.

+

string namespace

+

Sandbox namespace.

+

uint32 attempt

+

Number of attempts to create a sandbox.

+

Default value: 0

+
+ +- **PodSandboxConfig** + + This API is used to specify all mandatory and optional configurations for creating a sandbox. + + | **参数成员** | **描述** | + |------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------| + | PodSandboxMetadata metadata | Sandbox metadata, which uniquely identifies a sandbox. The runtime must use the information to ensure that operations are correctly performed, and to improve user experience, for example, construct a readable sandbox name. | + | string hostname | Host name of the sandbox. | + | string log_directory | Folder for storing container log files in the sandbox. | + | DNSConfig dns_config | Sandbox DNS configuration. | + | repeated PortMapping port_mappings | Sandbox port mapping. | + | map\ labels | Key-value pair that can be used to identify a sandbox or a series of sandboxes. | + | map\ annotations | /a>Key-value pair that stores any information, whose values cannot be changed and can be queried by using the **PodSandboxStatus** API. | + | LinuxPodSandboxConfig linux | Options related to the Linux host. | + +- **PodSandboxNetworkStatus** + + This API is used to describe the network status of a sandbox. + + + + + + + + + + + + + + + +

Parameter

+

Description

+

string ip

+

IP address of the sandbox.

+

string name

+

Network interface name in the sandbox.

+

string network

+

Name of the additional network.

+
+ +- **Namespace** + + This API is used to set namespace options. + + | **参数成员** | **描述** | + |-------------------------|--------------------| + | NamespaceOption options | Linux namespace options. | + +- **LinuxPodSandboxStatus** + + This API is used to describe the status of a Linux sandbox. + + | **参数成员** | **描述** | + |----------------------|-----------------| + | Namespace **namespaces** | Sandbox namespace. | + +- **PodSandboxState** + + This API is used to specify enum data of the sandbox status values. + + + + + + + + + + + + +

Parameter

+

Description

+

SANDBOX_READY = 0

+

The sandbox is ready.

+

SANDBOX_NOTREADY = 1

+

The sandbox is not ready.

+
+ +- **PodSandboxStatus** + + This API is used to describe the PodSandbox status. + + | **Parameter** | **Description** | + |-------------------------------------------|---------------------------------------------------| + | string id | Sandbox ID. | + | PodSandboxMetadata metadata | Sandbox metadata. | + | PodSandboxState state | Sandbox status value. | + | int64 created_at | Sandbox creation timestamp (unit: ns). | + | repeated PodSandboxNetworkStatus networks | Multi-plane network status of the sandbox. | + | LinuxPodSandboxStatus linux | Sandbox status complying with the Linux specifications. | + | map\ labels | Key-value pair that can be used to identify a sandbox or a series of sandboxes. | + | map\ annotations | Key-value pair that stores any information, whose values cannot be changed by the runtime. | + +- **PodSandboxStateValue** + + This API is used to encapsulate **PodSandboxState**. + + | **Parameter** | **Description** | + |-----------------------|-----------------| + | PodSandboxState state | Sandbox status value. | + +- **PodSandboxFilter** + + This API is used to add filter criteria for the sandbox list. The intersection of multiple filter criteria is displayed. + + | **Parameter** | **Description** | + |------------------------------------|------------------------------------------------------| + | string id | Sandbox ID. | + | PodSandboxStateValue state | Sandbox status value. | + | map\ label_selector | /a>Sandbox label, which does not support regular expressions and must be fully matched. | + +- **PodSandbox** + + This API is used to provide a minimum description of a sandbox. + + | **Parameter** | **Description** | + |---------------------------------|---------------------------------------------------| + | string id | Sandbox ID. | + | PodSandboxMetadata metadata | Sandbox metadata. | + | PodSandboxState state | Sandbox status value. | + | int64 created_at | Sandbox creation timestamp (unit: ns). | + | map\ labels | Key-value pair that can be used to identify a sandbox or a series of sandboxes. | + | map\ annotations | Key-value pair that stores any information, whose values cannot be changed by the runtime. | + +- **KeyValue** + + This API is used to encapsulate key-value pairs. + + + + + + + + + + + + +

Parameter

+

Description

+

string key

+

Key

+

string value

+

Value

+
+ +- **SELinuxOption** + + This API is used to specify the SELinux label of a container. + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

string user

+

User

+

string role

+

Role

+

string type

+

Type

+

string level

+

Level

+
+ +- **ContainerMetadata** + + Container metadata contains all information that constructs a container name. It is recommended that the metadata be displayed on the user interface during container running to improve user experience. For example, a unique container name can be generated based on the metadata during running. + + + + + + + + + + + + +

Parameter

+

Description

+

string name

+

Container name.

+

uint32 attempt

+

Number of attempts to create a container.

+

Default value: 0

+
+ +- **ContainerState** + + This API is used to specify enums of container status values. + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

CONTAINER_CREATED = 0

+

The container is created.

+

CONTAINER_RUNNING = 1

+

The container is running.

+

CONTAINER_EXITED = 2

+

The container exits.

+

CONTAINER_UNKNOWN = 3

+

Unknown container status.

+
+ +- **ContainerStateValue** + + This API is used to encapsulate the data structure of **ContainerState**. + + | **参数成员** | **描述** | + |----------------------|------------| + | ContainerState **state** | Container status value. | + +- **ContainerFilter** + + This API is used to add filter criteria for the container list. The intersection of multiple filter criteria is displayed. + + | **参数成员** | **描述** | + |------------------------------------|--------------------------------------------------------| + | string id | Container ID. | + | PodSandboxStateValue state | Container status. | + | string pod_sandbox_id | Sandbox ID. | + | map\ label_selector | Container label, which does not support regular expressions and must be fully matched. | + +- **LinuxContainerSecurityContext** + + This API is used to specify container security configurations. + + | **参数成员** | **描述** | + |------------------------------------|------------------------------------------------------------------------------------------------------------------------------------| + | Capability capabilities | Added or removed capabilities. | + | bool privileged | Whether the container is in privileged mode. Default value: **false** | + | NamespaceOption namespace_options | Container namespace options. | + | SELinuxOption selinux_options | SELinux context, which is optional. This parameter does not take effect now. | + | Int64Value run_as_user | UID for running container processes. Only **run_as_user** or **run_as_username** can be specified at a time. **run_as_username** is preferred. | + | string run_as_username | Username for running container processes. If specified, the user must exist in **/etc/passwd** in the container image and be parsed by the runtime. Otherwise, an error must occur during running. | + | bool readonly_rootfs | Whether the root file system in a container is read-only. The default value is configured in **config.json**. | + | repeated int64 supplemental_groups | List of user groups of the init process running in the container (except the primary GID). | + | string apparmor_profile | AppArmor configuration file of the container. This parameter does not take effect now. | + | string seccomp_profile_path | Path to the seccomp configuration file of the container. | + | bool no_new_privs | Whether to set the **no_new_privs** flag in the container. | + +- **LinuxContainerResources** + + This API is used to specify configurations of Linux container resources. + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

int64 cpu_period

+

CPU CFS period. Default value: 0

+

int64 cpu_quota

+

CPU CFS quota. Default value: 0

+

int64 cpu_shares

+

CPU share (relative weight). Default value: 0

+

int64 memory_limit_in_bytes

+

Memory limit (unit: byte). Default value: 0

+

int64 oom_score_adj

+

OOMScoreAdj that is used to adjust the OOM killer. Default value: 0

+

string cpuset_cpus

+

CPU core used by the container. Default value: null

+

string cpuset_mems

+

Memory nodes used by the container. Default value: null

+
+ +- **Image** + + This API is used to describe the basic information about an image. + + | **参数成员** | **描述** | + |------------------------------|------------------------| + | string id | Image ID. | + | repeated string repo_tags | Image tag **repo_tags**. | + | repeated string repo_digests | Image digest information. | + | uint64 size | Image size. | + | Int64Value uid | Default image UID. | + | string username | Default image user name. | + +- **ImageSpec** + + This API is used to represent the internal data structure of an image. Currently, ImageSpec encapsulates only the container image name. + + + + + + + + + +

Parameter

+

Description

+

string image

+

Container image name.

+
+ +- **StorageIdentifier** + + This API is used to specify the unique identifier for defining the storage. + + + + + + + + + +

Parameter

+

Description

+

string uuid

+

Device UUID.

+
+ +- **FilesystemUsage** + + | **参数成员** | **描述** | + |------------------------------|----------------------------| + | int64 timestamp | Timestamp when file system information is collected. | + | StorageIdentifier storage_id | UUID of the file system that stores images. | + | UInt64Value used_bytes | Size of the metadata that stores images. | + | UInt64Value inodes_used | Number of inodes of the metadata that stores images. | + +- **AuthConfig** + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

string username

+

Username used for downloading images.

+

string password

+

Password used for downloading images.

+

string auth

+

Authentication information used for downloading images. The value is encoded by using Base64.

+

string server_address

+

IP address of the server where images are downloaded. This parameter does not take effect now.

+

string identity_token

+

Information about the token used for the registry authentication. This parameter does not take effect now.

+

string registry_token

+

Information about the token used for the interaction with the registry. This parameter does not take effect now.

+
+ +- **Container** + + This API is used to describe container information, such as the ID and status. + + | **参数成员** | **描述** | + |---------------------------------|-------------------------------------------------------------| + | string id | Container ID. | + | string pod_sandbox_id | ID of the sandbox to which the container belongs. | + | ContainerMetadata metadata | Container metadata. | + | ImageSpec image | Image specifications. | + | string image_ref | Image used by the container. This parameter is an image ID for most runtime. | + | ContainerState state | Container status. | + | int64 created_at | Container creation timestamp (unit: ns). | + | map\ labels | Key-value pair that can be used to identify a container or a series of containers. | + | map\ annotations | Key-value pair that stores any information, whose values cannot be changed by the runtime. | + +- **ContainerStatus** + + This API is used to describe the container status information. + + | **参数成员** | **描述** | + |---------------------------------|---------------------------------------------------------------------------| + | string id | Container ID. | + | ContainerMetadata metadata | Container metadata. | + | ContainerState state | Container status. | + | int64 created_at | Container creation timestamp (unit: ns). | + | int64 started_at | Container start timestamp (unit: ns). | + | int64 finished_at | Container exit timestamp (unit: ns). | + | int32 exit_code | Container exit code. | + | ImageSpec image | Image specifications. | + | string image_ref | Image used by the container. This parameter is an image ID for most runtime. | + | string reason | Brief description of the reason why the container is in the current status. | + | string message | Information that is easy to read and indicates the reason why the container is in the current status. | + | map\ labels | Key-value pair that can be used to identify a container or a series of containers. | + | map\ annotations | Key-value pair that stores any information, whose values cannot be changed by the runtime. | + | repeated Mount mounts | Information about the container mount point. | + | string log_path | Path to the container log file in the **log_directory** folder configured in **PodSandboxConfig**. | + +- **ContainerStatsFilter** + + This API is used to add filter criteria for the container stats list. The intersection of multiple filter criteria is displayed. + + + + + + + + + + + + + + + +

Parameter

+

Description

+

string id

+

Container ID.

+

string pod_sandbox_id

+

Sandbox ID.

+

map<string, string> label_selector

+

Container label, which does not support regular expressions and must be fully matched.

+
+ +- **ContainerStats** + + This API is used to add filter criteria for the container stats list. The intersection of multiple filter criteria is displayed. + + | **参数成员** | **描述** | + |--------------------------------|----------------| + | ContainerAttributes attributes | Container information. | + | CpuUsage cpu | CPU usage information. | + | MemoryUsage memory | Memory usage information. | + | FilesystemUsage writable_layer | Information about the writable layer usage. | + +- **ContainerAttributes** + + This API is used to list basic container information. + + | **参数成员** | **描述** | + |--------------------------------|---------------------------------------------------| + | string id | Container ID. | + | ContainerMetadata metadata | Container metadata. | + | map\ labels | Key-value pair that can be used to identify a container or a series of containers. | + | map\ annotations | Key-value pair that stores any information, whose values cannot be changed by the runtime. | + +- **CpuUsage** + + This API is used to list the CPU usage information of a container. + + + + + + + + + + + + +

Parameter

+

Description

+

int64 timestamp

+

Timestamp.

+

UInt64Value usage_core_nano_seconds

+

CPU usage (unit: ns).

+
+ +- **MemoryUsage** + + This API is used to list the memory usage information of a container. + + + + + + + + + + + + +

Parameter

+

Description

+

int64 timestamp

+

Timestamp.

+

UInt64Value working_set_bytes

+

Memory usage.

+
+ +- **FilesystemUsage** + + This API is used to list the read/write layer information of a container. + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

int64 timestamp

+

Timestamp.

+

StorageIdentifier storage_id

+

Writable layer directory.

+

UInt64Value used_bytes

+

Number of bytes occupied by images at the writable layer.

+

UInt64Value inodes_used

+

Number of inodes occupied by images at the writable layer.

+
+ +- **Device** + + This API is used to specify the host volume to be mounted to a container. + + + + + + + + + + + + + + +

Parameter

+

Description

+

string container_path

+

Mounting path of a container.

+

string host_path

+

Mounting path on the host.

+

string permissions

+

Cgroup permission of a device. (r indicates that containers can be read from a specified device. w indicates that containers can be written to a specified device. m indicates that containers can create new device files.)

+
+ +- **LinuxContainerConfig** + + This API is used to specify Linux configurations. + + | **Parameter** | **Description** | + |------------------------------------------------|-------------------------| + | LinuxContainerResources resources | Container resource specifications. | + | LinuxContainerSecurityContext security_context | Linux container security configuration. | + +- **ContainerConfig** + + This API is used to specify all mandatory and optional fields for creating a container. + + | **Parameter** | **Description** | + |---------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------| + | ContainerMetadata metadata | Container metadata. The information will uniquely identify a container and should be used at runtime to ensure correct operations. The information can also be used at runtime to optimize the user experience (UX) design, for example, construct a readable name. This parameter is mandatory. | + | ImageSpec image | Image used by the container. This parameter is mandatory. | + | repeated string command | Command to be executed. Default value: **/bin/sh** | + | repeated string args | Parameters of the command to be executed. | + | string working_dir | Current working directory of the command. | + | repeated KeyValue envs | Environment variables configured in the container. | + | repeated Mount mounts | Information about the mount point to be mounted in the container. | + | repeated Device devices | Information about the device to be mapped in the container. | + | map\ labels | Key-value pair that can be used to index and select a resource. | + | map\ annotations | Unstructured key-value mappings that can be used to store and retrieve any metadata. | + | string log_path | Relative path to **PodSandboxConfig.LogDirectory**, which is used to store logs (STDOUT and STDERR) on the container host. | + | bool stdin | Whether to open **stdin** of the container. | + | bool stdin_once | Whether to immediately disconnect other data flows connected with **stdin** when a data flow connected with **stdin** is disconnected. This parameter does not take effect now. | + | bool tty | Whether to use a pseudo terminal to connect to **stdio** of the container. | + | LinuxContainerConfig linux | lContainer configuration information in the Linux system. | + +- **RuntimeConfig** + + This API is used to specify runtime network configurations. + + | **Parameter** | **Description** | + |------------------------------|-------------------| + | NetworkConfig network_config | Runtime network configurations. | + +- **RuntimeCondition** + + This API is used to describe runtime status information. + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

string type

+

Runtime status type.

+

bool status

+

Runtime status.

+

string reason

+

Brief description of the reason for the runtime status change.

+

string message

+

Message with high readability, which indicates the reason for the runtime status change.

+
+ +- **RuntimeStatus** + + This API is used to describe runtime status. + + + + + + + + +

Parameter

+

Description

+

repeated RuntimeCondition conditions

+

List of current runtime status.

+
+ +### Runtime Service + +The runtime service provides APIs for operating pods and containers, and APIs for querying the configuration and status information of the runtime service. + +#### RunPodSandbox + +#### Prototype + +```text +rpc RunPodSandbox(RunPodSandboxRequest) returns (RunPodSandboxResponse) {} +``` + +#### Description + +This API is used to create and start a PodSandbox. If the PodSandbox is successfully run, the sandbox is in the ready state. + +#### Precautions + +1. The default image for starting a sandbox is **rnd-dockerhub.huawei.com/library/pause-$\{***machine***\}:3.0** where **$\{***machine***\}** indicates the architecture. On x86\_64, the value of *machine* is **amd64**. On ARM64, the value of *machine* is **aarch64**. Currently, only the **amd64** or **aarch64** image can be downloaded from the rnd-dockerhub registry. If the image does not exist on the host, ensure that the host can download the image from the rnd-dockerhub registry. If you want to use another image, refer to **pod-sandbox-image** in the *iSulad Deployment Configuration*. +2. The container name is obtained from fields in **PodSandboxMetadata** and separated by underscores \(\_\). Therefore, the metadata cannot contain underscores \(\_\). Otherwise, the **ListPodSandbox** API cannot be used for query even when the sandbox is running successfully. + +#### Parameters + +| **Parameter** | **Description** | +|-------------------------|-----------------------------------------------------------------------| +| PodSandboxConfig config | Sandbox configuration. | +| string runtime_handler | Runtime for the created sandbox. Currently, lcr and kata-runtime are supported. | + +#### Return Values + + + + + + + + + +

Return Value

+

Description

+

string pod_sandbox_id

+

If the operation is successful, the response is returned.

+
+ +#### StopPodSandbox + +#### Prototype + +```text +rpc StopPodSandbox(StopPodSandboxRequest) returns (StopPodSandboxResponse) {} +``` + +#### Description + +This API is used to stop PodSandboxes and sandbox containers, and reclaim the network resources \(such as IP addresses\) allocated to a sandbox. If any running container belongs to the sandbox, the container must be forcibly stopped. + +#### Parameters + + + + + + + + + +

Parameter

+

Description

+

string pod_sandbox_id

+

Sandbox ID.

+
+ +#### Return Values + + + + + + + + + +

Return Value

+

Description

+

None

+

None

+
+ +#### RemovePodSandbox + +#### Prototype + +```text +rpc RemovePodSandbox(RemovePodSandboxRequest) returns (RemovePodSandboxResponse) {} +``` + +#### Description + +This API is used to delete a sandbox. If any running container belongs to the sandbox, the container must be forcibly stopped and deleted. If the sandbox has been deleted, no errors will be returned. + +#### Precautions + +1. When a sandbox is deleted, network resources of the sandbox are not deleted. Before deleting a pod, you must call StopPodSandbox to clear network resources. Ensure that StopPodSandbox is called at least once before deleting the sandbox. +2. If the container in a sandbox fails to be deleted when the sandbox is deleted, the sandbox is deleted but the container remains. In this case, you need to manually delete the residual container. + +#### Parameters + + + + + + + + + +

Parameter

+

Description

+

string pod_sandbox_id

+

Sandbox ID.

+
+ +#### Return Values + + + + + + + + + +

Return Value

+

Description

+

None

+

None

+
+ +#### PodSandboxStatus + +#### Prototype + +```text +rpc PodSandboxStatus(PodSandboxStatusRequest) returns (PodSandboxStatusResponse) {} +``` + +#### Description + +This API is used to query the sandbox status. If the sandbox does not exist, an error is returned. + +#### Parameters + + + + + + + + + + + + +

Parameter

+

Description

+

string pod_sandbox_id

+

Sandbox ID

+

bool verbose

+

Whether to display additional information about the sandbox. This parameter does not take effect now.

+
+ +#### Return Values + +| **Return Value** | **Description** | +|--------------------------|------------------------------------------------------------------------------------------------------------------------------------------| +| PodSandboxStatus status | Status of the sandbox. | +| map\ info | Additional information about the sandbox. The key can be any string, and the value is a JSON character string. The information can be any debugging content. When **verbose** is set to **true**, **info** cannot be empty. This parameter does not take effect now. | + +#### ListPodSandbox + +#### Prototype + +```text +rpc ListPodSandbox(ListPodSandboxRequest) returns (ListPodSandboxResponse) {} +``` + +#### Description + +This API is used to return the sandbox information list. Filtering based on criteria is supported. + +#### Parameters + +| **Parameter** | **Description** | +|-------------------------|--------------| +| PodSandboxFilter filter | Filter criteria. | + +#### Return Values + +| **Return Value** | **Description** | +|---------------------------|-------------------| +| repeated PodSandbox items | Sandbox information list. | + +#### CreateContainer + +```text +rpc CreateContainer(CreateContainerRequest) returns (CreateContainerResponse) {} +``` + +#### Description + +This API is used to create a container in the PodSandbox. + +#### Precautions + +- **sandbox\_config** in**CreateContainerRequest** is the same as the configuration transferred to **RunPodSandboxRequest** to create a PodSandbox. It is transferred again for reference only. PodSandboxConfig must remain unchanged throughout the lifecycle of a pod. +- The container name is obtained from fields in **[ContainerMetadata** and separated by underscores \(\_\). Therefore, the metadata cannot contain underscores \(\_\). Otherwise, the **ListContainers** API cannot be used for query even when the sandbox is running successfully. +- **CreateContainerRequest** does not contain the **runtime\_handler** field. The runtime type of the container is the same as that of the corresponding sandbox. + +#### Parameters + +| **Parameter** | **Description** | +|---------------------------------|------------------------------------| +| string pod_sandbox_id | ID of the PodSandbox where a container is to be created. | +| ContainerConfig config | Container configuration information. | +| PodSandboxConfig sandbox_config | PodSandbox configuration information. | + +#### Supplement + +Unstructured key-value mappings that can be used to store and retrieve any metadata. The field can be used to transfer parameters for the fields for which the CRI does not provide specific parameters. + +- Customize the field: + + + + + + + + + +

Custom key:value

+

Description

+

cgroup.pids.max:int64_t

+

Used to limit the number of processes or threads in a container. (Set the parameter to -1 for unlimited number.)

+
+ +#### Return Values + + + + + + + + + +

Return Value

+

Description

+

string container_id

+

ID of the created container.

+
+ +#### StartContainer + +#### Prototype + +```text +rpc StartContainer(StartContainerRequest) returns (StartContainerResponse) {} +``` + +#### Description + +This API is used to start a container. + +#### Parameters + + + + + + + + + +

Parameter

+

Description

+

string container_id

+

Container ID.

+
+ +#### Return Values + + + + + + + + + +

Return Value

+

Description

+

None

+

None

+
+ +#### StopContainer + +#### Prototype + +```text +rpc StopContainer(StopContainerRequest) returns (StopContainerResponse) {} +``` + +#### Description + +This API is used to stop a running container. You can set a graceful timeout time. If the container has been stopped, no errors will be returned. + +#### Parameters + + + + + + + + + + + + +

Parameter

+

Description

+

string container_id

+

Container ID.

+

int64 timeout

+

Waiting time before a container is forcibly stopped. The default value is 0, indicating forcible stop.

+
+ +#### Return Values + +None + +#### RemoveContainer + +#### Prototype + +```text +rpc RemoveContainer(RemoveContainerRequest) returns (RemoveContainerResponse) {} +``` + +#### Description + +This API is used to delete a container. If the container is running, it must be forcibly stopped. If the container has been deleted, no errors will be returned. + +#### Parameters + + + + + + + + + +

Parameter

+

Description

+

string container_id

+

Container ID.

+
+ +#### Return Values + +None + +#### ListContainers + +#### Prototype + +```text +rpc ListContainers(ListContainersRequest) returns (ListContainersResponse) {} +``` + +#### Description + +This API is used to return the container information list. Filtering based on criteria is supported. + +#### Parameters + +| **Parameter** | **Description** | +|------------------------|--------------| +| ContainerFilter filter | Filter criteria. | + +#### Return Values + +| **Return Value** | **Description** | +|-------------------------------|----------------| +| repeated Container containers | Container information list. | + +#### ContainerStatus + +#### Prototype + +```text +rpc ContainerStatus(ContainerStatusRequest) returns (ContainerStatusResponse) {} +``` + +#### Description + +This API is used to return the container status information. If the container does not exist, an error will be returned. + +#### Parameters + + + + + + + + + + + + +

Parameter

+

Description

+

string container_id

+

Container ID.

+

bool verbose

+

Whether to display additional information about the sandbox. This parameter does not take effect now.

+
+ +#### Return Values + +| **Return Value** | **Description** | +|--------------------------|------------------------------------------------------------------------------------------------------------------------------------------| +| ContainerStatus status | Container status information. | +| map\ info | Additional information about the sandbox. The key can be any string, and the value is a JSON character string. The information can be any debugging content. When **verbose** is set to **true**, **info** cannot be empty. This parameter does not take effect now. | + +#### UpdateContainerResources + +#### Prototype + +```text +rpc UpdateContainerResources(UpdateContainerResourcesRequest) returns (UpdateContainerResourcesResponse) {} +``` + +#### Description + +This API is used to update container resource configurations. + +#### Precautions + +- This API cannot be used to update the pod resource configurations. +- The value of **oom\_score\_adj** of any container cannot be updated. + +#### Parameters + +| **Parameter** | **Description** | +|-------------------------------|-------------------| +| string container_id | Container ID. | +| LinuxContainerResources linux | Linux resource configuration information. | + +#### Return Values + +None + +#### ExecSync + +#### Prototype + +```text +rpc ExecSync(ExecSyncRequest) returns (ExecSyncResponse) {} +``` + +#### Description + +This API is used to run a command in containers in synchronization mode through the gRPC communication method. + +#### Precautions + +The interaction between the terminal and the containers must be disabled when a single command is executed. + +#### Parameters + + + + + + + + + + + + + + + +

Parameter

+

Description

+

string container_id

+

Container ID.

+

repeated string cmd

+

Command to be executed.

+

int64 timeout

+

Timeout period for stopping the command (unit: second). The default value is 0, indicating that there is no timeout limit. This parameter does not take effect now.

+
+ +#### Return Values + + + + + + + + + + + + + + + +

Return Value

+

Description

+

bytes stdout

+

Standard output of the capture command.

+

bytes stderr

+

Standard error output of the capture command.

+

int32 exit_code

+

Exit code, which represents the completion of command execution. The default value is 0, indicating that the command is executed successfully.

+
+ +#### Exec + +#### Prototype + +```text +rpc Exec(ExecRequest) returns (ExecResponse) {} +``` + +#### Description + +This API is used to run commands in a container through the gRPC communication method, that is, obtain URLs from the CRI server, and then use the obtained URLs to establish a long connection to the WebSocket server, implementing the interaction with the container. + +#### Precautions + +The interaction between the terminal and the container can be enabled when a single command is executed. One of **stdin**, **stdout**, and **stderr** must be true. If **tty** is true, **stderr** must be false. Multiplexing is not supported. In this case, the output of **stdout** and **stderr** will be combined to a stream. + +#### Parameters + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

string container_id

+

Container ID.

+

repeated string cmd

+

Command to be executed.

+

bool tty

+

Whether to run the command in a TTY.

+

bool stdin

+

Whether to generate the standard input stream.

+

bool stdout

+

Whether to generate the standard output stream.

+

bool stderr

+

Whether to generate the standard error output stream.

+
+ +#### Return Values + + + + + + + + + +

Return Value

+

Description

+

string url

+

Fully qualified URL of the exec streaming server.

+
+ +#### Attach + +#### Prototype + +```text +rpc Attach(AttachRequest) returns (AttachResponse) {} +``` + +#### Description + +This API is used to take over the init process of a container through the gRPC communication method, that is, obtain URLs from the CRI server, and then use the obtained URLs to establish a long connection to the WebSocket server, implementing the interaction with the container. + +#### Parameters + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

string container_id

+

Container ID.

+

bool tty

+

Whether to run the command in a TTY.

+

bool stdin

+

Whether to generate the standard input stream.

+

bool stdout

+

Whether to generate the standard output stream.

+

bool stderr

+

Whether to generate the standard error output stream.

+
+ +#### Return Values + + + + + + + + + +

Return Value

+

Description

+

string url

+

Fully qualified URL of the attach streaming server.

+
+ +#### ContainerStats + +#### Prototype + +```text +rpc ContainerStats(ContainerStatsRequest) returns (ContainerStatsResponse) {} +``` + +#### Description + +This API is used to return information about resources occupied by a container. Only containers whose runtime is of the LCR type are supported. + +#### Parameters + + + + + + + + + +

Parameter

+

Description

+

string container_id

+

Container ID.

+
+ +#### Return Values + +| **Return Value** | **Description** | +|----------------------|---------------------------------------------------------| +| ContainerStats stats | Container information.
Note: Disks and inodes support only the query of containers started by OCI images. | + +#### ListContainerStats + +#### Prototype + +```text +rpc ListContainerStats(ListContainerStatsRequest) returns (ListContainerStatsResponse) {} +``` + +#### Description + +This API is used to return the information about resources occupied by multiple containers. Filtering based on criteria is supported. + +#### Parameters + +| **Parameter** | **Description** | +|-----------------------------|--------------| +| ContainerStatsFilter filter | Filter criteria. | + +#### Return Values + +| **Return Value** | **Description** | +|-------------------------------|-----------------------------------------------------------------| +| repeated ContainerStats stats | Container information list. Note: Disks and inodes support only the query of containers started by OCI images. | + +#### UpdateRuntimeConfig + +#### Prototype + +```text +rpc UpdateRuntimeConfig(UpdateRuntimeConfigRequest) returns (UpdateRuntimeConfigResponse); +``` + +#### Description + +This API is used as a standard CRI to update the pod CIDR of the network plug-in. Currently, the CNI network plug-in does not need to update the pod CIDR. Therefore, this API records only access logs. + +#### Precautions + +API operations will not modify the system management information, but only record a log. + +#### Parameters + +| **Parameter** | **Description** | +|------------------------------|-------------------------| +| RuntimeConfig runtime_config | Information to be configured for the runtime. | + +#### Return Values + +None + +#### Status + +#### Prototype + +```text +rpc Status(StatusRequest) returns (StatusResponse) {}; +``` + +#### Description + +This API is used to obtain the network status of the runtime and pod. Obtaining the network status will trigger the update of network configuration. + +#### Precautions + +If the network configuration fails to be updated, the original configuration is not affected. The original configuration is overwritten only when the update is successful. + +#### Parameters + + + + + + + + + +

Parameter

+

Description

+

bool verbose

+

Whether to display additional runtime information. This parameter does not take effect now.

+
+ +#### Return Values + +| **Return Value** | **Description** | +|--------------------------|-------------------------------------------------------------------------------------------------------------| +| RuntimeStatus status | Runtime status. | +| map\ info | Additional information about the runtime. The key of **info**can be any value. The value must be in JSON format and can contain any debugging information. When **verbose** is set to **true**, **info** cannot be empty. | + +### Image Service + +The service provides the gRPC API for pulling, viewing, and removing images from the registry. + +#### ListImages + +#### Prototype + +```text +rpc ListImages(ListImagesRequest) returns (ListImagesResponse) {} +``` + +#### Description + +This API is used to list existing image information. + +#### Precautions + +This is a unified API. You can run the **cri images** command to query embedded images. However, embedded images are not standard OCI images. Therefore, query results have the following restrictions: + +- An embedded image does not have an image ID. Therefore, the value of **image ID** is the config digest of the image. +- An embedded image has only config digest, and it does not comply with the OCI image specifications. Therefore, the value of **digest** cannot be displayed. + +#### Parameters + +| **Parameter** | **Description** | +|------------------|----------------| +| ImageSpec filter | Name of the image to be filtered. | + +#### Return Values + +| **Return Value** | **Description** | +|-----------------------|--------------| +| repeated Image images | Image information list. | + +#### ImageStatus + +#### Prototype + +```text +rpc ImageStatus(ImageStatusRequest) returns (ImageStatusResponse) {} +``` + +#### Description + +This API is used to query the information about a specified image. + +#### Precautions + +1. If the image to be queried does not exist, **ImageStatusResponse** is returned and **Image** is set to **nil** in the return value. +2. This is a unified API. Since embedded images do not comply with the OCI image specifications and do not contain required fields, the images cannot be queried by using this API. + +#### Parameters + +| **Parameter** | **Description** | +|-----------------|----------------------------------------| +| ImageSpec image | Image name. | +| bool verbose | Whether to query additional information. This parameter does not take effect now. No additional information is returned. | + +#### Return Values + +| **Return Value** | **Description** | +|--------------------------|----------------------------------------| +| Image image | Image information. | +| map\ info | Additional image information. This parameter does not take effect now. No additional information is returned. | + +#### PullImage + +#### Prototype + +```text +rpc PullImage(PullImageRequest) returns (PullImageResponse) {} +``` + +#### Description + +This API is used to download images. + +#### Precautions + +Currently, you can download public images, and use the username, password, and auth information to download private images. The **server\_address**, **identity\_token**, and **registry\_token** fields in **authconfig** cannot be configured. + +#### Parameters + +| **Parameter** | **Description** | +|---------------------------------|-----------------------------------| +| ImageSpec image | Name of the image to be downloaded. | +| AuthConfig auth | Verification information for downloading a private image. | +| PodSandboxConfig sandbox_config | Whether to download an image in the pod context. This parameter does not take effect now. | + +#### Return Values + + + + + + + + + +

Return Value

+

Description

+

string image_ref

+

Information about the downloaded image.

+
+ +#### RemoveImage + +#### Prototype + +```text +rpc RemoveImage(RemoveImageRequest) returns (RemoveImageResponse) {} +``` + +#### Description + +This API is used to delete specified images. + +#### Precautions + +This is a unified API. Since embedded images do not comply with the OCI image specifications and do not contain required fields, you cannot delete embedded images by using this API and the image ID. + +#### Parameters + +| **Parameter** | **Description** | +|-----------------|------------------------| +| ImageSpec image | Name or ID of the image to be deleted. | + +#### Return Values + +None + +#### ImageFsInfo + +#### Prototype + +```text +rpc ImageFsInfo(ImageFsInfoRequest) returns (ImageFsInfoResponse) {} +``` + +#### Description + +This API is used to query the information about the file system that stores images. + +#### Precautions + +Queried results are the file system information in the image metadata. + +#### Parameters + +None + +#### Return Values + +| **Return Value** | **Description** | +|--------------------------------------------|----------------------| +| repeated FilesystemUsage image_filesystems | Information about the file system that stores images. | + +### Constraints + +1. If **log\_directory** is configured in the **PodSandboxConfig** parameter when a sandbox is created, **log\_path** must be specified in **ContainerConfig** when all containers that belong to the sandbox are created. Otherwise, the containers may not be started or deleted by using the CRI. + + The actual value of **LOGPATH** of containers is **log\_directory/log\_path**. If **log\_path** is not set, the final value of **LOGPATH** is changed to **log\_directory**. + + - If the path does not exist, iSulad will create a soft link pointing to the actual path of container logs when starting a container. Then **log\_directory** becomes a soft link. There are two cases: + 1. In the first case, if **log\_path** is not configured for other containers in the sandbox, **log\_directory** will be deleted and point to **log\_path** of the newly started container. As a result, logs of the first started container point to logs of the later started container. + 2. In the second case, if **log\_path** is configured for other containers in the sandbox, the value of **LOGPATH** of the container is **log\_directory/log\_path**. Because **log\_directory** is a soft link, the creation fails when **log\_directory/log\_path** is used as the soft link to point to the actual path of container logs. + + - If the path exists, iSulad will attempt to delete the path \(non-recursive\) when starting a container. If the path is a folder path containing content, the deletion fails. As a result, the soft link fails to be created, the container fails to be started, and the same error occurs when the container is going to be deleted. + +2. If **log\_directory** is configured in the **PodSandboxConfig** parameter when a sandbox is created, and **log\_path** is specified in **ContainerConfig** when a container is created, the final value of **LOGPATH** is **log\_directory/log\_path**. iSulad does not recursively create **LOGPATH**, therefore, you must ensure that **dirname\(LOGPATH\)** exists, that is, the upper-level path of the final log file path exists. +3. If **log\_directory** is configured in the **PodSandboxConfig** parameter when a sandbox is created, and the same **log\_path** is specified in **ContainerConfig** when multiple containers are created, or if containers in different sandboxes point to the same **LOGPATH**, the latest container log path will overwrite the previous path after the containers are started successfully. +4. If the image content in the remote registry changes and the original image is stored in the local host, the name and tag of the original image are changed to **none** when you call the CRI Pull image API to download the image again. + + An example is as follows: + + Locally stored images: + + ```text + IMAGE TAG IMAGE ID SIZE + rnd-dockerhub.huawei.com/pproxyisulad/test latest 99e59f495ffaa 753kB + ``` + + After the **rnd-dockerhub.huawei.com/pproxyisulad/test:latest** image in the remote registry is updated and downloaded again: + + ```text + IMAGE TAG IMAGE ID SIZE + 99e59f495ffaa 753kB + rnd-dockerhub.huawei.com/pproxyisulad/test latest d8233ab899d41 1.42MB + ``` + + Run the **isula images** command. The value of **REF** is displayed as **-**. + + ```text + REF IMAGE ID CREATED SIZE + rnd-dockerhub.huawei.com/pproxyisulad/test:latest d8233ab899d41 2019-02-14 19:19:37 1.42MB + - 99e59f495ffaa 2016-05-04 02:26:41 753kB + ``` + +5. The iSulad CRI API exec/attach is implemented using the WebSocket protocol. Clients interact with the iSulad using the same protocol. When using the exec/attach API, do not transfer a large amount of data or files over the serial port. The exec/attach API is used only for basic command interaction. If the user does not process the data or files in a timely manner, data may be lost. In addition, do not use the exec/attach API to transfer binary data or files. +6. The iSulad CRI API exec/attach depends on libwebsockets (LWS). It is recommended that the streaming API be used only for persistent connection interaction but not in high-concurrency scenarios, because the connection may fail due to insufficient host resources. It is recommended that the number of concurrent connections be less than or equal to 100. diff --git a/docs/en/cloud/container_engine/isula_container_engine/figures/en-us_image_0183048952.png b/docs/en/cloud/container_engine/isula_container_engine/figures/en-us_image_0183048952.png new file mode 100644 index 0000000000000000000000000000000000000000..fe9074f8fba969795f1e1d40fb879e21d5fc2a7c Binary files /dev/null and b/docs/en/cloud/container_engine/isula_container_engine/figures/en-us_image_0183048952.png differ diff --git a/docs/en/cloud/container_engine/isula_container_engine/image_management.md b/docs/en/cloud/container_engine/isula_container_engine/image_management.md new file mode 100644 index 0000000000000000000000000000000000000000..524d928be1e1ac74d04328299d845561fcddf588 --- /dev/null +++ b/docs/en/cloud/container_engine/isula_container_engine/image_management.md @@ -0,0 +1,430 @@ +# Image Management + +## Container Image Management + +### Logging In to a Registry + +#### Description + +The **isula login** command is run to log in to a registry. After successful login, you can run the **isula pull** command to pull images from the registry. If the registry does not require a password, you do not need to run this command before pulling images. + +#### Usage + +```shell +isula login [OPTIONS] SERVER +``` + +#### Parameters + +For details about the parameters in the **login** command, see **Appendix** > **Command Line Parameters** > **Table 1 login command parameters**. + +#### Example + +```shell +$ isula login -u abc my.csp-edge.com:5000 + +Login Succeeded +``` + +### Logging Out of a Registry + +#### Description + +The **isula logout** command is run to log out of a registry. If you run the **isula pull** command to pull images from the registry after logging out of the system, the image will fail to be pulled because you are not authenticated. + +#### Usage + +```shell +isula logout SERVER +``` + +#### Parameters + +For details about the parameters in the **logout** command, see **Appendix** > **Command Line Parameters** > **Table 2 logout command parameters**. + +#### Example + +```shell +$ isula logout my.csp-edge.com:5000 +Logout Succeeded +``` + +### Pulling Images from a Registry + +#### Description + +Pull images from a registry to the local host. + +#### Usage + +```shell +isula pull [OPTIONS] NAME[:TAG] +``` + +#### Parameters + +For details about the parameters in the **pull** command, see **Appendix** > **Command Line Parameters** > **Table 3 pull command parameters**. + +#### Example + +```shell +$ isula pull localhost:5000/official/busybox +Image "localhost:5000/official/busybox" pulling +Image "localhost:5000/official/busybox@sha256:bf510723d2cd2d4e3f5ce7e93bf1e52c8fd76831995ac3bd3f90ecc866643aff" pulled +``` + +### Deleting Images + +#### Description + +Delete one or more images. + +#### Usage + +```shell +isula rmi [OPTIONS] IMAGE [IMAGE...] +``` + +#### Parameters + +For details about the parameters in the **rmi** command, see **Appendix** > **Command Line Parameters** > **Table 4 rmi command parameters**. + +#### Example + +```shell +$ isula rmi rnd-dockerhub.huawei.com/official/busybox +Image "rnd-dockerhub.huawei.com/official/busybox" removed +``` + +### Adding an Image Tag + +#### Description + +Add an image tag. + +#### Usage + +```shell +isula tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] +``` + +#### Parameters + +For details about the parameters in the **tag** command, see **Appendix** > **Command Line Parameters** > **Table 8 tag command parameters**. + +#### Example + +```shell +isula tag busybox:latest test:latest +``` + +### Loading Images + +#### Description + +Load images from a .tar package. The .tar package must be exported by using the **docker save** command or must be in the same format. + +#### Usage + +```shell +isula load [OPTIONS] +``` + +#### Parameters + +For details about the parameters in the **load** command, see **Appendix** > **Command Line Parameters** > **Table 5 load command parameters**. + +#### Example + +```shell +$ isula load -i busybox.tar +Load image from "/root/busybox.tar" success +``` + +### Listing Images + +#### Description + +List all images in the current environment. + +#### Usage + +```shell +isula images [OPTIONS] +``` + +#### Parameters + +For details about the parameters in the **images** command, see **Appendix** > **Command Line Parameters** > **Table 6 images command parameters**. + +#### Example + +```shell +$ isula images +REPOSITORY TAG IMAGE ID CREATED SIZE +busybox latest beae173ccac6 2021-12-31 03:19:41 1.184MB +``` + +### Inspecting Images + +#### Description + +After the configuration information of an image is returned, you can use the **-f** parameter to filter the information as needed. + +#### Usage + +```shell +isula inspect [options] CONTAINER|IMAGE [CONTAINER|IMAGE...] +``` + +#### Parameters + +For details about the parameters in the **inspect** command, see **Appendix** > **Command Line Parameters** > **Table 7 inspect command parameters**. + +#### Example + +```shell +$ isula inspect -f "{{json .image.id}}" rnd-dockerhub.huawei.com/official/busybox +"e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b" +``` + +### Two-Way Authentication + +#### Description + +After this function is enabled, iSulad and image repositories communicate over HTTPS. Both iSulad and image repositories verify the validity of each other. + +#### Usage + +The corresponding registry needs to support this function and iSulad needs to be configured as follows: + +1. Modify iSulad configuration \(default path: **/etc/isulad/daemon.json**\) and set **use-decrypted-key** to **false**. +2. Place related certificates in the folder named after the registry in the **/etc/isulad/certs.d** directory. For details about how to generate certificates, visit the official Docker website: + - [https://docs.docker.com/engine/security/certificates/](https://docs.docker.com/engine/security/certificates/) + - [https://docs.docker.com/engine/security/https/](https://docs.docker.com/engine/security/https/) + +3. Run the **systemctl restart isulad** command to restart iSulad. + +#### Parameters + +Parameters can be configured in the **/etc/isulad/daemon.json** file or carried when iSulad is started. + +```shell +isulad --use-decrypted-key=false +``` + +#### Example + +Set **use-decrypted-key** to **false**. + +```shell +$ cat /etc/isulad/daemon.json +{ + "group": "isulad", + "graph": "/var/lib/isulad", + "state": "/var/run/isulad", + "engine": "lcr", + "log-level": "ERROR", + "pidfile": "/var/run/isulad.pid", + "log-opts": { + "log-file-mode": "0600", + "log-path": "/var/lib/isulad", + "max-file": "1", + "max-size": "30KB" + }, + "log-driver": "stdout", + "hook-spec": "/etc/default/isulad/hooks/default.json", + "start-timeout": "2m", + "storage-driver": "overlay2", + "storage-opts": [ + "overlay2.override_kernel_check=true" + ], + "registry-mirrors": [ + "docker.io" + ], + "insecure-registries": [ + "rnd-dockerhub.huawei.com" + ], + "pod-sandbox-image": "", + "image-opt-timeout": "5m", + "native.umask": "secure", + "network-plugin": "", + "cni-bin-dir": "", + "cni-conf-dir": "", + "image-layer-check": false, + "use-decrypted-key": false, + "insecure-skip-verify-enforce": false +} +``` + +Place the certificate in the corresponding directory. + +```shell +$ pwd +/etc/isulad/certs.d/my.csp-edge.com:5000 +$ ls +ca.crt tls.cert tls.key +``` + +Restart iSulad. + +```shell +systemctl restart isulad +``` + +Run the **pull** command to download images from the registry: + +```shell +$ isula pull my.csp-edge.com:5000/busybox +Image "my.csp-edge.com:5000/busybox" pulling +Image "my.csp-edge.com:5000/busybox@sha256:f1bdc62115dbfe8f54e52e19795ee34b4473babdeb9bc4f83045d85c7b2ad5c0" pulled +``` + +### Importing rootfs + +#### Description + +Import a .tar package that contains rootfs as an image. Generally, the .tar package is exported by running the **export** command or a .tar package that contains rootfs in compatible format. Currently, the .tar, .tar.gz, .tgz, .bzip, .tar.xz, and .txz formats are supported. Do not use the TAR package in other formats for import. + +#### Usage + +```shell +isula import file REPOSITORY[:TAG] +``` + +After the import is successful, the printed character string is the image ID generated by the imported rootfs. + +#### Parameters + +For details about the parameters in the **import** command, see **Appendix** > **Command Line Parameters** > **Table 9 import command parameters**. + +#### Example + +```shell +$ isula import busybox.tar test +sha256:441851e38dad32478e6609a81fac93ca082b64b366643bafb7a8ba398301839d +$ isula images +REPOSITORY TAG IMAGE ID CREATED SIZE +test latest 441851e38dad 2020-09-01 11:14:35 1.168 MB +``` + +### Exporting rootfs + +#### Description + +Export the content of the rootfs of a container as a TAR package. The exported TAR package can be imported as an image by running the **import** command. + +#### Usage + +```shell +isula export [OPTIONS] [ID|NAME] +``` + +#### Parameters + +For details about the parameters in the **export** command, see **Appendix** > **Command Line Parameters** > **Table 10 export command parameters**. + +#### Example + +```shell +$ isula run -tid --name container_test test sh +d7e601c2ef3eb8d378276d2b42f9e58a2f36763539d3bfcaf3a0a77dc668064b +$ isula export -o rootfs.tar d7e601c +$ ls +rootfs.tar +``` + +## Embedded Image Management + +### Loading Images + +#### Description + +Load images based on the **manifest** files of embedded images. The value of **--type** must be set to **embedded**. + +#### Usage + +```shell +isula load [OPTIONS] --input=FILE --type=TYPE +``` + +#### Parameters + +For details about the parameters in the **load** command, see **Appendix** > **Command Line Parameters** > **Table 5 load command parameters**. + +#### Example + +```shell +$ isula load -i test.manifest --type embedded +Load image from "/root/work/bugfix/tmp/ci_testcase_data/embedded/img/test.manifest" success +``` + +### Listing Images + +#### Description + +List all images in the current environment. + +#### Usage + +```shell +isula images [OPTIONS] +``` + +#### Parameters + +For details about the parameters in the **images** command, see **Appendix** > **Command Line Parameters** > **Table 6 images command parameters**. + +#### Example + +```shell +$ isula images +REPOSITORY TAG IMAGE ID CREATED SIZE +busybox latest beae173ccac6 2021-12-31 03:19:41 1.184MB +``` + +### Inspecting Images + +#### Description + +After the configuration information of an image is returned, you can use the **-f** parameter to filter the information as needed. + +#### Usage + +```shell +isula inspect [options] CONTAINER|IMAGE [CONTAINER|IMAGE...] +``` + +#### Parameters + +For details about the parameters in the **inspect** command, see **Appendix** > **Command Line Parameters** > **Table 7 inspect command parameters**. + +#### Example + +```shell +$ isula inspect -f "{{json .created}}" test:v1 +"2018-03-01T15:55:44.322987811Z" +``` + +### Deleting Images + +#### Description + +Delete one or more images. + +#### Usage + +```shell +isula rmi [OPTIONS] IMAGE [IMAGE...] +``` + +#### Parameters + +For details about the parameters in the **rmi** command, see **Appendix** > **Command Line Parameters** > **Table 4 rmi command parameters**. + +#### Example + +```shell +$ isula rmi test:v1 +Image "test:v1" removed +``` diff --git a/docs/en/cloud/container_engine/isula_container_engine/installation_configuration.md b/docs/en/cloud/container_engine/isula_container_engine/installation_configuration.md new file mode 100644 index 0000000000000000000000000000000000000000..dee8f5a975af275ee73fbef9ffe15c59958df49e --- /dev/null +++ b/docs/en/cloud/container_engine/isula_container_engine/installation_configuration.md @@ -0,0 +1,1014 @@ +# Installation and Configuration + +## Installation Methods + +iSulad can be installed by running the **yum** or **rpm** command. The **yum** command is recommended because dependencies can be installed automatically. + +This section describes two installation methods. + +- \(Recommended\) Run the following command to install iSulad: + + ```bash + sudo yum install -y iSulad + ``` + +- If the **rpm** command is used to install iSulad, you need to download and manually install the RMP packages of iSulad and all its dependencies. To install the RPM package of a single iSulad \(the same for installing dependency packages\), run the following command: + + ```bash + # sudo rpm -ihv iSulad-xx.xx.xx-xx.xxx.aarch64.rpm + ``` + +## Deployment Configuration + +After iSulad is installed, you can perform related configurations as required. + +### Configuration Mode + +The iSulad server daemon **isulad** can be configured with a configuration file or by running the **isulad --xxx** command. The priority in descending order is as follows: CLI \> configuration file \> default configuration in code. + +>[!NOTE] **NOTE:** +>If systemd is used to manage the iSulad process, modify the **OPTIONS** field in the **/etc/sysconfig/iSulad** file, which functions the same as using the CLI. + +- **CLI** + + During service startup, configure iSulad using the CLI. To view the configuration options, run the following command: + + ```bash + # isulad --help + isulad + + lightweight container runtime daemon + + Usage: isulad [global options] + + GLOBAL OPTIONS: + + --authorization-plugin Use authorization plugin + --cgroup-parent Set parent cgroup for all containers + --cni-bin-dir The full path of the directory in which to search for CNI plugin binaries. Default: /opt/cni/bin + --cni-conf-dir The full path of the directory in which to search for CNI config files. Default: /etc/cni/net.d + --container-log-driver Set default container log driver, such as: json-file + --container-log-opts Set default container log driver options, such as: max-file=7 to set max number of container log files + --default-ulimit Default ulimits for containers (default []) + -e, --engine Select backend engine + -g, --graph Root directory of the iSulad runtime + -G, --group Group for the unix socket(default is isulad) + --help Show help + --hook-spec Default hook spec file applied to all containers + -H, --host The socket name used to create gRPC server + --image-layer-check Check layer integrity when needed + --insecure-registry Disable TLS verification for the given registry + --insecure-skip-verify-enforce Force to skip the insecure verify(default false) + --log-driver Set daemon log driver, such as: file + -l, --log-level Set log level, the levels can be: FATAL ALERT CRIT ERROR WARN NOTICE INFO DEBUG TRACE + --log-opt Set daemon log driver options, such as: log-path=/tmp/logs/ to set directory where to store daemon logs + --native.umask Default file mode creation mask (umask) for containers + --network-plugin Set network plugin, default is null, support null and cni + -p, --pidfile Save pid into this file + --pod-sandbox-image The image whose network/ipc namespaces containers in each pod will use. (default "pause-${machine}:3.0") + --registry-mirrors Registry to be prepended when pulling unqualified images, can be specified multiple times + --selinux-enabled Enable selinux support + --start-timeout timeout duration for waiting on a container to start before it is killed + -S, --state Root directory for execution state files + --storage-driver Storage driver to use(default overlay2) + -s, --storage-opt Storage driver options + --tls Use TLS; implied by --tlsverify + --tlscacert Trust certs signed only by this CA (default "/root/.iSulad/ca.pem") + --tlscert Path to TLS certificate file (default "/root/.iSulad/cert.pem") + --tlskey Path to TLS key file (default "/root/.iSulad/key.pem") + --tlsverify Use TLS and verify the remote + --use-decrypted-key Use decrypted private key by default(default true) + --userns-remap User/Group setting for user namespaces + -V, --version Print the version + --websocket-server-listening-port CRI websocket streaming service listening port (default 10350) + ``` + + Example: Start iSulad and change the log level to **DEBUG**. + + ```bash + # isulad -l DEBUG + ``` + +- **Configuration file** + + The iSulad configuration files are **/etc/isulad/daemon.json** and **/etc/isulad/daemon_constants.json**. The parameters in the files are described as follows. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Example

+

Description

+

Remarks

+

-e, --engine

+

"engine": "lcr"

+

iSulad runtime, which is Icr by default.

+

None

+

-G, --group

+

"group": "isulad"

+

Socket group.

+

None

+

--hook-spec

+

"hook-spec": "/etc/default/isulad/hooks/default.json"

+

Default hook configuration file for all containers.

+

None

+

-H, --host

+

"hosts": "unix:///var/run/isulad.sock"

+

Communication mode.

+

In addition to the local socket, the tcp://ip:port mode is supported. The port number ranges from 0 to 65535, excluding occupied ports.

+

--log-driver

+

"log-driver": "file"

+

Log driver configuration.

+

None

+

-l, --log-level

+

"log-level": "ERROR"

+

Log output level.

+

None

+

--log-opt

+

"log-opts": {

+

"log-file-mode": "0600",

+

"log-path": "/var/lib/isulad",

+

"max-file": "1",

+

"max-size": "30KB"

+

}

+

Log-related configuration.

+

You can specify max-file, max-size, and log-path. max-file indicates the number of log files. max-size indicates the threshold for triggering log anti-explosion. If max-file is 1, max-size is invalid. log-path specifies the path for storing log files. The log-file-mode command is used to set the permissions to read and write log files. The value must be in octal format, for example, 0666.

+

--container-log-driver

+

"container-log": {

+

"driver": "json-file"

+

}

+

Default driver for serial port logs of the container.

+

Specify the default driver for serial port logs of all containers.

+

--start-timeout

+

"start-timeout": "2m"

+

Time required for starting a container.

+

None

+

None

+

"default-runtime": "runc"

+

Container runtime, which is runc by default.

+

If neither the CLI nor the configuration file specifies the runtime, runc is used by default. The priorities of the three modes for specifying the runtime are as follows: CLI > configuration file > default value runc. Currently, runc. Currently, lcr, runc, and kata-runtime are supported.

+

None

+
"runtimes":  {
+        "kata-runtime": {
+          "path": "/usr/bin/kata-runtime",
+          "runtime-args": [
+            "--kata-config",
+            "/usr/share/defaults/kata-containers/configuration.toml"
+          ]
+        }
+    }
+

When starting a container, set this parameter to specify multiple runtimes. Runtimes in this set are valid for container startup.

+

Runtime allowlist of a container. The customized runtimes in this set are valid. kata-runtime is used as the example.

+

-p, --pidfile

+

"pidfile": "/var/run/isulad.pid"

+

File for storing PIDs.

+

This parameter is required only when more than two container engines need to be started.

+

-g, --graph

+

"graph": "/var/lib/isulad"

+

Root directory for iSulad runtimes.

+

-S, --state

+

"state": "/var/run/isulad"

+

Root directory of the execution file.

+

--storage-driver

+

"storage-driver": "overlay2"

+

Image storage driver, which is overlay2 by default.

+

Only overlay2 is supported.

+

-s, --storage-opt

+

"storage-opts": [ "overlay2.override_kernel_check=true" ]

+

Image storage driver configuration options.

+

The options are as follows:

+
overlay2.override_kernel_check=true #Ignore the kernel version check.
+    overlay2.size=${size} #Set the rootfs quota to ${size}.
+    overlay2.basesize=${size} #It is equivalent to overlay2.size.
+

--registry-mirrors

+

"registry-mirrors": [ "docker.io" ]

+

Registry address.

+

None

+

--insecure-registry

+

"insecure-registries": [ ]

+

Registry without TLS verification.

+

None

+

--native.umask

+

"native.umask": "secure"

+

Container umask policy. The default value is secure. The value normal indicates insecure configuration.

+

Set the container umask value.

+

The value can be null (0027 by default), normal, or secure.

+
normal #The umask value of the started container is 0022.
+    secure #The umask value of the started container is 0027 (default value).
+

--pod-sandbox-image

+

"pod-sandbox-image": "rnd-dockerhub.huawei.com/library/pause-aarch64:3.0"

+

By default, the pod uses the image. The default value is rnd-dockerhub.huawei.com/library/pause-${machine}:3.0.

+

None

+

--network-plugin

+

"network-plugin": ""

+

Specifies a network plug-in. The value is a null character by default, indicating that no network configuration is available and the created sandbox has only the loop NIC.

+

The CNI and null characters are supported. Other invalid values will cause iSulad startup failure.

+

--cni-bin-dir

+

"cni-bin-dir": ""

+

Specifies the storage location of the binary file on which the CNI plug-in depends.

+

The default value is /opt/cni/bin.

+

--cni-conf-dir

+

"cni-conf-dir": ""

+

Specifies the storage location of the CNI network configuration file.

+

The default value is /etc/cni/net.d.

+

--image-layer-check=false

+

"image-layer-check": false

+

Image layer integrity check. To enable the function, set it to true; otherwise, set it to false. It is disabled by default.

+

When iSulad is started, the image layer integrity is checked. If the image layer is damaged, the related images are unavailable. iSulad cannot verify empty files, directories, and link files. Therefore, if the preceding files are lost due to a power failure, the integrity check of iSulad image data may fail to be identified. When the iSulad version changes, check whether the parameter is supported. If not, delete it from the configuration file.

+

--insecure-skip-verify-enforce=false

+

"insecure-skip-verify-enforce": false

+

Indicates whether to forcibly skip the verification of the certificate host name/domain name. The value is of the Boolean type, and the default value is false. If this parameter is set to true, the verification of the certificate host name/domain name is skipped.

+

The default value is false (not skipped). Note: Restricted by the YAJL JSON parsing library, if a non-Boolean value that meets the JSON format requirements is configured in the /etc/isulad/daemon.json configuration file, the default value used by iSulad is false.

+

--use-decrypted-key=true

+

"use-decrypted-key": true

+

Specifies whether to use an unencrypted private key. The value is of the Boolean type. If this parameter is set to true, an unencrypted private key is used. If this parameter is set to false, the encrypted private key is used, that is, two-way authentication is required.

+

The default value is true, indicating that an unencrypted private key is used. Note: Restricted by the YAJL JSON parsing library, if a non-Boolean value that meets the JSON format requirements is configured in the /etc/isulad/daemon.json configuration file, the default value used by iSulad is true.

+

--tls

+

"tls":false

+

Specifies whether to use TLS. The value is of the Boolean type.

+

This parameter is used only in -H tcp://IP:PORT mode. The default value is false.

+

--tlsverify

+

"tlsverify":false

+

Specifies whether to use TLS and verify remote access. The value is of the Boolean type.

+

This parameter is used only in -H tcp://IP:PORT mode.

+

--tlscacert

+

--tlscert

+

--tlskey

+

"tls-config": {

+

"CAFile": "/root/.iSulad/ca.pem",

+

"CertFile": "/root/.iSulad/server-cert.pem",

+

"KeyFile":"/root/.iSulad/server-key.pem"

+

}

+

TLS certificate-related configuration.

+

This parameter is used only in -H tcp://IP:PORT mode.

+

--authorization-plugin

+

"authorization-plugin": "authz-broker"

+

User permission authentication plugin.

+

Only authz-broker is supported.

+

--cgroup-parent

+

"cgroup-parent": "lxc/mycgroup"

+

Default cgroup parent path of a container, which is of the string type.

+

Specifies the cgroup parent path of a container. If --cgroup-parent is specified on the client, the client parameter prevails.

+

Note: If container A is started before container B, the cgroup parent path of container B is specified as the cgroup path of container A. When deleting a container, you need to delete container B and then container A in sequence. Otherwise, residual cgroup resources exist.

+

--default-ulimits

+

"default-ulimits": {

+

"nofile": {

+

"Name": "nofile",

+

"Hard": 6400,

+

"Soft": 3200

+

}

+

}

+

Specifies the ulimit restriction type, soft value, and hard value.

+

Specifies the restricted resource type, for example, nofile. The two field names must be the same, that is, nofile. Otherwise, an error is reported. The value of Hard must be greater than or equal to that of Soft. If the Hard or Soft field is not set, the default value 0 is used.

+

--websocket-server-listening-port

+

"websocket-server-listening-port": 10350

+

Specifies the listening port of the CRI WebSocket streaming service. The default port number is 10350.

+

Specifies the listening port of the CRI websocket streaming service.

+

If the client specifies --websocket-server-listening-port, the specified value is used. The port number ranges from 1024 to 49151.

+

None

+

"cri-runtimes": {

+

"kata": "io.containerd.kata.v2"

+

}

+

Specifies the mapping of custom CRI runtimes.

+

iSulad can convert RuntimeClass to the corresponding runtime through the custom CRI runtime mapping.

+
+ + Configuration file **/etc/isulad/daemon_constants.json** + + + + + + + + + + + + + + + + + + + +

Parameter

+

Configuration Example

+

Description

+

Remarks

+

Not supported

+

"default-host": "docker.io"

+

If an image name is prefixed with the image repository name, the image repository name will be removed when the image name is saved and displayed.

+

Generally, this parameter does not need to be modified.

+

Not supported

+

"registry-transformation": {

+

"docker.io": "registry-1.docker.io",

+

"index.docker.io": "registry-1.docker.io"

+

}

+

"key":"value" pair. The image is pulled from the repository specified by "key":"value".

+

Generally, this parameter does not need to be modified.

+
+ + Example: + + ```bash + # cat /etc/isulad/daemon.json + { + "group": "isulad", + "default-runtime": "runc", + "graph": "/var/lib/isulad", + "state": "/var/run/isulad", + "engine": "lcr", + "log-level": "ERROR", + "pidfile": "/var/run/isulad.pid", + "log-opts": { + "log-file-mode": "0600", + "log-path": "/var/lib/isulad", + "max-file": "1", + "max-size": "30KB" + }, + "log-driver": "stdout", + "hook-spec": "/etc/default/isulad/hooks/default.json", + "start-timeout": "2m", + "storage-driver": "overlay2", + "storage-opts": [ + "overlay2.override_kernel_check=true" + ], + "registry-mirrors": [ + "docker.io" + ], + "insecure-registries": [ + "rnd-dockerhub.huawei.com" + ], + "pod-sandbox-image": "", + "native.umask": "secure", + "network-plugin": "", + "cni-bin-dir": "", + "cni-conf-dir": "", + "image-layer-check": false, + "use-decrypted-key": true, + "insecure-skip-verify-enforce": false, + "cri-runtime": { + "kata": "io.containerd.kata.v2" + } + } + + # cat /etc/isulad/daemon.json + { + "default-host": "docker.io", + "registry-transformation":{ + "docker.io": "registry-1.docker.io", + "index.docker.io": "registry-1.docker.io" + } + } + + ``` + + >[!TIP] **NOTICE:** + >The default configuration file **/etc/isulad/daemon.json** is for reference only. Configure it based on site requirements. + +### Storage Description + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

File

+

Directory

+

Description

+

\*

+

/etc/default/isulad/

+

Stores the OCI configuration file and hook template file of iSulad. The file configuration permission is set to 0640, and the sysmonitor check permission is set to 0550.

+

\*

+

/etc/isulad/

+

Default configuration files of iSulad and seccomp.

+

isulad.sock

+

/var/run/

+

Pipe communication file, which is used for the communication between the client and iSulad.

+

isulad.pid

+

/var/run/

+

File for storing the iSulad PIDs. It is also a file lock to prevent multiple iSulad instances from being started.

+

\*

+

/run/lxc/

+

Lock file, which is created during iSulad running.

+

\*

+

/var/run/isulad/

+

Real-time communication cache file, which is created during iSulad running.

+

\*

+

/var/run/isula/

+

Real-time communication cache file, which is created during iSulad running.

+

\*

+

/var/lib/isulad/

+

Root directory where iSulad runs, which stores the created container configuration, default log path, database file, and mount point.

+

/var/lib/isulad/mnt/: mount point of the container rootfs.

+

/var/lib/isulad/engines/runc/: directory for storing runc container configurations. Each container has a directory named after the container.

+
+ +### Constraints + +- In high concurrency scenarios \(200 containers are concurrently started\), the memory management mechanism of Glibc may cause memory holes and large virtual memory \(for example, 10 GB\). This problem is caused by the restriction of the Glibc memory management mechanism in the high concurrency scenario, but not by memory leakage. Therefore, the memory consumption does not increase infinitely. You can set **MALLOC\_ARENA\_MAX** to reducevirtual memory error and increase the rate of reducing physical memory. However, this environment variable will cause the iSulad concurrency performance to deteriorate. Set this environment variable based on the site requirements. + + ```bash + To balance performance and memory usage, set MALLOC_ARENA_MAX to 4. (The iSulad performance on the ARM64 server is affected by less than 10%.) + + Configuration method: + 1. To manually start iSulad, run the export MALLOC_ARENA_MAX=4 command and then start iSulad. + 2. If systemd manages iSulad, you can modify the /etc/sysconfig/iSulad file by adding MALLOC_ARENA_MAX=4. + ``` + +- Precautions for specifying the daemon running directories + + Take **--root** as an example. When **/new/path/** is used as the daemon new root directory, if a file exists in **/new/path/** and the directory or file name conflicts with that required by iSulad \(for example, **engines** and **mnt**\), iSulad may update the original directory or file attributes including the owner and permission. + + Therefore, please note the impact of re-specifying various running directories and files on their attributes. You are advised to specify a new directory or file for iSulad to avoid file attribute changes and security issues caused by conflicts. + +- Log file management: + + >[!TIP] **NOTICE:** + >Log function interconnection: logs are managed by systemd as iSulad is and then transmitted to rsyslogd. By default, rsyslog restricts the log writing speed. You can add the configuration item **$imjournalRatelimitInterval 0** to the **/etc/rsyslog.conf** file and restart the rsyslogd service. + +- Restrictions on command line parameter parsing + + When the iSulad command line interface is used, the parameter parsing mode is slightly different from that of Docker. For flags with parameters in the command line, regardless of whether a long or short flag is used, only the first space after the flag or the character string after the equal sign \(=\) directly connected to the flag is used as the flag parameter. The details are as follows: + + 1. When a short flag is used, each character in the character string connected to the hyphen \(-\) is considered as a short flag. If there is an equal sign \(=\), the character string following the equal sign \(=\) is considered as the parameter of the short flag before the equal sign \(=\). + + **isula run -du=root busybox** is equivalent to **isula run -du root busybox**, **isula run -d -u=root busybox**, or **isula run -d -u root busybox**. When **isula run -du:root** is used, as **-:** is not a valid short flag, an error is reported. The preceding command is equivalent to **isula run -ud root busybox**. However, this method is not recommended because it may cause semantic problems. + + 2. When a long flag is used, the character string connected to **--** is regarded as a long flag. If the character string contains an equal sign \(=\), the character string before the equal sign \(=\) is a long flag, and the character string after the equal sign \(=\) is a parameter. + + ```bash + isula run --user=root busybox + ``` + + or + + ```bash + isula run --user root busybox + ``` + +- After an iSulad container is started, you cannot run the **isula run -i/-t/-ti** and **isula attach/exec** commands as a non-root user. +- The default path for storing temporary files of iSulad is **/var/lib/isulad/isulad_tmpdir**. If the root directory of iSulad is changed, the path is **\$isulad_root/isulad_tmpdir**. To change the directory for storing temporary files of iSulad, you can configure the **ISULAD_TMPDIR** environment variable before starting iSulad. The **ISULAD_TMPDIR** environment variable is checked during the iSulad startup. If the **ISULAD_TMPDIR** environment variable is configured, the **\$ISULAD_TMPDIR/isulad_tmpdir** directory is used as the path for storing temporary files. Do not store files or folders named **isulad_tmpdir** in **\$ISULAD_TMPDIR** because iSulad recursively deletes the **\$ISULAD_TMPDIR/isulad_tmpdir** directory when it is started to prevent residual data. In addition, ensure that only the **root** user can access the **\$ISULAD_TMPDIR** directory to prevent security problems caused by operations of other users. + +### Daemon Multi-Port Binding + +#### Description + +The daemon can bind multiple UNIX sockets or TCP ports and listen on these ports. The client can interact with the daemon through these ports. + +#### Port + +Users can configure one or more ports in the hosts field in the **/etc/isulad/daemon.json** file, or choose not to specify hosts. + +```json +{ + "hosts": [ + "unix:///var/run/isulad.sock", + "tcp://localhost:5678", + "tcp://127.0.0.1:6789" + ] +} +``` + +Users can also run the **-H** or **--host** command in the **/etc/sysconfig/iSulad** file to configure a port, or choose not to specify hosts. + +```text +OPTIONS='-H unix:///var/run/isulad.sock --host tcp://127.0.0.1:6789' +``` + +If hosts are not specified in the **daemon.json** file and iSulad, the daemon listens on **unix:///var/run/isulad.sock** by default after startup. + +#### Restrictions + +- Users cannot specify hosts in the **/etc/isulad/daemon.json** and **/etc/sysconfig/iSuald** files at the same time. Otherwise, an error will occur and iSulad cannot be started. + + ```bash + unable to configure the isulad with file /etc/isulad/daemon.json: the following directives are specified both as a flag and in the configuration file: hosts: (from flag: [unix:///var/run/isulad.sock tcp://127.0.0.1:6789], from file: [unix:///var/run/isulad.sock tcp://localhost:5678 tcp://127.0.0.1:6789]) + ``` + +- If the specified host is a UNIX socket, the socket must start with **unix://** followed by a valid absolute path. +- If the specified host is a TCP port, the TCP port number must start with **tcp://** followed by a valid IP address and port number. The IP address can be that of the local host. +- A maximum of 10 valid ports can be specified. If more than 10 ports are specified, an error will occur and iSulad cannot be started. + +### Configuring TLS Authentication and Enabling Remote Access + +#### Description + +iSulad is designed in C/S mode. By default, the iSulad daemon process listens only on the local/var/run/isulad.sock. Therefore, you can run commands to operate containers only on the local client iSula. To enable iSula's remote access to the container, the iSulad daemon process needs to listen on the remote access port using TCP/IP. However, listening is performed only by simply configuring tcp ip:port. In this case, all IP addresses can communicate with iSulad by calling **isula -H tcp://**_remote server IP address_**:port**, which may cause security problems. Therefore, it is recommended that a more secure version, namely Transport Layer Security \(TLS\), be used for remote access. + +#### Generating TLS Certificate + +- Example of generating a plaintext private key and certificate + + ```bash + #!/bin/bash + set -e + echo -n "Enter pass phrase:" + read password + echo -n "Enter public network ip:" + read publicip + echo -n "Enter host:" + read HOST + + echo " => Using hostname: $publicip, You MUST connect to iSulad using this host!" + + mkdir -p $HOME/.iSulad + cd $HOME/.iSulad + rm -rf $HOME/.iSulad/* + + echo " => Generating CA key" + openssl genrsa -passout pass:$password -aes256 -out ca-key.pem 4096 + echo " => Generating CA certificate" + openssl req -passin pass:$password -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem -subj "/C=CN/ST=zhejiang/L=hangzhou/O=Huawei/OU=iSulad/CN=iSulad@huawei.com" + echo " => Generating server key" + openssl genrsa -passout pass:$password -out server-key.pem 4096 + echo " => Generating server CSR" + openssl req -passin pass:$password -subj /CN=$HOST -sha256 -new -key server-key.pem -out server.csr + echo subjectAltName = DNS:$HOST,IP:$publicip,IP:127.0.0.1 >> extfile.cnf + echo extendedKeyUsage = serverAuth >> extfile.cnf + echo " => Signing server CSR with CA" + openssl x509 -req -passin pass:$password -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf + echo " => Generating client key" + openssl genrsa -passout pass:$password -out key.pem 4096 + echo " => Generating client CSR" + openssl req -passin pass:$password -subj '/CN=client' -new -key key.pem -out client.csr + echo " => Creating extended key usage" + echo extendedKeyUsage = clientAuth > extfile-client.cnf + echo " => Signing client CSR with CA" + openssl x509 -req -passin pass:$password -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf + rm -v client.csr server.csr extfile.cnf extfile-client.cnf + chmod -v 0400 ca-key.pem key.pem server-key.pem + chmod -v 0444 ca.pem server-cert.pem cert.pem + ``` + +- Example of generating an encrypted private key and certificate request file + + ```bash + #!/bin/bash + + echo -n "Enter public network ip:" + read publicip + echo -n "Enter pass phrase:" + read password + + # remove certificates from previous execution. + rm -f *.pem *.srl *.csr *.cnf + + # generate CA private and public keys + echo 01 > ca.srl + openssl genrsa -aes256 -out ca-key.pem -passout pass:$password 2048 + openssl req -subj '/C=CN/ST=zhejiang/L=hangzhou/O=Huawei/OU=iSulad/CN=iSulad@huawei.com' -new -x509 -days $DAYS -passin pass:$password -key ca-key.pem -out ca.pem + + # create a server key and certificate signing request (CSR) + openssl genrsa -aes256 -out server-key.pem -passout pass:$PASS 2048 + openssl req -new -key server-key.pem -out server.csr -passin pass:$password -subj '/CN=iSulad' + + echo subjectAltName = DNS:iSulad,IP:${publicip},IP:127.0.0.1 > extfile.cnf + echo extendedKeyUsage = serverAuth >> extfile.cnf + # sign the server key with our CA + openssl x509 -req -days $DAYS -passin pass:$password -in server.csr -CA ca.pem -CAkey ca-key.pem -out server-cert.pem -extfile extfile.cnf + + # create a client key and certificate signing request (CSR) + openssl genrsa -aes256 -out key.pem -passout pass:$password 2048 + openssl req -subj '/CN=client' -new -key key.pem -out client.csr -passin pass:$password + + # create an extensions config file and sign + echo extendedKeyUsage = clientAuth > extfile.cnf + openssl x509 -req -days 365 -passin pass:$password -in client.csr -CA ca.pem -CAkey ca-key.pem -out cert.pem -extfile extfile.cnf + + # remove the passphrase from the client and server key + openssl rsa -in server-key.pem -out server-key.pem -passin pass:$password + openssl rsa -in key.pem -out key.pem -passin pass:$password + + # remove generated files that are no longer required + rm -f ca-key.pem ca.srl client.csr extfile.cnf server.csr + ``` + +#### APIs + +```json +{ + "tls": true, + "tls-verify": true, + "tls-config": { + "CAFile": "/root/.iSulad/ca.pem", + "CertFile": "/root/.iSulad/server-cert.pem", + "KeyFile":"/root/.iSulad/server-key.pem" + } +} +``` + +#### Restrictions + +The server supports the following modes: + +- Mode 1 \(client verified\): tlsverify, tlscacert, tlscert, tlskey +- Mode 2 \(client not verified\): tls, tlscert, tlskey + +The client supports the following modes: + +- Mode 1 \(verify the identity based on the client certificate, and verify the server based on the specified CA\): tlsverify, tlscacert, tlscert, tlskey +- Mode 2 \(server verified\): tlsverify, tlscacert + +Mode 1 is used for the server, and mode 2 for the client if the two-way authentication mode is used for communication. + +Mode 2 is used for the server and the client if the unidirectional authentication mode is used for communication. + +>[!TIP] **NOTICE:** +> +>- If RPM is used for installation, the server configuration can be modified in the **/etc/isulad/daemon.json** and **/etc/sysconfig/iSulad** files. +>- Two-way authentication is recommended as it is more secure than non-authentication or unidirectional authentication. +>- GRPC open-source component logs are not taken over by iSulad. To view gRPC logs, set the environment variables **gRPC\_VERBOSITY** and **gRPC\_TRACE** as required. +> + +#### Example + +On the server: + +```bash + isulad -H=tcp://0.0.0.0:2376 --tlsverify --tlscacert ~/.iSulad/ca.pem --tlscert ~/.iSulad/server-cert.pem --tlskey ~/.iSulad/server-key.pem +``` + +On the client: + +```bash + isula version -H=tcp://$HOSTIP:2376 --tlsverify --tlscacert ~/.iSulad/ca.pem --tlscert ~/.iSulad/cert.pem --tlskey ~/.iSulad/key.pem +``` + +### devicemapper Storage Driver Configuration + +To use the devicemapper storage driver, you need to configure a thinpool device which requires an independent block device with sufficient free space. Take the independent block device **/dev/xvdf** as an example. The configuration method is as follows: + +1. Configuring a thinpool + + 1. Stop the iSulad service. + + ```bash + # systemctl stop isulad + ``` + + 2. Create a logical volume manager \(LVM\) volume based on the block device. + + ```bash + # pvcreate /dev/xvdf + ``` + + 3. Create a volume group based on the created physical volume. + + ```bash + # vgcreate isula /dev/xvdf + Volume group "isula" successfully created: + ``` + + 4. Create two logical volumes named **thinpool** and **thinpoolmeta**. + + ```bash + # lvcreate --wipesignatures y -n thinpool isula -l 95%VG + Logical volume "thinpool" created. + ``` + + ```bash + # lvcreate --wipesignatures y -n thinpoolmeta isula -l 1%VG + Logical volume "thinpoolmeta" created. + ``` + + 5. Convert the two logical volumes into a thinpool and the metadata used by the thinpool. + + ```bash + # lvconvert -y --zero n -c 512K --thinpool isula/thinpool --poolmetadata isula/thinpoolmeta + + WARNING: Converting logical volume isula/thinpool and isula/thinpoolmeta to + thin pool's data and metadata volumes with metadata wiping. + THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.) + Converted isula/thinpool to thin pool. + ``` + +2. Modifying the iSulad configuration files + + 1. If iSulad has been used in the environment, back up the running data first. + + ```bash + # mkdir /var/lib/isulad.bk + # mv /var/lib/isulad/* /var/lib/isulad.bk + ``` + + 2. Modify configuration files. + + Two configuration methods are provided. Select one based on site requirements. + + - Edit the **/etc/isulad/daemon.json** file, set **storage-driver** to **devicemapper**, and set parameters related to the **storage-opts** field. For details about related parameters, see [Parameter Description](#parameter-description). The following lists the configuration reference: + + ```json + { + "storage-driver": "devicemapper" + "storage-opts": [ + "dm.thinpooldev=/dev/mapper/isula-thinpool", + "dm.fs=ext4", + "dm.min_free_space=10%" + ] + } + ``` + + - You can also edit **/etc/sysconfig/iSulad** to explicitly specify related iSulad startup parameters. For details about related parameters, see [Parameter Description](#parameter-description). The following lists the configuration reference: + + ```text + OPTIONS="--storage-driver=devicemapper --storage-opt dm.thinpooldev=/dev/mapper/isula-thinpool --storage-opt dm.fs=ext4 --storage-opt dm.min_free_space=10%" + ``` + +3. Start iSulad for the settings to take effect. + + ```bash + # systemctl start isulad + ``` + +#### Parameter Description + +For details about parameters supported by storage-opts, see [Table 1](#en-us_topic_0222861454_table3191161993812). + +**Table 1** Parameter description + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Mandatory or Not

+

Description

+

dm.fs

+

Yes

+

Specifies the type of the file system used by a container. This parameter must be set to ext4, that is, dm.fs=ext4.

+

dm.basesize

+

No

+

Specifies the maximum storage space of a single container. The unit can be k, m, g, t, or p. An uppercase letter can also be used, for example, dm.basesize=50G. This parameter is valid only during the first initialization.

+

dm.mkfsarg

+

No

+

Specifies the additional mkfs parameters when a basic device is created. For example: dm.mkfsarg=-O ^has_journal

+

dm.mountopt

+

No

+

Specifies additional mount parameters when a container is mounted. For example: dm.mountopt=nodiscard

+

dm.thinpooldev

+

No

+

Specifies the thinpool device used for container or image storage.

+

dm.min_free_space

+

No

+

Specifies minimum percentage of reserved space. For example, dm.min_free_space=10% indicates that storage-related operations such as container creation will fail when the remaining storage space falls below 10%.

+
+ +#### Precautions + +- When configuring devicemapper, if the system does not have sufficient space for automatic capacity expansion of thinpool, disable the automatic capacity expansion function. + + To disable automatic capacity expansion, set both **thin\_pool\_autoextend\_threshold** and **thin\_pool\_autoextend\_percent** in the **/etc/lvm/profile/isula-thinpool.profile** file to **100**. + + ```text + activation { + thin_pool_autoextend_threshold=100 + thin_pool_autoextend_percent=100 + } + ``` + +- When devicemapper is used, use Ext4 as the container file system. You need to add **--storage-opt dm.fs=ext4** to the iSulad configuration parameters. +- If graphdriver is devicemapper and the metadata files are damaged and cannot be restored, you need to manually restore the metadata files. Do not directly operate or tamper with metadata of the devicemapper storage driver in Docker daemon. +- When the devicemapper LVM is used, if the devicemapper thinpool is damaged due to abnormal power-off, you cannot ensure the data integrity or whether the damaged thinpool can be restored. Therefore, you need to rebuild the thinpool. + +##### Precautions for Switching the devicemapper Storage Pool When the User Namespace Feature Is Enabled on iSula + +- Generally, the path of the deviceset-metadata file is **/var/lib/isulad/devicemapper/metadata/deviceset-metadata** during container startup. +- If user namespaces are used, the path of the deviceset-metadata file is **/var/lib/isulad/**_userNSUID.GID_**/devicemapper/metadata/deviceset-metadata**. +- When you use the devicemapper storage driver and the container is switched between the user namespace scenario and common scenario, the **BaseDeviceUUID** content in the corresponding deviceset-metadata file needs to be cleared. In the thinpool capacity expansion or rebuild scenario, you also need to clear the **BaseDeviceUUID** content in the deviceset-metadata file. Otherwise, the iSulad service fails to be restarted. diff --git a/docs/en/cloud/container_engine/isula_container_engine/installation_upgrade_uninstallation.md b/docs/en/cloud/container_engine/isula_container_engine/installation_upgrade_uninstallation.md new file mode 100644 index 0000000000000000000000000000000000000000..fd25b67c6b950db090ff3d2af22bb4d90abd5072 --- /dev/null +++ b/docs/en/cloud/container_engine/isula_container_engine/installation_upgrade_uninstallation.md @@ -0,0 +1,3 @@ +# Installation, Upgrade and Uninstallation + +This chapter describes how to install, configure, upgrade, and uninstall iSulad. diff --git a/docs/en/cloud/container_engine/isula_container_engine/interconnecting_isula_shim_v2_with_stratovirt.md b/docs/en/cloud/container_engine/isula_container_engine/interconnecting_isula_shim_v2_with_stratovirt.md new file mode 100644 index 0000000000000000000000000000000000000000..8524e9dbb4315e6de2f08fc5ab4bfb073fb3d989 --- /dev/null +++ b/docs/en/cloud/container_engine/isula_container_engine/interconnecting_isula_shim_v2_with_stratovirt.md @@ -0,0 +1,219 @@ +# Interconnecting iSula shim v2 with StratoVirt + +## Overview + +shim v2 is a next-generation shim solution. Compared with shim v1, shim v2 features shorter call chains, clearer architecture, and lower memory overhead in multi-service container scenarios. iSula can run secure containers through isulad-shim or containerd-shim-kata-v2. The isulad-shim component is the implementation of the shim v1 solution, and the containerd-shim-kata-v2 component is the implementation of the shim v2 solution in the secure container scenario. This document describes how to interconnect iSula with containerd-shim-kata-v2. + +## Interconnecting with containerd-shim-kata-v2 + +### Prerequisites + +Before interconnecting iSula with containerd-shim-kata-v2, ensure that the following prerequisites are met: + +- iSulad, lib-shim-v2, and kata-containers have been installed. +- StratoVirt supports only the devicemapper storage driver. Therefore, you need to configure the devicemapper environment and ensure that the devicemapper storage driver used by iSulad works properly. + +### Environment Setup + +The following describes how to install and configure iSulad and kata-containers. + +#### Installing Dependencies + +Configure the YUM source based on the OS version and install iSulad, lib-shim-v2, and kata-containers as the **root** user. + +```shell +yum install iSulad +yum install kata-containers +yum install lib-shim-v2 +``` + +#### Creating and Configuring a Storage Device + +Prepare a drive, for example, **/dev/sdx**. The drive will be formatted. This section uses the block device **/dev/sda** as an example. + +I. Creating devicemapper + +1. Create a physical volume (PV). + + ```shell + $ pvcreate /dev/sda + Physical volume "/dev/loop0" successfully created. + ``` + +2. Create a volume group (VG). + + ```shell + $ vgcreate isula /dev/sda + Volume group "isula" successfully created + ``` + +3. Create the logical volumes **thinpool** and **thinpoolmeta**. + + ```shell + $ lvcreate --wipesignatures y -n thinpool isula -l 95%VG + Logical volume "thinpool" created. + + $ lvcreate --wipesignatures y -n thinpoolmeta isula -l 1%VG + Logical volume "thinpoolmeta" created. + ``` + +4. Convert the created logical volumes to a thin pool. + + ```shell + $ lvconvert -y --zero n -c 64K \ + --thinpool isula/thinpool \ + --poolmetadata isula/thinpoolmeta + Thin pool volume with chunk size 512.00 KiB can address at most 126.50 TiB of data. + WARNING: Converting isula/thinpool and isula/thinpoolmeta to thin pool's data and metadata volumes with metadata wiping. + THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.) + Converted isula/thinpool and isula/thinpoolmeta to thin pool. + ``` + +5. Configure automatic extension of the thin pool using lvm. + + ```shell + $ touch /etc/lvm/profile/isula-thinpool.profile + $ cat << EOF > /etc/lvm/profile/isula-thinpool.profile + activation { + thin_pool_autoextend_threshold=80 + thin_pool_autoextend_percent=20 + } + EOF + $ lvchange --metadataprofile isula-thinpool isula/thinpool + Logical volume isula/thinpool changed. + ``` + +II. Changing the iSulad Storage Driver Type and Setting the Default Runtime + +Modify the **/etc/isulad/daemon.json** configuration file. Set **default-runtime** to **io.containerd.kata.v2** and **storage-driver** to **devicemapper**. The modification result is as follows: + +```json + { + "default-runtime": "io.containerd.kata.v2", + "storage-driver": "devicemapper", + "storage-opts": [ + "dm.thinpooldev=/dev/mapper/isula-thinpool", + "dm.fs=ext4", + "dm.min_free_space=10%" + ], +} +``` + +III. Making the Configuration Take Effect + +1. Restart the iSulad for the configuration to take effect. + + ```shell + systemctl daemon-reload + systemctl restart isulad + ``` + +2. Check whether the iSula storage driver is successfully configured. + + ```shell + isula info + ``` + + If the following information is displayed, the configuration is successful: + + ```text + Storage Driver: devicemapper + ``` + +### Interconnection Guide + +This section describes how to interconnect iSula with containerd-shim-kata-v2. + +By default, containerd-shim-kata-v2 uses QEMU as the virtualization component. The following describes how to configure QEMU and StratoVirt. + +#### Using QEMU + +If containerd-shim-kata-v2 uses QEMU as the virtualization component, perform the following operations to interconnect iSula with containerd-shim-kata-v2: + +1. Modify the kata configuration file **/usr/share/defaults/kata-containers/configuration.toml**. + + Set **sandbox_cgroup_with_emulator** to **false**. Currently, shim v2 does not support this function. Other parameters are the same as the kata configuration parameters in shim v1 or use the default values. + + ```toml + sandbox_cgroup_with_emulator = false + ``` + +2. Use the BusyBox image to run the secure container and check whether the used runtime is io.containerd.kata.v2. + + ```bash + $ id=`isula run -tid busybox /bin/sh` + $ isula inspect -f '{{ json .HostConfig.Runtime }}' $id + "io.containerd.kata.v2" + ``` + +3. Verify that the QEMU-based VM process is started. If it is started, QEMU is successfully interconnected with the shim v2 secure container. + + ```bash + ps -ef | grep qemu + ``` + +#### Using StratoVirt + +If containerd-shim-kata-v2 uses StratoVirt as the virtualization component, perform the following operations to interconnect iSula with containerd-shim-kata-v2: + +1. Create the **stratovirt.sh** script in any directory (for example, **/home**) and add the execute permission to the file as the **root** user. + + ```shell + touch /home/stratovirt.sh + chmod +x /home/stratovirt.sh + ``` + + The content of **stratovirt.sh** is as follows, which is used to specify the path of StratoVirt: + + ```shell + #!/bin/bash + export STRATOVIRT_LOG_LEVEL=info # set log level which includes trace, debug, info, warn and error. + /usr/bin/stratovirt $@ + ``` + +2. Modify the kata configuration file. Set **hypervisor** of the secure container to **stratovirt**, **kernel** to the absolute path of the StratoVirt kernel image, and **initrd** to the initrd image file of kata-containers (if you use YUM to install kata-containers, the initrd image file is downloaded by default and stored in the **/var/lib/kata/** directory). StratoVirt supports only the devicemapper storage mode, prepare the environment in advance and set iSulad to the devicemapper mode. + + The configurations are as follows: + + ```shell + [hypervisor.stratovirt] + path = "/home/stratovirt.sh" + kernel = "/var/lib/kata/vmlinux.bin" + initrd = "/var/lib/kata/kata-containers-initrd.img" + block_device_driver = "virtio-mmio" + use_vsock = true + enable_netmon = true + internetworking_model="tcfilter" + sandbox_cgroup_with_emulator = false + disable_new_netns = false + disable_block_device_use = false + disable_vhost_net = true + ``` + + To use the vsock function in StratoVirt, enable the vhost_vsock kernel module and check whether the module is successfully enabled. + + ```bash + modprobe vhost_vsock + lsmod |grep vhost_vsock + ``` + + Download the kernel of the required version and architecture and save it to the **/var/lib/kata/** directory. For example, download the [openeuler repo](https://repo.openeuler.org/) of the x86 architecture of openEuler 22.03 LTS. + + ```bash + cd /var/lib/kata + wget https://repo.openeuler.org/openEuler-22.03-LTS/stratovirt_img/x86_64/vmlinux.bin + ``` + +3. Use the BusyBox image to run the secure container and check whether the used runtime is io.containerd.kata.v2. + + ```bash + $ id=`isula run -tid busybox sh` + $ isula inspect -f '{{ json .HostConfig.Runtime }}' $id + "io.containerd.kata.v2" + ``` + +4. Verify that the StratoVirt-based VM process is started. If it is started, StratoVirt is successfully interconnected with the shim v2 secure container. + + ```bash + ps -ef | grep stratovirt + ``` diff --git a/docs/en/cloud/container_engine/isula_container_engine/interconnection_with_the_cni_network.md b/docs/en/cloud/container_engine/isula_container_engine/interconnection_with_the_cni_network.md new file mode 100644 index 0000000000000000000000000000000000000000..09f181546cba1b2e10ff5ebd1d07b6e2491469a7 --- /dev/null +++ b/docs/en/cloud/container_engine/isula_container_engine/interconnection_with_the_cni_network.md @@ -0,0 +1,115 @@ +# Interconnection with the CNI Network + +## Overview + +The container runtime interface \(CRI\) is provided to connect to the CNI network, including parsing the CNI network configuration file and adding or removing a pod to or from the CNI network. When a pod needs to support a network through a container network plug-in such as Canal, the CRI needs to be interconnected to Canal so as to provide the network capability for the pod. + +## Common CNIs + +Common CNIs include CNI network configuration items in the CNI network configuration and pod configuration. These CNIs are visible to users. + +- CNI network configuration items in the CNI network configuration refer to those used to specify the path of the CNI network configuration file, path of the binary file of the CNI network plug-in, and network mode. For details, see [Table 1](#en-us_topic_0183259146_table18221919589). +- CNI network configuration items in the pod configuration refer to those used to set the additional CNI network list to which the pod is added. By default, the pod is added only to the default CNI network plane. You can add the pod to multiple CNI network planes as required. + +**Table 1** CNI network configuration items + + + + + + + + + + + + + + + + + + + + + + + + +

Function

+

Command

+

Configuration File

+

Description

+

Path of the binary file of the CNI network plug-in

+

--cni-bin-dir

+

"cni-bin-dir": "",

+

The default value is /opt/cni/bin.

+

Path of the CNI network configuration file

+

--cni-conf-dir

+

"cni-conf-dir": "",

+

The system traverses all files with the extension .conf, .conflist, or .json in the directory. The default value is /etc/cni/net.d.

+

Network mode

+

--network-plugin

+

"network-plugin": "",

+

Specifies a network plug-in. The value is a null character by default, indicating that no network configuration is available and the created sandbox has only the loop NIC. The CNI and null characters are supported. Other invalid values will cause iSulad startup failure.

+
+ +Additional CNI network configuration mode: + +Add the network plane configuration item "network.alpha.kubernetes.io/network" to annotations in the pod configuration file. + +The network plane is configured in JSON format, including: + +- **name**: specifies the name of the CNI network plane. +- **interface**: specifies the name of a network interface. + +The following is an example of the CNI network configuration method: + +```json +"annotations" : { + "network.alpha.kubernetes.io/network": "{\"name\": \"mynet\", \"interface\": \"eth1\"}" + } +``` + +### CNI Network Configuration Description + +The CNI network configuration includes two types, both of which are in the .json file format. + +- Single-network plane configuration file with the file name extension .conf or .json. For details about the configuration items, see Table 1 in the appendix. +- Multi-network plane configuration file with the file name extension .conflist. For details about the configuration items, see Table 3 in the appendix. + +### Adding a Pod to the CNI Network List + +If **--network-plugin=cni** is configured for iSulad and the default network plane is configured, a pod is automatically added to the default network plane when the pod is started. If the additional network configuration is configured in the pod configuration, the pod is added to these additional network planes when the pod is started. + +**port\_mappings** in the pod configuration is also a network configuration item, which is used to set the port mapping of the pod. To set port mapping, perform the following steps: + +```json +"port_mappings":[ + { + "protocol": 1, + "container_port": 80, + "host_port": 8080 + } +] +``` + +- **protocol**: protocol used for mapping. The value can be **tcp** \(identified by 0\) or **udp** \(identified by 1\). +- **container\_port**: port through which the container is mapped. +- **host\_port**: port mapped to the host. + +### Removing a Pod from the CNI Network List + +When StopPodSandbox is called, the interface for removing a pod from the CNI network list will be called to clear network resources. + +>[!NOTE] **NOTE:** +> +>1. Before calling the RemovePodSandbox interface, you must call the StopPodSandbox interface at least once. +>2. If StopPodSandbox fails to call the CNI, residual network resources may exist. + +## Usage Restrictions + +- Currently, only CNI 0.3.0 and CNI 0.3.1 are supported. In later versions, CNI 0.1.0 and CNI 0.2.0 may need to be supported. Therefore, when error logs are displayed, the information about CNI 0.1.0 and CNI 0.2.0 is reserved. +- name: The value must contain lowercase letters, digits, hyphens \(-\), and periods \(.\) and cannot be started or ended with a hyphen or period. The value can contain a maximum of 200 characters. +- The number of configuration files cannot exceed 200, and the size of a single configuration file cannot exceed 1 MB. +- The extended parameters need to be configured based on the actual network requirements. Optional parameters do not need to be written into the netconf.json file. diff --git a/docs/en/cloud/container_engine/isula_container_engine/local_volume_management.md b/docs/en/cloud/container_engine/isula_container_engine/local_volume_management.md new file mode 100644 index 0000000000000000000000000000000000000000..62ccf6205d7a200fb59825e57798dad14bc167b7 --- /dev/null +++ b/docs/en/cloud/container_engine/isula_container_engine/local_volume_management.md @@ -0,0 +1,200 @@ +# Local Volume Management + +## Overview + +After a container managed by iSula is destroyed, all data in the container is destroyed. If you want to retain data after the container is destroyed, a data persistence mechanism is required. iSula allows files, directories, or volumes on a host to be mounted to a container at runtime. You can write the data to be persisted to the mount point in the container. After the container is destroyed, the files, directories, and volumes on the host are retained. If you need to delete a file, directory, or volume on the host, you can manually delete the file or directory, or run the iSula command to delete the volume. Currently, the iSula supports only local volume management. Local volumes are classified into named volumes and anonymous volumes. A volume whose name is specified by a user is called a named volume. If a user does not specify a name for a volume, iSula automatically generates a name (a 64-bit random number) for the volume, that is, an anonymous volume. + +The following describes how to use iSula to manage local volumes. + +## Precautions + +- The volume name contains 2 to 64 characters and complies with the regular expression ^\[a-zA-Z0-9]\[a-zA-Z0-9_.-]{1,63}$. That is, the first character of the volume name must be a letter or digit, and other characters can be letters, digits, underscores (_), periods (.), and hyphens (-). +- During container creation, if data exists at the mount point of the container corresponding to the volume, the data is copied to the volume by default. If the iSula breaks down or restarts or the system is powered off during the copy process, the data in the volume may be incomplete. In this case, you need to manually delete the volume or the data in the volume to ensure that the data is correct and complete. + +## Usage + +### Using the -v Option to Mount Data + +#### **Format** + +```shell +isula run -v [SRC:]DST[:MODE,MODE...] IMAGE +``` + +#### **Functions** + +When you create and run a container, use the -v/--volume option to mount the files, directories, or volumes on the host to the container for data persistence. + +#### **Parameter Description** + +- SRC: Path of the file, directory, or volume to be mounted on the host. If the value is an absolute path, a file or folder on the host is mounted. If the value is a volume name, a volume is mounted. If this parameter is not specified, an anonymous volume is mounted. If a folder or volume does not exist, iSula creates a folder or volume and then mounts it. +- DST: Mount path in the container. The value must be an absolute path. +- MODE: When the source to be mounted is a directory or file, the valid parameters are ro, rw, z, Z, private, rprivate, slave, rslave, shared, and rshared. Only one parameter of the same type can be configured. If the source is a volume, the valid parameters are ro, rw, z, Z, and nocopy. Only one parameter of the same type can be configured. Use commas (,) to separate multiple attributes. The parameters are described as follows: + +| Parameter | Description | +| -------- | -----------------------------------------------| +| ro | The mount point in the container is mounted in read-only mode. | +| rw | The mount point in the container is mounted in read/write mode. | +| z | If SELinux is enabled, add the SELinux share label during mounting. | +| Z | If SELinux is enabled, add the SELinux private label during mounting. | +| private | The mount point in the container is mounted in private propagation mode. | +| rprivate | The mount point in the container is recursively mounted in private propagation mode. | +| slave | The mount point in the container is mounted in subordinate propagation mode. | +| rslave | The mount point in the container is recursively mounted in subordinate propagation mode. | +| shared | The mount point in the container is mounted in shared propagation mode. | +| rshared | The mount point in the container is recursively mounted in shared propagation mode. | +| nocopy | Data at the mount point is not copied. If this parameter is not set, data is copied by default. In addition, if data already exists in the volume, the data will not be copied. | + +#### **Examples** + +Run the container based on BusyBox, create or mount a volume named vol to the /vol directory of the container, and set the mount point to read-only. In addition, if data exists at the mount point in the container, the data is not copied. + +```shell +isula run -v vol:/vol:ro,nocopy busybox +``` + +### Using the --mount Option to Mount Data + +#### **Format** + +```shell +isula run --mount [type=TYPE,][src=SRC,]dst=DST[,KEY=VALUE] busybox +``` + +#### **Functions** + +When you create and run a container, use the --mount option to mount the files, directories, or volumes on the host to the container for data persistence. + +#### **Parameter Description** + +- type: Type of data mounted to the container. The value can be bind, volume, squashfs, or tmpfs. If this parameter is not specified, the default value is volume. +- src: Path of the file, directory, or volume to be mounted on the host. If the value is an absolute path, the file or directory on the host is mounted. If the value is a volume name, a volume is mounted. If this parameter is not specified, the volume is an anonymous volume. If a folder or volume does not exist, iSula creates a file or volume and then mounts it. The keyword src is also called source. +- dst: Mount path in the container. The value must be an absolute path. The keyword dst is also called destination or target. +- KEY=VALUE: Parameter of --mount. The values are as follows: + +| KEY | VALUE | +| ------------------------------ | --------------------------------------------------------------------------- | +| selinux-opts/bind-selinux-opts | z or Z. z indicates that if SELinux is enabled, the SELinux share label is added during mounting. Z indicates that if SELinux is enabled, the SELinux private label is added during mounting.| +| ro/readonly | 0/false indicates that the mount is read/write. 1/true indicates that the mount is read-only. If this parameter is not specified, the mount is read-only. The parameter is supported only when type is set to bind. | +| bind-propagation | The value can be private, rprivate, slave, rslave, shared, or rshared. The meaning is the same as that of the -v option. This parameter is supported only when type is set to bind. | +| volume-nocopy | Data at the mount point is not copied. If this parameter is not specified, data is copied by default. In addition, if data already exists in the volume, the data will not be copied. This parameter is supported only when type is set to volume. | +| tmpfs-size | Maximum size of the mounted tmpfs. Be default, the size is unlimited. | +| tmpfs-mode | Permission on the mounted tmpfs. The default value is 1777. | + +#### **Examples** + +Run the container based on BusyBox, create or mount a volume named vol to the /vol directory of the container, and set the mount point to read-only. In addition, if data exists at the mount point in the container, the data is not copied. + +```shell +isula run --mount type=volume,src=vol,dst=/vol,ro=true,volume-nocopy=true busybox +``` + +### Reusing the Mounting Configuration in Other Containers + +#### **Format** + +```shell +isula run --volumes-from CON1[:MODE] busybox +``` + +#### **Functions** + +When you create and run a container, use the --volumes-from option to indicate that the mount point configuration includes that of the CON1 container. You can set multiple --volumes-from options. + +#### **Parameter Description** + +- CON1: Name or ID of the container whose mount point is reused. +- MODE: If the value is ro, the mount point is read-only. If the value is rw, the mount point is read/write. + +#### **Examples** + +Assume that a container named container1 has been configured with a volume vol1 to the container directory /vol1, and a container named container2 has been configured with a volume vol2 to the container directory /vol2. Run a new container to reuse the mounting configuration of container1 and container2. That is, volume vol1 is mounted to the /vol1 directory of the container, and volume vol2 is mounted to the /vol2 directory of the container. + +```shell +isula run --volumes-from container1 --volumes-from container2 busbyox +``` + +### Using the Anonymous Volume in an Image + +You do not need to perform any configuration to use the anonymous volume in the image. If an anonymous volume is configured in the image, iSula automatically creates an anonymous volume and mounts it to the specified path in the image at container runtime. You can write data to the mount point of an anonymous volume in a container for data persistence. + +### Querying a Volume + +#### **Format** + +```shell +isula volume ls [OPTIONS] +``` + +#### **Functions** + +This command is used to query all volumes managed by iSula. + +#### **Parameter Description** + +Option: + +- -q,--quiet: If this parameter is not specified, only the volume driver information and volume name are queried by default. If this parameter is specified, only the volume name is queried. + +#### **Examples** + +This command is used to query all volumes managed by iSula and return only the volume name. + +```shell +isula volume ls -q +``` + +### Deleting a Volume + +#### **Format** + +```shell +isula volume rm [OPTIONS] VOLUME [VOLUME...] +isula volume prune [OPTIONS] +``` + +#### **Functions** + +- rm: deletes a specified volume. If the volume is used by a container, the volume fails to be deleted. +- prune: deletes all volumes that are not used by containers. + +#### **Parameter Description** + +OPTIONS in the prune command: + +- -f,--force: specifies that the system does not display a message asking you whether to delete the volume. By default, a risk message is displayed. You need to enter y to continue the operation. + +#### **Examples** + +Delete volumes vol1 and vol2. + +```shell +isula volume rm vol1 vol2 +``` + +Delete all unused volumes in the following format. No risk message is displayed. + +```shell +isula volume prune -f +``` + +### Precautions + +#### Conflict Combination Rules + +If a volume mount point conflict occurs, perform the following operations: + +- If configurations of -v and --mount conflict, a failure message is returned. +- If the configuration obtained from --volumes-from conflicts with the -v or --mount configuration, the configuration is discarded. +- If the anonymous volume configuration in the image conflicts with the -v, --mount, or --volumes-from configuration, the configuration is discarded. + +#### Differences Between iSula and Docker + +| iSula Behavior | Docker Behavior | +| ------------------------------------------- | ------------------------------------------- | +| The volume name can contain a maximum of 64 characters. | The length of the volume name is not limited. | +| If the source to be mounted does not exist, the --mount parameter is created. | If the source to be mounted does not exist, an error is reported. | +| The --mount parameter supports the z or Z parameter configuration in bind-selinux-opts and selinux-opts. | The --mount parameter does not support the parameter configuration in the bind-selinux-opts and selinux-opts. | +| Rules for combining mount point conflicts are not processed. | The anonymous volume specified by -v is processed as the anonymous volume in the image. | +| The volume prune command displays the space that has been reclaimed. | The volume prune command does not display the space that has been reclaimed. | +| -v, --mount, and --volumes-from are configured in hostconfig, and the anonymous volume is configured in config. | The anonymous volume specified by -v is configured in config, and other configurations are configured in hostconfig. | diff --git a/docs/en/cloud/container_engine/isula_container_engine/overview.md b/docs/en/cloud/container_engine/isula_container_engine/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..1f43ba362612eb106b6c415e001823618d8c459e --- /dev/null +++ b/docs/en/cloud/container_engine/isula_container_engine/overview.md @@ -0,0 +1,9 @@ +# iSulad Container Engine + +Compared with Docker, iSulad is a new container solution with a unified architecture design to meet different requirements in the CT and IT fields. Lightweight containers are implemented using C/C++. They are smart, fast, and not restricted by hardware and architecture. With less noise floor overhead, the containers can be widely used. + +[Figure 1](#en-us_topic_0182207099_fig10763114141217) shows the unified container architecture. + +**Figure 1** Unified container architecture + +![](./figures/en-us_image_0183048952.png) diff --git a/docs/en/cloud/container_engine/isula_container_engine/privileged_container.md b/docs/en/cloud/container_engine/isula_container_engine/privileged_container.md new file mode 100644 index 0000000000000000000000000000000000000000..74f098a99692469887c7593d9b4f98122e9fc4ad --- /dev/null +++ b/docs/en/cloud/container_engine/isula_container_engine/privileged_container.md @@ -0,0 +1,230 @@ +# Privileged Container + +## Scenarios + +By default, iSulad starts common containers that are suitable for starting common processes. However, common containers have only the default permissions defined by capabilities in the **/etc/default/isulad/config.json** directory. To perform privileged operations \(such as use devices in the **/sys** directory\), a privileged container is required. By using this feature, user **root** in the container has **root** permissions of the host. Otherwise, user **root** in the container has only common user permissions of the host. + +## Usage Restrictions + +Privileged containers provide all functions for containers and remove all restrictions enforced by the device cgroup controller. A privileged container has the following features: + +- Secomp does not block any system call. +- The **/sys** and **/proc** directories are writable. +- All devices on the host can be accessed in the container. + +- All system capabilities will be enabled. + +Default capabilities of a common container are as follows: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Capability Key

+

Description

+

SETPCAP

+

Modifies the process capabilities.

+

MKNOD

+

Allows using the system call mknod() to create special files.

+

AUDIT_WRITE

+

Writes records to kernel auditing logs.

+

CHOWN

+

Modifies UIDs and GIDs of files. For details, see the chown(2).

+

NET_RAW

+

Uses RAW and PACKET sockets and binds any IP address to the transparent proxy.

+

DAC_OVERRIDE

+

Ignores the discretionary access control (DAC) restrictions on files.

+

FOWNER

+

Ignores the restriction that the file owner ID must be the same as the process user ID.

+

FSETID

+

Allows setting setuid bits of files.

+

KILL

+

Allows sending signals to processes that do not belong to itself.

+

SETGID

+

Allows the change of the process group ID.

+

SETUID

+

Allows the change of the process user ID.

+

NET_BIND_SERVICE

+

Allows bounding to a port whose number is smaller than 1024.

+

SYS_CHROOT

+

Allows using the system call chroot().

+

SETFCAP

+

Allows transferring and deleting capabilities to other processes.

+
+ +When a privileged container is enabled, the following capabilities are added: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Capability Key

+

Description

+

SYS_MODULE

+

Loads and unloads kernel modules.

+

SYS_RAWIO

+

Allows direct access to /devport, /dev/mem, /dev/kmem, and original block devices.

+

SYS_PACCT

+

Allows the process BSD audit.

+

SYS_ADMIN

+

Allows executing system management tasks, such as loading or unloading file systems and setting disk quotas.

+

SYS_NICE

+

Allows increasing the priority and setting the priorities of other processes.

+

SYS_RESOURCE

+

Ignores resource restrictions.

+

SYS_TIME

+

Allows changing the system clock.

+

SYS_TTY_CONFIG

+

Allows configuring TTY devices.

+

AUDIT_CONTROL

+

Enables and disables kernel auditing, modifies audit filter rules, and extracts audit status and filtering rules.

+

MAC_ADMIN

+

Overrides the mandatory access control (MAC), which is implemented for the Smack Linux Security Module (LSM).

+

MAC_OVERRIDE

+

Allows MAC configuration or status change, which is implemented for Smack LSM.

+

NET_ADMIN

+

Allows executing network management tasks.

+

SYSLOG

+

Performs the privileged syslog(2) operation.

+

DAC_READ_SEARCH

+

Ignores the DAC access restrictions on file reading and catalog search.

+

LINUX_IMMUTABLE

+

Allows modifying the IMMUTABLE and APPEND attributes of a file.

+

NET_BROADCAST

+

Allows network broadcast and multicast access.

+

IPC_LOCK

+

Allows locking shared memory segments.

+

IPC_OWNER

+

Ignores the IPC ownership check.

+

SYS_PTRACE

+

Allows tracing any process.

+

SYS_BOOT

+

Allows restarting the OS.

+

LEASE

+

Allows modifying the FL_LEASE flag of a file lock.

+

WAKE_ALARM

+

Triggers the function of waking up the system, for example, sets the CLOCK_REALTIME_ALARM and CLOCK_BOOTTIME_ALARM timers.

+

BLOCK_SUSPEND

+

Allows blocking system suspension.

+
+ +## Usage Guide + +iSulad runs the **--privileged** command to enable the privilege mode for containers. Do not add privileges to containers unless necessary. Comply with the principle of least privilege to reduce security risks. + +```sh +isula run --rm -it --privileged busybox +``` diff --git a/docs/en/cloud/container_engine/isula_container_engine/querying_information.md b/docs/en/cloud/container_engine/isula_container_engine/querying_information.md new file mode 100644 index 0000000000000000000000000000000000000000..59be04cfaea6e56d062b47d4dd163934f3227c99 --- /dev/null +++ b/docs/en/cloud/container_engine/isula_container_engine/querying_information.md @@ -0,0 +1,89 @@ +# Querying Information + +## Querying the Service Version + +### Description + +The `isula version` command is run to query the version of the iSulad service. + +### Usage + +```shell +isula version +``` + +### Example + +Query the version information. + +```shell +isula version +``` + +If the iSulad service is running properly, you can view the information about versions of the client, server, and **OCI config**. + +```text +Client: + Version: 2.1.2 + Git commit: cecc8ca30fde7700e97cea3151d2a7fee9d02b07 + Built: 2023-07-30T04:21:48.521198248-04:00 + +Server: + Version: 2.1.2 + Git commit: cecc8ca30fde7700e97cea3151d2a7fee9d02b07 + Built: 2023-07-30T04:21:48.521198248-04:00 + +OCI config: + Version: 1.0.0-rc5-dev + Default file: /etc/default/isulad/config.json +``` + +If the iSulad service is not running, only the client information is queried and a message is displayed indicating that the connection times out. + +```text +Client: + Version: 2.1.2 + Git commit: cecc8ca30fde7700e97cea3151d2a7fee9d02b07 + Built: 2023-07-30T04:21:48.521198248-04:00 + +Can not connect with server.Is the iSulad daemon running on the host? +``` + +Therefore, the `isula version` command is often used to check whether the iSulad service is running properly. + +## Querying System-level Information + +### Description + +The `isula info` command is run to query the system-level information, number of containers, and number of images. + +### Usage + +```shell +isula info +``` + +### Example + +Query system-level information, including the number of containers, number of images, kernel version, and operating system \(OS\). + +```shell +$ isula info +Containers: 2 + Running: 0 + Paused: 0 + Stopped: 2 +Images: 8 +Server Version: 2.1.2 +Logging Driver: json-file +Cgroup Driverr: cgroupfs +Hugetlb Pagesize: 2MB +Kernel Version: 5.10.0-153.12.0.92.oe2203SP3.aarch64 +Operating System: openEuler 22.03 (LTS-SP4) +OSType: Linux +Architecture: aarch64 +CPUs: 4 +Total Memory: 2 GB +Name: openEuler +iSulad Root Dir: /var/lib/isulad +``` diff --git a/docs/en/cloud/container_engine/isula_container_engine/security_features.md b/docs/en/cloud/container_engine/isula_container_engine/security_features.md new file mode 100644 index 0000000000000000000000000000000000000000..02cd6f5a312126e4dad770d0473c74a600aae66f --- /dev/null +++ b/docs/en/cloud/container_engine/isula_container_engine/security_features.md @@ -0,0 +1,243 @@ +# Security Features + +## Seccomp Security Configuration + +### Scenarios + +Secure computing mode \(seccomp\) is a simple sandboxing mechanism introduced to the Linux kernel from version 2.6.23. In some specific scenarios, you may want to perform some privileged operations in a container without starting the privileged container. You can add **--cap-add** at runtime to obtain some small-scope permissions. For container instances with strict security requirements, th capability granularity may not meet the requirements. You can use some methods to control the permission scope in a refined manner. + +- Example + + In a common container scenario, you can use the **-v** flag to map a directory \(including a binary file that cannot be executed by common users\) on the host to the container. + + In the container, you can add chmod 4777 \(the modification permission of the binary file\) to the S flag bit. In this way, on the host, common users who cannot run the binary file \(or whose running permission is restricted\) can obtain the permissions of the binary file \(such as the root permission\) when running the binary file after the action added to the S flag bit is performed, so as to escalate the permission or access other files. + + In this scenario, if strict security requirements are required, the chmod, fchmod, and fchmodat system calls need to be tailored by using seccomp. + +### Usage Restrictions + +- Do not disable the seccomp feature of iSulad. + + By default, iSulad has a seccomp configuration. An allowlist is used in the configuration. syscalls that are not in the allowlist will be disabled by seccomp. You can use the **--security-opt 'seccomp:unconfined'** API to disable the seccomp feature. If seccomp is disabled or the user-defined seccomp configuration is used but the allowlist is incomplete, the attack surface of the container to the kernel increases. + +- The default seccomp configuration is an allowlist. For syscalls that are not in the allowlist, **SCMP_ACT_ERRNO** is returned by default. In addition, different syscalls are made available based on different capabilities. iSulad does not grant permissions that are not in the allowlist to containers by default. + +### Usage Guide + +Use **--security-opt** to transfer the configuration file to the container where system calls need to be filtered. + +```bash +isula run -itd --security-opt seccomp=/path/to/seccomp/profile.json rnd-dockerhub.huawei.com/official/busybox +``` + +> [!NOTE] **NOTE:** +> +> - When the configuration file is transferred to the container by using **--security-opt** during container creation, the default configuration file \(**/etc/isulad/seccomp\_default.json**\) is used. +> - When **--security-opt** is set to **unconfined** during container creation, system calls are not filtered for the container. +> - **/path/to/seccomp/profile.json** must be an absolute path. +> - **--security-opt** can be separated by equal signs (=) instead of colons (:). + +#### Obtaining the Default Seccomp Configuration of a Common Container + +- Start a common container \(or a container with **--cap-add**\) and check its default permission configuration. + + ```bash + cat /etc/isulad/seccomp_default.json | python -m json.tool > profile.json + ``` + + The **seccomp** field contains many **syscalls** fields. Then extract only the **syscalls** fields and perform the customization by referring to the customization of the seccomp configuration file. + + ```conf + "defaultAction": "SCMP_ACT_ERRNO", + "syscalls": [ + { + "action": "SCMP_ACT_ALLOW", + "name": "accept" + }, + { + "action": "SCMP_ACT_ALLOW", + "name": "accept4" + }, + { + "action": "SCMP_ACT_ALLOW", + "name": "access" + }, + { + "action": "SCMP_ACT_ALLOW", + "name": "alarm" + }, + { + "action": "SCMP_ACT_ALLOW", + "name": "bind" + }, + ]... + ``` + +- Check the seccomp configuration that can be identified by the LXC. + + ```bash + cat /var/lib/isulad/engines/lcr/74353e38021c29314188e29ba8c1830a4677ffe5c4decda77a1e0853ec8197cd/seccomp + ``` + + ```text + ... + waitpid allow + write allow + writev allow + ptrace allow + personality allow [0,0,SCMP_CMP_EQ,0] + personality allow [0,8,SCMP_CMP_EQ,0] + personality allow [0,131072,SCMP_CMP_EQ,0] + personality allow [0,131080,SCMP_CMP_EQ,0] + personality allow [0,4294967295,SCMP_CMP_EQ,0] + ... + ``` + +#### Customizing the Seccomp Configuration File + +When starting a container, use **--security-opt** to introduce the seccomp configuration file. Container instances will restrict the running of system APIs based on the configuration file. Obtain the default seccomp configuration of common containers, obtain the complete template, and customize the configuration file by referring to this section to start the container. + +```bash +isula run --rm -it --security-opt seccomp:/path/to/seccomp/profile.json rnd-dockerhub.huawei.com/official/busybox +``` + +The configuration file template is as follows: + +```conf +{ +"defaultAction": "SCMP_ACT_ALLOW", +"syscalls": [ +{ +"name": "syscall-name", +"action": "SCMP_ACT_ERRNO", +"args": null +} +] +} +``` + +>[!TIP] **NOTICE:** +> +>- **defaultAction** and **syscalls**: The types of their corresponding actions are the same, but their values must be different. The purpose is to ensure that each syscall has a default action. Clear definitions in the syscall array shall prevail. As long as the values of **defaultAction** and **action** are different, no action conflicts will occur. The following actions are supported: +> **SCMP\_ACT\_ERRNO**: forbids calling syscalls and displays error information. +> **SCMP\_ACT\_ALLOW**: allows calling syscalls. +>- **syscalls**: array, which can contain one or more syscalls. **args** is optional. +>- **name**: syscalls to be filtered. +>- **args**: array. The definition of each object in the array is as follows: +> +> ```go +> type Arg struct { +> Index uint `json:"index"` // Parameter ID. Take open(fd, buf, len) as an example. The fd corresponds to 0 and buf corresponds to 1. +> Value uint64 `json:"value"` // Value to be compared with the parameter. +> ValueTwo uint64 `json:"value_two"` // It is valid only when Op is set to MaskEqualTo. After the bitwise AND operation is performed on the user-defined value and the value of Value, the result is compared with the value of ValueTwo. If they are the same, the action is executed. +> Op Operator `json:"op"` +> } +> ``` +> +> The value of **Op** in **args** can be any of the following: +> "SCMP\_CMP\_NE": NotEqualTo +> "SCMP\_CMP\_LT": LessThan +> "SCMP\_CMP\_LE": LessThanOrEqualTo +> "SCMP\_CMP\_EQ": EqualTo +> "SCMP\_CMP\_GE": GreaterThanOrEqualTo +> "SCMP\_CMP\_GT": GreaterThan +> "SCMP\_CMP\_MASKED\_EQ": MaskEqualTo + +## capabilities Security Configuration + +### Scenarios + +The capability mechanism is a security feature introduced to Linux kernel after version 2.2. The super administrator permission is controlled at a smaller granularity to prevent the root permission from being used. The root permission is divided based on different domains so that the divided permissions can be enabled or disabled separately. For details about capabilities, see the *Linux Programmer's Manual* \([capabilities\(7\) - Linux man page](http://man7.org/linux/man-pages/man7/capabilities.7.html)\). + +```bash +man capabilities +``` + +### Usage Restrictions + +- The default capability list \(whitelist\) of the iSulad service, which is carried by common container processes by default, are as follows: + + ```conf + "CAP_CHOWN", + "CAP_DAC_OVERRIDE", + "CAP_FSETID", + "CAP_FOWNER", + "CAP_MKNOD", + "CAP_NET_RAW", + "CAP_SETGID", + "CAP_SETUID", + "CAP_SETFCAP", + "CAP_SETPCAP", + "CAP_NET_BIND_SERVICE", + "CAP_SYS_CHROOT", + "CAP_KILL", + "CAP_AUDIT_WRITE" + ``` + +- Default configurations of capabilities include **CAP\_SETUID** and **CAP\_FSETID**. If the host and a container share a directory, the container can set permissions for the binary file in the shared directory. Common users on the host can use this feature to elevate privileges. The container can write **CAP\_AUDIT\_WRITE** to the host, which may cause risks. If the application scenario does not require this capability, you are advised to use **--cap-drop** to delete the capability when starting the container. +- Adding capabilities means that the container process has greater capabilities than before. In addition, more system call APIs are opened. + +### Usage Guide + +iSulad uses **--cap-add** or **--cap-drop** to add or delete specific permissions for a container. Do not add extra permissions to the container unless necessary. You are advised to remove the default but unnecessary permissions from the container. + +```bash +isula run --rm -it --cap-add all --cap-drop SYS_ADMIN rnd-dockerhub.huawei.com/official/busybox +``` + +## SELinux Security Configuration + +### Scenarios + +Security-Enhanced Linux \(SELinux\) is a Linux kernel security module that provides a mechanism for supporting access control security policies. Through Multi-Category Security \(MCS\), iSulad labels processes in containers to control containers' access to resources, reducing privilege escalation risks and preventing further damage. + +### Usage Restrictions + +- Ensure that SELinux is enabled for the host and daemon \(the **selinux-enabled** field in the **/etc/isulad/daemon.json** file is set to **true** or **--selinux-enabled** is added to command line parameters\). +- Ensure that a proper SELinux policy has been configured on the host. container-selinux is recommended. +- The introduction of SELinux affects the performance. Therefore, evaluate the scenario before setting SELinux. Enable the SELinux function for the daemon and set the SELinux configuration in the container only when necessary. +- When you configure labels for a mounted volume, the source directory cannot be a subdirectory of **/**, **/usr**, **/etc**, **/tmp**, **/home**, **/run**, **/var**, **/root**, or **/usr**. + +>[!NOTE] **NOTE:** +> +>- iSulad does not support labeling the container file system. To ensure that the container file system and configuration directory are labeled with the container access permission, run the **chcon** command to label them. +>- If SELinux access control is enabled for iSulad, you are advised to add a label to the **/var/lib/isulad** directory before starting daemon. Files and folders generated in the directory during container creation inherit the label by default. For example: +> +> ```bash +> chcon -R system_u:object_r:container_file_t:s0 /var/lib/isulad +> ``` + +### Usage Guide + +- Enable SELinux for daemon. + + ```bash + isulad --selinux-enabled + ``` + +- Configure SELinux security context labels during container startup. + + **--security-opt="label=user:USER"**: Set the label user for the container. + + **--security-opt="label=role:ROLE"**: Set the label role for the container. + + **--security-opt="label=type:TYPE"**: Set the label type for the container. + + **--security-opt="label=level:LEVEL"**: Set the label level for the container. + + **--security-opt="label=disable"**: Disable the SELinux configuration for the container. + + ```bash + $ isula run -itd --security-opt label=type:container_t --security-opt label=level:s0:c1,c2 rnd-dockerhub.huawei.com/official/centos + 9be82878a67e36c826b67f5c7261c881ff926a352f92998b654bc8e1c6eec370 + ``` + +- Add the selinux label to a mounted volume \(**z** indicates the shared mode\). + + ```bash + $ isula run -itd -v /test:/test:z rnd-dockerhub.huawei.com/official/centos + 9be82878a67e36c826b67f5c7261c881ff926a352f92998b654bc8e1c6eec370 + + $ls -Z /test + system_u:object_r:container_file_t:s0 file + ``` diff --git a/docs/en/cloud/container_engine/isula_container_engine/supporting_oci_hooks.md b/docs/en/cloud/container_engine/isula_container_engine/supporting_oci_hooks.md new file mode 100644 index 0000000000000000000000000000000000000000..69b1acedec9fe42a697cd6adb7c48c05d2e1683b --- /dev/null +++ b/docs/en/cloud/container_engine/isula_container_engine/supporting_oci_hooks.md @@ -0,0 +1,77 @@ +# Supporting OCI hooks + +## Description + +The running of standard OCI hooks within the lifecycle of a container is supported. There are three types of standard hooks: + +- prestart hook: executed after the **isula start** command is executed and before the init process of the container is started. +- poststart hook: executed after the init process is started and before the **isula start** command is returned. +- poststop hook: executed after the container is stopped and before the stop command is returned. + +The configuration format specifications of OCI hooks are as follows: + +- **path**: \(Mandatory\) The value must be a character string and must be an absolute path. The specified file must have the execute permission. +- **args**: \(Optional\) The value must be a character string array. The syntax is the same as that of **args** in **execv**. +- **env**: \(Optional\) The value must be a character string array. The syntax is the same as that of environment variables. The content is a key-value pair, for example, **PATH=/usr/bin**. +- **timeout**: \(Optional\) The value must be an integer that is greater than 0. It indicates the timeout interval for hook execution. If the running time of the hook process exceeds the configured time, the hook process is killed. + +The hook configuration is in JSON format and usually stored in a file ended with **json**. An example is as follows: + +```json +{ + "prestart": [ + { + "path": "/usr/bin/echo", + "args": ["arg1", "arg2"], + "env": [ "key1=value1"], + "timeout": 30 + }, + { + "path": "/usr/bin/ls", + "args": ["/tmp"] + } + ], + "poststart": [ + { + "path": "/usr/bin/ls", + "args": ["/tmp"], + "timeout": 5 + } + ], + "poststop": [ + { + "path": "/tmp/cleanup.sh", + "args": ["cleanup.sh", "-f"] + } + ] +} +``` + +## APIs + +Both iSulad and iSula provide the hook APIs. The default hook configurations provided by iSulad apply to all containers. The hook APIs provided by iSula apply only to the currently created container. + +The default OCI hook configurations provided by iSulad are as follows: + +- Set the configuration item **hook-spec** in the **/etc/isulad/daemon.json** configuration file to specify the path of the hook configuration file. Example: **"hook-spec": "/etc/default/isulad/hooks/default.json"** +- Use the **isulad --hook-spec** parameter to set the path of the hook configuration file. + +The OCI hook configurations provided by iSula are as follows: + +- **isula create --hook-spec**: specifies the path of the hook configuration file in JSON format. +- **isula run --hook-spec**: specifies the path of the hook configuration file in JSON format. + +The configuration for **run** takes effect in the creation phase. + +## Usage Restrictions + +- The path specified by **hook-spec** must be an absolute path. +- The file specified by **hook-spec** must exist. +- The path specified by **hook-spec** must contain a common text file in JSON format. +- The file specified by **hook-spec** cannot exceed 10 MB. +- **path** configured for hooks must be an absolute path. +- The file that is designated by **path** configured for hooks must exist. +- The file that is designated by **path** configured for hooks must have the execute permission. +- The owner of the file that is designated by **path** configured for hooks must be user **root**. +- Only user **root** has the write permission on the file that is designated by **path** configured for hooks. +- The value of **timeout** configured for hooks must be greater than **0**. diff --git a/docs/en/cloud/container_engine/isula_container_engine/uninstallation.md b/docs/en/cloud/container_engine/isula_container_engine/uninstallation.md new file mode 100644 index 0000000000000000000000000000000000000000..85691ffcf203e3869f8f854aeb40f4d9e07939df --- /dev/null +++ b/docs/en/cloud/container_engine/isula_container_engine/uninstallation.md @@ -0,0 +1,22 @@ +# Uninstallation + +To uninstall iSulad, perform the following operations: + +1. Uninstall iSulad and its dependent software packages. + - If the **yum** command is used to install iSulad, run the following command to uninstall iSulad: + + ```sh + # yum remove iSulad + ``` + + - If the **rpm** command is used to install iSulad, uninstall iSulad and its dependent software packages. Run the following command to uninstall an RPM package. + + ```sh + # rpm -e iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm + ``` + +2. Images, containers, volumes, and related configuration files are not automatically deleted. The reference command is as follows: + + ```sh + # rm -rf /var/lib/iSulad + ``` diff --git a/docs/en/cloud/container_engine/isula_container_engine/upgrade_methods.md b/docs/en/cloud/container_engine/isula_container_engine/upgrade_methods.md new file mode 100644 index 0000000000000000000000000000000000000000..6971742e07510aba04f40163ce93a8b1c701c5ba --- /dev/null +++ b/docs/en/cloud/container_engine/isula_container_engine/upgrade_methods.md @@ -0,0 +1,32 @@ +# Upgrade Methods + +- For an upgrade between patch versions of a major version, for example, upgrading 2.x.x to 2.x.x, run the following command: + + ```sh + # sudo yum update -y iSulad + ``` + +- For an upgrade between major versions, for example, upgrading 1.x.x to 2.x.x, save the current configuration file **/etc/isulad/daemon.json**, uninstall the existing iSulad software package, install the iSulad software package to be upgraded, and restore the configuration file. + +>[!NOTE] **NOTE:** +> +>- You can run the **sudo rpm -qa |grep iSulad** or **isula version** command to check the iSulad version. +>- If you want to manually perform upgrade between patch versions of a major version, run the following command to download the RPM packages of iSulad and all its dependent libraries: +> +> ```sh +> # sudo rpm -Uhv iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm +> ``` +> +> If the upgrade fails, run the following command to forcibly perform the upgrade: +> +> ```sh +> # sudo rpm -Uhv --force iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm +> ``` +> +> - If the libisula component on which iSulad depends is upgraded, iSulad should also be upgraded as follows: +> +> ```sh +> # sudo rpm -Uvh libisula-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm +> ``` +> +>- iSulad uses the lcr as the default container runtime in versions earlier than openEuler 22.03 LTS SP3. After a cross-version upgrade, the containers created before the upgrade still use the lcr as the runtime, and the containers created after the upgrade use the default runtime runc in the new version. If the lcr container runtime still needs to be used in the new version, change the value of **default-runtime** in the default iSulad configuration file (**/etc/isulad/daemon.json**) to **lcr** or specify the lcr as the runtime (**--runtime lcr**) when running a container. diff --git a/docs/en/cloud/container_form/secure_container/_toc.yaml b/docs/en/cloud/container_form/secure_container/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1bfdbef52ab99822fab3a376d701efce6bdf27d8 --- /dev/null +++ b/docs/en/cloud/container_form/secure_container/_toc.yaml @@ -0,0 +1,21 @@ +label: Secure Container +isManual: true +description: Secure containers integrate virtualization and container technologies to provide enhanced isolation +sections: + - label: Overview + href: ./overview.md + - label: Installation and Deployment + href: ./installation_and_deployment_2.md + - label: Application Scenarios + href: ./application_scenarios_2.md + sections: + - label: Managing the Lifecycle of a Secure Container + href: ./managing_the_lifecycle_of_a_secure_container.md + - label: Configuring Resources for a Secure Container + href: ./configuring_resources_for_a_secure_container.md + - label: Configuring the Network for a Secure Container + href: ./configuring_network_for_a_secure_container.md + - label: Monitoring Secure Containers + href: ./monitoring_secure_containers.md + - label: Appendix + href: ./appendix_2.md diff --git a/docs/en/cloud/container_form/secure_container/appendix_2.md b/docs/en/cloud/container_form/secure_container/appendix_2.md new file mode 100644 index 0000000000000000000000000000000000000000..08ce455db83df2344318c129c1f70c5fb6099bae --- /dev/null +++ b/docs/en/cloud/container_form/secure_container/appendix_2.md @@ -0,0 +1,483 @@ +# Appendix + +## configuration.toml + +>[!NOTE] **NOTE:** +>The value of each field in the **configuration.toml** file is subject to the **configuration.toml** file in the **kata-containers-<**_version_**\>.rpm package**. You cannot set any field in the configuration file. + +```text +[hypervisor.qemu] +path: specifies the execution path of the virtualization QEMU. +kernel: specifies the execution path of the guest kernel. +initrd: specifies the guest initrd execution path. +image: specifies the execution path of the guest image (not applicable). +machine_type: specifies the type of the analog chip. The value is virt for the ARM architecture and pc for the x86 architecture. +kernel_params: specifies the running parameters of the guest kernel. +firmware: specifies the firmware path. If this parameter is left blank, the default firmware is used. +machine_accelerators: specifies an accelerator. +default_vcpus: specifies the default number of vCPUs for each SB/VM. +default_maxvcpus: specifies the default maximum number of vCPUs for each SB/VM. +default_root_ports: specifies the default number of root ports for each SB/VM. +default_bridges: specifies the default number of bridges for each SB/VM. +default_memory: specifies the default memory size of each SB/VM. The default value is 1024 MiB. +memory_slots: specifies the number of memory slots for each SB/VM. The default value is 10. +memory_offset: specifies the memory offset. The default value is 0. +disable_block_device_use: disables the block device from being used by the rootfs of the container. +shared_fs: specifies the type of the shared file system. The default value is virtio-9p. +virtio_fs_daemon: specifies the path of the vhost-user-fs daemon process. +virtio_fs_cache_size: specifies the default size of the DAX cache. +virtio_fs_cache: specifies the cache mode. +block_device_driver: specifies the driver of a block device. +block_device_cache_set: specifies whether to set cache-related options for a block device. The default value is false. +block_device_cache_direct: specifies whether to enable O_DIRECT. The default value is false. +block_device_cache_noflush: specifies whether to ignore device update requests. The default value is false. +enable_iothreads: enables iothreads. +enable_mem_prealloc: enables VM RAM pre-allocation. The default value is false. +enable_hugepages: enables huge pages. The default value is false. +enable_swap: enables the swap function. The default value is false. +enable_debug: enables QEMU debugging. The default value is false. +disable_nesting_checks: disables nested check. +msize_9p = 8192: specifies the number of bytes transmitted in each 9p packet. +use_vsock: uses vsocks to directly communicate with the agent (the prerequisite is that vsocks is supported). The default value is false. +hotplug_vfio_on_root_bus: enables the hot swap of the VFIO device on the root bus. The default value is false. +disable_vhost_net: disables vhost_net. The default value is false. +entropy_source: specifies the default entropy source. +guest_hook_path: specifies the binary path of the guest hook. + +[factory] +enable_template: enables the VM template. The default value is false. +template_path: specifies the template path. +vm_cache_number: specifies the number of VM caches. The default value is 0. +vm_cache_endpoint: specifies the address of the Unix socket used by the VMCache. The default value is /var/run/kata-containers/cache.sock. + +[proxy.kata] +path: specifies the kata-proxy running path. +enable_debug: enables proxy debugging. The default value is false. + +[shim.kata] +path: specifies the running path of kata-shim. +enable_debug: enables shim debugging. The default value is false. +enable_tracing: enables shim opentracing. + +[agent.kata] +enable_debug: enables the agent debugging function. The default value is false. +enable_tracing: enables the agent tracing function. +trace_mode: specifies the trace mode. +trace_type: specifies the trace type. +enable_blk_mount: enables guest mounting of the block device. + +[netmon] +enable_netmon: enables network monitoring. The default value is false. +path: specifies the kata-netmon running path. +enable_debug: enables netmon debugging. The default value is false. + +[runtime] +enable_debug: enables runtime debugging. The default value is false. +enable_cpu_memory_hotplug: enables CPU and memory hot swap. The default value is false. +internetworking_model: specifies the network interconnection mode between VMs and containers. +disable_guest_seccomp: disables the seccemp security mechanism in the guest application. The default value is true. +enable_tracing: enables runtime opentracing. The default value is false. +disable_new_netns: disables network namespace creation for the shim and hypervisor processes. The default value is false. +experimental: enables the experimental feature, which does not support user-defined configurations. +``` + +## APIs + +**Table 1** Commands related to the kata-runtime network + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Subcommand

+

File Example

+

Field

+

Description

+

Remarks

+

kata-network

+
NOTE:
  • The kata-network command must be used in groups. Network devices that are not added using kata-runtime kata-network cannot be deleted or listed using kata-runtime kata-network. The reverse is also true.
  • kata-runtime kata-network imports configuration parameters through a file or stdin.
+
+

add-iface

+
NOTE:
  • An interface can be added to only one container.
  • The execution result is subject to the returned value (non-zero return value).
+
+

  

+

{

+

"device":"tap1",

+

"name":"eth1",

+

"IPAddresses":[{"address":"172.17.1.10","mask":"24"}],

+

"mtu":1300,

+

"hwAddr":"02:42:20:6f:a2:80"

+

"vhostUserSocket":"/usr/local/var/run/openvswitch/vhost-user1"

+

}

+

  

+

device

+

Sets the name of the NIC on a host.

+

Mandatory. The value can contain a maximum of 15 characters, including letters, digits, underscores (\_), hyphens (-), and periods (.). It must start with a letter. The device name must be unique on the same host.

+

name

+

Sets the name of the NIC in the container.

+

Mandatory. The value can contain a maximum of 15 characters, including letters, digits, underscores (\_), hyphens (-), and periods (.). It must start with a letter. Ensure that the name is unique in the same sandbox.

+

IPAddresses

+

Sets the IP address of an NIC.

+

Optional.

+

Currently, one IP address can be configured for each NIC. If no IP address is configured for the NIC, no IP address will be configured in the container, either.

+

mtu

+

Sets the MTU of an NIC.

+

Mandatory.

+

The value ranges from 46 to 9600.

+

hwAddr

+

Sets the MAC address of an NIC.

+

Mandatory.

+

vhostUserSocket

+

Sets the DPDK polling socket path.

+

Optional.

+

The path contains a maximum of 128 bytes. The naming rule can contain digits, letters, and hyphens (-). The path name must start with a letter.

+

del-iface

+

{

+

"name":"eth1"

+

}

+

None

+

Deletes an NIC from a container.

+
NOTE:

When deleting a NIC, you can only delete it based on the name field in the NIC container. Kata does not identify other fields.

+
+

list-ifaces

+

None

+

None

+

Queries the NIC list in a container.

+

None

+

add-route

+

{

+

"dest":"172.17.10.10/24",

+

"gateway":"",

+

"device":"eth1"

+

}

+

dest

+

Sets the network segment corresponding to the route.

+

The value is in the format of <ip>/<mask>. <ip> is mandatory.

+

There are three cases:

+

1. Both IP address and mask are configured.

+

2. If only an IP address is configured, the default mask is 32.

+

3. If "dest":"default" is configured, there is no destination by default. In this case, the gateway needs to be configured.

+

gateway

+

Sets the next-hop gateway of the route.

+

When "dest":"default" is configured, the gateway is mandatory. In other cases, this parameter is optional.

+

device

+

Sets the name of the NIC corresponding to the route.

+

Mandatory.

+

The value contains a maximum of 15 characters.

+

del-route

+

{

+

"dest":"172.17.10.10/24"

+

}

+

None

+

Deletes a container routing rule.

+

dest is mandatory, and both device and gateway are optional.

+
NOTE:

Kata performs fuzzy match based on different fields and deletes the corresponding routing rules.

+
+

list-routes

+

None

+

None

+

Queries the route list in a container.

+

None

+
+ +**Table 2** kata-ipvs command line interfaces + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Subcommand

+

Field

+

Parameter

+

Sub-parameter

+

Description

+

Remarks

+

kata-ipvs

+

ipvsadm

+

--parameters

+

-A, --add-service

+

-t, --tcp-service

+

-u, --udp-service

+

Virtual service type.

+

Mandatory. You can select --tcp-service or --udp-service. The format is ip:port. The value of port ranges from 1 to 65535.

+

Example:

+
kata-runtime kata-ipvs ipvsadm --parameters "--add-service --tcp-service 172.17.0.7:80 --scheduler rr --persistent 3000" <container-id>
+

-s, --scheduler

+

Load balancing scheduling algorithm.

+

Mandatory. Value range: rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq.

+

-p, --persistent

+

Service duration.

+

Mandatory. The value ranges from 1 to 2678400, in seconds.

+

-E, --edit-service

+

-t, --tcp-service

+

-u, --udp-service

+

Virtual service type.

+

Mandatory. You can select --tcp-service or --udp-service. The format is ip:port. The value of port ranges from 1 to 65535.

+

-s, --scheduler

+

Load balancing scheduling algorithm.

+

Mandatory. Value range: rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq.

+

-p, --persistent

+

Service duration.

+

Mandatory. The value ranges from 1 to 2678400, in seconds.

+

-D, --delete-service

+

-t, --tcp-service

+

-u, --udp-service

+

Virtual service type.

+

Mandatory. You can select --tcp-service or --udp-service. The format is ip:port. The value of port ranges from 1 to 65535.

+

-a, --add-server

+

-t, --tcp-service

+

-u, --udp-service

+

Virtual service type.

+

Mandatory. You can select --tcp-service or --udp-service. The format is ip:port. The value of port ranges from 1 to 65535.

+

Example:

+
kata-runtime kata-ipvs ipvsadm --parameters "--add-server --tcp-service 172.17.0.7:80 --real-server 172.17.0.4:80 --weight 100" <container-id>
+

-r, --real-server

+

Real server address.

+

Mandatory. The format is ip:port. The value of port ranges from 1 to 65535.

+

-w, --weight

+

Weight

+

Optional. The value ranges from 0 to 65535.

+

-e, --edit-server

+

-t, --tcp-service

+

-u, --udp-service

+

Virtual service type.

+

Mandatory. You can select --tcp-service or --udp-service. The format is ip:port. The value of port ranges from 1 to 65535.

+

-r, --real-server

+

Real server address.

+

Mandatory. The format is ip:port. The value of port ranges from 1 to 65535.

+

-w, --weight

+

Weight

+

Optional. The value ranges from 0 to 65535.

+

-d, --delete-server

+

-t, --tcp-service

+

-u, --udp-service

+

Virtual service type.

+

Mandatory. You can select --tcp-service or --udp-service. The format is ip:port. The value of port ranges from 1 to 65535.

+

-r, --real-server

+

Real server address.

+

Mandatory. The format is ip:port. The value of port ranges from 1 to 65535.

+

-L, --list

+

-t, --tcp-service

+

-u, --udp-service

+

Queries virtual service information.

+

Optional.

+

Example:

+
kata-runtime kata-ipvs ipvsadm --parameters "--list --tcp-service ip:port" <container-id>
+

--set

+

--tcp

+

TCP timeout.

+

Mandatory. The value ranges from 0 to 1296000.

+

Example:

+
kata-runtime kata-ipvs ipvsadm --parameters "--set 100 100 200" <container-id>
+

--tcpfin

+

TCP FIN timeout.

+

Mandatory. The value ranges from 0 to 1296000.

+

--udp

+

UDP timeout.

+

Mandatory. The value ranges from 0 to 1296000.

+

--restore

+

-

+

Imports standard inputs in batches.

+

Rule files can be specified.

+

Example:

+
kata-runtime kata-ipvs ipvsadm --restore - < <rule file path> <container-id>
+
NOTE:

By default, the NAT mode is used for adding a single real server. To add real servers in batches, you need to manually add the -m option to use the NAT mode.

+

The following is an example of the rule file content:

+

-A -t 10.10.11.12:100 -s rr -p 3000

+

-a -t 10.10.11.12:100 -r 172.16.0.1:80 -m

+

-a -t 10.10.11.12:100 -r 172.16.0.1:81 -m

+

-a -t 10.10.11.12:100 -r 172.16.0.1:82 -m

+
+

cleanup

+

--parameters

+

-d, --orig-dst

+

Specifies the IP address.

+

Mandatory.

+

Example:

+
kata-runtime kata-ipvs cleanup --parameters "--orig-dst 172.17.0.4 --protonum tcp" <container-id>
+

-p, --protonum

+

Protocol type.

+

Mandatory. The value can be tcp or udp.

+
diff --git a/docs/en/cloud/container_form/secure_container/application_scenarios_2.md b/docs/en/cloud/container_form/secure_container/application_scenarios_2.md new file mode 100644 index 0000000000000000000000000000000000000000..ae340c389d2b26f3d72fdaa42ff2ffc62a193e21 --- /dev/null +++ b/docs/en/cloud/container_form/secure_container/application_scenarios_2.md @@ -0,0 +1,3 @@ +# Application Scenarios + +This section describes how to use a secure container. diff --git a/docs/en/cloud/container_form/secure_container/configuring_network_for_a_secure_container.md b/docs/en/cloud/container_form/secure_container/configuring_network_for_a_secure_container.md new file mode 100644 index 0000000000000000000000000000000000000000..37a133191deaf63f5e0ee54dddfaf4a34bef7c51 --- /dev/null +++ b/docs/en/cloud/container_form/secure_container/configuring_network_for_a_secure_container.md @@ -0,0 +1,339 @@ +# Configuring Networking for a Secure Container + +## TAP-based Network Support + +The secure container technology is implemented based on QEMU VMs. For a physical machine system, a secure container is equivalent to a VM. Therefore, the secure container may connect the VM to an external network in the Neutron network by using the test access point \(TAP\) technology. You do not need to pay attention to TAP device creation and bridging. You only need to hot add the specified TAP device \(with an existing host\) to the VM in the pause container and update the NIC information. + +Related commands are as follows: + +1. **Run the following command to add a TAP NIC for a started container:** + + ```shell + cat ./test-iface.json | kata-runtime kata-network add-iface 6ec7a98 - + ``` + + In the preceding command, **6ec7a98** is the truncated container ID, and **test-iface.json** is the file that describes the NIC information. The following is an example: + + ```json + { + "device": "tap-test", + "name": "eth-test", + "IPAddresses": [ + { + "address": "172.16.0.3", + "mask": "16" + } + ], + "hwAddr":"02:42:20:6f:a3:69", + "mtu": 1500, + "vhostUserSocket":"/usr/local/var/run/openvswitch/vhost-user1", + "queues":5 + } + ``` + + The fields in the JSON file are described as follows: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Field

+

Mandatory/Optional

+

Description

+

device

+

Mandatory

+

Name of the NIC on a host. The value can contain a maximum of 15 characters, including letters, digits, underscores (_), hyphens (-), and periods (.). It must start with a letter. The device name must be unique on the same host.

+

name

+

Mandatory

+

Name of the NIC in the container. The value can contain a maximum of 15 characters, including letters, digits, underscores (_), hyphens (-), and periods (.). It must start with a letter. The name must be unique in the same sandbox.

+

IPAddresses

+

Optional

+

IP address of the NIC. Currently, one IP address can be configured for each NIC. If no IP address is configured for the NIC, no IP address will be configured in the container, either.

+

hwAddr

+

Mandatory

+

MAC address of the NIC.

+

mtu

+

Mandatory

+

MTU of the NIC. The value ranges from 46 to 9600.

+

vhostUserSocket

+

Optional

+

Socket path for DPDK polling. The path contains a maximum of 128 bytes. The naming rule can contain digits, letters, and hyphens (-). The path name must start with a letter.

+

queues

+

Optional

+

Number of NIC queues. If this parameter is not set, the default value 0 is used.

+
+ + The following describes the output of the **kata-runtime kata-network add-iface** command for adding NICs: + + - If the command is successfully executed, the NIC information in JSON format is returned from **standard output \(stdout\)**. The content in JSON format is the same as the input NIC information. + + Example: + + ```shell + $ kata-runtime kata-network add-iface net.json + {"device":"tap_test","name":"eth-test","IPAddresses":[{"Family":2,"Address":"173.85.100.1","Mask":"24"}],"mtu":1500,"hwAddr":"02:42:20:6e:03:01","pciAddr":"01.0/00"} + ``` + + - If the command fails to be executed, null is returned from **stdout**. + + Example: + + ```shell + $ kata-runtime kata-network add-iface netbad.json 2>/dev/null + null + ``` + + >[!NOTE] **NOTE:** + >If an IP address is specified for an NIC that is successfully added, Kata adds a default route whose destination is in the same network segment as the IP address of the NIC. In the preceding example, after the NIC is added, the following route is added to the container: + > + >```shell + >[root@6ec7a98 /]# ip route + >172.16.0.0/16 dev eth-test proto kernel scope link src 172.16.0.3 + >``` + +2. **Run the following command to view the added NICs:** + + ```shell + $ kata-runtime kata-network list-ifaces 6ec7a98 + [{"name":"eth-test","mac":"02:42:20:6f:a3:69","ip":["172.16.0.3/16"],"mtu":1500}] + ``` + + The information about the added NICs is displayed. + + The following describes the output of the **kata-runtime kata-network list-ifaces**command for listing added NICs: + + - If the command is executed successfully, information about all NICs inserted into the pod in JSON format is returned from **stdout**. + + If multiple NICs are inserted into the pod, the NIC information in JSON array format is returned. + + ```shell + $ kata-runtime kata-network list-ifaces + [{"name":"container_eth","mac":"02:42:20:6e:a2:59","ip":["172.17.25.23/8"],"mtu":1500},{"name":"container_eth_2","mac":"02:90:50:6b:a2:29","ip":["192.168.0.34/24"],"mtu":1500}] + ``` + + If no NIC is inserted into the pod, null is returned from **stdout**. + + ```shell + $ kata-runtime kata-network list-ifaces + null + ``` + + - If the command fails to be executed, null is returned from **stdout**, and error description is returned from **standard error \(stderr\)**. + + Example: + + ```shell + $ kata-runtime kata-network list-ifaces + null + ``` + +3. **Add a route for a specified NIC.** + + ```shell + $ cat ./test-route.json | kata-runtime kata-network add-route 6ec7a98 - + [{"dest":"default","gateway":"172.16.0.1","device":"eth-test"}] + ``` + + The following describes the output of the **kata-runtime kata-network add-route** command for adding a route to a specified NIC: + + - If the command is executed successfully, the added route information in JSON format is returned from **stdout**. + + Example: + + ```shell + $ kata-runtime kata-network add-route route.json + [{"dest":"177.17.0.0/24","gateway":"177.17.25.1","device":"netport_test_1"}] + ``` + + - If the command fails to be executed, null is returned from **stdout**, and error description is returned from **standard error \(stderr\)**. + + Example: + + ```shell + $ kata-runtime kata-network add-route routebad.json 2>/dev/null + null + ``` + + Key fields are described as follows: + + - **dest**: Network segment corresponding to the route. The value is in the format of <_ip_\>/<_mask_\>. <_ip_\> is mandatory. There are three cases: + 1. Both IP address and mask are configured. + 2. If only an IP address is configured, the default mask is 32. + 3. If **"dest":"default"** is configured, there is no destination by default. In this case, the gateway needs to be configured. + + - **gateway**: Next-hop gateway of the route. When **"dest":"default"** is configured, the gateway is mandatory. In other cases, this parameter is optional. + - **device**: Name of the NIC corresponding to the route, which is mandatory. The value contains a maximum of 15 characters. + + >[!NOTE] **NOTE:** + >If a route is added for the loopback device **lo** in the container, the device name corresponding to the **device** field in the route configuration file is **lo**. + +4. **Run the following command to delete a specified route:** + + ```shell + cat ./test-route.json | kata-runtime kata-network del-route 6ec7a98 - + ``` + + The fields in the **test-route.json** file are the same as those in the JSON file for adding a route. + + The following describes the output of the**kata-runtime kata-network del-route** command for deleting a specified route: + + - If the command is executed successfully, the added route information in JSON format is returned from **stdout**. + + Example: + + ```shell + $ kata-runtime kata-network del-route route.json + [{"dest":"177.17.0.0/24","gateway":"177.17.25.1","device":"netport_test_1"}] + ``` + + - If the command fails to be executed, null is returned from **stdout**, and error description is returned from **standard error \(stderr\)**. + + Example: + + ```shell + $ kata-runtime kata-network del-route routebad.json 2>/dev/null + null + ``` + + >[!NOTE] **NOTE:** + >- In the input fields, **dest** is mandatory, and both **device** and **gateway** are optional. Kata performs fuzzy match based on different fields and deletes the corresponding routing rules. For example, if **dest** is set to an IP address, all rules of this IP address will be deleted. + >- If the route of the loopback device **lo** in the container is deleted, the device name corresponding to the **device** field in the route configuration file is **lo**. + +5. **Run the following command to delete an NIC:** + + ```shell + cat ./test-iface.json | kata-runtime kata-network del-iface 6ec7a98 - + ``` + + >[!NOTE] **NOTE:** + >When deleting an NIC, you can only delete it based on the **name** field in the NIC container. Kata does not identify other fields. + + The following describes the output of the **kata-runtime kata-network del-iface**command for deleting NICs: + + - If the command is executed successfully, null is returned from **stdout**. + + Example: + + ```shell + $ kata-runtime kata-network del-iface net.json + null + ``` + + - If the command fails to be executed, the information about NICs that fail to be deleted in JSON format is returned from **stdout**, and error description is returned from **stderr**. + + Example: + + ```shell + $ kata-runtime kata-network del-iface net.json + {"device":"tapname_fun_012","name":"netport_test_1","IPAddresses":[{"Family":0,"Address":"177.17.0.1","Mask":"8"}],"mtu":1500,"hwAddr":"02:42:20:6e:a2:59","linkType":"tap"} + ``` + +The preceding are common commands. For details about the command line interfaces, see [APIs](appendix_2.md#apis). + +## Kata IPVS Subsystem + +The secure container provides an API for adding the **ipvs** command and setting the IPVS rule for the container. The functions include adding, editing, and deleting virtual services, adding, editing, and deleting real servers, querying IPVS service information, setting connection timeout, clearing the system connection cache, and importing rules in batches. + +1. Add a virtual service address for the container. + + ```shell + kata-runtime kata-ipvs ipvsadm --parameters "--add-service --tcp-service 172.17.0.7:80 --scheduler rr --persistent 3000" + ``` + +2. Modify virtual service parameters of a container. + + ```shell + kata-runtime kata-ipvs ipvsadm --parameters "--edit-service --tcp-service 172.17.0.7:80 --scheduler rr --persistent 5000" + ``` + +3. Delete the virtual service address of a container. + + ```shell + kata-runtime kata-ipvs ipvsadm --parameters "--delete-service --tcp-service 172.17.0.7:80" + ``` + +4. Add a real server for the virtual service address. + + ```shell + kata-runtime kata-ipvs ipvsadm --parameters "--add-server --tcp-service 172.17.0.7:80 --real-server 172.17.0.4:80 --weight 100" + ``` + +5. Modify real server parameters of a container. + + ```shell + kata-runtime kata-ipvs ipvsadm --parameters "--edit-server --tcp-service 172.17.0.7:80 --real-server 172.17.0.4:80 --weight 200" + ``` + +6. Delete a real server from a container. + + ```shell + kata-runtime kata-ipvs ipvsadm --parameters "--delete-server --tcp-service 172.17.0.7:80 --real-server 172.17.0.4:80" + ``` + +7. Query service information. + + ```shell + kata-runtime kata-ipvs ipvsadm --parameters "--list" + ``` + +8. It takes a long time to import rules one by one. You can write rules into a file and import them in batches. + + ```shell + kata-runtime kata-ipvs ipvsadm --restore - < + ``` + + >[!NOTE] **NOTE:** + >By default, the NAT mode is used for adding a single real server. To add real servers in batches, you need to manually add the **-m** option to use the NAT mode. + >The following is an example of the rule file content: + >-A -t 10.10.11.12:100 -s rr -p 3000 + >-a -t 10.10.11.12:100 -r 172.16.0.1:80 -m + >-a -t 10.10.11.12:100 -r 172.16.0.1:81 -m + >-a -t 10.10.11.12:100 -r 172.16.0.1:82 -m + +9. Clear the system connection cache. + + ```shell + kata-runtime kata-ipvs cleanup --parameters "--orig-dst 172.17.0.4 --protonum tcp" + ``` + +10. Set timeout interval for TCP, TCP FIN, or UDP connections. + + ```shell + kata-runtime kata-ipvs ipvsadm --parameters "--set 100 100 200" + ``` + + >[!NOTE] **NOTE:** + >1. Each container supports a maximum of 20000 iptables rules \(5000 services and three servers/services\). Both add-service and add-server are rules. + >2. Before importing rules in batches, you need to clear existing rules. + >3. No concurrent test scenario exists. + >4. The preceding are common commands. For details about the command line interfaces, see [APIs](appendix_2.md#apis). diff --git a/docs/en/cloud/container_form/secure_container/configuring_resources_for_a_secure_container.md b/docs/en/cloud/container_form/secure_container/configuring_resources_for_a_secure_container.md new file mode 100644 index 0000000000000000000000000000000000000000..7a78ea6a56157363ded6ad41b194edbf5b518a66 --- /dev/null +++ b/docs/en/cloud/container_form/secure_container/configuring_resources_for_a_secure_container.md @@ -0,0 +1,325 @@ +# Configuring Resources for a Secure Container + +The secure container runs on a virtualized and isolated lightweight VM. Therefore, resource configuration is divided into two parts: resource configuration for the lightweight VM, that is, host resource configuration; resource configuration for containers in the VM, that is, guest container resource configuration. The following describes resource configuration for the two parts in detail. + +## Sharing Resources + +Because the secure container runs on a virtualized and isolated lightweight VM, resources in some namespaces on the host cannot be accessed. Therefore, `--net host`, `--ipc host`, `--pid host`, and `--uts host` are not supported during startup. + +When a pod is started, all containers in the pod share the same net namespace and ipc namespace by default. If containers in the same pod need to share the pid namespace, you can use Kubernetes to configure the pid namespace. In Kubernetes 1.11, the pid namespace is disabled by default. + +## Limiting CPU Resources + +1. Configure CPU resources for running a lightweight VM. + + Configuring CPU resources of a lightweight VM is to configure the vCPUs for running the VM. The secure container uses `--annotation com.github.containers.virtcontainers.sandbox\_cpu` to configure the CPU resources for running the lightweight VM. This option can be configured only on the pause container. + + ```shell + docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox --annotation com.github.containers.virtcontainers.sandbox_cpu= + ``` + + Example: + + ```shell + # Start a pause container. + docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox --annotation com.github.containers.virtcontainers.sandbox_cpu=4 busybox sleep 999999 + be3255a3f66a35508efe419bc52eccd3b000032b9d8c9c62df611d5bdc115954 + + # Access the container and check whether the number of CPUs is the same as that configured in the com.github.containers.virtcontainers.sandbox_cpu file. + docker exec be32 lscpu + Architecture: aarch64 + Byte Order: Little Endian + CPU(s): 4 + On-line CPU(s) list: 0-3 + Thread(s) per core: 1 + Core(s) per socket: 1 + Socket(s): 4 + ``` + + >[!NOTE] **NOTE:** + >The maximum number of CPUs that can be configured is the number of CPUs \(excluding isolated cores\) that can run on the OS. The minimum number of CPUs is 0.5. + +2. Configure CPU resources for running a container. + + The method of configuring CPU resources for a container is the same as that for an open-source Docker container. You can configure CPU resources by setting the following parameters in the `docker run` command: + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

--cpu-shares

+

Sets the percentage of CPU time that can be used by the container.

+

--cpus

+

Sets the number of CPUs that can be used by the container.

+

--cpu-period

+

Sets the scheduling period of the container process.

+

--cpu-quota

+

Sets the CPU time that can be used by the container process in a scheduling period.

+

--cpuset-cpus

+

Sets the list of CPUs that can be used by the container process.

+
NOTE:

When the secure container uses the --cpuset-cpus option to bind a CPU, the CPU ID cannot exceed the number of CPUs in the lightweight VM corresponding to the secure container minus 1. (The CPU ID in the lightweight VM starts from 0.)

+
+

--cpuset-mems

+

Sets the memory node that can be accessed by the container process.

+
NOTE:

Secure containers do not support the multi-NUMA architecture and configuration. The --cpuset-mems option of NUMA memory can only be set to 0.

+
+
+ +3. Configure CPU hot swap. + + >[!NOTE] **NOTE:** + >The CPU hot swap function of the secure container requires the virtualization component QEMU. + + The **enable\_cpu\_memory\_hotplug** option in the kata-runtime configuration file **config.toml** is used to enable or disable CPU and memory hot swap. The default value is **false**, indicating that CPU and memory hot swap is disabled. If the value is **true**, CPU and memory hot swap is enabled. + + The `--cpus` option is reused in kata-runtime to implement the CPU hot swap function. The total number of `--cpus` options of all containers in a pod is calculated to determine the number of CPUs to be hot added to the lightweight VM. + + Example: + + ```shell + # Start a pause container. By default, one vCPU is allocated to a lightweight VM. + docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox busybox sleep 999999 + 77b40fb72f63b11dd3fcab2f6dabfc7768295fced042af8c7ad9c0286b17d24f + + # View the number of CPUs in the lightweight VM after the pause container is started. + docker exec 77b40fb72f6 lscpu + Architecture: x86_64 + CPU op-mode(s): 32-bit, 64-bit + Byte Order: Little Endian + CPU(s): 1 + On-line CPU(s) list: 0 + Thread(s) per core: 1 + Core(s) per socket: 1 + Socket(s): 1 + + # Start a new container in the same pod and run the --cpus command to set the number of CPUs required by the container to 4. + docker run -tid --runtime kata-runtime --network none --cpus 4 --annotation io.kubernetes.docker.type=container --annotation io.kubernetes.sandbox.id=77b40fb72f63b11dd3fcab2f6dabfc7768295fced042af8c7ad9c0286b17d24f busybox sleep 999999 + 7234d666851d43cbdc41da356bf62488b89cd826361bb71d585a049b6cedafd3 + + # View the number of CPUs in the current lightweight VM. + docker exec 7234d6668 lscpu + Architecture: x86_64 + CPU op-mode(s): 32-bit, 64-bit + Byte Order: Little Endian + CPU(s): 4 + On-line CPU(s) list: 0-3 + Thread(s) per core: 1 + Core(s) per socket: 1 + Socket(s): 4 + + # View the number of CPUs in the lightweight VM after deleting the container where CPUs are hot added. + docker rm -f 7234d666851d + 7234d666851d + + docker exec 77b40fb72f6 lscpu + Architecture: x86_64 + CPU op-mode(s): 32-bit, 64-bit + Byte Order: Little Endian + CPU(s): 1 + On-line CPU(s) list: 0 + Thread(s) per core: 1 + Core(s) per socket: 1 + Socket(s): 1 + ``` + + >[!NOTE] **NOTE:** + >The pause container is only a placeholder container and does not have any workload. Therefore, when a lightweight VM is started, the CPU allocated by default can be shared by other containers. Therefore, you only need to hot add three CPUs to the lightweight VM for the new container started in the preceding example. + + - After the container where the CPU is hot added is stopped, the CPU is removed when the container is started. + +## Limiting Memory Resources + +1. Configure memory resources for running a lightweight VM. + + Configuring the memory resources of a lightweight VM is to configure the memory for running the VM. The secure container uses `--annotation com.github.containers.virtcontainers.sandbox\_mem` to configure the memory resources for running the lightweight VM. This option can be configured only on the pause container. + + ```shell + docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox --annotation com.github.containers.virtcontainers.sandbox_mem= + ``` + + Example: + + ```shell + # Start a pause container and use --annotation com.github.containers.virtcontainers.sandbox_mem=4G to allocate 4 GB memory to the lightweight VM. + docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox --annotation com.github.containers.virtcontainers.sandbox_mem=4G busybox sleep 999999 + 1532c3e59e7a45cd6b419aa1db07dd0069b0cdd93097f8944177a25e457e4297 + + # View the memory information of the lightweight VM and check whether the memory size is the same as that configured in the com.github.containers.virtcontainers.sandbox_mem file. + docker exec 1532c3e free -m + total used free shared buff/cache available + Mem: 3950 20 3874 41 55 3858 + Swap: 0 0 0 + ``` + + >[!NOTE] **NOTE:** + > + >- If the memory size of a lightweight VM is not set using `--annotation com.github.containers.virtcontainers.sandbox\_mem`, the lightweight VM uses 1 GB memory by default. + >- The minimum memory size of a pod in a secure container is 1 GB, and the maximum memory size is 256 GB. If the memory size allocated to a user exceeds 256 GB, an undefined error may occur. Currently, secure containers do not support the scenario where the memory size exceeds 256 GB. + +2. Configure memory resources for running a container. + + The method of configuring memory resources for running a container is the same as that for the open-source Docker container. You can configure memory resource limitation parameters in the `docker run` command. + + + + + + + + + +

Parameter

+

Description

+

-m/--memory

+

Sets the memory size that can be used by the container process.

+
NOTE:
  • When memory hot swap is disabled, the value of -m must be less than or equal to the memory size allocated when the lightweight VM is started.
+
+
+ +3. Configure memory hot add. + + The memory hot add function is also configured by the **enable\_cpu\_memory\_hotplug** option in the kata-runtime configuration file **config.toml**. For details, see [3](#limiting-cpu-resources). + + >[!NOTE] **NOTE:** + >Currently, memory resources support hot add only. + + The `-m` option is reused in kata-runtime to implement the memory hot add function. The sum of the `-m` options of all containers in a pod is collected to determine the number of memories to be hot added to a lightweight VM. + + Example: + + ```shell + # Start a pause container. By default, 1 GB memory is allocated to the lightweight VM. + docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox busybox sleep 999999 + 99b78508ada3fa7dcbac457bb0f6e3784e64e7f7131809344c5496957931119f + + # View the memory size of the lightweight VM after the pause container is started. + docker exec 99b78508ada free -m + total used free shared buff/cache available + Mem: 983 18 914 36 50 908 + Swap: 0 0 0 + + # Start a new container in the same pod and run the -m command to set the memory size required by the container to 4 GB. + docker run -tid --runtime kata-runtime --network none -m 4G --annotation io.kubernetes.docker.type=container --annotation io.kubernetes.sandbox.id=99b78508ada3fa7dcbac457bb0f6e3784e64e7f7131809344c5496957931119f busybox sleep 999999 + c49461745a712b2ef3127fdf43b2cbb034b7614e6060b13db12b7a5ff3c830c8 + + # View the memory size of the lightweight VM. + docker exec c49461745 free -m + total used free shared buff/cache available + Mem: 4055 69 3928 36 57 3891 + Swap: 0 0 0 + + # After deleting the container where the CPU is hot added, check the memory size of the lightweight VM. + docker rm -f c49461745 + c49461745 + + # The hot added memory does not support the hot add function. Therefore, after the hot added memory container is deleted from the lightweight VM, the memory is still 4 GB. + docker exec 99b78508ada free -m + total used free shared buff/cache available + Mem: 4055 69 3934 36 52 3894 + Swap: 0 0 0 + ``` + + >[!NOTE] **NOTE:** + >The pause container is only a placeholder container and does not have any workload. Therefore, the memory allocated to the lightweight VM during startup can be shared by other containers. You only need to hot add 3 GB memory to the lightweight VM for the new container started in the preceding example. + +## Limiting Block I/O Resources + +1. Configure the block I/O resources for running a lightweight VM. + + To configure block I/O resources for running a lightweight VM of secure containers, use `--annotation com.github.containers.virtcontainers.blkio\_cgroup`. This option can be configured only on the pause container. + + ```shell + docker run -tid --runtime --network none --annotation io.kubernetes.docker.type=podsandbox --annotation com.github.containers.virtcontainers.blkio_cgroup= + ``` + + The value of `--annotation com.github.containers.virtcontainers.blkio\_cgroup` must comply with the definition of the BlkioCgroup structure. + + ```go + // BlkioCgroup for Linux cgroup 'blkio' data exchange + type BlkioCgroup struct { + // Items specifies per cgroup values + Items []BlockIOCgroupItem `json:"blkiocgroup,omitempty"` + } + + type BlockIOCgroupItem struct { + // Path represent path of blkio device + Path string `json:"path,omitempty"` + // Limits specifies the blkio type and value + Limits []IOLimit `json:"limits,omitempty"` + } + + type IOLimit struct { + // Type specifies IO type + Type string `json:"type,omitempty"` + // Value specifies rate or weight value + Value uint64 `json:"value,omitempty"` + } + ``` + + The values of the **Type** field in the **IOLimit** structure body are as follows: + + ```go + // BlkioThrottleReadBps is the key to fetch throttle_read_bps + BlkioThrottleReadBps = "throttle_read_bps" + + // BlkioThrottleWriteBps is the key to fetch throttle_write_bps + BlkioThrottleWriteBps = "throttle_write_bps" + + // BlkioThrottleReadIOPS is the key to fetch throttle_read_iops + BlkioThrottleReadIOPS = "throttle_read_iops" + + // BlkioThrottleWriteIOPS is the key to fetch throttle_write_iops + BlkioThrottleWriteIOPS = "throttle_write_iops" + + // BlkioWeight is the key to fetch blkio_weight + BlkioWeight = "blkio_weight" + + // BlkioLeafWeight is the key to fetch blkio_leaf_weight + BlkioLeafWeight = "blkio_leaf_weight" + ``` + + Example: + + ```shell + docker run -tid --runtime kata-runtime --network none --annotation com.github.containers.virtcontainers.blkio_cgroup='{"blkiocgroup":[{"path":"/dev/sda","limits":[{"type":"throttle_read_bps","value":400},{"type":"throttle_write_bps","value":400},{"type":"throttle_read_iops","value":700},{"type":"throttle_write_iops","value":699}]},{"limits":[{"type":"blkio_weight","value":78}]}]}' busybox sleep 999999 + ``` + + The preceding command is used to limit the block I/O traffic of the **/dev/sda** disk used by the started secure container by setting **throttle\_read\_bps** to 400 bit/s, **throttle\_write\_bps** to 400 bit/s, **throttle\_read\_iops** to 700 times/s, **throttle\_write\_iops** to 699 times/s, and the weight of the block I/O cgroup to 78. + +## Limiting File Descriptor Resources + +To prevent the file descriptor resources on the host from being exhausted when a large number of files in the 9p shared directory are opened in the container, the secure container can customize the maximum number of file descriptors that can be opened by the QEMU process of the secure container. + +The secure container reuses the `--files-limit` option in the `docker run` command to set the maximum number of file descriptors that can be opened by the QEMU process of the secure container. This parameter can be configured only on the pause container. The usage method is as follows: + +```shell +docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox --files-limit bash +``` + +>[!NOTE] **NOTE:** +> +>- If the value of `--files-limit` is less than the default minimum value **1024** and is not **0**, the maximum number of file descriptors that can be opened by the QEMU process of the secure container is set to the minimum value **1024**. +>- If the value of `--files-limit` is 0, the maximum number of file descriptors that can be opened by the QEMU process of the secure container is the default value obtained by dividing the maximum number of file descriptors that can be opened by the system \(**/proc/sys/fs/file-max**\) by 400. +>- If the maximum number of file descriptors that can be opened by the QEMU process of the secure container is not displayed when the secure container is started, the maximum number of file descriptors that can be opened by the QEMU process of the secure container is the same as the system default value. diff --git a/docs/en/cloud/container_form/secure_container/figures/kata-arch.png b/docs/en/cloud/container_form/secure_container/figures/kata-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..60fbb602d94cf7a8e13bd6ecb520c99e574037e6 Binary files /dev/null and b/docs/en/cloud/container_form/secure_container/figures/kata-arch.png differ diff --git a/docs/en/cloud/container_form/secure_container/figures/relationship-between-the-secure-container-and-peripheral-components.png b/docs/en/cloud/container_form/secure_container/figures/relationship-between-the-secure-container-and-peripheral-components.png new file mode 100644 index 0000000000000000000000000000000000000000..454fc025ecb88fef09472eef7cb29ca7a8164856 Binary files /dev/null and b/docs/en/cloud/container_form/secure_container/figures/relationship-between-the-secure-container-and-peripheral-components.png differ diff --git a/docs/en/cloud/container_form/secure_container/installation_and_deployment_2.md b/docs/en/cloud/container_form/secure_container/installation_and_deployment_2.md new file mode 100644 index 0000000000000000000000000000000000000000..57f27440a644ba41e6446454e921a228dd4849ac --- /dev/null +++ b/docs/en/cloud/container_form/secure_container/installation_and_deployment_2.md @@ -0,0 +1,114 @@ +# Installation and Deployment + +## Installation Methods + +### Prerequisites + +- The root permission is required for installing a Kata container. +- For better performance experience, a Kata container needs to run on the bare metal server and cannot run on VMs. +- A Kata container depends on the following components \(openEuler 1.0 version\). Ensure that the required components have been installed in the environment. To install iSulad, refer to [Installation Configuration](../../container_engine/isula_container_engine/installation_configuration.md). + - docker-engine + - qemu + +### Installation Procedure + +Released Kata container components are integrated in the **kata-containers-**_version_**.rpm** package. You can run the **rpm** command to install the corresponding software. + +```bash +rpm -ivh kata-containers-.rpm +``` + +## Deployment Configuration + +### Configuring the Docker Engine + +To enable the Docker engine to support kata-runtime, perform the following steps to configure the Docker engine: + +1. Ensure that all software packages \(**docker-engine** and **kata-containers**\) have been installed in the environment. +2. Stop the Docker engine. + + ```bash + systemctl stop docker + ``` + +3. Modify the configuration file **/etc/docker/daemon.json** of the Docker engine and add the following configuration: + + ```json + { + "runtimes": { + "kata-runtime": { + "path": "/usr/bin/kata-runtime", + "runtimeArgs": [ + "--kata-config", + "/usr/share/defaults/kata-containers/configuration.toml" + ] + } + } + } + ``` + +4. Restart the Docker engine. + + ```bash + systemctl start docker + ``` + +### iSulad Configuration + +To enable the iSulad to support the new container runtime kata-runtime, perform the following steps which are similar to those for the container engine docker-engine: + +1. Ensure that all software packages \(iSulad and kata-containers\) have been installed in the environment. +2. Stop iSulad. + + ```bash + systemctl stop isulad + ``` + +3. Modify the **/etc/isulad/daemon.json** configuration file of the iSulad and add the following configurations: + + ```json + { + "runtimes": { + "kata-runtime": { + "path": "/usr/bin/kata-runtime", + "runtime-args": [ + "--kata-config", + "/usr/share/defaults/kata-containers/configuration.toml" + ] + } + } + } + ``` + +4. Restart iSulad. + + ```bash + systemctl start isulad + ``` + +### Configuration.toml + +The Kata container provides a global configuration file configuration.toml. Users can also customize the path and configuration options of the Kata container configuration file. + +In the **runtimeArges** field of Docker engine, you can use **--kata-config** to specify a private file. The default configuration file path is **/usr/share/defaults/kata-containers/configuration.toml**. + +The following lists the common fields in the configuration file. For details about the configuration file options, see [configuration.toml](appendix_2.md#configurationtoml). + +1. hypervisor.qemu + - **path**: specifies the execution path of the virtualization QEMU. + - **kernel**: specifies the execution path of the guest kernel. + - **initrd**: specifies the guest initrd execution path. + - **machine\_type**: specifies the type of the analog chip. The value is **virt** for the ARM architecture and **pc** for the x86 architecture. + - **kernel\_params**: specifies the running parameters of the guest kernel. + +2. proxy.kata + - **path**: specifies the kata-proxy running path. + - **enable\_debug**: enables the debugging function for the kata-proxy process. + +3. agent.kata + - **enable\_blk\_mount**: enables guest mounting of the block device. + - **enable\_debug**: enables the debugging function for the kata-agent process. + +4. runtime + - **enable\_cpu\_memory\_hotplug**: enables CPU and memory hot swap. + - **enable\_debug**: enables debugging for the kata-runtime process. diff --git a/docs/en/cloud/container_form/secure_container/managing_the_lifecycle_of_a_secure_container.md b/docs/en/cloud/container_form/secure_container/managing_the_lifecycle_of_a_secure_container.md new file mode 100644 index 0000000000000000000000000000000000000000..4772168897b9d9d501d02829adba6b51e7a03fd6 --- /dev/null +++ b/docs/en/cloud/container_form/secure_container/managing_the_lifecycle_of_a_secure_container.md @@ -0,0 +1,93 @@ +# Managing the Lifecycle of a Secure Container + +## Starting a Secure Container + +You can use the Docker engine or iSulad as the container engine of the secure container. The invoking methods of the two engines are similar. You can select either of them to start a secure container. + +To start a secure container, perform the following steps: + +1. Ensure that the secure container component has been correctly installed and deployed. +2. Prepare the container image. If the container image is busybox, run the following commands to download the container image using the Docker engine or iSulad: + + ```sh + docker pull busybox + ``` + + ```sh + isula pull busybox + ``` + +3. Start a secure container. Run the following commands to start a secure container using the Docker engine and iSulad: + + ```sh + docker run -tid --runtime kata-runtime --network none busybox + ``` + + ```sh + isula run -tid --runtime kata-runtime --network none busybox + ``` + + >[!NOTE] **NOTE:** + >The secure container supports the CNI network only and does not support the CNM network. The **-p** and **--expose** options cannot be used to expose container ports. When using a secure container, you need to specify the **--net=none** option. + +4. Start a pod. + 1. Start the pause container and obtain the sandbox ID of the pod based on the command output. Run the following commands to start a pause container using the Docker engine and iSulad: + + ```sh + docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox + ``` + + ```sh + isula run -tid --runtime kata-runtime --network none --annotation io.kubernetes.cri.container-type=sandbox + ``` + + 2. Create a service container and add it to the pod. Run the following commands to create a service container using the Docker engine and iSulad: + + ```sh + docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=container --annotation io.kubernetes.sandbox.id= busybox + ``` + + ```sh + isula run -tid --runtime kata-runtime --network none --annotation io.kubernetes.cri.container-type=container --annotation io.kubernetes.cri.sandbox-id= busybox + ``` + + **--annotation** is used to mark the container type, which is provided by the Docker engine and iSulad, but not provided by the open-source Docker engine in the upstream community. + +## Stopping a Secure Container + +- Run the following command to stop a secure container: + + ```sh + docker stop + ``` + +- Stop a pod. + + When stopping a pod, note that the lifecycle of the pause container is the same as that of the pod. Therefore, stop service containers before the pause container. + +## Deleting a Secure Container + +Ensure that the container has been stopped. + +```sh +docker rm +``` + +To forcibly delete a running container, run the **-f** command. + +```sh +docker rm -f +``` + +## Running a New Command in the Container + +The pause container functions only as a placeholder container. Therefore, if you start a pod, run a new command in the service container. The pause container does not execute the corresponding command. If only one container is started, run the following command directly: + +```sh +docker exec -ti +``` + +>[!NOTE] **NOTE:** +> +>1. If the preceding command has no response because another host runs the **docker restart** or **docker stop** command to access the same container, you can press **Ctrl**+**P**+**Q** to exit the operation. +>2. If the **-d** option is used, the command is executed in the background and no error information is displayed. The exit code cannot be used to determine whether the command is executed correctly. diff --git a/docs/en/cloud/container_form/secure_container/monitoring_secure_containers.md b/docs/en/cloud/container_form/secure_container/monitoring_secure_containers.md new file mode 100644 index 0000000000000000000000000000000000000000..12264bfedcacd1c2c96a4e34fa53cc0ddcf5b74d --- /dev/null +++ b/docs/en/cloud/container_form/secure_container/monitoring_secure_containers.md @@ -0,0 +1,54 @@ +# Monitoring Secure Containers + +## Description + +The **kata events** command is used to view the status information of a specified container. The information includes but is not limited to the container memory, CPU, PID, Blkio, hugepage memory, and network information. + +## Usage + +```sh +kata-runtime metrics +``` + +## Prerequisites + +*sandbox id* is an long ID. The container to be queried must be in the **running** state. Otherwise, the following error message will be displayed: `Get " unix /run/vc/\/shim-monitor : connect : connection refused` + +When an annotation specifies a container running within a specific sandbox, attempting to query the container using **kata-runtime metrics** will fail. Instead, you must query the corresponding sandbox for the container. + +This command can be used to query the status of only one sandbox. + +## Example + +```shell +$ kata-runtime metrics e2270357d23f9d3dd424011e1e70aa8defb267d813c3d451db58f35aeac97a04 + +# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. +# TYPE go_gc_duration_seconds summary +go_gc_duration_seconds{quantile="0"} 2.656e-05 +go_gc_duration_seconds{quantile="0.25"} 3.345e-05 +go_gc_duration_seconds{quantile="0.5"} 3.778e-05 +go_gc_duration_seconds{quantile="0.75"} 4.657e-05 +go_gc_duration_seconds{quantile="1"} 0.00023001 +go_gc_duration_seconds_sum 0.00898126 +go_gc_duration_seconds_count 195 +# HELP go_goroutines Number of goroutines that currently exist. +# TYPE go_goroutines gauge +go_goroutines 27 +# HELP go_info Information about the Go environment. +# TYPE go_info gauge +go_info{version="go1.17.3"} 1 +# HELP kata_hypervisor_netdev Net devices statistics. +# TYPE kata_hypervisor_netdev gauge +kata_hypervisor_netdev{interface="lo",item="recv_bytes"} 0 +kata_hypervisor_netdev{interface="lo",item="recv_compressed"} 0 +kata_hypervisor_netdev{interface="lo",item="recv_drop"} 0 +kata_hypervisor_netdev{interface="lo",item="recv_errs"} 0 +kata_hypervisor_netdev{interface="lo",item="recv_fifo"} 0 +kata_hypervisor_netdev{interface="lo",item="recv_frame"} 0 +kata_hypervisor_netdev{interface="lo",item="recv_multicast"} 0 +kata_hypervisor_netdev{interface="lo",item="recv_packets"} 0 +kata_hypervisor_netdev{interface="lo",item="sent_bytes"} 0 +kata_hypervisor_netdev{interface="lo",item="sent_carrier"} 0 +kata_hypervisor_netdev{interface="lo",item="sent_colls"} 0 +``` diff --git a/docs/en/cloud/container_form/secure_container/overview.md b/docs/en/cloud/container_form/secure_container/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..61d3e1b65fff56a47b5fc1886f6a0543b5aef5f3 --- /dev/null +++ b/docs/en/cloud/container_form/secure_container/overview.md @@ -0,0 +1,29 @@ +# Secure Container + +## Overview + +The secure container technology is an organic combination of virtualization and container technologies. Compared with a common Linux container, a secure container has better isolation performance. + +Common Linux containers use namespaces to isolate the running environment between processes and use cgroups to limit resources. Essentially, these common Linux containers share the same kernel. Therefore, if a single container affects the kernel intentionally or unintentionally, the containers on the same host will be affected. + +Secure containers are isolated by the virtualization layers. Containers on the same host do not affect each other. + +**Figure 1** Secure container architecture + +![](./figures/kata-arch.png) + +Secure containers are closely related to the concept of pod in Kubernetes. Kubernetes is the open-source ecosystem standard for the container scheduling management platform. It defines a group of container runtime interfaces \(CRIs\). + +In the CRI standards, a pod is a logical grouping of one or more containers, which are scheduled together and share interprocess communication \(IPC\) and network namespaces. As the smallest unit for scheduling, a pod must contain a pause container and one or more service containers. The lifecycle of a pause container is the same as that of the pod. + +A lightweight virtual machine \(VM\) in a secure container is a pod. The first container started in the VM is the pause container, and the containers started later are service containers. + +In a secure container, you can start a single container or start a pod. + +[Figure 2](#fig17734185518269) shows the relationship between the secure container and peripheral components. + +**Figure 2** Relationship between the secure container and peripheral components +![](./figures/relationship-between-the-secure-container-and-peripheral-components.png) + +> [!NOTE]Note +> Root privileges are necessary for installing and operating secure containers. diff --git a/docs/en/cloud/container_form/system_container/_toc.yaml b/docs/en/cloud/container_form/system_container/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cd05d307f970aafc42cc49b86b186541d10b5b54 --- /dev/null +++ b/docs/en/cloud/container_form/system_container/_toc.yaml @@ -0,0 +1,35 @@ +label: System Container +isManual: true +description: System containers tackle the issues of migrating heavy applications and services to the cloud in scenarios requiring intensive computation, high performance, and massive concurrency +sections: + - label: Overview + href: ./overview.md + - label: Installation Guideline + href: ./installation_guideline.md + - label: Usage Guide + href: ./usage_guide.md + sections: + - label: Specifying Rootfs to Create a Container + href: ./specifying_rootfs_to_create_a_container.md + - label: Using systemd to Start a Container + href: ./using_systemd_to_start_a_container.md + - label: Reboot or Shutdown in a Container + href: ./reboot_or_shutdown_in_a_container.md + - label: Configurable Cgroup Path + href: ./configurable_cgroup_path.md + - label: Writable Namespace Kernel Parameters + href: ./writable_namespace_kernel_parameters.md + - label: Shared Memory Channels + href: ./shared_memory_channels.md + - label: Dynamically Loading the Kernel Module + href: ./dynamically_loading_the_kernel_module.md + - label: Environment Variable Persisting + href: ./environment_variable_persisting.md + - label: Maximum Number of Handles + href: ./maximum_number_of_handles.md + - label: Security and Isolation + href: ./security_and_isolation.md + - label: Dynamically Managing Container Resources (syscontainer_tools) + href: ./dynamically_managing_container_resources_syscontainer_tools.md + - label: Appendix + href: ./appendix_1.md diff --git a/docs/en/cloud/container_form/system_container/appendix_1.md b/docs/en/cloud/container_form/system_container/appendix_1.md new file mode 100644 index 0000000000000000000000000000000000000000..a92b93de14b3d194efddc0f846276e1cad45e031 --- /dev/null +++ b/docs/en/cloud/container_form/system_container/appendix_1.md @@ -0,0 +1,88 @@ +# Appendix + +## Command Line Interface List + +This section lists commands in system containers, which are different from those in common containers. For details about other commands, refer to sections related to the iSulad container engine or run the **isula _XXX_ --help** command. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Parameters

+

Value Description

+

isula create/run

+

--external-rootfs

+
  • Variable of the string type.
  • Absolute path on the host.
  • Specifies the rootfs of a VM when running a system container.
+

--system-container

+
  • Boolean variable.
  • Specifies whether a container is a system container. In a system container scenario, this function must be enabled.
+

--add-host

+
  • Variable of the string type.
  • Specifies the hosts configuration for a container. The format is hostname:ip. Multiple values can be set.
+

--dns, --dns-option, --dns-search

+
  • Variable of the string type.
  • Specifies the DNS configuration for a container. Multiple values can be set.
+

--ns-change-opt

+
  • Variable of the string type.
  • Container namespace kernel parameter. The value can only be net or ipc. If multiple values are set, separate them with commas (,), for example, --ns-change-opt=net,ipc.
+

--oom-kill-disable

+
  • Boolean variable.
  • Indicates whether to enable the oom-kill-disable function.
+

--shm-size

+
  • Variable of the string type.
  • Sets the size of /dev/shm. The default value is 64 MB. The unit can be byte (B), kilobyte (KB), megabyte (MB), gigabyte (GB), terabyte (TB), or petabyte (PB).
+

--sysctl

+
  • Variable of the string type.
  • Specifies container kernel parameters. The format is key=value. Multiple values can be set. The sysctl whitelist is as follows:
+

kernel.msgmax, kernel.msgmnb, kernel.msgmni, kernel.sem, kernel.shmall, kernel.shmmax, kernel.shmmni, kernel.shm_rmid_forced, kernel.pid_max, net., and fs.mqueue

+
NOTE:

The kernel.pid_max kernel parameter in a container must be able to be namespaced. Otherwise, an error is reported.

+

Parameter restrictions (including the parameter types and value ranges) of the sysctl whitelist in a container must be the same as those of kernel parameters in the physical machine.

+
+

--env-target-file

+
  • Variable of the string type.
  • Specifies the env persistent file path. (The path must be an absolute path and the file must be in the rootfs directory.) The file size cannot exceed 10 MB. If the value of --env conflicts with that of env in the file, the value of --env takes effect.
  • The root directory of the absolute path is the rootfs root directory. That is, to set the file path to /etc/environment in the container, you need to specify env-target-file=/etc/environment only.
+

--cgroup-parent

+
  • Variable of the string type.
  • Specifies the cgroup parent directory of a container. The cgroup root directory is /sys/fs/cgroup/controller.
+

--host-channel

+
  • Variable of the string type.
  • Specifies the memory space shared between the host and a container (tmpfs). The format is as follows:
+

host path:container path:rw/ro:size limit

+

--files-limit

+
  • Variable of the string type.
  • Specifies the maximum number of file handles in a container. The value must be an integer.
+

--user-remap

+
  • Variable of the string type.
  • The parameter format is uid:gid:offset.
+
diff --git a/docs/en/cloud/container_form/system_container/configurable_cgroup_path.md b/docs/en/cloud/container_form/system_container/configurable_cgroup_path.md new file mode 100644 index 0000000000000000000000000000000000000000..ee289449c3f34394aa19fd582ee8cff1a5fedd8d --- /dev/null +++ b/docs/en/cloud/container_form/system_container/configurable_cgroup_path.md @@ -0,0 +1,94 @@ +# Configurable Cgroup Path + +## Function Description + +System containers provide the capabilities of isolating and reserving container resources on hosts. You can use the **--cgroup-parent** parameter to specify the cgroup directory used by a container to another directory, thereby flexibly allocating host resources. For example, if the cgroup parent path of containers A, B, and C is set to **/lxc/cgroup1**, and the cgroup parent path of containers D, E, and F is set to **/lxc/cgroup2**, the containers are divided into two groups through the cgroup paths, implementing resource isolation at the cgroup level. + +## Parameter Description + + + + + + + + + + + +

Command

+

Parameter

+

Value Description

+

isula create/run

+

--cgroup-parent

+
  • Variable of the string type.
  • Specifies the cgroup parent path of the container.
+
+ +In addition to specifying the cgroup parent path for a system container using commands, you can also specify the cgroup paths of all containers by modifying the startup configuration files of the iSulad container engine. + + + + + + + + + + + + +

Configuration File Path

+

Parameter

+

Description

+

/etc/isulad/daemon.json

+

--cgroup-parent

+
  • Variable of the string type.
  • Specifies the default cgroup parent path of the container.
  • Example: "cgroup-parent": "/lxc/mycgroup"
+
+ +## Constraints + +- If the **cgroup parent** parameter is set on both the daemon and client, the value specified on the client takes effect. +- If container A is started before container B, the cgroup parent path of container B is specified as the cgroup path of container A. When deleting a container, you need to delete container B and then container A. Otherwise, residual cgroup resources exist. + +## Example + +Start a system container and specify the **--cgroup-parent** parameter. + +```shell +[root@localhost ~]# isula run -tid --cgroup-parent /lxc/cgroup123 --system-container --external-rootfs /root/myrootfs none init +115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +``` + +Check the cgroup information of the init process in the container. + +```shell +[root@localhost ~]# isula inspect -f "{{json .State.Pid}}" 11 +22167 +[root@localhost ~]# cat /proc/22167/cgroup +13:blkio:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +12:perf_event:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +11:cpuset:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +10:pids:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +9:rdma:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +8:devices:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +7:hugetlb:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +6:memory:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +5:net_cls,net_prio:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +4:cpu,cpuacct:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +3:files:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +2:freezer:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +1:name=systemd:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e/init.scope +0::/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +``` + +The cgroup parent path of the container is set to **/sys/fs/cgroup/**__**/lxc/cgroup123**. + +In addition, you can configure the container daemon file to set the cgroup parent paths for all containers. For example: + +```text +{ + "cgroup-parent": "/lxc/cgroup123", +} +``` + +Restart the container engine for the configuration to take effect. diff --git a/docs/en/cloud/container_form/system_container/dynamically_loading_the_kernel_module.md b/docs/en/cloud/container_form/system_container/dynamically_loading_the_kernel_module.md new file mode 100644 index 0000000000000000000000000000000000000000..633a09caf7281b90dc9aa9195961ddba0e2982d1 --- /dev/null +++ b/docs/en/cloud/container_form/system_container/dynamically_loading_the_kernel_module.md @@ -0,0 +1,52 @@ +# Dynamically Loading the Kernel Module + +## Function Description + +Services in a container may depend on some kernel modules. You can set environment variables to dynamically load the kernel modules required by services in the container to the host before the system container starts. This feature must be used together with isulad-hooks. For details, see [Dynamically Managing Container Resources \(syscontainer-tools\)](./dynamically_managing_container_resources_syscontainer_tools.md). + +## Parameter Description + + + + + + + + + + + +

Command

+

Parameter

+

Value Description

+

isula create/run

+

-e KERNEL_MODULES=module_name1,module_name

+
  • Variable of the string type.
  • This parameter can be set to multiple modules. Use commas (,) to separate module names.
+
+ +## Constraints + +- If loaded kernel modules are not verified or conflict with existing modules on the host, an unpredictable error may occur on the host. Therefore, exercise caution when loading kernel modules. +- Dynamic kernel module loading transfers kernel modules to be loaded to containers. This function is implemented by capturing environment variables for container startup using isulad-tools. Therefore, this function relies on the proper installation and deployment of isulad-tools. +- Loaded kernel modules need to be manually deleted. + +## Example + +When starting a system container, specify the **-e KERNEL\_MODULES** parameter. After the system container is started, the ip\_vs module is successfully loaded to the kernel. + +```shell +[root@localhost ~]# lsmod | grep ip_vs +[root@localhost ~]# isula run -tid -e KERNEL_MODULES=ip_vs,ip_vs_wrr --hook-spec /etc/isulad-tools/hookspec.json --system-container --external-rootfs /root/myrootfs none init +ae18c4281d5755a1e153a7bff6b3b4881f36c8e528b9baba8a3278416a5d0980 +[root@localhost ~]# lsmod | grep ip_vs +ip_vs_wrr 16384 0 +ip_vs 176128 2 ip_vs_wrr +nf_conntrack 172032 7 xt_conntrack,nf_nat,nf_nat_ipv6,ipt_MASQUERADE,nf_nat_ipv4,nf_conntrack_netlink,ip_vs +nf_defrag_ipv6 20480 2 nf_conntrack,ip_vs +libcrc32c 16384 3 nf_conntrack,nf_nat,ip_vs +``` + +>[!NOTE] **NOTE:** +> +>- isulad-tools must be installed on the host. +>- **--hooks-spec** must be set to **isulad hooks**. diff --git a/docs/en/cloud/container_form/system_container/dynamically_managing_container_resources_syscontainer_tools.md b/docs/en/cloud/container_form/system_container/dynamically_managing_container_resources_syscontainer_tools.md new file mode 100644 index 0000000000000000000000000000000000000000..dd5f243a9a174e3d97add56e20968255f19c8eb6 --- /dev/null +++ b/docs/en/cloud/container_form/system_container/dynamically_managing_container_resources_syscontainer_tools.md @@ -0,0 +1,474 @@ +# Dynamically Managing Container Resources \(syscontainer-tools\) + +Resources in common containers cannot be managed. For example, a block device cannot be added to a common container, and a physical or virtual NIC cannot be inserted to a common container. In the system container scenario, the syscontainer-tools can be used to dynamically mount or unmount block devices, network devices, routes, and volumes for containers. + +To use this function, you need to install the syscontainer-tools first. + +```sh +[root@localhost ~]# yum install syscontainer-tools +``` + +## Device Management + +### Function Description + +isulad-tools allows you to add block devices \(such as disks and logical volume managers\) or character devices \(such as GPUs, binners, and FUSEs\) on the host to a container. The devices can be used in the container. For example, you can run the **fdisk** command to format the disk and write data to the file system. If the devices are not required, isulad-tools allows you to delete them from the container and return them to the host. + +### Command Format + +```sh +isulad-tools [COMMAND][OPTIONS] [ARG...] +``` + +In the preceding format: + +**COMMAND**: command related to device management. + +**OPTIONS**: option supported by the device management command. + +**container\_id**: container ID. + +**ARG**: parameter corresponding to the command. + +### Parameter Description + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Function Description

+

Option Description

+

Parameter Description

+

add-device

+

Adds block devices or character devices on the host to a container.

+

Supported options are as follows:

+
  • --blkio-weight-device: sets the I/O weight (relative weight, ranging from 10 to 100) of a block device.
  • --device-read-bps: sets the read rate limit for the block device (byte/s).
  • --device-read-iops: sets the read rate limit for the block device (I/O/s).
  • --device-write-bps: sets the write rate limit for the block device (byte/s).
  • --device-write-iops: sets the write rate limit for the block device (I/O/s).
  • --follow-partition: If a block device is a basic block device (primary SCSI block disk), set this parameter to add all partitions of the primary disk.
  • --force: If any block device or character device already exists in the container, use this parameter to overwrite the old block device or character device files.
  • --update-config-only: updates configuration files only and does not add disks.
+

Parameter format: hostdevice[:containerdevice][:permission] [hostdevice[:containerdevice][:permission]]

+

In the preceding format:

+

hostdevice: path on the host for storing a device.

+

containerdevice: path on the container for storing a device.

+

permission: operation permission on a device within the container.

+

remove-device

+

Deletes block devices or character devices from a container and restores them to the host.

+

Supported options are as follows:

+

--follow-partition: If a block device is a basic block device (primary SCSI block disk), set this parameter to delete all partitions of the primary disk in the container, and restore them to the host.

+

Parameter format: hostdevice[:containerdevice] [hostdevice[:containerdevice]]

+

In the preceding format:

+

hostdevice: path on the host for storing a device.

+

containerdevice: path on the container for storing a device.

+

list-device

+

Lists all block devices or character devices in a container.

+

Supported options are as follows:

+
  • --pretty: outputs data in JSON format.
  • --sub-partition: For a primary disk, add this flag to display the primary disk and its sub-partitions.
+

None

+

update-device

+

Updates the disk QoS.

+

Supported options are as follows:

+
  • --device-read-bps: sets the read rate limit for the block device (byte/s). You are advised to set this parameter to a value greater than or equal to 1024.
  • --device-read-iops: sets the read rate limit for the block device (I/O/s).
  • --device-write-bps: sets the write rate limit for the block device (byte/s). You are advised to set this parameter to a value greater than or equal to 1024.
  • --device-write-iops: sets the write rate limit for the block device (I/O/s).
+

None

+
+ +### Constraints + +- You can add or delete devices when container instances are not running. After the operation is complete, you can start the container to view the device status. You can also dynamically add a device when the container is running. +- Do not concurrently run the **fdisk** command to format disks in a container and on the host. Otherwise, the container disk usage will be affected. +- When you run the **add-device** command to add a disk to a specific directory of a container, if the parent directory in the container is a multi-level directory \(for example, **/dev/a/b/c/d/e**\) and the directory level does not exist, isulad-tools will automatically create the corresponding directory in the container. When the disk is deleted, the created parent directory is not deleted. If you run the **add-device** command to add a device to this parent directory again, a message is displayed, indicating that a device already exists and cannot be added. +- When you run the**add-device** command to add a disk or update disk parameters, you need to configure the disk QoS. Do not set the write or read rate limit for the block device \(I/O/s or byte/s\) to a small value. If the value is too small, the disk may be unreadable \(the actual reason is the speed is too slow\), affecting service functions. +- When you run the **--blkio-weight-device** command to limit the weight of a specified block device, if the block device supports only the BFQ mode, an error may be reported, prompting you to check whether the current OS environment supports setting the weight of the BFQ block device. + +### Example + +- Start a system container, and set **hook spec** to the isulad hook execution script. + + ```sh + [root@localhost ~]# isula run -tid --hook-spec /etc/isulad-tools/hookspec.json --system-container --external-rootfs /root/root-fs none init + eed1096c8c7a0eca6d92b1b3bc3dd59a2a2adf4ce44f18f5372408ced88f8350 + ``` + +- Add a block device to a container. + + ```sh + [root@localhost ~]# isulad-tools add-device ee /dev/sdb:/dev/sdb123 + Add device (/dev/sdb) to container(ee,/dev/sdb123) done. + [root@localhost ~]# isula exec ee fdisk -l /dev/sdb123 + Disk /dev/sdb123: 50 GiB, 53687091200 bytes, 104857600 sectors + Units: sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + Disklabel type: dos + Disk identifier: 0xda58a448 + + Device Boot Start End Sectors Size Id Type + /dev/sdb123p1 2048 104857599 104855552 50G 5 Extended + /dev/sdb123p5 4096 104857599 104853504 50G 83 Linux + ``` + +- Update the device information. + + ```sh + [root@localhost ~]# isulad-tools update-device --device-read-bps /dev/sdb:10m ee + Update read bps for device (/dev/sdb,10485760) done. + ``` + +- Delete a device. + + ```sh + [root@localhost ~]# isulad-tools remove-device ee /dev/sdb:/dev/sdb123 + Remove device (/dev/sdb) from container(ee,/dev/sdb123) done. + Remove read bps for device (/dev/sdb) done. + ``` + +## NIC Management + +### Function Description + +isulad-tools allows you to insert physical or virtual NICs on the host to a container. If the NICs are not required, isulad-tools allows you to delete them from the container and return them to the host. In addition, the NIC configurations can be dynamically modified. To insert a physical NIC, add the NIC on the host to the container. To insert a virtual NIC, create a veth pair and insert its one end to the container. + +### Command Format + +```sh +isulad-tools [COMMAND][OPTIONS] +``` + +In the preceding format: + +**COMMAND**: command related to NIC management. + +**OPTIONS**: option supported by the NIC management command. + +**container\_id**: container ID. + +### Parameter Description + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Function Description

+

Option Description

+

add-nic

+

Creates an NIC for a container.

+

Supported options are as follows:

+
  • --type: specifies the NIC type. Only eth and veth are supported.
  • --name: specifies the NIC name. The format is [host:]container. If host is not specified, a random value is used.
  • --ip: specifies the NIC IP address.
  • --mac: specifies the NIC MAC address.
  • --bridge: specifies the network bridge bound to the NIC.
  • --mtu: specifies the MTU value of the NIC. The default value is 1500.
  • --update-config-only: If this flag is set, only configuration files are updated and NICs are not added.
  • --qlen: specifies the value of QLEN. The default value is 1000.
+

remove-nic

+

Deletes NICs from a container and restores them to the host.

+

Supported options are as follows:

+
  • --type: specifies the NIC type.
  • --name: specifies the name of the NIC. The format is [host:]container.
+

list-nic

+

Lists all NICs in a container.

+

Supported options are as follows:

+
  • --pretty: outputs data in JSON format.
  • --filter: outputs filtered data in the specific format, for example, --filter' {"ip":"192.168.3.4/24", "Mtu":1500}'.
+

update-nic

+

Modifies configuration parameters of a specified NIC in a container.

+

Supported options are as follows:

+
  • --name: specifies the name of the NIC in the container. This parameter is mandatory.
  • --ip: specifies the NIC IP address.
  • --mac: specifies the NIC MAC address.
  • --bridge: specifies the network bridge bound to the NIC.
  • --mtu: specifies the MTU value of the NIC.
  • --update-config-only: If this flag is set, configuration files are updated and NICs are not updated.
  • --qlen: specifies the value of QLEN.
+
+ +### Constraints + +- Physical NICs \(eth\) and virtual NICs \(veth\) can be added. +- When adding a NIC, you can also configure the NIC. The configuration parameters include **--ip**, **--mac**, **--bridge**, **--mtu**, **--qlen**. +- A maximum of eight physical NICs can be added to a container. +- If you run the **isulad-tools add-nic** command to add an eth NIC to a container and do not add a hook, you must manually delete the NIC before the container exits. Otherwise, the name of the eth NIC on the host will be changed to the name of that in the container. +- For a physical NIC \(except 1822 VF NIC\), use the original MAC address when running the **add-nic** command. Do not change the MAC address in the container, or when running the **update-nic** command. +- When using the **isulad-tools add-nic** command, set the MTU value. The value range depends on the NIC model. +- When using isulad-tools to add NICs and routes to containers, you are advised to run the **add-nic** command to add NICs and then run the **add-route** command to add routes. When using isulad-tools to delete NICs and routes from a container, you are advised to run the **remove-route** command to delete routes and then run the **remove-nic** command to delete NICs. +- When using isulad-tools to add NICs, add a NIC to only one container. + +### Example + +- Start a system container, and set **hook spec** to the isulad hook execution script. + + ```sh + [root@localhost ~]# isula run -tid --hook-spec /etc/isulad-tools/hookspec.json --system-container --external-rootfs /root/root-fs none init + 2aaca5c1af7c872798dac1a468528a2ccbaf20b39b73fc0201636936a3c32aa8 + ``` + +- Add a virtual NIC to a container. + + ```sh + [root@localhost ~]# isulad-tools add-nic --type "veth" --name abc2:bcd2 --ip 172.17.28.5/24 --mac 00:ff:48:13:xx:xx --bridge docker0 2aaca5c1af7c + Add network interface to container 2aaca5c1af7c (bcd2,abc2) done + ``` + +- Add a physical NIC to a container. + + ```sh + [root@localhost ~]# isulad-tools add-nic --type "eth" --name eth3:eth1 --ip 172.17.28.6/24 --mtu 1300 --qlen 2100 2aaca5c1af7c + Add network interface to container 2aaca5c1af7c (eth3,eth1) done + ``` + + >[!NOTE] **NOTE:** + >When adding a virtual or physical NIC, ensure that the NIC is in the idle state. Adding a NIC in use will disconnect the system network. + +## Route Management + +### Function Description + +isulad-tools can be used to dynamically add or delete routing tables for system containers. + +### Command Format + +```sh +isulad-tools [COMMAND][OPTIONS] [ARG...] +``` + +In the preceding format: + +**COMMAND**: command related to route management. + +**OPTIONS**: option supported by the route management command. + +**container\_id**: container ID. + +**ARG**: parameter corresponding to the command. + +### API Description + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Function Description

+

Option Description

+

Parameter Description

+

add-route

+

Adds the network routing rules to a container.

+

Supported options are as follows:

+

--update-config-only: If this parameter is configured, configuration files are updated and routing tables are not updated.

+

Parameter format: [{rule1},{rule2}]

+

Example of rule:

+

'[{"dest":"default", "gw":"192.168.10.1"},{"dest":"192.168.0.0/16","dev":"eth0","src":"192.168.1.2"}]'

+
  • dest: target network. If this parameter is left blank, the default gateway is used.
  • src: source IP address of a route.
  • gw: route gateway.
  • dev: network device.
+

remove-route

+

Deletes a route from a container.

+

Supported options are as follows:

+

--update-config-only: If this parameter is configured, only configuration files are updated and routes are not deleted from the container.

+

Parameter format: [{rule1},{rule2}]

+

Example of rule:

+

'[{"dest":"default", "gw":"192.168.10.1"},{"dest":"192.168.0.0/16","dev":"eth0","src":"192.168.1.2"}]'

+
  • dest: target network. If this parameter is left blank, the default gateway is used.
  • src: source IP address of a route.
  • gw: route gateway.
  • dev: network device.
+

list-route

+

Lists all routing rules in a container.

+

Supported options are as follows:

+
  • --pretty: outputs data in JSON format.
  • --filter: outputs filtered data in the specific format, for example, --filter' {"ip":"192.168.3.4/24", "Mtu":1500}'.
+

None

+
+ +### Constraints + +- When using isulad-tools to add NICs and routes to containers, you are advised to run the **add-nic** command to add NICs and then run the **add-route** command to add routes. When using isulad-tools to delete NICs and routes from a container, you are advised to run the **remove-route** command to delete routes and then run the **remove-nic** command to delete NICs. +- When adding a routing rule to a container, ensure that the added routing rule does not conflict with existing routing rules in the container. + +### Example + +- Start a system container, and set **hook spec** to the isulad hook execution script. + + ```sh + [root@localhost ~]# isula run -tid --hook-spec /etc/isulad-tools/hookspec.json --system-container --external-rootfs /root/root-fs none init + 0d2d68b45aa0c1b8eaf890c06ab2d008eb8c5d91e78b1f8fe4d37b86fd2c190b + ``` + +- Use isulad-tools to add a physical NIC to the system container. + + ```sh + [root@localhost ~]# isulad-tools add-nic --type "eth" --name enp4s0:eth123 --ip 172.17.28.6/24 --mtu 1300 --qlen 2100 0d2d68b45aa0 + Add network interface (enp4s0) to container (0d2d68b45aa0,eth123) done + ``` + +- isulad-tools adds a routing rule to the system container. Format example: **\[\{"dest":"default", "gw":"192.168.10.1"\},\{"dest":"192.168.0.0/16","dev":"eth0","src":"192.168.1.2"\}\]**. If **dest** is left blank, its value will be **default**. + + ```sh + [root@localhost ~]# isulad-tools add-route 0d2d68b45aa0 '[{"dest":"172.17.28.0/32", "gw":"172.17.28.5","dev":"eth123"}]' + Add route to container 0d2d68b45aa0, route: {dest:172.17.28.0/32,src:,gw:172.17.28.5,dev:eth123} done + ``` + +- Check whether a routing rule is added in the container. + + ```sh + [root@localhost ~]# isula exec -it 0d2d68b45aa0 route + Kernel IP routing table + Destination Gateway Genmask Flags Metric Ref Use Iface + 172.17.28.0 172.17.28.5 255.255.255.255 UGH 0 0 0 eth123 + 172.17.28.0 0.0.0.0 255.255.255.0 U 0 0 0 eth123 + ``` + +## Volume Mounting Management + +### Function Description + +In a common container, you can set the **--volume** parameter during container creation to mount directories or volumes of the host to the container for resource sharing. However, during container running, you cannot unmount directories or volumes that are mounted to the container, or mount directories or volumes of the host to the container. Only the system container can use the isulad-tools tool to dynamically mount directories or volumes of the host to the container and unmount directories or volumes from the container. + +### Command Format + +```sh +isulad-tools [COMMAND][OPTIONS] [ARG...] +``` + +In the preceding format: + +**COMMAND**: command related to route management. + +**OPTIONS**: option supported by the route management command. + +**container\_id**: container ID. + +**ARG**: parameter corresponding to the command. + +### API Description + +**Table 1**    + + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Function Description

+

Option Description

+

Parameter Description

+

add-path

+

Adds files or directories on the host to a container.

+

None

+

The parameter format is as follows:

+

hostpath:containerpath:permission [hostpath:containerpath:permission ...]

+

In the preceding format:

+

hostpath: path on the host for storing a volume.

+

containerpath: path on the container for storing a volume.

+

permission: operation permission on a mount path within the container.

+

remove-path

+

Deletes directories or files from the container and restores them to the host.

+

None

+

Parameter format: hostpath:containerpath[hostpath:containerpath ]

+

In the preceding format:

+

hostpath: path on the host for storing a volume.

+

containerpath: path on the container for storing a volume.

+

list-path

+

Lists all path directories in a container.

+

Supported options are as follows:

+

--pretty: outputs data in JSON format.

+

None

+
+ +### Constraints + +- When running the **add-path** command, specify an absolute path as the mount path. +- The mount point /.sharedpath is generated on the host after the mount path is specified by running the **add-path** command. +- A maximum of 128 volumes can be added to a container. +- Do not overwrite the root directory \(/\) in a container with the host directory by running the **add-path** command. Otherwise, the function is affected. + +### Example + +- Start a system container, and set **hook spec** to the isulad hook execution script. + + ```sh + [root@localhost ~]# isula run -tid --hook-spec /etc/isulad-tools/hookspec.json --system-container --external-rootfs /root/root-fs none init + e45970a522d1ea0e9cfe382c2b868d92e7b6a55be1dd239947dda1ee55f3c7f7 + ``` + +- Use isulad-tools to mount a directory on the host to a container, implementing resource sharing. + + ```sh + [root@localhost ~]# isulad-tools add-path e45970a522d1 /home/test123:/home/test123 + Add path (/home/test123) to container(e45970a522d1,/home/test123) done. + ``` + +- Create a file in the **/home/test123** directory on the host and check whether the file can be accessed in the container. + + ```sh + [root@localhost ~]# echo "hello world" > /home/test123/helloworld + [root@localhost ~]# isula exec e45970a522d1 bash + [root@localhost /]# cat /home/test123/helloworld + hello world + ``` + +- Use isulad-tools to delete the mount directory from the container. + + ```sh + [root@localhost ~]# isulad-tools remove-path e45970a522d1 /home/test123:/home/test123 + Remove path (/home/test123) from container(e45970a522d1,/home/test123) done + [root@localhost ~]# isula exec e45970a522d1 bash + [root@localhost /]# ls /home/test123/helloworld + ls: cannot access '/home/test123/helloworld': No such file or directory + ``` diff --git a/docs/en/cloud/container_form/system_container/environment_variable_persisting.md b/docs/en/cloud/container_form/system_container/environment_variable_persisting.md new file mode 100644 index 0000000000000000000000000000000000000000..5e4d364715255123502f5c73fedeb795b374e838 --- /dev/null +++ b/docs/en/cloud/container_form/system_container/environment_variable_persisting.md @@ -0,0 +1,46 @@ +# Environment Variable Persisting + +## Function Description + +In a system container, you can make the **env** variable persistent to the configuration file in the rootfs directory of the container by specifying the **--env-target-file** interface parameter. + +## Parameter Description + + + + + + + + + + + +

Command

+

Parameter

+

Value Description

+

isula create/run

+

--env-target-file

+
  • Variable of the string type.
  • The env persistent file must be in the rootfs directory and must be an absolute path.
+
+ +## Constraints + +- If the target file specified by **--env-target-file** exists, the size cannot exceed 10 MB. +- The parameter specified by **--env-target-file** must be an absolute path in the rootfs directory. +- If the value of **--env** conflicts with that of **env** in the target file, the value of **--env** prevails. + +## Example + +Start a system container and specify the **env** environment variable and **--env-target-file** parameter. + +```sh +[root@localhost ~]# isula run -tid -e abc=123 --env-target-file /etc/environment --system-container --external-rootfs /root/myrootfs none init +b75df997a64da74518deb9a01d345e8df13eca6bcc36d6fe40c3e90ea1ee088e +[root@localhost ~]# isula exec b7 cat /etc/environment +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +TERM=xterm +abc=123 +``` + +The preceding information indicates that the **env** variable \(**abc=123**\) of the container has been made persistent to the **/etc/environment** configuration file. diff --git a/docs/en/cloud/container_form/system_container/installation_guideline.md b/docs/en/cloud/container_form/system_container/installation_guideline.md new file mode 100644 index 0000000000000000000000000000000000000000..11528c449307472d36e75c9fcd6c6289d721c521 --- /dev/null +++ b/docs/en/cloud/container_form/system_container/installation_guideline.md @@ -0,0 +1,26 @@ +# Installation Guideline + +1. Install the container engine iSulad. + + ```sh + # yum install iSulad + ``` + +2. Install dependent packages of system containers. + + ```sh + # yum install syscontainer-tools authz lxcfs-tools lxcfs + ``` + +3. Run the following command to check whether iSulad is started: + + ```sh + # systemctl status isulad + ``` + +4. Enable the lxcfs and authz services. + + ```sh + # systemctl start lxcfs + # systemctl start authz + ``` diff --git a/docs/en/cloud/container_form/system_container/maximum_number_of_handles.md b/docs/en/cloud/container_form/system_container/maximum_number_of_handles.md new file mode 100644 index 0000000000000000000000000000000000000000..b3323e55ab1cd842d043d364342a2fe6d3fb79ce --- /dev/null +++ b/docs/en/cloud/container_form/system_container/maximum_number_of_handles.md @@ -0,0 +1,54 @@ +# Maximum Number of Handles + +## Function Description + +System containers support limit on the number of file handles. File handles include common file handles and network sockets. When starting a container, you can specify the **--files-limit** parameter to limit the maximum number of handles opened in the container. + +## Parameter Description + + + + + + + + + + + +

Command

+

Parameter

+

Value Description

+

isula create/run

+

--files-limit

+

  

+
  • The value cannot be negative and must be an integer.
  • The value 0 indicates that the number is not limited by the parameter. The maximum number is determined by the current kernel files cgroup.
+
+ +## Constraints + +- If the value of **--files-limit** is too small, the system container may fail to run the **exec** command and the error "open temporary files" is reported. Therefore, you are advised to set the parameter to a large value. +- File handles include common file handles and network sockets. + +## Example + +To use **--files-limit** to limit the number of file handles opened in a container, run the following command to check whether the kernel supports files cgroup: + +```sh +[root@localhost ~]# cat /proc/1/cgroup | grep files +10:files:/ +``` + +If **files** is displayed, files cgroup is supported. + +Start the container, specify the **--files-limit** parameter, and check whether the **files.limit** parameter is successfully written. + +```sh +[root@localhost ~]# isula run -tid --files-limit 1024 --system-container --external-rootfs /tmp/root-fs empty init 01e82fcf97d4937aa1d96eb8067f9f23e4707b92de152328c3fc0ecb5f64e91d +[root@localhost ~]# isula exec -it 01e82fcf97d4 bash +[root@localhost ~]# cat /sys/fs/cgroup/files/files.limit +1024 + +``` + +The preceding information indicates that the number of file handles is successfully limited in the container. diff --git a/docs/en/cloud/container_form/system_container/overview.md b/docs/en/cloud/container_form/system_container/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..37861583d3becff0c5d5cb8134bcf5d44af561e7 --- /dev/null +++ b/docs/en/cloud/container_form/system_container/overview.md @@ -0,0 +1,3 @@ +# System Container + +System containers are used for heavyweight applications and cloud-based services in scenarios with re-computing, high performance, and high concurrency. Compared with the VM technology, system containers can directly inherit physical machine features and has better performance and less overhead. In addition, system containers can be allocated more computing units of limited resources, reducing costs. Therefore, system containers can be used to build differentiated product competitiveness and provide computing unit instances with higher computing density, lower price, and better performance. diff --git a/docs/en/cloud/container_form/system_container/reboot_or_shutdown_in_a_container.md b/docs/en/cloud/container_form/system_container/reboot_or_shutdown_in_a_container.md new file mode 100644 index 0000000000000000000000000000000000000000..9f56dd71853df04a03b8d6d04c2f486b7b95f0d8 --- /dev/null +++ b/docs/en/cloud/container_form/system_container/reboot_or_shutdown_in_a_container.md @@ -0,0 +1,75 @@ +# Reboot or Shutdown in a Container + +## Function Description + +The **reboot** and **shutdown** commands can be executed in a system container. You can run the **reboot** command to restart a container, and run the **shutdown** command to stop a container. + +## Parameter Description + + + + + + + + + + + +

Command

+

Parameter

+

Value Description

+

isula create/run

+

--restart

+
  • Variable of the string type.
  • Supported option is as follows:

    on-reboot: restarts the system container.

    +

      

    +
+
+ +## Constraints + +- The shutdown function relies on the actual OS of the container running environment. +- When you run the **shutdown -h now** command to shut down the system, do not open multiple consoles. For example, if you run the **isula run -ti** command to open a console and run the **isula attach** command for the container in another host bash, another console is opened. In this case, the **shutdown** command fails to be executed. + +## Example + +- Specify the **--restart on-reboot** parameter when starting a container. For example: + + ```sh + [root@localhost ~]# isula run -tid --restart on-reboot --system-container --external-rootfs /root/myrootfs none init + 106faae22a926e22c828a0f2b63cf5c46e5d5986ea8a5b26de81390d0ed9714f + ``` + +- In the container, run the **reboot** command. + + ```sh + [root@localhost ~]# isula exec -it 10 bash + [root@localhost /]# reboot + ``` + + Check whether the container is restarted. + + ```sh + [root@localhost ~]# isula exec -it 10 ps aux + USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND + root 1 0.1 0.0 21588 9504 ? Ss 12:11 0:00 init + root 14 0.1 0.0 27024 9376 ? Ss 12:11 0:00 /usr/lib/system + root 17 0.0 0.0 18700 5876 ? Ss 12:11 0:00 /usr/lib/system + dbus 22 0.0 0.0 9048 3624 ? Ss 12:11 0:00 /usr/bin/dbus-d + root 26 0.0 0.0 8092 3012 ? Rs+ 12:13 0:00 ps aux + ``` + +- In the container, run the **shutdown** command. + + ```sh + [root@localhost ~]# isula exec -it 10 bash + [root@localhost /]# shutdown -h now + [root@localhost /]# [root@localhost ~]# + ``` + + Check whether the container is stopped. + + ```sh + [root@localhost ~]# isula exec -it 10 bash + Error response from daemon: Exec container error;Container is not running:106faae22a926e22c828a0f2b63cf5c46e5d5986ea8a5b26de81390d0ed9714f + ``` diff --git a/docs/en/cloud/container_form/system_container/security_and_isolation.md b/docs/en/cloud/container_form/system_container/security_and_isolation.md new file mode 100644 index 0000000000000000000000000000000000000000..b5c27697f290bc520449cd07807d117865976dc0 --- /dev/null +++ b/docs/en/cloud/container_form/system_container/security_and_isolation.md @@ -0,0 +1,334 @@ +# Security and Isolation + +## Many-to-Many User Namespaces + +### Function Description + +User namespaces are used to map user **root** of a container to a common user of the host and allow the processes and user in the container \(that are unprivileged on the host\) to have privilege. This can prevent the processes in the container from escaping to the host and performing unauthorized operations. In addition, after user namespaces are used, the container and host use different UIDs and GIDs. This ensures that user resources in the container such as file descriptors are isolated from those on the host. + +In system containers, you can configure the **--user-remap** API parameter to map user namespaces of different containers to different user namespaces on the host, isolating the user namespaces of containers. + +### Parameter Description + + + + + + + + + + + +

Command

+

Parameter

+

Value Description

+

isula create/run

+

--user-remap

+

The parameter format is uid:gid:offset. The parameter is described as follows:

+
  • uid and gid must be integers greater than or equal to 0.
  • offset must be an integer greater than 0 and less than 65536. The value cannot be too small. Otherwise, the container cannot be started.
  • Either the sum of uid and offset or the sum of gid and offset must be less than or equal to 232 - 1. Otherwise, an error is reported during container startup.
+
+ +### Constraints + +- If **--user-remap** is specified in a system container, the rootfs directory must be accessible to users specified by _uid_ or _gid_ in **--user-remap**. Otherwise, user namespaces of containers cannot access rootfs. As a result, the containers fail to be started. +- All IDs in the container can be mapped to the host rootfs. Some directories or files may be mounted from the host to containers, for example, device files in the **/dev/pts** directory. If _offset_ is too small, the mounting may fail. +- _uid_, _gid_, and _offset_ are controlled by the upper-layer scheduling platform. The container engine only checks the validity of them. +- **--user-remap** is available only in system containers. +- **--user-remap** and **--privileged** cannot be set simultaneously. Otherwise, an error is reported during container startup. +- If _uid_ or _gid_ is set to **0**, **--user-remap** does not take effect. +- If **--user-map** is specified for a system container, ensure that the user corresponding to the specified UID or GID can access the isulad metadata directories (**/var/lib/isulad/**, **/var/lib/isulad/engines/**, and **/var/lib/isulad/engines/lcr**). +- **--user-remap** and **--userns** cannot be specified at the same time. + +### Usage Guide + +>[!NOTE] **NOTE:** +>Before specifying the **--user-remap** parameter, configure an offset value for UIDs and GIDs of all directories and files in rootfs. The offset value should be equal to that for _uid_ and _gid_ in **--user-remap**. +>For example, run the following command to offset UIDs and GIDs of all files in the **dev** directory with 100000: +>chown 100000:100000 dev + +Specify the **--user-remap** parameter when the system container is started. + +```shell +[root@localhost ~]# chmod 751 /var/lib/isulad/ +[root@localhost ~]# chmod 751 /var/lib/isulad/engines/ +[root@localhost ~]# chmod 751 /var/lib/isulad/engines/lcr +[root@localhost ~]# isula run -tid --user-remap 100000:100000:65535 --system-container --external-rootfs /home/root-fs none /sbin/init +eb9605b3b56dfae9e0b696a729d5e1805af900af6ce24428fde63f3b0a443f4a +``` + +Check the /sbin/init process information on the host and in a container. + +```shell +[root@localhost ~]# isula exec eb ps aux | grep /sbin/init +root 1 0.6 0.0 21624 9624 ? Ss 15:47 0:00 /sbin/init +[root@localhost ~]# ps aux | grep /sbin/init +100000 4861 0.5 0.0 21624 9624 ? Ss 15:47 0:00 /sbin/init +root 4948 0.0 0.0 213032 808 pts/0 S+ 15:48 0:00 grep --color=auto /sbin/init +``` + +The owner of the /sbin/init process in the container is user **root**, but the owner of the host is the user whose UID is **100000**. + +Create a file in a container and view the file owner on the host. + +```shell +[root@localhost ~]# isula exec -it eb bash +[root@localhost /]# echo test123 >> /test123 +[root@localhost /]# exit +exit +[root@localhost ~]# ll /home/root-fs/test123 +-rw-------. 1 100000 100000 8 Aug 2 15:52 /home/root-fs/test123 +``` + +The owner of the file that is generated in the container is user **root**, but the file owner displayed on the host is the user whose ID is **100000**. + +## User Permission Control + +### Function Description + +A container engine supports TLS for user identity authentication, which is used to control user permissions. Currently, container engines can connect to the authz plug-in to implement permission control. + +### API Description + +You can configure the startup parameters of the iSulad container engine to specify the permission control plug-in. The default daemon configuration file is **/etc/isulad/daemon.json**. + + + + + + + + + + + +

Parameter

+

Example

+

Description

+

--authorization-plugin

+

"authorization-plugin": "authz-broker"

+

User permission authentication plug-in. Currently, only authz-broker is supported.

+
+ +### Constraints + +- User permission policies need to be configured for authz. The default policy file is **/var/lib/authz-broker/policy.json**. This file can be dynamically modified and the modification will take effect immediately without restarting the plug-in service. +- A container engine can be started by user **root**. If some commands used are enabled for by common users, common users may obtain excessive permissions. Therefore, exercise caution when performing such operations. Currently, running the **container\_attach**, **container\_create**, and **container\_exec\_create** commands may cause risks. +- Some compound operations, such as running **isula exec** and **isula inspect** or running and **isula attach** and **isula inspect**, depend on the permission of **isula inspect**. If a user does not have this permission, an error is reported. +- Using SSL/TLS encryption channels hardens security but also reduces performance. For example, the delay increases, more CPU resources are consumed, and encryption and decryption require higher throughput. Therefore, the number of concurrent executions decreases compared with non-TLS communication. According to the test result, when the ARM server \(Cortex-A72 64-core\) is almost unloaded, TLS is used to concurrently start a container. The maximum number of concurrent executions is 200 to 250. +- If **--tlsverify** is specified on the server, the default path where authentication files store is **/etc/isulad**. The default file names are **ca.pem**, **cert.pem**, and **key.pem**. + +### Example + +1. Ensure that the authz plug-in is installed on the host. If the authz plug-in is not installed, run the following command to install and start the authz plug-in service: + + ```shell + [root@localhost ~]# yum install authz + [root@localhost ~]# systemctl start authz + ``` + +2. To enable this function, configure the container engine and TLS certificate. You can use OpenSSL to generate the required certificate. + + ```shell + #SERVERSIDE + + # Generate CA key + openssl genrsa -aes256 -passout "pass:$PASSWORD" -out "ca-key.pem" 4096 + # Generate CA + openssl req -new -x509 -days $VALIDITY -key "ca-key.pem" -sha256 -out "ca.pem" -passin "pass:$PASSWORD" -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$COMMON_NAME/emailAddress=$EMAIL" + # Generate Server key + openssl genrsa -out "server-key.pem" 4096 + + # Generate Server Certs. + openssl req -subj "/CN=$COMMON_NAME" -sha256 -new -key "server-key.pem" -out server.csr + + echo "subjectAltName = DNS:localhost,IP:127.0.0.1" > extfile.cnf + echo "extendedKeyUsage = serverAuth" >> extfile.cnf + + openssl x509 -req -days $VALIDITY -sha256 -in server.csr -passin "pass:$PASSWORD" -CA "ca.pem" -CAkey "ca-key.pem" -CAcreateserial -out "server-cert.pem" -extfile extfile.cnf + + #CLIENTSIDE + + openssl genrsa -out "key.pem" 4096 + openssl req -subj "/CN=$CLIENT_NAME" -new -key "key.pem" -out client.csr + echo "extendedKeyUsage = clientAuth" > extfile.cnf + openssl x509 -req -days $VALIDITY -sha256 -in client.csr -passin "pass:$PASSWORD" -CA "ca.pem" -CAkey "ca-key.pem" -CAcreateserial -out "cert.pem" -extfile extfile.cnf + ``` + + If you want to use the preceding content as the script, replace the variables with the configured values. If the parameter used for generating the CA is empty, set it to **"**. **PASSWORD**, **COMMON\_NAME**, **CLIENT\_NAME**, and **VALIDITY** are mandatory. + +3. When starting the container engine, add parameters related to the TLS and authentication plug-in and ensure that the authentication plug-in is running properly. In addition, to use TLS authentication, the container engine must be started in TCP listening mode instead of the Unix socket mode. The configuration on the container daemon is as follows: + + ```json + { + "tls": true, + "tls-verify": true, + "tls-config": { + "CAFile": "/root/.iSulad/ca.pem", + "CertFile": "/root/.iSulad/server-cert.pem", + "KeyFile":"/root/.iSulad/server-key.pem" + }, + "authorization-plugin": "authz-broker" + } + ``` + +4. Configure policies. For the basic authorization process, all policies are stored in the **/var/lib/authz-broker/policy.json** configuration file. The configuration file can be dynamically modified without restarting the plug-in. Only the SIGHUP signal needs to be sent to the authz process. In the file, a line contains one JSON policy object. The following provides policy configuration examples: + + - All users can run all iSuald commands: **\{"name":"policy\_0","users":\[""\],"actions":\[""\]\}** + - Alice can run all iSulad commands: **\{"name":"policy\_1","users":\["alice"\],"actions":\[""\]\}** + - A blank user can run all iSulad commands: **\{"name":"policy\_2","users":\[""\],"actions":\[""\]\}** + - Alice and Bob can create new containers: **\{"name":"policy\_3","users":\["alice","bob"\],"actions":\["container\_create"\]\}** + - service\_account can read logs and run **docker top**: **\{"name":"policy\_4","users":\["service\_account"\],"actions":\["container\_logs","container\_top"\]\}** + - Alice can perform any container operations: **\{"name":"policy\_5","users":\["alice"\],"actions":\["container"\]\}** + - Alice can perform any container operations, but the request type can only be **get**: **\{"name":"policy\_5","users":\["alice"\],"actions":\["container"\], "readonly":true\}** + + >[!NOTE] **NOTE:** + >- **actions** supports regular expressions. + >- **users** does not support regular expressions. + >- A users cannot be repeatedly specified by **users**. That is, a user cannot match multiple rules. + +5. After updating the configurations, configure TLS parameters on the client to connect to the container engine. That is, access the container engine with restricted permissions. + + ```shell + [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 + ``` + + If you want to use the TLS authentication for default client connection, move the configuration file to **\~/.iSulad** and set the **ISULAD\_HOST** and **ISULAD\_TLS\_VERIFY** variables \(rather than transferring **-H=tcp://$HOST:2375** and -**-tlsverify** during each call\). + + ```shell + [root@localhost ~]# mkdir -pv ~/.iSulad + [root@localhost ~]# cp -v {ca,cert,key}.pem ~/.iSulad + [root@localhost ~]# export ISULAD_HOST=localhost:2375 ISULAD_TLS_VERIFY=1 + [root@localhost ~]# isula version + ``` + +## proc File System Isolation + +### Application Scenario + +Container virtualization is lightweight and efficient, and can be quickly deployed. However, containers are not strongly isolated, which causes great inconvenience to users. Containers have some defects in isolation because the namespace feature of the Linux kernel is not perfect. For example, you can view the proc information on the host \(such as meminfo, cpuinfo, stat, and uptime\) in the proc file system of a container. You can use the lxcfs tool to replace the /proc content of instances in the container with the content in the /proc file system of the host so that services in the container can obtain the correct resource value. + +### API Description + +A system container provides two tool packages: lxcfs and lxcfs-toolkit, which are used together. Lxcfs resides on the host as the daemon process. lxcfs-toolkit mounts the lxcfs file system of the host to containers through the hook mechanism. + +The command line of lxcfs-toolkit is as follows: + +```shell +lxcfs-toolkit [OPTIONS] COMMAND [COMMAND_OPTIONS] +``` + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

Function

+

Parameter

+

remount

+

Remounts lxcfs to containers.

+

--all: remounts lxcfs to all containers.

+

--container-id: remounts lxcfs to a specified container.

+

umount

+

Unmounts lxcfs from containers.

+

--all: unmounts lxcfs from all containers.

+

--container-id: unmounts lxcfs from a specified container.

+

check-lxcfs

+

Checks whether the lxcfs service is running properly.

+

None

+

prestart

+

Mounts the /var/lib/lxcfs directory to the container before the lxcfs service starts.

+

None

+
+ +### Constraints + +- Currently, only the **cpuinfo**, **meminfo**, **stat**, **diskstats**, **partitions**, **swaps**, and **uptime** files in the proc file system are supported. Other files are not isolated from other kernel API file systems \(such as sysfs\). +- After an RPM package is installed, a sample JSON file is generated in **/var/lib/lcrd/hooks/hookspec.json**. To add the log function, you need to add the **--log** configuration during customization. +- The **diskstats** file displays only information about disks that support CFQ scheduling, instead of partition information. Devices in containers are displayed as names in the **/dev** directory. If a device name does not exist, the information is left blank. In addition, the device where the container root directory is located is displayed as **sda**. +- The **slave** parameter is required when lxcfs is mounted. If the **shared** parameter is used, the mount point in containers may be leaked to the host, affecting the host running. +- Lxcfs supports graceful service degradation. If the lxcfs service crashes or becomes unavailable, the **cpuinfo**, **meminfo**, **stat**, **diskstats**, **partitions**, **swaps**and **uptime** files in containers are about host information, and other service functions of containers are not affected. +- Bottom layer of lxcfs depends on the FUSE kernel module and libfuse library. Therefore, the kernel needs to support FUSE. +- Lxcfs supports only the running of 64-bit applications in containers. If a 32-bit application is running in a container, the CPU information \(**cpuinfo**\) read by the application may fail to meet expectations. +- Lxcfs simulates the resource view only of container control groups \(cgroups\). Therefore, system calls \(such as sysconf\) in containers can obtain only host information. Lxcfs cannot implement the kernel isolation. +- The CPU information \(**cpuinfo**\) displayed after lxcfs implements the isolation has the following features: + - **processor**: The value increases from 0. + - **physical id**: The value increases from 0. + - **sibliing**: It has a fixed value of **1**. + - **core id**: It has a fixed value of **0**. + - **cpu cores**: It has a fixed value of **1**. + +### Example + +1. Install the lxcfs and lxcfs-toolkit packages and start the lxcfs service. + + ```shell + [root@localhost ~]# yum install lxcfs lxcfs-toolkit + [root@localhost ~]# systemctl start lxcfs + ``` + +2. After a container is started, check whether the lxcfs mount point exists in the container. + + ```shell + [root@localhost ~]# isula run -tid -v /var/lib/lxc:/var/lib/lxc --hook-spec /var/lib/isulad/hooks/hookspec.json --system-container --external-rootfs /home/root-fs none init + a8acea9fea1337d9fd8270f41c1a3de5bceb77966e03751346576716eefa9782 + [root@localhost ~]# isula exec a8 mount | grep lxcfs + lxcfs on /var/lib/lxc/lxcfs type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) + lxcfs on /proc/cpuinfo type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) + lxcfs on /proc/diskstats type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) + lxcfs on /proc/meminfo type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) + lxcfs on /proc/partitions type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) + lxcfs on /proc/stat type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) + lxcfs on /proc/swaps type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) + lxcfs on /proc/uptime type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) + ``` + +3. Run the **update** command to update the CPU and memory resource configurations of the container and check the container resources. As shown in the following command output, the container resource view displays the actual container resource data instead of data of the host. + + ```shell + [root@localhost ~]# isula update --cpuset-cpus 0-1 --memory 1G a8 + a8 + [root@localhost ~]# isula exec a8 cat /proc/cpuinfo + processor : 0 + BogoMIPS : 100.00 + cpu MHz : 2400.000 + Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid + CPU implementer : 0x41 + CPU architecture: 8 + CPU variant : 0x0 + CPU part : 0xd08 + CPU revision : 2 + + processor : 1 + BogoMIPS : 100.00 + cpu MHz : 2400.000 + Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid + CPU implementer : 0x41 + CPU architecture: 8 + CPU variant : 0x0 + CPU part : 0xd08 + CPU revision : 2 + + [root@localhost ~]# isula exec a8 free -m + total used free shared buff/cache available + Mem: 1024 17 997 7 8 1006 + Swap: 4095 0 4095 + ``` diff --git a/docs/en/cloud/container_form/system_container/shared_memory_channels.md b/docs/en/cloud/container_form/system_container/shared_memory_channels.md new file mode 100644 index 0000000000000000000000000000000000000000..54307a0eb5642ba764050808e5d21f43c878db84 --- /dev/null +++ b/docs/en/cloud/container_form/system_container/shared_memory_channels.md @@ -0,0 +1,55 @@ +# Shared Memory Channels + +## Function Description + +System containers enable the communication between container and host processes through shared memory. You can set the **--host-channel** parameter when creating a container to allow the host to share the same tmpfs with the container so that they can communicate with each other. + +## Parameter Description + + + + + + + + + + + +

Command

+

Parameter

+

Value Description

+

isula create/run

+

--host-channel

+
  • Variable of the string type. Its format is as follows:
    <host path>:<container path>:<rw/ro>:<size limit>
    +
  • The parameter is described as follows:

    <host path>: path to which tmpfs is mounted on the host, which must be an absolute path.

    +

    <container path>: path to which tmpfs is mounted in a container, which must be an absolute path.

    +

    <rw/ro>: permissions on the file system mounted to the container. The value can only be rw (read and write) or ro (read only). The default value is rw.

    +

    <size limit>: maximum size used by the mounted tmpfs. The minimum value is one 4 KB physical page, and the maximum value is half of the total physical memory in the system. The default value is 64MB.

    +
+
+ +## Constraints + +- The lifecycle of tmpfs mounted on the host starts from the container startup to the container deletion. After a container is deleted and its occupied space is released, the space is removed. +- When a container is deleted, the path to which tmpfs is mounted on the host is deleted. Therefore, an existing directory on the host cannot be used as the mount path. +- To ensure that processes running by non-root users on the host can communicate with containers, the permission for tmpfs mounted on the host is 1777. + +## Example + +Specify the **--host-channel** parameter when creating a container. + +```sh +[root@localhost ~]# isula run --rm -it --host-channel /testdir:/testdir:rw:32M --system-container --external-rootfs /root/myrootfs none init +root@3b947668eb54:/# dd if=/dev/zero of=/testdir/test.file bs=1024 count=64K +dd: error writing '/testdir/test.file': No space left on device +32769+0 records in +32768+0 records out +33554432 bytes (34 MB, 32 MiB) copied, 0.0766899 s, 438 MB/s +``` + +>[!NOTE] **NOTE:** +> +>- If **--host-channel** is used for size limit, the file size is constrained by the memory limit in the container. \(The OOM error may occur when the memory usage reaches the upper limit.\) +>- If a user creates a shared file on the host, the file size is not constrained by the memory limit in the container. +>- If you need to create a shared file in the container and the service is memory-intensive, you can add the value of **--host-channel** to the original value of the container memory limit, eliminating the impact. diff --git a/docs/en/cloud/container_form/system_container/specifying_rootfs_to_create_a_container.md b/docs/en/cloud/container_form/system_container/specifying_rootfs_to_create_a_container.md new file mode 100644 index 0000000000000000000000000000000000000000..0110c154a7d4dc3de7da6910fbb90d12ed062774 --- /dev/null +++ b/docs/en/cloud/container_form/system_container/specifying_rootfs_to_create_a_container.md @@ -0,0 +1,45 @@ +# Specifying Rootfs to Create a Container + +## Function Description + +Different from a common container that needs to be started by specifying a container image, a system container is started by specifying a local root file system \(rootfs\) using the **--external-rootfs** parameter. The rootfs contains the operating system environment on which the container depends during running. + +## Parameter Description + + + + + + + + + + + + +

Command

+

Parameter

+

Value Description

+

isula create/run

+

--external-rootfs

+
  • Variable of the string type.
  • Absolute path in the root file system of the container, that is, the path of the rootfs.
+
+ +## Constraints + +- The rootfs directory specified using the **--external-rootfs** parameter must be an absolute path. +- The rootfs directory specified using the **--external-rootfs** parameter must be a complete OS environment including **systemd** package. Otherwise, the container fails to be started. +- When a container is deleted, the rootfs directory specified using **--external-rootfs** is not deleted. +- Containers based on an ARM rootfs cannot run in the x86 environment. Containers based on an x86 rootfs cannot run in the ARM environment. +- You are advised not to start multiple container instances in the same rootfs. That is, one rootfs is used by only one container instance that is in the lifecycle. + +## Example + +Assuming the local rootfs path is **/root/myrootfs**, run the following command to start a system container: + +```sh +# isula run -tid --system-container --external-rootfs /root/myrootfs none init +``` + +>[!NOTE] **NOTE:** +>The rootfs is a user-defined file system. Prepare it by yourself. For example, a rootfs is generated after the TAR package of a container image is decompressed. diff --git a/docs/en/cloud/container_form/system_container/usage_guide.md b/docs/en/cloud/container_form/system_container/usage_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..0966085e95f53ac54d4a579b75a625516066628c --- /dev/null +++ b/docs/en/cloud/container_form/system_container/usage_guide.md @@ -0,0 +1,20 @@ +# Usage Guide + +System container functions are enhanced based on the iSula container engine. The container management function and the command format of the function provided by system containers are the same as those provided by the iSula container engine. + +The following sections describe how to use the enhanced functions provided by system containers. For details about other command operations, see "iSulad Container Engine." + +The system container functions involve only the **isula create/run** command. Unless otherwise specified, this command is used for all functions. The command format is as follows: + +```shell +isula create/run [OPTIONS] [COMMAND] [ARG...] +``` + +In the preceding format: + +- **OPTIONS**: one or more command parameters. For details about supported parameters, see "iSulad Container Engine \> Appendix \> Command Line Parameters." +- **COMMAND**: command executed after a system container is started. +- **ARG**: parameter corresponding to the command executed after a system container is started. + +>[!NOTE] **Note:** +>Using system containers requires root privileges. diff --git a/docs/en/cloud/container_form/system_container/using_systemd_to_start_a_container.md b/docs/en/cloud/container_form/system_container/using_systemd_to_start_a_container.md new file mode 100644 index 0000000000000000000000000000000000000000..0aafdde373d6de6ea29d921056fcbcad0fac9183 --- /dev/null +++ b/docs/en/cloud/container_form/system_container/using_systemd_to_start_a_container.md @@ -0,0 +1,85 @@ +# Using systemd to Start a Container + +## Function Description + +The init process started in system containers differs from that in common containers. Common containers cannot start system services through systemd. However, system containers have this capability. You can enable the systemd service by specifying the **--system-container** parameter when starting a system container. + +## Parameter Description + + + + + + + + + + + + +

Command

+

Parameter

+

Value Description

+

isula create/run

+

--system-container

+
  • The value is of a Boolean data type and can be true or false. The default value is true.
  • Specifies whether it is a system container. This function must be enabled.
+
+ +## Constraints + +- The systemd service needs to call some special system APIs, including mount, umount2, unshare, reboot, and name\_to\_handle\_at. Therefore, permissions to call the preceding APIs are enabled for system containers when the privileged container tag is disabled. +- All system containers are started by the init process. The init process does not respond to the SIGTERM signal which indicates normal exit. By default, the **stop** command forcibly kills the container 10 seconds later. If you need a quicker stop, you can manually specify the timeout duration of the **stop** command. +- **--system-container** must be used together with **--external-rootfs**. +- Various services can run in a system container. The **systemctl** command is used to manage the service starting and stopping. Services may depend on each other. As a result, when an exception occurs, some service processes are in the D or Z state so that the container cannot exit properly. +- Some service processes in a system container may affect other operation results. For example, if the NetworkManager service is running in the container, adding NICs to the container may be affected \(the NICs are successfully added but then stopped by the NetworkManger\), resulting in unexpected results. +- Currently, system containers and hosts cannot be isolated by using udev events. Therefore, the **fstab** file cannot be configured. +- The systemd service may conflict with the cgconfig service provided by libcgroup. You are advised to delete the libcgroup-related packages from a container or set **Delegate** of the cgconfig service to **no**. + +## Example + +- Specify the **--system-container** and **--external-rootfs** parameters to start a system container. + + ```sh + [root@localhost ~]# isula run -tid -n systest01 --system-container --external-rootfs /root/myrootfs none init + ``` + +- After the preceding commands are executed, the container is running properly. You can run the **exec** command to access the container and view the process information. The command output indicates that the systemd service has been started. + + ```sh + [root@localhost ~]# isula exec -it systest01 bash + [root@localhost /]# ps -ef + UID PID PPID C STIME TTY TIME CMD + root 1 0 2 06:49 ? 00:00:00 init + root 14 1 2 06:49 ? 00:00:00 /usr/lib/systemd/systemd-journal + root 16 1 0 06:49 ? 00:00:00 /usr/lib/systemd/systemd-network + dbus 23 1 0 06:49 ? 00:00:00 /usr/bin/dbus-daemon --system -- + root 25 0 0 06:49 ? 00:00:00 bash + root 59 25 0 06:49 ? 00:00:00 ps –ef + ``` + +- Run the **systemctl** command in the container to check the service status. The command output indicates that the service is managed by systemd. + + ```sh + [root@localhost /]# systemctl status dbus + ● dbus.service - D-Bus System Message Bus + Loaded: loaded (/usr/lib/systemd/system/dbus.service; static; vendor preset: + disabled) + Active: active (running) since Mon 2019-07-22 06:49:38 UTC; 2min 5 + 8s ago + Docs: man:dbus-daemon(1) + Main PID: 23 (dbus-daemon) + CGroup: /system.slice/dbus.service + └─23 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidf + ile --systemd-activation --syslog-only + + Jul 22 06:49:38 localhost systemd[1]: Started D-Bus System Message Bus. + ``` + +- Run the **systemctl** command in the container to stop or start the service. The command output indicates that the service is managed by systemd. + + ```sh + [root@localhost /]# systemctl stop dbus + Warning: Stopping dbus.service, but it can still be activated by: + dbus.socket + [root@localhost /]# systemctl start dbus + ``` diff --git a/docs/en/cloud/container_form/system_container/writable_namespace_kernel_parameters.md b/docs/en/cloud/container_form/system_container/writable_namespace_kernel_parameters.md new file mode 100644 index 0000000000000000000000000000000000000000..df8f7abc855c5ff6220984042bb21e548ac39cdb --- /dev/null +++ b/docs/en/cloud/container_form/system_container/writable_namespace_kernel_parameters.md @@ -0,0 +1,86 @@ +# Writable Namespace Kernel Parameters + +## Function Description + +For services running in containers, such as databases, big data, and common applications, some kernel parameters need to be set and adjusted to obtain the optimal performance and reliability. The modification permission of all kernel parameters must be disabled or enabled simultaneously \(by using privileged container\). + +When the modification permission is disabled, only the --sysctl external interface is provided and parameters cannot be flexibly modified in a container. + +When the modification permission is enabled, some kernel parameters are globally valid. If some parameters are modified in a container, all programs on the host will be affected, harming security. + +System containers provide the **--ns-change-opt** parameter, which can be used to dynamically set namespace kernel parameters in a container. The parameter value can be **net** or **ipc**. + +## Parameter Description + + + + + + + + + + + +

Command

+

Parameter

+

Value Description

+

isula create/run

+

--ns-change-opt

+
  • Variable of the string type.
  • The parameter value can be net or ipc.

    net: All namespace parameters in the /proc/sys/net directory are supported.

    +

    ipc: Supported namespace parameters are as follows:

    +

    /proc/sys/kernel/msgmax

    +

    /proc/sys/kernel/msgmnb

    +

    /proc/sys/kernel/msgmni

    +

    /proc/sys/kernel/sem

    +

    /proc/sys/kernel/shmall

    +

    /proc/sys/kernel/shmmax

    +

    /proc/sys/kernel/shmmni

    +

    /proc/sys/kernel/shm_rmid_forced

    +

    /proc/sys/fs/mqueue/msg_default

    +

    /proc/sys/fs/mqueue/msg_max

    +

    /proc/sys/fs/mqueue/msgsize_default

    +

    /proc/sys/fs/mqueue/msgsize_max

    +

    /proc/sys/fs/mqueue/queues_max

    +
  • You can specify multiple namespace configurations and separate them with commas (,). For example, --ns-change-opt=net,ipc.
+
+ +## Constraints + +- If both **--privileged** \(privileged container\) and **--ns-change-opt** are specified during container startup, **--ns-change-opt** does not take effect. + +## Example + +Start a container and set **--ns-change-opt** to **net**. + +```sh +[root@localhost ~]# isula run -tid --ns-change-opt net --system-container --external-rootfs /root/myrootfs none init +4bf44a42b4a14fdaf127616c90defa64b4b532b18efd15b62a71cbf99ebc12d2 +[root@localhost ~]# isula exec -it 4b mount | grep /proc/sys +proc on /proc/sys type proc (ro,nosuid,nodev,noexec,relatime) +proc on /proc/sysrq-trigger type proc (ro,nosuid,nodev,noexec,relatime) +proc on /proc/sys/net type proc (rw,nosuid,nodev,noexec,relatime) +``` + +The mount point **/proc/sys/net** in the container has the **rw** option, indicating that the **net**-related namespace kernel parameters have the read and write permissions. + +Start another container and set **--ns-change-opt** to **ipc**. + +```sh +[root@localhost ~]# isula run -tid --ns-change-opt ipc --system-container --external-rootfs /root/myrootfs none init +c62e5e5686d390500dab2fa76b6c44f5f8da383a4cbbeac12cfada1b07d6c47f +[root@localhost ~]# isula exec -it c6 mount | grep /proc/sys +proc on /proc/sys type proc (ro,nosuid,nodev,noexec,relatime) +proc on /proc/sysrq-trigger type proc (ro,nosuid,nodev,noexec,relatime) +proc on /proc/sys/kernel/shmmax type proc (rw,nosuid,nodev,noexec,relatime) +proc on /proc/sys/kernel/shmmni type proc (rw,nosuid,nodev,noexec,relatime) +proc on /proc/sys/kernel/shmall type proc (rw,nosuid,nodev,noexec,relatime) +proc on /proc/sys/kernel/shm_rmid_forced type proc (rw,nosuid,nodev,noexec,relatime) +proc on /proc/sys/kernel/msgmax type proc (rw,nosuid,nodev,noexec,relatime) +proc on /proc/sys/kernel/msgmni type proc (rw,nosuid,nodev,noexec,relatime) +proc on /proc/sys/kernel/msgmnb type proc (rw,nosuid,nodev,noexec,relatime) +proc on /proc/sys/kernel/sem type proc (rw,nosuid,nodev,noexec,relatime) +proc on /proc/sys/fs/mqueue type proc (rw,nosuid,nodev,noexec,relatime) +``` + +The mount point information of **ipc**-related kernel parameters in the container contains the **rw** option, indicating that the **ipc**-related namespace kernel parameters have the read and write permissions. diff --git a/docs/en/cloud/hybrid_deployment/oncn_bwm/_toc.yaml b/docs/en/cloud/hybrid_deployment/oncn_bwm/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..708d5f9919a0eec550e5ec71392408468ee0150f --- /dev/null +++ b/docs/en/cloud/hybrid_deployment/oncn_bwm/_toc.yaml @@ -0,0 +1,6 @@ +label: oncn-bwm User Guide +isManual: true +description: Bandwidth management solution for pods in hybrid service environments +sections: + - label: Overview + href: ./overview.md diff --git a/docs/en/cloud/hybrid_deployment/oncn_bwm/overview.md b/docs/en/cloud/hybrid_deployment/oncn_bwm/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..7fe4abc6574767928762fce3ade91893909b182c --- /dev/null +++ b/docs/en/cloud/hybrid_deployment/oncn_bwm/overview.md @@ -0,0 +1,239 @@ +# oncn-bwm User Guide + +## Introduction + +With the rapid development of technologies such as cloud computing, big data, artificial intelligence, 5G, and the Internet of Things (IoT), data center construction becomes more and more important. However, the server resource utilization of the data center is very low, resulting in a huge waste of resources. To improve the utilization of server resources, oncn-bwm emerges. + +oncn-bwm is a pod bandwidth management tool applicable to hybrid deployment of offline services. It properly schedules network resources for nodes based on QoS levels to ensure online service experience and greatly improve the overall network bandwidth utilization of nodes. + +The oncn-bwm tool supports the following functions: + +- Enabling/Disabling/Querying pod bandwidth management +- Setting the pod network priority +- Setting the offline service bandwidth range and online service waterline +- Querying internal statistics + +## Installation + +### Environmental Requirements + +- Operating system: openEuler 22.03 LTS SP4 with the Yum repository of openEuler 22.03 LTS SP4 + +### Installation Procedure + +Run the following command: + +```shell +yum install oncn-bwm +``` + +## How to Use + +The oncn-bwm tool provides the `bwmcli` command line tool to enable pod bandwidth management or perform related configurations. The overall format of the `bwmcli` command is as follows: + +**bwmcli** < option(s) > + +> Note: +> +> The root permission is required for running the `bwmcli` command. +> +> Pod bandwidth management is supported only in the outbound direction of a node (packets are sent from the node to other nodes). +> +> Pod bandwidth management cannot be enabled for NICs for which tc qdisc rules have been configured. +> +> Upgrading the oncn-bwm package does not affect the enabling status before the upgrade. Uninstalling the oncn-bwm package disables pod bandwidth management for all NICs. + +### Command Interfaces + +#### Pod Bandwidth Management + +##### Commands and Functions + +| Command Format | Function | +| --------------------------- | ------------------------------------------------------------ | +| **bwmcli -e** \ | Enables pod bandwidth management for a specified NIC.| +| **bwmcli -d** \ | Disables pod bandwidth management for a specified NIC.| +| **bwmcli -p devs** | Queries pod bandwidth management of all NICs on a node.| + +> Note: +> +> - If no NIC name is specified, the preceding commands take effect for all NICs on a node. +> +> - Enable pod bandwidth management before running other `bwmcli` commands. + +##### Examples + +- Enable pod bandwidth management for NICs eth0 and eth1. + + ```shell + # bwmcli -e eth0 -e eth1 + enable eth0 success + enable eth1 success + ``` + +- Disable pod bandwidth management for NICs eth0 and eth1. + + ```shell + # bwmcli -d eth0 -d eth1 + disable eth0 success + disable eth1 success + ``` + +- Query pod bandwidth management of all NICs on a node. + + ```shell + # bwmcli -p devs + eth0 : enabled + eth1 : disabled + eth2 : disabled + docker0 : disabled + lo : disabled + ``` + +#### Pod Network Priority + +##### Commands and Functions + +| Command Format | Function | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| **bwmcli -s** *path* \ | Sets the network priority of a pod. *path* indicates the cgroup path corresponding to the pod, and *prio* indicates the priority. The value of *path* can be a relative path or an absolute path. The default value of *prio* is **0**. The optional values are **0** and **-1**. The value **0** indicates online services, and the value **-1** indicates offline services.| +| **bwmcli -p** *path* | Queries the network priority of a pod. | + +> Note: +> +> Online and offline network priorities are supported. The oncn-bwm tool controls the bandwidth of pods in real time based on the network priority. The specific policy is as follows: For online pods, the bandwidth is not limited. For offline pods, the bandwidth is limited within the offline bandwidth range. + +##### Examples + +- Set the priority of the pod whose cgroup path is **/sys/fs/cgroup/net_cls/test_online** to **0**. + + ```shell + # bwmcli -s /sys/fs/cgroup/net_cls/test_online 0 + set prio success + ``` + +- Query the priority of the pod whose cgroup path is **/sys/fs/cgroup/net_cls/test_online**. + + ```shell + # bwmcli -p /sys/fs/cgroup/net_cls/test_online + 0 + ``` + +#### Offline Service Bandwidth Range + +| Command Format | Function | +| ---------------------------------- | ------------------------------------------------------------ | +| **bwmcli -s bandwidth** \ | Sets the offline bandwidth for a host or VM. **low** indicates the minimum bandwidth, and **high** indicates the maximum bandwidth. The unit is KB, MB, or GB, and the value range is [1 MB, 9999 GB].| +| **bwmcli -p bandwidth** | Queries the offline bandwidth of a host or VM. | + +> Note: +> +> - All NICs with pod bandwidth management enabled on a host are considered as a whole, that is, the configured online service waterline and offline service bandwidth range are shared. +> +> - The pod bandwidth configured using `bwmcli` takes effect for all offline services on a node. The total bandwidth of all offline services cannot exceed the bandwidth range configured for the offline services. There is no network bandwidth limit for online services. +> +> - The offline service bandwidth range and online service waterline are used together to limit the offline service bandwidth. When the online service bandwidth is lower than the configured waterline, the offline services can use the configured maximum bandwidth. When the online service bandwidth is higher than the configured waterline, the offline services can use the configured minimum bandwidth. + +##### Examples + +- Set the offline bandwidth to 30 Mbit/s to 100 Mbit/s. + + ```shell + # bwmcli -s bandwidth 30mb,100mb + set bandwidth success + ``` + +- Query the offline bandwidth range. + + ```shell + # bwmcli -p bandwidth + bandwidth is 31457280(B),104857600(B) + ``` + +#### Online Service Waterline + +##### Commands and Functions + +| Command Format | Function | +| ---------------------------------------------- | ------------------------------------------------------------ | +| **bwmcli -s waterline** \ | Sets the online service waterline for a host or VM. *val* indicates the waterline value. The unit is KB, MB, or GB, and the value range is [20 MB, 9999 GB].| +| **bwmcli -p waterline** | Queries the online service waterline of a host or VM. | + +> Note: +> +> - When the total bandwidth of all online services on a host is higher than the waterline, the bandwidth that can be used by offline services is limited. When the total bandwidth of all online services on a host is lower than the waterline, the bandwidth that can be used by offline services is increased. +> - The system determines whether the total bandwidth of online services exceeds or is lower than the configured waterline every 10 ms. Then the system determines the bandwidth limit for offline services based on whether the online bandwidth collected within each 10 ms is higher than the waterline. + +##### Examples + +- Set the online service waterline to 20 MB. + + ```shell + # bwmcli -s waterline 20mb + set waterline success + ``` + +- Query the online service waterline. + + ```shell + # bwmcli -p waterline + waterline is 20971520(B) + ``` + +#### Statistics + +##### Commands and Functions + +| Command Format | Function | +| ------------------- | ------------------ | +| **bwmcli -p stats** | Queries internal statistics.| + +> Note: +> +> - **offline_target_bandwidth**: target bandwidth for offline services. +> +> - **online_pkts**: total number of online service packets after pod bandwidth management is enabled. +> +> - **offline_pkts**: total number of offline service packets after pod bandwidth management is enabled. +> +> - **online_rate**: current online service rate. +> +> - **offline_rate**: current offline service rate. + +##### Examples + +Query internal statistics. + +```shell +# bwmcli -p stats +offline_target_bandwidth: 2097152 +online_pkts: 2949775 +offline_pkts: 0 +online_rate: 602 +offline_rate: 0 +``` + +### Typical Use Case + +To configure pod bandwidth management on a node, perform the following steps: + +```shell +bwmcli -p devs #Query the pod bandwidth management status of the NICs in the system. +bwmcli -e eth0 # Enable pod bandwidth management for the eth0 NIC. +bwmcli -s /sys/fs/cgroup/net_cls/online 0 # Set the network priority of the online service pod to 0 +bwmcli -s /sys/fs/cgroup/net_cls/offline -1 # Set the network priority of the offline service pod to -1. +bwmcli -s bandwidth 20mb,1gb # Set the bandwidth range for offline services. +bwmcli -s waterline 30mb # Set the waterline for online services. +``` + +### Constraints + +1. Only the **root** user is allowed to run the bwmcli command. +2. Currently, this feature supports only two network QoS priorities: offline and online. +3. If the tc qdisc rules have been configured for a NIC, the network QoS function will fail to be enabled for the NIC. +4. After a NIC is removed and then inserted, the original QoS rules will be lost. In this case, you need to manually reconfigure the network QoS function. +5. When you run one command to enable or disable multiple NICs at the same time, if any NIC fails to be operated, operations on subsequent NICs will be stopped. +6. When SELinux is enabled in the environment, if the SELinux policy is not configured for the bwmcli program, some commands (such as setting or querying the waterline, bandwidth, and priority) may fail. You can confirm the failure in SELinux logs. To solve this problem, disable SELinux or configure the SELinux policy for the bwmcli program. +7. Upgrading the software package does not change the enabling status before the upgrade. Uninstalling the software package disables the function for all devices. +8. The NIC name can contain only digits, letters, hyphens (-), and underscores (_). NICs whose names contain other characters cannot be identified. +9. In actual scenarios, bandwidth limiting may cause protocol stack memory overstock. In this case, backpressure depends on transport-layer protocols. For protocols that do not have backpressure mechanisms, such as UDP, packet loss, ENOBUFS, and rate limiting deviation may occur. diff --git a/docs/en/cloud/hybrid_deployment/rubik/_toc.yaml b/docs/en/cloud/hybrid_deployment/rubik/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2e499eb75c3bf3be2f5f8a5db25213c33a1d53d3 --- /dev/null +++ b/docs/en/cloud/hybrid_deployment/rubik/_toc.yaml @@ -0,0 +1,16 @@ +label: Rubik User Guide +isManual: true +description: QoS-based resource allocation in hybrid service deployment scenarios +sections: + - label: Overview + href: ./overview.md + - label: Installation and Deployment + href: ./installation_and_deployment.md + - label: Feature Introduction + href: ./feature_introduction.md + - label: Configuration + href: configuration.md + - label: Example of Isolation for Hybrid Deployed Services + href: ./example_of_isolation_for_hybrid_deployed_services.md + - label: Appendix + href: ./appendix.md diff --git a/docs/en/cloud/hybrid_deployment/rubik/appendix.md b/docs/en/cloud/hybrid_deployment/rubik/appendix.md new file mode 100644 index 0000000000000000000000000000000000000000..56bdc77cc6db474a3885db2fcc386be7f523cdce --- /dev/null +++ b/docs/en/cloud/hybrid_deployment/rubik/appendix.md @@ -0,0 +1,258 @@ +# Appendixes + +## DaemonSet Configuration Template + +```yaml +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: rubik +rules: + - apiGroups: [""] + resources: ["pods"] + verbs: ["list", "watch"] + - apiGroups: [""] + resources: ["pods/eviction"] + verbs: ["create"] +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: rubik +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: rubik +subjects: + - kind: ServiceAccount + name: rubik + namespace: kube-system +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: rubik + namespace: kube-system +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: rubik-config + namespace: kube-system +data: + config.json: | + { + "agent": { + "logDriver": "stdio", + "logDir": "/var/log/rubik", + "logSize": 1024, + "logLevel": "info", + "cgroupRoot": "/sys/fs/cgroup", + "enabledFeatures": [ + "preemption" + ] + }, + "preemption": { + "resource": [ + "cpu" + ] + } + } +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: rubik-agent + namespace: kube-system + labels: + k8s-app: rubik-agent +spec: + selector: + matchLabels: + name: rubik-agent + template: + metadata: + namespace: kube-system + labels: + name: rubik-agent + spec: + serviceAccountName: rubik + hostPID: true + containers: + - name: rubik-agent + image: hub.oepkgs.net/cloudnative/rubik:latest + imagePullPolicy: IfNotPresent + env: + - name: RUBIK_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + securityContext: + capabilities: + add: + - SYS_ADMIN + resources: + limits: + memory: 200Mi + requests: + cpu: 100m + memory: 200Mi + volumeMounts: + - name: rubiklog + mountPath: /var/log/rubik + readOnly: false + - name: runrubik + mountPath: /run/rubik + readOnly: false + - name: sysfs + mountPath: /sys/fs + readOnly: false + - name: devfs + mountPath: /dev + readOnly: false + - name: config-volume + mountPath: /var/lib/rubik + terminationGracePeriodSeconds: 30 + volumes: + - name: rubiklog + hostPath: + path: /var/log/rubik + - name: runrubik + hostPath: + path: /run/rubik + - name: sysfs + hostPath: + path: /sys/fs + - name: devfs + hostPath: + path: /dev + - name: config-volume + configMap: + name: rubik-config + items: + - key: config.json + path: config.json +``` + +## Dockerfile Template + +```dockerfile +FROM scratch +COPY ./build/rubik /rubik +ENTRYPOINT ["/rubik"] +``` + +## Image Build Script + +```bash +#!/bin/bash +set -e + +CURRENT_DIR=$(cd "$(dirname "$0")" && pwd) +BINARY_NAME="rubik" + +RUBIK_FILE="${CURRENT_DIR}/build/rubik" +DOCKERFILE="${CURRENT_DIR}/Dockerfile" +YAML_FILE="${CURRENT_DIR}/rubik-daemonset.yaml" + +# Get version and release number of rubik binary +VERSION=$(${RUBIK_FILE} -v | grep ^Version | awk '{print $NF}') +RELEASE=$(${RUBIK_FILE} -v | grep ^Release | awk '{print $NF}') +IMG_TAG="${VERSION}-${RELEASE}" + +# Get rubik image name and tag +IMG_NAME_AND_TAG="${BINARY_NAME}:${IMG_TAG}" + +# Build container image for rubik +docker build -f "${DOCKERFILE}" -t "${IMG_NAME_AND_TAG}" "${CURRENT_DIR}" + +echo -e "\n" +# Check image existence +docker images | grep -E "REPOSITORY|${BINARY_NAME}" + +# Modify rubik-daemonset.yaml file, set rubik image name +sed -i "/image:/s/:.*/: ${IMG_NAME_AND_TAG}/" "${YAML_FILE}" +``` + +## Communication Matrix + +- The Rubik service process communicates with the Kubernetes API server as a client through the list-watch mechanism to obtain information about Pods. + +|Source IP Address|Source Port|Destination IP Address|Destination Port|Protocol|Port Description|Listening Port Modifiable|Authentication Method| +|----|----|----|----|----|----|----|----| +|Rubik node|32768-61000|api-server node|443|TCP|Kubernetes external resource port |No|Token| + +## File Permissions + +- All Rubik operations require root permissions. + +- Related file permissions are as follows: + +|Path|Permissions|Description| +|----|----|----| +|/var/lib/rubik|750|Directory generated after the RPM package is installed, which stores Rubik-related files| +|/var/lib/rubik/build|550|Directory for storing the Rubik binary file| +|/var/lib/rubik/build/rubik|550|Rubik binary file| +|/var/lib/rubik/rubik-daemonset.yaml|550|Rubik DaemonSet configuration template to be used for Kubernetes deployment| +|/var/lib/rubik/Dockerfile|640|Dockerfile template| +|/var/lib/rubik/build_rubik_image.sh|550|Rubik container image build script.| +|/var/log/rubik|640|Directory for storing Rubik log files (requires logDriver=file)| +|/var/log/rubik/rubik.log*|600|Rubik log files| + +## Constraints + +### Specifications + +- Drive: More than 1 GB + +- Memory: More than 100 MB + +## Runtime + +- Only one Rubik instance can exist on a Kubernetes node. + +- Rubik cannot take any CLI parameters. Rubik will fail to be started if any CLI parameter is specified. + +- When the Rubik process is in the T (TASK_STOPPED or TASK_TRACED) OR D (TASK_UNINTERRUPTIBLE) state, the server is unavailable and does not respond. The service becomes available after the process recovers from the abnormal state. + +### Pod Priorities + +- Pod priorities cannot be raised. If the priority of service A is changed from -1 to 0, Rubik will report an error. + +- Adding or modifying annotations or re-applying Pod YAML configuration file does not trigger Pod rebuild. Rubik senses changes in Pod annotations through the list-watch mechanism. + +- After an online service is moved to the offline group, do not move it back to the online group, otherwise QoS exception may occur. + +- Do not add important system services and kernel processes to the offline group. Otherwise, they cannot be scheduled timely, causing system errors. + +- Online and offline configurations for the CPU and memory must be consistent to avoid QoS conflicts between the two subsystems. + +- In the scenario of hybrid service deployment, the original CPU share mechanism is restricted: + - When both online and offline services run on a CPU, the CPU share of the offline service does not take effect. + - If only an online or offline service runs on a CPU, its CPU share takes effect. + - You are advised to set the Pod priority of the offline service to BestEffort. + +- Priority inversion of user-mode processes, SMT, cache, NUMA load balancing, and offline service load balancing are not supported. + +### Other + +To prevent data inconsistency, do not manually modify cgroup or resctrl parameters of the pods, including: + +- CPU cgroup directory, such as **/sys/fs/cgroup/cpu/kubepods/burstable/\/\** + - cpu.qos_level + - cpu.cfs_burst_us + +- memory cgroup directory, such as **/sys/fs/cgroup/memory/kubepods/burstable/\/\** + - memory.qos_level + - memory.soft_limit_in_bytes + - memory.force_empty + - memory.limit_in_bytes + - memory.high + +- blkio cgroup directory, such as **/sys/fs/cgroup/blkio/kubepods/burstable/\/\** + - blkio.throttle.read_bps_device + - blkio.throttle.read_iops_device + - blkio.throttle.write_bps_device + - blkio.throttle.write_iops_device + +- RDT cgroup directory, such as **/sys/fs/resctrl** diff --git a/docs/en/cloud/hybrid_deployment/rubik/configuration.md b/docs/en/cloud/hybrid_deployment/rubik/configuration.md new file mode 100644 index 0000000000000000000000000000000000000000..08da1c7f06f76d58b0650377969269643dd3b260 --- /dev/null +++ b/docs/en/cloud/hybrid_deployment/rubik/configuration.md @@ -0,0 +1,191 @@ +# Rubik Configuration Description + +The Rubik program is written in Go and compiled into a static executable file to minimize the coupling with the system. + +## Commands + +Besides the `-v` option for querying version information, Rubik does not support other options. The following is an example of version query output: + +```bash +$ ./rubik -v +Version: 2.0.0 +Release: 3.oe2203SP3 +Go Version: go1.18.8 +Git Commit: bcaace8 +Built: 2023-03-30 +OS/Arch: linux/amd64 +``` + +## Configuration + +When the Rubik binary file is executed, Rubik parses configuration file **/var/lib/rubik/config.json**. +> Custom configuration file path is currently not supported to avoid confusion. +> When Rubik runs as a Daemonset in a Kubernetes cluster, modify the ConfigMap in the **hack/rubik-daemonset.yaml** file to configure Rubik. + +The configuration file is in JSON format and keys are in lower camel case. + +An example configuration file is as follows: + +```json +{ + "agent": { + "logDriver": "stdio", + "logDir": "/var/log/rubik", + "logSize": 2048, + "logLevel": "info", + "cgroupRoot": "/sys/fs/cgroup", + "enabledFeatures": [ + "preemption", + "dynCache", + "ioLimit", + "ioCost", + "quotaBurst", + "quotaTurbo", + "psi" + ] + }, + "preemption": { + "resource": [ + "cpu", + "memory" + ] + }, + "quotaTurbo": { + "highWaterMark": 50, + "syncInterval": 100 + }, + "dynCache": { + "defaultLimitMode": "static", + "adjustInterval": 1000, + "perfDuration": 1000, + "l3Percent": { + "low": 20, + "mid": 30, + "high": 50 + }, + "memBandPercent": { + "low": 10, + "mid": 30, + "high": 50 + } + }, + "ioCost": [ + { + "nodeName": "k8s-single", + "config": [ + { + "dev": "sdb", + "enable": true, + "model": "linear", + "param": { + "rbps": 10000000, + "rseqiops": 10000000, + "rrandiops": 10000000, + "wbps": 10000000, + "wseqiops": 10000000, + "wrandiops": 10000000 + } + } + ] + } + ], + "psi": { + "interval": 10, + "resource": [ + "cpu", + "memory", + "io" + ], + "avg10Threshold": 5.0 + } +} +``` + +Rubik configuration items include common items and feature items. Common items are under the **agent** section and are applied globally. Feature items are applied to sub-features that are enabled in the **enabledFeatures** field under **agent**. + +### agent + +The **agent** section stores common configuration items related to Rubik running, such as log configurations and cgroup mount points. + +| Key\[=Default Value] | Type | Description | Example Value | +| ------------------------- | ---------- | -------------------------------------- | --------------------------- | +| logDriver=stdio | string | Log driver, which can be the standard I/O or file | stdio, file | +| logDir=/var/log/rubik | string | Log directory | Anu readable and writable directory | +| logSize=1024 | int | Total size of logs in MB when logDriver=file | \[10, $2^{20}$] | +| logLevel=info | string | Log level | debug,info,warn,error | +| cgroupRoot=/sys/fs/cgroup | string | Mount point of the system cgroup | Mount point of the system cgroup | +| enabledFeatures=\[] | string array | List of Rubik features to be enabled | Rubik features. See [Feature Introduction](./feature_introduction.md) for details. | + +### preemption + +The **preemption** field stores configuration items of the absolute preemption feature, including CPU and memory preemption. You can configure this field to use either or both of CPU and memory preemption. + +| Key\[=Default Value] | Type | Description | Example Value | +| --------------- | ---------- | -------------------------------- | ----------- | +| resource=\[] | string array | Resource type to be accessed | cpu, memory | + +### dynCache + +The **dynCache** field stores configuration items related to pod memory bandwidth and last-level cache (LLC) limits. **l3Percent** indicates the watermarks of each LLC level. **memBandPercent** indicates watermarks of memory bandwidth in MB. + +| Key\[=Default Value] | Type | Description | Example Value | +| ----------------------- | ------ | ------------------ | --------------- | +| defaultLimitMode=static | string | dynCache control mode | static, dynamic | +| adjustInterval=1000      | int    | Interval for dynCache control, in milliseconds| \[10, 10000] | +| perfDuration=1000        | int    | perf execution duration for dynCache, in milliseconds | \[10, 10000] | +| l3Percent                | map    | Watermarks of each L3 cache level of dynCache in percents|      | +| .low=20                  | int    | Watermark of the low L3 cache level | \[10, 100]     | +| .mid=30                  | int    | Watermark of the middle L3 cache level  | \[low, 100]   | +| .high=50                 | int    | Watermark of the high L3 cache level  | \[mid, 100]   | +| memBandPercent           | map    | Watermarks of each memory bandwidth level of dynCache in percents|   | +| .low=10                  | int    | Watermark of the low bandwidth level in MB | \[10, 100]  | +| .mid=30                  | int    | Watermark of the middle bandwidth level in MB  | \[low, 100]   | +| .high=50                 | int    | Watermark of the high bandwidth level in MB | \[mid, 100]   | + +### quotaTurbo + +The **quotaTurbo** field stores configuration items of the user-mode elastic traffic limiting feature. + +| Key\[=Default Value] | Type | Description | Example Value | +| ----------------- | ------ | -------------------------------- | -------------------- | +| highWaterMark=60 | int | High watermark of CPU load |\[0, alarmWaterMark) | +| alarmWaterMark=80 | int | Alarm watermark of CPU load | (highWaterMark,100\] | +| syncInterval=100 | int | Interval for triggering container quota updates, in milliseconds | \[100,10000] | + +### ioCost + +The **ioCost** field stores configuration items of the iocost-based I/O weight control feature. The field is an array whose elements are names of nodes (**nodeName**) and their device configuration arrays (**config**). + +| Key | Type | Description | Example Value | +| ----------------- | ------ | -------------------------------- | -------------------- | +| nodeName | string | Node name | Kubernetes cluster node name | +| config | array | Configurations of a block device | / | + +**config** parameters of a block device: + +| Key\[=Default Value] | Type | Description | Example Value | +| --------------- | ------ | --------------------------------------------- | -------------- | +| dev | string | Physical block device name | / | +| model | string | iocost model | linear | +| param | / | Device parameters specific to the model | / | + +For the **linear** model, the **param** field supports the following parameters: + +| Key\[=Default Value] | Type | Description | Example Value | +| --------------- | ---- | ---- | ------ | +| rbps | int64 | Maximum read bandwidth | (0, $2^{63}$) | +| rseqiops | int64 | Maximum sequential read IOPS | (0, $2^{63}$) | +| rrandiops | int64 | Maximum random read IOPS | (0, $2^{63}$) | +| wbps | int64 | Maximum write bandwidth | (0, $2^{63}$) | +| wseqiops | int64 | Maximum sequential write IOPS | (0, $2^{63}$) | +| wrandiops | int64 | Maximum random write IOPS | (0, $2^{63}$) | + +### psi + +The **psi** field stores configuration items of the PSI-based interference detection feature. This feature can monitor CPUs, memory, and I/O resources.You can configure this field to monitor the PSI of any or all of the resources. + +| Key\[=Default Value] | Type | Description | Example Value | +| --------------- | ---------- | -------------------------------- | ----------- | +| interval=10 |int|Interval for PSI monitoring, in seconds| \[10,30]| +| resource=\[] | string array | Resource type to be accessed | cpu, memory, io | +| avg10Threshold=5.0 | float | Average percentage of blocking time of a job in 10 seconds. If this threshold is reached, offline services are evicted. | \[5.0,100]| diff --git a/docs/en/cloud/hybrid_deployment/rubik/example_of_isolation_for_hybrid_deployed_services.md b/docs/en/cloud/hybrid_deployment/rubik/example_of_isolation_for_hybrid_deployed_services.md new file mode 100644 index 0000000000000000000000000000000000000000..c9bf4742303c0be9425a6f04cfb35cd831bc874d --- /dev/null +++ b/docs/en/cloud/hybrid_deployment/rubik/example_of_isolation_for_hybrid_deployed_services.md @@ -0,0 +1,230 @@ +# Example of Isolation for Hybrid Deployed Services + +## Environment Preparation + +Check whether the kernel supports isolation of hybrid deployed services. + +```bash +# Check whether isolation of hybrid deployed services is enabled in the /boot/config- system configuration. +# If CONFIG_QOS_SCHED=y, the function is enabled. Example: +cat /boot/config-5.10.0-60.18.0.50.oe2203.x86_64 | grep CONFIG_QOS +CONFIG_QOS_SCHED=y +``` + +Install the Docker engine. + +```bash +yum install -y docker-engine +docker version +# The following shows the output of docker version. +Client: + Version: 18.09.0 + EulerVersion: 18.09.0.300 + API version: 1.39 + Go version: go1.17.3 + Git commit: aa1eee8 + Built: Wed Mar 30 05:07:38 2022 + OS/Arch: linux/amd64 + Experimental: false + +Server: + Engine: + Version: 18.09.0 + EulerVersion: 18.09.0.300 + API version: 1.39 (minimum version 1.12) + Go version: go1.17.3 + Git commit: aa1eee8 + Built: Tue Mar 22 00:00:00 2022 + OS/Arch: linux/amd64 + Experimental: false +``` + +## Hybrid Deployed Services + +### Online Service ClickHouse + +Use the clickhouse-benchmark tool to test the performance and collect statistics on performance metrics such as QPS, P50, P90, and P99. For details, see . + +### Offline Service Stress + +Stress is a CPU-intensive test tool. You can specify the **--cpu** option to start multiple concurrent CPU-intensive tasks to increase the stress on the system. + +## Usage Instructions + +1. Start a ClickHouse container (online service). + +2. Access the container and run the **clickhouse-benchmark** command. Set the number of concurrent queries to **10**, the number of queries to **10000**, and time limit to **30**. + +3. Start a Stress container (offline service) at the same time and concurrently execute 10 CPU-intensive tasks to increase the stress on the environment. + +4. After the **clickhouse-benchmark** command is executed, a performance test report is generated. + +The **test_demo.sh** script for the isolation test for hybrid deployed services is as follows: + +```bash +#!/bin/bash + +with_offline=${1:-no_offline} +enable_isolation=${2:-no_isolation} +stress_num=${3:-10} +concurrency=10 +timeout=30 +output=/tmp/result.json +online_container= +offline_container= + +exec_sql="echo \"SELECT * FROM system.numbers LIMIT 10000000 OFFSET 10000000\" | clickhouse-benchmark -i 10000 -c $concurrency -t $timeout" + +function prepare() { + echo "Launch clickhouse container." + online_container=$(docker run -itd \ + -v /tmp:/tmp:rw \ + --ulimit nofile=262144:262144 \ + -p 34424:34424 \ + yandex/clickhouse-server) + + sleep 3 + echo "Clickhouse container launched." +} + +function clickhouse() { + echo "Start clickhouse benchmark test." + docker exec $online_container bash -c "$exec_sql --json $output" + echo "Clickhouse benchmark test done." +} + +function stress() { + echo "Launch stress container." + offline_container=$(docker run -itd joedval/stress --cpu $stress_num) + echo "Stress container launched." + + if [ $enable_isolation == "enable_isolation" ]; then + echo "Set stress container qos level to -1." + echo -1 > /sys/fs/cgroup/cpu/docker/$offline_container/cpu.qos_level + fi +} + +function benchmark() { + if [ $with_offline == "with_offline" ]; then + stress + sleep 3 + fi + clickhouse + echo "Remove test containers." + docker rm -f $online_container + docker rm -f $offline_container + echo "Finish benchmark test for clickhouse(online) and stress(offline) colocation." + echo "===============================clickhouse benchmark==================================================" + cat $output + echo "===============================clickhouse benchmark==================================================" +} + +prepare +benchmark +``` + +## Test Results + +Independently execute the online service ClickHouse. + +```bash +sh test_demo.sh no_offline no_isolation +``` + +The baseline QoS data (QPS/P50/P90/P99) of the online service is as follows: + +```json +{ + "localhost:9000": { + "statistics": { + "QPS": 1.8853412284364512, + ...... + } + }, + "query_time_percentiles": { + ...... + "50": 0.484905256, + "60": 0.519641313, + "70": 0.570876148, + "80": 0.632544937, + "90": 0.728295525, + "95": 0.808700418, + "99": 0.873945121, + ...... + } +} +``` + +Execute the **test_demo.sh** script to start the offline service Stress and run the test with the isolation function disabled. + +```bash +# **with_offline** indicates that the offline service Stress is enabled. +# **no_isolation** indicates that isolation of hybrid deployed services is disabled. +sh test_demo.sh with_offline no_isolation +``` + +**When isolation of hybrid deployed services is disabled**, the QoS data (QPS/P80/P90/P99) of the ClickHouse service is as follows: + +```json +{ + "localhost:9000": { + "statistics": { + "QPS": 0.9424028693636205, + ...... + } + }, + "query_time_percentiles": { + ...... + "50": 0.840476774, + "60": 1.304607373, + "70": 1.393591017, + "80": 1.41277543, + "90": 1.430316688, + "95": 1.457534764, + "99": 1.555646855, + ...... + } +} +``` + +Execute the **test_demo.sh** script to start the offline service Stress and run the test with the isolation function enabled. + +```bash +# **with_offline** indicates that the offline service Stress is enabled. +# **enable_isolation** indicates that isolation of hybrid deployed services is enabled. +sh test_demo.sh with_offline enable_isolation +``` + +**When isolation of hybrid deployed services is enabled**, the QoS data (QPS/P80/P90/P99) of the ClickHouse service is as follows: + +```json +{ + "localhost:9000": { + "statistics": { + "QPS": 1.8825798759270718, + ...... + } + }, + "query_time_percentiles": { + ...... + "50": 0.485725185, + "60": 0.512629901, + "70": 0.55656488, + "80": 0.636395956, + "90": 0.734695906, + "95": 0.804118275, + "99": 0.887807409, + ...... + } +} +``` + +The following table lists the test results. + +| Service Deployment Mode | QPS | P50 | P90 | P99 | +| -------------------------------------- | ------------- | ------------- | ------------- | ------------- | +| ClickHouse (baseline) | 1.885 | 0.485 | 0.728 | 0.874 | +| ClickHouse + Stress (isolation disabled)| 0.942 (-50%) | 0.840 (-42%) | 1.430 (-49%) | 1.556 (-44%) | +| ClickHouse + Stress (isolation enabled) | 1.883 (-0.11%) | 0.486 (-0.21%) | 0.735 (-0.96%) | 0.888 (-1.58%) | + +When isolation of hybrid deployed services is disabled, the QPS of ClickHouse decreases from approximately 1.9 to 0.9, the service response delay (P90) increases from approximately 0.7s to 1.4s, and the QoS decreases by about 50%. When isolation of hybrid deployed services is enabled, the QPS and response delay (P50/P90/P99) of ClickHouse decrease by less than 2% compared with the baseline, and the QoS remains unchanged. diff --git a/docs/en/cloud/hybrid_deployment/rubik/feature_introduction.md b/docs/en/cloud/hybrid_deployment/rubik/feature_introduction.md new file mode 100644 index 0000000000000000000000000000000000000000..acd26ee7ccec4ae5b0dbb268f57ac05a80d70575 --- /dev/null +++ b/docs/en/cloud/hybrid_deployment/rubik/feature_introduction.md @@ -0,0 +1,436 @@ +# Feature Introduction + +## Absolute Preemption + +Rubik allows you to configure priorities of services. In the hybrid deployment of online and offline services, Rubik ensures that online services preempt resources. CPU and memory resources can be preempted. + +You can enable preemption using the following configuration: + +```yaml +... + "agent": { + "enabledFeatures": [ + "preemption" + ] + }, + "preemption": { + "resource": [ + "cpu", + "memory" + ] + } +... +``` + +For details, see [Configuration Description](./configuration.md#preemption). + +In addition, you need to add **volcano.sh/preemptable** to the YAML annotation of the pod to specify service priorities. For example: + +```yaml +annotations: + volcano.sh/preemptable: true +``` + +> This annotation is used by all Rubik features to identify whether the service is online or offline. +> **true** indicates an online service. +> **false** indicates an offline service. + +### CPU Absolute Preemption + +**Prerequisites** + +- The kernel supports CPU priority configuration based on control groups (cgroups). The CPU subsystem provides the **cpu.qos_level** interface. The kernel of openEuler 22.03 or later is recommended. + +**Kernel interface** + +- The interface exists in the cgroup of the container in the `/sys/fs/cgroup/cpu*` directory, for example, `/sys/fs/cgroup/cpu/kubepods/burstable//`. + - **cpu.qos_level**: enables the CPU priority configuration. The value can be **0** or **-1**, with **0** being the default. + - **0** indicates an online service. + - **1** indicates an offline service. + +### Memory Absolute Preemption + +In the hybrid deployment of online and offline services, Rubik ensures that offline services are first terminated in the case of out-of-memory (OOM). + +**Prerequisites** + +- The kernel supports memory priority configuration based on cgroups. The memory subsystem provides the **memory.qos_level** interface. The kernel of openEuler 22.03 or later is recommended. +- To enable the memory priority feature, run `echo 1 > /proc/sys/vm/memcg_qos_enable`. + +**Kernel interface** + +- **/proc/sys/vm/memcg_qos_enable**: enables the memory priority feature. The value can be **0** or **1**, with **0** being the default. You can run `echo 1 > /proc/sys/vm/memcg_qos_enable` to enable the feature. + - **0**: The feature is disabled. + - **1**: The feature is enabled. + +- The interface exists in the cgroup of the container in the `/sys/fs/cgroup/memory` directory, for example, `/sys/fs/cgroup/memory/kubepods/burstable//`. + - **memory.qos_level**: enables the memory priority configuration. The value can be **0** or **-1**, with **0** being the default. + - **0** indicates an online service. + - **1** indicates an offline service. + +## dynCache Memory Bandwidth and L3 Cache Access Limit + +Rubik can limit pod memory bandwidth and L3 cache access for offline services to reduce the impact on online services. + +**Prerequisites** + +- The cache access and memory bandwidth limit feature supports only physical machines. + - For x86 physical machines, the CAT and MBA functions of Intel RDT must be enabled in the OS by adding **rdt=l3cat,mba** to the kernel command line parameters (**cmdline**). + - For ARM physical machines, the MPAM function must be enabled in the OS by adding **mpam=acpi** to the kernel command line parameters (**cmdline**). + +- Due to kernel restrictions, RDT does not support the pseudo-locksetup mode. + +**New Permissions and Directories of Rubik** + +- Mount point: **/sys/fs/resctrl**. Rubik reads and sets files in the **/sys/fs/resctrl** directory. This directory must be mounted before Rubik is started and cannot be unmounted during Rubik running. +- Permission: SYS_ADMIN. To set files in the **/sys/fs/resctrl** directory on the host, the SYS_ADMIN permission must be assigned to the Rubik container. +- namespace: pid namespace. Rubik obtains the PID of the service container process on the host. Therefore, the Rubik container needs to share the PID namespace with the host. + +**Rubik RDT Cgroups** + +Rubik creates five cgroups (**rubik_max**, **rubik_high**, **rubik_middle**, **rubik_low** and **rubik_dynamic**) in the RDT resctrl directory (**/sys/fs/resctrl** by default). Rubik writes the watermarks to the **schemata** file of each corresponding cgroup upon startup. The low, middle, and high watermarks can be configured in **dynCache**. The max cgroup uses the default maximum value. The initial watermark of the dynamic cgroup is the same as that of the low cgroup. + +**Rubik dynamic Cgroup** + +When offline pods whose cache level is dynamic exist, Rubik collects the cache miss and LLC miss metrics of online service pods on the current node and adjusts the watermark of the rubik_dynamic cgroup. In this way, Rubik dynamically controls offline service pods in the dynamic cgroup. + +### Memory Bandwidth and LLC Limit of the Pod + +Rubik allows you to configure the memory bandwidth and LLC cgroup for a service pod in either of the following ways: + +- Global annotation + You can set **defaultLimitMode** in the global parameters of Rubik. Rubik automatically configures cgroups for offline service pods (marked by the **volcano.sh/preemptable** annotation in the absolute preemption configuration). + - If the value is **static**, the pod is added to the **rubik_max** cgroup. + - If the value is **dynamic**, the pod is added to the **rubik_dynamic** cgroup. +- Manual annotation + - You can set the cache level for a service pod using the **volcano.sh/cache-limit** annotation and the pod to the specified cgroup. For example, the pod with the following configuration is added to the **rubik_low** cgroup: + + ```yaml + annotations: + volcano.sh/cache-limit: "low" + ``` + +> Note 1: Cache limits apply to offline services only. +> Note 2: The manual annotation overrides the global one. If you set **defaultLimitMode** in the global Rubik configuration and specify the cache level in the YAML configuration of a pod, the actual dynCache limit is the one specified in the pod YAML configuration. + +### dynCache Kernel Interface + +- Rubik creates five cgroup directories in **/sys/fs/resctrl** and modifies the **schemata** and **tasks** files of each cgroup. + +### dynCache Configuration + +The dynCache function is configured as follows: + +```json +"agent": { + "enabledFeatures": [ + "dynCache" + ] +}, +"dynCache": { + "defaultLimitMode": "static", + "adjustInterval": 1000, + "perfDuration": 1000, + "l3Percent": { + "low": 20, + "mid": 30, + "high": 50 + }, + "memBandPercent": { + "low": 10, + "mid": 30, + "high": 50 + } +} +``` + +For details, see [Configuration Description](./configuration.md#dyncache) + +- **l3Percent** and **memBandPercent**: + **l3Percent** and **memBandPercent** are used to configure the watermarks of the low, mid, and high cgroups. + + Assume that in the current environment **rdt bitmask=fffff** and **numa=2**. Based on the **low** value of **l3Percent** (20) and the **low** value of **memBandPercent** (10), Rubik configures **/sys/fs/resctrl/rubik_low** as follows: + + ```text + L3:0=f;1=f + MB:0=10;1=10 + ``` + +- defaultLimitMode: + - If the **volcano.sh/cache-limit** annotation is not specified for an offline pod, the **defaultLimitMode** of **cacheConfig** determines the cgroup to which the pod is added. +- **adjustInterval**: + - Interval for dynCache to dynamically adjust the **rubik_dynamic** cgroup, in milliseconds. The default value is **1000**. +- **perfDuration**: + - perf execution duration for dynCache, in milliseconds. The default value is **1000**. + +### Precautions for dynCache + +- dynCache takes affect only for offline pods. +- If a service container is manually restarted during running (the container ID remains unchanged but the container process ID changes), dynCache does not take effect for the container. +- After a service container is started and the dynCache level is set, the limit level cannot be changed. +- The sensitivity of adjusting the dynamic cgroup is affected **adjustInterval** and **perfDuration** values in the Rubik configuration file and the number of online service pods on the node. If the impact detection result indicates that adjustment is required, the adjustment interval fluctuates within the range **\[adjustInterval + perfDuration, adjustInterval + perfDuration x Number of pods\]**. You can set the configuration items based on your required sensitivity. + +## dynMemory Tiered Memory Reclamation + +Rubik supports multiple memory strategies. You can apply different memory allocation methods to different scenarios. + +### fssr + +fssr is kernel cgroup-based dynamic watermark control. **memory.high** is a memcg-level watermark interface provided by the kernel. Rubik continuously detects memory usage and dynamically adjusts the **memory.high** limit of offline services to suppress the memory usage of offline services, ensuring the quality of online services. + +The core logic of fssr is as follows: + +- Rubik calculates the memory to reserve upon startup. The default value is the smaller of 10% of total memory or 10 GB. +- Rubik sets the cgroup-level watermark of the offline container. The kernel provides the **memory.high** and **memory.high_async_ratio** interfaces for configuring the soft upper limit and alarm watermark of the cgroup. By default, **memory.high** is 80% of the total memory (**total_memory**). +- Rubik obtains the free memory (**free_memory**). +- When **free_memory** is less than **reserved_memory**, Rubik decreases **memory.high** for the offline container. The amount decreased each time is 10% of **total_memory**. +- If **free_memory** is more than double the amount of **reserved_memory**, Rubik increases **memory.high**. The amount increased each time is 1% of **total_memory**. + +**Kernel interface** + +- The interface exists in the cgroup of the container in the `/sys/fs/cgroup/memory` directory, for example, `/sys/fs/cgroup/memory/kubepods/burstable//`. When the fssr strategy is used, Rubik adjusts the following value of offline service containers based on the memory usage of the current node: +- memory.high + +### dynMemory Configuration + +The strategy and check interval of the dynMemory module can be specified in **dynMemory**: + +```json +"dynMemory": { + "policy": "fssr" +} +``` + +- **policy** indicates the dynMemory policy, which supports **fssr**. + +## Flexible Bandwidth + +To effectively solve the problem of QoS deterioration caused by the CPU bandwidth limit of a service, the Rubik provides flexible bandwidth to allow the container to use extra CPU resources, ensuring stable service running. The flexible bandwidth solution is implemented in both kernel mode and user mode. They cannot be used at the same time. + +The user-mode solution is implemented through the CFS bandwidth control capability provided by the Linux kernel. On the premise that the load watermark of the entire system is secure and stable and does not affect the running of other services, the dual-watermark mechanism allows service containers to adaptively adjust the CPU bandwidth limit, relieving CPU resource bottlenecks and improving service performance. + +The kernel-mode solution is implemented through the CPU burst capability provided by the Linux kernel, which allows containers to temporarily exceed its CPU usage limit. You need to manually configure the kernel-mode configuration by setting the burst value for each pod. Rubik does not automatically sets the values. + +### quotaTurbo User-Mode Solution + +You need manually set the **volcano.sh/quota-turbo="true"** annotation for the service pod that requires flexible CPU bandwidth. This annotation takes effect only for the pod whose CPU quota is limited, that is, **CPULimit** is specified in the YAML file. +The user-mode flexible bandwidth policy periodically adjusts the CPU quota of an allowlist container based on the CPU load of the entire system and container running status, and automatically checks and restores the quota values of all containers when Rubik is started or stopped. (The CPU quota described in this section refers to the **cpu.cfs_quota_us** parameter of the container.) The adjustment policies are as follows: + +1. When the CPU load of the entire system is lower than the alarm threshold, if the allowlist container is suppressed by the CPU in the current period, Rubik slowly increases the CPU quota of the container based on the suppression status. The total container quota increase in a single period cannot exceed 1% of the total CPU quota of the current node. +2. When the CPU load of the entire system is higher than the high watermark, if the allowlist container is not suppressed by the CPU in the current period, Rubik slowly increases the container quota based on the watermark. +3. When the CPU load of the entire system is higher than the alarm threshold, if the current quota value of the allowlist container exceeds the configured value, Rubik quickly decreases the CPU quotas of all containers to ensure that the load is lower than the alarm watermark. +4. The maximum CPU quota that a container can have cannot exceed twice the configured value (for example, the **CPULimit** parameter specified in the pod YAML file), and cannot be less than the configured value. +5. The overall CPU usage of the container within 60 synchronization periods cannot exceed the configured value. +6. If the overall CPU usage of a node exceeds 10% within 1 minute, the container quota will not be increased in this period. + +**Kernel interface** + +The interface exists in the cgroup of the container in the `/sys/fs/cgroup/cpu` directory, for example, `/sys/fs/cgroup/cpu,cpuacct/kubepods/burstable//`. The following files are involved: + +- **cpu.cfs_quota_us** +- **cpu.cfs_period_us** +- **cpu.stat** + +#### quotaTurbo Configuration + +The quotaTurbo function is configured as follows: + +```json +"agent": { + "enabledFeatures": [ + "quotaTurbo" + ] + }, +"quotaTurbo": { + "highWaterMark": 60, + "alarmWaterMark": 80, + "syncInterval": 100 +} +``` + +For details, see [Configuration Description](./configuration.md#quotaturbo). + +- **highWaterMark** is the high watermark of CPU load. +- **alarmWaterMark** is the alarm watermark of CPU load. +- **syncInterval** is the interval for triggering container quota updates, in milliseconds. + +You need to manually specify the **volcano.sh/quota-turbo="true"** annotation for the service pod. + +```yaml +metadata: + annotations: + # true means to add the pod to the allowlist of quotaTurbo + volcano.sh/quota-turbo : "true" +``` + +### quotaBurst Kernel-Mode Solution + +quotaBurst can be enabled through the **cpu.cfs_burst_us** kernel interface. Rubik allows a container to accumulate CPU resources when the CPU usage of the container is lower than the quota and uses the accumulated CPU resources when the CPU usage exceeds the quota. + +**Kernel interface** + +The interface exists in the cgroup of the container in the `/sys/fs/cgroup/cpu` directory, for example, `/sys/fs/cgroup/cpu/kubepods/burstable//`. The annotation value is written into the following file: + +- **cpu.cfs_burst_us** + +> The kernel-mode solution is implemented through the **cpu.cfs_burst_us** interface. The **cpu.cfs_burst_us** file must exist in the CPU subsystem directory of the cgroup. The value of **cpu.cfs_burst_us** can be as follows: +> +> 1. When **cpu.cfs_quota_us** is not -1, the sum of **cfs_burst_us** and **cfs_quota_us** must not be greater than $2^{44}$-1, and **cfs_burst_us** is less than or equal to **cfs_quota_us**. +> 2. When **cpu.cfs_quota_us** is -1, the CPU burst function is not enabled, and **cfs_burst_us** is 0. + +#### quotaBurst Configuration + +The quotaBurst function is configured as follows: + +```json +"agent": { + "enabledFeatures": [ + "quotaBurst" + ] +} +``` + +You need to manually specify the **volcano.sh/quota-burst-time** annotation for the service pod or run `kubectl annotate` to dynamically add the annotation. + +- In the YAML file upon pod creation: + + ```yaml + metadata: + annotations: + # The default unit is microsecond. + volcano.sh/quota-burst-time : "2000" + ``` + +- Modify annotation: You can run the kubectl annotate command to dynamically modify annotation. For example: + + ```bash + kubectl annotate --overwrite pods volcano.sh/quota-burst-time='3000' + ``` + +### Constraints + +- The user-mode CPU bandwidth control is implemented through the **cpu.cfs_period_us** (CFS bandwidth control) and **cpu.cfs_quota_us** parameters. The following restrictions apply: + - To avoid unknown errors, other users are not allowed to modify CFS bandwidth control parameters (including but not limited to **cpu.cfs_quota_us** and **cpu.cfs_period_us**). + - Do not use this function together with similar programs that limit CPU resources. Otherwise, the user-mode function cannot be used properly. Similar programs include but are not limited to Kubernetes VPA and HPA, Tencent EVPA, Alibaba CPU Burst, and CPU-share and core binding provided by cgroup. + - If you monitor the metrics related to CFS bandwidth control, using this feature may affect the consistency of the monitored metrics. +- The following restrictions apply to the kernel-mode solution: + - Use the Kubernetes interface to set the burst value of the pod. Do not manually modify the **cpu.cfs_burst_us** file in the CPU cgroup directory of the container. +- Do not enable both kernel-mode and user-mode flexible bandwidth solutions at the same time. + +## I/O Weight Control Based on ioCost + +To solve the problem that the QoS of online services deteriorates due to high I/O usage of offline services, Rubik provides the I/O weight control function based on ioCost of cgroup v1. +For more, see the [ioCost description](https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#io:~:text=correct%20memory%20ownership.-,IO,-%C2%B6). + +**Prerequisites** + +Rubik can control the I/O weight distribution of different pods through iocost of cgroup v1. Therefore, the kernel must support the following features: + +- cgroup v1 blkcg iocost +- cgroup v1 writeback + +The **blkio.cost.qos** and **blkio.cost.model** file interfaces exist in the **blkcg** root system file. For details about the implementation and interface description, see the openEuler kernel document. + +### ioCost Implementation Description + +![](./figures/iocost.PNG) + +The procedure of the Rubik implementation is as follows: + +- When Rubik is deployed, Rubik parses the configuration and sets iocost parameters. +- Rubik registers the detection event to the Kubernetes API server. +- When a pod is deployed, the pod configuration information is write back to Rubik. +- Rubik parses the pod configuration information and configures the pod iocost weight based on the QoS level. + +### ioCost Configuration + +```json +"agent": { + "enabledFeatures": [ + "ioCost" + ] +} +"ioCost": [{ + "nodeName": "k8s-single", + "config": [ + { + "dev": "sdb", + "enable": true, + "model": "linear", + "param": { + "rbps": 10000000, + "rseqiops": 10000000, + "rrandiops": 10000000, + "wbps": 10000000, + "wseqiops": 10000000, + "wrandiops": 10000000 + } + } + ] +}] +``` + +For details, see [Configuration Description](./configuration.md#iocost). + +> Note: Parameters related to the ioCost linear model can be obtained through [**iocost_coef_gen.py**](https://github.com/torvalds/linux/blob/master/tools/cgroup/iocost_coef_gen.py). + +## Interference Detection Based on Pressure Stall Information Metrics + +Rubik can observe the pressure stall information (PSI) metrics of online pods to determine the pressure, evicts offline pods, and generates log alarms. Rubik uses **some avg10** as the indicator, which indicates the average blocking time proportion of any task within 10s. You can choose to monitor the CPU, memory, and I/O resources as required and set thresholds. If the blocking time proportion exceeds the threshold, Rubik evicts offline pods based on certain policies to release corresponding resources. If the CPU and memory usage of an online pod is high, Rubik evicts the offline service that occupies the most CPU or memory resources. If the I/O of offline services is high, Rubik evicts the offline service that occupies the most CPU resources. + +The offline service is identified by the annotation **volcano.sh/preemptable="true"/"false"**. + +```yaml +annotations: + volcano.sh/preemptable: true +``` + +**Prerequisites** + +Rubik depends on the PSI feature of cgroup v1. openEuler 22.03 LTS and later versions support the PSI interface of cgroup v1. +You can run the following command to check whether the PSI interface is enabled in the kernel: + +```bash +cat /proc/cmdline | grep "psi=1 psi_v1=1" +``` + +If no results are returned, add the boot parameter to the kernel cmdline: + +```bash +# View the kernel version. +uname -a +# View the boot file of the kernel. +ls /boot/linux openEuler 5.10.0-153.12.0.92.oe2203SP3.x86_64 +grubby --update-kernel="/boot/linux openEuler 5.10.0-153.12.0.92.oe2203SP3.x86_64" --args="psi=1 psi_v1=1" +# Reboot. +reboot +``` + +**Kernel interface** + +The interface exists in the cgroup of the container in the `/sys/fs/cgroup/cpuacct` directory, for example, `/sys/fs/cgroup/cpu,cpuacct/kubepods/burstable//`. The following items are involved: + +- **cpu.pressure** +- **memory.pressure** +- **io.pressure** + +### psi Configuration + +```json +"agent": { + "enabledFeatures": [ + "psi" + ] +} +"psi": { + "interval": 10, + "resource": [ + "cpu", + "memory", + "io" + ], + "avg10Threshold": 5.0 +} +``` + +For details, see [Configuration Description](./configuration.md#psi). diff --git a/docs/en/cloud/hybrid_deployment/rubik/figures/icon-note.gif b/docs/en/cloud/hybrid_deployment/rubik/figures/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..eebb838c275843dfaf5b402c550e64eb887c1035 Binary files /dev/null and b/docs/en/cloud/hybrid_deployment/rubik/figures/icon-note.gif differ diff --git a/docs/en/cloud/hybrid_deployment/rubik/figures/iocost.PNG b/docs/en/cloud/hybrid_deployment/rubik/figures/iocost.PNG new file mode 100644 index 0000000000000000000000000000000000000000..c3eae863ad15d79d7e36c44799fc4dc946e8ca26 Binary files /dev/null and b/docs/en/cloud/hybrid_deployment/rubik/figures/iocost.PNG differ diff --git a/docs/en/cloud/hybrid_deployment/rubik/installation_and_deployment.md b/docs/en/cloud/hybrid_deployment/rubik/installation_and_deployment.md new file mode 100644 index 0000000000000000000000000000000000000000..3a270d3a26108b714a1d615c69a6fdcfe6616f2f --- /dev/null +++ b/docs/en/cloud/hybrid_deployment/rubik/installation_and_deployment.md @@ -0,0 +1,153 @@ +# Installation and Deployment + +## Overview + +This chapter describes how to install and deploy the Rubik component. + +## Software and Hardware Requirements + +### Hardware + +* Architecture: x86 or AArch64 +* Drive: 1 GB or more +* Memory: 100 MB or more + +### Software + +* OS: openEuler 22.03-LTS-SP4 +* Kernel: openEuler 22.03-LTS-SP4 kernel + +### Environment Preparation + +* Install the openEuler OS. +* Install and deploy Kubernetes. +* Install the Docker or containerd container engine. + +## Installing Rubik + +Rubik is deployed on each Kubernetes node as a DaemonSet. Therefore, you need to perform the following steps to install the Rubik RPM package on each node. + +1. Configure the Yum repositories openEuler 22.03-LTS-SP4 and openEuler 22.03-LTS-SP4:EPOL (the Rubik component is available only in the EPOL repository). + + ```text + # openEuler 22.03-LTS-SP4 official repository + name=openEuler22.03-LTS-SP4-Epol + baseurl=https://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/$basearch/ + enabled=1 + gpgcheck=1 + gpgkey=https://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/$basearch/RPM-GPG-KEY-openEuler + ``` + + ```text + # openEuler 22.03-LTS-SP4:EPOL official repository + name=Epol + baseurl=https://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/$basearch/ + enabled=1 + gpgcheck=0 + ``` + +2. Install Rubik with **root** permissions. + + ```shell + sudo yum install -y rubik + ``` + +> ![](./figures/icon-note.gif)**Note**: +> +> Files related to Rubik are installed in the **/var/lib/rubik** directory. + +## Deploying Rubik + +Rubik runs as a container in a Kubernetes cluster in hybrid deployment scenarios. It is used to isolate and restrict resources for services with different priorities to prevent offline services from interfering with online services, improving the overall resource utilization and ensuring the quality of online services. Currently, Rubik supports isolation and restriction of CPU and memory resources, and must be used together with the openEuler 22.03-LTS-SP4 kernel. To enable or disable the memory priority feature (that is, memory tiering for services with different priorities), you need to set the value in the **/proc/sys/vm/memcg_qos_enable** file. The value can be **0** or **1**. The default value **0** indicates that the feature is disabled, and the value **1** indicates that the feature is enabled. + +```bash +sudo echo 1 > /proc/sys/vm/memcg_qos_enable +``` + +### Deploying Rubik DaemonSet + +1. Run the **/var/lib/rubik/build_rubik_image.sh** script to automatically build a Rubik image. Because the script uses the `docker build` command, make sure Docker is available. You can also use the Docker engine to build the Rubik image. Because Rubik is deployed as a DaemonSet, each node requires a Rubik image. After building an image on a node, use the **docker save** and **docker load** commands to load the Rubik image to each node of Kubernetes. Alternatively, build a Rubik image on each node. The following uses docker as an example. The command is as follows: + + ```sh + docker build -f /var/lib/rubik/Dockerfile -t rubik:2.0.0-1 . + ``` + +2. On the Kubernetes master node, change the Rubik image name in the **/var/lib/rubik/rubik-daemonset.yaml** file to the name of the image built in the previous step. + + ```yaml + ... + containers: + - name: rubik-agent + image: rubik_image_name_and_tag # The image name must be the same as the Rubik image name built in the previous step. + imagePullPolicy: IfNotPresent + ... + ``` + +3. On the Kubernetes master node, run the **kubectl** command to deploy the Rubik DaemonSet so that Rubik will be automatically deployed on all Kubernetes nodes. + + ```sh + kubectl apply -f /var/lib/rubik/rubik-daemonset.yaml + ``` + +4. Run the **kubectl get pods -A** command to check whether Rubik has been deployed on each node in the cluster. (The number of rubik-agents is the same as the number of nodes and all rubik-agents are in the Running status.) + + ```sh + $ kubectl get pods -A | grep rubik + NAMESPACE NAME READY STATUS RESTARTS AGE + ... + kube-system rubik-agent-76ft6 1/1 Running 0 4s + ... + ``` + +## Common Configuration Description + +The Rubik deployed using the preceding method is started with the default configurations. You can modify the Rubik configurations as required by modifying the **config.json** section in the **rubik-daemonset.yaml** file and then redeploy the Rubik DaemonSet. The following describes some common configurations. For other configurations, see [Rubik Configuration Description](./configuration.md). + +### Absolute Pod Preemption + +If absolute pod preemption is enabled, you only need to specify the priority using annotations in the YAML file when deploying the service pods. After being deployed successfully, Rubik automatically detects the creation and update of the pods on the current node, and sets the pod priorities based on the configured priorities. For pods that are already started or whose annotations are modified, Rubik automatically updates the pod priority configurations. + +```yaml +... + "agent": { + "enabledFeatures": [ + "preemption" + ] + }, + "preemption": { + "resource": [ + "cpu", + "memory" + ] + } +... +``` + +> Priority configurations support only pods switching from online to offline. + +## Configuring Rubik for Online and Offline Services + +After Rubik is successfully deployed, you can modify the YAML file of a service to specify the service type based on the following configuration example. Then Rubik can configure the priority of the service after it is deployed to isolate resources. + +The following is an example of deploying an online Nginx service: + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: nginx + namespace: qosexample + annotations: + volcano.sh/preemptable: "false" # If volcano.sh/preemptable is set to true, the service is an offline service. If it is set to false, the service is an online service. The default value is false. +spec: + containers: + - name: nginx + image: nginx + resources: + limits: + memory: "200Mi" + cpu: "1" + requests: + memory: "200Mi" + cpu: "1" +``` diff --git a/docs/en/cloud/hybrid_deployment/rubik/overview.md b/docs/en/cloud/hybrid_deployment/rubik/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..514ce2b780f1fef1d9f2544ee3d3beed2c5c62ec --- /dev/null +++ b/docs/en/cloud/hybrid_deployment/rubik/overview.md @@ -0,0 +1,25 @@ +# Rubik User Guide + +## Overview + +Low server resource utilization has always been a recognized challenge in the industry. With the development of cloud native technologies, hybrid deployment of online (high-priority) and offline (low-priority) services becomes an effective means to improve resource utilization. + +In hybrid service deployment scenarios, Rubik can properly schedule resources based on Quality if Service (QoS) levels to greatly improve resource utilization while ensuring the quality of online services. + +Rubik supports the following features: + +- [Absolute preemption](./feature_introduction.md#absolute-preemption) + - [CPU absolute preemption](./feature_introduction.md#cpu-absolute-preemption) + - [Memory absolute preemption](./feature_introduction.md#memory-absolute-preemption) +- [dynCache memory bandwidth and L3 cache access limit](./feature_introduction.md#dyncache-memory-bandwidth-and-l3-cache-access-limit) +- [dynMemory tiered memory reclamation](./feature_introduction.md#dynmemory-tiered-memory-reclamation) +- [Flexible bandwidth](./feature_introduction.md#flexible-bandwidth) + - [quotaBurst kernel-mode solution](./feature_introduction.md#quotaburst-kernel-mode-solution) + - [quotaTurbo user-mode solution](./feature_introduction.md#quotaturbo-user-mode-solution) +- [I/O weight control based on ioCost](feature_introduction.md#io-weight-control-based-on-iocost) +- [Interference detection based on pressure stall information metrics](./feature_introduction.md#interference-detection-based-on-pressure-stall-information-metrics) + +This document is intended for community developers, open source enthusiasts, and partners who use the openEuler system and want to learn and use Rubik. Users must: + +- Know basic Linux operations. +- Be familiar with basic operations of Kubernetes and Docker/iSulad. diff --git a/docs/en/cloud/image_builder/.DS_Store b/docs/en/cloud/image_builder/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/docs/en/cloud/image_builder/.DS_Store differ diff --git a/docs/en/cloud/image_builder/isula_build/_toc.yaml b/docs/en/cloud/image_builder/isula_build/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..de7e51cef18a0cf9f9ad8d863cbb7ce182429183 --- /dev/null +++ b/docs/en/cloud/image_builder/isula_build/_toc.yaml @@ -0,0 +1,10 @@ +label: Container Image Building +isManual: true +description: Quick container image creation using Dockerfiles +sections: + - label: Overview + href: ./overview.md + - label: User Guide + href: ./isula_build.md + - label: Appendix + href: ./isula_build_appendix.md diff --git a/docs/en/cloud/image_builder/isula_build/figures/isula-build_arch.png b/docs/en/cloud/image_builder/isula_build/figures/isula-build_arch.png new file mode 100644 index 0000000000000000000000000000000000000000..f92f15085820ce824bc2ca60ff7d6d25e95f1402 Binary files /dev/null and b/docs/en/cloud/image_builder/isula_build/figures/isula-build_arch.png differ diff --git a/docs/en/cloud/image_builder/isula_build/isula_build.md b/docs/en/cloud/image_builder/isula_build/isula_build.md new file mode 100644 index 0000000000000000000000000000000000000000..d511efab7b97b1e27f930b3a19623d533d67b210 --- /dev/null +++ b/docs/en/cloud/image_builder/isula_build/isula_build.md @@ -0,0 +1,1044 @@ +# Container Image Building + +## Overview + +isula-build is a container image build tool developed by the iSula container team. It allows you to quickly build container images using Dockerfiles. + +The isula-build uses the server/client mode. The isula-build functions as a client and provides a group of command line tools for image build and management. The isula-builder functions as the server to process client management requests, and runs as a daemon process in the background. + +![isula-build architecture](./figures/isula-build_arch.png) + +>[!NOTE] **Note:** +> +> - Currently, isula-build supports OCI image format ([OCI Image Format Specification](https://github.com/opencontainers/image-spec/blob/main/spec.md)) and Docker image format ([Image Manifest Version 2, Schema 2](https://docs.docker.com/registry/spec/manifest-v2-2/)). Use the `export ISULABUILD_CLI_EXPERIMENTAL=enabled` command to enable the experimental feature for supporting OCI image format. When the experimental feature is disabled, isula-build will take Docker image format as the default image format. Otherwise, isula-build will take OCI image format as the default image format. + +## Installation + +### Preparations + +To ensure that isula-build can be successfully installed, the following software and hardware requirements must be met: + +- Supported architectures: x86_64 and AArch64 +- Supported OS: openEuler +- You have the permissions of the root user. + +#### Installing isula-build + +Before using isula-build to build a container image, you need to install the following software packages: + +**(Recommended) Method 1: Using Yum** + +1. Configure the openEuler Yum source. + +2. Log in to the target server as the root user and install isula-build. + + ```sh + sudo yum install -y isula-build + ``` + +**Method 2: Using the RPM Package** + +1. Obtain an **isula-build-*.rpm** installation package from the openEuler Yum source, for example, **isula-build-0.9.6-4.oe1.x86_64.rpm**. + +2. Upload the obtained RPM software package to any directory on the target server, for example, **/home/**. + +3. Log in to the target server as the root user and run the following command to install isula-build: + + ```sh + sudo rpm -ivh /home/isula-build-*.rpm + ``` + +>[!NOTE] **Note:** +> +> - After the installation is complete, you need to manually start the isula-build service. For details about how to start the service, see [Managing the isula-build Service](#managing-the-isula-build-service). + +## Configuring and Managing the isula-build Service + +### Configuring the isula-build Service + +After the isula-build software package is installed, the systemd starts the isula-build service based on the default configuration contained in the isula-build software package on the isula-build server. If the default configuration file on the isula-build server cannot meet your requirements, perform the following operations to customize the configuration file: After the default configuration is modified, restart the isula-build server for the new configuration to take effect. For details, see [Managing the isula-build Service](#managing-the-isula-build-service). + +Currently, the isula-build server contains the following configuration file: + +- **/etc/isula-build/configuration.toml**: general isula-builder configuration file, which is used to set the isula-builder log level, persistency directory, runtime directory, and OCI runtime. Parameters in the configuration file are described as follows: + +| Configuration Item | Mandatory or Optional | Description | Value | +| --------- | -------- | --------------------------------- | ----------------------------------------------- | +| debug | Optional | Indicates whether to enable the debug log function. | **true**: Enables the debug log function. **false**: Disables the debug log function. | +| loglevel | Optional | Sets the log level. | debug
info
warn
error | +| run_root | Mandatory | Sets the root directory of runtime data. | For example, **/var/run/isula-build/** | +| data_root | Mandatory | Sets the local persistency directory. | For example, **/var/lib/isula-build/** | +| runtime | Optional | Sets the runtime type. Currently, only **runc** is supported. | runc | +| group | Optional | Sets the owner group for the local socket file **isula_build.sock** so that non-privileged users in the group can use isula-build. | isula | +| experimental | Optional | Indicates whether to enable experimental features. | **true**: Enables experimental features. **false**: Disables experimental features. | + +- **/etc/isula-build/storage.toml**: configuration file for local persistent storage, including the configuration of the storage driver in use. + +| Configuration Item | Mandatory or Optional | Description | +| ------ | -------- | ------------------------------ | +| driver | Optional | Storage driver type. Currently, **overlay2** is supported. | + + For more settings, see [containers-storage.conf.5](https://github.com/containers/storage/blob/main/docs/containers-storage.conf.5.md). + +- **/etc/isula-build/registries.toml**: configuration file for each image repository. + +| Configuration Item | Mandatory or Optional | Description | +| ------------------- | -------- | ------------------------------------------------------------ | +| registries.search | Optional | Search domain of the image repository. Only listed image repositories can be found. | +| registries.insecure | Optional | Accessible insecure image repositories. Listed image repositories cannot pass the authentication and are not recommended. | + + For more settings, see [containers-registries.conf.5](https://github.com/containers/image/blob/main/docs/containers-registries.conf.5.md). + +- **/etc/isula-build/policy.json**: image pull/push policy file. Note: Currently, this parameter cannot be configured. + +>[!NOTE] **Note:** +> +> - isula-build supports the preceding configuration file with the maximum size of 1 MB. +> - The persistent working directory dataroot cannot be configured on the memory disk, for example, tmpfs. +> - Currently, only overlay2 can be used as the underlying storage driver. +> - Before setting the `--group` option, ensure that the corresponding user group has been created on a local OS and non-privileged users have been added to the group. After isula-builder is restarted, non-privileged users in the group can use the isula-build function. In addition, to ensure permission consistency, the owner group of the isula-build configuration file directory **/etc/isula-build** is set to the group specified by `--group`. + +### Managing the isula-build Service + +Currently, openEuler uses systemd to manage the isula-build service. The isula-build software package contains the systemd service files. After installing the isula-build software package, you can use the systemd tool to start or stop the isula-build service. You can also manually start the isula-build software. + +>[!NOTE] **Note:** +> +> - Only one isula-build process can be started on a node at a time. + +#### (Recommended) Using systemd for Management + +You can run the following systemd commands to start, stop, and restart the isula-build service: + +- Run the following command to start the isula-build service: + + ```sh + sudo systemctl start isula-build.service + ``` + +- Run the following command to stop the isula-build service: + + ```sh + sudo systemctl stop isula-build.service + ``` + +- Run the following command to restart the isula-build service: + + ```sh + sudo systemctl restart isula-build.service + ``` + +The systemd service file of the isula-build software installation package is stored in the `/usr/lib/systemd/system/isula-build.service` directory. If you need to modify the systemd configuration of the isula-build service, modify the file and run the following command to make the modification take effect. Then restart the isula-build service based on the systemd management command. + +```sh +sudo systemctl daemon-reload +``` + +#### Directly Running isula-builder + +You can also run the `isula-builder` command on the server to start the service. The `isula-builder` command can contain flags for service startup. The following flags are supported: + +- `-D, --debug`: whether to enable the debugging mode. +- `--log-level`: log level. The options are **debug**, **info**, **warn**, and **error**. The default value is **info**. +- `--dataroot`: local persistency directory. The default value is **/var/lib/isula-build/**. +- `--runroot`: runtime directory. The default value is **/var/run/isula-build/**. +- `--storage-driver`: underlying storage driver type. +- `--storage-opt`: underlying storage driver configuration. +- `--group`: sets the owner group for the local socket file **isula_build.sock** so that non-privileged users in the group can use isula-build. The default owner group is **isula**. +- `--experimental`: whether to enable experimental features. + +>[!NOTE] **Note:** +> +> If the command line parameters contain the same configuration items as those in the configuration file, the command line parameters are preferentially used for startup. + +Start the isula-build service. For example, to specify the local persistency directory **/var/lib/isula-build** and disable debugging, run the following command: + +```sh +sudo isula-builder --dataroot "/var/lib/isula-build" --debug=false +``` + +## Usage Guidelines + +### Prerequisites + +isula-build depends on the executable file **runc** to build the **RUN** instruction in the Dockerfile. Therefore, runc must be pre-installed in the running environment of isula-build. The installation method depends on the application scenario. If you do not need to use the complete docker-engine tool chain, you can install only the docker-runc RPM package. + +```sh +sudo yum install -y docker-runc +``` + +If you need to use a complete docker-engine tool chain, install the docker-engine RPM package, which contains the executable file **runc** by default. + +```sh +sudo yum install -y docker-engine +``` + +>[!NOTE] **Note:** +> +> Ensure the security of OCI runtime (runc) executable files to prevent malicious replacement. + +### Overview + +The isula-build client provides a series of commands for building and managing container images. Currently, the isula-build client provides the following commands: + +- `ctr-img`: manages container images. The `ctr-img` command contains the following subcommands: + - `build`: builds a container image based on the specified Dockerfile. + - `images`: lists local container images. + - `import`: imports a basic container image. + - `load`: imports a cascade image. + - `rm`: deletes a local container image. + - `save`: exports a cascade image to a local disk. + - `tag`: adds a tag to a local container image. + - `pull`: pulls an image to a local host. + - `push`: pushes a local image to a remote repository. +- `info`: displays the running environment and system information of isula-build. +- `login`: logs in to the remote container image repository. +- `logout`: logs out of the remote container image repository. +- `version`: displays the versions of isula-build and isula-builder. +- `manifest` (experimental): manages the manifest list. + +>[!NOTE] **Note:** +> +> - The `isula-build completion` and `isula-builder completion` commands are used to generate the bash command completion script. These commands are implicitly provided by the command line framework and is not displayed in the help information. +> - isula-build client does not have any configuration file. To use isula-build experimental features, enable the environment variable **ISULABUILD_CLI_EXPERIMENTAL** on the client using the `export ISULABUILD_CLI_EXPERIMENTAL=enabled` command. + +The following describes how to use these commands in detail. + +### ctr-img: Container Image Management + +The isula-build command groups all container image management commands into the `ctr-img` command. The command format is as follows: + +```sh +isula-build ctr-img [command] +``` + +#### build: Container Image Build + +The subcommand build of the `ctr-img` command is used to build container images. The command format is as follows: + +```sh +isula-build ctr-img build [flags] +``` + +The `build` command contains the following flags: + +- `--build-arg`: string list containing variables required during the build process. +- `--build-static`: key value, which is used to build binary equivalence. Currently, the following key values are included: + `- build-time`: string indicating that a container image is built at a specified timestamp. The timestamp format is *YYYY-MM-DD HH-MM-SS*. +- `-f, --filename`: string indicating the path of the Dockerfiles. If this parameter is not specified, the current path is used. +- `--format`: string indicating the image format **oci** or **docker** (**ISULABUILD_CLI_EXPERIMENTAL** needs to be enabled). +- `--iidfile`: string indicating a local file to which the ID of the image is output. +- `-o, --output`: string indicating the image export mode and path. +- `--proxy`: boolean, which inherits the proxy environment variable on the host. The default value is **true**. +- `--tag`: string indicating the tag value of the image that is successfully built. +- `--cap-add`: string list containing permissions required by the **RUN** instruction during the build process. + +**The following describes the flags in detail.** + +**\--build-arg** + +Parameters in the Dockerfile are inherited from the commands. The usage is as follows: + +```sh +$ echo "This is bar file" > bar.txt +$ cat Dockerfile_arg +FROM busybox +ARG foo +ADD ${foo}.txt . +RUN cat ${foo}.txt +$ sudo isula-build ctr-img build --build-arg foo=bar -f Dockerfile_arg +STEP 1: FROM busybox +Getting image source signatures +Copying blob sha256:8f52abd3da461b2c0c11fda7a1b53413f1a92320eb96525ddf92c0b5cde781ad +Copying config sha256:e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b +Writing manifest to image destination +Storing signatures +STEP 2: ARG foo +STEP 3: ADD ${foo}.txt . +STEP 4: RUN cat ${foo}.txt +This is bar file +Getting image source signatures +Copying blob sha256:6194458b07fcf01f1483d96cd6c34302ffff7f382bb151a6d023c4e80ba3050a +Copying blob sha256:6bb56e4a46f563b20542171b998cb4556af4745efc9516820eabee7a08b7b869 +Copying config sha256:39b62a3342eed40b41a1bcd9cd455d77466550dfa0f0109af7a708c3e895f9a2 +Writing manifest to image destination +Storing signatures +Build success with image id: 39b62a3342eed40b41a1bcd9cd455d77466550dfa0f0109af7a708c3e895f9a2 +``` + +**\--build-static** + +Specifies a static build. That is, when isula-build is used to build a container image, differences between all timestamps and other build factors (such as the container ID and hostname) are eliminated. Finally, a container image that meets the static requirements is built. + +When isula-build is used to build a container image, assume that a fixed timestamp is given to the build subcommand and the following conditions are met: + +- The build environment is consistent before and after the upgrade. +- The Dockerfile is consistent before and after the build. +- The intermediate data generated before and after the build is consistent. +- The build commands are the same. +- The versions of the third-party libraries are the same. + +For container image build, isula-build supports the same Dockerfile. If the build environments are the same, the image content and image ID generated in multiple builds are the same. + +`--build-static` supports the key-value pair option in the *key=value* format. Currently, the following options are supported: + +- build-time: string, which indicates the fixed timestamp for creating a static image. The value is in the format of *YYYY-MM-DD HH-MM-SS*. The timestamp affects the attribute of the file for creating and modifying the time at the diff layer. + + Example: + + ```sh + sudo isula-build ctr-img build -f Dockerfile --build-static='build-time=2020-05-23 10:55:33' . + ``` + + In this way, the container images and image IDs built in the same environment for multiple times are the same. + +**\--format** + +This option can be used when the experiment feature is enabled. The default image format is **oci**. You can specify the image format to build. For example, the following commands are used to build an OCI image and a Docker image, respectively. + + ```sh + export ISULABUILD_CLI_EXPERIMENTAL=enabled; sudo isula-build ctr-img build -f Dockerfile --format oci . + ``` + + ```sh + export ISULABUILD_CLI_EXPERIMENTAL=enabled; sudo isula-build ctr-img build -f Dockerfile --format docker . + ``` + +**\--iidfile** + +Run the following command to output the ID of the built image to a file: + +```sh +isula-build ctr-img build --iidfile filename +``` + +For example, to export the container image ID to the **testfile** file, run the following command: + + ```sh +sudo isula-build ctr-img build -f Dockerfile_arg --iidfile testfile + ``` + + Check the container image ID in the **testfile** file. + + ```sh +$ cat testfile +76cbeed38a8e716e22b68988a76410eaf83327963c3b29ff648296d5cd15ce7b + ``` + +**\-o, --output** + +Currently, `-o` and `--output` support the following formats: + +- `isulad:image:tag`: directly pushes the image that is successfully built to iSulad, for example, `-o isulad:busybox:latest`. The following restrictions apply: + + - isula-build and iSulad must be on the same node. + - The tag must be configured. + - On the isula-build client, you need to temporarily save the successfully built image as **/var/tmp/isula-build-tmp-%v.tar** and then import it to iSulad. Ensure that the **/var/tmp/** directory has sufficient disk space. + +- `docker-daemon:image:tag`: directly pushes the successfully built image to Docker daemon, for example, `-o docker-daemon:busybox:latest`. The following restrictions apply: +- isula-build and Docker must be on the same node. + - The tag must be configured. + +- `docker://registry.example.com/repository:tag`: directly pushes the successfully built image to the remote image repository in Docker image format, for example, `-o docker://localhost:5000/library/busybox:latest`. + +- `docker-archive:/:image:tag`: saves the successfully built image to the local host in Docker image format, for example, `-o docker-archive:/root/image.tar:busybox:latest`. + +When experiment feature is enabled, you can build image in OCI image format with: + +- `oci://registry.example.com/repository:tag`: directly pushes the successfully built image to the remote image repository in OCI image format(OCI image format should be supported by the remote repository), for example, `-o oci://localhost:5000/library/busybox:latest`. + +- `oci-archive:/:image:tag`: saves the successfully built image to the local host in OCI image format, for example, `-o oci-archive:/root/image.tar:busybox:latest`. + +In addition to the flags, the `build` subcommand also supports an argument whose type is string and meaning is context, that is, the context of the Dockerfile build environment. The default value of this parameter is the current path where isula-build is executed. This path affects the path retrieved by the **ADD** and **COPY** instructions of the .dockerignore file and Dockerfile. + +**\--proxy** + +Specifies whether the container started by the **RUN** instruction inherits the proxy-related environment variables **http_proxy**, **https_proxy**, **ftp_proxy**, **no_proxy**, **HTTP_PROXY**, **HTTPS_PROXY**, and **FTP_PROXY**. The default value is **true**. + +When a user configures proxy-related **ARG** or **ENV** in the Dockerfile, the inherited environment variables will be overwritten. + +>[!NOTE] **Note:** +> +> - If the client and daemon are running on different terminals, the environment variables of the terminal where the daemon is running are inherited. + +**\--tag** + +Specifies the tag of the image stored on the local disk after the image is successfully built. + +**\--cap-add** + +Run the following command to add the permission required by the **RUN** instruction during the build process: + +```sh +isula-build ctr-img build --cap-add ${CAP} +``` + +Example: + +```sh +sudo isula-build ctr-img build --cap-add CAP_SYS_ADMIN --cap-add CAP_SYS_PTRACE -f Dockerfile +``` + +> **Note:** +> +> - A maximum of 100 container images can be concurrently built. +> - isula-build supports Dockerfiles with a maximum size of 1 MB. +> - isula-build supports a .dockerignore file with a maximum size of 1 MB. +> - Ensure that only the current user has the read and write permissions on the Dockerfiles to prevent other users from tampering with the files. +> - During the build, the **RUN** instruction starts the container to build in the container. Currently, isula-build supports the host network only. +> - isula-build only supports the tar compression format. +> - isula-build commits once after each image build stage is complete, instead of each time a Dockerfile line is executed. +> - isula-build does not support cache build. +> - isula-build starts the build container only when the **RUN** instruction is built. +> - Currently, the history function of Docker images is not supported. +> - The stage name can start with a digit. +> - The stage name can contain a maximum of 64 characters. +> - isula-build does not support resource restriction on a single Dockerfile build. If resource restriction is required, you can configure a resource limit on isula-builder. +> - Currently, isula-build does not support a remote URL as the data source of the **ADD** instruction in the Dockerfile. +> - The local tar package exported using the **docker-archive** and **oci-archive** types are not compressed, you can manually compress the file as required. + +#### image: Viewing Local Persistent Build Images + +You can run the `images` command to view the images in the local persistent storage. + +```sh +$ sudo isula-build ctr-img images +--------------------------------------- ----------- ----------------- ------------------------ ------------ +REPOSITORY TAG IMAGE ID CREATED SIZE +--------------------------------------- ----------- ----------------- ------------------------ ------------ +localhost:5000/library/alpine latest a24bb4013296 2022-01-17 10:02:19 5.85 MB + 39b62a3342ee 2022-01-17 10:01:12 1.45 MB +--------------------------------------- ----------- ----------------- ------------------------ ------------ +``` + +>[!NOTE] **Note:** +> +> - The image size displayed by running the `isula-build ctr-img images` command may be different from that displayed by running the `docker images` command. When calculating the image size, `isula-build` directly calculates the total size of .tar packages at each layer, while `docker` calculates the total size of files by decompressing the .tar packages and traversing the diff directory. Therefore, the statistics are different. + +#### import: Importing a Basic Container Image + +A tar file in rootfs form can be imported into isula-build via the `ctr-img import` command. + +The command format is as follows: + +```sh +isula-build ctr-img import [flags] +``` + +Example: + +```sh +$ sudo isula-build ctr-img import busybox.tar mybusybox:latest +Getting image source signatures +Copying blob sha256:7b8667757578df68ec57bfc9fb7754801ec87df7de389a24a26a7bf2ebc04d8d +Copying config sha256:173b3cf612f8e1dc34e78772fcf190559533a3b04743287a32d549e3c7d1c1d1 +Writing manifest to image destination +Storing signatures +Import success with image id: "173b3cf612f8e1dc34e78772fcf190559533a3b04743287a32d549e3c7d1c1d1" +$ sudo isula-build ctr-img images +--------------------------------------- ----------- ----------------- ------------------------ ------------ +REPOSITORY TAG IMAGE ID CREATED SIZE +--------------------------------------- ----------- ----------------- ------------------------ ------------ +mybusybox latest 173b3cf612f8 2022-01-12 16:02:31 1.47 MB +--------------------------------------- ----------- ----------------- ------------------------ ------------ +``` + +>[!NOTE] **Note** +> +> - isula-build supports the import of container basic images with a maximum size of 1 GB. + +#### load: Importing Cascade Images + +Cascade images are images that are saved to the local computer by running the `docker save` or `isula-build ctr-img save` command. The compressed image package contains a layer-by-layer image package named **layer.tar**. You can run the `ctr-img load` command to import the image to isula-build. + +The command format is as follows: + +```sh +isula-build ctr-img load [flags] +``` + +Currently, the following flags are supported: + +- `-i, --input`: path of the local .tar package. + +Example: + +```sh +$ sudo isula-build ctr-img load -i ubuntu.tar +Getting image source signatures +Copying blob sha256:cf612f747e0fbcc1674f88712b7bc1cd8b91cf0be8f9e9771235169f139d507c +Copying blob sha256:f934e33a54a60630267df295a5c232ceb15b2938ebb0476364192b1537449093 +Copying blob sha256:943edb549a8300092a714190dfe633341c0ffb483784c4fdfe884b9019f6a0b4 +Copying blob sha256:e7ebc6e16708285bee3917ae12bf8d172ee0d7684a7830751ab9a1c070e7a125 +Copying blob sha256:bf6751561805be7d07d66f6acb2a33e99cf0cc0a20f5fd5d94a3c7f8ae55c2a1 +Copying blob sha256:c1bd37d01c89de343d68867518b1155cb297d8e03942066ecb44ae8f46b608a3 +Copying blob sha256:a84e57b779297b72428fc7308e63d13b4df99140f78565be92fc9dbe03fc6e69 +Copying blob sha256:14dd68f4c7e23d6a2363c2320747ab88986dfd43ba0489d139eeac3ac75323b2 +Copying blob sha256:a2092d776649ea2301f60265f378a02405539a2a68093b2612792cc65d00d161 +Copying blob sha256:879119e879f682c04d0784c9ae7bc6f421e206b95d20b32ce1cb8a49bfdef202 +Copying blob sha256:e615448af51b848ecec00caeaffd1e30e8bf5cffd464747d159f80e346b7a150 +Copying blob sha256:f610bd1e9ac6aa9326d61713d552eeefef47d2bd49fc16140aa9bf3db38c30a4 +Copying blob sha256:bfe0a1336d031bf5ff3ce381e354be7b2bf310574cc0cd1949ad94dda020cd27 +Copying blob sha256:f0f15db85788c1260c6aa8ad225823f45c89700781c4c793361ac5fa58d204c7 +Copying config sha256:c07ddb44daa97e9e8d2d68316b296cc9343ab5f3d2babc5e6e03b80cd580478e +Writing manifest to image destination +Storing signatures +Loaded image as c07ddb44daa97e9e8d2d68316b296cc9343ab5f3d2babc5e6e03b80cd580478e +``` + +>[!NOTE] **Note:** +> +> - isula-build allows you to import a container image with a maximum size of 50 GB. +> - isula-build automatically recognizes the image format and loads it from the cascade image file. + +#### rm: Deleting a Local Persistent Image + +You can run the `rm` command to delete an image from the local persistent storage. The command format is as follows: + +```sh +isula-build ctr-img rm IMAGE [IMAGE...] [FLAGS] +``` + +Currently, the following flags are supported: + +- `-a, --all`: deletes all images stored locally. +- `-p, --prune`: deletes all images that are stored locally and do not have tags. + +Example: + +```sh +$ sudo isula-build ctr-img rm -p +Deleted: sha256:78731c1dde25361f539555edaf8f0b24132085b7cab6ecb90de63d72fa00c01d +Deleted: sha256:eeba1bfe9fca569a894d525ed291bdaef389d28a88c288914c1a9db7261ad12c +``` + +#### save: Exporting Cascade Images + +You can run the `save` command to export the cascade images to the local disk. The command format is as follows: + +```sh +isula-build ctr-img save [REPOSITORY:TAG]|imageID -o xx.tar +``` + +Currently, the following flags are supported: + +- `-f, --format`: which indicates the exported image format: **oci** or **docker** (**ISULABUILD_CLI_EXPERIMENTAL** needs to be enabled) +- `-o, --output`: which indicates the local path for storing the exported images. + +The following example shows how to export an image using *image/tag*: + +```sh +$ sudo isula-build ctr-img save busybox:latest -o busybox.tar +Getting image source signatures +Copying blob sha256:50644c29ef5a27c9a40c393a73ece2479de78325cae7d762ef3cdc19bf42dd0a +Copying blob sha256:824082a6864774d5527bda0d3c7ebd5ddc349daadf2aa8f5f305b7a2e439806f +Copying blob sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef +Copying config sha256:21c3e96ac411242a0e876af269c0cbe9d071626bdfb7cc79bfa2ddb9f7a82db6 +Writing manifest to image destination +Storing signatures +Save success with image: busybox:latest +``` + +The following example shows how to export an image using *ImageID*: + +```sh +$ sudo isula-build ctr-img save 21c3e96ac411 -o busybox.tar +Getting image source signatures +Copying blob sha256:50644c29ef5a27c9a40c393a73ece2479de78325cae7d762ef3cdc19bf42dd0a +Copying blob sha256:824082a6864774d5527bda0d3c7ebd5ddc349daadf2aa8f5f305b7a2e439806f +Copying blob sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef +Copying config sha256:21c3e96ac411242a0e876af269c0cbe9d071626bdfb7cc79bfa2ddb9f7a82db6 +Writing manifest to image destination +Storing signatures +Save success with image: 21c3e96ac411 +``` + +The following example shows how to export multiple images to the same tarball: + +```sh +$ sudo isula-build ctr-img save busybox:latest nginx:latest -o all.tar +Getting image source signatures +Copying blob sha256:eb78099fbf7fdc70c65f286f4edc6659fcda510b3d1cfe1caa6452cc671427bf +Copying blob sha256:29f11c413898c5aad8ed89ad5446e89e439e8cfa217cbb404ef2dbd6e1e8d6a5 +Copying blob sha256:af5bd3938f60ece203cd76358d8bde91968e56491daf3030f6415f103de26820 +Copying config sha256:b8efb18f159bd948486f18bd8940b56fd2298b438229f5bd2bcf4cedcf037448 +Writing manifest to image destination +Storing signatures +Getting image source signatures +Copying blob sha256:e2d6930974a28887b15367769d9666116027c411b7e6c4025f7c850df1e45038 +Copying config sha256:a33de3c85292c9e65681c2e19b8298d12087749b71a504a23c576090891eedd6 +Writing manifest to image destination +Storing signatures +Save success with image: [busybox:latest nginx:latest] +``` + +>[!NOTE] **NOTE:** +> +>- Save exports an image in .tar format by default. If necessary, you can save the image and then manually compress it. +>- When exporting an image using image name, specify the entire image name in the *REPOSITORY:TAG* format. + +#### tag: Tagging Local Persistent Images + +You can run the `tag` command to add a tag to a local persistent container image. The command format is as follows: + +```sh +isula-build ctr-img tag / busybox:latest +``` + +Example: + +```sh +$ sudo isula-build ctr-img images +--------------------------------------- ----------- ----------------- -------------------------- ------------ +REPOSITORY TAG IMAGE ID CREATED SIZE +--------------------------------------- ----------- ----------------- -------------------------- ------------ +alpine latest a24bb4013296 2020-05-29 21:19:46 5.85 MB +--------------------------------------- ----------- ----------------- -------------------------- ------------ +$ sudo isula-build ctr-img tag a24bb4013296 alpine:v1 +$ sudo isula-build ctr-img images +--------------------------------------- ----------- ----------------- ------------------------ ------------ +REPOSITORY TAG IMAGE ID CREATED SIZE +--------------------------------------- ----------- ----------------- ------------------------ ------------ +alpine latest a24bb4013296 2020-05-29 21:19:46 5.85 MB +alpine v1 a24bb4013296 2020-05-29 21:19:46 5.85 MB +--------------------------------------- ----------- ----------------- ------------------------ ------------ +``` + +#### pull: Pulling an Image To a Local Host + +Run the `pull` command to pull an image from a remote image repository to a local host. Command format: + +```sh +isula-build ctr-img pull REPOSITORY[:TAG] +``` + +Example: + +```sh +$ sudo isula-build ctr-img pull example-registry/library/alpine:latest +Getting image source signatures +Copying blob sha256:8f52abd3da461b2c0c11fda7a1b53413f1a92320eb96525ddf92c0b5cde781ad +Copying config sha256:e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b +Writing manifest to image destination +Storing signatures +Pull success with image: example-registry/library/alpine:latest +``` + +#### push: Pushing a Local Image to a Remote Repository + +Run the `push` command to push a local image to a remote repository. Command format: + +```sh +isula-build ctr-img push REPOSITORY[:TAG] +``` + +Currently, the following flags are supported: + +- `-f, --format`: indicates the pushed image format **oci** or **docker** (**ISULABUILD_CLI_EXPERIMENTAL** needs to be enabled) + +Example: + +```sh +$ sudo isula-build ctr-img push example-registry/library/mybusybox:latest +Getting image source signatures +Copying blob sha256:d2421964bad195c959ba147ad21626ccddc73a4f2638664ad1c07bd9df48a675 +Copying config sha256:f0b02e9d092d905d0d87a8455a1ae3e9bb47b4aa3dc125125ca5cd10d6441c9f +Writing manifest to image destination +Storing signatures +Push success with image: example-registry/library/mybusybox:latest +``` + +>[!NOTE] **NOTE:** +> +> Before pushing an image, log in to the corresponding image repository. + +### info: Viewing the Operating Environment and System Information + +You can run the `isula-build info` command to view the running environment and system information of isula-build. The command format is as follows: + +```sh + isula-build info [flags] +``` + +The following flags are supported: + +- `-H, --human-readable`: Boolean. The memory information is printed in the common memory format. The value is 1000 power. +- `-V, --verbose`: Boolean. The memory usage is displayed during system running. + +Example: + +```sh +$ sudo isula-build info -H + General: + MemTotal: 7.63 GB + MemFree: 757 MB + SwapTotal: 8.3 GB + SwapFree: 8.25 GB + OCI Runtime: runc + DataRoot: /var/lib/isula-build/ + RunRoot: /var/run/isula-build/ + Builders: 0 + Goroutines: 12 + Store: + Storage Driver: overlay + Backing Filesystem: extfs + Registry: + Search Registries: + oepkgs.net + Insecure Registries: + localhost:5000 + oepkgs.net + Runtime: + MemSys: 68.4 MB + HeapSys: 63.3 MB + HeapAlloc: 7.41 MB + MemHeapInUse: 8.98 MB + MemHeapIdle: 54.4 MB + MemHeapReleased: 52.1 MB +``` + +### login: Logging In to the Remote Image Repository + +You can run the `login` command to log in to the remote image repository. The command format is as follows: + +```sh +isula-build login SERVER [FLAGS] +``` + +Currently, the following flags are supported: + +```text +Flags: + -p, --password-stdin Read password from stdin + -u, --username string Username to access registry +``` + +Enter the password through the standard input. In the following example, the password in **creds.txt** is transferred to the standard input of isula-build through a pipe for input. + +```sh + $ cat creds.txt | sudo isula-build login -u cooper -p mydockerhub.io + Login Succeeded +``` + +Enter the password in interactive mode. + +```sh + $ sudo isula-build login mydockerhub.io -u cooper + Password: + Login Succeeded +``` + +### logout: Logging Out of the Remote Image Repository + +You can run the `logout` command to log out of the remote image repository. The command format is as follows: + +```sh +isula-build logout [SERVER] [FLAGS] +``` + +Currently, the following flags are supported: + +```text +Flags: + -a, --all Logout all registries +``` + +Example: + +```sh + $ sudo isula-build logout -a + Removed authentications +``` + +### version: Querying the isula-build Version + +You can run the `version` command to view the current version information. + +```sh +$ sudo isula-build version +Client: + Version: 0.9.6-18 + Go Version: go1.17.3 + Git Commit: 37aa419 + Built: Mon Jun 26 15:32:55 2023 + OS/Arch: linux/arm64 + +Server: + Version: 0.9.6-18 + Go Version: go1.17.3 + Git Commit: 37aa419 + Built: Mon Jun 26 15:32:55 2023 + OS/Arch: linux/arm64 +``` + +### manifest: Manifest List Management + +The manifest list contains the image information corresponding to different system architectures. You can use the same manifest (for example, **openeuler:latest**) in different architectures to obtain the image of the corresponding architecture. The manifest contains the create, annotate, inspect, and push subcommands. + +>[!NOTE] **NOTE:** +> +> manifest is an experiment feature. When using this feature, you need to enable the experiment options on the client and server. For details, see Client Overview and Configuring Services. + +#### create: Manifest List Creation + +The create subcommand of the `manifest` command is used to create a manifest list. The command format is as follows: + +```sh +isula-build manifest create MANIFEST_LIST MANIFEST [MANIFEST...] +``` + +You can specify the name of the manifest list and the remote images to be added to the list. If no remote image is specified, an empty manifest list is created. + +Example: + +```sh +sudo isula-build manifest create openeuler localhost:5000/openeuler_x86:latest localhost:5000/openeuler_aarch64:latest +``` + +#### annotate: Manifest List Update + +The `annotate` subcommand of the `manifest` command is used to update the manifest list. The command format is as follows: + +```sh +isula-build manifest annotate MANIFEST_LIST MANIFEST [flags] +``` + +You can specify the manifest list to be updated and the images in the manifest list, and use flags to specify the options to be updated. This command can also be used to add new images to the manifest list. + +Currently, the following flags are supported: + +- --arch: Applicable architecture of the rewritten image. The value is a string. +- --os: Indicates the applicable system of the image. The value is a string. +- --os-features: Specifies the OS features required by the image. This parameter is a string and rarely used. +- --variant: Variable of the image recorded in the list. The value is a string. + +Example: + +```sh +sudo isula-build manifest annotate --os linux --arch arm64 openeuler:latest localhost:5000/openeuler_aarch64:latest +``` + +#### inspect: Manifest List Inspect + +The `inspect` subcommand of the `manifest` command is used to query the manifest list. The command format is as follows: + +```sh +isula-build manifest inspect MANIFEST_LIST +``` + +Example: + +```sh +$ sudo isula-build manifest inspect openeuler:latest +{ + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "size": 527, + "digest": "sha256:bf510723d2cd2d4e3f5ce7e93bf1e52c8fd76831995ac3bd3f90ecc866643aff", + "platform": { + "architecture": "amd64", + "os": "linux" + } + }, + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "size": 527, + "digest": "sha256:f814888b4bb6149bd39ba8375a1932fb15071b4dbffc7f76c7b602b06abbb820", + "platform": { + "architecture": "arm64", + "os": "linux" + } + } + ] +} +``` + +#### push: Manifest List Push to the Remote Repository + +The manifest subcommand `push` is used to push the manifest list to the remote repository. The command format is as follows: + +```sh +isula-build manifest push MANIFEST_LIST DESTINATION +``` + +Example: + +```sh +sudo isula-build manifest push openeuler:latest localhost:5000/openeuler:latest +``` + +## Directly Integrating a Container Engine + +isula-build can be integrated with iSulad or Docker to import the built container image to the local storage of the container engine. + +### Integration with iSulad + +Images that are successfully built can be directly exported to the iSulad. + +Example: + +```sh +sudo isula-build ctr-img build -f Dockerfile -o isulad:busybox:2.0 +``` + +Specify iSulad in the -o parameter to export the built container image to iSulad. You can query the image using isula images. + +```sh +$ sudo isula images +isula images +REPOSITORY TAG IMAGE ID CREATED SIZE +busybox 2.0 2d414a5cad6d 2020-08-01 06:41:36 5.577 MB +``` + +>[!NOTE] **Note:** +> +> - It is required that isula-build and iSulad be on the same node. +> - When an image is directly exported to the iSulad, the isula-build client needs to temporarily store the successfully built image as `/var/lib/isula-build/tmp/[buildid]/isula-build-tmp-%v.tar` and then import it to the iSulad. Ensure that the /var/tmp/ directory has sufficient disk space. If the isula-build client process is killed or Ctrl+C is pressed during the export, you need to manually clear the `/var/lib/isula-build/tmp/[buildid]/isula-build-tmp-%v.tar` file. + +### Integration with Docker + +Images that are successfully built can be directly exported to the Docker daemon. + +Example: + +```sh +sudo isula-build ctr-img build -f Dockerfile -o docker-daemon:busybox:2.0 +``` + +Specify docker-daemon in the -o parameter to export the built container image to Docker. You can run the `docker images` command to query the image. + +```sh +$ sudo docker images +REPOSITORY TAG IMAGE ID CREATED SIZE +busybox 2.0 2d414a5cad6d 2 months ago 5.22MB +``` + +>[!NOTE] **Note:** +> +> isula-build and Docker must be on the same node. + +## Precautions + +This chapter is something about constraints, limitations and differences with `docker build` when you use isula-builder to build images. + +### Constraints or Limitations + +1. When export an image to iSulad, a tag is necessary. +2. Because the OCI runtime, for example, **runc**, will be called by isula-builder when executing the **RUN** instruction, the integrity of the runtime binary should be guaranteed by the user. +3. DataRoot should not be set to **tmpfs**. +4. **Overlay2** is the only storage driver supported by isula-builder currently. +5. Docker image is the only image format supported by isula-builder currently. +6. You are advised to set file permission of the Dockerfile to **0600** to avoid tampering by other users. +7. Only host network is supported by the **RUN** instruction currently. +8. When export image to a tar package, only tar compression format is supported by isula-builder currently. +9. The base image size is limited to 1 GB when importing a base image using `import`. + +### Differences with `docker build` + +The `isula-build` complies with [Dockerfile specification](https://docs.docker.com/engine/reference/builder/), but there are also some subtle differences between `isula-builder` and `docker build` as follows: + +1. isula-builder commits after each build stage, but not every line. +2. Build cache is not supported by isula-builder. +3. Only **RUN** instruction will be executed in the build container. +4. Build history is not supported currently. +5. Stage name can be start with a number. +6. The length of the stage name is limited to 64 in `isula-builder`. +7. **ADD** instruction source can not be a remote URL currently. +8. Resource restriction on a single build is not supported. If resource restriction is required, you can configure a resource limit on isula-builder. +9. `isula-builder` add each origin layer tar size to get the image size, but docker only uses the diff content of each layer. So the image size listed by `isula-builder images` is different. +10. Image name should be in the *NAME:TAG* format. For example **busybox:latest**, where **latest** must not be omitted. + +## Appendix + +### Command Line Parameters + +**Table 1** Parameters of the `ctr-img build` command + +| **Command** | **Parameter** | **Description** | +| ------------- | -------------- | ------------------------------------------------------------ | +| ctr-img build | --build-arg | String list, which contains variables required during the build. | +| | --build-static | Key value, which is used to build binary equivalence. Currently, the following key values are included: - build-time: string, which indicates that a fixed timestamp is used to build a container image. The timestamp format is YYYY-MM-DD HH-MM-SS. | +| | -f, --filename | String, which indicates the path of the Dockerfiles. If this parameter is not specified, the current path is used. | +| | --format | String, which indicates the image format **oci** or **docker** (**ISULABUILD_CLI_EXPERIMENTAL** needs to be enabled). | +| | --iidfile | String, which indicates the ID of the image output to a local file. | +| | -o, --output | String, which indicates the image export mode and path.| +| | --proxy | Boolean, which inherits the proxy environment variable on the host. The default value is true. | +| | --tag | String, which indicates the tag value of the image that is successfully built. | +| | --cap-add | String list, which contains permissions required by the **RUN** instruction during the build process.| + +**Table 2** Parameters of the `ctr-img load` command + +| **Command** | **Parameter** | **Description** | +| ------------ | ----------- | --------------------------------- | +| ctr-img load | -i, --input | String, path of the local .tar package to be imported.| + +**Table 3** Parameters of the `ctr-img push` command + +| **Command** | **Parameter** | **Description** | +| ------------ | ----------- | --------------------------------- | +| ctr-img push | -f, --format | String, which indicates the pushed image format **oci** or **docker** (**ISULABUILD_CLI_EXPERIMENTAL** needs to be enabled).| + +**Table 4** Parameters of the `ctr-img rm` command + +| **Command** | **Parameter** | **Description** | +| ---------- | ----------- | --------------------------------------------- | +| ctr-img rm | -a, --all | Boolean, which is used to delete all local persistent images. | +| | -p, --prune | Boolean, which is used to delete all images that are stored persistently on the local host and do not have tags. | + +**Table 5** Parameters of the `ctr-img save` command + +| **Command** | **Parameter** | **Description** | +| ------------ | ------------ | ---------------------------------- | +| ctr-img save | -o, --output | String, which indicates the local path for storing the exported images.| +| ctr-img save | -f, --format | String, which indicates the exported image format **oci** or **docker** (**ISULABUILD_CLI_EXPERIMENTAL** needs to be enabled).| + +**Table 6** Parameters of the `login` command + +| **Command** | **Parameter** | **Description** | +| -------- | -------------------- | ------------------------------------------------------- | +| login | -p, --password-stdin | Boolean, which indicates whether to read the password through the standard input. or enter the password in interactive mode. | +| | -u, --username | String, which indicates the username for logging in to the image repository.| + +**Table 7** Parameters of the `logout` command + +| **Command** | **Parameter** | **Description** | +| -------- | --------- | ------------------------------------ | +| logout | -a, --all | Boolean, which indicates whether to log out of all logged-in image repositories. | + +**Table 8** Parameters of the `manifest annotate` command + +| **Command** | **Parameter** | **Description** | +| ----------------- | ------------- | ---------------------------- | +| manifest annotate | --arch | Set architecture | +| | --os | Set operating system | +| | --os-features | Set operating system feature | +| | --variant | Set architecture variant | + +### Communication Matrix + +The isula-build component processes communicate with each other through the Unix socket file. No port is used for communication. + +### File and Permission + +- All isula-build operations must be performed by the **root** user. To perform operations as a non-privileged user, you need to configure the `--group` option. + +- The following table lists the file permissions involved in the running of isula-build. + +| **File Path** | **File/Folder Permission** | **Description** | +| ------------------------------------------- | ------------------- | ------------------------------------------------------------ | +| /usr/bin/isula-build | 550 | Binary file of the command line tool. | +| /usr/bin/isula-builder | 550 | Binary file of the isula-builder process. | +| /usr/lib/systemd/system/isula-build.service | 640 | systemd configuration file, which is used to manage the isula-build service. | +| /usr/isula-build | 650 | Root directory of the isula-builder configuration file. | +| /etc/isula-build/configuration.toml | 600 | General isula-builder configuration file, including the settings of the isula-builder log level, persistency directory, runtime directory, and OCI runtime. | +| /etc/isula-build/policy.json | 600 | Syntax file of the signature verification policy file. | +| /etc/isula-build/registries.toml | 600 | Configuration file of each image repository, including the available image repository list and image repository blacklist. | +| /etc/isula-build/storage.toml | 600 | Configuration file of the local persistent storage, including the configuration of the used storage driver. | +| /etc/isula-build/isula-build.pub | 400 | Asymmetric encryption public key file. | +| /var/run/isula_build.sock | 660 | Local socket of isula-builder. | +| /var/lib/isula-build | 700 | Local persistency directory. | +| /var/run/isula-build | 700 | Local runtime directory. | +| /var/lib/isula-build/tmp/\[buildid]/isula-build-tmp-*.tar | 644 | Local temporary directory for storing the images when they are exported to iSulad. | diff --git a/docs/en/cloud/image_builder/isula_build/isula_build_appendix.md b/docs/en/cloud/image_builder/isula_build/isula_build_appendix.md new file mode 100644 index 0000000000000000000000000000000000000000..b6cb4d8f323e6d3373b7282215a1e979b99509d9 --- /dev/null +++ b/docs/en/cloud/image_builder/isula_build/isula_build_appendix.md @@ -0,0 +1,91 @@ +# Appendix + +## Command Line Parameters + +**Table 1** Parameters of the `ctr-img build` command + +| **Command** | **Parameter** | **Description** | +| ------------- | -------------- | ------------------------------------------------------------ | +| ctr-img build | --build-arg | String list, which contains variables required during the build. | +| | --build-static | Key value, which is used to build binary equivalence. Currently, the following key values are included: - build-time: string, which indicates that a fixed timestamp is used to build a container image. The timestamp format is YYYY-MM-DD HH-MM-SS. | +| | -f, --filename | String, which indicates the path of the Dockerfiles. If this parameter is not specified, the current path is used. | +| | --format | String, which indicates the image format **oci** or **docker** (**ISULABUILD_CLI_EXPERIMENTAL** needs to be enabled). | +| | --iidfile | String, which indicates the ID of the image output to a local file. | +| | -o, --output | String, which indicates the image export mode and path.| +| | --proxy | Boolean, which inherits the proxy environment variable on the host. The default value is true. | +| | --tag | String, which indicates the tag value of the image that is successfully built. | +| | --cap-add | String list, which contains permissions required by the **RUN** instruction during the build process.| + +**Table 2** Parameters of the `ctr-img load` command + +| **Command** | **Parameter** | **Description** | +| ------------ | ----------- | --------------------------------- | +| ctr-img load | -i, --input | String, path of the local .tar package to be imported.| + +**Table 3** Parameters of the `ctr-img push` command + +| **Command** | **Parameter** | **Description** | +| ------------ | ----------- | --------------------------------- | +| ctr-img push | -f, --format | String, which indicates the pushed image format **oci** or **docker** (**ISULABUILD_CLI_EXPERIMENTAL** needs to be enabled).| + +**Table 4** Parameters of the `ctr-img rm` command + +| **Command** | **Parameter** | **Description** | +| ---------- | ----------- | --------------------------------------------- | +| ctr-img rm | -a, --all | Boolean, which is used to delete all local persistent images. | +| | -p, --prune | Boolean, which is used to delete all images that are stored persistently on the local host and do not have tags. | + +**Table 5** Parameters of the `ctr-img save` command + +| **Command** | **Parameter** | **Description** | +| ------------ | ------------ | ---------------------------------- | +| ctr-img save | -o, --output | String, which indicates the local path for storing the exported images.| +| ctr-img save | -f, --format | String, which indicates the exported image format **oci** or **docker** (**ISULABUILD_CLI_EXPERIMENTAL** needs to be enabled).| + +**Table 6** Parameters of the `login` command + +| **Command** | **Parameter** | **Description** | +| -------- | -------------------- | ------------------------------------------------------- | +| login | -p, --password-stdin | Boolean, which indicates whether to read the password through stdin. or enter the password in interactive mode. | +| | -u, --username | String, which indicates the username for logging in to the image repository.| + +**Table 7** Parameters of the `logout` command + +| **Command** | **Parameter** | **Description** | +| -------- | --------- | ------------------------------------ | +| logout | -a, --all | Boolean, which indicates whether to log out of all logged-in image repositories. | + +**Table 8** Parameters of the `manifest annotate` command + +| **Command** | **Parameter** | **Description** | +| ----------------- | ------------- | ---------------------------- | +| manifest annotate | --arch | Set architecture | +| | --os | Set operating system | +| | --os-features | Set operating system feature | +| | --variant | Set architecture variant | + +## Communication Matrix + +The isula-build component processes communicate with each other through the Unix socket file. No port is used for communication. + +## File and Permission + +- All isula-build operations must be performed by the **root** user. To perform operations as a non-privileged user, you need to configure the `--group` option. + +- The following table lists the file permissions involved in the running of isula-build. + +| **File Path** | **File/Folder Permission** | **Description** | +| ------------------------------------------- | ------------------- | ------------------------------------------------------------ | +| /usr/bin/isula-build | 550 | Binary file of the command line tool. | +| /usr/bin/isula-builder | 550 | Binary file of the isula-builder process. | +| /usr/lib/systemd/system/isula-build.service | 640 | systemd configuration file, which is used to manage the isula-build service. | +| /usr/isula-build | 650 | Root directory of the isula-builder configuration file. | +| /etc/isula-build/configuration.toml | 600 | General isula-builder configuration file, including the settings of the isula-builder log level, persistency directory, runtime directory, and OCI runtime. | +| /etc/isula-build/policy.json | 600 | Syntax file of the signature verification policy file. | +| /etc/isula-build/registries.toml | 600 | Configuration file of each image repository, including the available image repository list and image repository blacklist. | +| /etc/isula-build/storage.toml | 600 | Configuration file of the local persistent storage, including the configuration of the used storage driver. | +| /etc/isula-build/isula-build.pub | 400 | Asymmetric encryption public key file. | +| /var/run/isula_build.sock | 660 | Local socket of isula-builder. | +| /var/lib/isula-build | 700 | Local persistency directory. | +| /var/run/isula-build | 700 | Local runtime directory. | +| /var/lib/isula-build/tmp/\[build_id\]/isula-build-tmp-*.tar | 644 | Local temporary directory for storing the images when they are exported to iSulad. | diff --git a/docs/en/cloud/image_builder/isula_build/overview.md b/docs/en/cloud/image_builder/isula_build/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..41bda76c4f6eac6a5113191097bd39a9b7cef901 --- /dev/null +++ b/docs/en/cloud/image_builder/isula_build/overview.md @@ -0,0 +1,13 @@ +# Container Image Building + +## Overview + +isula-build is a container image build tool developed by the iSula container team. It allows you to quickly build container images using Dockerfiles. + +The isula-build uses the server/client mode. The isula-build functions as a client and provides a group of command line tools for image build and management. The isula-builder functions as the server to process client management requests, and runs as a daemon process in the background. + +![isula-build architecture](./figures/isula-build_arch.png) + +> [!NOTE]Note +> +> Currently, isula-build supports OCI image format ([OCI Image Format Specification](https://github.com/opencontainers/image-spec/blob/main/spec.md/)) and Docker image format ([Image Manifest Version 2, Schema 2](https://docs.docker.com/registry/spec/manifest-v2-2/)). Use the `export ISULABUILD_CLI_EXPERIMENTAL=enabled` command to enable the experimental feature for supporting OCI image format. When the experimental feature is disabled, isula-build will take Docker image format as the default image format. Otherwise, isula-build will take OCI image format as the default image format. diff --git a/docs/en/cloud/kubeos/.DS_Store b/docs/en/cloud/kubeos/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/docs/en/cloud/kubeos/.DS_Store differ diff --git a/docs/en/cloud/kubeos/kubeos/_toc.yaml b/docs/en/cloud/kubeos/kubeos/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b2825da3fff9e414b9ee852496500a1c92f51301 --- /dev/null +++ b/docs/en/cloud/kubeos/kubeos/_toc.yaml @@ -0,0 +1,14 @@ +label: KubeOS User Guide +isManual: true +description: KubeOS is a lightweight OS tailored for containerized workloads. It enables atomic updates, maintains version uniformity, and simplifies O&M +sections: + - label: Overview + href: ./overview.md + - label: About KubeOS + href: ./about_kubeos.md + - label: Installation and Deployment + href: ./installation_and_deployment.md + - label: Usage Instructions + href: ./usage_instructions.md + - label: KubeOS Image Creation + href: ./kubeos_image_creation.md diff --git a/docs/en/cloud/kubeos/kubeos/about_kubeos.md b/docs/en/cloud/kubeos/kubeos/about_kubeos.md new file mode 100644 index 0000000000000000000000000000000000000000..ec282d26ef1dfbbe0d4a4da2a62e025241b80a10 --- /dev/null +++ b/docs/en/cloud/kubeos/kubeos/about_kubeos.md @@ -0,0 +1,39 @@ +# About KubeOS + +## Introduction + +Containers and Kubernetes are widely used in cloud scenarios. However, a current manner of managing the containers and the OSs separately usually faces problems of function redundancy and difficult collaboration between scheduling systems. In addition, it is difficult to manage OS versions. Software packages are installed, updated, and deleted separately in OSs of the same version. After a period of time, the OS versions become inconsistent, causing version fragmentation. Besides, the OSs may be tightly coupled with services, making it difficult to upgrade major versions. To solve the preceding problems, openEuler provides KubeOS, a container OS upgrade tool based on openEuler. + +Container OSs are lightweight OSs designed for scenarios where services run in containers. KubeOS connects container OSs as components to Kubernetes, so that the container OSs are in the same position as services. With KubeOS, a Kubernetes cluster manages containers and container OSs in a unified system. + +KubeOS is a Kubernetes operator for controlling the container OS upgrade process and upgrading the container OSs as a whole to implement collaboration between the OS managers and services. Before the container OSs are upgraded, services are migrated to other nodes to reduce the impact on services during OS upgrade and configuration. In this upgrade pattern, the container OSs are upgraded atomically so that the OSs remain synchronized with the expected status. This ensures that the OS versions in the cluster are consistent, preventing version fragmentation. + +## Architecture + +### KubeOS Architecture + +**Figure 1** KubeOS architecture + +![](./figures/kubeos-architecture.png) + +As shown in the preceding figure, KubeOS consists of three components: os-operator, os-proxy, and os-agent. The os-operator and os-proxy components run in containers and are deployed in the Kubernetes cluster. os-agent is not considered a cluster component. Its instances run on worker nodes as processes. + +- os-operator: global container OS manager, which continuously checks the container OS versions of all nodes, controls the number of nodes to be upgraded concurrently based on the configured information, and marks the nodes to be upgraded. + +- os-proxy: OS manager of a single node, which continuously checks the container OS version of the node. If a node is marked as the node to be upgraded by os-operator, the node is locked, the pod is evicted, and the upgrade information is forwarded to os-agent. + +- os-agent: receives information from os-proxy, downloads the container OS image used for upgrade from the OS image server, upgrades the container OS, and restarts the node. + +### File System of a Container OS + +**Figure 2** File system layout of a container OS + +![](./figures/file-system-layout-of-a-container-os.png) + +As shown in the figure, a container OS comprises four partitions: + +- boot partition: GRUB2 file partition. +- Persist partition: stores persistent user data. When the container OS is upgraded, the data in this partition is retained. +- Two root partitions: Container OSs use the dual-partition mode with two root partitions, rootA and rootB. Assume that the container runs the OS stored in the rootA partition after initialization. When the system is upgraded, the new system is downloaded to the rootB partition. GRUB has two boot options: A and B. The default boot option of GRUB is set to B and the node is restarted. After the node is started, the container runs the upgraded OS in the rootB partition. + +The root file system of a container OS is read-only. Users' persistent data is stored in the Persist partition. diff --git a/docs/en/cloud/kubeos/kubeos/figures/file-system-layout-of-a-container-os.png b/docs/en/cloud/kubeos/kubeos/figures/file-system-layout-of-a-container-os.png new file mode 100644 index 0000000000000000000000000000000000000000..add62e72f85b103b7dd5780d2e360049f5f712df Binary files /dev/null and b/docs/en/cloud/kubeos/kubeos/figures/file-system-layout-of-a-container-os.png differ diff --git a/docs/en/cloud/kubeos/kubeos/figures/kubeos-architecture.png b/docs/en/cloud/kubeos/kubeos/figures/kubeos-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..7834a3793b73c49ddd046502c65335a08f576c30 Binary files /dev/null and b/docs/en/cloud/kubeos/kubeos/figures/kubeos-architecture.png differ diff --git a/docs/en/cloud/kubeos/kubeos/installation_and_deployment.md b/docs/en/cloud/kubeos/kubeos/installation_and_deployment.md new file mode 100644 index 0000000000000000000000000000000000000000..344cbb3a060949dcd343123725ef16afef949a1b --- /dev/null +++ b/docs/en/cloud/kubeos/kubeos/installation_and_deployment.md @@ -0,0 +1,192 @@ +# Installation and Deployment + +This chapter describes how to install and deploy the KubeOS tool. + +## Software and Hardware Requirements + +### Hardware Requirements + +- Currently, only the x86 and AArch64 architectures are supported. + +### Software Requirements + +- OS: openEuler 22.03 LTS SP4 + +### Environment Preparation + +- Install the openEuler system. For details, see the [*openEuler Installation Guide*](../../../server/installation_upgrade/installation/installation_on_servers.md). +- Install qemu-img, bc, Parted, tar, Yum, Docker, and dosfstools. + +## KubeOS Installation + +To install KubeOS, perform the following steps: + +1. Configure the Yum sources openEuler 22.03-LTS-SP4 and openEuler 22.03-LTS-SP4:EPOL: + + ```text + [openEuler22.03-LTS-SP4] # openEuler 22.03-LTS-SP4 official source + name=openEuler22.03-LTS-SP4 + baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/$basearch/ + enabled=1 + gpgcheck=1 + gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/$basearch/RPM-GPG-KEY-openEuler + ``` + + ```text + [Epol] # openEuler 22.03-LTS-SP4:EPOL official source + name=Epol + baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/main/$basearch/ + enabled=1 + gpgcheck=1 + gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/$basearch/RPM-GPG-KEY-openEuler + ``` + +2. Install KubeOS as the **root** user. + + ```shell + # yum install KubeOS KubeOS-scripts -y + ``` + +> [!NOTE]**NOTE**: +> +> KubeOS is installed in the **/opt/kubeOS** directory, including the os-operator, os-proxy, os-agent binary files, KubeOS image build tools, and corresponding configuration files. + +## KubeOS Deployment + +After KubeOS is installed, you need to configure and deploy it. This section describes how to configure and deploy KubeOS. + +### Building the os-operator and os-proxy Images + +#### Environment Preparation + +Before using Docker to create a container image, ensure that Docker has been installed and configured. + +#### Procedure + +1. Go to the working directory. + + ```shell + cd /opt/kubeOS + ``` + +2. Specify the image repository, name, and version for os-proxy. + + ```shell + export IMG_PROXY=your_imageRepository/os-proxy_imageName:version + ``` + +3. Specify the image repository, name, and version for os-operator. + + ```shell + export IMG_OPERATOR=your_imageRepository/os-operator_imageName:version + ``` + +4. Compile a Dockerfile to build an image. Pay attention to the following points when compiling a Dockerfile: + + - The os-operator and os-proxy images must be built based on the base image. Ensure that the base image is safe. + - Copy the os-operator and os-proxy binary files to the corresponding images. + - Ensure that the owner and owner group of the os-proxy binary file in the os-proxy image are **root**, and the file permission is **500**. + - Ensure that the owner and owner group of the os-operator binary file in the os-operator image are the user who runs the os-operator process in the container, and the file permission is **500**. + - The locations of the os-operator and os-proxy binary files in the image and the commands run during container startup must correspond to the parameters specified in the YAML file used for deployment. + + An example Dockerfile is as follows: + + ```text + FROM your_baseimage + COPY ./bin/proxy /proxy + ENTRYPOINT ["/proxy"] + ``` + + ```text + FROM your_baseimage + COPY --chown=6552:6552 ./bin/operator /operator + ENTRYPOINT ["/operator"] + ``` + + Alternatively, you can use multi-stage builds in the Dockerfile. + +5. Build the images (the os-operator and os-proxy images) to be included in the containers OS image. + + ```shell + # Specify the Dockerfile path of os-proxy. + export DOCKERFILE_PROXY=your_dockerfile_proxy + # Specify the Dockerfile path of os-operator. + export DOCKERFILE_OPERATOR=your_dockerfile_operator + # Build images. + docker build -t ${IMG_OPERATOR} -f ${DOCKERFILE_OPERATOR} . + docker build -t ${IMG_PROXY} -f ${DOCKERFILE_PROXY} . + ``` + +6. Push the images to the image repository. + + ```shell + docker push ${IMG_OPERATOR} + docker push ${IMG_PROXY} + ``` + +### Creating a KubeOS VM Image + +#### Precautions + +- The VM image is used as an example. For details about how to create a physical machine image, see [**KubeOS Image Creation**](./kubeos_image_creation.md). +- The root permission is required for creating a KubeOS image. +- The RPM sources of the kbimg are the **everything** and **EPOL** repositories of openEuler of a specific version. In the Repo file provided during image creation, you are advised to configure the **everything** and **EPOL** repositories of a specific openEuler version for the Yum source. +- By default, the KubeOS VM image built using the default RPM list is stored in the same path as the kbimg tool. This partition must have at least 25 GiB free drive space. +- When creating a KubeOS image, you cannot customize the file system to be mounted. + +#### Procedure + +Use the **kbimg.sh** script to create a KubeOS VM image. For details about the commands, see [**KubeOS Image Creation**](./kubeos_image_creation.md). + +To create a KubeOS VM image, perform the following steps: + +1. Go to the working directory. + + ```shell + cd /opt/kubeOS/scripts + ``` + +2. Run `kbming.sh` to create a KubeOS image. The following is a command example: + + ```shell + bash kbimg.sh create vm-image -p xxx.repo -v v1 -b ../bin/os-agent -e '''$1$xyz$RdLyKTL32WEvK3lg8CXID0''' + ``` + + In the command, **xx.repo** indicates the actual Yum source file used for creating the image. You are advised to configure both the **everything** and **EPOL** repositories as Yum sources. + + After the KubeOS image is created, the following files are generated in the **/opt/kubeOS/scripts** directory: + + - **system.img**: system image in raw format. The default size is 20 GB. The size of the root file system partition is less than 2,020 MiB, and the size of the Persist partition is less than 16 GiB. + - **system.qcow2**: system image in QCOW2 format. + - **update.img**: partition image of the root file system that is used for upgrade. + + The created KubeOS VM image can be used only in a VM of the x86 or AArch64 architecture. KubeOS does not support legacy boot in an x86 VM + +### Deploying CRD, os-operator, and os-proxy + +#### Precautions + +- The Kubernetes cluster must be deployed first. For details, see the [*Kubernetes Cluster Deployment Guide*](../../cluster_deployment/kubernetes/overview.md). + +- The OS of the worker nodes to be upgraded in the cluster must be the KubeOS built using the method described in the previous section. If it is not, use **system.qcow2** to deploy the VM again. For details about how to deploy a VM, see the [*Virtualization User Guide*](../../../virtualization/virtualization_platform/virtualization/introduction_to_virtulization.md). Currently, KubeOS does not support the master nodes. Use openEuler 22.03-LTS-SP4 to deploy the upgrade on the master nodes. +- The YAML files for deploying CustomResourceDefinition (CRD), os-operator, os-proxy, and role-based access control (RBAC) of the OS need to be compiled. +- The os-operator and os-proxy components are deployed in the Kubernetes cluster. os-operator must be deployed as a Deployment, and os-proxy as a DaemonSet. +- Kubernetes security mechanisms, such as the RBAC, pod service account, and security policies, must be deployed. + +#### Procedure + +1. Prepare YAML files used for deploying CRD, RBAC, os-operator, and os-proxy of the OS. For details, see [YAML examples](https://gitee.com/openeuler/KubeOS/tree/master/docs/example/config). The following uses **crd.yaml**, **rbac.yaml**, and **manager.yaml** as examples. + +2. Deploy CRD, RBAC, os-operator, and os-proxy. Assume that the **crd.yaml**, **rbac.yaml**, and **manager.yaml** files are stored in the **config/crd**, **config/rbac**, and **config/manager** directories, respectively. Run the following commands: + + ```shell + kubectl apply -f config/crd + kubectl apply -f config/rbac + kubectl apply -f config/manager + ``` + +3. After the deployment is complete, run the following command to check whether each component is started properly. If **STATUS** of all components is **Running**, the components are started properly. + + ```shell + kubectl get pods -A + ``` diff --git a/docs/en/cloud/kubeos/kubeos/kubeos_image_creation.md b/docs/en/cloud/kubeos/kubeos/kubeos_image_creation.md new file mode 100644 index 0000000000000000000000000000000000000000..0af7f279b57539176864b1a5f84f2aa2322ad2fa --- /dev/null +++ b/docs/en/cloud/kubeos/kubeos/kubeos_image_creation.md @@ -0,0 +1,169 @@ +# KubeOS Image Creation + +## Introduction + +kbimg is an image creation tool required for KubeOS deployment and upgrade. You can use kbimg to create KubeOS Docker, VM, and physical machine images. + +## Commands + +### Command Format + +**bash kbimg.sh** \[ --help | -h \] create \[ COMMANDS \] \[ OPTIONS \] + +### Parameter Description + +* COMMANDS + + | Parameter | Description | + | ------------- | ---------------------------------------------- | + | upgrade-image | Generates a Docker image for installation and upgrade.| + | vm-image | Generates a VM image for installation and upgrade. | + | pxe-image | Generates images and files required for physical machine installation. | + +* OPTIONS + + | Option | Description | + | ------------ | ------------------------------------------------------------ | + | -p | Path of the repo file. The Yum source required for creating an image is configured in the repo file. | + | -v | Version of the created KubeOS image. | + | -b | Path of the os-agent binary file. | + | -e | Password of the **root** user of the KubeOS image, which is an encrypted password with a salt value. You can run the OpenSSL or KIWI command to generate the password.| + | -d | Generated or used Docker image. | + | -h --help | Help Information. | + +## Usage Description + +### Precautions + +* The root permission is required for executing **kbimg.sh**. +* Currently, only the x86 and AArch64 architectures are supported. +* The RPM sources of the kbimg are the **everything** and **EPOL** repositories of openEuler of a specific version. In the Repo file provided during image creation, you are advised to configure the **everything** and **EPOL** repositories of a specific openEuler version for the Yum source. + +### Creating a KubeOS Docker Image + +#### Precautions + +* The created Docker image can be used only for subsequent VM or physical machine image creation or upgrade. It cannot be used to start containers. +* If the default RPM list is used to create a KubeOS image, at least 6 GB drive space is required. If the RPM list is customized, the occupied drive space may exceed 6 GB. + +#### Example + +* To configure the DNS, customize the `resolv.conf` file in the `scripts` directory. + +```shell + cd /opt/kubeOS/scripts + touch resolv.conf + vim resolv.conf +``` + +* Create a KubeOS image. + +``` shell +cd /opt/kubeOS/scripts +bash kbimg.sh create upgrade-image -p xxx.repo -v v1 -b ../bin/os-agent -e '''$1$xyz$RdLyKTL32WEvK3lg8CXID0''' -d your_imageRepository/imageName:version +``` + +* After the creation is complete, view the created KubeOS image. + +``` shell +docker images +``` + +### Creating a KubeOS VM Image + +#### Precautions + +* To use a Docker image to create a KubeOS VM image, pull the corresponding image or create a Docker image first and ensure the security of the Docker image. +* The created KubeOS VM image can be used only in a VM of the x86 or AArch64 architecture. +* Currently, KubeOS does not support legacy boot in an x86 VM. +* If the default RPM list is used to create a KubeOS image, at least 25 GB drive space is required. If the RPM list is customized, the occupied drive space may exceed 25 GB. + +#### Example + +* Using the Repo Source + * To configure the DNS, customize the `resolv.conf` file in the `scripts` directory. + + ```shell + cd /opt/kubeOS/scripts + touch resolv.conf + vim resolv.conf + ``` + + * Create a KubeOS VM image. + + ``` shell + cd /opt/kubeOS/scripts + bash kbimg.sh create vm-image -p xxx.repo -v v1 -b ../bin/os-agent -e '''$1$xyz$RdLyKTL32WEvK3lg8CXID0''' + ``` + +* Using a Docker Image + + ``` shell + cd /opt/kubeOS/scripts + bash kbimg.sh create vm-image -d your_imageRepository/imageName:version + ``` + +* Result Description + After the KubeOS image is created, the following files are generated in the **/opt/kubeOS/scripts** directory: + * **system.qcow2**: system image in QCOW2 format. The default size is 20 GiB. The size of the root file system partition is less than 2,020 MiB, and the size of the Persist partition is less than 16 GiB. + * **update.img**: partition image of the root file system used for upgrade. + +### Creating Images and Files Required for Installing KubeOS on Physical Machines + +#### Precautions + +* To use a Docker image to create a KubeOS VM image, pull the corresponding image or create a Docker image first and ensure the security of the Docker image. +* The created image can only be used to install KubeOS on a physical machine of the x86 or AArch64 architecture. +* The IP address specified in the **Global.cfg** file is a temporary IP address used during installation. After the system is installed and started, configure the network by referring to **openEuler 22.03 LTS SP1 Administrator Guide** > **Configuring the Network**. +* KubeOS cannot be installed on multiple drives at the same time. Otherwise, the startup may fail or the mounting may be disordered. +* Currently, KubeOS does not support legacy boot in an x86 physical machine. +* If the default RPM list is used to create a KubeOS image, at least 5 GB drive space is required. If the RPM list is customized, the occupied drive space may exceed 5 GB. + +#### Example + +* Modify the `00bootup/Global.cfg` file. All parameters are mandatory. Currently, only IPv4 addresses are supported. The following is a configuration example: + + ```shell + # rootfs file name + rootfs_name=kubeos.tar + # select the target disk to install kubeOS + disk=/dev/sda + # pxe server ip address where stores the rootfs on the http server + server_ip=192.168.1.50 + # target machine temporary ip + local_ip=192.168.1.100 + # target machine temporary route + route_ip=192.168.1.1 + # target machine temporary netmask + netmask=255.255.255.0 + # target machine netDevice name + net_name=eth0 + ``` + +* Using the Repo Source + * To configure the DNS, customize the `resolv.conf` file in the `scripts` directory. + + ```shell + cd /opt/kubeOS/scripts + touch resolv.conf + vim resolv.conf + ``` + + * Create an image required for installing KubeOS on a physical machine. + + ```shell + cd /opt/kubeOS/scripts + bash kbimg.sh create pxe-image -p xxx.repo -v v1 -b ../bin/os-agent -e '''$1$xyz$RdLyKTL32WEvK3lg8CXID0''' + ``` + +* Using a Docker Image + + ``` shell + cd /opt/kubeOS/scripts + bash kbimg.sh create pxe-image -d your_imageRepository/imageName:version + ``` + +* Result Description + + * **initramfs.img**: initramfs image used for boot from PXE. + * **kubeos.tar**: OS used for installation from PXE. diff --git a/docs/en/cloud/kubeos/kubeos/overview.md b/docs/en/cloud/kubeos/kubeos/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..b4ba571d6ea0b9605a20a446995a5bcf4f2c60e4 --- /dev/null +++ b/docs/en/cloud/kubeos/kubeos/overview.md @@ -0,0 +1,8 @@ +# KubeOS Overview + +This document describes how to install, deploy, and use KubeOS in the openEuler system. KubeOS connects the container OS to the scheduling system in standard extension pattern and manages the OS upgrade of nodes in the cluster through the scheduling system. + +This document is intended for community developers, open source enthusiasts, and partners who use the openEuler system and want to learn and use the container OSs. Users must: + +* Know basic Linux operations. +* Understand Kubernetes and Docker. diff --git a/docs/en/cloud/kubeos/kubeos/usage_instructions.md b/docs/en/cloud/kubeos/kubeos/usage_instructions.md new file mode 100644 index 0000000000000000000000000000000000000000..a8979ac1c19e495149b7b2815dff12e78953c396 --- /dev/null +++ b/docs/en/cloud/kubeos/kubeos/usage_instructions.md @@ -0,0 +1,161 @@ +# Usage Instructions + +## Precautions + +1. KubeOS upgrades the container OS in an atomic manner, where all software packages are upgraded at the same time. By default, single-package upgrade is not supported. +2. KubeOS supports container OSs with two partitions. Partitions more than two are not supported. +3. You can view the upgrade logs of a single node in the **/var/log/messages** file on the node. +4. Strictly follow the upgrade and rollback procedures described in this document. If the steps are performed in a wrong sequence, the system may fail to be upgraded or rolled back. +5. Upgrade using a Docker image and mTLS two-way authentication are supported only in openEuler 22.09 or later. +6. Cross-major version upgrade is not supported. + +## Upgrade + +Create a custom object of the OS type in the cluster and set the corresponding fields. The OS type comes from the CRD object created in the installation and deployment sections. The following table describes the fields. + +| Parameter |Type | Description | How to Use| Mandatory (Yes/No) | +| -------------- | ------ | ------------------------------------------------------------ | ----- | ---------------- | +| imagetype | string | Type of the upgrade image | The value must be `docker` or `disk`. Other values are invalid. This parameter is valid only in upgrade scenarios.|Yes | +| opstype | string | Operation, that is, upgrade or rollback| The value must be `upgrade` or `rollback`. Other values are invalid.|Yes | +| osversion | string | OS version of the image used for upgrade or rollback | The value must be a KubeOS version, for example, `KubeOS 1.0.0`.|Yes | +| maxunavailable | int | Number of nodes to be upgraded or rolled back at the same time| If the value of `maxunavailable` is greater than the actual number of nodes in the cluster, the deployment can be performed. The upgrade or rollback is performed based on the actual number of nodes in the cluster.|Yes | +| dockerimage | string | Docker image used for upgrade | The value must be in the *repository/name:tag* format. This parameter is valid only when the Docker image is used for upgrade.|Yes | +| imageurl | string | Address of the disk image used for the upgrade| `imageurl` contains the protocol and only HTTP or HTTPS is supported. For example, `https://192.168.122.15/update.img` is valid only when a disk image is used for upgrade.|Yes | +| checksum | string | Checksum (SHA-256) value for disk image verification during the upgrade. | This parameter is valid only when a disk image is used for upgrade.|Yes | +| flagSafe | bool | Whether `imageurl` specifies a secure HTTP address | The value must be `true` or `false`. This parameter is valid only when `imageurl` specifies an HTTP address.|Yes | +| mtls | bool | Whether HTTPS two-way authentication is used for the connection to the `imageurl` address. | The value must be `true` or `false`. This parameter is valid only when `imageurl` specifies an HTTPS address.|Yes | +| cacert | string | Root certificate file used for HTTPS or HTTPS two-way authentication | This parameter is valid only when `imageurl` specifies an HTTPS address.| This parameter is mandatory when `imageurl` specifies an HTTPS address.| +| clientcert | string | Client certificate file used for HTTPS two-way authentication | This parameter is valid only when HTTPS two-way authentication is used.|This parameter is mandatory when `mtls` is set to `true`.| +| clientkey | string | Client public key used for HTTPS two-way authentication | This parameter is valid only when HTTPS two-way authentication is used.|This parameter is mandatory when `mtls` is set to `true`.| + +The address specified by `imageurl` contains the protocol. Only the HTTP or HTTPS protocol is supported. If `imageurl` is set to an HTTPS address, secure transmission is used. If `imageurl` is set to an HTTP address, set `flagSafe` to `true`, because the image can be downloaded only when the address is secure. If `imageurl` is set to an HTTP address but `flagSafe` is not set to `true`, the address is insecure by default. The image will not be downloaded, and a message is written to the log of the node to be upgraded indicating that the address is insecure. + +You are advised to set `imageurl` to an HTTPS address. In this case, ensure that the required certificate has been installed on the node to be upgraded. If the image server is maintained by yourself, you need to sign the certificate and ensure that the certificate has been installed on the node to be upgraded. Place the certificate in the **/etc/KubeOS/certs** directory of KubeOS. The administrator specifies the address and must ensure the security of the address. An intranet address is recommended. + +The container OS image provider must check the validity of the image to ensure that the downloaded container OS image is from a reliable source. + +Compile the YAML file for deploying the OS as a custom resource (CR) instance in the cluster. The following is an example YAML file for deploying the CR instance: + +- Upgrade using a disk image + + ```text + apiVersion: upgrade.openeuler.org/v1alpha1 + kind: OS + metadata: + name: os-sample + spec: + imagetype: disk + opstype: upgrade + osversion: edit.os.version + maxunavailable: edit.node.upgrade.number + dockerimage: "" + imageurl: edit.image.url + checksum: image.checksum + flagSafe: imageurl.safety + mtls: imageurl use mtls or not + cacert: ca certificate + clientcert: client certificate + clientkey: client certificate key + ``` + +- Upgrade using a Docker image + + ```text + apiVersion: upgrade.openeuler.org/v1alpha1 + kind: OS + metadata: + name: os-sample + spec: + imagetype: docker + opstype: upgrade + osversion: edit.os.version + maxunavailable: edit.node.upgrade.number + dockerimage: dockerimage like repository/name:tag + imageurl: "" + checksum: "" + flagSafe: false + mtls: true + ``` + + Before using a Docker image to perform the upgrade, create the image first. For details about how to create a Docker image, see **KubeOS Image Creation**. + +Assume that the YAML file is **upgrade_v1alpha1_os.yaml**. + +Check the OS version of the node that is not upgraded. + +```shell +kubectl get nodes -o custom-columns='NAME:.metadata.name,OS:.status.nodeInfo.osImage' +``` + +Run the following command to deploy the CR instance in the cluster. The node is upgraded based on the configured parameters. + +```shell +kubectl apply -f upgrade_v1alpha1_os.yaml +``` + +Check the node OS version again to determine whether the node upgrade is complete. + +```shell +kubectl get nodes -o custom-columns='NAME:.metadata.name,OS:.status.nodeInfo.osImage' +``` + +> [!NOTE]**NOTE**: +> +> If you need to perform the upgrade again, modify the `imageurl`, `osversion`, `checksum`, `maxunavailable`, `flagSafe`, or `dockerimage` parameters in **upgrade_v1alpha1_os.yaml**. + +## Rollback + +### Application Scenarios + +- If a node cannot be started, you can only manually roll back the container OS to the previous version that can be properly started. +- If a node can be started and run the system, you can manually or use KubeOS (similar to the upgrade) to roll back the container OS. You are advised to use KubeOS. + +### Manual Rollback + +Manually restart the node and select the second boot option to roll back the container OS. Manual rollback can only roll back the container OS to the version before the upgrade. + +### KubeOS-based Rollback + +- Roll back to any version. + - Modify the YAML configuration file (for example, **upgrade_v1alpha1_os.yaml**) of the CR instance of the OS and set the corresponding fields to the image information of the target source version. The OS type comes from the CRD object created in the installation and deployment sections. For details about the fields and examples, see the previous section. + + - After the YAML is modified, run the update command. After the custom object is updated in the cluster, the node performs rollback based on the configured field information. + + ```shell + kubectl apply -f upgrade_v1alpha1_os.yaml + ``` + +- Roll back to the previous version. + + - Modify the **upgrade_v1alpha1_os.yaml** file. Set **osversion** to the previous version and **opstype** to **rollback** to roll back to the previous version (that is, switch to the previous partition). Example YAML: + + ```text + apiVersion: upgrade.openeuler.org/v1alpha1 + kind: OS + metadata: + name: os-sample + spec: + imagetype: "" + opstype: rollback + osversion: KubeOS previous version + maxunavailable: 2 + dockerimage: "" + imageurl: "" + checksum: "" + flagSafe: false + mtls:true + ``` + + - After the YAML is modified, run the update command. After the custom object is updated in the cluster, the node performs rollback based on the configured field information. + + ```shell + kubectl apply -f upgrade_v1alpha1_os.yaml + ``` + + After the update is complete, the node rolls back the container OS based on the configuration information. + +- Check the OS version of the container on the node to determine whether the rollback is successful. + + ```shell + kubectl get nodes -o custom-columns='NAME:.metadata.name,OS:.status.nodeInfo.osImage' + ``` diff --git a/docs/en/cloud/nestos/nestos/_toc.yaml b/docs/en/cloud/nestos/nestos/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..406dc6238762d91869ec34fcfed8b06dd2b1cf8e --- /dev/null +++ b/docs/en/cloud/nestos/nestos/_toc.yaml @@ -0,0 +1,12 @@ +label: NestOS User Guide +isManual: true +description: NestOS is a lightweight OS optimized for containerized environments. It employs dual-partition atomic updates to maintain security and reliability +sections: + - label: Overview + href: ./overview.md + - label: Installation and Deployment + href: ./installation_and_deployment.md + - label: Usage + href: ./usage.md + - label: Feature Description + href: ./feature_description.md diff --git a/docs/en/cloud/nestos/nestos/feature_description.md b/docs/en/cloud/nestos/nestos/feature_description.md new file mode 100644 index 0000000000000000000000000000000000000000..6ab5a81bf44ed5ccf43b899addd4cd16eccc7c0c --- /dev/null +++ b/docs/en/cloud/nestos/nestos/feature_description.md @@ -0,0 +1,98 @@ +# Feature Description + +## Container Technology + +NestOS provides computing resources for applications using a containerized computing environment. Applications share a system kernel and resources, but are invisible to each other. This means that applications are no longer directly installed in the OS. Instead, they run in containers through Docker. This greatly reduces the coupling among the OS, applications, and running environment. Compared with the traditional application deployment mode, the NestOS cluster provides more flexible and convenient application deployment, less interference between application running environments , and the easier maintenance of OSs. + +## rpm-ostree + +### System Upgrade + +rpm-ostree is a hybrid image/package system that combines RPM and OSTree. It provides RPM-based software package installation and management, and OSTree-based OS update and upgrade. rpm-ostree sees the two operations as updates to the OS. Each update to the system is similar to a transaction submitted by rpm-ostree. This ensures that the update completely succeeds or fails completely and allows the system to be rolled back to the status before the update. + +When updating the OS, rpm-ostree keeps two bootable deployments: one before the update and one after the update. The update takes effect only after the OS is restarted. If an error occurs during software installation or upgrade, the rpm-ostree rollback allows NestOS to revert to the previous deployment. The **/ostree/** and **/boot/** directories of NestOS are the OSTree repository environment and show which OSTree deployment is booted into. + +### File System + +In the rpm-ostree file system layout, only the **/etc** and **/var** directories are writable. Any data in the **/var** directory is not touched and is shared across upgrades. During the system upgrade, rpm-ostree takes the new default **/etc** and adds the changes on the top. This means that the upgrades will receive new default files in **/etc**, which is a critical feature. + +OSTree is designed to parallel install multiple versions of multiple independent operating systems. OSTree relies on a new top-level **ostree** directory; it can in fact parallel install inside an existing OS or distribution occupying the physical **/root**. On each client machine, there is an OSTree repository stored in **/ostree/repo**, and a set of deployments stored in **/ostree/deploy/$STATEROOT/$CHECKSUM**. Each deployment is primarily composed of a set of hard links into the repository. This means each version is deduplicated; an upgrade process only costs disk space proportional to the new files, plus some constant overhead. + +The model OSTree emphasizes is that the OS read-only content is kept in **/usr**; it comes with code to create a Linux read-only bind mount to prevent inadvertent corruption. There is exactly one **/var** writable directory shared between each deployment for a given OS. The OSTree core code does not touch content in this directory; it is up to the code in each operating system for how to manage and upgrade state. + +### OS Extensions + +NestOS keeps the base image as simple and small as possible for security and maintainability reasons. However, in some cases it is necessary to add software to the base OS itself. For example, drivers or VPN software are potential candidates because they are harder to containerize. These software packages extend the functionality of the base OS rather than providing runtimes for user applications. For this reason, rpm-ostree treats these packages as extensions. That said, there are no restrictions on which packages you can actually install. By default, packages are downloaded from the openEuler repositories. + +To layer a software package, you need to write a systemd unit that executes the `rpm-ostree` command to install the wanted package. The changes are added to a new deployment, which takes effect after restart. + +## nestos-installer + +nestos-installer helps with NestOS installation. It provides the following functions: + +(1) Installing the OS to a target disk, optionally customizing it with an Ignition configuration or first-boot kernel parameters (`nestos-installer install`) + +(2) Downloading and verify an OS image for various cloud, virtualization, or bare metal platforms (`nestos-installer download`) + +(3) Listing NestOS images available for download (`nestos-installer list-stream`) + +(4) Embed an Ignition configuration in a live ISO image to customize the running system that boots from it (`nestos-installer iso ignition`) + +(5) Wrap an Ignition configuration in an initrd image that can be appended to the live PXE initramfs to customize the running system that boots from it (`nestos-installer pxe ignition`) + +## Zincati + +Zincati is an auto-update agent for NestOS hosts. It works as a client for Cincinnati and rpm-ostree, taking care of automatically updating/rebooting machines. Zincati has the following features: + +(1) Agent for continuous automatic updates, with support for phased rollouts + +(2) Runtime customization via TOML dropins, allowing users to overwrite the default configuration. + +(3) Multiple update strategies + +(4) Local maintenance windows on a weekly schedule for planned upgrades + +(5) Tracks and exposes Zincati internal metrics to Prometheus to ease monitoring tasks across a large fleet of nodes + +(6) Logging with configurable priority levels + +(7) Support for complex update-graphs via Cincinnati protocol + +(8) Support for cluster-wide reboot orchestration, via an external lock-manager + +## System Initialization (Ignition) + +Ignition is a distribution-agnostic provisioning utility that not only installs, but also reads configuration files (in JSON format) to initialize NestOS. Configurable components include storage and file systems, systemd units, and users. + +Ignition runs only once during the first boot of the system (while in the initramfs). Because Ignition runs so early in the boot process, it can re-partition disks, format file systems, create users, and write files before the userspace begins to boot. As a result, systemd services are already written to disk when systemd starts, speeding the time to boot. + +(1) Ignition runs only on the first boot +Ignition is designed to be used as a provisioning tool, not as a configuration management tool. Ignition encourages immutable infrastructure, in which machine modification requires that users discard the old node and re-provision the machine. + +(2) Ignition produces the machine specified or no machine at all +Ignition does what it needs to make the system match the state described in the Ignition configuration. If for any reason Ignition cannot deliver the exact machine that the configuration asked for, Ignition prevents the machine from booting successfully. For example, if the user wanted to fetch the document hosted at **** and write it to disk, Ignition would prevent the machine from booting if it were unable to resolve the given URL. + +(3) Ignition configurations are declarative +Ignition configurations describe the state of a system. Ignition configurations do not list a series of steps that Ignition should take. +Ignition configurations do not allow users to provide arbitrary logic (including scripts for Ignition to run). Users describe which file systems must exist, which files must be created, which users must exist, and more. Any further customization must use systemd services, created by Ignition. + +(4) Ignition configurations should not be written by hand +Ignition configurations were designed to be human readable, but difficult to write, to discourage users from attempting to write configs by hand. Use Butane, or a similar tool, to generate Ignition configurations. + +## Afterburn + +Afterburn is a one-shot agent for cloud-like platforms which interacts with provider-specific metadata endpoints. It is typically used in conjunction with Ignition. + +Afterburn comprises several modules which may run at different times during the lifecycle of an instance. Depending on the specific platform, the following services may run in the initramfs on first boot: + +- setting local hostname + +- injecting network command-line arguments + +The following features are conditionally available on some platforms as systemd service units: + +- installing public SSH keys for local system users + +- retrieving attributes from instance metadata + +- checking in to the provider in order to report a successful boot or instance provisioning diff --git a/docs/en/cloud/nestos/nestos/figures/figure1.png b/docs/en/cloud/nestos/nestos/figures/figure1.png new file mode 100644 index 0000000000000000000000000000000000000000..b4eb9017ed202e854c076802492d8561942dfc88 Binary files /dev/null and b/docs/en/cloud/nestos/nestos/figures/figure1.png differ diff --git a/docs/en/cloud/nestos/nestos/figures/figure2.png b/docs/en/cloud/nestos/nestos/figures/figure2.png new file mode 100644 index 0000000000000000000000000000000000000000..90049769c04e2bd494533da1613e38a5199da3d7 Binary files /dev/null and b/docs/en/cloud/nestos/nestos/figures/figure2.png differ diff --git a/docs/en/cloud/nestos/nestos/installation_and_deployment.md b/docs/en/cloud/nestos/nestos/installation_and_deployment.md new file mode 100644 index 0000000000000000000000000000000000000000..f1089ef209604c6a70e981d8e6da435150a08870 --- /dev/null +++ b/docs/en/cloud/nestos/nestos/installation_and_deployment.md @@ -0,0 +1,128 @@ +# Installation and Deployment + +## Deploying NestOS on VMware + +This guide describes how to configure latest NestOS in VMware. + +Currently, NestOS supports only the x86_64 architecture. + +### Before You Start + +​Before deploying NestOS, make the following preparations: + +- Downloading the NestOS ISO +- Preparing the **config.bu** File +- Configuring the Butane Tool (on Linux or Windows 10) +- A host machine with VMware installed + +### Initial Installation and Startup + +#### Starting NestOS + +When NestOS is started for the first time, Ignition is not installed. You can use the nestos-installer component to install Ignition as prompted. + +### Producing an Ignition File + +#### Obtaining Butane + +You can use Butane to convert a .bu file into an Ignition file. Ignition configurations were designed to be human readable, but difficult to write, to discourage users from attempting to write configs by hand. +Butane supports multiple environments. You can use Butane in a Linux or Windows host machines or in container environments. + +```shell +docker pull quay.io/coreos/butane:release +``` + +#### Generating a Login Password + +Run the following command on the host machine and enter the password: + +```shell +# openssl passwd -1 -salt yoursalt +Password: +$1$yoursalt$1QskegeyhtMG2tdh0ldQN0 +``` + +#### Generating an SSH Key Pair + +Run the following command on the host machine to obtain the public key and private key for SSH login: + +```shell +# ssh-keygen -N '' -f ./id_rsa +Generating public/private rsa key pair. +Your identification has been saved in ./id_rsa +Your public key has been saved in ./id_rsa.pub +The key fingerprint is: +SHA256:4fFpDDyGHOYEd2fPaprKvvqst3T1xBQuk3mbdon+0Xs root@host-12-0-0-141 +``` + +```text +The key's randomart image is: ++---[RSA 3072]----+ +| ..= . o . | +| * = o * . | +| + B = * | +| o B O + . | +| S O B o | +| * = . . | +| . +o . . | +| +.o . .E | +| o*Oo ... | ++----[SHA256]-----+ +``` + +You can view the **id_rsa.pub** public key in the current directory. + +```shell +# cat id_rsa.pub +ssh-rsa +AAAAB3NzaC1yc2... +``` + +#### Compiling a .bu File + +Perform a simple initial configuration. For more details, see the description of Ignition. +A simple **config.bu** file is as follows: + +```text +variant: fcos +version: 1.1.0 +passwd: + users: + - name: nest + password_hash: "$1$yoursalt$1QskegeyhtMG2tdh0ldQN0" + ssh_authorized_keys: + - "ssh-rsa + AAAAB3NzaC1yc2EAAA..." +``` + +#### Generating an Ignition File + +Use the Butane tool to convert the **config.bu** file to a **config.ign** file in the container environment. + +```shell +# docker run --interactive --rm quay.io/coreos/butane:release \ +--pretty --strict < your_config.bu > transpiled_config.ign +``` + +### Installing NestOS + +Use SCP to copy the **config.ign** file generated by the host machine to NestOS that is initially started, which is not installed to the disk and runs in the memory. + +```shell +sudo -i +scp root@your_ipAddress:/root/config.ign /root +``` + +Run the following command and complete the installation as prompted: + +```shell +nestos-installer install /dev/sda --ignition-file config.ign +``` + +After the installation is complete, restart NestOS. + +```shell +systemctl reboot +``` + +Complete. diff --git a/docs/en/cloud/nestos/nestos/overview.md b/docs/en/cloud/nestos/nestos/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..9f4ca0891d1604f38df3cc0f8f9c0d84f6c9cd6a --- /dev/null +++ b/docs/en/cloud/nestos/nestos/overview.md @@ -0,0 +1,3 @@ +# NestOS User Guide + +This document describes the installation, deployment, features, and usage of the NestOS cloud-based operating system. NestOS runs common container engines, such as Docker, iSula, PodMan, and CRI-O, and integrates technologies such as Ignition, rpm-ostree, OCI runtime, and SELinux. NestOS adopts the design principles of dual-system partitions, container technology, and cluster architecture. It can adapt to multiple basic running environments in cloud scenarios.In addition, NestOS optimizes Kubernetes and provides support for platforms such as OpenStack and oVirt for IaaS ecosystem construction. In terms of PaaS ecosystem construction, platforms such as OKD and Rancher are supported for easy deployment of clusters and secure running of large-scale containerized workloads. diff --git a/docs/en/cloud/nestos/nestos/usage.md b/docs/en/cloud/nestos/nestos/usage.md new file mode 100644 index 0000000000000000000000000000000000000000..8f04da4d1136872b7270fb8a337dbb825f399442 --- /dev/null +++ b/docs/en/cloud/nestos/nestos/usage.md @@ -0,0 +1,481 @@ +# Setting Up Kubernetes and iSulad + +**Unless otherwise specified, perform the following steps on both the master and node.** This tutorial uses the master as an example. + +## Before You Start + +Prepare **NestOS-22.03-date.x86_64.iso** and two hosts act as the master and node respectively. + +## Downloading the Components + +Open the repo source file to add the Alibaba Cloud source of Kubernetes. + +```shell +vi /etc/yum.repos.d/openEuler.repo +``` + +Add the following content: + +```text +[kubernetes] +name=Kubernetes +baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ +enabled=1 +gpgcheck=1 +repo_gpgcheck=1 +gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg +``` + +Downloads the Kubernetes components and the components for synchronizing the system time. + +```shell +rpm-ostree install kubelet kubeadm kubectl ntp ntpdate wget +``` + +Restart the system to use the components. + +```shell +systemctl reboot +``` + +Select the latest version branch and enter the system. + +## Configuring the Environment + +### Change the Host Name of the Master + +```shell +hostnamectl set-hostname k8s-master +sudo -i +``` + +Open the **/etc/hosts** file. + +```shell +vi /etc/hosts +``` + +Add the IP addresses of the hosts. + +```text +192.168.237.133 k8s-master +192.168.237.135 k8s-node01 +``` + +### Synchronizing the System Time + +```shell +ntpdate time.windows.com +systemctl enable ntpd +``` + +### Disabling the swap Partition, Firewall, and SELinux + +By default, the NestOS does not have the swap partition and the firewall is disabled. +Run the following command to disable SELinux: + +```shell +vi /etc/sysconfig/selinux +# Change the value of SELINUX to disabled. +``` + +### Enabling Forwarding Mechanisms + +Create a configuration file. + +```shell +vi /etc/sysctl.d/k8s.conf +``` + +Add the following content: + +```text +net.bridge.bridge-nf-call-iptables=1 +net.bridge.bridge-nf-call-ip6tables=1 +net.ipv4.ip_forward=1 +``` + +Make the configuration take effect. + +```shell +modprobe br_netfilter +sysctl -p /etc/sysctl.d/k8s.conf +``` + +## Configuring iSula + +Check the OS image required by Kubernetes. Pay attention to the version number of the pause container. + +```shell +kubeadm config images list +``` + +Modify the **daemon.json** configuration file. + +```shell +vi /etc/isulad/daemon.json +``` + +```text +## Description of the added items ## +Set registry-mirrors to "docker.io". +Set insecure-registries to "rnd-dockerhub.huawei.com". +Set pod-sandbox-image to "registry.aliyuncs.com/google_containers/pause:3.5". (The Alibaba Cloud source is used. The pause version is obtained in the previous step.) +Set network-plugin to "cni". +Set cni-bin-dir to "/opt/cni/bin". +Set cni-conf-dir to "/etc/cni/net.d". +``` + +The modified file is as follows: + +```json +{"group": "isula", +"default-runtime": "runc", +"graph": "/var/lib/isulad", +"state": "/var/run/isulad", +"engine": "lcr", +"log-level": "ERROR", +"pidfile": "/var/run/isulad.pid", +"log-opts": { +"log-file-mode": "0600", +"log-path": "/var/lib/isulad", +"max-file": "1", +"max-size": "30KB" +}, +"log-driver": "stdout", +"container-log": { +"driver": "json-file" +}, +"hook-spec": "/etc/default/isulad/hooks/default.json", +"start-timeout": "2m", +"storage-driver": "overlay2", +"storage-opts": [ +"overlay2.override_kernel_check=true" +], +"registry-mirrors": [ +"docker.io" +], +"insecure-registries": [ +"rnd-dockerhub.huawei.com" +], +"pod-sandbox-image": "registry.aliyuncs.com/google_containers/pause:3.5", +"native.umask": "secure", +"network-plugin": "cni", +"cni-bin-dir": "/opt/cni/bin", +"cni-conf-dir": "/etc/cni/net.d", +"image-layer-check": false, +"use-decrypted-key": true, +"insecure-skip-verify-enforce": false +} +``` + +Start the services. + +```shell +systemctl restart isulad +systemctl enable isulad +systemctl enable kubelet +``` + +**Perform the preceding steps on both the master and node.** + +## Initializing the Master + +**Perform this step only on the master.** +Run the following command and wait for the host to pull the image. You can also manually pull the image before performing this step. + +```shell +kubeadm init --kubernetes-version=1.22.2 --apiserver-advertise- +address=192.168.237.133 --cri-socket=/var/run/isulad.sock --image-repository +registry.aliyuncs.com/google_containers --service-cidr=10.10.0.0/16 --pod- +network-cidr=10.122.0.0/16 +``` + +```text +## Description of initialization parameters ## +kubernetes-version indicates the version to be installed. +apiserver-advertise-address indicates the IP address of the master. +cri-socket specifies the iSulad engine. +image-repository specifies that the image source is Alibaba Cloud. You do not need to modify the tag. +service-cidr specifies the IP address range allocated to the service. +pod-network-cidr specifies the IP address range allocated to the Pod network. +``` + +After the initialization is successful, copy the `kubeadm join` command that is output by `kubeadm init` for subsequent node joining. + +```text +kubeadm join 192.168.237.133:6443 --token j7kufw.yl1gte0v9qgxjzjw --discovery- +token-ca-cert-hash +sha256:73d337f5edd79dd4db997d98d329bd98020b712f8d7833c33a85d8fe44d0a4f5 --cri- +socket=/var/run/isulad.sock +``` + +**Note**: `--cri-socket=/var/run/isulad.sock` specifies that iSulad is used as the container engine. +View the downloaded image. + +```shell +isula images +``` + +Configure the cluster based on the output of the initialization command. + +```shell +mkdir -p $HOME/.kube +cp -i /etc/kubernetes/admin.conf $HOME/.kube/config +chown $(id -u):$(id -g) $HOME/.kube/config +export KUBECONFIG=/etc/kubernetes/admin.conf +source /etc/profile +``` + +Check the health status. + +```shell +kubectl get cs +``` + +The status of **controller-manager** and **scheduler** may be **unhealthy**. To rectify the fault, perform the following steps: +Edit the configuration file. + +```shell +vi /etc/kubernetes/manifests/kube-controller-manager.yaml +``` + +Comment out the following content: +**--port=0** +Modify hostpath: +Change all **/usr/libexec/kubernetes/kubelet-plugins/volume/exec** to **/opt/libexec/...** + +```shell +vi /etc/kubernetes/manifests/kube-scheduler.yaml +``` + +Comment out the following content: +**--port=0** + +After the modification is complete, check the health status again. + +## Configuring the Network Plugin + +Configure the network plugin only on the master. However, you need to pull images on all hosts in advance. The commands for pulling images are as follows: + +```shell +isula pull calico/node:v3.19.3 +isula pull calico/cni:v3.19.3 +isula pull calico/kube-controllers:v3.19.3 +isula pull calico/pod2daemon-flexvol:v3.19.3 +``` + +**Perform the following steps only on the master.** +Obtain the configuration file. + +```shell +wget https://docs.projectcalico.org/v3.19/manifests/calico.yaml +``` + +Edit **calico.yaml** and change all **/usr/libexec/...** to **/opt/libexec/...**. +Run the following command to install Calico: + +```shell +kubectl apply -f calico.yaml +``` + +Run the `kubectl get pod -n kube-system` command to check whether Calico is successfully installed. +Run the `kubectl get pod -n kube-system` command to check whether all Pods are in the**running** status. + +## Joining the Node to the Cluster + +Run the following command on the node to join the node to the cluster: + +```text +kubeadm join 192.168.237.133:6443 --token j7kufw.yl1gte0v9qgxjzjw --discovery- +token-ca-cert-hash +sha256:73d337f5edd79dd4db997d98d329bd98020b712f8d7833c33a85d8fe44d0a4f5 --cri- +socket=/var/run/isulad.sock +``` + +Run the `kubectl get node` command to check whether the master and node statuses are **ready**. + +If yes, Kubernetes is successfully deployed. + +# Using rpm-ostree + +## Installing Software Packages Using rpm-ostree + +Install wget. + +```shell +rpm-ostree install wget +``` + +Restart the system. During the startup, use the up and down arrow keys on the keyboard to enter system before or after the RPM package installation. **ostree:0** indicates the version after the installation. + +```shell +systemctl reboot +``` + +Check whether wget is successfully installed. + +```shell +rpm -qa | grep wget +``` + +## Manually Upgrading NestOS Using rpm-ostree + +Run the following command in NestOS to view the current rpm-ostree status and version: + +```shell +rpm-ostree status +``` + +Run the check command to check whether a new version is available. + +```shell +rpm-ostree upgrade --check +``` + +Preview the differences between the versions. + +```shell +rpm-ostree upgrade --preview +``` + +In the latest version, the nano package is imported. +Run the following command to download the latest ostree and RPM data without performing the deployment. + +```shell +rpm-ostree upgrade --download-only +``` + +Restart NestOS. After the restart, the old and new versions of the system are available. Enter the latest version. + +```shell +rpm-ostree upgrade --reboot +``` + +## Comparing NestOS Versions + +Check the status. Ensure that two versions of ostree exist: **LTS.20210927.dev.0** and **LTS.20210928.dev.0**. + +```shell +rpm-ostree status +``` + +Compare the ostree versions based on commit IDs. + +```shell +rpm-ostree db diff 55eed9bfc5ec fe2408e34148 +``` + +## Rolling Back the System + +When a system upgrade is complete, the previous NestOS deployment is still stored on the disk. If the upgrade causes system problems, you can roll back to the previous deployment. + +### Temporary Rollback + +To temporarily roll back to the previous OS deployment, hold down **Shift** during system startup. When the boot load menu is displayed, select the corresponding branch from the menu. + +### Permanent Rollback + +To permanently roll back to the previous OS deployment, log in to the target node and run the `rpm-ostree rollback` command. This operation sets the previous OS deployment as the default deployment to boot into. +Run the following command to roll back to the system before the upgrade: + +```shell +rpm-ostree rollback +``` + +## Switching Versions + +NestOS is rolled back to an older version. You can run the following command to switch the rpm-ostree version used by NestOS to a newer version. + +```shell +rpm-ostree deploy -r 22.03.20220325.dev.0 +``` + +After the restart, check whether NestOS uses the latest ostree version. + +# Using Zincati for Automatic Update + +Zincati automatically updates NestOS. Zincati uses the Cincinnati backend to check whether a new version is available. If a new version is available, Zincati downloads it using rpm-ostree. + +Currently, the Zincati automatic update service is disabled by default. You can modify the configuration file to set the automatic startup upon system startup for Zincati. + +```shell +vi /etc/zincati/config.d/95-disable-on-dev.toml +``` + +Set **updates.enabled** to true. +Create a configuration file to specify the address of the Cincinnati backend. + +```shell +vi /etc/zincati/config.d/update-cincinnati.toml +``` + +Add the following content: + +```text +[cincinnati] +base_url="http://nestos.org.cn:8080" +``` + +Restart the Zincati service. + +```shell +systemctl restart zincati.service +``` + +When a new version is available, Zincati automatically detects the new version. Check the rpm-ostree status. If the status is **busy**, the system is being upgraded. + +After a period of time, NestOS automatically restarts. Log in to NestOS again and check the rpm-ostree status. If the status changes to **idle** and the current version is **20220325**, rpm-ostree has been upgraded. + +View the zincati service logs to check the upgrade process and system restart logs. In addition, the information "auto-updates logic enabled" in the logs indicates that the update is automatic. + +# Customizing NestOS + +You can use the nestos-installer tool to customize the original NestOS ISO file and package the Ignition file to generate a customized NestOS ISO file. The customized NestOS ISO file can be used to automatically install NestOS after the system is started for easy installation. + +Before customizing NestOS, make the following preparations: + +- Downloading the NestOS ISO. +- Preparing a **config.ign** File. + +## Generating a Customized NestOS ISO File + +### Setting Parameter Variables + +```shell +export COREOS_ISO_ORIGIN_FILE=nestos-22.03.20220324.x86_64.iso +export COREOS_ISO_CUSTOMIZED_FILE=my-nestos.iso +export IGN_FILE=config.ign +``` + +### Checking the ISO File + +Ensure that the original NestOS ISO file does not contain the Ignition configuration. + +```shell +$ nestos-installer iso ignition show $COREOS_ISO_ORIGIN_FILE + +Error: No embedded Ignition config. +``` + +### Generating a Customized NestOS ISO File + +Package the Ignition file into the original NestOS ISO file to generate a customized NestOS ISO file. + +```shell +nestos-installer iso ignition embed $COREOS_ISO_ORIGIN_FILE --ignition-file $IGN_FILE $COREOS_ISO_ORIGIN_FILE --output $COREOS_ISO_CUSTOMIZED_FILE +``` + +### Checking the ISO File + +Ensure that the customized NestOS ISO file contains the Ignition configuration. + +```shell +nestos-installer iso ignition show $COREOS_ISO_CUSTOMIZED_FILE +``` + +The previous command displays the Ignition configuration. + +## Installing the Customized NestOS ISO File + +The customized NestOS ISO file can be used to directly boot the installation. NestOS is automatically installed based on the Ignition configuration. After the installation is complete, you can use **nest/password** to log in to NestOS on the VM console. diff --git a/docs/en/edge_computing/_toc.yaml b/docs/en/edge_computing/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f53c8b7ca8029cafa2c93b6cf50096366405a54d --- /dev/null +++ b/docs/en/edge_computing/_toc.yaml @@ -0,0 +1,5 @@ +label: Edge Computing +sections: + - href: ./kube_edge/_toc.yaml + - href: ./k3s/_toc.yaml + - href: ./ros/_toc.yaml \ No newline at end of file diff --git a/docs/en/edge_computing/k3s/_toc.yaml b/docs/en/edge_computing/k3s/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3b118d51103025bf5fbdd461a64e4ac6c81049aa --- /dev/null +++ b/docs/en/edge_computing/k3s/_toc.yaml @@ -0,0 +1,6 @@ +label: K3s Deployment Guide +isManual: true +description: K3s is a lightweight Kubernetes distribution designed for edge computing and similar use cases +sections: + - label: K3s Deployment Guide + href: ./k3s_deployment_guide.md diff --git a/docs/en/edge_computing/k3s/figures/agent-install.png b/docs/en/edge_computing/k3s/figures/agent-install.png new file mode 100644 index 0000000000000000000000000000000000000000..dca1d64ec8aae821393bb715daf4c56b783a68e0 Binary files /dev/null and b/docs/en/edge_computing/k3s/figures/agent-install.png differ diff --git a/docs/en/edge_computing/k3s/figures/apply-deployment.png b/docs/en/edge_computing/k3s/figures/apply-deployment.png new file mode 100644 index 0000000000000000000000000000000000000000..5b93b5af8a4d0ae90023f98e6b82646b794ff057 Binary files /dev/null and b/docs/en/edge_computing/k3s/figures/apply-deployment.png differ diff --git a/docs/en/edge_computing/k3s/figures/apply-service.png b/docs/en/edge_computing/k3s/figures/apply-service.png new file mode 100644 index 0000000000000000000000000000000000000000..a175c41db2b5b8835b702c7d210f870b66e33637 Binary files /dev/null and b/docs/en/edge_computing/k3s/figures/apply-service.png differ diff --git a/docs/en/edge_computing/k3s/figures/check-agent.png b/docs/en/edge_computing/k3s/figures/check-agent.png new file mode 100644 index 0000000000000000000000000000000000000000..aa467713353d70ad513e8ee13ac9d8b6520b7ee0 Binary files /dev/null and b/docs/en/edge_computing/k3s/figures/check-agent.png differ diff --git a/docs/en/edge_computing/k3s/figures/check-server.png b/docs/en/edge_computing/k3s/figures/check-server.png new file mode 100644 index 0000000000000000000000000000000000000000..06343de9a8b0eacb0f6194cf438b2b27af88cae4 Binary files /dev/null and b/docs/en/edge_computing/k3s/figures/check-server.png differ diff --git a/docs/en/edge_computing/k3s/figures/curl-nginx.png b/docs/en/edge_computing/k3s/figures/curl-nginx.png new file mode 100644 index 0000000000000000000000000000000000000000..9e2959f638ff7cd2628fd52b83cb80f59c33579b Binary files /dev/null and b/docs/en/edge_computing/k3s/figures/curl-nginx.png differ diff --git a/docs/en/edge_computing/k3s/figures/describe-service.png b/docs/en/edge_computing/k3s/figures/describe-service.png new file mode 100644 index 0000000000000000000000000000000000000000..bd64d255f8b8cb016e28b54771885b2d7d493765 Binary files /dev/null and b/docs/en/edge_computing/k3s/figures/describe-service.png differ diff --git a/docs/en/edge_computing/k3s/figures/get-pods.png b/docs/en/edge_computing/k3s/figures/get-pods.png new file mode 100644 index 0000000000000000000000000000000000000000..565a173f9b9e3953627feca739735006f5182c21 Binary files /dev/null and b/docs/en/edge_computing/k3s/figures/get-pods.png differ diff --git a/docs/en/edge_computing/k3s/figures/server-install.png b/docs/en/edge_computing/k3s/figures/server-install.png new file mode 100644 index 0000000000000000000000000000000000000000..7d30c8f4f73946c8b0555186c1736492039da731 Binary files /dev/null and b/docs/en/edge_computing/k3s/figures/server-install.png differ diff --git a/docs/en/edge_computing/k3s/figures/set-hostname.png b/docs/en/edge_computing/k3s/figures/set-hostname.png new file mode 100644 index 0000000000000000000000000000000000000000..32564d6159825b6d4131a6b138a493188ce88c6c Binary files /dev/null and b/docs/en/edge_computing/k3s/figures/set-hostname.png differ diff --git a/docs/en/edge_computing/k3s/figures/token.png b/docs/en/edge_computing/k3s/figures/token.png new file mode 100644 index 0000000000000000000000000000000000000000..79e5313bd1d5e707659cd08d4aafdf528b9df8f0 Binary files /dev/null and b/docs/en/edge_computing/k3s/figures/token.png differ diff --git a/docs/en/edge_computing/k3s/figures/yum-install.png b/docs/en/edge_computing/k3s/figures/yum-install.png new file mode 100644 index 0000000000000000000000000000000000000000..0e601a23a5a67e7927f12bc90d1a4137e1a3a567 Binary files /dev/null and b/docs/en/edge_computing/k3s/figures/yum-install.png differ diff --git a/docs/en/edge_computing/k3s/k3s_deployment_guide.md b/docs/en/edge_computing/k3s/k3s_deployment_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..a1d432196a1e59e4f76717c07bde9d14ca12b594 --- /dev/null +++ b/docs/en/edge_computing/k3s/k3s_deployment_guide.md @@ -0,0 +1,189 @@ +# K3s Deployment Guide + +## Introduction to K3s + +K3s is a lightweight Kubernetes distribution that is optimized for edge computing and IoT scenarios. K3s provides the following enhanced features: + +- Packaged as a single binary file. +- Uses an SQLite3-based lightweight storage backend as the default storage mechanism and supports etcd3, MySQL, and PostgreSQL. +- Wrapped in a simple launcher that handles complex TLS and options. +- Secure by default with reasonable defaults for lightweight environments. +- Batteries included, providing simple but powerful functions such as local storage providers, service load balancers, Helm controllers, and Traefik Ingress controllers. +- Encapsulates all operations of the Kubernetes control plane in a single binary file and process, capable of automating and managing complex cluster operations including certificate distribution. +- Minimizes external dependencies and requires only kernel and cgroup mounting. + +## Application Scenarios + +K3s is applicable to the following scenarios: + +- Edge computing +- IoT +- Continuous integration (CI) +- Development +- Arm +- Embedded Kubernetes + +The resources required for running the K3s are relatively small. Therefore, K3s is also applicable to development and testing scenarios. In these scenarios, K3s facilitates function verification and problem reproduction by shortening cluster startup time and reducing resources consumed by the cluster. + +## Deploying K3s + +### Step 1 Making Preparations + +- Ensure that the host names of the server node and agent node are different. + +You can run the `hostnamectl set-hostname "host name"` command to change the host name. + +```shell +hostnamectl set-hostname agent +``` + +- Install K3s on each node using Yum. + + The K3s official website provides binary executable files of different architectures and the **install.sh** script for offline installation. The openEuler community migrates the compile process of the binary file to the community and releases the compiled RPM package. You can run the `yum` command to download and install K3s. + + ```shell + yum install k3s + ``` + +### Step 2 Deploying the Server Node + +To install K3s on a single server, run the following command on the server node: + +```shell +INSTALL_K3S_SKIP_DOWNLOAD=true k3s-install.sh +``` + +![1661825352724](./figures/server-install.png) + +### Step 3 Checking Server Deployment + + ```shell + kubectl get nodes + ``` + +### Step 4 Deploying the Agent Node + +Query the token value of the server node. The token is stored in the **/var/lib/rancher/k3s/server/node-token** file on the server node. + +> **Note:** +> +> Only the second half of the token is used. + +![1661825538264](./figures/token.png) + +Run the following command on each agent node to open required ports and add agents: + +```shell +firewall-cmd --add-port=6443/tcp --zone=public --permanent +firewall-cmd --add-port=8472/udp --zone=public --permanent +firewall-cmd --reload +INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken k3s-install.sh +``` + +> **Note:** +> +> Replace **myserver** with the IP address of the server or a valid DNS, and replace **mynodetoken** with the token of the server node. + +![1661829392357](./figures/agent-install.png) + +### Step 5 Checking Agent Deployment + +After the installation is complete, run `kubectl get nodes` on the server node to check whether the agent node is successfully registered. + +A basic K3s cluster is set up. + +## Deploying the First Nginx Service on K3s + +### Step 1 Creating a Deployment + +In Kubernetes, a deployment is used to deploy applications. Create and edit the **deployment.yml** file as follows: + +```yml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment + labels: + app: nginx +spec: + replicas: 1 + selector: + matchLabels: + app: nginx + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:alpine + ports: + - containerPort: 80 + +``` + +Configure **deployment.yml** and run the `kubectl apply` command to create a deployment. + +```shell +[root@k3s-server home]# kubectl apply -f deployment.yml +``` + +![apply-deployment](figures/apply-deployment.png) + +After the deployment is created, check whether the pods are in the running state. + +```shell +[root@k3s-server home]# kubectl get pods +``` + +![get-pods](figures/get-pods.png) + +### Step 2 Creating a Service + +After the deployment is created, the Nginx service is only deployed. You need to enable the Nginx service to provide services externally. Create and edit the **service.yml** file as follows: + +```yml +apiVersion: v1 +kind: Service +metadata: + name: nginx-service +spec: + selector: + app: nginx + ports: + - protocol: TCP + port: 80 + targetPort: 80 + nodePort: 30080 + type: NodePort + +``` + +Configure the **service.yml** file and run the `kubectl apply` command to create a service. + +```shell +[root@k3s-server home]# kubectl apply -f service.yml +``` + +![apply-service](figures/apply-service.png) + +### Step 3 Viewing Service Information + +```shell +[root@k3s-server home]# kubectl describe service nginx-service +``` + +![describe-service](figures/describe-service.png) + +### Step 4 Accessing the Service + +Run the `curl` command on the intranet to access the server. The command output shows that the Nginx service has been enabled to provide services externally. + +![curl-nginx](figures/curl-nginx.png) + +An Nginx service is running in the cluster. + +## More + +For details about how to use K3s, visit the K3s official website at . diff --git a/docs/en/edge_computing/kube_edge/_toc.yaml b/docs/en/edge_computing/kube_edge/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..012b27bd78b4ac5072694aa1eb058f8249c556d5 --- /dev/null +++ b/docs/en/edge_computing/kube_edge/_toc.yaml @@ -0,0 +1,8 @@ +label: KubeEdge User Guide +isManual: true +description: KubeEdge brings Kubernetes functionalities to edge environments +sections: + - label: KubeEdge User Guide + href: ./kube_edge_user_document.md + - label: KubeEdge Deployment Guide + href: ./kube_edge_deployment_guide.md \ No newline at end of file diff --git a/docs/en/edge_computing/kube_edge/figures/en-us_image_1706077646.png b/docs/en/edge_computing/kube_edge/figures/en-us_image_1706077646.png new file mode 100644 index 0000000000000000000000000000000000000000..985f2c1c269caa94ed64c74fed127e73d7150150 Binary files /dev/null and b/docs/en/edge_computing/kube_edge/figures/en-us_image_1706077646.png differ diff --git a/docs/en/edge_computing/kube_edge/figures/en-us_image_1706077675.png b/docs/en/edge_computing/kube_edge/figures/en-us_image_1706077675.png new file mode 100644 index 0000000000000000000000000000000000000000..13a956dc53b24de56ef45cfecbd242fb8660cfc1 Binary files /dev/null and b/docs/en/edge_computing/kube_edge/figures/en-us_image_1706077675.png differ diff --git a/docs/en/edge_computing/kube_edge/figures/en-us_image_1706077688.png b/docs/en/edge_computing/kube_edge/figures/en-us_image_1706077688.png new file mode 100644 index 0000000000000000000000000000000000000000..96c6ddaa1766d808b25476e7dca837547c13798f Binary files /dev/null and b/docs/en/edge_computing/kube_edge/figures/en-us_image_1706077688.png differ diff --git a/docs/en/edge_computing/kube_edge/figures/en-us_image_1706077702.png b/docs/en/edge_computing/kube_edge/figures/en-us_image_1706077702.png new file mode 100644 index 0000000000000000000000000000000000000000..14eb7b713a8e6f77a8db1b676a71192a7c054a88 Binary files /dev/null and b/docs/en/edge_computing/kube_edge/figures/en-us_image_1706077702.png differ diff --git a/docs/en/edge_computing/kube_edge/figures/en-us_image_1706077716.png b/docs/en/edge_computing/kube_edge/figures/en-us_image_1706077716.png new file mode 100644 index 0000000000000000000000000000000000000000..253d38a4bd5a72f0a09e2d041c703f57c46aecb7 Binary files /dev/null and b/docs/en/edge_computing/kube_edge/figures/en-us_image_1706077716.png differ diff --git a/docs/en/edge_computing/kube_edge/figures/en-us_image_1706077729.png b/docs/en/edge_computing/kube_edge/figures/en-us_image_1706077729.png new file mode 100644 index 0000000000000000000000000000000000000000..dc6d36341bba235ba080a08fe5ded2b21b5dc5db Binary files /dev/null and b/docs/en/edge_computing/kube_edge/figures/en-us_image_1706077729.png differ diff --git a/docs/en/edge_computing/kube_edge/kube_edge_deployment_guide.md b/docs/en/edge_computing/kube_edge/kube_edge_deployment_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..b7a0e760b40af286590586d2aea294313b02c958 --- /dev/null +++ b/docs/en/edge_computing/kube_edge/kube_edge_deployment_guide.md @@ -0,0 +1,237 @@ +# KubeEdge Deployment Guide + +## Description + +### KubeEdge + +KubeEdge is an open source system dedicated to solving problems in edge scenarios. It extends the capabilities of containerized application orchestration and device management to edge devices. Based on Kubernetes, KubeEdge provides core infrastructure support for networks, application deployment, and metadata synchronization between the cloud and the edge. KubeEdge supports MQTT and allows for custom logic to enable communication for the resource-constrained devices at the edge. KubeEdge consists of components deployed on the cloud and edge nodes. The components are now open source. + +> + +### iSulad + +iSulad is a lightweight container runtime daemon designed for IoT and cloud infrastructure. It is lightweight, fast, and is not restricted by hardware specifications or architectures. It is suitable for wide application in various scenarios, such as cloud, IoT, and edge computing. + +> + +## Cluster Overview + +### Component Versions + +| Component | Version | +| ---------- | --------------------------------- | +| OS | openEuler 22.03 LTS SP4 | +| Kubernetes | 1.20.2-16 | +| iSulad | 2.1.2 | +| KubeEdge | v1.8.0 | + +### Node Planning Example + +| Node | Location | Components | +| -------------- | -------- | -------------------------------- | +| cloud.kubeedge | Cloud | Kubernetes (Master), iSulad, CloudCore | +| edge.kubeedge | Edge | iSulad, EdgeCore | + +> Note: You can run the `hostnamectl set-hostname [cloud,edge].kubeedge` command to set the cloud and edge node names in advance. + +## Preparations + +### Tool Package Download + +[kubeedge-tools](https://gitee.com/Poorunga/kubeedge-tools) provides complete offline installation packages and deployment scripts for easy and quick KubeEdge cluster deployment even if the node cannot access the Internet. + +```bash +# Download and decompress the kubeedge-tools package on both the cloud and edge nodes. +$ wget -O kubeedge-tools.zip https://gitee.com/Poorunga/kubeedge-tools/repository/archive/master.zip +$ unzip kubeedge-tools.zip + +# Go to the kubeedge-tools directory for all the subsequent operations. +$ cd kubeedge-tools-master +``` + +### Kubernetes Deployment + +Perform the following operations on the cloud node only. + +#### Initializing the Cloud Environment + +```bash +$ ./setup-cloud.sh +``` + +#### Deploying Kubernetes + +Deploy Kubernetes by referring to the [Kubernetes Cluster Deployment Guide](https://docs.openeuler.org/en/docs/21.09/docs/Kubernetes/Kubernetes.html). + +> Note: Preferentially, use `kubeadm` to deploy Kubernetes if the cloud node has access to the Internet. The procedure is as follows: + +```bash +$ kubeadm init --apiserver-advertise-address=[cloud_node_IP_address] --kubernetes-version v1.20.15 --pod-network-cidr=10.244.0.0/16 --upload-certs --cri-socket=/var/run/isulad.sock +... +Your Kubernetes control-plane has initialized successfully! +... + +# After Kubernetes is installed, copy the specified file to the directory as prompted. +# mkdir -p $HOME/.kube +# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config +# sudo chown $(id -u):$(id -g) $HOME/.kube/config +``` + +#### Configuring Network for the Cloud Container + +Container Network Interface (CNI) software that provides network for Kubernetes nodes include [flannel](https://github.com/flannel-io/flannel), [Calico](https://github.com/projectcalico/calico), [Cilium](https://github.com/cilium/cilium), and more. If you have not decided which CNI software to use, run the following command to configure network for the cloud container: + +```bash +$ ./install-flannel-cloud.sh +``` + +#### Checking Deployment Status + +```bash +# Check whether the node status is normal (Ready) +$ kubectl get nodes +NAME STATUS ROLES AGE VERSION +cloud.kubeedge Ready control-plane,master 12m v1.20.2 + +# Check whether the Kubernetes components are normal (Running) +$ kubectl get pods -n kube-system +NAME READY STATUS RESTARTS AGE +coredns-74ff55c5b-4ptkh 1/1 Running 0 15m +coredns-74ff55c5b-zqx5n 1/1 Running 0 15m +etcd-cloud.kubeedge 1/1 Running 0 15m +kube-apiserver-cloud.kubeedge 1/1 Running 0 15m +kube-controller-manager-cloud.kubeedge 1/1 Running 0 15m +kube-flannel-cloud-ds-lvh4n 1/1 Running 0 13m +kube-proxy-2tcnn 1/1 Running 0 15m +kube-scheduler-cloud.kubeedge 1/1 Running 0 15m +``` + +## Deployment + +### CloudCore Deployment + +Perform the following operations on the cloud node only. + +#### Initializing the Cluster + +```bash +# Set --advertise-address to the IP address of the cloud node. +$ keadm init --advertise-address="cloud_node_IP_address" --kubeedge-version=1.8.0 +... +CloudCore started +``` + +#### Configuring CloudCore + +```bash +$ ./patch-cloud.sh +``` + +#### Checking Deployment Status + +```bash +# active (running) indicates a normal status +$ systemctl status cloudcore | grep running + Active: active (running) since Fri 2023-05-20 10:54:30 CST; 5min ago +``` + +CloudCore has been deployed on the cloud node. Then, deploy EdgeCore on the edge node. + +### EdgeCore Deployment + +Perform the following operations only on the edge node unless otherwise specified. + +#### Initializing the Edge Environment + +```bash +$ ./setup-edge.sh +``` + +#### Managing the Edge Node + +```bash +# Run the keadm gettoken command on the cloud node. +$ keadm gettoken +96058ab80ffbeb87fe58a79bfb19ea13f9a5a6c3076a17c00f80f01b406b4f7c.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDY0NDg4NzF9.1mJegWB7SUVjgf-OvAqILgbZXeMHR9eOzMxpNFc42SI +# Save this token for subsequent steps. + +# Run the keadm join command on the edge node. +# Set --cloudcore-ipport to the IP address and port number (10000) of the cloud node. Set --token to the token saved in the previous step. +$ keadm join --cloudcore-ipport=clou_node_IP_address:10000 --kubeedge-version=1.8.0 --token=96058ab80ffbeb87fe58a79bfb19ea13f9a5a6c3076a17c00f80f01b406b4f7c.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDY0NDg4NzF9.1mJegWB7SUVjgf-OvAqILgbZXeMHR9eOzMxpNFc42SI +... +KubeEdge edgecore is running... +``` + +#### Configuring EdgeCore + +```bash +$ ./patch-edge.sh +``` + +#### Configuring Network for the Edge Container + +If you have not decided which CNI software to use, run the following command to configure network for the edge container: + +```bash +# Run the command on the cloud node. +$ ./install-flannel-edge.sh +``` + +#### Checking Whether the Edge Node is Managed + +```bash +# Run the command on the cloud node. You can see that the edge node is added. +$ kubectl get nodes +NAME STATUS ROLES AGE VERSION +cloud.kubeedge Ready control-plane,master 1h v1.20.2 +edge.kubeedge Ready agent,edge 10m v1.19.3-kubeedge-v1.8.0 +``` + +The KubeEdge cluster has been deployed. Next, let's test the task delivery from the cloud to the edge. + +### Application Deployment + +Perform the following operations on the cloud node only. + +#### Deploying Nginx + +```bash +$ kubectl apply -f yamls/nginx-deployment.yaml +deployment.apps/nginx-deployment created + +# Check whether Nginx is deployed on the edge node and running. +$ kubectl get pod -owide | grep nginx +nginx-deployment-84b99f4bf-jb6sz 1/1 Running 0 30s 10.244.1.2 edge.kubeedge +``` + +#### Testing the Function + +```bash +# Access the IP address of Nginx on the edge node. +$ curl 10.244.1.2:80 + + + +Welcome to nginx! + + + +

Welcome to nginx!

+

If you see this page, the nginx web server is successfully installed and +working. Further configuration is required.

+ +

For online documentation and support please refer to +nginx.org.
+Commercial support is available at +nginx.com.

+ +

Thank you for using nginx.

+ + +``` + +The deployment of KubeEdge is complete. diff --git a/docs/en/edge_computing/kube_edge/kube_edge_user_document.md b/docs/en/edge_computing/kube_edge/kube_edge_user_document.md new file mode 100644 index 0000000000000000000000000000000000000000..6588dba88dcfddb0cfc38da8e8ff7e45a6b9afa4 --- /dev/null +++ b/docs/en/edge_computing/kube_edge/kube_edge_user_document.md @@ -0,0 +1,262 @@ +# KubeEdge Usage Guide + +KubeEdge extends the capabilities of Kubernetes to edge scenarios and provides infrastructure support for the network, application deployment, and metadata synchronization between the cloud and the edge. The usage of KubeEdge is the same as that of Kubernetes. In addition, KubeEdge supports the management and control of edge devices. The following example describes how to use KubeEdge to implement edge-cloud synergy. + +## 1. Preparations + +**Example: KubeEdge Counter Demo** + +The counter is a pseudo device. You can run this demo without any additional physical devices. The counter runs on the edge side. You can use the web interface on the cloud side to control the counter and get the counter value. + +For details, see . + +**1) This demo requires the KubeEdge v1.2.1 or later. In this example, the latest KubeEdge v1.8.0 is used.** + +```shell +$ kubectl get node +NAME STATUS ROLES AGE VERSION +ke-cloud Ready master 13h v1.20.2 +ke-edge1 Ready agent,edge 64s v1.19.3-kubeedge-v1.8.0 + +Note: In this document, the edge node ke-edge1 is used for verification. If you perform verification by referring to this document, you need to change the edge node name based on your actual deployment. +``` + +**2) Ensure that the following configuration items are enabled for the Kubernetes API server:** + +```shell +--insecuret-port=8080 +--insecure-bind-address=0.0.0.0 +``` + +You can modify the `/etc/kubernetes/manifests/kube-apiserver.yaml` file, and then restart the Pod of the Kubernetes API server component to make the modifications take effect. + +**3) Install the Go language.** + +```shell +[root@ke-cloud ~]# wget https://golang.google.cn/dl/go1.14.4.linux-amd64.tar.gz +[root@ke-cloud ~]# tar -zxvf go1.14.4.linux-amd64.tar.gz -C /usr/local +``` + +**4) Configure the Go environment.** + +```shell +[root@ke-cloud ~]# vim /etc/profile +``` + +Add the following to the end of the file: + +```shell +export GOROOT=/usr/local/go +export GOPATH=/data/gopath +export PATH=$PATH:$GOROOT/bin:$GOPATH/bin +``` + +**5) Apply the modifications.** + +```shell +[root@ke-cloud ~]# source /etc/profile +[root@ke-cloud ~]# mkdir -p /data/gopath && cd /data/gopath +[root@ke-cloud ~]# mkdir -p src pkg bin +``` + +**6) Download the sample code:** + +```shell +git clone https://github.com/kubeedge/examples.git $GOPATH/src/github.com/kubeedge/examples +``` + +## 2. Creating the Device Model and Device + +**1) Create the device model.** + +```shell +cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds +kubectl create -f kubeedge-counter-model.yaml +``` + +**2) Create the device.** + +Modify **matchExpressions** as required. + +```shell +$ cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds +$ vim kubeedge-counter-instance.yaml +apiVersion: devices.kubeedge.io/v1alpha1 +kind: Device +metadata: + name: counter + labels: + description: 'counter' + manufacturer: 'test' +spec: + deviceModelRef: + name: counter-model + nodeSelector: + nodeSelectorTerms: + - matchExpressions: + - key: 'kubernetes.io/hostname' + operator: In + values: + - ke-edge1 + +status: + twins: + - propertyName: status + desired: + metadata: + type: string + value: 'OFF' + reported: + metadata: + type: string + value: '0' + +$ kubectl create -f kubeedge-counter-instance.yaml +``` + +## 3. Deploying the Cloud Application + +**1) Modify the code.** + +The cloud application **web-controller-app** controls the edge application **pi-counter-app**. The default listening port of the cloud application is 80. Change the port number to 8089. + +```shell +$ cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/web-controller-app +$ vim main.go +package main + +import ( + "github.com/astaxie/beego" + "github.com/kubeedge/examples/kubeedge-counter-demo/web-controller-app/controller" +) + +func main() { + beego.Router("/", new(controllers.TrackController), "get:Index") + beego.Router("/track/control/:trackId", new(controllers.TrackController), "get,post:ControlTrack") + + beego.Run(":8089") +} +``` + +**2) Build the image.** + +Note: When building the image, copy the source code to the path specified by **GOPATH**. Disable Go modules if they are enabled. + +```shell +make all +make docker +``` + +**3) Deploy web-controller-app.** + +```shell +cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds +kubectl apply -f kubeedge-web-controller-app.yaml +``` + +## 4. Deploying the Edge Application + +The **pi-counter-app** application on the edge is controlled by the cloud application. The edge application communicates with the MQTT server to perform simple counting. + +**1) Modify the code and build the image.** + +Change the value of **GOARCH** to **amd64** in `Makefile` to run the container. + +```shell +$ cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/counter-mapper +$ vim Makefile +.PHONY: all pi-execute-app docker clean +all: pi-execute-app + +pi-execute-app: + GOARCH=amd64 go build -o pi-counter-app main.go + +docker: + docker build . -t kubeedge/kubeedge-pi-counter:v1.0.0 + +clean: + rm -f pi-counter-app + +$ make all +$ make docker +``` + +**2) Deploy pi-counter-app.** + +```shell +$ cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds +$ kubectl apply -f kubeedge-pi-counter-app.yaml + +Note: To prevent Pod deployment from being stuck at `ContainerCreating`, run the docker save, scp, and docker load commands to release the image to the edge. + +$ docker save -o kubeedge-pi-counter.tar kubeedge/kubeedge-pi-counter:v1.0.0 +$ scp kubeedge-pi-counter.tar root@192.168.1.56:/root +$ docker load -i kubeedge-pi-counter.tar +``` + +## 5. Trying the Demo + +Now, the KubeEdge Demo is deployed on the cloud and edge as follows: + +```shell +$ kubectl get pods -o wide +NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES +kubeedge-counter-app-758b9b4ffd-f8qjj 1/1 Running 0 26m 192.168.1.66 ke-cloud +kubeedge-pi-counter-c69698d6-rb4xz 1/1 Running 0 2m 192.168.1.56 ke-edge1 +``` + +Let's test the running effect of the Demo. + +**1) Execute the ON command.** +On the web page, select **ON** and click **Execute**. You can run the following command on the edge node to view the execution result: + +```shell +docker logs -f counter-container-id +``` + +![](./figures/en-us_image_1706077646.png)/figures/en-us_image_1706077646.png + +![](./figures/en-us_image_1706077675.png) + +![en-us_image_1706077688](./figures/en-us_image_1706077688.png) + +**2) Check the counter's STATUS.** +On the web page, select **STATUS** and click **Execute**. The current counter status is displayed on the web page. + +![en-us_image_1706077702](./figures/en-us_image_1706077702.png) + +**3) Execute the OFF command.** +On the web page, select **OFF** and click **Execute**. You can run the following command on the edge node to view the execution result: + +```shell +docker logs -f counter-container-id +``` + +![zh-cn_image_1706077716](./figures/en-us_image_1706077716.png) + +![zh-cn_image_1706077729](./figures/en-us_image_1706077729.png) + +## 6. Others + +**1) For more official KubeEdge examples, visit .** + +| Name | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| [LED-RaspBerry-Pi](https://github.com/kubeedge/examples/blob/master/led-raspberrypi/README.md) | Controlling a LED light with Raspberry Pi using KubeEdge platform | +| [Data Analysis @ Edge](https://github.com/kubeedge/examples/blob/master/apache-beam-analysis/README.md) | Analyzing data at edge by using Apache Beam and KubeEdge | +| [Security@Edge](https://github.com/kubeedge/examples/blob/master/security-demo/README.md) | Security at edge using SPIRE for identity management | +| [Bluetooth-CC2650-demo](https://github.com/kubeedge/examples/blob/master/bluetooth-CC2650-demo/README.md) | Controlling a CC2650 SensorTag bluetooth device using KubeEdge platform | +| [Play Music @Edge through WeChat](https://github.com/kubeedge/examples/blob/master/wechat-demo/README.md) | Play music at edge based on WeChat and KubeEdge | +| [Play Music @Edge through Web](https://github.com/kubeedge/examples/blob/master/web-demo/README.md) | Play music at edge based on Web and KubeEdge | +| [Collecting temperature @Edge](https://github.com/kubeedge/examples/blob/master/temperature-demo/README.md) | Collecting temperature at edge based KubeEdge | +| [Control pseudo device counter and collect data](https://github.com/kubeedge/examples/blob/master/kubeedge-counter-demo/README.md) | Control pseudo device counter and collect data based KubeEdge | +| [Play Music @Edge through Twitter](https://github.com/kubeedge/examples/blob/master/ke-twitter-demo/README.md) | Play music at edge based on Twitter and KubeEdge. | +| [Control Zigbee @Edge through cloud](https://github.com/kubeedge/examples/blob/master/kubeedge-edge-ai-application/README.md) | Object detection at cloud using OpenCV and using it to control zigbee on edge using Kubeedge. | + +**2) Use EdgeMesh to discover edge services.** + + + +**3) Customize the cloud-edge message route.** + + diff --git a/docs/en/edge_computing/ros/_toc.yaml b/docs/en/edge_computing/ros/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2da6caae96169468dd6646dcceeedce047c01e8c --- /dev/null +++ b/docs/en/edge_computing/ros/_toc.yaml @@ -0,0 +1,16 @@ +label: ROS User Guide +isManual: true +description: Install, deploy, and use ROS on openEuler +sections: + - label: ROS User Guide + href: ./ros_user_guide.md + - label: Getting to Know ROS + href: ./getting_to_know_ros.md + - label: Installation and Deployment + href: ./installation_and_deployment.md + - label: Usage + href: ./usage_guide.md + - label: Appendix + href: ./appendix.md + - label: FAQs + href: ./faqs.md \ No newline at end of file diff --git a/docs/en/edge_computing/ros/appendix.md b/docs/en/edge_computing/ros/appendix.md new file mode 100644 index 0000000000000000000000000000000000000000..b1bb73b54cf7dcbbb8c4c734ebfdbca79d4dfbf3 --- /dev/null +++ b/docs/en/edge_computing/ros/appendix.md @@ -0,0 +1,3 @@ +# Appendix + +A more detailed introduction to ROS can be found at [ROS wiki](https://wiki.ros.org/), [ROS docs](http://docs.ros.org/). diff --git a/docs/en/edge_computing/ros/faqs.md b/docs/en/edge_computing/ros/faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..78fa74ad0de6dbc7e740b53dd6ff7ff1dde0d728 --- /dev/null +++ b/docs/en/edge_computing/ros/faqs.md @@ -0,0 +1,20 @@ +# FAQs + +## Question 1 + +![](./figures/problem.png) + +Cause: The reason for this warning is that there are both ROS1 and ROS2 in the environment variable. +Solution: Modify the environment variable to avoid the conflict between the two versions. + +```shell +vim /opt/ros/humble/share/ros_environment/environment/1.ros_distro.sh +``` + +```shell +# generated from ros_environment/env-hooks/1.ros_distro.sh.in + +#export ROS_DISTRO=humble +``` + +Comment out everything inside. diff --git a/docs/en/edge_computing/ros/figures/ROS-ROS2.png b/docs/en/edge_computing/ros/figures/ROS-ROS2.png new file mode 100644 index 0000000000000000000000000000000000000000..649c0aa93b0a3710f027ecf9df2482920f16301e Binary files /dev/null and b/docs/en/edge_computing/ros/figures/ROS-ROS2.png differ diff --git a/docs/en/edge_computing/ros/figures/ROS-demo.png b/docs/en/edge_computing/ros/figures/ROS-demo.png new file mode 100644 index 0000000000000000000000000000000000000000..184ae905d022e52adbac7fcee59d956903e1ff5c Binary files /dev/null and b/docs/en/edge_computing/ros/figures/ROS-demo.png differ diff --git a/docs/en/edge_computing/ros/figures/ROS-release.png b/docs/en/edge_computing/ros/figures/ROS-release.png new file mode 100644 index 0000000000000000000000000000000000000000..bf7c1cb7b2b0b60ec375613d32e09ecd0a9174d0 Binary files /dev/null and b/docs/en/edge_computing/ros/figures/ROS-release.png differ diff --git a/docs/en/edge_computing/ros/figures/ROS2-release.png b/docs/en/edge_computing/ros/figures/ROS2-release.png new file mode 100644 index 0000000000000000000000000000000000000000..dc606412c467714af1d05c92b244ecfef63664f6 Binary files /dev/null and b/docs/en/edge_computing/ros/figures/ROS2-release.png differ diff --git a/docs/en/edge_computing/ros/figures/problem.png b/docs/en/edge_computing/ros/figures/problem.png new file mode 100644 index 0000000000000000000000000000000000000000..9f690fb99cac9b957a6601b6eca3a011bee12273 Binary files /dev/null and b/docs/en/edge_computing/ros/figures/problem.png differ diff --git a/docs/en/edge_computing/ros/figures/ros-humble.png b/docs/en/edge_computing/ros/figures/ros-humble.png new file mode 100644 index 0000000000000000000000000000000000000000..a6079358d9df9b983d82679af067a634fe5c05c3 Binary files /dev/null and b/docs/en/edge_computing/ros/figures/ros-humble.png differ diff --git a/docs/en/edge_computing/ros/figures/turtlesim.png b/docs/en/edge_computing/ros/figures/turtlesim.png new file mode 100644 index 0000000000000000000000000000000000000000..ebc8368f7e8e6a4b44075ad402b492638d636181 Binary files /dev/null and b/docs/en/edge_computing/ros/figures/turtlesim.png differ diff --git a/docs/en/edge_computing/ros/getting_to_know_ros.md b/docs/en/edge_computing/ros/getting_to_know_ros.md new file mode 100644 index 0000000000000000000000000000000000000000..83f31fa65a3440734c2992f9d7d89b5d947d8369 --- /dev/null +++ b/docs/en/edge_computing/ros/getting_to_know_ros.md @@ -0,0 +1,33 @@ +# Introduction to ROS + +## Introduction + +ROS is an open source meta-operating system for robotics. It provides the services that an operating system should have, including hardware abstraction, low-level device control, implementation of common functions, inter-process message passing, and package management. It also provides the tools and library functions needed to fetch, compile, write, and run code across computers. + +ROS's operating architecture is a processing architecture that uses ROS communication modules to implement loosely coupled network connections between modules [P2P](https://en.wikipedia.org/wiki/Peer-to-peer), which implements several types of communications, including: + +1. Service-based synchronous [RPC](https://en.wikipedia.org/wiki/Remote_procedure_call) (remote procedure call) communication; +2. Topic-based asynchronous data flow communication, as well as data storage on the parameter server. + +Since the beginning of ROS in 2007, along with the great development of robot technology, the core ideas and basic software packages of ROS have been gradually improved and different ROS distributions have been released. Below is a list of current and historical ROS releases, the rows marked in green in the table are the currently supported releases. + +![ROS release](./figures/ROS-release.png) + +Although ROS is still a powerful development tool in the field of robotics, due to the limitations of the initial design, many problems have gradually been exposed. For example: poor real-time performance, high system overhead, unfriendly support for Python3, no encryption mechanism and low security. Many developers and research institutions have also made improvements to address the limitations of ROS, but these local function improvements are often difficult to bring about overall performance improvements. At ROSCon 2014, the design architecture of the new generation of ROS (Next-generation ROS: Building on DDS) was officially announced. On August 31, 2015, the first alpha version of ROS2.0 was launched, and different release versions were released later. Below is a list of current and historical ROS2 releases, the rows marked in green in the table are currently supported releases. + +![ROS2 release](./figures/ROS2-release.png) + +## Architecture + +The overall architecture of ROS is shown in the figure below: + +![ROS architecture](./figures/ROS-ROS2.png) + +1. OS Layer + - ROS1 is mainly built on the Linux system, and ROS2 has brought changes. The systems supported include Linux, Windows, Mac, RTOS, and even bare metal without an operating system. +2. Middleware Layer + - One of the most important concepts in ROS is the "node" based on the publish/subscribe model, which allows developers to develop low-coupling functional modules in parallel and facilitates secondary reuse. The communication system of ROS1 is based on TCPROS/UDPROS, while the communication system of ROS2 is based on DDS. DDS is a standard solution for data publishing/subscribing in distributed real-time systems, which will be explained in detail in the next section. ROS2 provides an abstract layer implementation of DDS internally, and users do not need to pay attention to the underlying DDS provider. + - In the ROS1 architecture, Nodelet and TCPROS/UDPROS are parallel layers, providing a more optimized data transmission method for multiple nodes in the same process. This data transmission method is also retained in ROS2, but it is called "Intra-process", which is also independent of DDS. +3. Application Layer + + - ROS1 is strongly dependent on the ROS Master, and one can imagine what kind of dilemma the entire system will face once the Master goes down. But from the architecture of ROS2 on the right, we can find that the Master, which was a worry before, has finally disappeared, and nodes use a discovery mechanism called "Discovery" to obtain each other's information. diff --git a/docs/en/edge_computing/ros/installation_and_deployment.md b/docs/en/edge_computing/ros/installation_and_deployment.md new file mode 100644 index 0000000000000000000000000000000000000000..b8ee5a982d26c4dfc1abf7e2d59dc05e43a264a4 --- /dev/null +++ b/docs/en/edge_computing/ros/installation_and_deployment.md @@ -0,0 +1,176 @@ +# Installation and Deployment + +## Software + +* OS: openEuler 22.03 LTS SP4 + +## Hardware + +* x86_64 + +## Preparing the Environment + +* Install the openEuler OS by referring to the [*openEuler 22.03 LTS SP4 Installation Guide*](./../../server/installation_upgrade/installation/installation_guide.md). + +## 1. ROS2 + +### 1. ros-humble + +#### 1. Installing ros-humble + +1. Install ros-humble software package + + ```shell + yum install openeuler-ros + yum install ros-humble-ros-base ros-humble-xxx e.g. ros-humble-turtlesim + ``` + +2. Run the following command to check whether the installation is successful + + ```shell + rpm -q ros-humble + ``` + +#### 2. Test ros-humble + +##### Run turtlesim + +1. Run turtlesim + + ```shell + source /opt/ros/humble/setup.bash + ros2 run turtlesim turtlesim_node + ``` + +2. Open turtlesim terminal + + ```shell + source /opt/ros/humble/setup.bash + ros2 run turtlesim turtle_teleop_key + ``` + +3. Use the arrow keys to control the movement of the turtle + ![ros-humble](./figures/ros-humble.png) + +### 2. ros-foxy + +#### 1. Installing ros-foxy-ros-base + +1. Download the software package + + ```shell + wget http://121.36.3.168:82/home:/Chenjy3_22.03/openEuler_22.03_LTS_standard_x86_64/x86_64/ros-foxy-ros-base-0.9.2-2.oe2203.x86_64.rpm + ``` + +2. Install the rpm package + + ```shell + rpm -ivh --nodeps --force ros-foxy-ros-base-0.9.2-2.oe2203.x86_64.rpm + ``` + +3. Dependence installation + + ```shell + sh /opt/ros/foxy/install_dependence.sh + ``` + +4. Run the following command to check whether the installation is successful + + ```shell + rpm -q ros-foxy-ros-base + ``` + +#### 2. Test ros-foxy-ros-base + +##### Run turtlesim + +1. Run turtlesim + + ```shell + source /opt/ros/foxy/setup.bash + ros2 run turtlesim turtlesim_node + ``` + +2. Open turtlesim terminal + + ```shell + source /opt/ros/foxy/setup.bash + ros2 run turtlesim turtle_teleop_key + ``` + +3. Use the arrow keys to control the movement of the turtle + + ![ROS2-turtlesim](./figures/turtlesim.png) + +## 2. ROS + +### 1. ros-noetic + +#### 1. Installing ros-noetic-ros-comm + +1. Download the software package + + ```shell + wget http://121.36.3.168:82/home:/davidhan:/branches:/openEuler:/22.03:/LTS:/SP1:/Epol/standard_x86_64/x86_64/ros-noetic-ros-comm-1.15.11-2.oe2203.x86_64.rpm + ``` + +2. Install the rpm package + + ```shell + rpm -ivh --nodeps --force ros-noetic-ros-comm-1.15.11-2.oe2203.x86_64.rpm + ``` + +3. Dependence installation + + ```shell + sh /opt/ros/noetic/install_dependence.sh + ``` + +4. Run the following command to check whether the installation is successful + + ```shell + rpm -q ros-noetic-ros-comm + ``` + +#### 2. Test ros-noetic-ros-comm + +##### Run topic_demo + +1. Create and compile workspace + + ```shell + mkdir -p catkin_ws/src + cd catkin_ws/src/ + source /opt/ros/noetic/setup.bash + catkin_init_workspace + git clone https://gitee.com/davidhan008/topic_demo.git + cd .. + catkin_make + ``` + +2. run roscore + + ```shell + source /opt/ros/noetic/setup.bash + roscore + ``` + +3. run topic_demo talker + + ```shell + source /opt/ros/noetic/setup.bash + cd catkin_ws + source devel/setup.bash + rosrun topic_demo talker + ``` + +4. run topic_demo listener + + ```shell + source /opt/ros/noetic/setup.bash + cd catkin_ws + source devel/setup.bash + rosrun topic_demo listener + ``` + + ![ROS2-turtlesim](./figures/ROS-demo.png) diff --git a/docs/en/edge_computing/ros/ros_user_guide.md b/docs/en/edge_computing/ros/ros_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..2ce5f290bf08f1380a7fb7ee2b2dc659b6c9fa21 --- /dev/null +++ b/docs/en/edge_computing/ros/ros_user_guide.md @@ -0,0 +1,5 @@ +# ROS User Guide + +This document introduces the installation, deployment, and usage of Robot Operating System (ROS) on openEuler. + +This document is intended for developers, open-source enthusiasts, and partners who use the openEuler system and want to know and use ROS. You need to have basic knowledge of the Linux OS. diff --git a/docs/en/edge_computing/ros/usage_guide.md b/docs/en/edge_computing/ros/usage_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..61e9587ce2aa0406a8586fd7e4a978b25a606a0b --- /dev/null +++ b/docs/en/edge_computing/ros/usage_guide.md @@ -0,0 +1,56 @@ +# Usage + +## Using ROS + +ROS provides some useful command line tools, which can be used to obtain various information of different nodes. Commonly used commands are as follows: + +- rosnode : operation node +- rostopic : operation topic +- rosservice : operation service +- rosmsg : operation msg +- rossrv : operation srv msg +- rosparam : operation param + +Please also refer to: + + + +## Using ROS2 + +```shell +# Help information of the command +$ ros2 --help +usage: ros2 [-h] Call `ros2 -h` for more detailed usage. ... + +ros2 is an extensible command-line tool for ROS 2. + +optional arguments: + -h, --help show this help message and exit + +Commands: + action Various action related sub-commands + bag Various rosbag related sub-commands + component Various component related sub-commands + daemon Various daemon related sub-commands + doctor Check ROS setup and other potential issues + interface Show information about ROS interfaces + launch Run a launch file + lifecycle Various lifecycle related sub-commands + multicast Various multicast related sub-commands + node Various node related sub-commands + param Various param related sub-commands + pkg Various package related sub-commands + run Run a package specific executable + security Various security related sub-commands + service Various service related sub-commands + test Run a ROS2 launch test + topic Various topic related sub-commands + trace Trace ROS nodes to get information on their execution + wtf Use `wtf` as alias to `doctor` + + Call `ros2 -h` for more detailed usage. +``` + +## Precautions + +- You need to run the `source /opt/ros/foxy/local_setup.bash` or `source /opt/ros/noetic/setup.bash` command on a newly opened terminal. diff --git a/docs/en/embedded/_toc.yaml b/docs/en/embedded/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2851b78aa6ec0d5cf3e664cb33726a34a51e9ab6 --- /dev/null +++ b/docs/en/embedded/_toc.yaml @@ -0,0 +1,6 @@ +label: Embedded +sections: + - label: openEuler Embedded User Guide + href: https://pages.openeuler.openatom.cn/embedded/docs/build/html/master/index.html + description: openEuler Embedded is a lightweight, secure, real-time OS tailored for embedded environments, with support for various hardware architectures + - href: ./uniproton/_toc.yaml \ No newline at end of file diff --git a/docs/en/embedded/uniproton/_toc.yaml b/docs/en/embedded/uniproton/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b254d4e44c26ccb24dd7ef35303c0c37fd0a5d05 --- /dev/null +++ b/docs/en/embedded/uniproton/_toc.yaml @@ -0,0 +1,10 @@ +label: UniProton User Guide +isManual: true +description: UniProton is an OS tailored for embedded environments. It offers task and memory management, interrupt handling, and advanced debugging features. +sections: + - label: Overview + href: ./overview.md + - label: UniProton Feature Design + href: ./uniproton_functions.md + - label: UniProton Interfaces + href: ./uniproton_apis.md diff --git a/docs/en/embedded/uniproton/figures/FCS.png b/docs/en/embedded/uniproton/figures/FCS.png new file mode 100644 index 0000000000000000000000000000000000000000..afb47c557755c10a3f0b196b7080b16a0f86ab6a Binary files /dev/null and b/docs/en/embedded/uniproton/figures/FCS.png differ diff --git a/docs/en/embedded/uniproton/figures/MemoryApplication.png b/docs/en/embedded/uniproton/figures/MemoryApplication.png new file mode 100644 index 0000000000000000000000000000000000000000..de46581c40122a82b92db8a67ae3fcd76a97041a Binary files /dev/null and b/docs/en/embedded/uniproton/figures/MemoryApplication.png differ diff --git a/docs/en/embedded/uniproton/figures/MemoryRelease.png b/docs/en/embedded/uniproton/figures/MemoryRelease.png new file mode 100644 index 0000000000000000000000000000000000000000..f91c89bb02311f104949e2af42cddc4a3faaaca3 Binary files /dev/null and b/docs/en/embedded/uniproton/figures/MemoryRelease.png differ diff --git a/docs/en/embedded/uniproton/figures/pend_semaphore.png b/docs/en/embedded/uniproton/figures/pend_semaphore.png new file mode 100644 index 0000000000000000000000000000000000000000..59d8159d1ff1cecb43f59cc5d7c5a9900db8e767 Binary files /dev/null and b/docs/en/embedded/uniproton/figures/pend_semaphore.png differ diff --git a/docs/en/embedded/uniproton/figures/post_semaphore.png b/docs/en/embedded/uniproton/figures/post_semaphore.png new file mode 100644 index 0000000000000000000000000000000000000000..fa08d76dafd335b60838dda08db61ccadd8c6b8d Binary files /dev/null and b/docs/en/embedded/uniproton/figures/post_semaphore.png differ diff --git a/docs/en/embedded/uniproton/overview.md b/docs/en/embedded/uniproton/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..91c1d4e802b8616c7ee99e983d6ecf45408b40d3 --- /dev/null +++ b/docs/en/embedded/uniproton/overview.md @@ -0,0 +1,11 @@ +# UniProton User Guide + +## Introduction + +UniProton is an operating system (OS) for embedded scenarios provided by the openEuler community. It aims to build a high-quality OS platform that shields underlying hardware differences for upper-layer service software and provides powerful debugging functions. UniProton allows service software to be quickly ported to different hardware platforms, facilitates chip selection, and reduces costs for hardware procurement and software maintenance. + +This document describes the basic functions and APIs of UniProton. + +## Compilation + +For details about compilation, see . diff --git a/docs/en/embedded/uniproton/uniproton_apis.md b/docs/en/embedded/uniproton/uniproton_apis.md new file mode 100644 index 0000000000000000000000000000000000000000..8e8ae10187b8253da0a4f25aa943ae46d8d6598e --- /dev/null +++ b/docs/en/embedded/uniproton/uniproton_apis.md @@ -0,0 +1,3 @@ +# UniProton APIs + +This document is currently not available in English. diff --git a/docs/en/embedded/uniproton/uniproton_functions.md b/docs/en/embedded/uniproton/uniproton_functions.md new file mode 100644 index 0000000000000000000000000000000000000000..33eb51fb7abdf83a0acba4538e5e01d614c23348 --- /dev/null +++ b/docs/en/embedded/uniproton/uniproton_functions.md @@ -0,0 +1,151 @@ +# UniProton Feature Design + +## Task Management + +UniProton is a single-process multi-thread operating system (OS). In UniProton, a task represents a thread. Tasks in UniProton are scheduled in preemption mode instead of time slice rotation scheduling. High-priority tasks can interrupt low-priority tasks. Low-priority tasks can be scheduled only after high-priority tasks are suspended or blocked. + +A total of 32 priorities are defined, with priority 0 being the highest and 31 being the lowest. Multiple tasks can be created in a priority. + +The task management module of UniProton provides the following functions: Creates, deletes, suspends, resumes, and delays tasks; Locks and unlocks task scheduling; Obtains the current task ID; Obtains and sets task private data; Query the pending semaphore ID of a specified task; Query the status, context, and general information of a specified task; Obtains and sets task priorities; Adjusts the task scheduling order of a specified priority; Register and unregister hooks for task creation, deletion, and switching. During initialization, UniProton creates an idle task with the lowest priority by default. When no task is in the running status, the idle task is executed. + +## Event Management + +The event mechanism enables communication between threads. Event communication can only be event notifications and no data is transmitted. + +As an extension of tasks, events allow tasks to communicate with each other. Each task supports 32 event types, each represented by a bit of a 32-bit value. + +UniProton can read current task events and write specified task events. Multiple event types can be read or written at one time. + +## Queue Management + +A queue, also called message queue, is a method commonly used for inter-thread communication to store and transfer data. Data can be written to the head or tail of a queue based on the priority, but can be read only from the head of a queue. + +When creating a queue, UniProton allocates memory space for the queue based on the queue length and message unit size input by the user. The queue control block contains **Head** and **Tail** pointers, which indicate the storage status of data in a queue. **Head** indicates the start position of occupied message nodes in the queue. **Tail** indicates the end position of the occupied message nodes in the queue. + +## Hard Interrupt Management + +A hardware interrupt is a level signal that is triggered by hardware and affects system running. A hardware interrupt is used to notify the CPU of a hardware event. Hardware interrupts include maskable interrupts and non-maskable interrupts (NMIs). + +Hardware interrupts have different internal priorities, but they all have a higher priority than other tasks. When multiple hardware interrupts are triggered at the same time, the hardware interrupt with the highest priority is always responded first. Whether a high-priority hardware interrupt can interrupt a low-priority hardware interrupt that is being executed (that is, nested interrupts) depends on the chip platform. + +The OS creates a tick hardware interrupt during initialization for task delay and software timer purposes. The tick is essentially a hardware timer. + +## Memory Management + +Memory management is to dynamically divide and manage large memory areas allocated by users. When a section of a program needs to use the memory, the program calls the memory application function of the OS to obtain the memory block of a specified size. After using the memory, the program calls the memory release function to release the occupied memory. + +UniProton provides the FSC memory algorithm. The following table lists the advantages, disadvantages, and application scenarios of FSC. + +| Algorithm | Advantages | Disadvantages | Application Scenarios | +| :----------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------ | ------------------------------------ | +| Private FSC algorithm| The memory control block information occupies a small amount of memory. The minimum 4-byte-aligned memory block size can be applied for. Adjacent memory blocks can be quickly split and merged without creating memory fragmentation.| The efficiency of memory application and release is low.| It can flexibly adapt to various product scenarios.| + +The FSC memory algorithm is described as follows: + +### FSC Memory Algorithm + +#### Core Idea + +The size of the requested memory is **uwSize**. If the size is in binary, it is expressed as **0b{0}1xxx**. **{0}** indicates that there may be one or more zeros before **1**. Regardless of the content of following **1** (**xxx**), if **1** is changed to **10** and **xxx** is changed to **0**, **10yyy** is always greater than **1xxx** (**yyy** indicates that the corresponding bits of **xxx** are changed to **0**). + +The subscript of the leftmost 1 can be directly obtained. The subscript values are 0 to 31 from the most significant bit to the least significant bit (BitMap), or 0 to 31 from the least significant bit to the most significant bit (uwSize). If the subscripts of the bits of the 32-bit register are 0 to 31 from the most significant bit to the least significant bit, the subscript of the leftmost 1 of 0x80004000 is 0. Therefore, we can maintain an idle linked list header array (the number of elements does not exceed 31). The subscript of the leftmost 1 of the memory block size is used as the index of the linked list header array. That is, all memory blocks with the same subscript of the leftmost 1 are mounted to the same idle linked list. + +For example, the sizes of idle blocks that can be mounted to the linked list whose index is 2 are 4, 5, 6, and 7, and the sizes of idle blocks that can be mounted to the linked list whose index is N are 2^N to 2^(N+1)-1. + +![](./figures/FCS.png) + +#### Memory Application + +When applying for the memory of uwSize, use assembly instructions to obtain the subscript of the leftmost 1 first. Assume that the subscript is **n**. To ensure that the first idle memory block in the idle linked list meets the uwSize requirement, the search starts from the index n+1. If the idle linked list of index n+1 is not empty, the first idle block in the linked list is used. If the linked list of n+1 is empty, the linked list of n+2 is checked, and so on, until a non-empty linked list is found or the index reaches 31. + +A 32-bit BitMap global variable is defined to prevent the for loop from checking whether the idle linked list is empty recursively. If the idle linked list of n is not empty, the value whose subscript is n of BitMap is set to 1. Otherwise, the value is set to 0. The bit whose subscript is 31 of the BitMap is directly set to 1 during initialization. Therefore, the first non-idle linked list is searched from linked list of n+1. Bits 0 to n of the BitMap copy can be cleared first, and then a subscript of the leftmost 1 of the copy is obtained. If the subscript is not equal to 31, the subscript is the array index of the first non-empty idle linked list. + +All idle blocks are connected in series in the form of a bidirectional idle linked list. If the first idle block obtained from the linked list is large, that is, after a usSize memory block is split, the remaining space can be allocated at least once, The remaining idle blocks are added to the corresponding idle linked list. + +![](./figures/MemoryApplication.png) + +The memory control header records the size of the idle memory block (including the control header itself). The memory control header contains a reused member at the beginning. When a memory block is idle, it is used as a pointer to the next idle memory block. When a memory block is occupied, it stores a magic number, indicating that the memory block is not idle. To prevent the magic number from conflicting with the pointer (same as the address value), the upper and lower four bits of the magic number are 0xf. The start addresses of the allocated memory blocks are 4-byte-aligned. Therefore, no conflict occurs. + +#### Memory Release + +When the memory is released, adjacent idle blocks are combined. First, the validity of the address parameter (**pAddr**) is determined by checking the magic number in the control header. The start address of the control header of the next memory block is obtained by adding the start address to the offset value. If the next memory block is idle, the next memory block is deleted from the idle linked list to which it belongs, and the size of the current memory block is adjusted. + +To quickly find the control header of the previous memory block and determine whether the previous memory block is idle during memory release, a member is added to the memory control header to mark whether the previous memory block is idle. When the memory is applied for, the flag of the next memory block can be set to the occupied state (if the idle memory block is divided into two, and the previous memory block is idle, the flag of the current memory block is set to the idle state). When the memory is released, the flag of the next memory block is set to the idle state. When the current memory is released, if the previous memory block is marked as occupied, the previous memory block does not need to be merged; if the previous memory block is marked as idle, the previous memory block needs to be merged. If a memory block is idle, the flag of the next control block is set to the distance to the current control block. + + ![](./figures/MemoryRelease.png) + +## Timer Management + +UniProton provides the software timer function to meet the requirements of timing services. + +Software timers are based on the tick interrupts. Therefore, the period of a timer must be an integral multiple of the tick. The timeout scanning of the software timer is performed in the tick handler function. + +Currently, the software timer interface can be used to create, start, stop, restart, and delete timers. + +## Semaphore Management + +A semaphore is typically used to coordinate a group of competing tasks to access to critical resources. When a mutex is required, the semaphore is used as a critical resource counter. Semaphores include intra-core semaphores and inter-core semaphores. + +The semaphore object has an internal counter that supports the following operations: + +- Pend: The Pend operation waits for the specified semaphore. If the counter value is greater than 0, it is decreased by 1 and a success message is returned. If the counter value of the semaphore is 0, the requesting task is blocked until another task releases the semaphore. The amount of time the task will wait for the semaphore is user configurable. + +- Post: The Post operation releases the specified semaphore. If no task is waiting for the semaphore, the counter is incremented by 1 and returned. Otherwise, the first task (the earliest blocked task) in the list of tasks pending for this semaphore is woken up. + +The counter value of a semaphore corresponds to the number of available resources. It means mutually exclusive resources remained that could be occupied. The counter value can be: + +- 0, indicating that there is no accumulated post operation, and there may be a task blocked on the semaphore. + +- A positive value, indicating that there are one or more post release operations. + +## Exception Management + +Exception takeover of UniProton is a maintenance and test feature that records as much information as possible when an exception occurs to facilitate subsequent fault locating. In addition, the exception hook function is provided so that users can perform special handling when an exception occurs. The exception takeover feature handles internal exceptions and external hardware exceptions. + +## CPU Usage Statistics + +The system CPU usage (CPU percentage, CPUP) in UniProton refers to the CPU usage of the system within a period of time. It reflects the CPU load and the system running status (idle or busy) in the given period of time. The valid range of the system CPUP is 0 to 10000, in basis points. 10000 indicates that the system is fully loaded. + +The thread CPUP refers to the CPU usage of a single thread. It reflects the thread status, busy or idle, in a period of time. The valid range of the thread CPUP is 0 to 10000, in basis points. 10000 indicates that the process is being executed for a period of time. The total CPUPs of all threads (including interrupts and idle tasks) in a single-core system is 10000. + +The system-level CPUP statistics of UniProton depends on the tick module, which is implemented by tick sampling idle tasks or idle software interrupt counter. + +## STM32F407ZGT6 Development Board Support + +The kernel peripheral startup process and board driver of UniProton supports the STM32F407ZGT6 development board. The directory structure is as follows: + +├─apps # Demo based on the real-time OS of UniProton +│ └─hello_world # hello_world example program +├─bsp # Board-level driver to interconnect with the OS +├─build # Build script to build the final image +├─config # Configuration items to adjust running parameters +├─include # APIs provided by the real-time OS of UniProton +└─libs # Static libraries of the real-time OS of UniProton. The makefile example in the build directory has prepared the reference of the header file and static libraries. + +## OpenAMP Hybrid Deployment + +OpenAMP is an open source software framework designed to standardize the interaction between environments in heterogeneous embedded systems through open source solutions based on asymmetric multi-processing. OpenAMP consists of the following components: + +1. Remoteproc manages the life cycle of the slave core, shared memory, and resources such as buffer and vring used for communication, and initializes RPMsg and virtio. +2. RPMsg enables multi-core communication based on virtio. +3. Virtio, which is a paravirtualization technology, uses a set of virtual I/Os to implement driver communication between the master and slave cores. +4. libmetal shields OS implementation details, provides common user APIs to access devices, and handles device interrupts and memory requests. + +## POSIX Standard APIs + +[UniProton supports POSIX standard APIs](./uniproton_apis.md). + +## Device Drivers + +UniProton's driver architecture follows a Linux-like approach, treating devices as files through its Virtual File System (VFS). Drivers register with the file system via registration interfaces, enabling applications to access hardware through standard system calls. Adapted from Nuttx's open-source RTOS driver module, the framework maintains Nuttx-compatible interfaces. The file_operations structure (defined in fs.h) stores device operation methods, while register_driver associates devices with their inode structures that describe node locations and data. System calls reference these inodes to locate corresponding driver functions. For interface specifications, see [UniProton APIs](./uniproton_apis.md). + +## Shell Commands + +UniProton features a shell interface for command-line interaction with OS services, parsing user input and processing system outputs. Adapted from LiteOS's shell module, it supports custom command creation (requiring recompilation). Current implementation includes only the help command, with more commands planned for future releases. + +| Interface | Description | +| :---: | :--: | +| SHELLCMD_ENTRY | Static command registration | +| osCmdReg | Dynamic command registration | + +Static registration (5 parameters) typically handles system commands, while dynamic registration (4 parameters) manages user commands. Both share four common parameters after the static method's unique first parameter. Details in [UniProton APIs](./uniproton_apis.md). diff --git a/docs/en/server/_toc.yaml b/docs/en/server/_toc.yaml index 22212782eb2932e1c35cad67cc0a67346bea5660..99dbc0cbc8dcbba27963179be428007bec95db4a 100644 --- a/docs/en/server/_toc.yaml +++ b/docs/en/server/_toc.yaml @@ -1 +1,69 @@ label: Server +sections: + - label: Getting Started + sections: + - href: /releasenotes/_toc.yaml + - href: ./quickstart/_toc.yaml + - label: Installation and Upgrade + sections: + - href: ./installation_upgrade/installation/_toc.yaml + - href: ./installation_upgrade/upgrade/_toc.yaml + - label: OS Administration + sections: + - href: ./administration/administrator/_toc.yaml + - href: ./administration/sysmaster/_toc.yaml + - href: ./administration/compa_command/_toc.yaml + - label: O&M + sections: + - href: ./maintenance/aops/_toc.yaml + - href: ./maintenance/gala/_toc.yaml + - href: ./maintenance/sysmonitor/_toc.yaml + - href: ./maintenance/kernel_live_upgrade/_toc.yaml + - href: ./maintenance/syscare/_toc.yaml + - href: ./maintenance/common_skills/_toc.yaml + - href: ./maintenance/common_tools/_toc.yaml + - href: ./maintenance/troubleshooting/_toc.yaml + - label: Security + sections: + - href: ./security/secharden/_toc.yaml + - href: ./security/trusted_computing/_toc.yaml + - href: ./security/secgear/_toc.yaml + - href: ./security/cert_signature/_toc.yaml + - href: ./security/sbom/_toc.yaml + - href: ./security/safeguard/_toc.yaml + - label: Memory and Storage + sections: + - href: ./memory_storage/lvm/_toc.yaml + - href: ./memory_storage/etmem/_toc.yaml + - label: Network + sections: + - href: ./network/network_config/_toc.yaml + - href: ./network/gazelle/_toc.yaml + - label: Performance Optimization + sections: + - label: Overview + sections: + - href: ./performance/overall/system_resource/_toc.yaml + - label: CPU Optimization + sections: + - href: ./performance/cpu_optimization/_toc.yaml + - label: System Optimization + sections: + - href: ./performance/system_optimization/atune/_toc.yaml + - href: ./performance/system_optimization/oeaware/_toc.yaml + - href: ./performance/system_optimization/powerapi/_toc.yaml + - label: Application Development + sections: + - href: ./development/application_dev/_toc.yaml + - href: ./development/ai4c/_toc.yaml + - href: ./development/fangtian/_toc.yaml + - href: ./development/distributed/_toc.yaml + - href: ./development/driver_development_specifications/_toc.yaml + - href: ./development/gcc/_toc.yaml + - href: ./development/lustre/_toc.yaml + - label: High Availability + sections: + - href: ./high_availability/ha/_toc.yaml + - label: Diversified Computing + sections: + - href: ./diversified_computing/dpu_offload/_toc.yaml diff --git a/docs/en/server/administration/administrator/_toc.yaml b/docs/en/server/administration/administrator/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cc159ce92bd03bac5261a8e8e208420604818224 --- /dev/null +++ b/docs/en/server/administration/administrator/_toc.yaml @@ -0,0 +1,27 @@ +label: Administrator Guide +isManual: true +description: Common administration operations on openEuler +sections: + - label: Viewing System Information + href: ./viewing_system_information.md + - label: Basic Configuration + href: ./basic_configuration.md + - label: User and User Group Management + href: ./user_and_user_group_management.md + - label: Software Package Management with DNF + href: ./using_dnf_to_manage_software_packages.md + - label: Service Management + href: ./service_management.md + - label: Process Management + href: ./process_management.md + - label: Service Configuration + sections: + - label: Configuring the Repo Server + href: ./configuring_the_repo_server.md + - label: Configuring the FTP Server + href: ./configuring_the_ftp_server.md + - label: Configuring the Web Server + href: ./configuring_the_web_server.md + - label: Setting Up the Database Server + href: ./setting_up_the_database_server.md + diff --git a/docs/en/server/administration/administrator/basic_configuration.md b/docs/en/server/administration/administrator/basic_configuration.md new file mode 100644 index 0000000000000000000000000000000000000000..413c77df015f0eeb55aeb26929b42b9d29558a62 --- /dev/null +++ b/docs/en/server/administration/administrator/basic_configuration.md @@ -0,0 +1,475 @@ +# Basic Configuration + +## Setting the System Locale + +System locale settings are stored in the **/etc/locale.conf** file and can be modified by the **localectl** command. These settings are read at system boot by the systemd daemon. + +### Displaying the Current Locale Status + +To display the current locale status, run the following command: + +```bash +$ localectl status +``` + +For example, to display the current system settings, the command and output are as follows: + +```bash +$ localectl status + System Locale: LANG=zh_CN.UTF-8 + VC Keymap: cn + X11 Layout: cn +``` + +### Listing Available Locales + +To display available locales, run the following command: + +```bash +$ localectl list-locales +``` + +You can check that by listing all Chinese locales with the following command: + +```bash +$ localectl list-locales | grep zh +zh_CN.UTF-8 +``` + +### Setting the Locale + +To set the language environment, run the following command as the **root** user. In the command, _locale_ indicates the language type to be set. Run the **localectl list-locales** command to obtain the value range. Change the value as required. + +```bash +$ localectl set-locale LANG=locale +``` + +For example, if you want to use Simplified Chinese as the locale, run the following command as the **root** user: + +```bash +$ localectl set-locale LANG=zh_CN.UTF-8 +``` + +> [!NOTE] **NOTE:** +> After the modification, log in again or run the `source /etc/locale.conf` command as the **root** user to update the configuration file for the modification to take effect. + +## Setting the Keyboard Layout + +Keyboard layout settings are stored in the **/etc/locale.conf** file and can be modified by the **localectl** command. These settings are read at early boot by the systemd daemon. + +### Displaying the Current Settings + +To display the current keyboard layout settings, run the following command: + +```bash +$ localectl status +``` + +Example command output: + +```bash +$ localectl status + System Locale: LANG=zh_CN.UTF-8 + VC Keymap: cn + X11 Layout: cn +``` + +### Listing Available Keyboard Layouts + +To list all available keyboard layouts that can be configured on openEuler, run the following command: + +```bash +$ localectl list-keymaps +``` + +For example, the command output of the Chinese keyboard layout is as follows: + +```bash +$ localectl list-keymaps | grep cn +cn +``` + +### Setting the Keyboard Layout + +To set the keyboard layout, run the following command as the **root** user. In the command, _map_ indicates the keyboard layout to be set. Run the **localectl list-keymaps** command to obtain the value range. Change it as required. + +```bash +$ localectl set-keymap map +``` + +The keyboard layout will be equally applied to graphical user interfaces. + +Then you can verify if your setting was successful by checking the status: + +```bash +$ localectl status + System Locale: LANG=zh_CN.UTF-8 + VC Keymap: cn + X11 Layout: us +``` + +## Setting the Date and Time + +This section describes how to set the system date, time, and time zone by using **timedatectl**, **date**, and **hwclock** commands. + +### Using the timedatectl Command + +#### Displaying the Current Date and Time + +To display the current date and time, run the following command: + +```bash +$ timedatectl +``` + +Example command output: + +```bash +$ timedatectl + Local time: Mon 2023-05-20 04:05:00 EDT + Universal time: Mon 2023-05-20 08:05:00 UTC + RTC time: Mon 2023-05-20 08:05:00 + Time zone: China Standard Time (CST), UTC +8 +System clock synchronized: no + NTP service: inactive + RTC in local TZ: no +``` + +#### Synchronizing the System Clock with a Remote Server + +Your system clock can be automatically synchronized with a remote server using the Network Time Protocol (NTP). Run the following command as the **root** user to enable or disable NTP. The value of _boolean_ is **yes** or **no**, indicating that the NTP is enabled or disabled for automatic system clock synchronization. Change the value as required. + +> [!NOTE] **NOTE:** +> If the remote NTP server is enabled to automatically synchronize the system clock, you cannot manually change the date and time. If you need to manually change the date or time, ensure that automatic NTP system clock synchronization is disabled. You can run the `timedatectl set-ntp no` command to disable the NTP service. + +```bash +timedatectl set-ntp boolean +``` + +For example, to enable automatic remote time synchronization, run the following command: + +```bash +$ timedatectl set-ntp yes +``` + +#### Changing the Current Date + +> [!NOTE] **NOTE:** +> Before changing the date, ensure that automatic NTP system clock synchronization has been disabled. + +Run the following command as the **root** user to change the current date. In the command, _YYYY_ indicates the year, _MM_ indicates the month, and _DD_ indicates the day. Change them as required. + +```bash +$ timedatectl set-time YYYY-MM-DD +``` + +For example, to change the current date to August 14, 2019, run the following command as the **root** user: + +```bash +$ timedatectl set-time '2019-08-14' +``` + +#### Changing the Current Time + +> Before changing the time, ensure that automatic NTP system clock synchronization has been disabled. Run the following command to check whether the NTP service is running: + +```shell +$ systemctl status ntp +``` + +Run the following command to disable the NTP service: + +```shell +$ systemctl disable ntp +``` + +To change the current time, run the following command as the **root** user. In the command, _HH_ indicates the hour, _MM_ indicates the minute, and _SS_ indicates the second. Change them as required. + +```bash +$ timedatectl set-time HH:MM:SS +``` + +For example, to change the current time to 15:57:24, run the following command: + +```bash +$ timedatectl set-time 15:57:24 +``` + +#### Changing the Time Zone + +To list all available time zones, run the following command: + +```bash +$ timedatectl list-timezones +``` + +To change the current time zone, run the following command as the **root** user. In the command, _time\_zone_ indicates the time zone to be set. Change it as required. + +```bash +$ timedatectl set-timezone time_zone +``` + +Imagine you want to identify which time zone is closest to your present location while you are in Asia. You can check that by listing all available time zones in Asia with the following command: + +```bash +$ timedatectl list-timezones | grep Asia +Asia/Aden +Asia/Almaty +Asia/Amman +Asia/Anadyr +Asia/Aqtau +Asia/Aqtobe +Asia/Ashgabat +Asia/Baghdad +Asia/Bahrain +...... + +Asia/Seoul +Asia/Shanghai +Asia/Singapore +Asia/Srednekolymsk +Asia/Taipei +Asia/Tashkent +Asia/Tbilisi +Asia/Tehran +Asia/Thimphu +Asia/Tokyo +``` + +To change the time zone to Asia/Shanghai, run the following command: + +```bash +$ timedatectl set-timezone Asia/Shanghai +``` + +### Using the date Command + +#### Displaying the Current Date and Time + +To display the current date and time, run the following command: + +```bash +$ date +``` + +By default, the **date** command displays the local time. To display the time in Coordinated Universal Time (UTC), run the command with the **--utc** or **-u** option: + +```bash +$ date --utc +``` + +You can also customize the format of the displayed information by providing the **+ "format"** option on the command line: + +```bash +$ date +"format" +``` + +**Table 1** Formatting options + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Format Option

+

Description

+

%H

+

The hour in the HH format (for example, 17)

+

%M

+

The minute in the MM format (for example, 37)

+

%S

+

The second in the SS format (for example, 25)

+

%d

+

The day of the month in the DD format (for example, 15)

+

%m

+

The month in the MM format (for example, 07)

+

%Y

+

The year in the YYYY format (for example, 2019)

+

%Z

+

The time zone abbreviation (for example, CEST)

+

%F

+

The full date in the YYYY-MM-DD format (for example, 2019-7-15). This option is equal to %Y-%m-%d.

+

%T

+

The full time in the HH:MM:SS format (for example, 18:30:25). This option is equal to %H:%M:%S.

+
+Example commands and outputs: + +- To display the current date and time: + + ```bash + $ date + Sat May 20 17:26:34 CST 2023 + ``` + +- To display the current date and time in UTC: + + ```bash + $ date --utc + Sat May 20 09:26:18 UTC 2023 + ``` + +- To customize the output of the **date** command: + + ```bash + $ date +"%Y-%m-%d %H:%M" + 2023-05-20 17:24 + ``` + +#### Changing the Current Time + +To change the current time, run the **date** command with the **--set** or **-s** option. Run the following command as the **root** user. In the command, _HH_ indicates the hour, _MM_ indicates the minute, and _SS_ indicates the second. Change them as required. + +```bash +$ date --set HH:MM:SS +``` + +By default, the **date** command sets the local time. To set the system clock in UTC instead, run the command with the **--utc** or **-u** option: + +```bash +$ date --set HH:MM:SS --utc +``` + +For example, to change the current time to 23:26:00, run the following command as the **root** user: + +```bash +$ date --set 23:26:00 +``` + +#### Changing the Current Date + +To change the current date, run the command with the **--set** or **-s** option. Run the following command as the **root** user. In the command, _YYYY_ indicates the year, _MM_ indicates the month, and _DD_ indicates the day. Change them as required. Note that after the date is changed, the corresponding time is reset to 00:00:00. + +```bash +$ date --set YYYY-MM-DD +``` + +For example, to change the current date to November 2, 2019, run the following command as the **root** user: + +```bash +$ date --set 2019-11-02 +``` + +### Using the hwclock Command + +You can run the **hwclock** command to set the real time clock (RTC). + +#### Real-Time Clock and System Clock + +Linux divides clocks into the following types: + +- System clock: clock of the current Linux kernel. +- Hardware clock RTC: hardware clock of the mainboard powered by the battery. This clock can be set in the **Standard BIOS Feature** option of the BIOS. + +When Linux starts, it reads the RTC and sets the system clock time based on the RTC time. + +#### Displaying the Current Date and Time + +To display the current RTC date and time, run the following command as the **root** user: + +```bash +$ hwclock +``` + +Example command output: + +```bash +$ hwclock +2023-05-26 10:18:42.528948+08:00 +``` + +#### Setting the Date and Time + +Run the following command as the **root** user to change the date and time of the current hardware. In the command, _dd_ indicates the day, _mm_ indicates the month, _yyyy_ indicates the year, _HH_ indicates the hour, and _MM_ indicates the minute. Change them as required. + +```bash +$ hwclock --set --date "dd mm yyyy HH:MM" +``` + +For example, to change the current time to 21:17 on May 21, 2023, run the following command: + +```bash +$ hwclock --set --date "21 May 2023 21:17" --utc +``` + +## Setting kdump + +This section describes how to set the memory reserved for kdump and modify parameters in the kdump configuration file. + +### Setting the Memory Reserved for kdump + +#### Parameter Formats of the Memory Reserved for kdump + +The memory reserved for kdump must be added to the bootargs in the **/boot/efi/EFI/openEuler/grub.cfg** (UEFI boot mode) or **/boot/grub2/grub.cfg** (legacy boot mode). The memory reserved for kdump has been added to openEuler releases by default and can be adjusted as required. After adding or modifying the bootargs, restart the system for the settings to take effect. The parameter formats of the memory reserved for kdump are as follows: + +| Bootarg| Description| Default Value| Remarks| +|----------|----------|----------|----------| +| crashkernel=x| If the physical memory size is less than 4 GB, x of the memory is reserved for kdump.| The default value is 512 MB for x86.| This configuration method is used only when the available memory size is less than 4 GB. In this case, ensure that the available contiguous memory is sufficient for reservation.| +| crashkernel=x@y| x of the memory is reserved at the start address of y for kdump.| Unused| Ensure that x of the memory at the start address of y is not reserved for other modules.| +| crashkernel=x,high| If the physical memory size is less than 4 GB, 256 MB memory is reserved. If the physical memory size is greater than 4 GB, x of the memory is reserved for kdump. | The default value is 1024M,high for ARM64.| Ensure that the available physical contiguous memory size is greater than or equal to 256 MB when the memory size is less than 4 GB, and is greater than or equal to x when the memory size is greater than 4 GB. The actual reserved memory size is 256 MB + x. | +| crashkernel=x,low crashkernel=y,high| x of the memory is reserved for kdump when the physical memory size is less than 4 GB, and y of the memory is reserved for kdump when the physical memory size is greater than 4 GB. | Unused| Ensure that the available physical contiguous memory size is greater than or equal to x when the physical memory size is less than 4 GB, and is greater than or equal to y when the physical memory size is greater than 4 GB.| + +### Recommended Reserved Memory + +| Recommended Solution| Reserved Parameter| Description| +|----------|----------|----------| +| General solution| crashkernel=2048M,high| If the memory size is less than 4 GB, 256 MB is reserved for kdump. If the memory size is greater than 4 GB, 2048 MB is reserved for kdump. 256 + 2048 MB in total.| +| Economical solution| crashkernel=1024M,high| If the memory size is less than 4 GB, 256 MB is reserved for kdump. If the memory size is greater than 4 GB, 1024 MB is reserved for kdump. 256 + 1024 MB in total. It is recommended that kdump files not be dumped using the network in scenarios where the system memory size is less than 512 MB. In VM scenarios, you can reduce the reserved memory. You are advised to set crashkernel to 512M or crashkernel to 256M,high.| + +> [!NOTE] **NOTE:** +> +> If kdump files are not dumped using the network, you need to set the kdump file system not to pack network drivers. Loading the network driver requires a large amount of memory. As a result, the memory reserved for kdump may be insufficient and kdump may fail. Therefore, you are advised to disable network drivers. + +### Disabling Network Drivers + +In the kdump configuration file **/etc/kdump.conf**, the dracut parameters can be used to set the tailored driver module. You can configure the network driver to the tailored driver list to prevent the kdump file system from loading the driver. After the configuration file is modified, restart the kdump service for the modification to take effect. Set the dracut parameters as follows: + +```text +dracut_args --omit-drivers "mdio-gpi usb_8dev et1011c rt2x00usb bcm-phy-lib mac80211_hwsim rtl8723be rndis_host hns3_cae amd vrf rtl8192cu mt76x02-lib int51x1 ppp_deflate team_mode_loadbalance smsc911x aweth bonding mwifiex_usb hnae dnet rt2x00pci vaser_pci hdlc_ppp marvell rtl8xxxu mlxsw_i2c ath9k_htc rtl8150 smc91x cortina at803x rockchip cxgb4 spi_ks8995 mt76x2u smsc9420 mdio-cavium bnxt_en ch9200 dummy macsec ice mt7601u rtl8188ee ixgbevf net1080 liquidio_vf be2net mlxsw_switchx2 gl620a xilinx_gmii2rgmii ppp_generic rtl8192de sja1000_platform ath10k_core cc770_platform realte igb c_can_platform c_can ethoc dm9601 smsc95xx lg-vl600 ifb enic ath9 mdio-octeon ppp_mppe ath10k_pci cc770 team_mode_activebackup marvell10g hinic rt2x00lib mlx4_en iavf broadcom igc c_can_pci alx rtl8192se rtl8723ae microchip lan78xx atl1c rtl8192c-common almia ax88179_178a qed netxen_nic brcmsmac rt2800usb e1000 qla3xxx mdio-bitbang qsemi mdio-mscc-miim plx_pci ipvlan r8152 cx82310_eth slhc mt76x02-usb ems_pci xen-netfront usbnet pppoe mlxsw_minimal mlxsw_spectrum cdc_ncm rt2800lib rtl_usb hnae3 ath9k_common ath9k_hw catc mt76 hns_enet_drv ppp_async huawei_cdc_ncm i40e rtl8192ce dl2 qmi_wwan mii peak_usb plusb can-dev slcan amd-xgbe team_mode_roundrobin ste10Xp thunder_xcv pptp thunder_bgx ixgbe davicom icplus tap tun smsc75xx smsc dlci hns_dsaf mlxsw_core rt2800mmi softing uPD60620 vaser_usb dp83867 brcmfmac mwifiex_pcie mlx4_core micrel team macvlan bnx2 virtio_net rtl_pci zaurus hns_mdi libcxgb hv_netvsc nicvf mt76x0u teranetics mlxfw cdc_eem qcom-emac pppox mt76-usb sierra_net i40evf bcm87xx mwifiex pegasus rt2x00mmi sja1000 ena hclgevf cnic cxgb4vf ppp_synctty iwlmvm team_mode_broadcast vxlan vsockmon hdlc_cisc rtl8723-common bsd_comp fakelb dp83822 dp83tc811 cicada fm10 8139t sfc hs geneve hclge xgene-enet-v2 cdc_mbim hdlc asix netdevsim rt2800pci team_mode_random lxt ems_usb mlxsw_pci sr9700 mdio-thunder mlxsw_switchib macvtap atlantic cdc_ether mcs7830 nicpf mdi peak_pci atl1e cdc_subset ipvtap btcoexist mt76x0-common veth slip iwldvm bcm7xxx vitesse netconsole epic100 myri10ge r8169 qede microchip_t1 liquidi bnx2x brcmutil mwifiex_sdi mlx5_core rtlwifi vmxnet3 nlmon hns3 hdlc_raw esd_usb2 atl2 mt76x2-common iwlwifi mdio-bcm-unimac national ath rtwpci rtw88 nfp rtl8821ae fjes thunderbolt-net 8139cp atl1 mscc vcan dp83848 dp83640 hdlc_fr e1000e ipheth net_failover aquantia rtl8192ee igbvf rocker intel-xway tg3" --omit "ramdisk network ifcfg qemu-net" --install "chmod" --nofscks +``` + +## Setting the Drive Scheduling Algorithm + +### Setting a Temporary Scheduling Policy + +For example, run the following command to change all I/O scheduling algorithms to **mq-deadline**. The modification becomes invalid after a reboot. + +```shell +$ echo mq-deadline > /sys/block/sd*/queue/scheduler +``` + +### Setting a Permanent Scheduling Policy + +Add **elevator=mq-deadline** to the kernel boot configuration file **grub.cfg**. The modification takes effect after a reboot. + +```text +linux /vmlinuz-5.10.0-153.12.0.89.oe2203SP4.x86_64 root=/dev/mapper/openeuler-root ro resume=/dev/mapper/openeuler-swap rd.lvm.lv=openeuler/root rd.lvm.lv=openeuler/swap quiet crashkernel=512M elevator=mq-deadline +``` diff --git a/docs/en/server/administration/administrator/configuring_the_ftp_server.md b/docs/en/server/administration/administrator/configuring_the_ftp_server.md new file mode 100644 index 0000000000000000000000000000000000000000..c602d8110cfb56ce2a07d5e6d0a0a6602487dd5a --- /dev/null +++ b/docs/en/server/administration/administrator/configuring_the_ftp_server.md @@ -0,0 +1,528 @@ +# Configuring the FTP Server + +## General Introduction + +### FTP Overview + +File Transfer Protocol \(FTP\) is one of the earliest transmission protocols on the Internet. It is used to transfer files between the server and client. FTP allows users to access files on a remote system using a set of standard commands without logging in to the remote system. In addition, the FTP server provides the following functions: + +- Subscriber classification + + By default, the FTP server classifies users into real users, guest users, and anonymous users based on the login status. The three types of users have different access permissions. Real users have complete access permissions, while anonymous users have only the permission to downloading resources. + +- Command records and log file records + + FTP can use the syslogd to record data, including historical commands and user transmission data \(such as the transmission time and file size\). Users can obtain log information from the /var/log/ directory. + +- Restricting the access scope of users + + FTP can limit the work scope of a user to the home directory of the user. After a user logs in to the system through FTP, the root directory displayed by the system is the home directory of the user. This environment is called change root \(chroot for short\). In this way, users can access only the main directory, but not important directories such as /etc, /home, and /usr/local. This protects the system and keeps the system secure. + +### Port Used by the FTP Server + +The FTP service requires multiple network ports. The server uses the following ports: + +- Command channel. The default port number is 21. +- Data channel. The default port number is 20. + +Port 21 is used to receive connection requests from the FTP client, and port 20 is used by the FTP server to proactively connect to the FTP client. + +### Introduction to vsftpd + +FTP has a long history and uses the unencrypted transmission mode, and is therefore considered insecure. This section describes the Very Secure FTP Daemon \(vsftpd\), to use FTP in a more secure way. + +The vsftpd is introduced to build a security-centric FTP server. The vsftpd is designed with the following features: + +- The startup user of the vsftpd service is a common user who has low system permission. In addition, the vsftpd service uses chroot to change the root directory, preventing the risk of misusing system tools. +- Any vsftpd command that requires high execution permission is controlled by a special upper-layer program. The upper-layer program has low permission and does not affect the system. +- vsftpd integrates most of the extra commands \(such as dir, ls, and cd\) used by FTP. Generally, the system does not need to provide extra commands, which are secure for the system. + +## Using vsftpd + +### Installing vsftpd + +To use the vsftpd service, you need to install the vsftpd software. If the yum source has been configured, run the following command as the root user to install the vsftpd service: + +```shell +dnf install vsftpd +``` + +### Service Management + +To start, stop, or restart the vsftpd service, run the corresponding command as the root user. + +- Starting vsftpd services + + ```shell + systemctl start vsftpd + ``` + + You can run the netstat command to check whether communication port 21 is enabled. If the following information is displayed, the vsftpd service has been enabled. + + ```shell + $ netstat -tulnp | grep 21 + tcp6 0 0 :::21 :::* LISTEN 19716/vsftpd + ``` + + >[!NOTE] **NOTE:** + >If the **netstat** command does not exist, run the **dnf install net-tools** command to install the **net-tools** software and then run the **netstat** command. + +- Stopping the vsftpd services + + ```shell + systemctl stop vsftpd + ``` + +- Restarting the vsftpd service + + ```shell + systemctl restart vsftpd + ``` + +## Configuring vsftpd + +### vsftpd Configuration Files + +You can modify the vsftpd configuration file to control user permissions. [Table 1](#table1541615718372) describes the vsftpd configuration files. You can modify the configuration files as required. You can run the man command to view more parameter meanings. + +**Table 1** vsftpd configuration files + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Configuration File

+

Description

+

/etc/vsftpd/vsftpd.conf

+

Main configuration file of the vsftpd process. The configuration format is Parameter=Parameter value. The parameter and parameter value cannot be empty.

+

You can run the following command to view details about the vsftpd.conf file:

+

man 5 vsftpd.conf

+

/etc/pam.d/vsftpd

+

Pluggable authentication modules (PAMs) are used for identity authentication and restrict some user operations.

+

/etc/vsftpd/ftpusers

+

List of users who are not allowed to use the vsftpd. By default, the system account is also in this file. Therefore, the system account cannot use vsftpd by default.

+

/etc/vsftpd/user_list

+

List of users who are allowed or not allowed to log in to the vsftpd server. Whether the file takes effect depends on the following parameters in the main configuration file vsftpd.conf:

+

userlist_enable: indicates whether to enable the userlist mechanism. The value YES indicates that the userlist mechanism is enabled. In this case, the userlist_deny configuration is valid. The value NO indicates that the userlist mechanism is disabled.

+

userlist_deny: indicates whether to forbid users in the user list to log in. YES indicates that users in the user list are forbidden to log in. NO indicates that users in the command are allowed to log in.

+

For example, if userlist_enable is set to YES and userlist_deny is set to YES, all users in the user list cannot log in.

+

/etc/vsftpd/chroot_list

+

Whether to restrict the user list in the home directory. By default, this file does not exist. You need to create it manually. It is the value of chroot_list_file in the vsftpd.conf file.

+

The function of this parameter is determined by the following parameters in the vsftpd.conf file:

+
  • chroot_local_user: indicates whether to restrict all users to the home directory. The value YES indicates that all users are restricted to the home directory, and the value NO indicates that all users are not restricted to the home directory.
  • chroot_list_enable: indicates whether to enable the list of restricted users. The value YES indicates that the list is enabled, and the value NO indicates that the list is disabled.
+

For example, if chroot_local_user is set to YES, chroot_list_enable is set to YES, and chroot_list_file is set to /etc/vsftpd/chroot_list, all users are restricted to their home directories, and users in chroot_list are not restricted.

+

/usr/sbin/vsftpd

+

Unique execution file of vsftpd.

+

/var/ftp/

+

Default root directory for anonymous users to log in. The root directory is related to the home directory of the ftp user.

+
+ +### Default Configuration Description + +>[!NOTE] **NOTE:** +>The configuration content in this document is for reference only. You can modify the content based on the site requirements \(for example, security hardening requirements\). + +In the openEuler system, vsftpd does not open to anonymous users by default. Run the vim command to view the main configuration file. The content is as follows: + +```shell +$ vim /etc/vsftpd/vsftpd.conf +anonymous_enable=NO +local_enable=YES +write_enable=YES +local_umask=022 +dirmessage_enable=YES +xferlog_enable=YES +connect_from_port_20=YES +xferlog_std_format=YES +listen=NO +listen_ipv6=YES +pam_service_name=vsftpd +userlist_enable=YES +``` + +[Table 2](#table18185162512499) describes the parameters. + +**Table 2** Parameter description + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

anonymous_enable

+

Indicates whether to allow anonymous users to log in. YES indicates that anonymous users are allowed to log in; NO indicates that anonymous users are not allowed to log in.

+

local_enable

+

Whether to allow local users to log in. YES indicates that local users are allowed to log in. NO indicates that local users are not allowed to log in.

+

write_enable

+

Whether to allow the login user to have the write permission. YES indicates that the upload and write function is enabled, and NO indicates that the function is disabled.

+

local_umask

+

Indicates the umask value when a local user adds a profile.

+

dirmessage_enable

+

Indicates whether to display the contents that users need to pay attention to when a user accesses a directory. The options are YES (yes) and NO (no).

+

xferlog_enable

+

Indicates whether to record file upload and download operations. The options are YES (record operations) and NO (not record operations).

+

connect_from_port_20

+

Indicates whether port 20 is used for data transmission in port mode. YES indicates that port 20 is used, and NO indicates that port 20 is not used.

+

xferlog_std_format

+

Indicates whether the transfer log file is written in the standard xferlog format. The options are YES (yes) and NO (no).

+

listen

+

Indicates whether the vsftpd service is started in standalone mode. The options are YES (yes) and NO (no).

+

pam_service_name

+

Support for PAM management. The value is a service name, for example, vsftpd.

+

userlist_enable

+

Indicates whether to support account login control in the /etc/vsftpd/user_list file. The options are YES (yes) and NO (no).

+

tcp_wrappers

+

Indicates whether to support the firewall mechanism of the TCP Wrappers. The options are YES (yes) and NO (no).

+

listen_ipv6

+

Indicates whether to listen to IPv6 FTP requests. The options are YES (yes) and NO (no). listen and listen_ipv6 cannot be enabled at the same time.

+
+ +### Setting the Local Time + +#### Overview + +In the openEuler system, vsftpd uses the Greenwich Mean Time \(GMT\) time by default, which may be different from the local time. For example, the GMT time is 8 hours later than the Beijing time. You need to change the GMT time to the local time. Otherwise, the server time and client time are inconsistent, which may cause errors during file upload and download. + +#### Setting Method + +To set the vsftpd time to the local time, perform the following steps as the **root** user: + +1. Open the vsftpd.conf file and change the value of use\_localtime to **YES**. Run the following command: + + ```shell + vim /etc/vsftpd/vsftpd.conf + ``` + + Modify the file contents as follows: + + ```shell + use_localtime=YES + ``` + +2. Restart the vsftpd service. + + ```shell + systemctl restart vsftpd + ``` + +3. Set the vsftpd service to start automatically upon power-on. + + ```shell + systemctl enable vsftpd + ``` + +### Configuring Welcome Information + +To use the vsftpd service normally, the welcome information file must exist. To configure the **welcome.txt** file of the vsftpd service, perform the following steps as the **root** user: + +1. Open the vsftpd.conf configuration file, add the welcome information to the file, save the file, and exit. + + ```shell + vim /etc/vsftpd/vsftpd.conf + ``` + + The following configuration lines need to be added: + + ```text + banner_file=/etc/vsftpd/welcome.txt + ``` + +2. Create welcome information. Specifically, open the welcome.txt file, write the welcome information, save the file, and exit. + + ```shell + vim /etc/vsftpd/welcome.txt + ``` + + The following is an example: + + ```text + Welcome to this FTP server! + ``` + +### Configuring the Login Permission of a System Account + +Generally, users need to restrict the login permission of some accounts. You can set the restriction as required. + +Two files are used to restrict the login of system accounts. The default files are as follows: + +- /etc/vsftpd/ftpusers: This file is managed by the PAM module and is determined by the settings of the /etc/pam.d/vsftpd file. +- /etc/vsftpd/user\_list: This file is set by userlist\_file in vsftpd.conf and is provided by vsftpd. + +Both files must exist and have the same content. You can write the accounts whose UIDs are smaller than 500 to the two files by referring to the /etc/passwd. Each line indicates an account. + +To restrict the login of system accounts, add the accounts to /etc/vsftpd/ftpusers and /etc/vsftpd/user\_list as the **root** user. + +Open the user\_list file to view the account information in the current file. The command and output are as follows: + +```shell +$ vim /etc/vsftpd/user_list +root +bin +daemon +adm +lp +sync +shutdown +halt +mail +news +uucp +operator +games +nobody +``` + +## Verifying Whether the FTP Service Is Successfully Set Up + +You can use the FTP client provided by openEuler for verification. The command and output are as follows. Enter the user name \(an existing user in the system\) and password as prompted. If the message "Login successful" is displayed, the FTP server is successfully set up. + +```shell +$ ftp localhost +Trying 127.0.0.1... +Connected to localhost (127.0.0.1). +220-Welcome to this FTP server! +220 +Name (localhost:root): USERNAME +331 Please specify the password. +Password: +230 Login successful. +Remote system type is UNIX. +Using binary mode to transfer files. +ftp> bye +221 Goodbye. +``` + +>[!NOTE] **NOTE:** +>If the **ftp** command does not exist, run the **dnf install ftp** command as the **root** user to install the **ftp** software and then run the **ftp** command. + +## Configuring a Firewall + +To open the FTP service to the Internet, you need to configure the firewall and SElinux as the **root** user. + +```shell +$ firewall-cmd --add-service=ftp --permanent +success +$ firewall-cmd --reload +success +$ setsebool -P ftpd_full_access on +``` + +## File Transmission + +### Overview + +This section describes how to transfer files after the vsftpd service is started. + +### Connecting to the Server + +**Command Format** + +**ftp** \[_hostname_ | _ip-address_\] + +**hostname** indicates the name of the server, and **ip-address** indicates the IP address of the server. + +**Requirements** + +Run the following command on the command-line interface \(CLI\) of the openEuler OS: + +```shell +ftp ip-address +``` + +Enter the user name and password as prompted. If the following information is displayed after the authentication is successful, the FTP connection is successful. In this case, you have accessed the directory of the connected server. + +```shell +ftp> +``` + +At this prompt, you can enter different commands to perform related operations. + +- Display the current path of the server. + + ```shell + ftp>pwd + ``` + +- Display the local path. You can upload the files in this path to the corresponding location on the FTP server. + + ```shell + ftp>lcd + ``` + +- Exit the current window and return to the local Linux terminal. + + ```shell + ftp>! + ``` + +### Downloading a File + +Generally, the get or mget command is used to download files. + +**How to use get** + +- Function description: Transfers files from a remote host to a local host. +- Command format: **get** \[_remote-file_\] \[_local-file_\] + + _remote-file_ indicates a remote file, and _local-file_ indicates a local file. + +- For example, run the following command to obtain the /home/openEuler/openEuler.htm file on the remote server to the local directory /home/myopenEuler/ and change the file name to myopenEuler.htm + + ```shell + ftp> get /home/openEuler/openEuler.htm /home/myopenEuler/myopenEuler.htm + ``` + +**How to use mget** + +- Function description: Receives a batch of files from the remote host to the local host. +- Command format: **mget** \[_remote-file_\] + + _remote-file_ indicates a remote file. + +- For example, to obtain all files in the /home/openEuler/ directory on the server, run the following command: + + ```shell + ftp> cd /home/openEuler/ + ftp> mget *.* + ``` + + >[!NOTE] **NOTE:** + > + >- In this case, a message is displayed each time a file is downloaded. To block the prompt information, run the **prompt off** command before running the **mget \*.\*** command. + >- The files are downloaded to the current directory on the Linux host. For example, if you run the ftp command in /home/myopenEuler/, all files are downloaded to /home/myopenEuler/. + +### Uploading a file + +Generally, the put or mput command is used to upload files. + +**How to use put** + +- Function: Transfers a local file to a remote host. +- Command format: **put** \[_local-file_\] \[_remote-file_\] + + _remote-file_ indicates a remote file, and _local-file_ indicates a local file. + +- For example, run the following command to transfer the local myopenEuler.htm file to the remote host /home/openEuler/ and change the file name to openEuler.htm: + + ```shell + ftp> put myopenEuler.htm /home/openEuler/openEuler.htm + ``` + +**How to use mput** + +- Function: Transfers a batch of files from the local host to a remote host. +- Command format: **mput** \[_local-file_\] + + _local-file_ indicates a local file. + +- For example, run the following command to upload all HTM files in the local directory to the /home/openEuler/ directory on the server: + + ```shell + ftp> cd /home/openEuler/ + ftp> mput *.htm + ``` + +### Deleting a File + +Generally, the **delete** or **mdelete** command is used to delete a file. + +**How to use delete** + +- Function description: Deletes one or more files from the remote server. +- Command format: **delete** \[_remote-file_\] + + _remote-file_ indicates a remote file. + +- For example, to delete the /home/openEuler/openEuler.htm from the remote server, run the following command: + + ```shell + ftp> cd /home/openEuler/ + ftp> delete openEuler.htm + ``` + +**How to use mdelete** + +- Function description: Deletes files from a remote server. This function is used to delete files in batches. +- Command format: **mdelete** \[_remote-file_\] + + _remote-file_ indicates a remote file. + +- For example, to delete all files whose names start with **a** from the /home/openEuler/ directory on the remote server, run the following command: + + ```shell + ftp> cd /home/openEuler/ + ftp> mdelete a* + ``` + +### Disconnecting from the Server + +Run the bye command to disconnect from the server. + +```shell +ftp> bye +``` diff --git a/docs/en/server/administration/administrator/configuring_the_repo_server.md b/docs/en/server/administration/administrator/configuring_the_repo_server.md new file mode 100644 index 0000000000000000000000000000000000000000..477fbff1cc1f2bd10fc79ac83150b8c00bf4b5b7 --- /dev/null +++ b/docs/en/server/administration/administrator/configuring_the_repo_server.md @@ -0,0 +1,388 @@ +# Configuring the Repo Server + +>[!NOTE] **NOTE:** +> openEuler provides multiple repo sources for online usage. For details about the repo sources, see [Installing the OS](./../../releasenotes/os_installation.md). If you cannot obtain the openEuler repo source online, you can use the ISO release package provided by openEuler to create a local openEuler repo source. This section uses the **openEuler-22.03-LTS-SP4-aarch64-dvd.iso** file as an example. Modify the ISO file as required. + +## Overview + +Create the **openEuler-22.03-LTS-SP4-aarch64-dvd.iso** file provided by openEuler as the repo source. The following uses Nginx as an example to describe how to deploy the repo source and provide the HTTP service. + +## Creating or Updating a Local Repo Source + +Mount the openEuler ISO file **openEuler-22.03-LTS-SP4-aarch64-dvd.iso** to create and update a repo source. + +### Obtaining the ISO File + +Obtain the openEuler ISO file from the following website: + +[https://repo.openeuler.org/openEuler-22.03-LTS-SP4/ISO/](https://repo.openeuler.org/openEuler-22.03-LTS-SP4/ISO/) + +### Mounting an ISO File to Create a Repo Source + +Run the **mount** command as the **root** user to mount the ISO file. + +The following is an example: + +```shell +mount /home/openEuler/openEuler-22.03-LTS-SP4-aarch64-dvd.iso /mnt/ +``` + +The mounted mnt directory is as follows: + +```text +. +│── boot.catalog +│── docs +│── EFI +│── images +│── Packages +│── repodata +│── TRANS.TBL +└── RPM-GPG-KEY-openEuler +``` + +In the preceding directory, **Packages** indicates the directory where the RPM package is stored, **repodata** indicates the directory where the repo source metadata is stored, and **RPM-GPG-KEY-openEuler** indicates the public key for signing openEuler. + +### Creating a Local Repo Source + +You can copy related files in the ISO file to a local directory to create a local repo source. The following is an example: + +```shell +mount /home/openEuler/openEuler-22.03-LTS-SP4-aarch64-dvd.iso /mnt/ +mkdir -p ~/srv/repo/ +cp -r /mnt/Packages ~/srv/repo/ +cp -r /mnt/repodata ~/srv/repo/ +cp -r /mnt/RPM-GPG-KEY-openEuler ~/srv/repo/ +``` + +The local Repo directory is as follows: + +```text +. +│── Packages +│── repodata +└── RPM-GPG-KEY-openEuler +``` + +**Packages** indicates the directory where the RPM package is stored, **repodata** indicates the directory where the repo source metadata is stored, and **RPM-GPG-KEY-openEuler** indicates the public key for signing openEuler. + +### Updating the Repo Source + +You can update the repo source in either of the following ways: + +- Use the latest ISO file to update the existing repo source. The method is the same as that for creating a repo source. That is, mount the ISO file or copy the ISO file to the local directory. + +- Add a RPM package to the **Packages** directory of the repo source and run the **createrepo** command to update the repo source. + + ```shell + createrepo --update --workers=10 ~/srv/repo + ``` + +In this command, **--update** indicates the update, and **--workers** indicates the number of threads, which can be customized. + +> [!NOTE] **NOTE:** +If the command output contains "createrepo: command not found", run the **dnf install createrepo** command as the **root** user to install the **createrepo** softeware. + +## Deploying the Remote Repo Source + +Install openEuler OS and deploy the repo source using Nginx on openEuler OS. + +### Installing and Configuring Nginx + +1. Download the Nginx tool and install it as the **root** user. + +2. After Nginx is installed, configure /etc/nginx/nginx.conf as the **root** user. + + > [!NOTE] **NOTE:** +The configuration content in this document is for reference only. You can configure the content based on the site requirements (for example, security hardening requirements). + + ```text + user nginx; + worker_processes auto; # You are advised to set this parameter to **core-1** . + error_log /var/log/nginx/error.log warn; # Log storage location + pid /var/run/nginx.pid; + + events { + worker_connections 1024; + } + + http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + sendfile on; + keepalive_timeout 65; + + server { + listen 80; + server_name localhost; # Server name (URL) + client_max_body_size 4G; + root /usr/share/nginx/repo; # Default service directory + + location / { + autoindex on; # Enable the access to lower-layer files in the directory. + autoindex_exact_size on; + autoindex_localtime on; + } + + } + + } + ``` + +### Starting Nginx + +1. Run the following commands to start the Nginx service as the **root** user using systemd. + + ```shell + systemctl enable nginx + systemctl start nginx + ``` + +2. You can run the following command to check whether Nginx is started successfully: + + ```shell + systemctl status nginx + ``` + + - [Figure 1](#en-us_topic_0151920971_fd25e3f1d664b4087ae26631719990a71) indicates that the Nginx service is started successfully. + + **Figure 1** The Nginx service is successfully started. +![](./figures/the-nginx-service-is-successfully-started.png) + + - If the Nginx service fails to be started, view the error information. + + ```shell + systemctl status nginx.service --full + ``` + + **Figure 2** The Nginx service startup fails + ![](./figures/nginx-startup-failure.png) + + As shown in [Figure 2](#en-us_topic_0151920971_f1f9f3d086e454b9cba29a7cae96a4c54), the Nginx service fails to be created because the /var/spool/nginx/tmp/client\_body directory fails to be created. You need to manually create the directory as the **root** user. Solve similar problems as follows: + + ```shell + mkdir -p /var/spool/nginx/tmp/client_body + mkdir -p /var/spool/nginx/tmp/proxy + mkdir -p /var/spool/nginx/tmp/fastcgi + mkdir -p /usr/share/nginx/uwsgi_temp + mkdir -p /usr/share/nginx/scgi_temp + ``` + +### Deploying the Repo Source + +1. Run the following command as the **root** user to create the /usr/share/nginx/repo directory specified in the Nginx configuration file /etc/nginx/nginx.conf: + + ```shell + mkdir -p /usr/share/nginx/repo + ``` + +2. Run the following command as the **root** user to modify the /usr/share/nginx/repo directory permission: + + ```shell + chmod -R 755 /usr/share/nginx/repo + ``` + +3. Configure firewall rules as the **root** user to enable the port (port 80) configured for Nginx. + + ```shell + firewall-cmd --add-port=80/tcp --permanent + firewall-cmd --reload + ``` + + Check whether port 80 is enabled as the **root** user. If the output is **yes**, port 80 is enabled. + + ```shell + firewall-cmd --query-port=80/tcp + ``` + + You can also enable port 80 using iptables as the **root** user. + + ```shell + iptables -I INPUT -p tcp --dport 80 -j ACCEPT + ``` + +4. After the Nginx service is configured, you can use the IP address to access the web page, as shown in [Figure 3](#en-us_topic_0151921017_fig1880404110396). + + **Figure 3** Nginx deployment succeeded +![](./figures/nginx-deployment-succeeded.png) + +5. Use either of the following methods to add the repo source to the **/usr/share/nginx/repo** directory: + + - Copy related files in the image to the /usr/share/nginx/repo directory as the **root** user. + + ```shell + mount /home/openEuler/openEuler-22.03-LTS-SP4-aarch64-dvd.iso /mnt/ + cp -r /mnt/Packages /usr/share/nginx/repo/ + cp -r /mnt/repodata /usr/share/nginx/repo/ + cp -r /mnt/RPM-GPG-KEY-openEuler /usr/share/nginx/repo/ + chmod -R 755 /usr/share/nginx/repo + ``` + + The **openEuler-22.03-LTS-SP4-aarch64-dvd.iso** file is stored in the **/home/openEuler** directory. + + - Create a soft link for the repo source in the /usr/share/nginx/repo directory as the **root** user. + + ```shell + ln -s /mnt /usr/share/nginx/repo/os + ``` + + **/mnt** is the created repo source, and **/usr/share/nginx/repo/os** points to **/mnt** . + +## Using the repo Source + +The repo source can be configured as a yum source, which is a shell front-end software package manager. Based on the Redhat package manager (RPM), YUM can automatically download the RPM package from the specified server, install the package, and process dependent relationship. It supports one-off installation for all dependent software packages. + +### Configuring Repo as the Yum Source + +You can configure the built repo as the yum source and create the \*\*\*.repo configuration file (the extension .repo is mandatory) in the /etc/yum.repos.d/ directory as the **root** user. You can configure the yum source on the local host or HTTP server. + +- Configuring the local yum source. + + Create the **openEuler.repo** file in the **/etc/yum.repos.d** directory and use the local repository as the yum source. The content of the **openEuler.repo** file is as follows: + + ```text + [base] + name=base + baseurl=file:///home/openEuler/srv/repo + enabled=1 + gpgcheck=1 + gpgkey=file:///home/openEuler/srv/repo/RPM-GPG-KEY-openEuler + ``` + + > [!NOTE] **NOTE:** + > + > - **repoid** indicates the ID of the software repository. Repoids in all .repo configuration files must be unique. In the example, **repoid** is set to **base**. + > - **name** indicates the string that the software repository describes. + > - **baseurl** indicates the address of the software repository. + > - **enabled** indicates whether to enable the software source repository. The value can be **1** or **0**. The default value is **1**, indicating that the software source repository is enabled. + > - **gpgcheck** indicates whether to enable the GNU privacy guard (GPG) to check the validity and security of sources of RPM packages. **1** indicates GPG check is enabled. **0** indicates the GPG check is disabled. + > - **gpgkey** indicates the public key used to verify the signature. + +- Configuring the yum source for the HTTP server + + Create the **openEuler.repo** file in the **/etc/yum.repos.d** directory. + + - If the repo source of the HTTP server deployed by the user is used as the yum source, the content of **openEuler.repo** is as follows: + + ```text + [base] + name=base + baseurl=http://192.168.139.209/ + enabled=1 + gpgcheck=1 + gpgkey=http://192.168.139.209/RPM-GPG-KEY-openEuler + ``` + + > [!NOTE] **NOTE:** + > 192.168.139.209 is an example. Replace it with the actual IP address. + + - If the openEuler repo source provided by openEuler is used as the yum source, the content of **openEuler.repo** is as follows (the AArch64-based OS repo source is used as an example): + + ```text + [base] + name=base + baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/aarch64/ + enabled=1 + gpgcheck=1 + gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/aarch64/RPM-GPG-KEY-openEuler + ``` + +### repo Priority + +If there are multiple repo sources, you can set the repo priority in the .repo file. If the priority is not set, the default priority is **99** . If the same RPM package exists in the sources with the same priority, the latest version is installed. **1** indicates the highest priority and **99** indicates the lowest priority. The following shows how to set the priority of **openEuler.repo** to **2**. + +```text +[base] +name=base +baseurl=http://192.168.139.209/ +enabled=1 +priority=2 +gpgcheck=1 +gpgkey=http://192.168.139.209/RPM-GPG-KEY-openEuler +``` + +### Related Commands of dnf + +The **dnf** command can automatically parse the dependency between packages during installation and upgrade. The common usage method is as follows: + +```shell +dnf +``` + +Common commands are as follows: + +- Installation + + Run the following command as the **root** user. + + ```shell + dnf install + ``` + +- Upgrade + + Run the following command as the **root** user. + + ```shell + dnf update + ``` + +- Rollback + + Run the following command as the **root** user. + + ```shell + dnf downgrade + ``` + +- Update check + + ```shell + dnf check-update + ``` + +- Uninstallation + + Run the following command as the **root** user. + + ```shell + dnf remove + ``` + +- Query + + ```shell + dnf search + ``` + +- Local installation + + Run the following command as the **root** user. + + ```shell + dnf localinstall + ``` + +- Historical records check + + ```shell + dnf history + ``` + +- Cache records clearing + + ```shell + dnf clean all + ``` + +- Cache update + + ```shell + dnf makecache + ``` diff --git a/docs/en/server/administration/administrator/configuring_the_web_server.md b/docs/en/server/administration/administrator/configuring_the_web_server.md new file mode 100644 index 0000000000000000000000000000000000000000..bdd7560544f2435eb0f4f1cc1ef0f2258ba32d3d --- /dev/null +++ b/docs/en/server/administration/administrator/configuring_the_web_server.md @@ -0,0 +1,529 @@ +# Configuring the Web Server + +## Apache Server + +### Overview + +World Wide Web \(Web\) is one of the most commonly used Internet protocols. At present, the web server in the Unix-Like system is mainly implemented through the Apache server software. To operate dynamic websites, LAMP \(Linux + Apache + MySQL + PHP\) is developed. Web services can be combined with multimedia such as text, graphics, images, and audio, and support information transmission through hyperlinks. + +The web server version in the openEuler system is Apache HTTP server 2.4, that is, httpd, which is an open-source web server developed by the Apache Software Foundation. + +### Managing httpd + +#### Overview + +You can use the systemctl tool to manage the httpd service, including starting, stopping, and restarting the service, and viewing the service status. This section describes how to manage the Apache HTTP service. + +#### Prerequisites + +- To use the Apache HTTP service, ensure that the rpm package of the httpd service has been installed in your system. Run the following command as the **root** user to install the rpm package: + + ```shell + # dnf install httpd + ``` + + For more information about service management, see [Service Management](./service_management.md). + +- To start, stop, and restart the httpd service, you must have the root permission. + +#### Starting a Service + +- Run the following command to start and run the httpd service: + + ```shell + # systemctl start httpd + ``` + +- If you want the httpd service to automatically start when the system starts, the command and output are as follows: + + ```shell + # systemctl enable httpd + Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service. + ``` + +>[!NOTE] **NOTE:** +>If the running Apache HTTP server functions as a secure server, a password is required after the system is started. The password is an encrypted private SSL key. + +#### Stopping the Service + +- Run the following command to stop the httpd service: + + ```shell + # systemctl stop httpd + ``` + +- If you want to prevent the service from automatically starting during system startup, the command and output are as follows: + + ```shell + # systemctl disable httpd + Removed /etc/systemd/system/multi-user.target.wants/httpd.service. + ``` + +#### Restarting a Service + +You can restart the service in any of the following ways: + +- Restart the service by running the restart command: + + ```shell + # systemctl restart httpd + ``` + + This command stops the ongoing httpd service and restarts it immediately. This command is generally used after a service is installed or when a dynamically loaded module \(such as PHP\) is removed. + +- Reload the configuration. + + ```shell + # systemctl reload httpd + ``` + + This command causes the running httpd service to reload its configuration file. Any requests that are currently being processed will be interrupted, causing the client browser to display an error message or re-render some pages. + +- Re-load the configuration without affecting the activation request. + + ```shell + # apachectl graceful + ``` + + This command causes the running httpd service to reload its configuration file. Any requests that are currently being processed will continue to use the old configuration file. + +#### Verifying the Service Status + +Check whether the httpd service is running. + +```shell +$ systemctl is-active httpd +``` + +If active is displayed in the command output, the service is running. + +### Configuration File Description + +After the httpd service is started, it reads the configuration file shown in [Table 1](#table24341012096) by default. + +**Table 1** Configuration file description + + + + + + + + + + + + + +

File

+

Description

+

/etc/httpd/conf/httpd.conf

+

Main configuration files.

+

/etc/httpd/conf.d

+

Secondary directory of configuration files, which are also contained in the main configuration file.

+

The secondary directory of a configuration file is contained in the main configuration file.

+
+ +Although the default configuration can be used in most cases, you need to be familiar with some important configuration items. After the configuration file is modified, run the following command as the **root** user to check the syntax errors that may occur in the configuration file: + +```shell +# apachectl configtest +``` + +If the following information is displayed, the syntax of the configuration file is correct: + +```shell +Syntax OK +``` + +>[!NOTE] **NOTE:** +> +>- Before modifying the configuration file, back up the original file so that the configuration file can be quickly restored if a fault occurs. +>- The modified configuration file takes effect only after the web service is restarted. + +### Management Module and SSL + +#### Overview + +The httpd service is a modular application that is distributed with many Dynamic Shared Objects \(DSOs\). DSOs can be dynamically loaded or unloaded when running if necessary. These modules are located in the /usr/lib64/httpd/modules/ directory of the server operating system. This section describes how to load and write a module. + +#### Loading a Module + +To load a special DSO module, you can use the load module indication in the configuration file. The modules provided by the independent software package have their own configuration files in the /etc/httpd/conf.modules.d directory. + +For example, to load the asis DSO module, perform the following steps: + +1. In the /etc/httpd/conf.modules.d/00-optional.conf file, uncomment the following configuration line as the **root** user: + + ```shell + LoadModule asis_module modules/mod_asis.so + ``` + +2. After the loading is complete, restart the httpd service as the **root** user to reload the configuration file. + + ```shell + # systemctl restart httpd + ``` + +3. After the loading is complete, run the httpd -M command as the **root** user to check whether the asis DSO module is loaded. + + ```shell + # httpd -M | grep asis + ``` + + If the following information is displayed, the asis DSO module is successfully loaded: + + ```shell + asis_module (shared) + ``` + +>[!NOTE] **NOTE:** +>**Common httpd commands** +> +>- httpd -v: views the httpd version number. +>- httpd -l: views the static modules compiled into the httpd program. +>- httpd -M: views the static modules and loaded dynamic modules that have been compiled into the httpd program. + +#### Introduction to SSL + +Secure Sockets Layer \(SSL\) is an encryption protocol that allows secure communication between the server and client. The Transport Layer Security \(TLS\) protocol ensures security and data integrity for network communication. openEuler supports Mozilla Network Security Services \(NSS\) as the security protocol TLS. To load the SSL, perform the following steps: + +1. Install the **mod\_ssl** RPM package as the **root** user. + + ```shell + # dnf install mod_ssl + ``` + +2. After the loading is complete, restart the httpd service as the **root** user to reload the configuration file. + + ```shell + # systemctl restart httpd + ``` + +3. After the loading is complete, run the **httpd -M** command as the **root** user to check whether the SSL is loaded. + + ```shell + # httpd -M | grep ssl + ``` + + If the following information is displayed, the SSL has been loaded successfully. + + ```shell + ssl_module (shared) + ``` + +### Verifying Whether the Web Service Is Successfully Set Up + +After the web server is set up, perform the following operations to check whether the web server is set up successfully: + +1. Run the following command as the **root** user to check the IP address of the server: + + ```shell + # ifconfig + ``` + + If the following information is displayed, the IP address of the server is 192.168.1.60. + + ```shell + enp3s0: flags=4163 mtu 1500 + inet 192.168.1.60 netmask 255.255.255.0 broadcast 192.168.1.255 + inet6 fe80::5054:ff:fe95:499f prefixlen 64 scopeid 0x20 + ether 52:54:00:95:49:9f txqueuelen 1000 (Ethernet) + RX packets 150713207 bytes 49333673733 (45.9 GiB) + RX errors 0 dropped 43 overruns 0 frame 0 + TX packets 2246438 bytes 203186675 (193.7 MiB) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + + enp4s0: flags=4163 mtu 1500 + ether 52:54:00:7d:80:9e txqueuelen 1000 (Ethernet) + RX packets 149937274 bytes 44652889185 (41.5 GiB) + RX errors 0 dropped 1102561 overruns 0 frame 0 + TX packets 0 bytes 0 (0.0 B) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + + lo: flags=73 mtu 65536 + inet 127.0.0.1 netmask 255.0.0.0 + inet6 ::1 prefixlen 128 scopeid 0x10 + loop txqueuelen 1000 (Local Loopback) + RX packets 37096 bytes 3447369 (3.2 MiB) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 37096 bytes 3447369 (3.2 MiB) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + ``` + +2. Configure the firewall as the **root** user. + + ```shell + # firewall-cmd --add-service=http --permanent + success + # firewall-cmd --reload + success + ``` + +3. Verify whether the web server is successfully set up. You can select the Linux or Windows operating system for verification. + - Using the Linux OS + + Run the following command to check whether the web page can be accessed. If the service is successfully set up, the web page can be accessed. + + ```shell + $ curl http://192.168.1.60 + ``` + + Run the following command to check whether the command output is 0. If the command output is 0, the httpd server is successfully set up. + + ```shell + $ echo $? + ``` + + - Using the Windows OS + + Open the browser and enter the following address in the address box. If the web page can be accessed, the httpd server is successfully set up. + + + + If the port number is changed, enter the address in the following format: + + : port number + +## Nginx Server + +### Overview + +Nginx is a lightweight web server which also acts as a reverse proxy server and email \(IMAP/POP3\) proxy server. It features low memory usage and strong concurrency capability. Nginx supports FastCGI, SSL, virtual hosts, URL rewrite, Gzip, and extension of many third-party modules. + +### Installing Nginx + +1. Configure the local yum source. For details, see [Configuring the Repo Server](./configuring_the_repo_server.md). +2. Clear the cache. + + ```shell + $ dnf clean all + ``` + +3. Create a cache. + + ```shell + $ dnf makecache + ``` + +4. Install the Nginx server as the **root** user. + + ```shell + # dnf install nginx + ``` + +5. Check the installed RPM package. + + ```shell + $ dnf list all | grep nginx + ``` + +### Managing Nginx + +#### Overview + +You can use the systemctl tool to manage the Nginx service, including starting, stopping, and restarting the service, and viewing the service status. This section describes how to manage the Nginx service. + +#### Prerequisites + +- Ensure that the Nginx service has been installed. If not, install it by referring to [Installing Nginx](#installing-nginx). + + For more information about service management, see [Service Management](./service_management.md). + +- To start, stop, and restart the Nginx service, you must have the **root** permission. + +#### Starting a Service + +- Run the following command to start and run the Nginx service: + + ```shell + # systemctl start nginx + ``` + +- If you want the Nginx service to automatically start when the system starts, the command and output are as follows: + + ```shell + # systemctl enable nginx + Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service. + ``` + +>[!NOTE] **NOTE:** +>If the running Nginx server functions as a secure server, a password is required after the system is started. The password is an encrypted private SSL key. + +#### Stopping the Service + +- Run the following command to stop the Nginx service: + + ```shell + # systemctl stop nginx + ``` + +- If you want to prevent the service from automatically starting during system startup, the command and output are as follows: + + ```shell + # systemctl disable nginx + Removed /etc/systemd/system/multi-user.target.wants/nginx.service. + ``` + +#### Restarting a Service + +You can restart the service in any of the following ways: + +- Restart the service. + + ```shell + # systemctl restart nginx + ``` + + This command stops the ongoing Nginx service and restarts it immediately. This command is generally used after a service is installed or when a dynamically loaded module \(such as PHP\) is removed. + +- Reload the configuration. + + ```shell + # systemctl reload nginx + ``` + + This command causes the running Nginx service to reload its configuration file. Any requests that are currently being processed will be interrupted, causing the client browser to display an error message or re-render some pages. + +- Smoothly restart Nginx. + + ```shell + # kill -HUP PID + ``` + + This command causes the running Nginx service to reload its configuration file. Any requests that are currently being processed will continue to use the old configuration file. + +#### Verifying the Service Status + +Check whether the Nginx service is running. + +```shell +$ systemctl is-active nginx +``` + +If **active** is displayed in the command output, the service is running. + +### Configuration File Description + +After the Nginx service is started, it reads the configuration file shown in [Table 2](#table24341012096) by default. + +**Table 2** Configuration file description + + + + + + + + + + + + + +

File

+

Description

+

/etc/nginx/nginx.conf

+

Main configuration files.

+

/etc/nginx/conf.d

+

Secondary directory of configuration files, which are also contained in the main configuration file.

+

The secondary directory of a configuration file is contained in the main configuration file.

+
+ +Although the default configuration can be used in most cases, you need to be familiar with some important configuration items. After the configuration file is modified, run the following command as the **root** user to check the syntax errors that may occur in the configuration file: + +```shell +# nginx -t +``` + +If the command output contains **syntax is ok**, the syntax of the configuration file is correct. + +>[!NOTE] **NOTE:** +> +>- Before modifying the configuration file, back up the original file so that the configuration file can be quickly restored if a fault occurs. +>- The modified configuration file takes effect only after the web service is restarted. + +### Management Modules + +#### Overview + +The Nginx service is a modular application that is distributed with many Dynamic Shared Objects \(DSOs\). DSOs can be dynamically loaded or unloaded when running if necessary. These modules are located in the **/usr/lib64/nginx/modules/** directory of the server operating system. This section describes how to load and write a module. + +#### Loading a Module + +To load a special DSO module, you can use the load module indication in the configuration file. Generally, the modules provided by independent software packages have their own configuration files in the **/usr/share/nginx/modules** directory. + +The DSO is automatically loaded when the **dnf install nginx** command is used to install the Nginx in the openEuler operating system. + +### Verifying Whether the Web Service Is Successfully Set Up + +After the web server is set up, perform the following operations to check whether the web server is set up successfully: + +1. Run the following command as the **root** user to check the IP address of the server: + + ```shell + # ifconfig + ``` + + If the following information is displayed, the IP address of the server is **192.168.1.60**. + + ```shell + enp3s0: flags=4163 mtu 1500 + inet 192.168.1.60 netmask 255.255.255.0 broadcast 192.168.1.255 + inet6 fe80::5054:ff:fe95:499f prefixlen 64 scopeid 0x20 + ether 52:54:00:95:49:9f txqueuelen 1000 (Ethernet) + RX packets 150713207 bytes 49333673733 (45.9 GiB) + RX errors 0 dropped 43 overruns 0 frame 0 + TX packets 2246438 bytes 203186675 (193.7 MiB) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + + enp4s0: flags=4163 mtu 1500 + ether 52:54:00:7d:80:9e txqueuelen 1000 (Ethernet) + RX packets 149937274 bytes 44652889185 (41.5 GiB) + RX errors 0 dropped 1102561 overruns 0 frame 0 + TX packets 0 bytes 0 (0.0 B) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + + lo: flags=73 mtu 65536 + inet 127.0.0.1 netmask 255.0.0.0 + inet6 ::1 prefixlen 128 scopeid 0x10 + loop txqueuelen 1000 (Local Loopback) + RX packets 37096 bytes 3447369 (3.2 MiB) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 37096 bytes 3447369 (3.2 MiB) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + ``` + +2. Configure the firewall as the **root** user. + + ```shell + # firewall-cmd --add-service=http --permanent + success + # firewall-cmd --reload + success + ``` + +3. Verify whether the web server is successfully set up. You can select the Linux or Windows operating system for verification. + - Using the Linux OS + + Run the following command to check whether the web page can be accessed. If the service is successfully set up, the web page can be accessed. + + ```shell + $ curl http://192.168.1.60 + ``` + + Run the following command to check whether the command output is **0**. If the command output is **0**, the Nginx server is successfully set up. + + ```shell + $ echo $? + ``` + + - Using the Windows OS + + Open the browser and enter the following address in the address box. If the web page can be accessed, the Nginx server is successfully set up. + + + + If the port number is changed, enter the address in the following format: + + : port number diff --git a/docs/en/server/administration/administrator/figures/D1376B2A-D036-41C4-B852-E8368F363B5E-1.png b/docs/en/server/administration/administrator/figures/D1376B2A-D036-41C4-B852-E8368F363B5E-1.png new file mode 100644 index 0000000000000000000000000000000000000000..900cdc07c1f0e844bc48fe2342e83c91a23c24ec Binary files /dev/null and b/docs/en/server/administration/administrator/figures/D1376B2A-D036-41C4-B852-E8368F363B5E-1.png differ diff --git a/docs/en/server/administration/administrator/figures/D1376B2A-D036-41C4-B852-E8368F363B5E.png b/docs/en/server/administration/administrator/figures/D1376B2A-D036-41C4-B852-E8368F363B5E.png new file mode 100644 index 0000000000000000000000000000000000000000..900cdc07c1f0e844bc48fe2342e83c91a23c24ec Binary files /dev/null and b/docs/en/server/administration/administrator/figures/D1376B2A-D036-41C4-B852-E8368F363B5E.png differ diff --git a/docs/en/server/administration/administrator/figures/RA-arch-1.png b/docs/en/server/administration/administrator/figures/RA-arch-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0ad1375a27cd61abf9f06518dbe1c01554623efd Binary files /dev/null and b/docs/en/server/administration/administrator/figures/RA-arch-1.png differ diff --git a/docs/en/server/administration/administrator/figures/RA-arch-2.png b/docs/en/server/administration/administrator/figures/RA-arch-2.png new file mode 100644 index 0000000000000000000000000000000000000000..19c7a1ee60422eb13d8a300514f78a63d1640394 Binary files /dev/null and b/docs/en/server/administration/administrator/figures/RA-arch-2.png differ diff --git a/docs/en/server/administration/administrator/figures/TPCM.png b/docs/en/server/administration/administrator/figures/TPCM.png new file mode 100644 index 0000000000000000000000000000000000000000..50882fb08433ee3ce187b3846bd6ec4a9f6d6818 Binary files /dev/null and b/docs/en/server/administration/administrator/figures/TPCM.png differ diff --git a/docs/en/server/administration/administrator/figures/creat_datadisk.png b/docs/en/server/administration/administrator/figures/creat_datadisk.png new file mode 100644 index 0000000000000000000000000000000000000000..0dfd6a2802184af6d809c485191ea52452cf28d5 Binary files /dev/null and b/docs/en/server/administration/administrator/figures/creat_datadisk.png differ diff --git a/docs/en/server/administration/administrator/figures/creat_datadisk1.png b/docs/en/server/administration/administrator/figures/creat_datadisk1.png new file mode 100644 index 0000000000000000000000000000000000000000..0dfd6a2802184af6d809c485191ea52452cf28d5 Binary files /dev/null and b/docs/en/server/administration/administrator/figures/creat_datadisk1.png differ diff --git a/docs/en/server/administration/administrator/figures/en-us_image_0229622729.png b/docs/en/server/administration/administrator/figures/en-us_image_0229622729.png new file mode 100644 index 0000000000000000000000000000000000000000..47f2d1cac133379469ed88b2bcb7213d75cf881e Binary files /dev/null and b/docs/en/server/administration/administrator/figures/en-us_image_0229622729.png differ diff --git a/docs/en/server/administration/administrator/figures/en-us_image_0229622789.png b/docs/en/server/administration/administrator/figures/en-us_image_0229622789.png new file mode 100644 index 0000000000000000000000000000000000000000..102d523ea5c2a1fedf4975556bf8b26f7599daaf Binary files /dev/null and b/docs/en/server/administration/administrator/figures/en-us_image_0229622789.png differ diff --git a/docs/en/server/administration/administrator/figures/en-us_image_0230050789.png b/docs/en/server/administration/administrator/figures/en-us_image_0230050789.png new file mode 100644 index 0000000000000000000000000000000000000000..0b785be2a026fe059c6ee41700a971a11cfff7ae Binary files /dev/null and b/docs/en/server/administration/administrator/figures/en-us_image_0230050789.png differ diff --git a/docs/en/server/administration/administrator/figures/en-us_image_0231143189.png b/docs/en/server/administration/administrator/figures/en-us_image_0231143189.png new file mode 100644 index 0000000000000000000000000000000000000000..7656f3aa5f5907f1e9f981c0cb5d44d4fcb84ef3 Binary files /dev/null and b/docs/en/server/administration/administrator/figures/en-us_image_0231143189.png differ diff --git a/docs/en/server/administration/administrator/figures/en-us_image_0231143191.png b/docs/en/server/administration/administrator/figures/en-us_image_0231143191.png new file mode 100644 index 0000000000000000000000000000000000000000..a82d1bcb2b719e3a372f63ae099cb5d52a93b536 Binary files /dev/null and b/docs/en/server/administration/administrator/figures/en-us_image_0231143191.png differ diff --git a/docs/en/server/administration/administrator/figures/en-us_image_0231143193.png b/docs/en/server/administration/administrator/figures/en-us_image_0231143193.png new file mode 100644 index 0000000000000000000000000000000000000000..94614045bddb0871b44d2f6603402f914871ad61 Binary files /dev/null and b/docs/en/server/administration/administrator/figures/en-us_image_0231143193.png differ diff --git a/docs/en/server/administration/administrator/figures/en-us_image_0231143195.png b/docs/en/server/administration/administrator/figures/en-us_image_0231143195.png new file mode 100644 index 0000000000000000000000000000000000000000..05011dbabe2d245c37ec68de646851bf955a2361 Binary files /dev/null and b/docs/en/server/administration/administrator/figures/en-us_image_0231143195.png differ diff --git a/docs/en/server/administration/administrator/figures/en-us_image_0231143196.png b/docs/en/server/administration/administrator/figures/en-us_image_0231143196.png new file mode 100644 index 0000000000000000000000000000000000000000..9bdbac969920af77721980804bd1c5433bea5bc9 Binary files /dev/null and b/docs/en/server/administration/administrator/figures/en-us_image_0231143196.png differ diff --git a/docs/en/server/administration/administrator/figures/en-us_image_0231143197.png b/docs/en/server/administration/administrator/figures/en-us_image_0231143197.png new file mode 100644 index 0000000000000000000000000000000000000000..5ea4eec4002374096d8ac18eb973ed3bf874b632 Binary files /dev/null and b/docs/en/server/administration/administrator/figures/en-us_image_0231143197.png differ diff --git a/docs/en/server/administration/administrator/figures/en-us_image_0231143198.png b/docs/en/server/administration/administrator/figures/en-us_image_0231143198.png new file mode 100644 index 0000000000000000000000000000000000000000..7d6360c150495d204da4b069e6dc62677580888f Binary files /dev/null and b/docs/en/server/administration/administrator/figures/en-us_image_0231143198.png differ diff --git a/docs/en/server/administration/administrator/figures/en-us_image_0231563132.png b/docs/en/server/administration/administrator/figures/en-us_image_0231563132.png new file mode 100644 index 0000000000000000000000000000000000000000..bb801a9471f3f3541ba96491654f25e2df9ce8bf Binary files /dev/null and b/docs/en/server/administration/administrator/figures/en-us_image_0231563132.png differ diff --git a/docs/en/server/administration/administrator/figures/en-us_image_0231563134.png b/docs/en/server/administration/administrator/figures/en-us_image_0231563134.png new file mode 100644 index 0000000000000000000000000000000000000000..398d15376d29d3aa406abb2e7e065d4625428c4d Binary files /dev/null and b/docs/en/server/administration/administrator/figures/en-us_image_0231563134.png differ diff --git a/docs/en/server/administration/administrator/figures/en-us_image_0231563135.png b/docs/en/server/administration/administrator/figures/en-us_image_0231563135.png new file mode 100644 index 0000000000000000000000000000000000000000..785977142a6bf0e1c1815b82dea73d75fa206a75 Binary files /dev/null and b/docs/en/server/administration/administrator/figures/en-us_image_0231563135.png differ diff --git a/docs/en/server/administration/administrator/figures/en-us_image_0231563136.png b/docs/en/server/administration/administrator/figures/en-us_image_0231563136.png new file mode 100644 index 0000000000000000000000000000000000000000..c274db4d0ca9d8758267a916e19fdef4aa22d0ba Binary files /dev/null and b/docs/en/server/administration/administrator/figures/en-us_image_0231563136.png differ diff --git a/docs/en/server/administration/administrator/figures/etmem-system-architecture-en.png b/docs/en/server/administration/administrator/figures/etmem-system-architecture-en.png new file mode 100644 index 0000000000000000000000000000000000000000..146a3618135712cb66feb3fc399a7549c636bd92 Binary files /dev/null and b/docs/en/server/administration/administrator/figures/etmem-system-architecture-en.png differ diff --git a/docs/en/server/administration/administrator/figures/example-command-output.png b/docs/en/server/administration/administrator/figures/example-command-output.png new file mode 100644 index 0000000000000000000000000000000000000000..2d77d3dc2934763b5da896a827b9805da34d1c09 Binary files /dev/null and b/docs/en/server/administration/administrator/figures/example-command-output.png differ diff --git a/docs/en/server/administration/administrator/figures/ima_digest_list_update.png b/docs/en/server/administration/administrator/figures/ima_digest_list_update.png new file mode 100644 index 0000000000000000000000000000000000000000..771067e31cee84591fbb914d7be4e8c576d7f5d2 Binary files /dev/null and b/docs/en/server/administration/administrator/figures/ima_digest_list_update.png differ diff --git a/docs/en/server/administration/administrator/figures/ima_performance.png b/docs/en/server/administration/administrator/figures/ima_performance.png new file mode 100644 index 0000000000000000000000000000000000000000..f5d641e8682ad2b9c0fbfad191add1819f5b2eef Binary files /dev/null and b/docs/en/server/administration/administrator/figures/ima_performance.png differ diff --git a/docs/en/server/administration/administrator/figures/ima_verification.png b/docs/en/server/administration/administrator/figures/ima_verification.png new file mode 100644 index 0000000000000000000000000000000000000000..fc879949db5387c61ccf6176f948b9a00f4fb053 Binary files /dev/null and b/docs/en/server/administration/administrator/figures/ima_verification.png differ diff --git a/docs/en/server/administration/administrator/figures/login.png b/docs/en/server/administration/administrator/figures/login.png new file mode 100644 index 0000000000000000000000000000000000000000..d15c2cad98fba16320d587f3c7b0c80f435c5d3a Binary files /dev/null and b/docs/en/server/administration/administrator/figures/login.png differ diff --git a/docs/en/server/administration/administrator/figures/mariadb-logical-architecture.png b/docs/en/server/administration/administrator/figures/mariadb-logical-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e65e786d918c84bbb14c101b69bc4ad36ccb4b Binary files /dev/null and b/docs/en/server/administration/administrator/figures/mariadb-logical-architecture.png differ diff --git a/docs/en/server/administration/administrator/figures/nginx-deployment-succeeded.png b/docs/en/server/administration/administrator/figures/nginx-deployment-succeeded.png new file mode 100644 index 0000000000000000000000000000000000000000..9ffb2c142defbd690e5407659116bf8e5582ba73 Binary files /dev/null and b/docs/en/server/administration/administrator/figures/nginx-deployment-succeeded.png differ diff --git a/docs/en/server/administration/administrator/figures/nginx-startup-failure.png b/docs/en/server/administration/administrator/figures/nginx-startup-failure.png new file mode 100644 index 0000000000000000000000000000000000000000..c8b855453433796265de42d7ffd0189c7ff9be2b Binary files /dev/null and b/docs/en/server/administration/administrator/figures/nginx-startup-failure.png differ diff --git a/docs/en/server/administration/administrator/figures/postgres.png b/docs/en/server/administration/administrator/figures/postgres.png new file mode 100644 index 0000000000000000000000000000000000000000..e7fc36882718587ec949133fe9892185cb4c2158 Binary files /dev/null and b/docs/en/server/administration/administrator/figures/postgres.png differ diff --git a/docs/en/server/administration/administrator/figures/postgresql-architecture.png b/docs/en/server/administration/administrator/figures/postgresql-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..cc73eb31f746409efc1e997072bf3d18b013012e Binary files /dev/null and b/docs/en/server/administration/administrator/figures/postgresql-architecture.png differ diff --git a/docs/en/server/administration/administrator/figures/the-nginx-service-is-successfully-started.png b/docs/en/server/administration/administrator/figures/the-nginx-service-is-successfully-started.png new file mode 100644 index 0000000000000000000000000000000000000000..bc6929772fd98fac3494b4436f26910b09818cb7 Binary files /dev/null and b/docs/en/server/administration/administrator/figures/the-nginx-service-is-successfully-started.png differ diff --git a/docs/en/server/administration/administrator/figures/trusted_chain.png b/docs/en/server/administration/administrator/figures/trusted_chain.png new file mode 100644 index 0000000000000000000000000000000000000000..034f0f092f41fb500ee4122339c447d10d4138ec Binary files /dev/null and b/docs/en/server/administration/administrator/figures/trusted_chain.png differ diff --git a/docs/en/server/administration/administrator/process_management.md b/docs/en/server/administration/administrator/process_management.md new file mode 100644 index 0000000000000000000000000000000000000000..8a633c71243238ea6969c2c27898257834407bd2 --- /dev/null +++ b/docs/en/server/administration/administrator/process_management.md @@ -0,0 +1,335 @@ +# Process Management + +The operating system (OS) manages multiple user requests and tasks. In most cases, the OS comes with only one CPU and one main memory, but multiple tier-2 disks and input/output \(I/O\) devices. Therefore, users have to share resources, but it appears to users that they are exclusively occupying resources. The OS places user tasks, OS tasks, mailing, print tasks, and other pending tasks in a queue and schedules the tasks according to predefined rules. This topic describes how the OS manages processes. + +## Viewing Processes + +Linux is a multi-task system and needs to get process information during process management. To manage processes, you need to know the number of processes and their statuses. Multiple commands are available to view processes. + +### who Command + +The `who` command is used to display system user information. For example, before running the `talk` command to establish instant communication with another user, you need to run the `who` command to determine whether the target user is online. In another example, the system administrator can run the `who` command to learn what each login user is doing at the current time. The `who` command is widely seen in system administration since it is easy to use and can return a comprehensive set of accurate user information. + +The following is an example output of the `who` command, where system users and their status are displayed: The use of the `who` command is as follows: + +```shell +$ who +admin tty1 2023-07-28 15:55 +admin pts/0 2023-08-05 15:46 (192.168.0.110) +admin pts/2 2023-07-29 19:52 (192.168.0.110) +root pts/3 2023-07-30 12:07 (192.168.0.110) +root pts/4 2023-07-31 10:29 (192.168.0.144) +root pts/5 2023-07-31 14:52 (192.168.0.11) +root pts/6 2023-08-06 10:12 (192.168.0.234) +root pts/8 2023-08-06 11:34 (192.168.0.234) +``` + +### ps Command + +The **ps** command is the most basic and powerful command to view process information. The ps command is used to display process information, including which processes are running, terminated, resource-hungry, or stay as zombies. + +The `ps` command is the most basic and powerful command to view process information, including which processes are running, terminated, resource-hungry, or stay as zombies. + +A common scenario is to monitor background processes, which do not interact with your screen, keyboard, and other I/O devices. [Table 1](#en-us_topic_0151921029_t34619d964a3d41ad8694189ec383359c) lists the common `ps` command options. + +**Table 1** Common ps command options + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Option

+

Description

+

-e

+

Displays all processes.

+

-f

+

Full output format.

+

-h

+

Hides column headings in the process information.

+

-l

+

Long output format.

+

-w

+

Wide output format.

+

-a

+

Lists all processes on a terminal, including those of other users.

+

-r

+

Lists only running processes.

+

-x

+

Lists all processes without control terminals.

+
+ +For example, to list all processes on a terminal, run the following command: + +```shell +$ ps -a + PID TTY TIME CMD +12175 pts/6 00:00:00 bash +24526 pts/0 00:00:00 vsftpd +29478 pts/5 00:00:00 ps +32461 pts/0 1-01:58:33 sh +``` + +### top Command + +Both the `top` and `ps` commands can display a list of currently running processes, but the `top` command allows you to update the displayed list of processes by pressing a button repeatedly. If the `top` command is executed in foreground, it exclusively occupies foreground until it is terminated. The `top` command provides real-time visibility into system processor status. You can sort the list of CPU tasks by CPU usage, memory usage, or task execution time. Extensive display customization, such as choosing the columns or sorting method, can be achieved using interactive commands or the customization file. + +[Figure 1](#en-us_topic_0151921029_f289234fcdbac453796200d80e9889cd1) provides an example output of the `top` command. + +**Figure 1** Example command output +![](./figures/example-command-output.png) + +### kill Command + +The `kill` command is used to terminate a process regardless of whether the process is running in foreground or background. It differs from the combo key **Ctrl+C**, which can terminate only foreground processes. The reason for terminating a background process can be heavy use of CPU resources or deadlock. + +The `kill` command sends a signal to terminate running processes. By default, the `TERM` signal is used, terminating all processes incapable of capturing it. To terminate a process capable of capturing the `TERM` signal, use the `KILL` signal \(signal ID: 9\) instead. + +Two types of syntax of the `kill` command: + +```shell +kill [-s signal | -p] [-a] PID… +kill -l [signal] +``` + +The process ID can be retrieved by running the `ps` command. The `-s` option indicates the signal sent to the specified program. The signal details can be viewed by running the `kill -l` command. The `-p` option indicates the specified process ID. + +For example, to terminate the process whose ID is 1409, run the following command as the **root** user: + +```shell +kill -9 1409 +``` + +Example output of the `kill` command with the `-l` option + +```shell +$ kill -l + 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP + 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 +11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM +16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP +21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ +26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR +31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 +38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 +43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 +48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 +53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 +58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 +63) SIGRTMAX-1 64) SIGRTMAX +``` + +## Scheduling a Process + +The time-consuming and resource-demanding part of maintenance work is often performed at late night. You can schedule relevant processes to get started at the scheduled time instead of staying up all night. The following describes the process scheduling commands. + +### Using the at Command to Run Processes at the Scheduled Time + +#### Function + +The `at` command is used to run a batch of processes \(a series of commands\) at the scheduled time or time and date. + +Syntax of the `at` command: + +```shell +at [-V] [-q queue] [-f filename] [-mldbv] time +at -c job [job...] +``` + +#### Time Format + +The scheduled time can be in any of the following formats: + +- _hh:mm_ today: If _hh:mm_ is earlier than the current time, the selected commands will be run at _hh:mm_ the next day. +- midnight, noon, teatime \(typically at 16:00\), or the like +- 12-hour format followed by am or pm +- Time + date \(_month day_, _mm/dd/yy_, or _dd.mm.yy_\). The scheduled date must follow the scheduled time. + +The scheduled time can also be relative time, which is suitable for scheduling commands that are going to be executed soon. For example, now+_N_ minutes, hours, days, or weeks. _N_ indicates the specified time, which may be a few days or hours. Further, the scheduled time can be words like today, tomorrow, or the like. Here are some examples of the scheduled time. + +Assume that the current time is 12:30 June 7 2019 and you want to run a command at 4:30 pm. The time scheduled by the `at` command can be any of the following: + +```shell + at 4:30pm + at 16:30 + at 16:30 today + at now+4 hours + at now+ 240 minutes + at 16:30 7.6.19 + at 16:30 6/7/19 + at 16:30 Jun 7 +``` + +Although you can select any of the preceding examples according to your preference, absolute time in 24-hour format, such as `at 16:30 6/7/19`, is recommended. + +#### Privileges + +Only commands from standard input or from the file specified by the **-f** option can be scheduled by the `at` command. If the `su` command is executed to switch the OS from user A to user B and then the `at` command is executed at the shell prompt of user B, the `at` command execution result is sent to user B, whereas emails \(if any\) are sent to user A. + +For example, to run the `slocate -u` command at 10 am on June 8, 2019, run the following commands as the **root** user: + +```shell +$ at 10:00 6/8/19 +at> slocate -u +at> +[1]+ Stopped at 10:00 6/8/19 +``` + +When the **at\>** prompt appears, type `slocate -u` and press **Enter**. Repeat the step to add other commands that need to be run at 10 am on 8 June 2019. Then, press **Ctrl+D** to exit the `at` command. + +The administrator is authorized to run the `at` command unconditionally. For other users, their privileges to run the `at` command is defined in the **/etc/at.allow** and **/etc/at.deny** files. + +### Using the cron Service to Run Commands Periodically + +The `at` command can run commands at the scheduled time, but only once. It means that after the commands to be run is specified, the system completes the task at the specified time. If you need to run the commands repeatedly, the **cron** service is a good choice. + +#### Cron Service + +The **cron** service searches the **/var/spool/cron** directory for the **crontab** files named by the user name in the **/etc/passwd** file and loads the search results into memory to execute the commands in the **crontab** files. Each user has a **crontab** file with the same name as the user name. For example, the **crontab** file of the **userexample** user is **/var/spool/cron/userexample**. + +The **cron** service also reads the cron configuration file **/etc/crontab** every minute, which can be edited in various formats. If no **crontab** files are found, the **cron** service enters sleep mode and releases system resources. One minute later, the **cron** service is waken up to repeat the search work and command execution. Therefore, the background process occupies few resources and is wakened up every minute to check whether there are commands to be executed. + +Command execution results are then mailed to users specified by the environment variable `MAILTO` in the **/etc/crontab** file. The **cron** service, once started, does not require manual intervention except when you need to replace the scheduled commands with new ones. + +#### crontab Command + +The `crontab` command is used to install, edit, remove, list, and perform other operations on **crontab** files. Each user has its own **crontab** files and can add commands to be executed to the files. + +Here are common `crontab` command options: + +- crontab -u //Set the **cron** service of a user. This option is required only when the `crontab` command is run by the **root** user. +- crontab -l //List details about the **cron** service of a user. +- crontab -r //Remove the **cron** service of a user. +- crontab -e //Edit the **cron** service of a user. + +For example, to list the **cron** service settings of the **root** user, run the following command: + +```shell +crontab -u root -l +``` + +#### crontab Files + +Enter the commands to be executed and their scheduled time in **crontab** files. Each line in the files contains six fields. The first five fields are the time when the specified command is executed, and the last field is the command to be executed. Fields are separated by spaces or tabs. The format is as follows: + +```shell +minute hour day-of-month month-of-year day-of-week commands +``` + +The following table describes the fields in each line. + +**Table 2** Parameter description + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

minute

+

The minute of the hour at which commands will be executed. Value range: 0-59.

+

hour

+

The hour of the day at which scheduled commands will be executed. Value range: 0-23.

+

day-of-month

+

The day of the month on which scheduled commands will be executed. Value range: 1-31.

+

month-of-year

+

The month of the year in which scheduled commands will be executed. Value range: 1-12.

+

day-of-week

+

The day of the week on which scheduled commands will be executed. Value range: 0-6.

+

commands

+

Scheduled commands.

+
+ +The fields cannot be left unspecified. In addition to numerical values, the following special characters are allowed: asterisk \(\*\), indicating a wildcard value; forward slash \(/\), followed by a numeral value _N_ to indicate that commands will be executed at a regular interval of _N_; hyphen \(-\), used with a range; and comma \(,\), used to separate discrete values. A complete path to the commands must be provided. + +For example, to allow the OS to add **sleepy** to the **/tmp/test.txt** file every two hours from 18 pm to 22 pm, add the following line to a **crontab** file: + +```shell +* 18-22/2 * * * echo "sleepy" >> /tmp/test.txt +``` + +Each time the **cron** service settings of a user are edited, the **cron** service generates a **crontab** file with the same name as the user in the **/var/spool/cron directory**. The **crontab** file can be edited only using the `crontab -e` command. Alternatively, the user can create a file and run the `crontab _filename_` command to import its **cron** settings to the new file. + +For example, to create a **crontab** file for the **userexample** user, perform the following steps: + +1. Create a file using any text editor. Add the commands that need to be executed periodically and the command execution interval to the new file. In this example, the new file is **\~/userexample.cron**. +2. Run the following command as the **root** user to install the new file as the **crontab** file of the **userexample** user: + + ```shell + crontab -u userexample ~/userexample.cron + ``` + +After the new file is installed, you will find a file named **userexample** in the **/var/spool/cron** directory. This file is the required **crontab** file. + +>[!NOTE] **NOTE:** +>Do not restart the **cron** service after a **crontab** file is modified, because the **cron** service, once started, reads the **crontab** file every minute to check whether there are commands that need to be executed periodically. + +#### /etc/crontab File + +The **cron** service reads all files in the **/var/spool/cron** directory and the **/etc/crontab** file every minute. Therefore, you can use the **cron** service by configuring the **/etc/crontab** file. A **crontab** file contains user-specific commands, whereas the **/etc/crontab** file contains system-wide commands. The following is an example of the **/etc/crontab** file. + +```text +SHELL=/bin/sh +PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin +MAILTO=root //If an error occurs or data is output, the data is sent to the account by email. +HOME=/ +# run-parts +01 * * * * root run-parts /etc/cron.hourly //Run scripts in the /etc/cron.hourly directory once an hour. +02 4 * * * root run-parts /etc/cron.daily //Run scripts in the /etc/cron.daily directory once a day. +22 4 * * 0 root run-parts /etc/cron.weekly //Run scripts in the /etc/cron.weekly directory once a week. +42 4 1 * * root run-parts /etc/cron.monthly //Run scripts in the /etc/cron.monthly directory once a month. +``` + +>[!NOTE] **NOTE:** +>If the **run-parts** parameter is deleted, a script name instead of a directory name is used. + +## Suspending/Resuming a Process + +A process can be suspended or resumed by job control, and the process will continue to work from the suspended point after being resumed. To suspend a foreground process, press **Ctrl+Z**. After you press **Ctrl+Z**, the `cat` command is suspended together with the foreground process you want to suspend. You can use the `jobs` command instead to display a list of shell jobs, including their names, IDs, and status. + +To resume a process in foreground or background, run the `fg` or `bg` command, respectively. The process then starts from where it was suspended previously. diff --git a/docs/en/server/administration/administrator/public_sys-resources/icon-caution.gif b/docs/en/server/administration/administrator/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/administration/administrator/public_sys-resources/icon-caution.gif differ diff --git a/docs/en/server/administration/administrator/public_sys-resources/icon-danger.gif b/docs/en/server/administration/administrator/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/administration/administrator/public_sys-resources/icon-danger.gif differ diff --git a/docs/en/server/administration/administrator/public_sys-resources/icon-note.gif b/docs/en/server/administration/administrator/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/server/administration/administrator/public_sys-resources/icon-note.gif differ diff --git a/docs/en/server/administration/administrator/public_sys-resources/icon-notice.gif b/docs/en/server/administration/administrator/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/en/server/administration/administrator/public_sys-resources/icon-notice.gif differ diff --git a/docs/en/server/administration/administrator/public_sys-resources/icon-tip.gif b/docs/en/server/administration/administrator/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/en/server/administration/administrator/public_sys-resources/icon-tip.gif differ diff --git a/docs/en/server/administration/administrator/public_sys-resources/icon-warning.gif b/docs/en/server/administration/administrator/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/administration/administrator/public_sys-resources/icon-warning.gif differ diff --git a/docs/en/server/administration/administrator/service_management.md b/docs/en/server/administration/administrator/service_management.md new file mode 100644 index 0000000000000000000000000000000000000000..1db4aa34aff1423da9bf112ea67e302ee2f3cebb --- /dev/null +++ b/docs/en/server/administration/administrator/service_management.md @@ -0,0 +1,807 @@ +# Service Management + +This topic describes how to manage your operating system and services using the systemd. + +## Introduction to systemd + +The systemd is a system and service manager for Linux operating systems. It is designed to be backward compatible with SysV and LSB init scripts, and provides a number of features such as Socket & D-Bus based activation of services, on-demand activation of daemons, system state snapshots, and mount & automount point management. With systemd, the service control logic and parallelization are refined. + +### Systemd Units + +In systemd, the targets of most actions are units, which are resources systemd know how to manage. Units are categorized by the type of resources they represent and defined in unit configuration files. For example, the avahi.service unit represents the Avahi daemon and is defined in the **avahi.service** file. [Table 1](#en-us_topic_0151921012_t2dcb6d973cc249ed9ccd56729751ca6b) lists available types of systemd units. + +**Table 1** Available types of systemd units + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Unit Type

+

File Extension

+

Description

+

Service unit

+

.service

+

A system service.

+

Target unit

+

.target

+

A group of systemd units.

+

Automount unit

+

.automount

+

A file system automount point.

+

Device unit

+

.device

+

A device file recognized by the kernel.

+

Mount unit

+

.mount

+

A file system mount point.

+

Path unit

+

.path

+

A file or directory in a file system.

+

Scope unit

+

.scope

+

An externally created process.

+

Slice unit

+

.slice

+

A group of hierarchically organized units that manage system processes.

+

Socket unit

+

.socket

+

An inter-process communication socket.

+

Swap unit

+

.swap

+

A swap device or a swap file.

+

Timer unit

+

.timer

+

A systemd timer.

+
+ +All available types of systemd units are located in one of the following directories listed in [Table 2](#en-us_topic_0151921012_t2523a0a9a0c54f9b849e52d1efa0160c). + +**Table 2** Locations of available systemd units + + + + + + + + + + + + + + + + +

Directory

+

Description

+

/usr/lib/systemd/system/

+

Systemd units distributed with installed RPM packages.

+

/run/systemd/system/

+

Systemd units created at runtime.

+

/etc/systemd/system/

+

Systemd units created and managed by the system administrator.

+
+ +## Features + +### Fast Activation + +The systemd provides more aggressive parallelization than UpStart. The use of Socket- and D-Bus based activation reduces the time required to boot the operating system. + +To accelerate system boot, systemd seeks to: + +- Activate only the necessary processes +- Activate as many processes as possible in parallel + +### On-Demand Activation + +During SysVinit initialization, it activates all the possible background service processes that might be used. Users can log in only after all these service processes are activated. The drawbacks in SysVinit are obvious: slow system boot and a waste of system resources. + +Some services may rarely or even never be used during system runtime. For example, CUPS, printing services are rarely used on most servers. SSHD is rarely accessed on many servers. It is unnecessary to spend time on starting these services and system resources. + +systemd can only be activated when a service is requested. If the service request is over, systemd stops. + +### Service Lifecycle Management by Cgroups + +An important role of an init system is to track and manage the lifecycle of services. It can start and stop a service. However, it is more difficult than you could ever imagine to encode an init system into stopping services. + +Service processes often run in background as daemons and sometimes fork twice. In UpStart, the expect stanza in the configuration file must be correctly configured. Otherwise, UpStart is unable to learn a daemon's PID by counting the number of forks. + +Things are made simpler with Cgroups, which have long been used to manage system resource quotas. The ease of use comes largely from its file-system-like user interface. When a parent service creates a child service, the latter inherits all attributes of the Cgroup to which the parent service belongs. This means that all relevant services are put into the same Cgroup. The systemd can find the PIDs of all relevant services simply by traversing their control group and then stop them one by one. + +### Mount and Automount Point Management + +In traditional Linux systems, users can use the **/etc/fstab** file to maintain fixed file system mount points. These mount points are automatically mounted during system startup. Once the startup is complete, these mount points are available. These mount points are file systems critical to system running, such as the **HOME** directory. Like SysVinit, systemd manages these mount points so that they can be automatically mounted at system startup. systemd is also compatible with the **/etc/fstab** file. You can continue to use this file to manage mount points. + +There are times when you need to mount or unmount on demand. For example, a temporary mounting point is required for you to access the DVD content, and the mounting point is canceled \(using the **umount** command\) if you no longer need to access the content, thereby saving resources. This is traditionally achieved using the autofs service. + +The systemd allows automatic mount without a need to install autofs. + +### Transactional Dependency Management + +System boot involves a host of separate jobs, some of which may be dependent on each other. For example, a network file system \(NFS\) can be mounted only after network connectivity is activated. The systemd can run a large number of dependent jobs in parallel, but not all of them. Looking back to the NFS example, it is impossible to mount NFS and activate network at the same time. Before running a job, systemd calculates its dependencies, creates a temporary transaction, and verifies that this transaction is consistent \(all relevant services can be activated without any dependency on each other\). + +### Compatibility with SysVinit Scripts + +Like UpStart, systemd introduces new configuration methods and has new requirements for application development. If you want to replace the currently running initialization system with systemd, systemd must be compatible with the existing program. It is difficult to modify all the service code in any Linux distribution in a short time for the purpose of using systemd. + +The systemd provides features compatible with SysVinit and LSB initscripts. You do not need to modify the existing services and processes in the system. This reduces the cost of migrating the system to systemd, making it possible for users to replace the existing initialization system with systemd. + +### System State Snapshots and System Restoration + +The systemd can be started on demand. Therefore, the running status of the system changes dynamically, and you cannot know the specific services that are running in the system. systemd snapshots enable the current system running status to be saved and restored. + +For example, if services A and B are running in the system, you can run the **systemd** command to create a snapshot for the current system running status. Then stop process A or make any other change to the system, for example, starting process C. After these changes, run the snapshot restoration command of systemd to restore the system to the point at which the snapshot was taken. That is, only services A and B are running. A possible application scenario is debugging. For example, when an exception occurs on the server, a user saves the current status as a snapshot for debugging, and then perform any operation, for example, stopping the service. After the debugging is complete, restore the snapshot. + +## Managing System Services + +The systemd provides the systemctl command to start, stop, restart, view, enable, and disable system services. + +### Comparison Between SysVinit and systemd Commands + +The **systemctl** command from the **systemd** command has the functions similar to the **SysVinit** command. Note that the **service** and **chkconfig** commands are supported in this version. For details, see [Table 3](#en-us_topic_0151920917_ta7039963b0c74b909b72c22cbc9f2e28). You are advised to manage system services by running the **systemctl** command. + +**Table 3** Comparison between SysVinit and systemd commands + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

SysVinit Command

+

systemd Command

+

Description

+

service network start

+

systemctl start network.service

+

Starts a service.

+

service network stop

+

systemctl stop network.service

+

Stops a service.

+

service network restart

+

systemctl restart network.service

+

Restarts a service.

+

service network reload

+

systemctl reload network.service

+

Reloads a configuration file without interrupting an operation.

+

service network condrestart

+

systemctl condrestart network.service

+

Restarts a service only if it is running.

+

service network status

+

systemctl status network.service

+

Checks the service running status.

+

chkconfig network on

+

systemctl enable network.service

+

Enables a service when the service activation time arrives or a trigger condition for enabling the service is met.

+

chkconfig network off

+

systemctl disable network.service

+

Disables a service when the service activation time arrives or a trigger condition for disabling the service is met.

+

chkconfig network

+

systemctl is-enabled network.service

+

Checks whether a service is enabled.

+

chkconfig \-\-list

+

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

+

Lists all services in each runlevel and checks whether they are enabled.

+

chkconfig network \-\-list

+

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

+

Lists the runlevels in which a service is enabled and those in which the service is disabled.

+

chkconfig network \-\-add

+

systemctl daemon-reload

+

Used when you need to create a service file or change settings.

+
+ +### Listing Services + +To list all currently loaded services, run the following command: + +```shell +systemctl list-units --type service +``` + +To list all services regardless of whether they are loaded, run the following command \(with the all option\): + +```shell +systemctl list-units --type service --all +``` + +Example list of all currently loaded services: + +```shell +$ systemctl list-units --type service +UNIT LOAD ACTIVE SUB DESCRIPTION +atd.service loaded active running Deferred execution scheduler +auditd.service loaded active running Security Auditing Service +avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack +chronyd.service loaded active running NTP client/server +crond.service loaded active running Command Scheduler +dbus.service loaded active running D-Bus System Message Bus +dracut-shutdown.service loaded active exited Restore /run/initramfs on shutdown +firewalld.service loaded active running firewalld - dynamic firewall daemon +getty@tty1.service loaded active running Getty on tty1 +gssproxy.service loaded active running GSSAPI Proxy Daemon +...... +``` + +### Displaying Service Status + +To display the status of a service, run the following command: + +```shell +systemctl status name.service +``` + +[Table 4](#en-us_topic_0151920917_t36cd267d69244ed39ae06bb117ed8e62) describes the parameters in the command output. + +**Table 4** Output parameters + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

Loaded

+

Information on whether the service has been loaded, the absolute path to the service file, and a note of whether the service is enabled.

+

Active

+

Information on whether the service is running and a time stamp.

+

Main PID

+

PID of the service.

+

CGroup

+

Additional information about related control groups.

+
+ +To verify whether a particular service is running, run the following command: + +```shell +systemctl is-active name.service +``` + +The output of the **is-active** command is as follows: + +**Table 5** Output of the is-active command + + + + + + + + + + + + + + + + + + + +

Status

+

Description

+

active(running)

+

One or more services are running in the system.

+

active(exited)

+

A service that ends properly after being executed only once. Currently, no program is running in the system. For example, the quotaon function is performed only when the program is started or mounted.

+

active(waiting)

+

The program needs to wait for other events to continue running. For example, the print queue service is being started, but it needs to be queued (print jobs) so that it can continue to wake up the printer service to perform the next print function.

+

inactive

+

The service is not running.

+
+ +Similarly, to determine whether a particular service is enabled, run the following command: + +```shell +systemctl is-enabled name.service +``` + +The output of the **is-enabled** command is as follows: + +**Table 6** Output of the is-enabled command + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Status

+

Description

+

enabled

+

Has been permanently enabled through Alias= Alias, .wants/, or .requires/ soft link in the /etc/systemd/system/ directory.

+

enabled-runtime

+

Has been temporarily enabled through Alias= Alias, .wants/, or .requires/ soft link in the /run/systemd/system/ directory.

+

linked

+

Although the unit file is not in the standard unit directory, one or more soft links pointing to the unit file exist in the /etc/systemd/system/ permanent directory.

+

linked-runtime

+

Although the unit file is not in the standard unit directory, one or more soft links pointing to the unit file exist in the /run/systemd/system/ temporary directory.

+

masked

+

Has been masked permanently by the /etc/systemd/system/ directory (soft link to /dev/null). Therefore, the start operation fails.

+

masked-runtime

+

Has been masked temporarily by the /run/systemd/systemd/ directory (soft link to /dev/null). Therefore, the start operation fails.

+

static

+

Not enabled. There is no option available for the enable command in the [Install] section of the unit file.

+

indirect

+

Not enabled. But the list of values for the Also= option in the [Install] section of the unit file is not empty (that is, some units in the list may have been enabled), or the unit file has an alias soft link which is not in the Also= list. For a template unit, it indicates that an instance different from DefaultInstance= is enabled.

+

disabled

+

Not enabled. But the [Install] section of the unit file contains options available for the enable command.

+

generated

+

The unit file is dynamically generated by the unit generator. The generated unit file may not be directly enabled, but is implicitly enabled by the unit generator.

+

transient

+

The unit file is dynamically and temporarily generated by the runtime API. The temporary unit may not be enabled.

+

bad

+

The unit file is incorrect or other errors occur. is-enabled does not return this status, but displays an error message. The list-unit-files command may display this unit.

+
+ +For example, to display the status of gdm.service, run the **systemctl status gdm.service** command. + +```shell +# systemctl status gdm.service +gdm.service - GNOME Display Manager + Loaded: loaded (/usr/lib/systemd/system/gdm.service; enabled) + Active: active (running) since Thu 2013-10-17 17:31:23 CEST; 5min ago + Main PID: 1029 (gdm) + CGroup: /system.slice/gdm.service + ├─1029 /usr/sbin/gdm + ├─1037 /usr/libexec/gdm-simple-slave --display-id /org/gno... + └─1047 /usr/bin/Xorg :0 -background none -verbose -auth /r...Oct 17 17:31:23 localhost systemd[1]: Started GNOME Display Manager. +``` + +### Starting a Service + +To start a service, run the following command as the user **root**: + +```shell +systemctl start name.service +``` + +For example, to start the httpd service, run the following command: + +```shell +# systemctl start httpd.service +``` + +### Stopping a Service + +To stop a service, run the following command as the user **root**: + +```shell +systemctl stop name.service +``` + +For example, to stop the Bluetooth service, run the following command: + +```shell +# systemctl stop bluetooth.service +``` + +### Restarting a Service + +To restart a service, run the following command as the user **root**: + +```shell +systemctl restart name.service +``` + +This command stops the selected service in the current session and immediately starts it again. If the selected service is not running, this command starts it too. + +For example, to restart the Bluetooth service, run the following command: + +```shell +# systemctl restart bluetooth.service +``` + +### Enabling a Service + +To configure a service to start automatically at system boot time, run the following command as the user **root**: + +```shell +systemctl enable name.service +``` + +For example, to configure the httpd service to start automatically at system boot time, run the following command: + +```shell +# systemctl enable httpd.service +ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service' +``` + +### Disabling a Service + +To prevent a service from starting automatically at system boot time, run the following command as the user **root**: + +```shell +systemctl disable name.service +``` + +For example, to prevent the Bluetooth service from starting automatically at system boot time, run the following command: + +```shell +# systemctl disable bluetooth.service +Removed /etc/systemd/system/bluetooth.target.wants/bluetooth.service. +Removed /etc/systemd/system/dbus-org.bluez.service. +``` + +## Changing a Runlevel + +### Targets and Runlevels + +In systemd, the concept of runlevels has been replaced with systemd targets to improve flexibility. For example, you can inherit an existing target and turn it into your own target by adding other services. [Table 7](#en-us_topic_0151920939_t9af92c282ad240ea9a79fb08d26e8181) provides a complete list of runlevels and their corresponding systemd targets. + +**Table 7** Mapping between runlevels and targets + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Runlevel

+

systemd Target

+

Description

+

0

+

runlevel0.target, poweroff.target

+

The operating system is powered off.

+

1, s, single

+

runlevel1.target, rescue.target

+

The operating system is in single user mode.

+

2, 4

+

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

+

The operating system is in user-defined or domain-specific runlevel (by default, it is equivalent to runlevel 3).

+

3

+

runlevel3.target, multi-user.target

+

The operating system is in non-graphical multi-user mode, and can be accessed from multiple consoles or networks.

+

5

+

runlevel5.target, graphical.target

+

The operating system is in graphical multi-user mode. All the services running at level 3 can be accessed through graphical login.

+

6

+

runlevel6.target, reboot.target

+

The operating system is rebooted.

+

emergency

+

emergency.target

+

Emergency shell.

+
+ +### Viewing the Default Startup Target + +Run the following command to view the default startup target of the system: + +```shell +systemctl get-default +``` + +### Viewing All Startup Targets + +Run the following command to view all startup targets of the system: + +```shell +systemctl list-units --type=target +``` + +### Changing the Default Target + +To change the default target, run the following command as the user **root**: + +```shell +systemctl set-default name.target +``` + +### Changing the Current Target + +To change the current target, run the following command as the user **root**: + +```shell +systemctl isolate name.target +``` + +### Changing to Rescue Mode + +To change the operating system to rescue mode, run the following command as the user **root**: + +```shell +systemctl rescue +``` + +This command is similar to the **systemctl isolate rescue.target** command. After the command is executed, the following information is displayed on the serial port: + +```console +You are in rescue mode. After logging in, type "journalctl -xb" to viewsystem logs, "systemctl reboot" to reboot, "systemctl default" or "exit"to boot into default mode. +Give root password for maintenance +(or press Control-D to continue): +``` + +>[!NOTE] **NOTE:** +>You need to restart the system to enter the normal mode from the rescue mode. + +### Changing to Emergency Mode + +To change the operating system to emergency mode, run the following command as the user **root**: + +```shell +systemctl emergency +``` + +This command is similar to the **systemctl isolate emergency.target** command. After the command is executed, the following information is displayed on the serial port: + +```console +You are in emergency mode. After logging in, type "journalctl -xb" to viewsystem logs, "systemctl reboot" to reboot, "systemctl default" or "exit"to boot into default mode. +Give root password for maintenance +(or press Control-D to continue): +``` + +>[!NOTE] **NOTE:** +>You need to restart the system to enter the normal mode from the emergency mode. + +## Shutting Down, Suspending, and Hibernating the Operating System + +### systemctl Command + +The systemd uses the systemctl command instead of old Linux system management commands to shut down, restart, suspend, and hibernate the operating system. Although previous Linux system management commands are still available in systemd for compatibility reasons, you are advised to use **systemctl** when possible. The mapping relationship is shown in [Table 8](#en-us_topic_0151920964_t3daaaba6a03b4c36be9668efcdb61f3b). + +**Table 8** Mapping between old Linux system management commands and systemctl + + + + + + + + + + + + + + + + + + + + +

Linux Management Command

+

systemctl Command

+

Description

+

halt

+

systemctl halt

+

Shuts down the operating system.

+

poweroff

+

systemctl poweroff

+

Powers off the operating system.

+

reboot

+

systemctl reboot

+

Reboots the operating system.

+
+ +### Shutting Down the Operating System + +To shut down the system and power off the operating system, run the following command as the user **root**: + +```shell +systemctl poweroff +``` + +To shut down the operating system without powering it off, run the following command as the user **root**: + +```shell +systemctl halt +``` + +By default, running either of these commands causes systemd to send an informative message to all login users. To prevent systemd from sending this message, run this command with the **\-\-no\-wall** option. The command is as follows: + +```shell +systemctl --no-wall poweroff +``` + +### Restarting the Operating System + +To restart the operating system, run the following command as the user **root**: + +```shell +systemctl reboot +``` + +By default, running either of these commands causes systemd to send an informative message to all login users. To prevent systemd from sending this message, run this command with the **\-\-no\-wall** option. The command is as follows: + +```shell +systemctl --no-wall reboot +``` + +### Suspending the Operating System + +To suspend the operating system, run the following command as the user **root**: + +```shell +systemctl suspend +``` + +### Hibernating the Operating System + +To hibernate the operating system, run the following command as the user **root**: + +```shell +systemctl hibernate +``` + +To suspend and hibernate the operating system, run the following command as the user **root**: + +```shell +systemctl hybrid-sleep +``` diff --git a/docs/en/server/administration/administrator/setting_up_the_database_server.md b/docs/en/server/administration/administrator/setting_up_the_database_server.md new file mode 100644 index 0000000000000000000000000000000000000000..621d0af1149d1e2f913c582c6e3de7b88d9ffb3f --- /dev/null +++ b/docs/en/server/administration/administrator/setting_up_the_database_server.md @@ -0,0 +1,2155 @@ +# Setting Up the Database Server + +## PostgreSQL Server + +### Software Description + +[Figure 1](#fig26022387391) shows the PostgreSQL architecture and [Table 1](#table62020913417) describes the main processes. + +**Figure 1** PostgreSQL architecture +![](./figures/postgresql-architecture.png) + +**Table 1** Main processes in PostgreSQL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Process Type

+

Process Name

+

Description

+

Main process

+

Postmaster

+

Postmaster process controls all database instances in general and is responsible for starting and stopping database instances.

+

Resident process

+

Postgres (resident process)

+

This process manages backend resident processes and is also called postmaster. By default, this process listens Unix domain sockets and the 5432 port of TCP/IP and waits for the front end to process the connections. You can change the listening port number in the postgresql.conf file of PostgreSQL.

+

Subprocess

+

Postgres (subprocess)

+

The subprocess determines whether to allow the connection according to the security policy defined by the pg_hba.conf file. According to the security policy, the subprocess rejects certain IP addresses and networks, allows only certain users to connect to the databases, or allows only certain databases to be connected.

+

Postgres receives the query from the front end, searches the database, and returns the results. Sometimes, it also updates the database. The updated data is recorded in transaction logs (WAL logs for PostgreSQL). This method is used when the system is powered off, the server breaks down, or the server is restarted. In addition, the logs can also be used for data recovery in other scenarios. In PostgreSQL 9.0 or later, WAL logs can be transferred to other PostgreSQL systems to replicate database in real-time.

+

Auxiliary processes

+

SysLogger (system log)

+

The main process starts the Syslogger auxiliary process only when logging_collection in the Postgres.conf file is set to on.

+

BgWriter (background write)

+

This process writes dirty pages from the shared memory to the drive. The purpose is to improve the performance of inserting, updating, and deleting data.

+

WALWriter (write-ahead log)

+

This process writes modification operations into drives before data is modified so that the data does not need to be persisted into files in subsequent real-time data updates.

+

PgArch (archive)

+

write-ahead logs (WALs) are recycled. The PgArch process backs up WALs before archiving them. After the entire database is backed up, the Point in Time Recovery (PITR) technology can be used to archive WALs. The database can be restored to any point after the full backup by using the full backup data and the subsequently archived WALs.

+

AutoVacuum (automatic cleanup)

+

In the PostgreSQL database, after a DELETE operation is performed on a table, old data is not immediately deleted. When new data is added, the system creates a data row instead of overwriting the old data. The old data is only marked as deleted and will be cleared only when no other concurrent transactions are reading the data. In this case, the data is cleared by the AutoVacuum process.

+

PgStat (statistics collection)

+

This process collects data statistics. It is used to estimate the cost during query optimization, including the number of insertions update, and deletion operations performed on a table or index, the number of drive block read and write operations, and the number of row read operations. pg_statistic stores the information collected by the PgStat.

+

CheckPoint (checkpoint)

+

A checkpoint is a transaction sequence point set by the system. It is used to ensure that log information before a checkpoint written into the drives.

+
+ +### Configuring the Environment + +>[!NOTE] **NOTE:** +>The following environment configuration is for reference only. Configure the environment based on the site requirements. + +#### Disabling the Firewall and Automatic Startup + +>[!NOTE] **NOTE:** +>It is recommended that firewall be disabled in the test environment to prevent network impact. Configure the firewall based on actual requirements. + +1. Stop the firewall service as the **root** user. + + ```shell + systemctl stop firewalld + ``` + +2. Disable the firewall service as the **root** user. + + ```shell + systemctl disable firewalld + ``` + + >[!NOTE] **NOTE:** + >The automatic startup is automatically disabled as the firewall is disabled. + +#### Disabling SELinux + +1. Modify the configuration file as the **root** user. + + ```shell + sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux + ``` + +#### Creating a User Group and a User + +>[!NOTE] **NOTE:** +>In the server environment, independent users are assigned to each process to implement permission isolation for security purposes. The user group and user are created for the OS, not for the database. + +1. Create a PostgreSQL user or user group as the **root** user. + + ```shell + groupadd postgres + ``` + + ```shell + useradd -g postgres postgres + ``` + +2. Set the postgres user password as the **root** user. \(Enter the password twice for confirmation.\) + + ```shell + passwd postgres + ``` + +#### Creating Data Drives + +>[!NOTE] **NOTE:** +> +>- When testing the ultimate performance, you are advised to attach NVMe SSDs with better I/O performance to create PostgreSQL test instances to avoid the impact of disk I/O on the performance test result. This section uses NVMe SSDs as an example. For details, see Step 1 to Step 4. +>- In a non-performance test, run the following command as the **root** user to create a data directory. Then skip this section. +> \# mkdir /data + +1. Create a file system \(xfs is used as an example as the **root** user. Create the file system based on the site requirements.\). If a file system has been created for a disk, an error will be reported when you run this command. You can use the **-f** parameter to forcibly create a file system. + + ```shell + mkfs.xfs /dev/nvme0n1 + ``` + +2. Create a data directory. + + ```shell + mkdir /data + ``` + +3. Mount disks. + + ```shell + mount -o noatime,nobarrier /dev/nvme0n1 /data + ``` + +#### Data Directory Authorization + +1. Modify the directory permission as the **root** user. + + ```shell + chown -R postgres:postgres /data/ + ``` + +### Installing, Running, and Uninstalling PostgreSQL + +#### Installing PostgreSQL + +1. Configure the local yum repository. For details, see [Configuring the Repo Server](./configuring_the_repo_server.md). +2. Clear the cache. + + ```shell + dnf clean all + ``` + +3. Create a cache. + + ```shell + dnf makecache + ``` + +4. Install the PostgreSQL server as the **root** user. + + ```shell + dnf install postgresql-server + ``` + +5. Check the installed RPM package. + + ```shell + rpm -qa | grep postgresql + ``` + +#### Running PostgreSQL + +##### Initializing the Database + +>[!TIP] **NOTICE:** +>Perform this step as the postgres user. + +1. Switch to the created PostgreSQL user. + + ```shell + su - postgres + ``` + +2. Initialize the database. In the command, **/usr/bin** is the directory where the **initdb** command is located. + + ```shell + /usr/bin/initdb -D /data/ + ``` + +##### Starting the Database + +1. Enable the PostgreSQL database. + + ```shell + /usr/bin/pg_ctl -D /data/ -l /data/logfile start + ``` + +2. Check whether the PostgreSQL database process is started properly. + + ```shell + ps -ef | grep postgres + ``` + + If the following information is displayed, the PostgreSQL processes have been started. + + ![](./figures/postgres.png) + +##### Logging In to the Database + +1. Log in to the database. + + ```shell + /usr/bin/psql -U postgres + ``` + + ```text + psql (13.3) + Type "help" for help. + + postgres=# + ``` + + >[!NOTE] **NOTE:** + >You do not need to enter a password when logging in to the database for the first time. + +##### Configuring the Database Accounts and Passwords + +1. After login, set the postgres user password. + + ```shell + postgres=#alter user postgres with password '123456'; + ``` + + ![](./figures/en-us_image_0230050789.png) + +##### Exiting the Database + +1. Run **\\q** to exit from the database. + + ```shell + postgres=# \q + ``` + +##### Stopping the Database + +1. Stop the PostgreSQL database. + + ```shell + /usr/bin/pg_ctl -D /data/ -l /data/logfile stop + ``` + +#### Uninstalling PostgreSQL + +1. Stop the database as the postgres user. + + ```shell + /usr/bin/pg_ctl -D /data/ -l /data/logfile stop + ``` + +2. Run the **dnf remove postgresql-server** command as the user **root** to uninstall the PostgreSQL database. + + ```shell + dnf remove postgresql-server + ``` + +### Managing Database Roles + +#### Creating a Role + +You can use the **CREATE ROLE** statement or **createuser** command to create a role. The **createuser** command encapsulates the **CREATE ROLE** statement and needs to be executed on the shell GUI instead of the database GUI. + +```pgsql +CREATE ROLE rolename [ [ WITH ] option [ ... ] ]; +``` + +```shell +createuser rolename +``` + +In the preceding information: + +- **rolename**: indicates a role name. +- Parameters of the _option_ are as follows: + - **SUPERUSER | NOSUPERUSER**: determines whether a new role is a superuser. If this parameter is not specified, the default value **NOSUPERUSER** is used, indicating that the role is not a superuser. + - **CREATEDB | NOCREATEDB**: specifies whether a role can create a database. If this parameter is not specified, the default value **NOCREATEDB** is used, indicating that the role cannot create a database. + - **CREATEROLE | NOCREATEROLE**: determines whether a role can create roles. If this parameter is not specified, the default value **NOCREATEROLE** is used, indicating that the role cannot create roles. + - **INHERIT | NOINHERIT**: determines whether a role inherits the other roles' permissions in the group to which the role belongs. A role with the INHERIT attribute can automatically use any permissions that have been assigned to its direct or indirect group. If this parameter is not specified, the default value **INHERIT** is used. + - **LOGIN | NOLOGIN**: determines whether a role can log in. A role with the LOGIN attribute can be considered as a user. A role without this attribute can be used to manage database permissions but is not a user. If this attribute is not specified, the default value **NOLOGIN** is used. However, if **CREATE USER** instead of **CREATE ROLE** is used to create a role, the LOGIN attribute is used by default. + - **\[ENCRYPTED | UNENCRYPTED\] PASSWORD'password'**: password of a role. The password is valid only for roles with the LOGIN attribute. **ENCRYPTED | UNENCRYPTED**: determines whether to encrypt the password. If this parameter is not specified, the value **ENCRYPTED** is used, that is, the password is encrypted. + - **VALID UNTIL'timestamp'**: specifies the timestamp when the password of a role expires. If this parameter is not specified, the password is permanently valid. + - **IN ROLE rolename1**: lists one or more existing roles. The new role _rolename_ will be added to and become a member of **rolename1**. + - **ROLE rolename2**: lists one or more existing roles. These roles will be automatically added as members of the new role _rolename_. That is, the new role is a user group. + +To run this command, you must have the CREATEROLE permission or is the database superuser. + +##### Example + +\# Create a role **roleexample1** who can log in. + +```shell +postgres=# CREATE ROLE roleexample1 LOGIN; +``` + +\# Create a role **roleexample2** with the password **123456**. + +```shell +postgres=# CREATE ROLE roleexample2 WITH LOGIN PASSWORD '123456'; +``` + +\# Create a role named **roleexample3**. + +```console +[postgres@localhost ~]$ createuser roleexample3 +``` + +#### Viewing Roles + +You can run the **SELECT** statement or the PostgreSQL meta-command **\\du** to view the role. + +```pgsql +SELECT rolename FROM pg_roles; +``` + +```pgsql +\du +``` + +In the preceding command, _rolename_ indicates the role name. + +##### Example + +\# View the **roleexample1** role. + +```shell +postgres=# SELECT roleexample1 from pg_roles; +``` + +\# View the existing roles. + +```shell +postgres=# \du +``` + +#### Modifying a Role + +##### Modifying a Username + +Use the **ALTER ROLE** statement to modify an existing role name. + +```pgsql +ALTER ROLE oldrolername RENAME TO newrolename; +``` + +In the preceding information: + +- _oldrolername_: original role name. +- _newrolename_: new role name. + +##### Example of Modifying a User + +\# Change the role name **roleexample1** to **roleexapme2**. + +```shell +postgres=# ALTER ROLE roleexample1 RENAME TO roleexample2; +``` + +##### Modifying a User Password + +Use the **ALTER ROLE** statement to modify the login password of a role. + +```pgsql +ALTER ROLE rolename PASSWORD 'password' +``` + +In the preceding information: + +- _rolename_: indicates a role name. +- _password_: password. + +##### Example of Modifying the Password of a Role + +\# Modify the password of **roleexample1** to **456789**. + +```shell +postgres=# ALTER ROLE roleexample1 WITH PASSWORD '456789'; +``` + +#### Deleting a Role + +You can use the **DROP ROLE** statement or **dropuser** command to delete a role. The **dropuser** command encapsulates the **DROP ROLE** statement and needs to be executed on the shell GUI instead of the database GUI. + +```pgsql +DROP ROLE rolename; +``` + +```shell +dropuser rolename +``` + +In the preceding command, _rolename_ indicates the role name. + +##### Example + +\# Delete the **userexample1** role. + +```shell +postgres=# DROP ROLE userexample1; +``` + +\# Delete the **userexample2** role. + +```console +[postgres@localhost ~]$ dropuser userexample2 +``` + +#### Role Permissions + +You can use the **GRANT** statement to grant permissions to a role. + +Grant the table operation permission to a role. + +```pgsql +GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ] +``` + +Grant the sequence operation permission to a role. + +```pgsql +GRANT { { USAGE | SELECT | UPDATE } [,...] | ALL [ PRIVILEGES ] } ON SEQUENCE sequencename [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ] +``` + +Grant the database operation permission to a role. + +```pgsql +GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE databasename [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ] +``` + +Grant the function operation permission to a role. + +```pgsql +GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTION funcname ( [ [ argmode ] [ argname ] argtype [, ...] ] ) [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ] +``` + +Grant the operation permission of the procedural language to a role. + +```pgsql +GRANT { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE langname [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ] +``` + +Grant the schema operation permission to a role. + +```pgsql +GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schemaname [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ] +``` + +Grant the tablespace operation permission to a role. + +```pgsql +GRANT { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACE tablespacename [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ] +``` + +Assign the member relationship of rolename1 to rolename2. + +```pgsql +GRANT rolename1 [, ...] TO rolename2 [, ...] [ WITH ADMIN OPTION ] +``` + +In the preceding information: + +- **SELECT**, **INSERT**, **UPDATE**, **DELETE**, **REFERENCES**, **TRIGGER**, **USAGE**, **CREATE**, **CONNECT**, **TEMPORARY**, **TEMP**, **EXECUTE**, and **ALL \[**_PRIVILEGES_**\]** indicate user operation permissions. **ALL \[**_PRIVILEGES_**\]** indicates all permissions, the _PRIVILEGES_ keyword is optional in PostgreSQL, but it is required in strict SQL statements. +- **ON** clause: specifies the object on which the permission is granted. +- **tablename**: table name. +- **TO** clause: specifies the role to which the permission is granted. +- **rolename**, **rolename1**, and **rolename2**: role names. +- **groupname**: name of a role group. +- **PUBLIC**: indicates that the permission is granted to all roles, including users who may be created later. +- **WITH GRANT OPTION**: indicates that the recipient of a permission can grant the permission to others. This option cannot be assigned to PUBLIC. +- **sequencename**: sequence name. +- **databasename**: database name. +- **funcname \(\[\[argmode\] \[argname\] argtype \[, ...\]\]\)**: function name and its parameters. +- **langname**: procedural language name. +- **schemaname**: schema name. +- **tablespacename**: tablespace name. +- **WITH ADMIN OPTION**: A member can assign the member relationship of a role to other roles and cancel the member relationship of other roles. + +##### Example + +\# Grant the CREATE permission on database1 to userexample. + +```shell +postgres=# GRANT CREATE ON DATABASE database1 TO userexample; +``` + +\# Grant all permissions on table1 to all users. + +```shell +postgres=# GRANT ALL PRIVILEGES ON TABLE table1 TO PUBLIC; +``` + +#### Deleting User Permissions + +You can use the **REVOKE** statement to revoke the permissions previously granted to one or more roles. + +Revoke the table operation permission from a role. + +```pgsql +REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] +``` + +Revoke the sequence operation permission from a role. + +```pgsql +REVOKE [ GRANT OPTION FOR ] { { USAGE | SELECT | UPDATE } [,...] | ALL [ PRIVILEGES ] } ON SEQUENCE sequencename [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] +``` + +Revoke the database operation permission from a role. + +```pgsql +REVOKE [ GRANT OPTION FOR ] { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE databasename [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] +``` + +Revoke the function operation permission from a role. + +```pgsql +REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTION funcname ( [ [ argmode ] [ argname ] argtype [, ...] ] ) [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] +``` + +Revoke the procedural language operation permission from a role. + +```pgsql +REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE langname [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] +``` + +Revoke the schema operation permission from a role. + +```pgsql +REVOKE [ GRANT OPTION FOR ] { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schemaname [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] +``` + +Revoke the tablespace operation permission from a role. + +```pgsql +REVOKE [ GRANT OPTION FOR ] { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACE tablespacename [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] +``` + +Revoke the member relationship of rolename1 from rolename2. + +```pgsql +REVOKE [ ADMIN OPTION FOR ] rolename1 [, ...] FROM rolename2 [, ...] [ CASCADE | RESTRICT ] +``` + +In the preceding information: + +- **GRANT OPTION FOR**: The permission cannot be granted to others, but permission itself is not revoked. +- **SELECT**, **INSERT**, **UPDATE**, **DELETE**, **REFERENCES**, **TRIGGER**, **USAGE**, **CREATE**, **CONNECT**, **TEMPORARY**, **TEMP**, **EXECUTE**, and **ALL \[**_PRIVILEGES_**\]** indicate user operation permissions. **ALL \[**_PRIVILEGES_**\]** indicates all permissions, the _PRIVILEGES_ keyword is optional in PostgreSQL, but it is required in strict SQL statements. +- **ON** clause: specifies the object on which the permission is revoked. +- _tablename_: table name. +- **FROM** clause: specifies the role whose permission is revoked. +- _rolename_, _rolename1_, and _rolename2_: role names. +- _groupname_: name of a role group. +- **PUBLIC**: revokes the implicitly defined groups that have all roles. However, this does not mean that all roles lose the permissions. The permissions directly obtained and the permissions obtained through a group are still valid. +- _sequencename_: sequence name. +- **CASCADE**: revokes all dependent permissions. +- **RESTRICT**: does not revoke all dependent permissions. +- _databasename_: database name. +- **funcname \(**_\[\[argmode\] \[argname\] argtype \[, ...\]\]_**\)**: function name and its parameters. +- _langname_: procedural language name. +- _schemaname_: schema name. +- _tablespacename_: tablespace name. +- **ADMIN OPTION FOR**: The transferred authorization is not automatically revoked. + +##### Example + +\# Grant the CREATE permission on database1 to userexample. + +```shell +postgres=# GRANT CREATE ON DATABASE database1 TO userexample; +``` + +\# Grant all permissions on table1 to all users. + +```shell +postgres=# GRANT ALL PRIVILEGES ON TABLE table1 TO PUBLIC; +``` + +### Managing Databases + +#### Creating a Database + +You can use the **CREATE DATABASE** statement or the **createdb** command to create a database. The **createdb** command encapsulates the **CREATE DATABASE** statement and needs to be executed on the shell GUI instead of the database GUI. + +```pgsql +CREATE DATABASE databasename; +``` + +```shell +createdb databasename +``` + +In the preceding command, **databasename** indicates the database name. + +To use this command, you must have the CREATEDB permission. + +##### Example + +\# Create a database named **database1**. + +```shell +postgres=# CREATE DATABASE database1; +``` + +#### Selecting a Database + +Use the **\\c** statement to select a database. + +```pgsql +\c databasename; +``` + +In the preceding command, **databasename** indicates the database name. + +##### Example + +\# Select the **databaseexample** database. + +```shell +postgres=# \c databaseexample; +``` + +#### Viewing a Database + +Use the **\\l** statement to view the database. + +```pgsql +\l; +``` + +##### Example + +\# View all databases. + +```shell +postgres=# \l; +``` + +#### Deleting a Database + +You can run the **DROP DATABASE** statement or **dropdb** command to delete a database. The **dropdb** command encapsulates the **DROP DATABASE** statement and needs to be executed on the shell GUI instead of the database GUI. + +>![](./public_sys-resources/icon-caution.gif) **CAUTION:** +>Exercise caution when deleting a database. Once a database is deleted, all tables and data in the database will be deleted. + +```pgsql +DROP DATABASE databasename; +``` + +```shell +dropdb databasename +``` + +In the preceding command, **databasename** indicates the database name. + +The **DROP DATABASE** statement deletes the system directory items of the database and the file directories that contain data. + +**DROP DATABASE** can be executed only by the super administrator or database owner. + +##### Example + +\# Delete the **databaseexample** database. + +```shell +postgres=# DROP DATABASE databaseexample; +``` + +#### Backing Up a Database + +Run the **pg\_dump** command to back up the database and dump the database to a script file or another archive file. + +```shell +pg_dump [option]... [databasename] > outfile +``` + +In the preceding information: + +- _databasename_: database name. If this parameter is not specified, the environment variable **PGDATABASE** is used. If that environment variable is not specified, use the username that initiates the connection. +- _outfile_: database backup file. +- _option_: parameter option of the **pg\_dump** command. Multiple parameters can be separated by spaces. The common parameters of the **pg\_dump** command are as follows: + - **-f, \-\-file**= _filename_: specified output file. If this parameter is ignored, the standard output is used. + - **-d, \-\-dbname**= _databasename_: database to be dumped. + - **-h, \-\-host**= _hostname_: specifies the hostname. + - **-p, \-\-port**= _portnumber_: port number. + - **-U, \-\-username**= _username_: username of the connection. + - **-W, \-\-password**: forces PostgreSQL to prompt for a password before connecting to a database. + +##### Example + +\# Back up the database1 database of user **postgres** on port **3306** of the host whose IP address is **192.168.202.144** to the **db1.sql** file. + +```shell +[postgres@localhost ~]$ pg_dump -h 192.168.202.144 -p 3306 -U postgres -W database1 > db1.sql +``` + +#### Restoring a Database + +Run the **psql** command to restore the database. + +```shell +psql [option]... [databasename [username]] < infile +``` + +In the preceding information: + +- _databasename_: database name. If this parameter is not specified, the environment variable **PGDATABASE** is used. If that environment variable is not specified, use the username that initiates the connection. +- _username_: name of a user. +- _infile_: **outfile** parameter in the **pg\_dump** command. +- _option_: parameter option of the **psql** command. Multiple parameters can be separated by spaces. The common parameters of the **psql** command are as follows: + - **-f, \-\-file**= _filename_: specified output file. If this parameter is ignored, the standard output is used. + - **-d, \-\-dbname**= _databasename_: database to be dumped. + - **-h, \-\-host**= _hostname_: specifies the hostname. + - **-p, \-\-port**= _portnumber_: port number. + - **-U, \-\-username**= _username_: username of the connection. + - **-W, \-\-password**: forces PostgreSQL to prompt for a password before connecting to a database. + +The **psql** command cannot be used to automatically create the **databasename** database. Therefore, you need to create the **databasename** database before running the **psql** command to restore the database. + +##### Example + +\# Import the **db1.sql** script file to the newdb database of the postgres user on the host **192.168.202.144** through port **3306**. + +```shell +[postgres@localhost ~]$ createdb newdb +[postgres@localhost ~]$ psql -h 192.168.202.144 -p 3306 -U postgres -W -d newdb < db1.sql +``` + +## MariaDB Server + +### Software Description + +The MariaDB database management system is a branch of MySQL and is maintained by the open-source community. The MariaDB database management system uses the General Public License \(GPL\). MariaDB is designed to be fully compatible with MySQL, including APIs and command lines, so that it can easily replace MySQL. MariaDB also provides many new features. + +[Figure 2](#fig13492418164520) shows the MariaDB architecture. + +**Figure 2** MariaDB logical architecture +![](./figures/mariadb-logical-architecture.png) + +When MariaDB receives a SQL statement, the execution process is as follows: + +1. When a client connects to MariaDB, the hostname, username, and password of the client are authenticated. The authentication function can be implemented as a plug-in. +2. If the login is successful, the client sends SQL commands to the server. The parser parses the SQL statements. +3. The server checks whether the client has the permission to obtain the required resources. +4. If the query has been stored in the query cache, the result is returned immediately. +5. The optimizer will find the fastest execution policy or plan. That is, the optimizer can determine which tables will be read, which indexes will be accessed, and which temporary tables will be used. A good policy can reduce a large number of disk access and sorting operations. +6. Storage engines read and write data and index files. Caches are used to accelerate these operations. Other features such as transactions and foreign keys are processed at the storage engine layer. + +Storage engines manage and control data at the physical layer. They manage data files, data, indexes, and caches, making data management and reading more efficient. Each table has a .frm file that contains table definitions. + +Each storage engine manages and stores data in different ways, and supports different features and performance. For example: + +- MyISAM: suitable for environments with more reads and fewer writes. It does not support transactions and supports full-text indexes. +- noDB: supports transactions, row locks, and foreign keys. +- MEMORY: stores data in the memory. +- CSV: stores data in CSV format. + +### Configuring the Environment + +>[!NOTE] **NOTE:** +>The following environment configuration is for reference only. Configure the environment based on the site requirements. + +#### Disabling the Firewall and Automatic Startup + +>[!NOTE] **NOTE:** +>It is recommended that firewall be disabled in the test environment to prevent network impact. Configure the firewall based on actual requirements. + +1. Stop the firewall service as the **root** user. + + ```shell + systemctl stop firewalld + ``` + +2. Disable the firewall service as the **root** user. + + ```shell + systemctl disable firewalld + ``` + + >[!NOTE] **NOTE:** + >The automatic startup is automatically disabled as the firewall is disabled. + +#### Disabling SELinux + +1. Modify the configuration file as the **root** user. + + ```shell + sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux + ``` + +#### Creating a User Group and a User + +>[!NOTE] **NOTE:** +>In the server environment, independent users are assigned to each process to implement permission isolation for security purposes. The user group and user are created for the OS, not for the database. + +1. Create a MySQL user or user group as the **root** user. + + ```shell + groupadd mysql + ``` + + ```shell + useradd -g mysql mysql + ``` + +2. Set the user password as the **root** user. + + ```shell + passwd mysql + ``` + + Enter the password twice for confirmation. + +#### Creating Data Drives + +>[!NOTE] **NOTE:** +> +>- If a performance test needs to be performed, an independent drive is required for the data directory. You need to format and mount the drive. For details, see Method 1 or Method 2. +>- In a non-performance test, run the following command as the **root** user to create a data directory. Then skip this section. +> \# mkdir /data + +##### Method 1: Using fdisk for Drive Management as the **root** user + +1. Create a partition, for example, **/dev/sdb**. + + ```shell + fdisk /dev/sdb + ``` + +2. Enter **n** and press **Enter**. +3. Enter **p** and press **Enter**. +4. Enter **1** and press **Enter**. +5. Retain the default settings and press **Enter**. +6. Retain the default settings and press **Enter**. +7. Enter **w** and press **Enter**. +8. Create a file system, for example, **xfs**. + + ```shell + mkfs.xfs /dev/sdb1 + ``` + +9. Mount the partition to **/data** for the OS. + + ```shell + mkdir /data + ``` + + ```shell + mount /dev/sdb1 /data + ``` + +10. Run the **vi /etc/fstab** command and edit the **/etc/fstab** file to enable the data drive to be automatically mounted after the system is restarted. For example, add the content in the last line, as shown in the following figure. + + In the last line, **/dev/nvme0n1p1** is only an example. + + ![](./figures/creat_datadisk1.png) + +##### Method 2: Using LVM for Drive Management as the **root** user +> +>[!NOTE] **NOTE:** +>Install the LVM2 package in the image as follows: +> +>1. Configure the local yum repository. For details, see [Configuring the Repo Server](./configuring_the_repo_server.md). If the repository has been configured, skip this step. +>2. Install LVM2. +> **\# yum install lvm2** + +1. Create a physical volume, for example, **sdb**. + + ```shell + pvcreate /dev/sdb + ``` + +2. Create a physical volume group, for example, **datavg**. + + ```shell + vgcreate datavg /dev/sdb + ``` + +3. Create a logical volume, for example, **datalv** of 600 GB. + + ```shell + lvcreate -L 600G -n datalv datavg + ``` + +4. Create a file system. + + ```shell + mkfs.xfs /dev/datavg/datalv + ``` + +5. Create a data directory and mount it. + + ```shell + mkdir /data + ``` + + ```shell + mount /dev/datavg/datalv /data + ``` + +6. Run the **vi /etc/fstab** command and edit the **/etc/fstab** file to enable the data drive to be automatically mounted after the system is restarted. For example, add the content in the last line, as shown in the following figure. + + In the last line, **/dev/datavg/datalv** is only an example. + + ![](./figures/d1376b2a-d036-41c4-b852-e8368f363b5e.png) + +#### Creating a Database Directory and Granting Permissions + +1. In the created data directory **/data**, create directories for processes and grant permissions to the MySQL group or user created as the **root** user. + + ```shell + mkdir -p /data/mariadb + cd /data/mariadb + mkdir data tmp run log + chown -R mysql:mysql /data + ``` + +### Installing, Running, and Uninstalling MariaDB Server + +#### Installing MariaDB + +1. Configure the local yum repository. For details, see [Configuring the Repo Server](./configuring_the_repo_server.md). +2. Clear the cache. + + ```shell + dnf clean all + ``` + +3. Create a cache. + + ```shell + dnf makecache + ``` + +4. Install the MariaDB server. + + ```shell + dnf install mariadb-server + ``` + +5. Check the installed RPM package. + + ```shell + rpm -qa | grep mariadb + ``` + +#### Running MariaDB Server + +1. Start the MariaDB server as the **root** user. + + ```shell + systemctl start mariadb + ``` + +2. Initialize the database as the **root** user. + + ```shell + /usr/bin/mysql_secure_installation + ``` + + During the command execution, you need to enter the password of the database user **root**. If no password is set, press **Enter**. Then, set the password as prompted. + +3. Log in to the database. + + ```shell + mysql -u root -p + ``` + + After the command is executed, the system prompts you to enter the password. The password is the one set in [2](#li197143190587). + + >[!NOTE] **NOTE:** + >Run the **\\q** or **exit** command to exit the database. + +#### Uninstalling MariaDB + +1. Stop the database process as the **root** user. + + ```shell + $ ps -ef | grep mysql + # kill -9 PID + ``` + +2. Run the **dnf remove mariadb-server** command as the **root** user to uninstall MariaDB. + + ```shell + dnf remove mariadb-server + ``` + +### Managing Database Users + +#### Creating Users + +Run the **CREATE USER** statement to create one or more users and set corresponding passwords. + +```pgsql +CREATE USER 'username'@'hostname' IDENTIFIED BY 'password'; +``` + +In the preceding information: + +- _username_: name of a user. +- _host_: hostname, that is, the name of the host where the user connects to the database. As a local user, you can set the parameter to **localhost**. If the host name is not specified during user creation, the host name is **%** by default, indicating a group of hosts. +- _password_: password for logging in to the server. The password can be null. If the password is null, the user can log in to the server without entering the password. This method, however, is not recommended because it provides low security. + +To use the **CREATE USER** statement, you must have the INSERT permission on the database or the global CREATE USER permission. + +After a user account is created using the **CREATE USER** statement, a record is added to the user table in the database. If the account to be created exists, an error will occur during statement execution. + +A new user has few permissions and can perform only operations that do not require permissions. For example, a user can run the **SHOW** statement to query the list of all storage engines and character sets. + +##### Example + +\# Create a local user whose password is 123456 and username is userexample1. + +```pgsql +> CREATE USER 'userexample1'@'localhost' IDENTIFIED BY '123456'; +``` + +\# Create a user whose password is 123456, username is userexample2, and hostname is 192.168.1.100. + +```pgsql +> CREATE USER 'userexample2'@'192.168.1.100' IDENTIFIED BY '123456'; +``` + +#### Viewing Users + +Run the **SHOW GRANTS** or **SELECT** statement to view one or more users. + +View a specific user: + +```pgsql +SHOW GRANTS [FOR 'username'@'hostname']; +``` + +```pgsql +SELECT USER,HOST,PASSWORD FROM mysql.user WHERE USER='username'; +``` + +View all users: + +```pgsql +SELECT USER,HOST,PASSWORD FROM mysql.user; +``` + +In the preceding information: + +- _username_: name of a user. +- _hostname_: host name. + +##### Example + +\# View the user userexample1. + +```pgsql +> SHOW GRANTS FOR 'userexample1'@'localhost'; +``` + +\# View all users in the MySQL database. + +```pgsql +> SELECT USER,HOST,PASSWORD FROM mysql.user; +``` + +#### Modifying Users + +##### Modifying a Username + +Run the **RENAME USER** statement to change one or more existing usernames. + +```pgsql +RENAME USER 'oldusername'@'hostname' TO 'newusername'@'hostname'; +``` + +In the preceding information: + +- _oldusername_: original username. +- _newusername_: new username. +- _hostname_: host name. + +The **RENAME USER** statement is used to rename an existing account. If the original account does not exist in the system or the new account exists, an error will occur when the statement is executed. + +To use the **RENAME USER** statement, you must have the UPDATE permission on the database or the global CREATE USER permission. + +##### Example of Modifying a User + +\# Change the username **userexample1** to **userexample2** and change the hostname to **localhost**. + +```pgsql +> RENAME USER 'userexample1'@'localhost' TO 'userexample2'@'localhost'; +``` + +##### Modifying a User Password + +Use the **SET PASSWORD** statement to modify the login password of a user. + +```pgsql +SET PASSWORD FOR 'username'@'hostname' = PASSWORD('newpassword'); +``` + +In the preceding information: + +- **FOR 'username'@'hostname'**: specifies the username and hostname whose password is to be changed. This parameter is optional. +- **PASSWORD\('newpassword'\)**: indicates that the **PASSWORD\(\)** function is used to set a new password. That is, the new password must be transferred to the **PASSWORD\(\)** function for encryption. + +>![](./public_sys-resources/icon-caution.gif) **CAUTION:** +>The **PASSWORD\(\)** function is a unidirectional encryption function. Once encrypted, the original plaintext cannot be decrypted. + +If the **FOR** clause is not added to the **SET PASSWORD** statement, the password of the current user is changed. + +The **FOR** clause must be given in the format of **'**_username_**'@'**_hostname_**'**, where _username_ indicates the username of the account and _hostname_ indicates the hostname of the account. + +The account whose password is to be changed must exist in the system. Otherwise, an error occurs when the statement is executed. + +##### Example of Changing a User Password + +\# Change the password of user **userexample** whose hostname is **localhost** to **0123456**. + +```pgsql +> SET PASSWORD FOR 'userexample'@'localhost' = PASSWORD('0123456') ; +``` + +#### Deleting Users + +Use the **DROP USER** statement to delete one or more user accounts and related permissions. + +```pgsql +DROP USER 'username1'@'hostname1' [,'username2'@'hostname2']...; +``` + +>![](./public_sys-resources/icon-caution.gif) **CAUTION:** +>The deletion of users does not affect the tables, indexes, or other database objects that they have created, because the database does not record the accounts that have created these objects. + +The **DROP USER** statement can be used to delete one or more database accounts and their original permissions. + +To use the **DROP USER** statement, you must have the DELETE permission on the database or the global CREATE USER permission. + +In the **DROP USER** statement, if the hostname of an account is not specified, the hostname is **%** by default. + +##### Example + +\# Delete the local user **userexample**. + +```pgsql +> DROP USER 'userexample'@'localhost'; +``` + +#### Granting Permissions to a User + +Run the **GRANT** statement to grant permissions to a new user. + +```pgsql +GRANT privileges ON databasename.tablename TO 'username'@'hostname'; +``` + +In the preceding information: + +- **ON** clause: specifies the object and its level on which the permission is granted. +- **privileges**: indicates the operation permissions of a user, such as **SELECT**, INSERT, and **UPDATE**. To grant all permissions to a user, use **ALL**. +- _databasename_: database name. +- _tablename_: table name. +- **TO** clause: sets the user password and specifies the user to whom the permission is granted. +- _username_: name of a user. +- _hostname_: host name. + +To grant the user the permission to operate all databases and tables, use asterisks \(\*\), for example, **\*.\***. + +If you specify a password for an existing user in the **TO** clause, the new password will overwrite the original password. + +If the permission is granted to a non-existent user, a **CREATE USER** statement is automatically executed to create the user, but the password must be specified for the user. + +##### Example + +\# Grant the SELECT and INSERT permissions to local user userexample. + +```pgsql +> GRANT SELECT,INSERT ON *.* TO 'userexample'@'localhost'; +``` + +#### Deleting User Permissions + +Run the **REVOKE** statement to delete the permissions of a user, but the user will not be deleted. + +```pgsql +REVOKE privilege ON databasename.tablename FROM 'username'@'hostname'; +``` + +The parameters in the **REVOKE** statement are the same as those in the **GRANT** statement. + +To use the **REVOKE** statement, you must have the global CREATE USER or UPDATE permission for the database. + +##### Example + +\# Delete the INSERT permission of local user userexample. + +```pgsql +> REVOKE INSERT ON *.* FROM 'userexample'@'localhost'; +``` + +### Managing Databases + +#### Creating a Database + +Run the **CREATE DATABASE** statement to create a database. + +```pgsql +CREATE DATABASE databasename; +``` + +In the preceding command, _databasename_ can be replaced with the database name, which is case insensitive. + +##### Example + +\# Create a database named **databaseexample**. + +```pgsql +> CREATE DATABASE databaseexample; +``` + +#### Viewing a Database + +Run the **SHOW DATABASES** statement to view a database. + +```pgsql +SHOW DATABASES; +``` + +##### Example + +\# View all databases. + +```pgsql +> SHOW DATABASES; +``` + +#### Selecting a Database + +Generally, you need to select a target database before creating or querying a table. Use the **USE** statement to select a database. + +```pgsql +USE databasename; +``` + +In the preceding command, **databasename** indicates the database name. + +##### Example + +\# Select the **databaseexample** database. + +```pgsql +> USE databaseexample; +``` + +#### Deleting a Database + +You can run the **DROP DATABASE** statement to delete a database. + +>![](./public_sys-resources/icon-caution.gif) **CAUTION:** +>Exercise caution when deleting a database. Once a database is deleted, all tables and data in the database will be deleted. + +```pgsql +DROP DATABASE databasename; +``` + +In the preceding command, **databasename** indicates the database name. + +The **DROP DATABASE** command is used to delete an existing database. After this command is executed, all tables in the database are deleted, but the user permissions of the database are not automatically deleted. + +To use **DROP DATABASE**, you need the **DROP** permission on the database. + +**DROP SCHEMA** is a synonym of **DROP DATABASE**. + +##### Example + +\# Delete the **databaseexample** database. + +```pgsql +> DROP DATABASE databaseexample; +``` + +#### Backing Up a Database + +Run the **mysqldump** command as the **root** user to back up the database. + +Back up one or more tables. + +```shell +mysqldump [options] databasename [tablename ...] > outfile +``` + +Back up one or more databases: + +```shell +mysqldump [options] -databases databasename ... > outfile +``` + +Back up all databases: + +```shell +mysqldump [options] -all-databases > outputfile +``` + +In the preceding information: + +- _databasename_: database name. +- _tablename_: name of a data table. +- _outfile_: database backup file. +- _options_: parameter option of the **mysqldump** command. Multiple parameters can be separated by spaces. The common parameters of the **mysqldump** command are as follows: + - **-u, \-\-user**= _username_: specifies the username. + - **-p, \-\-password**\[= _password_\]: specifies the password. + - **-P, \-\-port**= _portnumber_: specifies the port number. + - **-h, \-\-host**= _hostname_: specifies the hostname. + - **-r, \-\-result-file**= _filename_: saves the export result to a specified file, which is equivalent to **\>**. + - **-t**: backs up data only. + - **-d**: backs up the table structure only. + +##### Example + +\# Back up all the databases of the user **root** on the host **192.168.202.144** through port **3306** to the **alldb.sql** file. + +```shell +mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 --all-databases > alldb.sql +``` + +\# Back up the db1 database of the user **root** on the host **192.168.202.144** through port **3306** to the **db1.sql** file. + +```shell +mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 --databases db1 > db1.sql +``` + +\# Back up the tb1 table of the db1 database of the user **root** on the host **192.168.202.144** through port **3306** to the **db1tb1.sql** file. + +```shell +mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 db1 tb1 > db1tb1.sql +``` + +\# Back up only the table structure of the db1 database of user **root** on port **3306** of the host whose IP address is **192.168.202.144** to the **db1.sql** file. + +```shell +mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 -d db1 > db1.sql +``` + +\# Back up only the data of the db1 database of the user **root** on the host **192.168.202.144** through port **3306** to the **db1.sql** file. + +```shell +mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 -t db1 > db1.sql +``` + +#### Restoring a Database + +Run the **mysql** command as the **root** user to restore the database. + +Restore one or more tables: + +```shell +mysql -h hostname -P portnumber -u username -ppassword databasename < infile +``` + +In the preceding information: + +- _hostname_: host name. +- _portnumber_: port number. +- _username_: name of a user. +- _password_: password. +- _databasename_: database name. +- _infile_: **outfile** parameter in the **mysqldump** command. + +##### Example + +\# Restore a database. + +```shell +mysql -h 192.168.202.144 -P 3306 -uroot -p123456 -t db1 < db1.sql +``` + +## MySQL Server + +### Software Description + +MySQL is a relational database management system \(RDBMS\) developed by the Swedish company MySQL AB, which was bought by Sun Microsystems \(now Oracle\). It is one of the most popular Relational Database Management Systems \(RDBMSs\) in the industry, especially for web applications. + +A relational database stores data in different tables instead of in a large data warehouse to improve efficiency and flexibility. + +The Structured Query Language \(SQL\) used by MySQL is the most common standard language for accessing databases. MySQL uses dual-licensing distribution and is available in two editions: Community Edition and Commercial Edition. MySQL is optimal for small or medium-sized websites because of its small size, fast speed, low cost, and especially the open source code. + +### Configuring the Environment + +>[!NOTE] **NOTE:** +>The following environment configuration is for reference only. Configure the environment based on the site requirements. + +#### Disabling the Firewall and Automatic Startup + +>[!NOTE] **NOTE:** +>It is recommended that firewall be disabled in the test environment to prevent network impact. Configure the firewall based on actual requirements. + +1. Stop the firewall service as the **root** user. + + ```shell + systemctl stop firewalld + ``` + +2. Disable the firewall service as the **root** user. + + ```shell + systemctl disable firewalld + ``` + + >[!NOTE] **NOTE:** + >The automatic startup is automatically disabled as the firewall is disabled. + +#### Disabling SELinux + +1. Modify the configuration file as the **root** user. + + ```shell + sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux + ``` + +#### Creating a User Group and a User + +>[!NOTE] **NOTE:** +>In the server environment, independent users are assigned to each process to implement permission isolation for security purposes. The user group and user are created for the OS, not for the database. + +1. Create a MySQL user or user group as the **root** user. + + ```shell + groupadd mysql + ``` + + ```shell + useradd -g mysql mysql + ``` + +2. Set the user password as the **root** user. + + ```shell + passwd mysql + ``` + + Enter the password twice for confirmation. + +#### Creating Data Drives + +>[!NOTE] **NOTE:** +> +>- If a performance test needs to be performed, an independent drive is required for the data directory. You need to format and mount the drive. For details, see Method 1 or Method 2. +>- In a non-performance test, run the following command as the **root** user to create a data directory. Then skip this section. +> \# mkdir /data + +##### Method 1: Using fdisk for Drive Management as the **root** user + +1. Create a partition, for example, **/dev/sdb**. + + ```shell + fdisk /dev/sdb + ``` + +2. Enter **n** and press **Enter**. +3. Enter **p** and press **Enter**. +4. Enter **1** and press **Enter**. +5. Retain the default settings and press **Enter**. +6. Retain the default settings and press **Enter**. +7. Enter **w** and press **Enter**. +8. Create a file system, for example, **xfs**. + + ```shell + mkfs.xfs /dev/sdb1 + ``` + +9. Mount the partition to **/data** for the OS. + + ```shell + mkdir /data + ``` + + ```shell + mount /dev/sdb1 /data + ``` + +10. Run the **vi /etc/fstab** command and edit the **/etc/fstab** file to enable the data drive to be automatically mounted after the system is restarted. For example, add the content in the last line, as shown in the following figure. + + In the last line, **/dev/nvme0n1p1** is only an example. + + ![](./figures/creat_datadisk.png) + +##### Method 2: Using LVM for Drive Management as the **root** user +> +>[!NOTE] **NOTE:** +>Install the LVM2 package in the image as follows: +> +>1. Configure the local yum repository. For details, see [Configuring the Repo Server](./configuring_the_repo_server.md). If the repository has been configured, skip this step. +>2. Install LVM2. +> **\# yum install lvm2** + +1. Create a PV, for example, **sdb**. + + ```shell + pvcreate /dev/sdb + ``` + +2. Create a physical VG, for example, **datavg**. + + ```shell + vgcreate datavg /dev/sdb + ``` + +3. Create an LV, for example, **datalv** of 600 GB. + + ```shell + lvcreate -L 600G -n datalv datavg + ``` + +4. Create a file system. + + ```shell + mkfs.xfs /dev/datavg/datalv + ``` + +5. Create a data directory and mount it. + + ```shell + mkdir /data + ``` + + ```shell + mount /dev/datavg/datalv /data + ``` + +6. Run the **vi /etc/fstab** command and edit the **/etc/fstab** file to enable the data drive to be automatically mounted after the system is restarted. For example, add the content in the last line, as shown in the following figure. + + In the last line, **/dev/datavg/datalv** is only an example. + + ![](./figures/d1376b2a-d036-41c4-b852-e8368f363b5e-1.png) + +#### Creating a Database Directory and Granting Permissions + +1. In the created data directory **/data**, create directories for processes and grant permissions to the MySQL group or user created as the **root** user. + + ```shell + mkdir -p /data/mysql + cd /data/mysql + mkdir data tmp run log + chown -R mysql:mysql /data + ``` + +### Installing, Running, and Uninstalling MySQL + +#### Installing MySQL + +1. Configure the local yum repository. For details, see [Configuring the Repo Server](./configuring_the_repo_server.md). +2. Clear the cache. + + ```shell + dnf clean all + ``` + +3. Create a cache. + + ```shell + dnf makecache + ``` + +4. Install the MySQL server as the **root** user. + + ```shell + dnf install mysql-server + ``` + +5. Check the installed RPM package. + + ```shell + rpm -qa | grep mysql-server + ``` + +#### Running MySQL + +1. Modify the configuration file. + 1. Create the **my.cnf** file as the **root** user and change the file paths \(including the software installation path **basedir** and data path **datadir**\) based on the actual situation. + + ```shell + vi /etc/my.cnf + ``` + + Edit the **my.cnf** file as follows: + + ```shell + [mysqld_safe] + log-error=/data/mysql/log/mysql.log + pid-file=/data/mysql/run/mysqld.pid + [mysqldump] + quick + [mysql] + no-auto-rehash + [client] + default-character-set=utf8 + [mysqld] + basedir=/usr/local/mysql + socket=/data/mysql/run/mysql.sock + tmpdir=/data/mysql/tmp + datadir=/data/mysql/data + default_authentication_plugin=mysql_native_password + port=3306 + user=mysql + ``` + + 2. Ensure that the **my.cnf** file is correctly modified. + + ```shell + cat /etc/my.cnf + ``` + + ![](./figures/en-us_image_0231563132.png) + + >![](./public_sys-resources/icon-caution.gif) **CAUTION:** + >In the configuration file, **basedir** specifies the software installation path. Change it based on actual situation. + + 3. Change the group and user of the **/etc/my.cnf** file to **mysql:mysql** as the **root** user. + + ```shell + chown mysql:mysql /etc/my.cnf + ``` + +2. Configure environment variables. + 1. Add the path of the MySQL binary files to the **PATH** parameter as the **root** user. + + ```shell + echo export PATH=$PATH:/usr/local/mysql/bin >> /etc/profile + ``` + + >![](./public_sys-resources/icon-caution.gif) **CAUTION:** + >In the command, **/usr/local/mysql/bin** is the absolute path of the **bin** files in the MySQL software installation directory. Change it based on actual situation. + + 2. Run the following command as the **root** user to make the environment variables take effect: + + ```shell + source /etc/profile + ``` + +3. Initialize the database as the **root** user. + + >[!NOTE] **NOTE:** + >The second line from the bottom contains the initial password, which will be used when you log in to the database. + + ```shell + $ mysqld --defaults-file=/etc/my.cnf --initialize + 2020-03-18T03:27:13.702385Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.17) initializing of server in progress as process 34014 + 2020-03-18T03:27:24.112453Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: iNat=)#V2tZu + 2020-03-18T03:27:28.576003Z 0 [System] [MY-013170] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.17) initializing of server has completed + ``` + + If the command output contains "initializing of server has completed", the database has been initialized. In the command output, "iNat=\)\# V2tZu" in "A temporary password is generated for root@localhost: iNat=\)\# V2tZu" is the initial password. + +4. Start the database. + + >![](./public_sys-resources/icon-caution.gif) **CAUTION:** + >Start MySQL as user **mysql** if it is the first time to start the database service. If you start MySQL as user **root**, a message will be displayed indicating that the **mysql.log** file is missing. If you start MySQL as user **mysql**, the **mysql.log** file will be generated in the **/data/mysql/log** directory. No error will be displayed if you start the database as user **root** again. + + 1. Modify the file permission as the **root** user. + + ```shell + chmod 777 /usr/local/mysql/support-files/mysql.server + ``` + + 2. Start MySQL as the **root** user. + + ```shell + cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql + chkconfig mysql on + ``` + + Start MySQL as user **mysql**. + + ```shell + su - mysql + service mysql start + ``` + +5. Log in to the database. + + >[!NOTE] **NOTE:** + > + >- Enter the initial password generated during database initialization \([3](#li15634560582)\). + >- If MySQL is installed by using an RPM package obtained from the official website, the **mysqld** file is located in the **/usr/sbin** directory. Ensure that the directory specified in the command is correct. + + ```shell + /usr/local/mysql/bin/mysql -uroot -p -S /data/mysql/run/mysql.sock + ``` + + ![](./figures/en-us_image_0231563134.png) + +6. Configure the database accounts and passwords. + 1. After logging in to the database, change the password of user **root** for logging in to the database. + + ```shell + mysql>alter user 'root'@'localhost' identified by "123456"; + ``` + + 2. Create a user **root** for all the other hosts in the domain. + + ```shell + mysql>create user 'root'@'%' identified by '123456'; + ``` + + 3. Grant permissions to the user **root**. + + ```shell + mysql>grant all privileges on *.* to 'root'@'%'; + mysql>flush privileges; + ``` + + ![](./figures/en-us_image_0231563135.png) + +7. Exit the database. + + Run the **\\q** or **exit** command to exit the database. + + ```shell + mysql>exit + ``` + + ![](./figures/en-us_image_0231563136.png) + +#### Uninstalling MySQL + +1. Stop the database process as the **root** user. + + ```shell + $ ps -ef | grep mysql + # kill -9 PID + ``` + +2. Run the **dnf remove mysql** command as the **root** user to uninstall MySQL. + + ```shell + dnf remove mysql + ``` + +### Managing Database Users + +#### Creating Users + +Run the **CREATE USER** statement to create one or more users and set corresponding passwords. + +```pgsql +CREATE USER 'username'@'hostname' IDENTIFIED BY 'password'; +``` + +In the preceding information: + +- _username_: name of a user. +- _host_: hostname, that is, the name of the host where the user connects to the database. As a local user, you can set the parameter to **localhost**. If the host name is not specified during user creation, the host name is **%** by default, indicating a group of hosts. +- _password_: password for logging in to the server. The password can be null. If the password is null, the user can log in to the server without entering the password. This method, however, is not recommended because it provides low security. + +To use the **CREATE USER** statement, you must have the **INSERT** permission on the database or the global **CREATE USER** permission. + +After a user account is created using the **CREATE USER** statement, a record is added to the user table in the database. If the account to be created exists, an error will occur during statement execution. + +A new user has few permissions and can perform only operations that do not require permissions. For example, a user can run the **SHOW** statement to query the list of all storage engines and character sets. + +##### Example + +\# Create a local user whose password is **123456** and username is **userexample1**. + +```pgsql +> CREATE USER 'userexample1'@'localhost' IDENTIFIED BY '123456'; +``` + +\# Create a user whose password is **123456**, username is **userexample2**, and hostname is **192.168.1.100**. + +```pgsql +> CREATE USER 'userexample2'@'192.168.1.100' IDENTIFIED BY '123456'; +``` + +#### Viewing Users + +Run the **SHOW GRANTS** or **SELECT** statement to view one or more users. + +View a specific user: + +```pgsql +SHOW GRANTS [FOR 'username'@'hostname']; +``` + +```pgsql +SELECT USER,HOST,PASSWORD FROM mysql.user WHERE USER='username'; +``` + +View all users: + +```pgsql +SELECT USER,HOST FROM mysql.user; +``` + +In the preceding information: + +- _username_: name of a user. +- _hostname_: host name. + +##### Example + +\# View the user **userexample1**. + +```pgsql +> SHOW GRANTS FOR 'userexample1'@'localhost'; +``` + +\# View all users in the MySQL database. + +```pgsql +> SELECT USER,HOST FROM mysql.user; +``` + +#### Modifying Users + +##### Modifying a Username + +Run the **RENAME USER** statement to change one or more existing usernames. + +```pgsql +RENAME USER 'oldusername'@'hostname' TO 'newusername'@'hostname'; +``` + +In the preceding information: + +- _oldusername_: original username. +- _newusername_: new username. +- _hostname_: host name. + +The **RENAME USER** statement is used to rename an existing account. If the original account does not exist in the system or the new account exists, an error will occur when the statement is executed. + +To use the **RENAME USER** statement, you must have the **UPDATE** permission on the database or the global **CREATE USER** permission. + +##### Example of Modifying a User + +\# Change the username **userexample1** to **userexample2** and change the hostname to **localhost**. + +```pgsql +> RENAME USER 'userexample1'@'localhost' TO 'userexample2'@'localhost'; +``` + +##### Modifying a User Password + +Use the **SET PASSWORD** statement to modify the login password of a user. + +```pgsql +SET PASSWORD FOR 'username'@'hostname' = 'newpassword'; +``` + +In the preceding information: + +- **FOR'**_username_**'@'**_hostname_**'**: specifies the username and hostname whose password is to be changed. This parameter is optional. +- _newpassword_: new password. + +If the **FOR** clause is not added to the **SET PASSWORD** statement, the password of the current user is changed. + +The **FOR** clause must be given in the format of **'**_username_**'@'**_hostname_**'**, where _username_ indicates the username of the account and _hostname_ indicates the hostname of the account. + +The account whose password is to be changed must exist in the system. Otherwise, an error occurs when the statement is executed. + +##### Example of Changing a User Password + +\# Change the password of user **userexample** whose hostname is **localhost** to **0123456**. + +```pgsql +> SET PASSWORD FOR 'userexample'@'localhost' = '0123456'; +``` + +#### Deleting Users + +Use the **DROP USER** statement to delete one or more user accounts and related permissions. + +```pgsql +DROP USER 'username1'@'hostname1' [,'username2'@'hostname2']...; +``` + +>![](./public_sys-resources/icon-caution.gif) **CAUTION:** +>The deletion of users does not affect the tables, indexes, or other database objects that they have created, because the database does not record the accounts that have created these objects. + +The **DROP USER** statement can be used to delete one or more database accounts and their original permissions. + +To use the **DROP USER** statement, you must have the **DELETE** permission on the database or the global **CREATE USER** permission. + +In the **DROP USER** statement, if the hostname of an account is not specified, the hostname is **%** by default. + +##### Example + +\# Delete the local user **userexample**. + +```pgsql +> DROP USER 'userexample'@'localhost'; +``` + +#### Granting Permissions to a User + +Run the **GRANT** statement to grant permissions to a new user. + +```pgsql +GRANT privileges ON databasename.tablename TO 'username'@'hostname'; +``` + +In the preceding information: + +- **ON** clause: specifies the object and level on which the permission is granted. +- _privileges_: indicates the operation permissions of a user, such as **SELECT**, INSERT, and **UPDATE**. To grant all permissions to a user, use **ALL**. +- _databasename_: database name. +- _tablename_: table name. +- **TO** clause: sets the user password and specifies the user to whom the permission is granted. +- _username_: name of a user. +- _hostname_: host name. + +To grant the user the permission to operate all databases and tables, use asterisks \(\*\), for example, **\*.\***. + +If you specify a password for an existing user in the **TO** clause, the new password will overwrite the original password. + +If the permission is granted to a non-existent user, a **CREATE USER** statement is automatically executed to create the user, but the password must be specified for the user. + +##### Example + +\# Grant the **SELECT** and **INSERT** permissions to local user **userexample**. + +```pgsql +> GRANT SELECT,INSERT ON *.* TO 'userexample'@'localhost'; +``` + +#### Deleting User Permissions + +Run the **REVOKE** statement to delete the permissions of a user, but the user will not be deleted. + +```pgsql +REVOKE privilege ON databasename.tablename FROM 'username'@'hostname'; +``` + +The parameters in the **REVOKE** statement are the same as those in the **GRANT** statement. + +To use the **REVOKE** statement, you must have the global **CREATE USER** or **UPDATE** permission for the database. + +##### Example + +\# Delete the **INSERT** permission of local user **userexample**. + +```pgsql +> REVOKE INSERT ON *.* FROM 'userexample'@'localhost'; +``` + +### Managing Databases + +#### Creating a Database + +Run the **CREATE DATABASE** statement to create a database. + +```pgsql +CREATE DATABASE databasename; +``` + +In the preceding command, _databasename_ can be replaced with the database name, which is case insensitive. + +##### Example + +\# Create a database named **databaseexample**. + +```pgsql +> CREATE DATABASE databaseexample; +``` + +#### Viewing a Database + +Run the **SHOW DATABASES** statement to view a database. + +```pgsql +SHOW DATABASES; +``` + +##### Example + +\# View all databases. + +```pgsql +> SHOW DATABASES; +``` + +#### Selecting a Database + +Generally, you need to select a target database before creating or querying a table. Use the **USE** statement to select a database. + +```pgsql +USE databasename; +``` + +In the preceding command, _databasename_ indicates the database name. + +##### Example + +\# Select the **databaseexample** database. + +```pgsql +> USE databaseexample; +``` + +#### Deleting a Database + +Run the **DROP DATABASE** statement to delete a database. + +>![](./public_sys-resources/icon-caution.gif) **CAUTION:** +>Exercise caution when deleting a database. Once a database is deleted, all tables and data in the database will be deleted. + +```pgsql +DROP DATABASE databasename; +``` + +In the preceding command, _databasename_ indicates the database name. + +The **DROP DATABASE** command is used to delete an existing database. After this command is executed, all tables in the database are deleted, but the user permissions of the database are not automatically deleted. + +To use **DROP DATABASE**, you need the **DROP** permission on the database. + +**DROP SCHEMA** is a synonym of **DROP DATABASE**. + +##### Example + +\# Delete the **databaseexample** database. + +```pgsql +> DROP DATABASE databaseexample; +``` + +#### Backing Up a Database + +Run the **mysqldump** command as the **root** user to back up the database. + +Back up one or more tables: + +```shell +mysqldump [options] databasename [tablename ...] > outfile +``` + +Back up one or more databases: + +```shell +mysqldump [options] -databases databasename ... > outfile +``` + +Back up all databases: + +```shell +mysqldump [options] -all-databases > outputfile +``` + +In the preceding information: + +- _databasename_: database name. +- _tablename_: name of a data table. +- _outfile_: database backup file. +- _options_: parameter option of the **mysqldump** command. Multiple parameters can be separated by spaces. The common parameters of the **mysqldump** command are as follows: + - **-u, \-\-user**= _username_: specifies the username. + - **-p, \-\-password**\[= _password_\]: specifies the password. + - **-P, \-\-port**= _portnumber_: specifies the port number. + - **-h, \-\-host**= _hostname_: specifies the hostname. + - **-r, \-\-result-file**= _filename_: saves the export result to a specified file, which is equivalent to **\>**. + - **-t**: backs up data only. + - **-d**: backs up the table structure only. + +##### Example + +\# Back up all the databases of user **root** on port **3306** of the host whose IP address is **192.168.202.144** to the **alldb.sql** file. + +```shell +mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 --all-databases > alldb.sql +``` + +\# Back up the db1 database of user **root** on port **3306** of the host whose IP address is **192.168.202.144** to the **db1.sql** file. + +```shell +mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 --databases db1 > db1.sql +``` + +\# Back up the tb1 table of the db1 database of user **root** on port **3306** of the host whose IP address is **192.168.202.144** to the **db1tb1.sql** file. + +```shell +mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 db1 tb1 > db1tb1.sql +``` + +\# Back up only the table structure of the db1 database of user **root** on port **3306** of the host whose IP address is **192.168.202.144** to the **db1.sql** file. + +```shell +mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 -d db1 > db1.sql +``` + +\# Back up only the table structure of the db1 database of user **root** on port **3306** of the host whose IP address is **192.168.202.144** to the **db1.sql** file. + +```shell +mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 -t db1 > db1.sql +``` + +#### Restoring a Database + +Run the **mysql** command as the **root** user to restore the database. + +Restore one or more tables: + +```shell +mysql -h hostname -P portnumber -u username -ppassword databasename < infile +``` + +In the preceding information: + +- _hostname_: host name. +- _portnumber_: port number. +- _username_: name of a user. +- _password_: password. +- _databasename_: database name. +- _infile_: **outfile** parameter in the **mysqldump** command. + +##### Example + +\# Restore a database. + +```shell +mysql -h 192.168.202.144 -P 3306 -uroot -p123456 -t db1 < db1.sql +``` diff --git a/docs/en/server/administration/administrator/user_and_user_group_management.md b/docs/en/server/administration/administrator/user_and_user_group_management.md new file mode 100644 index 0000000000000000000000000000000000000000..091897bd2159ab7abc52dc23abfcd83ef7e25961 --- /dev/null +++ b/docs/en/server/administration/administrator/user_and_user_group_management.md @@ -0,0 +1,326 @@ +# User and User Group Management + +In Linux, each common user has an account, including the user name, password, and home directory. There are also special users created for specific purposes, and the most important special user is the admin account whose default user name is root. In addition, Linux provides user groups so that each user belongs to at least one group, facilitating permission management. + +The control of users and user groups is a core element of openEuler security management. This topic introduces the user and group management commands and explains how to assign privileges to common users in graphical user interface and on command lines. + +## Managing Users + +### Adding a User + +#### useradd Command + +Run the **useradd** command as the user **root** to add user information to the system. In the command, _options_ indicates related parameters and _username_ indicates the user name. + +```bash +useradd [options] username +``` + +#### User Information Files + +The following files contain user account information: + +- /etc/passwd: user account information +- /etc/shadow file: user account encryption information +- /etc/group file: group information +- /etc/default/useradd: default configurations +- /etc/login.defs: system wide settings +- /etc/skel: default directory that holds initial configuration files + +#### Example + +For example, to create a user named userexample, run the following command as the user **root**: + +```bash +useradd userexample +``` + +>[!NOTE] **NOTE:** +>If no prompt is displayed, the user is successfully created. After the user is created, run the **passwd** command to assign a password to the user. A new account without a password will be banned. + +To view information about the new user, run the **id** command: + +```bash +$ id userexample +uid=1000(userexample) gid=1000(userexample) groups=1000(userexample) +``` + +To change the password of the userexample, run the following command: + +```bash +passwd userexample +``` + +It is recommended that the new user password meet the complexity requirements. The password complexity requirements are as follows: + +1. A password must contain at least eight characters. +2. A password must contain at least three of the following types: uppercase letters, lowercase letters, digits, and special characters. +3. A password must be different from the account name. +4. A password cannot contain words in the dictionary. + - Querying a dictionary + In the installed openEuler environment, you can run the following command to export the dictionary library file **dictionary.txt**, and then check whether the password is in the dictionary. + + ```bash + cracklib-unpacker /usr/share/cracklib/pw_dict > dictionary.txt + ``` + + - Modifying a dictionary + 1. Modify the exported dictionary library file, and then run the following command to update the dictionary library: + + ```bash + create-cracklib-dict dictionary.txt + ``` + + 2. Run the following command to add another dictionary file **custom.txt** to the original dictionary library. + + ```bash + create-cracklib-dict dictionary.txt custom.txt + ``` + +Then, enter the password and confirm it as prompted: + +```bash +$ passwd userexample +Changing password for user userexample. +New password: +Retype new password: +passwd: all authentication tokens updated successfully. +``` + +>[!NOTE] **NOTE:** +>If the command output contains **BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic**, the password is too simple and needs to be reset. + +### Modifying a User Account + +#### Changing a Password + +Common users can change their passwords using the **passwd** command. Only the admin is allowed to use the **passwd username** command to change passwords for other users. + +#### Changing User's Login Shell + +Common users can use the **chsh** command to change their login shell. Only the admin is allowed to run the **chsh username** command to change login shell for other users. + +Users can also run the **usermod** command as the user **root** to modify the shell information. In the command, _new_shell_path_ indicates the target shell path, and _username_ indicates the user name to be modified. Change them as required. + +```bash +usermod -s new_shell_path username +``` + +For example, to change the shell of userexample to csh, run the following command: + +```bash +usermod -s /bin/csh userexample +``` + +#### Changing the Home Directory + +- To change the home directory, run the following command as the user **root**. In the command, _new\_home\_directory_ indicates the created target home directory, and _username_ indicates the user name to be changed. Change them as required. + + ```bash + usermod -d new_home_directory username + ``` + +- To move the content in the current home directory to a new one, run the usermod command with the -m option: + + ```bash + usermod -d new_home_directory -m username + ``` + +#### Changing a UID + +To change the user ID, run the following command as the user **root**. In the command, _UID_ indicates the target user ID and _username_ indicates the user name. Change them as required. + +```bash +usermod -u UID username +``` + +The usermod command can change a user's UID in all files and directories under the user's home directory. However, for files outside the user's home directory, their owners can only be changed using the **chown** command. + +#### Changing Account Expiry Date + +If the shadow password is used, run the following command as the user **root** to change the validity period of an account. In the command, _MM_, _DD_, and _YY_ indicate the month, day, and year, respectively, and _username_ indicates the user name. Change them as required. + +```bash +usermod -e MM/DD/YY username +``` + +### Deleting a User + +Run the **userdel** command as the user **root** to delete an existing user. + +For example, run the following command to delete user Test: + +```bash +userdel Test +``` + +If you also need to delete the user's home directory and all contents in the directory, run the **userdel** command with the -r option to delete them recursively. + +>[!NOTE] **NOTE:** +>You are not advised to directly delete a user who has logged in to the system. To forcibly delete a user, run the **userdel -f** _Test_ command. + +### Granting Rights to a Common User + +The **sudo** command allows common users to execute commands that can be executed only by administrator accounts. + +The **sudo** command allows the user specified in the **/etc/sudoers** file to execute the administrator account commands. For example, an authorized common user can run: + +```bash +sudo /usr/sbin/useradd newuserl +``` + +The **sudo** command can specify a common user that has been added to the **/etc/sudoers** file to process tasks as required. + +The information configured in the **/etc/sudoers** file is as follows: + +- Blank lines or comment lines starting with **\#**: Have no specific functions. +- Optional host alias lines: Create the name of a host list. The lines must start with **Host\_Alias**. The host names in the list must be separated by commas \(,\). For example: + + ```text + Host_Alias linux=ted1,ted2 + ``` + + **ted1** and **ted2** are two host names, which can be called **linux**. + +- Optional user alias lines: Create the name of a user list. The lines must start with **User\_Alias**. The user names in the list must be separated by commas \(,\). The user alias lines have the same format as the host alias lines. +- Optional command alias lines: Create the name of a command list. The lines must start with **Cmnd\_Alias**. The commands in the list must be separated by commas \(,\). +- Optional running mode alias lines: Create the name of a user list. The difference is that such alias can enable a user in the list to run the **sudo** command. +- Necessary declaration lines for user access: + + The declaration syntax for user access is as follows: + + ```text + user host = [ run as user ] command list + ``` + + Set the user to a real user name or a defined user alias, and set the host to a real host name or a defined host alias. By default, all the commands executed by sudo are executed as user **root**. If you want to use another account, you can specify it. **command list** is either a command list separated by commas \(,\) or a defined command alias. For example: + + ```text + ted1 ted2=/sbin/shutdown + ``` + + In this example, **ted1** can run the **shutdown** command on **ted2**. + + ```text + newuser1 ted1=(root) /usr/sbin/useradd,/usr/sbin/userdel + ``` + + This indicates that **newuser1** on the **ted1** host can run the **useradd** and **userdel** commands as the user **root**. + + >[!NOTE] **NOTE:** + > + >- You can define multiple aliases in a line and separate them with colons \(:\). + >- You can add an exclamation mark \(!\) before a command or a command alias to make the command or the command alias invalid. + >- There are two keywords: **ALL** and **NOPASSWD**. ALL indicates all files, hosts, or commands, and **NOPASSWD** indicates that no password is required. + >- By modifying user access, you can change the access permission of a common user to be the same as that of the user **root**. Then, you can grant rights to the common user. + +The following is an example of the **sudoers** file: + +```bash +#sudoers files +#User alias specification +User_Alias ADMIN=ted1:POWERUSER=globus,ted2 +#user privilege specification +ADMIN ALL=ALL +POWERUSER ALL=ALL,!/bin/su +``` + +In the preceding information: + +- User\_Alias ADMIN=ted1:POWERUSER=globus,ted2 + + Two aliases ADMIN and POWERUSER are defined. + +- ADMIN ALL=ALL + + ADMIN can run all commands as the user **root** on all hosts. + +- POWERUSER ALL=ALL,!/bin/su + + POWERUSER can run all commands except the **su** command as the user **root** on all hosts. + +## Managing User Groups + +### Adding a User Group + +#### groupadd Command + +Run the **groupadd** command as the **root** user to add user group information to the system. In the command, _options_ indicates related parameters and _groupname_ indicates the group name. + +```bash +groupadd [options] groupname +``` + +#### Example + +For example, to create a user group named groupexample, run the following command as the **root** user: + +```bash +groupadd groupexample +``` + +#### User Group Information Files + +The following files contain user group information: + +- /etc/gshadow file: user group encryption information +- /etc/group file: group information +- /etc/login.defs: system wide settings + +### Modifying a User Group + +#### Changing a GID + +To change the user group ID, run the following command as the **root** user. In the command, _GID_ indicates the target user group ID and _groupname_ indicates the user group name. Change them as required. + +```bash +groupmod -g GID groupname +``` + +#### Changing a User Group Name + +To change the user group name, run the following command as the **root** user. In the command, _newgroupname_ indicates the user group new name and _oldgroupname_ indicates the user group name. Change them as required. + +```bash +groupmod -n newgroupname oldgroupname +``` + +### Deleting a User Group + +Run the **groupdel** command as the **root** user to delete an existing user group. + +For example, run the following command to delete user group Test: + +```bash +groupdel Test +``` + +>[!NOTE] **NOTE:** +> +>Each user has only one primary group, which is created by default when creating a user. The user's primary group cannot be directly deleted. To forcibly delete a user's primary group, run the **groupdel -f** _Test_ command. + +### Adding a User to a Group or Removing a User from a Group + +Run the **gpasswd** command as the **root** user to add a user to a group or remove a user from a group. + +For example, run the following command to add the user userexample to the user group Test: + +```bash +gpasswd -a userexample Test +``` + +For example, run the following command to remove the user userexample from the user group Test: + +```bash +gpasswd -d userexample Test +``` + +### Changing the Current Group of a User to a Specified Group + +If a user belongs to multiple user groups, the user can run the **newgrp** command to switch to another user group after logging in to the system. Then, the user has the permission of the corresponding group. + +For example, run the following command to change the current group of the user **userexample** to the user group **Test**: + +```bash +newgrp Test +``` diff --git a/docs/en/server/administration/administrator/using_dnf_to_manage_software_packages.md b/docs/en/server/administration/administrator/using_dnf_to_manage_software_packages.md new file mode 100644 index 0000000000000000000000000000000000000000..c667c3ae41f164681407dcc98048a53a3a8e7876 --- /dev/null +++ b/docs/en/server/administration/administrator/using_dnf_to_manage_software_packages.md @@ -0,0 +1,572 @@ +# Using DNF to Manage Software Packages + +DNF is a Linux software package management tool used to manage RPM software packages. The DNF can query software package information, obtain software packages from a specified software library, automatically process dependencies to install or uninstall software packages, and update the system to the latest available version. + +>[!NOTE] **NOTE:** +> +>- DNF is fully compatible with YUM and provides YUM-compatible command lines and APIs for extensions and plug-ins. +>- You must have the administrator rights to use the DNF. All commands in this chapter must be executed by the administrator. + +## Configuring the DNF + +### The DNF Configuration File + +The main configuration file of the DNF is /etc/dnf/dnf.conf which consists of two parts: + +- The **main** part in the file stores the global settings of the DNF. + +- The **repository** part in the file stores the settings of the software source. You can add one or more **repository** sections to the file. + +In addition, the /etc/yum.repos.d directory stores one or more repo source files, which define different repositories. + +You can configure a software source by either directly configuring the /etc/dnf/dnf.conf file or configuring the .repo file in the /etc/yum.repos.d directory. + +#### Configuring the main Part + +The /etc/dnf/dnf.conf file contains the **main** part. The following is an example of the configuration file: + +```bashconf +[main] +gpgcheck=1 +installonly_limit=3 +clean_requirements_on_remove=True +best=True +skip_if_unavailable=False +``` + +Common options are as follows: + +**Table 1** main parameter description + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

cachedir

+

Cache directory for storing RPM packages and database files.

+

keepcache

+

The options are 1 and 0, indicating whether to cache the RPM packages and header files that have been successfully installed. The default value is 0, indicating that the RPM packages and header files are not cached.

+

debuglevel

+

Sets debugging information generated by the DNF. The value ranges from 0 to 10. A larger value indicates more detailed debugging information. The default value is 2. The value 0 indicates that the debug information is not displayed.

+

clean_requirements_on_remove

+

Deletes the dependency items that are no longer used during DNF removal. If the software package is installed through the DNF instead of the explicit user request, the software package can be deleted only through clean_requirements_on_remove, that is, the software package is introduced as a dependency item. The default value is True.

+

best

+

The system always attempts to install the latest version of the upgrade package. If the latest version cannot be installed, the system displays the cause and stops the installation. The default value is True.

+

obsoletes

+

The options are 1 and 0, indicating whether to allow the update of outdated RPM packages. The default value is 1, indicating that the update is allowed.

+

gpgcheck

+

The options are 1 and 0, indicating whether to perform GPG verification. The default value is 1, indicating that verification is required.

+

plugins

+

The options are 1 and 0, indicating that the DNF plug-in is enabled or disabled. The default value is 1, indicating that the DNF plug-in is enabled.

+

installonly_limit

+

Sets the number of packages that can be installed at the same time by running the installonlypkgs command. The default value is 3. You are advised not to decrease the value.

+
+ +#### Configuring the repository Part + +The repository part allows you to customize openEuler software source repositories. The name of each repository must be unique. Otherwise, conflicts may occur. You can configure a software source by either directly configuring the /etc/dnf/dnf.conf file or configuring the .repo file in the /etc/yum.repos.d directory. + +- Configuring the /etc/dnf/dnf.conf file + + The following is a minimum configuration example of the \[repository\] section: + + ```text + [repository] + name=repository_name + baseurl=repository_url + ``` + + >[!NOTE] **NOTE:** + >openEuler provides an online image source at [https://repo.openeuler.org/](https://repo.openeuler.org/). For example, if the openEuler 22.03 LTS SP4 version is aarch64, the **baseurl** can be set to . + + Common options are as follows: + + **Table 2** repository parameter description + + + + + + + + + + + +

Parameter

+

Description

+

name=repository_name

+

Name string of a software repository.

+

baseurl=repository_url

+

Address of the software repository.

+
  • Network location using the HTTP protocol, for example, http://path/to/repo
  • Network location using the FTP protocol, for example, ftp://path/to/repo
  • Local path: for example, file:///path/to/local/repo
+
+ +- Configuring the .repo file in the /etc/yum.repos.d directory + openEuler provides multiple repo sources for users online. For details about the repo sources, see [Installing the OS](./../../releasenotes/os_installation.md). + + For example, run the following command as the **root** user to add the openeuler repo source to the openEuler.repo file. + + ```bash + vi /etc/yum.repos.d/openEuler.repo + ``` + + ```text + [OS] + name=openEuler-$releasever - OS + baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/$basearch/ + enabled=1 + gpgcheck=1 + gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/$basearch/RPM-GPG-KEY-openEuler + ``` + + >[!NOTE] **NOTE:** + > + > - **enabled** indicates whether to enable the software source repository. The value can be **1** or **0**. The default value is **1**, indicating that the software source repository is enabled. + > - **gpgkey** is the public key used to verify the signature. + +#### Displays the Current Configuration + +- To display the current configuration information, run the following command: + + ```bash + dnf config-manager --dump + ``` + +- To display the configuration of a software source, query the repo id: + + ```bash + dnf repolist + ``` + + Run the following command to display the software source configuration of the corresponding ID. In the command, _repository_ indicates the repository ID. + + ```bash + dnf config-manager --dump repository + ``` + +- You can also use a global regular expression to display all matching configurations. + + ```bash + dnf config-manager --dump glob_expression + ``` + +### Creating a Local Software Repository + +To create a local repository of software sources, perform the following steps. + +1. Install the createrepo software package. Run the following command as the root user: + + ```bash + dnf install createrepo + ``` + +2. Copy the required software packages to a directory, for example, /mnt/local\_repo/. +3. Run the following command to create a software source: + + ```bash + createrepo /mnt/local_repo + ``` + +### Adding, Enabling, and Disabling Software Sources + +This section describes how to add, enable, and disable the software source repository by running the **dnf config-manager** command. + +#### Adding Software Source + +To define a new software repository, you can add the repository part to the /etc/dnf/dnf.conf file or add the .repo file to the /etc/yum.repos.d/ directory. You are advised to add the .repo file. Each software source has its own .repo file. The following describes how to add the .repo file. + +To add such a source to your system, run the following command as the user **root**. After the command is executed, the corresponding .repo file is generated in the **/etc/yum.repos.d/** directory. In the command, _repository\_url_ indicates the repo source address. For details, see [Table 2](#en-us_topic_0151921080_a4a0b069bbf624b09be3bdd08567c0445). + +```bash +dnf config-manager --add-repo repository_url +``` + +#### Enabling a Software Repository + +To enable the software source, run the following command as the user **root**. In the command, _repository_ indicates the repository ID in the new .repo file. You can run the **dnf repolist** command to query the repository ID. + +```bash +dnf config-manager --set-enable repository +``` + +You can also use a global regular expression to enable all matching software sources. In the command, _glob\_expression_ indicates the regular expression used to match multiple repository IDs. + +```bash +dnf config-manager --set-enable glob_expression +``` + +#### Disabling a Software Repository + +To disable a software source, run the following command as the user **root**: + +```bash +dnf config-manager --set-disable repository +``` + +You can also use a global regular expression to disable all matching software sources. + +```bash +dnf config-manager --set-disable glob_expression +``` + +## Managing Software Package + +The DNF enables you to query, install, and delete software packages. + +### Searching for Software Packages + +You can search for the required RPM package by its name, abbreviation, or description. The command is as follows: + +```bash +dnf search term +``` + +The following is an example: + +```bash +$ dnf search httpd +========================================== N/S matched: httpd ========================================== +httpd.aarch64 : Apache HTTP Server +httpd-devel.aarch64 : Development interfaces for the Apache HTTP server +httpd-manual.noarch : Documentation for the Apache HTTP server +httpd-tools.aarch64 : Tools for use with the Apache HTTP Server +libmicrohttpd.aarch64 : Lightweight library for embedding a webserver in applications +mod_auth_mellon.aarch64 : A SAML 2.0 authentication module for the Apache Httpd Server +mod_dav_svn.aarch64 : Apache httpd module for Subversion server +``` + +### Listing Software Packages + +To list all installed and available RPM packages in the system, run the following command: + +```bash +dnf list all +``` + +To list a specific RPM package in the system, run the following command: + +```bash +dnf list glob_expression... +``` + +The following is an example: + +```bash +$ dnf list httpd +Available Packages +httpd.aarch64 2.4.51-17.oe2203SP4 Local +``` + +### Displaying RPM Package Information + +To view information about one or more RPM packages, run the following command: + +```bash +dnf info package_name... +``` + +The following is a command example: + +```bash +$ dnf info httpd +Available Packages +Name : httpd +Version : 2.4.51 +Release : 17.oe2203SP4 +Arch : aarch64 +Size : 1.2 M +Repo : Local +Summary : Apache HTTP Server +URL : http://httpd.apache.org/ +License : ASL 2.0 +Description : The Apache HTTP Server is a powerful, efficient, and extensible + : web server. +``` + +### Installing an RPM Package + +To install a software package and all its dependencies that have not been installed, run the following command as the user **root**: + +```bash +dnf install package_name +``` + +You can also add software package names to install multiple software packages at the same time. Add the **strict=False** parameter to the /etc/dnf/dnf.conf configuration file and run the **dnf** command to add --setopt=strict=0. Run the following command as the user **root**: + +```bash +dnf install package_name package_name... --setopt=strict=0 +``` + +The following is an example: + +```bash +dnf install httpd +``` + +>[!NOTE] **NOTE:** +> +>- If the RPM package fails to be installed, see [Installation Failure Caused by Software Package Conflict, File Conflict, or Missing Software Package](https://docs.openeuler.openatom.cn/en/docs/common/faq/server/administration_faqs.html#_5-installation-failure-caused-by-software-package-conflict-file-conflict-or-missing-software-package). +>- Do not install the install-scripts software package. This software package is used by imageTailor for tailoring ISO images. openEuler will fail to boot if install-scripts is installed. + +### Downloading Software Packages + +To download the software package using the DNF, run the following command as the user **root**: + +```bash +dnf download package_name +``` + +If you need to download the dependency packages that are not installed, add **\-\-resolve**. The command is as follows: + +```bash +dnf download --resolve package_name +``` + +The following is an example: + +```bash +dnf download --resolve httpd +``` + +### Deleting a Software Package + +To uninstall the software package and related dependent software packages, run the following command as the user **root**: + +```bash +dnf remove package_name... +``` + +The following is an example: + +```bash +dnf remove totem +``` + +## Managing Software Package Groups + +A software package set is a group of software packages that serve a common purpose, for example, a system tool set. You can use the DNF to install or delete software package groups, improving operation efficiency. + +### Listing Software Package Groups + +The summary parameter can be used to list the number of all installed software package groups, available groups, and available environment groups in the system. The command is as follows: + +```bash +dnf groups summary +``` + +The following is an example: + +```bash +$ dnf groups summary +Last metadata expiration check: 0:11:56 ago on Sat 17 Aug 2019 07:45:14 PM CST. +Available Groups: 8 +``` + +To list all software package groups and their group IDs, run the following command: + +```bash +dnf group list +``` + +The following is an example: + +```bash +$ dnf group list +Last metadata expiration check: 0:10:32 ago on Sat 17 Aug 2019 07:45:14 PM CST. +Available Environment Groups: + Minimal Install + Custom Operating System + Server +Available Groups: + Development Tools + Graphical Administration Tools + Headless Management + Legacy UNIX Compatibility + Network Servers + Scientific Support + Security Tools + System Tools + +```bash + +### Displaying the Software Package Group Information + +To list the mandatory and optional packages contained in a software package group, run the following command: + +```bash +dnf group info glob_expression... +``` + +The following is an example of displaying the Development Tools information: + +```bash +$ dnf group info "Development Tools" +Last metadata expiration check: 0:14:54 ago on Wed 05 Jun 2019 08:38:02 PM CST. + +Group: Development Tools + Description: A basic development environment. + Mandatory Packages: + binutils + glibc-devel + make + pkgconf + pkgconf-m4 + pkgconf-pkg-config + rpm-sign + Optional Packages: + expect +``` + +### Installation Software Package Group + +Each software package group has its own name and corresponding group ID. You can use the software package group name or its ID to install the software package. + +To install a software package group, run the following command as the user **root**: + +```bash +dnf group install group_name +``` + +or + +```bash +dnf group install groupid +``` + +For example, to install the software package group of Development Tools, run the following command: + +```bash +dnf group install "Development Tools" +``` + +or + +```bash +dnf group install development +``` + +### Deleting a Software Package Group + +To uninstall a software package group, you can use the group name or ID to run the following command as the user **root**: + +```bash +dnf group remove group_name +``` + +```bash +dnf group remove groupid +``` + +For example, to delete the software package group of Development Tools, run the following command: + +```bash +dnf group remove "Development Tools" +``` + +```bash +dnf group remove development +``` + +## Check and Update + +You can use the DNF to check whether any software package in your system needs to be updated. You can use the DNF to list the software packages to be updated. You can choose to update all packages at a time or update only specified packages. + +### Checking for Update + +To list all currently available updates, run the following command: + +```bash +dnf check-update +``` + +The following is an example: + +```bash +$ dnf check-update +Last metadata expiration check: 0:02:10 ago on Sun 21 May 2023 11:28:07 PM CST. + +anaconda-core.aarch64 36.15.5-17.oe2203SP4 update +anaconda-tui.aarch64 36.15.5-17.oe2203SP4 update +anaconda-user-help.aarch64 26.1-10.oe2203SP4 update +bind-libs.aarch64 9.16.23-18.oe2203SP4 update +bind-license.noarch 9.16.23-18.oe2203SP4 update +bind-utils.aarch64 9.16.23-18.oe2203SP4 updatey +... +``` + +### Upgrade + +To upgrade a single software package, run the following command as the user **root**: + +```bash +dnf update package_name +``` + +For example, to upgrade the RPM package, run the following command: + +```bash +$ dnf update anaconda-gui.aarch64 +Last metadata expiration check: 0:02:10 ago on Sun 01 Sep 2019 11:30:27 PM CST. +Dependencies Resolved +================================================================================ + Package Arch Version Repository Size +================================================================================ +Updating: + anaconda-gui aarch64 19.31.123-1.14 updates 461 k + anaconda-core aarch64 19.31.123-1.14 updates 1.4 M + anaconda-tui aarch64 19.31.123-1.14 updates 274 k + anaconda-user-help aarch64 19.31.123-1.14 updates 315 k + anaconda-widgets aarch64 19.31.123-1.14 updates 748 k + +Transaction Summary +================================================================================ +Upgrade 5 Package + +Total download size: 3.1 M +Is this ok [y/N]: +``` + +Similarly, to upgrade a software package group, run the following command as the user **root**: + +```bash +dnf group update group_name +``` + +### Updating All Packages and Their Dependencies + +To update all packages and their dependencies, run the following command as the user **root**: + +```bash +dnf update +``` diff --git a/docs/en/server/administration/administrator/viewing_system_information.md b/docs/en/server/administration/administrator/viewing_system_information.md new file mode 100644 index 0000000000000000000000000000000000000000..ca8a4442c7906b4356e77026c92f81e0f59f27a3 --- /dev/null +++ b/docs/en/server/administration/administrator/viewing_system_information.md @@ -0,0 +1,45 @@ +# Viewing System Information + +- View the system information. + + ```bash + cat /etc/os-release + ``` + + For example, the command and output are as follows: + + ```bash + $ cat /etc/os-release + NAME="openEuler" + VERSION="22.03 (LTS-SP4)" + ID="openEuler" + VERSION_ID="22.03" + PRETTY_NAME="openEuler 22.03 (LTS-SP4)" + ANSI_COLOR="0;31" + ``` + +- View system resource information. + + Run the following command to view the CPU information: + + ```bash + lscpu + ``` + + Run the following command to view the memory information: + + ```bash + free + ``` + + Run the following command to view the disk information: + + ```bash + fdisk -l + ``` + + View the real-time system resource information. + + ```bash + top + ``` diff --git a/docs/en/server/administration/compa_command/_toc.yaml b/docs/en/server/administration/compa_command/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ae30012622de4197d7fe4ca8c40ad497980e0e47 --- /dev/null +++ b/docs/en/server/administration/compa_command/_toc.yaml @@ -0,0 +1,11 @@ +label: Compatibility Commands +isManual: true +description: The shell and Linux commands, rebuilt using Rust, maintain compatibility with native Linux commands +sections: + - label: Compatibility Commands + href: ./overview.md + sections: + - label: utshell User Guide + href: ./utshell_guide.md + - label: utsudo User Guide + href: ./utsudo_user_guide.md diff --git a/docs/en/server/administration/compa_command/figures/image-20230828094539717.png b/docs/en/server/administration/compa_command/figures/image-20230828094539717.png new file mode 100644 index 0000000000000000000000000000000000000000..2f92fd1d2216c56dbd02c228947d24d88c0e0ac8 Binary files /dev/null and b/docs/en/server/administration/compa_command/figures/image-20230828094539717.png differ diff --git a/docs/en/server/administration/compa_command/figures/image-20230828094723153.png b/docs/en/server/administration/compa_command/figures/image-20230828094723153.png new file mode 100644 index 0000000000000000000000000000000000000000..aef4a7a18627344e29cc0849b0ef24d00172dbb5 Binary files /dev/null and b/docs/en/server/administration/compa_command/figures/image-20230828094723153.png differ diff --git a/docs/en/server/administration/compa_command/figures/image-20230828135001624.png b/docs/en/server/administration/compa_command/figures/image-20230828135001624.png new file mode 100644 index 0000000000000000000000000000000000000000..e74a43e46b3a815ce484cfa67dea4011169ecb13 Binary files /dev/null and b/docs/en/server/administration/compa_command/figures/image-20230828135001624.png differ diff --git a/docs/en/server/administration/compa_command/figures/image-20230828140355863.png b/docs/en/server/administration/compa_command/figures/image-20230828140355863.png new file mode 100644 index 0000000000000000000000000000000000000000..dddd64f7ffb7b433a460f3baf6d8f2ae62994987 Binary files /dev/null and b/docs/en/server/administration/compa_command/figures/image-20230828140355863.png differ diff --git a/docs/en/server/administration/compa_command/figures/image-20230828140709441.png b/docs/en/server/administration/compa_command/figures/image-20230828140709441.png new file mode 100644 index 0000000000000000000000000000000000000000..d7d83de6fce30099daa9cc9c05f92943efd12b3f Binary files /dev/null and b/docs/en/server/administration/compa_command/figures/image-20230828140709441.png differ diff --git a/docs/en/server/administration/compa_command/media/image1.png b/docs/en/server/administration/compa_command/media/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..feff5b7bae51f432b5a8a05828295ace5b2f616d Binary files /dev/null and b/docs/en/server/administration/compa_command/media/image1.png differ diff --git a/docs/en/server/administration/compa_command/media/image2.png b/docs/en/server/administration/compa_command/media/image2.png new file mode 100644 index 0000000000000000000000000000000000000000..c241e9356595daf58732a25a2bb31cd0a75bd027 Binary files /dev/null and b/docs/en/server/administration/compa_command/media/image2.png differ diff --git a/docs/en/server/administration/compa_command/media/image3.png b/docs/en/server/administration/compa_command/media/image3.png new file mode 100644 index 0000000000000000000000000000000000000000..f00123d7b8553d8b7c374c7a0becd4269a663084 Binary files /dev/null and b/docs/en/server/administration/compa_command/media/image3.png differ diff --git a/docs/en/server/administration/compa_command/media/image4.png b/docs/en/server/administration/compa_command/media/image4.png new file mode 100644 index 0000000000000000000000000000000000000000..9a047ff75fb1144c7df513345acef97357aa82b7 Binary files /dev/null and b/docs/en/server/administration/compa_command/media/image4.png differ diff --git a/docs/en/server/administration/compa_command/overview.md b/docs/en/server/administration/compa_command/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..28f0e23eb6713c9bb5077e567119eb0ee6fca531 --- /dev/null +++ b/docs/en/server/administration/compa_command/overview.md @@ -0,0 +1,3 @@ +# Compatibility Commands + +This document describes the shell and Linux commands re-written in the Rust language. These commands can be used on openEuler and is compatible with native Linux commands. diff --git a/docs/en/server/administration/compa_command/utshell_guide.md b/docs/en/server/administration/compa_command/utshell_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..49bbd717b8a50c9c206795e8bb95aa1834653289 --- /dev/null +++ b/docs/en/server/administration/compa_command/utshell_guide.md @@ -0,0 +1,199 @@ +# utshell User Guide + +## Introduction + +utshell is a shell compatible with Bash, capable of executing basic built-in commands and starting external commands. It also implements functions such as task, pipe, and signal processing. + +## Installation and Uninstallation + +### Installing utshell + +Run the `rpm` command to install utshell. Assume that openEuler 23.09 is used. + +![](./media/image1.png) + +Enter **y** as prompted to install. + +![](./media/image2.png) + +### Uninstalling utshell + +Run `rpm -e utshell` to uninstall utshell. + +```shell +rpm -e utshell +``` + +![](./media/image3.png) + +## Usage + +### Using Common Commands + +In the utshell environment, enter a command to execute. + +utshell has the following built-in commands: + +![](./media/image4.png) + +### Defining and Using Variables + +#### Defining a Variable + +Use **=** to define a variable. No space is allowed in the expression. + +```shell +var=4 +``` + +#### Using a Variable + +```shell +echo ${var} +``` + +### Defining and Using Arrays + +#### Defining an Array + +```shell +distros=(ubuntu fedora suse "arch linux") +``` + +#### Using an Array + +```shell +echo ${distros[2]} +``` + +### Defining and Using Functions + +#### Defining a Function + +```shell +func() { echo $1; } +``` + +#### Using a Function + +```shell +func 1 +``` + +#### Passing Parameters to a Function + +When calling a function, use a space to separate the function and the parameters. + +```shell +func firstParam secondParam +``` + +In the function body, use **${number}** to represent the parameters, for example, $1 for the first parameter and $2 for the second parameter. For the tenth and subsequent parameters, the number must be enclosed in braces. + +```shell +func() { +echo $1 ${10} # Ten parameters are required. +} +# Call the function. +func 1 2 3 4 5 6 7 8 9 0 +``` + +### Using Logical Conditions + +#### if + +The syntax is as follows: + +```shell +if condition; then +do-if-true; +elif second-condition; then +do-else-if-true +elif third-condition; then +do-else-if-third-true +else +do-else-false +fi +``` + +**condition** can be a command, for example: + +```shell +if [ "$s" = "string" ]; then +echo "string is equivalent to $s" +else +echo "string is not equivalent to $s" +fi +``` + +**condition** can also be a conditional operator. + +Some conditional operators are as follows. + +```shell +-f: Checks whether a file exists and is a regular file. +-d: Checks whether the provided argument is a directory. +-h: Checks whether the provided argument is a symbolic link. +-s: Checks whether a file exists and is not empty. +-r: Checks whether a file is readable. +-w: Checks whether a file is writable. +-x: Checks whether a file is executable. +``` + +The following conditional operators can be used for comparing numbers. + +```shell +-lt: less than +-gt: greater than +-ge: greater than or equal to +-le: less than or equal to +-ne: not equal to +``` + +The following conditional operators can be used for comparing strings. + +```shell +==: Whether two strings are identical. +=: Whether two strings are identical (same as ==). +!=: Whether two strings are different. +-z: Returns true if the string is empty. +-n: Returns true if the string length is not 0. +``` + +### Using Loops + +#### for + +```shell +for number in 1 2 3 4 5 +do +echo $number +done +# When used with a list: +for number in {1..500..2} +do +echo $number +done +``` + +**{1..500..2}** indicates that the start number is 1, the end number is 500 (included), and the step is 2. + +#### until + +```shell +until [condition]; do +commands +done +``` + +When the condition is true, the loop is executed. + +#### while + +```shell +while [ condition ]; do +commands +done +``` + +When the condition is true, the loop is executed. diff --git a/docs/en/server/administration/compa_command/utsudo_user_guide.md b/docs/en/server/administration/compa_command/utsudo_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..2679fc180b3e401cb03584b259a5e74d5085c9d6 --- /dev/null +++ b/docs/en/server/administration/compa_command/utsudo_user_guide.md @@ -0,0 +1,79 @@ +# utsudo User Guide + +This document describes how to install and use utsudo. utsudo is fully compatible with sudo in terms of parameter functions and plug-in usage, greatly reducing users' learning costs. + +This document is intended for utsudo developers, testers, and common users. + +## utsudo Introduction + +The utsudo project was initiated in June 2022. It aims to reconstruct sudo using the Rust language. utsudo is an efficient, secure, and flexible privilege escalation tool. The modules of utsudo include the common tool library, overall framework, and plug-in functions. + +## utsudo Installation + +In version 0.0.4, some files of utsudo conflict with those of sudo. Therefore, you need to use `yumdownloader` to download the binary RPM package of utsudo, and then run `rpm` to install the package with conflicts allowed. + +Run `yumdownloader utsudo` to download the utsudo binary RPM package. + +Then, run `sudo rpm -ivh utsudo-0.0.1-0.04.x86_64.rpm --replacefiles` to install utsudo. The execution process is as follows. + +![](./figures/image-20230828094539717.png) + +After the installation is complete, run `rpm -qa | grep utsudo` to check whether utsudo is properly installed, as shown in the following figure. + +![](./figures/image-20230828094723153.png) + +As shown in the preceding figure, utsudo has been installed and the version is **0.0.1-0.04**. + +utsudo will be continuously updated in the future. + +## utsudo Usage + +`utsudo` has various options. Some options are as follows. You can run `utsudo -h` for details. + +```shell +-e, --edit Edit a file instead of running a command. +-k, --reset-timestamp Invalidate the timestamp file. +-l, --list List user privileges or check a specific command. Use the option twice for the longer format. +``` + +### `-e` + +The `-e` option is used to edit files. + +`utsudo -e` is equivalent to `sudoedit`. When the command is executed, a common user is used to edit a file. A file in the writable directory of the calling user cannot be edited unless the user is **root**. + +In a directory on which the current user does not have write permission, a file **test.txt** exists on which the current user does not have write permission. When you edit the **test.txt** file as a common user, a message is displayed indicating that you do not have the permission. You can run `utsudo -e` to edit the file. The following figure shows the execution process. + +![](./figures/image-20230828135001624.png) + +As shown in the figure, the content of the **test.txt** file is successfully modified. (**utsudo -e is okay!!** was added in the editor.) + +### `-k` + +The `-k` option invalidates the timestamp. + +By default, you need to enter the password when you run the `utsudo` command for the first time and every five minutes. The `-k` parameter forces the user to enter the password the next time the `utsudo` command is executed. + +![](./figures/image-20230828140355863.png) + +By default, you do not need to enter the password for five minutes after running `utsudo` for the first time. + +However, as shown in the figure, the `utsudo -k` command invalidates the timestamp of the `utsudo` command. + +### `-l` + +The `-l` option displays the commands that the current user can execute by using `utsudo`. + +The execution process is as follows: + +![](./figures/image-20230828140709441.png) + +As shown in the figure, the **test** user can run the following commands: + +```shell +(ALL) ALL +``` + +That is, all commands can be executed by user **test**, indicating that the **/etc/sudoers** file does not restrict the user. + +This section briefly describes how to use `utsudo`. Other functions and options of utsudo are not listed. diff --git a/docs/en/server/administration/sysmaster/_toc.yaml b/docs/en/server/administration/sysmaster/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..96491f65a86350363ed8718f0543c7fe2d6f4872 --- /dev/null +++ b/docs/en/server/administration/sysmaster/_toc.yaml @@ -0,0 +1,20 @@ +label: sysMaster User Guide +isManual: true +description: Server and device management using sysMaster +sections: + - label: Overview + href: ./overview.md + - label: Service Management + href: ./service_management.md + sections: + - label: Installation and Deployment + href: ./sysmaster_install_deploy.md + - label: Usage Instructions + href: ./sysmaster_usage.md + - label: Device Management + href: ./device_management.md + sections: + - label: Installation and Deployment + href: ./devmaster_install_deploy.md + - label: Usage Instructions + href: ./devmaster_usage.md diff --git a/docs/en/server/administration/sysmaster/device_management.md b/docs/en/server/administration/sysmaster/device_management.md new file mode 100644 index 0000000000000000000000000000000000000000..0000f4c4ff28be245e065065cc5cb34ced0127d3 --- /dev/null +++ b/docs/en/server/administration/sysmaster/device_management.md @@ -0,0 +1,14 @@ +# Device Management + +The device manager is a bridge between user-mode software and underlying physical devices, supporting the operation of key base software such as lvm2 and NetworkManager. As the device management component of sysMaster, devmaster supports quick startup of sysMaster and ecosystem compatibility of user-mode software. In addition, devmaster provides layered, decoupled, and scalable device management capabilities for common OSs based on the summary and contemplation of mainstream Linux device management solutions. + +devmaster consists of a daemon, a client tool, and a dynamic library. The devmaster daemon utilizes kernel mechanisms such as netlink, inotify, and sysfs to monitor device events and trigger rule processing tasks. The `devctl` client tool and **libs** dynamic library provide a set of CLI commands and public interfaces for debugging rules, controlling daemons, and querying device status. The following figure shows the overall architecture of devmaster. + +**Figure 1 devmaster overall architecture** +![devmaster_architecture](./figures/devmaster_architecture.png) + +devmaster is written in the Rust language to ensure memory safety. The core functions of devmaster are as follows: + +1. Event-driven operations: The queue cache and worker pool mechanisms are used to meet the requirements of highly concurrent device events. In addition, user-mode processes can be dynamically notified of the readiness of devices. +2. Separation of mechanisms and policies: Device processing logic is defined as rules rather than hard-coded in service code, allowing for on-demand customization and flexible combination. +3. Ecosystem compatibility: devmaster is compatible with the udev syntax and udev user-mode broadcast protocol. Existing services can be migrated to the devmaster environment with low costs. diff --git a/docs/en/server/administration/sysmaster/devmaster_install_deploy.md b/docs/en/server/administration/sysmaster/devmaster_install_deploy.md new file mode 100644 index 0000000000000000000000000000000000000000..100fe76ab94ec613318befa19640174c4d1ef062 --- /dev/null +++ b/docs/en/server/administration/sysmaster/devmaster_install_deploy.md @@ -0,0 +1,29 @@ +# Installation and Deployment + +Currently, devmaster can be used in the VM environment where sysmaster is used as PID 1. This section describes the requirements and procedure of devmaster installation and deployment. + +## Software + +* OS: openEuler 22.03 LTS SP4 + +## Hardware + +* x86_64 or AArch64 architecture + +## Installation and Deployment + +1. Run the following `yum` command to install the devmaster package: + + ```shell + # yum install devmaster + ``` + +2. The devmaster package includes a service configuration file for sysmaster. After the package is installed, devmaster overwrites udev services and will be started by sysmaster upon startup. After the devmaster package is uninstalled, udev services are restored automatically. + +3. Restart the system. + +4. Check the **/run/devmaster/data/** directory. If the device database file is generated, the deployment is successful. + + ```shell + # ll /run/devmaster/data/ + ``` diff --git a/docs/en/server/administration/sysmaster/devmaster_usage.md b/docs/en/server/administration/sysmaster/devmaster_usage.md new file mode 100644 index 0000000000000000000000000000000000000000..0e7f158e331215e1aebf09060a7fa0e44308823c --- /dev/null +++ b/docs/en/server/administration/sysmaster/devmaster_usage.md @@ -0,0 +1,234 @@ +# Usage Instructions + +This section describes how to use devmaster, covering daemon configuration, client tool, rule usage, and NIC configuration. + +## Daemon Configuration + +After being started, the devmaster daemon reads the configuration file, adjusts the log level, and sets the rule path based on the configuration file. devmaster has a unique configuration file **/etc/devmaster/config.toml**, which is in TOML format. + +### Configuration Items + +The devmaster configuration file supports the following configuration items: + +- **rules_d**: Rule path. The default value is **\["/etc/devmaster/rules.d", "/lib/devmaster/rules.d", "/etc/udev/rules.d", "/run/udev/rules.d", "/lib/udev/rules.d"]**. If this item is not explicitly specified, the default value is **\["/etc/devmaster/rules.d", "/run/devmaster/rules.d", "/usr/local/lib/devmaster/rules.d", "/usr/lib/devmaster/rules.d"]**. Currently, devmaster does not support rule loading priorities. Rule files with the same name in different rule paths will not conflict with each other. Rule files are loaded in the sequence specified by **rules_d**. Rule files in the same directory are loaded in the lexicographical sequence. +- **max_workers**: Maximum number of concurrent worker threads. If this item is not specified, the default value **3** is used. The value cannot be greater than the number of CPU cores. +- **log_level**: Log level. The value can be **error**, **debug** or **info**. If this parameter is not specified, **info** is used. The default value in the configuration file is **error**. +- **network_d**: NIC configuration path. The default value is **\["/etc/devmaster/network.d"]**. If this parameter is not specified, there is no default path. NIC configurations control the behavior of the `net_setup_link` command of devmaster. For details, see [NIC Configuration](#nic-configuration). +- **log_targets**: Log output target. The value can be **file**, **console**, or **syslog**. The default value is **syslog**. When **file** is specified, logs are save to the **/var/log/devmaster/devmaster.log** file. When **console** is specified, logs are printed to the terminal. When **syslog** is specified, logs are output to the **/dev/log** socket and managed by the log service, such as **rsyslog**, and will be printed to the terminal if no log service is configured. Multiple log output targets can be specified. + +## Client Tool + +`devctl` is the client tool of the devmaster daemon. It is used to control devmaster behaviors, simulate device events, and debug rules. Common `devctl` commands are as follows. + +### Viewingvice Dat + +View the **sysfs** attribute and database information, or clean up the database: + + ```shell + # devctl info [OPTIONS] [DEVICES]... + ``` + +### Monitoring Device Events + +Monitor uevent events reported by the kernel and events sent after devmaster processes devices, which are prefixed with **KERNEL** and **USERSPACE**, respectively. + + ```shell + # devctl monitor [OPTIONS] + ``` + +### Triggering Device Events + +Simulate a device action to trigger a kernel uevent event. This operation is used to replay coldplug device events during kernel initialization. + + ```shell + # devctl trigger [OPTIONS] [DEVICES]... + ``` + +### Testing Built-in Commands + +Test the effect of a built-in command on a device. Supported built-in commands include `blkid`, `input_id`, `kmod`, `net_id`, `net_setup_link`, `path_id`, and `usb_id`. Event types that can be triggered include `add`, `change`, `remove`, `move`, `online`, `offline`, `bind`, and `unbind`. + + ```shell + # devctl test-builtin [OPTIONS] + ``` + +## Rule Usage + +devmaster rules consist of a group of rule files. After the devmaster daemon is started, it loads the rule files in lexicographic order based on the rule path specified in the configuration file. + +> ![Note](./public_sys-resources/icon-note.gif)**Note:** +> +> After adding or deleting a rule, or modifying a rule or configuration file, you need to restart devmaster for the modification to take effect. +> +> devmaster cannot be restarted by running `sctl restart devmaster`. Run `sctl stop devmaster` and `sctl start devmaster`. + +### Rule Examples + +The following describes several common rule examples. For details about the rule syntax, see the [devmaster manual](http://sysmaster.online/man/exts/devmaster/devmaster/). + +#### Example 1: Creating a Soft Link for a Block Device + +Use the `blkid` built-in command to read the UUID of a block device and create a soft link for the block device based on the UUID. + +After an event of a device that has a file system is triggered, a soft link corresponding to the device is generated in the **/dev/test** directory. + +The following uses the block device of the **sda1** partition as an example. + +1. Create the rule file **/etc/devmaster/rules.d/00-persist-storage.rules**. The file content is as follows: + + ```shell + SUBSYSTEM!="block", GOTO="end" + + IMPORT{builtin}=="blkid" + + ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="test/$env{ID_FS_UUID_ENC}" + + LABEL="end" + ``` + +2. Restart devmaster: + + ```shell + # sctl stop devmaster + # sctl start devmaster + ``` + +3. Trigger the **sda1** device event: + + ```shell + # devctl trigger /dev/sda1 + ``` + +4. Check if a soft link pointing to **sda1** exists in the **/dev/test/** directory. If yes, the rule takes effect. + + ```shell + # ll /dev/test/ + total 0 + lrwxrwxrwx 1 root root 7 Sep 6 15:35 06771fe1-39da-42d7-ad3c-236a10d08a7d -> ../sda1 + ``` + +#### Example 2: Renaming a NIC + +Use the `net_id` built-in command to obtain the hardware attributes of the NIC, then run the `net_setup_link` built-in command to select a hardware attribute based on the NIC configuration as the NIC name, and rename the NIC through the **NAME** rule. + +The following uses the **ens33** NIC as an example to test the effect of the NIC renaming rule: + +1. Create the rule file **/etc/devmaster/rules.d/01-netif-rename.rules**. The file content is as follows: + + ```shell + SUBSYSTEM!="net", GOTO="end" + + IMPORT{builtin}=="net_id" + + IMPORT{builtin}=="net_setup_link" + + ENV{ID_NET_NAME}=="?*", NAME="$env{ID_NET_NAME}" + + LABEL="end" + ``` + +2. Restart devmaster: + + ```shell + # sctl stop devmaster + # sctl start devmaster + ``` + +3. Create the NIC configuration file **/etc/devmaster/network.d/99-default.link**. The content is as follows: + + ```shell + [Match] + OriginalName = "*" + + [Link] + NamePolicy = ["database", "onboard", "slot", "path"] + ``` + +4. Bring the NIC offline. + + ```shell + # ip link set ens33 down + ``` + +5. Temporarily name the NIC **tmp**: + + ```shell + # ip link set ens33 name tmp + ``` + +6. Trigger the **add** event of the NIC. + + ```shell + # devctl trigger /sys/class/net/tmp --action add + ``` + +7. Check the NIC name. If the NIC name is changed to **ens33**, the rule takes effect. + + ```shell + # ll /sys/class/net/| grep ens33 + lrwxrwxrwx 1 root root 0 Sep 6 11:57 ens33 -> ../../devices/pci0000:00/0000:00:11.0/0000:02:01.0/net/ens33 + ``` + +8. Restore the network connection after activating the NIC. + + ```shell + # ip link set ens33 up + ``` + +> ![Note](./public_sys-resources/icon-note.gif)**Note:** +> +> An activated NIC cannot be renamed. You need to bring it offline first. In addition, the renaming rule of devmaster takes effect only in the **add** event of the NIC. +> +> Adding **net.ifnames=0** or **net.ifnames=false** to th kernel parameters disables NIC renaming. + +#### Example 3: Modifying the User Permissions on a Device Node + +The `OPTIONS+="static_node=` rule enables devmaster to immediately apply the user permissions in this rule to `/dev/` after devmaster is started. The configuration takes effect immediately after devmaster is restarted. No device event is required. + +1. Create the rule file **/etc/devmaster/rules.d/02-devnode-privilege.rules**. The file content is as follows: + + ```shell + OWNER="root", GROUP="root", MODE="777", OPTIONS+="static_node=tty5" + ``` + +2. Restart devmaster: + + ```shell + # sctl stop devmaster + # sctl start devmaster + ``` + +3. After devmaster is restarted, check the user, user group, and permissions of **/dev/tty5**. If the user, user group, and permissions are changed to **root**, **root**, and **rwxrwxrwx**, the rule takes effect. + + ```shell + # ll /dev/tty5 + crwxrwxrwx 1 root root 4, 5 Feb 3 2978748 /dev/tty5 + ``` + +## NIC Configuration + +The NIC renaming function of devmaster is implemented by the built-in commands `net_id` and `net_setup_link` and the NIC configuration file. In the rule file, use `net_id` to obtain the hardware attributes of a NIC, and then use `net_setup_link` to select a NIC attribute as the new NIC name. The `net_setup_link` command controls the NIC naming style for a specific NIC based on the NIC configuration file. This section describes how to use the NIC configuration file. For details about how to rename a NIC, see [Renaming a NIC](#example-2-renaming-a-nic). + +### Default NIC Configurations + +devmaster provides the following default NIC configurations: + + ```toml + [Match] + OriginalName = "*" + + [Link] + NamePolicy = ["onboard", "slot", "path"] + ``` + +The NIC configuration file contains the **\[Match]** matching section and **\[Link]** control section. Each section contains several configuration items. The configuration items in the **\[Match]** section are used to match NICs. When a NIC meets all matching conditions, all configuration items in the **\[Link]** section are applied to the NIC, for example, setting the NIC naming style and adjusting NIC parameters. + +The preceding default NIC configuration indicates that the configuration takes effect on all NICs and checks the NIC naming styles of the **onboard**, **slot**, and **path** styles in sequence. If an available style is found, the NIC is named in this style. + +For details about the NIC configuration, see the [devmaster manual](http://sysmaster.online/man/exts/devmaster/netif_config/#1). + +> ![Note](./public_sys-resources/icon-note.gif)**Note:** +> +> Adding **net.ifnames=0** or **net.ifnames=false** to th kernel parameters disables NIC renaming. +> +> If NIC renaming does not take effect, check the kernel parameters. diff --git a/docs/en/server/administration/sysmaster/figures/devmaster_architecture.png b/docs/en/server/administration/sysmaster/figures/devmaster_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..c3f0e4570d84f5ed513e0a02e0759cc3e4fb3db0 Binary files /dev/null and b/docs/en/server/administration/sysmaster/figures/devmaster_architecture.png differ diff --git a/docs/en/server/administration/sysmaster/figures/sysMaster.png b/docs/en/server/administration/sysmaster/figures/sysMaster.png new file mode 100644 index 0000000000000000000000000000000000000000..85f901da2ddc33059c29df1c86b9023516921dbd Binary files /dev/null and b/docs/en/server/administration/sysmaster/figures/sysMaster.png differ diff --git a/docs/en/server/administration/sysmaster/overview.md b/docs/en/server/administration/sysmaster/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..163e6f32f9645471bee406add24e3f12076a2a34 --- /dev/null +++ b/docs/en/server/administration/sysmaster/overview.md @@ -0,0 +1,26 @@ +# sysMaster User Guide + +## Overview + +sysMaster is a collection of ultra-lightweight and highly reliable service management programs. It provides an innovative implementation of PID 1 to replace the conventional init process. Written in Rust, sysMaster is equipped with fault monitoring, second-level self-recovery, and quick startup capabilities, which help improve OS reliability and service availability. + +sysMaster manages processes, containers, and VMs centrally, and is ideal for server, cloud computing, and embedded scenarios. + +sysMaster divides the functions of traditional PID 1 into a 1+1+N architecture based on application scenarios. + +As shown in the figure, sysMaster consists of three components: +• sysmaster-init, a new implementation of PID 1, is applicable to embedded systems with functions such as system initialization, zombie process recycling, and keep-alive monitoring. +• sysmaster-core undertakes the core service management functions and incorporates the reliability framework to enable live updates and quick self-recovery in the event of crashes, ensuring 24/7 service availability. +• sysmaster-exts offers a collection of components (such as devMaster for device management and busMaster for bus communication) that deliver key system functions. You can choose the components to use as required. + +**Figure 1** sysMaster architecture +![sysMaster](./figures/sysMaster.png) + +Currently, sysMaster consists of the sysmaster and devmaster services, which manages services and devices, respectively. Their functions will be described in the following sections. + +## Intended Audience + +This document is intended for openEuler users who need to manage services and devices. Users must: + +- Know basic Linux operations. +- Be familiar to configuration of services and devices. diff --git a/docs/en/server/administration/sysmaster/public_sys-resources/icon-caution.gif b/docs/en/server/administration/sysmaster/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/administration/sysmaster/public_sys-resources/icon-caution.gif differ diff --git a/docs/en/server/administration/sysmaster/public_sys-resources/icon-danger.gif b/docs/en/server/administration/sysmaster/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/administration/sysmaster/public_sys-resources/icon-danger.gif differ diff --git a/docs/en/server/administration/sysmaster/public_sys-resources/icon-note.gif b/docs/en/server/administration/sysmaster/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/server/administration/sysmaster/public_sys-resources/icon-note.gif differ diff --git a/docs/en/server/administration/sysmaster/public_sys-resources/icon-notice.gif b/docs/en/server/administration/sysmaster/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/en/server/administration/sysmaster/public_sys-resources/icon-notice.gif differ diff --git a/docs/en/server/administration/sysmaster/public_sys-resources/icon-tip.gif b/docs/en/server/administration/sysmaster/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/en/server/administration/sysmaster/public_sys-resources/icon-tip.gif differ diff --git a/docs/en/server/administration/sysmaster/public_sys-resources/icon-warning.gif b/docs/en/server/administration/sysmaster/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/administration/sysmaster/public_sys-resources/icon-warning.gif differ diff --git a/docs/en/server/administration/sysmaster/service_management.md b/docs/en/server/administration/sysmaster/service_management.md new file mode 100644 index 0000000000000000000000000000000000000000..617ec7d9562ad9ad154009671c245ef242a85aaa --- /dev/null +++ b/docs/en/server/administration/sysmaster/service_management.md @@ -0,0 +1,5 @@ +# Service Management + +Many background programs and processes in Linux, such as web servers, database servers, and mail servers, are started and stopped during system startup and running. sysmaster provides efficient service management commands and configurations to ensure the normal running of the system. + +This document describes the installation and deployment of sysmaster, as well as its features and usage. diff --git a/docs/en/server/administration/sysmaster/sysmaster_install_deploy.md b/docs/en/server/administration/sysmaster/sysmaster_install_deploy.md new file mode 100644 index 0000000000000000000000000000000000000000..e9723e0174bedd7a7a1dd01bb69d466af611b6ba --- /dev/null +++ b/docs/en/server/administration/sysmaster/sysmaster_install_deploy.md @@ -0,0 +1,99 @@ +# Installation and Deployment + +The sysmaster service can be used in containers and VMs. This document uses the AArch64 architecture as an example to describe how to install and deploy sysmaster in both scenarios. + +## Software + +* OS: openEuler 22.03 LTS SP4 + +## Hardware + +* x86_64 or AArch64 architecture + +## Installation and Deployment in Containers + +1. Install Docker. + + ```bash + yum install -y docker + systemctl restart docker + ``` + +2. Load the base container image. + + Download the container image. + + ```bash + wget https://repo.openeuler.org/openEuler-22.03-LTS-SP4/docker_img/aarch64/openEuler-docker.aarch64.tar.xz + xz -d openEuler-docker.aarch64.tar.xz + ``` + + Load the container image. + + ```bash + docker load --input openEuler-docker.aarch64.tar + ``` + +3. Build the container. + + Create a Dockerfile based on the image name queried by the `docker images` command, for example, **openEuler-22.03-LTS-SP4**. + + ```bash + cat << EOF > Dockerfile + FROM openEuler-22.03-LTS-SP4 + RUN yum install -y sysmaster + CMD ["/usr/lib/sysmaster/init"] + EOF + ``` + + Build the container. + + ```bash + docker build -t openEuler-22.03-LTS-SP4:latest . + ``` + +4. Start and enter the container. + + Start the container. + + ```bash + docker run -itd --privileged openEuler-22.03-LTS-SP4:latest + ``` + + Obtain the container ID. + + ```bash + docker ps + ``` + + Use the container ID to enter the container. + + ```bash + docker exec -it CONTAINERID /bin/bash + ``` + +## Installation and Deployment in VMs + +1. Create an initramfs image. + To avoid the impact of systemd in the initrd phase, you need to create an initramfs image with systemd removed and use this image to enter the initrd procedure. Run the following command: + + ```bash + dracut -f --omit "systemd systemd-initrd systemd-networkd dracut-systemd" /boot/initrd_withoutsd.img + ``` + +2. Add a boot item. + Add a boot item to **grub.cfg**, whose path is **/boot/efi/EFI/openEuler/grub.cfg** in the AArch64 architecture and **/boot/grub2/grub.cfg** in the x86_64 architecture. Back up the original configurations and modify the configurations as follows: + + * **menuentry**: Set the item name to **openEuler sysmaster**. + * **linux**: Change **root=/dev/mapper/openeuler-root ro** to **root=/dev/mapper/openeuler-root rw**. + * **linux**: if Plymouth is installed in the environment, add **plymouth.enable=0** to disable it. + * **linux**: Add **init=/usr/lib/sysmaster/init**. + * **initrd**: Set to **/initrd_withoutsd.img**. + +3. Install sysmaster. + + ```bash + yum install sysmaster + ``` + +4. If the **openEuler sysmaster** boot item is displayed after the restart, the configuration is successful. Select it to log in to the VM. diff --git a/docs/en/server/administration/sysmaster/sysmaster_usage.md b/docs/en/server/administration/sysmaster/sysmaster_usage.md new file mode 100644 index 0000000000000000000000000000000000000000..d0ae28310f5d39c1cb5eb17227aa47cb792652b7 --- /dev/null +++ b/docs/en/server/administration/sysmaster/sysmaster_usage.md @@ -0,0 +1,104 @@ +# sysmaster Usage Instructions + +This section provides examples on how to use sysmaster, including: + +* service unit configuration file creation +* unit service management operations, such as starting, stopping, and viewing services + +For more, see the [sysMaster official manual](http://sysmaster.online/man/all/). + +## Unit Configuration File Creation + +You can create unit configuration files in the **/usr/lib/sysmaster/system/** directory. + +### Types of Unit Configuration Files + +Currently, sysmaster supports unit configuration files of the **target**, **socket**, and **service** types. + +* **target**: Encapsulated startup target managed by sysmaster, which is used for grouping units as a synchronization point. sysmaster provides targets for different states. For example, **multi-user.target** indicates that the system has been started. You can use this target to configure services to run in this state. +* **socket**: Encapsulated socket for inter-process communication to support socket-based startup. For example, you can configure a service unit to depend on a socket. When data is written to the socket, sysmaster starts the corresponding service unit. +* **service**: Encapsulated process monitored and controlled by sysmaster. + +### Composition of Unit Configuration Files + +A unit configuration file consists of three sections: + +* **Unit**: common configuration description of the unit, such as the service name, description, and dependencies +* **Install**: description of how the service is installed and started +* **Service** and **Socket**: configurations of different unit types + +### Creating a service Unit + +The **sshd** service is used to remotely log in to the server and run commands and perform operations on the remote terminal. +The following configuration items are used to create an **sshd.service** service unit: + +```bash +[Unit] +Description="OpenSSH server daemon" +Documentation="man:sshd(8) man:sshd_config(5)" +After="sshd-keygen.target" +Wants="sshd-keygen.target" + +[Service] +Type="notify" +EnvironmentFile="-/etc/sysconfig/sshd" +ExecStart="/usr/sbin/sshd -D $OPTIONS" +ExecReload="/bin/kill -HUP $MAINPID" +KillMode="process" +Restart="on-failure" +RestartSec=42 + +[Install] +WantedBy="multi-user.target" +``` + +The configuration items in the example are described as follows: + +* **Description**: Main functions of the unit. +* **Documentation**: Document link of the unit. +* **After**: Unit startup sequence. In the example, **sshd.service** is started after **sshd-keygen.target**. +* **Wants**: Dependency on another unit. In the example, **sshd-keygen.target** is automatically started with **sshd.service**. +* **Type**: How sysmaster starts the service. **notify** indicates that a notification will be sent after the main process is started. +* **EnvironmentFile**: Path of file that stores environment variables to be loaded. +* **ExecStart**: Command executed when the service is started. In the example, `sshd` is executed when **sshd.service** is started. +* **ExecReload**: Command executed to reload the **sshd.service** configurations. +* **KillMode**: How the process is killed when the service process needs to be stopped. **process** indicates that only the main process is killed. +* **Restart**: Whether to restart the service when the service exits or stops in different situations. **on-failure** indicates that the service is restarted when the service exits abnormally. +* **RestartSec**: Amount of time to wait before the service is restarted after the service exits. +* **WantedBy**: Units that depend on **sshd.service**. + +## Unit Service Management + +`sctl` is a CLI tool of sysmaster. It is used to check and control the behavior of the sysmaster server and the status of each service. It can start, stop, restart, and check system services. + +### Starting a Service + +Run the following command to start the **sshd** service and run the commands specified by **ExecStart**: + +```bash +# sctl start sshd.service +``` + +### Stopping a Service + +Run the following command to stop the **sshd** service and kill the process started by **ExecStart**: + +```bash +# sctl stop sshd.service +``` + +### Restarting a Service + +Run the following command to restart the **sshd** service. After the command is executed, the **sshd** service is stopped and then started. + +```bash +# sctl restart sshd.service +``` + +### Checking Service Status + +Run the following command to check the status of the **sshd** service. You can check whether the service is running properly by viewing the service status. + +```bash +# sctl status sshd.service +``` diff --git a/docs/en/server/development/ai4c/_toc.yaml b/docs/en/server/development/ai4c/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6a6da20fc51356d5bc2093be41e8d6164cc29c62 --- /dev/null +++ b/docs/en/server/development/ai4c/_toc.yaml @@ -0,0 +1,6 @@ +label: AI4C User Guide +isManual: true +description: The AI4C suite is a framework that enables compilers to integrate machine learning-driven compilation optimizations +sections: + - label: AI4C User Guide + href: ./ai4c_user_manual.md diff --git a/docs/en/server/development/ai4c/ai4c_user_manual.md b/docs/en/server/development/ai4c/ai4c_user_manual.md new file mode 100644 index 0000000000000000000000000000000000000000..044015179d5bc9452fd84b1dce2167dfd79eea91 --- /dev/null +++ b/docs/en/server/development/ai4c/ai4c_user_manual.md @@ -0,0 +1,3 @@ +# AI4C User Guide + +This document is currently not available in English. diff --git a/docs/en/server/development/application_dev/_toc.yaml b/docs/en/server/development/application_dev/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8493f93df5d29751bfcb9905c7000a8b883d915e --- /dev/null +++ b/docs/en/server/development/application_dev/_toc.yaml @@ -0,0 +1,18 @@ +label: Application Development Guide +isManual: true +description: Application development on openEuler +sections: + - label: Overview + href: ./application_development.md + - label: Preparing the Development Environment + href: ./preparations_for_development_environment.md + - label: Using GCC for Compilation + href: ./using_gcc_for_compilation.md + - label: Using Make for Compilation + href: ./using_make_for_compilation.md + - label: Using JDK for Compilation + href: ./using_jdk_for_compilation.md + - label: Building an RPM Package + href: ./building_an_rpm_package.md + - label: Installing OBS + href: ./installing_obs.md diff --git a/docs/en/server/development/application_dev/application_development.md b/docs/en/server/development/application_dev/application_development.md new file mode 100644 index 0000000000000000000000000000000000000000..5e1408908e77116d30f52ad296488eb1c604e36d --- /dev/null +++ b/docs/en/server/development/application_dev/application_development.md @@ -0,0 +1,77 @@ +# Application Development Guide + +This document describes the common tools used for application development and guides users to develop applications based on openEuler. + +## Overview + +This document describes the following four parts to guide users to use openEuler and develop code based on openEuler. + +- Install and use the GCC compiler on the openEuler operating system \(OS\), and complete the development, compilation, and execution of simple code. +- On the openEuler OS, use the JDK built-in tool to compile and execute code. +- Install IntelliJ IDEA on the openEuler OS for Java development. +- Create an RPM package locally or using the Open Build Service \(OBS\). + +## Intended Audience + +This document is intended for all users who use the openEuler OS for code development. You are expected to: + +- Have basic knowledge of the Linux OS. +- Know how to use Linux command lines. + +## Symbol Conventions + +The symbols that may be found in this document are defined as follows. + +| Symbol |Description | +|:--- |:---- | +| ![](./figures/en-us_image_0229243712.png)|Indicates a potentially hazardous situation which, if not avoided, could result in equipment damage, data loss, performance deterioration, or unanticipated results.
NOTICE is used to address practices not related to personal injury.| +| ![](./figures/en-us_image_0229243671.png)|Supplements the important information in the main text.
NOTE is used to address information not related to personal injury, equipment damage, and environment deterioration.| + +## Command Conventions + +**Table 1** Command conventions + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Format

+

Description

+

Boldface

+

Command keywords, which remain unchanged in the commands, are in boldface.

+

Italic

+

Command parameters, which are replaced with actual values in the commands, are in italic.

+

[ ]

+

Items in square brackets are optional.

+

{ x | y | ... }

+

Optional items are grouped in braces and separated by vertical bars. One item is selected.

+

[ x | y | ... ]

+

Optional items are grouped in brackets and separated by vertical bars. One or no item is selected.

+

{ x | y | ... }\*

+

Optional items are grouped in brackets and separated by vertical bars. A minimum of one or a maximum of all can be selected.

+

[ x | y | ... ]\*

+

Optional items are grouped in brackets and separated by vertical bars. One or more items are selected or no item is selected.

+
diff --git a/docs/en/server/development/application_dev/building_an_rpm_package.md b/docs/en/server/development/application_dev/building_an_rpm_package.md new file mode 100644 index 0000000000000000000000000000000000000000..ae4694d939693e85c2acf3a1a614cfe7301b96fe --- /dev/null +++ b/docs/en/server/development/application_dev/building_an_rpm_package.md @@ -0,0 +1,595 @@ +# Building an RPM Package + +This section describes how to build an RPM software package on a local PC or using OBS. For details, see the [openEuler Packaging Guide](https://gitee.com/openeuler/community/blob/master/en/contributors/packaging.md). + +## Packaging Description + +### Principles + +During RPM packaging, the source code is compiled. The composed configuration files and binary command files need to be placed in proper positions. The RPM package needs to be tested as required. A workspace is required for these operations. + +After installing rpmdevtools by running `dnf install rpmdevtools*`, you can run `rpmdev-setuptree` to generate a set of standard workspacesin the **/root** directory (or **/home/_user_** directory if the command is run by a non-root user). The directory structure is as follows: + +```shell +$ tree rpmbuild +rpmbuild +├── BUILD +├── RPMS +├── SOURCES +├── SPECS +└── SRPMS +``` + +The content is described as follows: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Content

+

Macro Code

+

Name

+

Function

+

~/rpmbuild/BUILD

+

%_builddir

+

Build directory.

+

The source code package is decompressed and compiled in a subdirectory of the directory.

+

~/rpmbuild/RPMS

+

%_rpmdir

+

Standard RPM package directory.

+

The binary RPM package is generated and stored in this directory.

+

~/rpmbuild/SOURCES

+

%_sourcedir

+

Source code directory.

+

The source code package (for example, .tar package) and all patches are stored in this directory.

+

~/rpmbuild/SPECS

+

%_specdir

+

Spec file directory.

+

The RPM package configuration file (.spec) is stored in this directory.

+

~/rpmbuild/SRPMS

+

%_srcrpmdir

+

Source code RPM package directory.

+

The source code RPM package (SRPM) is stored in this directory.

+
+ +The **\~/rpmbuild/SPECS** directory contains the configuration file of the RPM package, which is the drawing of the RPM package. This file tells the **rpmbuild** command how to build the RPM package. The **Macro Code** column contains the corresponding directories in the .spec file, which is similar to the macro or global variable in the programming language. + +### Packaging Process + +The packaging process is as follows: + +1. Place the source code in **%\_sourcedir**. +2. Compile the source code in **%\_builddir**. Generally, the source code is compressed and needs to be decompressed first. +3. Install the RPM package. The installation is similar to pre-assembling the software package. Copy the contents \(such as binary files, configuration files, and man files\) that should be contained in the software package to **%\_buildrootdir** and assemble the contents based on the actual directory structure after installation. For example, if binary commands are stored in **/usr/bin**, copy the directory structure to **%\_buildrootdir**. +4. Perform necessary configurations, such as preparations before installation and cleanup after installation. These are configured in the SPEC file to tell the **rpmbuild** command how to build. +5. Check whether the software is running properly. +6. The generated RPM package is stored in **%\_rpmdir**, and the source code package is stored in **%\_srcrpmdir**. + +In the SPEC file, each phase is described as follows: + +| Phase | Directory to Read | Directory to Write | Action | +|-------------------|--------------|-----------------|-------------------------------------------| +| %prep | %_sourcedir | %_builddir | Read the source code and patches in the **%_sourcedir** directory. Then, decompress the source code to the **%_builddir** subdirectory and apply all patches. | +| %build | %_builddir | %_builddir |Compile files in the **%_builddir** build directory. Run a command similar to `./configure && make`.| +| %install | %_builddir | %_buildrootdir |Read files in the **%_builddir** build directory and install them to the **%_buildrootdir** directory. These files are generated after the RPM is installed.| +| %check | %_builddir | %_builddir | Check whether the software is running properly. Run a command similar to `make test`.| +| bin | %_buildrootdir | %_rpmdir| Read files in the **%_buildrootdir** final installation directory to create RPM packages in the **%_rpmdir** directory. In this directory, RPM packages of different architectures are stored in different subdirectories. The **noarch** directory stores RPM packages applicable to all architectures. These RPM files are the RPM packages that are finally installed by users. | +| src | %_sourcedir | %_srcrpmdir | Create the source code RPM package (SRPM for short, with the file name extension **.src.rpm**) and save it to the **%_srcrpmdir** directory. The SRPM package is usually used to review and upgrade software packages. | + +### Packaging Options + +Run the **rpmbuild** command to build the software package. The **rpmbuild** command can be used to build software packages by building .spec, .tar, and source files. + +The format of the **rpmbuild** command is rpmbuild \[_option_...\] + +The common rpmbuild packaging options are described as follows. + +**Table 1** rpmbuild Packaging Options + +| _option_ value | Description | +|----------|--------------| +|-bp _specfile_ |Starts build from the **%prep** phase of the _specfile_ (decompress the source code package and install the patch).| +|-bc _specfile_ |Starts build from the **%install** phase of the _specfile_.| +|-bi _specfile_ |Starts build from the **%build** phase of the _specfile_.| +|-bl _specfile_ |Uses the _specfile_ to build the source code package and binary package.| +|-ba _specfile_ |Starts check from the **%files** phase of the _specfile_.| +|-bb _specfile_ |Uses the _specfile_ to build the source code package.| +|-bs _specfile_ |Uses the _specfile_ to build the binary package.| +|-rp _sourcefile_ |Starts build from the **%build** phase of the _sourcefile_.| +|-rc _sourcefile_ |Starts build from the **%prep** phase of the _sourcefile_ (decompress the source code package and install the patch).| +|-ri _sourcefile_ |Starts build from the **%files** phase of the _sourcefile_.| +|-rl _sourcefile_ |Starts build from the **%install** phase of the _sourcefile_.| +|-ra _sourcefile_ |Uses the _sourcefile_ to build the binary package.| +|-rb _sourcefile_ |Uses the _sourcefile_ to build the source code package and binary package.| +|-rs _sourcefile_ |Starts build from the **%prep** phase of the _tarfile_ (decompress the source code package and install the patch).| +|-tp _tarfile_ |Uses the _sourcefile_ to build the source code package.| +|-tc _tarfile_ |Starts build from the **%install** phase of the _tarfile_.| +|-ti _tarfile_ |Starts build from the **%build** phase of the _tarfile_.| +|-ta _tarfile_ |Uses the _tarfile_ to build the binary package.| +|-tb _tarfile_ |Uses the _tarfile_ to build the source code package and binary package.| +|-ts _tarfile_ |During the build, uses _DIRECTORY_ to overwrite the default **/root** directory.| +|--buildroot=_DIRECTORY_ |Uses the _tarfile_ to build the source code package.| +|--clean |No actual build steps are performed. It can be used to test the SPEC file.| +|--nobuild |Deletes the files in the BUILD directory.| +|--noclean |Skips the **%check** phase of the SPEC file (even if it does exist).| +|--nocheck |Skips the **%clean** phase of the SPEC file (even if it does exist).| +|--dbpath _DIRECTORY_ |Sets _DIRECTORY_ to the highest level. The default value is **/**, indicating the highest level.| +|--root _DIRECTORY_ |Uses the database in _DIRECTORY_ instead of the default directory **/var/lib/rpm**.| +|--rebuild _sourcefile_ |Builds a new binary package based on `--recompile`. When the build is complete, the build directory, source code, and SPEC file are deleted. The deletion effect is the same as that of `--clean`.| +|--recompile _sourcefile_ |Installs the specified source code package _sourcefile_, that is, start preparation, compilation, and installation of the source code package.| +|-?,--help |Displays detailed version information.| +|--version |Displays detailed help information.| + +## Building an RPM Package Locally + +This section uses an example to describe how to build an RPM software package locally. + +### Setting Up the Development Environment + +#### Prerequisites + +You have obtained the **root** permission, and have configured a repo source for openEuler. + +#### Procedure + +You can use the DNF tool to install rpmdevtools, including the **rpm-build** command and related dependencies \(such as make and gdb\). Run the following command: + +```shell +dnf install rpmdevtools* +``` + +### Creating a Hello World RPM Package + +The following uses the packaging process of the GNU Hello World project as an example. The package contains the most common peripheral components related to the typical Free and Open Source Software \(FOSS\) project, including the configuration, compilation, and installation environments, documents, and internationalization \(i18n\) information. + +#### Obtaining the Source Code + +Run the following command to download the source code of the official example: + +```shell +rpmdev-setuptree +cd ~/rpmbuild/SOURCES +wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz +``` + +#### Editing the SPEC File + +Run the following command to create the .spec file in the **~/rpmbuild/SPECS** directory: + +```shell +cd ~/rpmbuild/SPECS +vi hello.spec +``` + +Write the corresponding content to the file and save the file. The following is an example of the file content. Modify the corresponding fields based on the actual requirements. + +```text +Name: hello +Version: 2.10 +Release: 1%{?dist} +Summary: The "Hello World" program from GNU +Summary(zh_CN): GNU Hello World program +License: GPLv3+ +URL: http://ftp.gnu.org/gnu/hello +Source0: http://ftp.gnu.org/gnu/hello/%{name}-%{version}.tar.gz + +BuildRequires: gettext +Requires(post): info +Requires(preun): info + +%description +The "Hello World" program, done with all bells and whistles of a proper FOSS +project, including configuration, build, internationalization, help files, etc. + +%description -l zh_CN +The Hello World program contains all parts required by the FOSS project, including configuration, build, i18n, and help files. + +%prep +%setup -q + +%build +%configure +make %{?_smp_mflags} + +%install +make install DESTDIR=%{buildroot} +%find_lang %{name} +rm -f %{buildroot}/%{_infodir}/dir + +%post +/sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || : + +%preun +if [ $1 = 0 ] ; then +/sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || : +fi + +%files -f %{name}.lang +%doc AUTHORS ChangeLog NEWS README THANKS TODO +%license COPYING +%{_mandir}/man1/hello.1.* +%{_infodir}/hello.info.* +%{_bindir}/hello + +%changelog +* Thu Dec 26 2019 Your Name - 2.10-1 +- Update to 2.10 +* Sat Dec 3 2016 Your Name - 2.9-1 +- Update to 2.9 +``` + +- The **Name** tag indicates the software name, the **Version** tag indicates the version number, and the **Release** tag indicates the release number. +- The **Summary** tag is a brief description. The first letter of the tag must be capitalized to prevent the rpmlint tool \(packaging check tool\) from generating alarms. +- The **License** tag describes the protocol version of the software package. The packager is responsible for checking the license status of the software, which can be implemented by checking the source code or license file or communicating with the author. +- The **Group** tag is used to classify software packages by **/usr/share/doc/rpm/GROUPS**. Currently, this tag has been discarded. However, the VIM template still has this tag. You can delete it. However, adding this tag does not affect the system. The **%changelog** tag should contain the log of changes made for each release, especially the description of the upstream security/vulnerability patches. The **%changelog** tag should contain the version string to avoid the rpmlint tool from generating alarms. +- If multiple lines are involved, such as %changelog or %description, start from the next line of the instruction and end with a blank line. +- Some unnecessary lines \(such as BuildRequires and Requires\) can be commented out with a number sign \(\#\) at the beginning of the lines. +- The default values of **%prep**, **%build**, **%install**, and **%files** are retained. + +#### Building an RPM Package + +Run the following command in the directory where the .spec file is located to build the source code, binary files, and software packages that contain debugging information: + +```shell +rpmbuild -ba hello.spec +``` + +Run the following command to view the execution result: + +```shell +$ tree ~/rpmbuild/*RPMS + +/home/testUser/rpmbuild/RPMS +└── aarch64 + ├── hello-2.10-1.aarch64.rpm + ├── hello-debuginfo-2.10-1.aarch64.rpm + └── hello-debugsource-2.10-1.aarch64.rpm +/home/testUser/rpmbuild/SRPMS +└── hello-2.10-1.src.rpm +``` + +## Building an RPM Package Using the OBS + +This section describes how to build RPM software packages using the OBS on the web page or with OSC. There are two methods: + +- Modifying an existing software package: Modify the source code of an existing software package and build the modified source code into an RPM software package. +- Adding a software package: A new software source file is developed from scratch, and the newly developed source file is used to build an RPM software package. + +### OBS Overview + +OBS is a general compilation framework based on the openSUSE distribution. It is used to build source code packages into RPM software packages or Linux images. OBS uses the automatic distributed compilation mode and supports the compilation of images and installation packages of multiple Linux OS distributions \(such as openEuler, SUSE, and Debian\) on multiple architecture platforms \(such as x86 and ARM64\). + +OBS consists of the backend and frontend. The backend implements all core functions. The frontend provides web applications and APIs for interaction with the backend. In addition, OBS provides an API command line client OSC, which is developed in an independent repository. + +OBS uses the project organization software package. Basic permission control, related repository, and build targets \(OS and architecture\) can be defined in the project. A project can contain multiple subprojects. Each subproject can be configured independently to complete a task. + +### Building an RPM Software Package Online + +This section describes how to build an RPM software package online on OBS. + +#### Building an Existing Software Package + +>[!NOTE] **NOTE:** +> +>- If you use OBS for the first time, register an individual account on the OBS web page. +>- With this method, you must copy the modified code and commit it to the code directory before performing the following operations. The code directory is specified in the **\_service** file. + +To modify the source code of the existing software and build the modified source file into an RPM software package on the OBS web client, perform the following steps: + +1. Log in to OBS at . +2. Click **All Projects**. The **All Projects** page is displayed. +3. Click the project to be modified. The project details page is displayed. For example, click **openEuler:Mainline**. +4. On the project details page, search for the software package to be modified and click the software package name. The software package details page is displayed. +5. Click **Branch package**. In the displayed dialog box, click **Accept**, as shown in [Figure 1](#fig77646143214). + + **Figure 1** **Branch Confirmation** page + ![](./figures/branch-confirmation-page.png) + +6. Click the **\_service** file to go to the editing page, modify the file content, and click **Save**. An example of the **\_service** file content is as follows. _userCodeURL_ and _userCommitID_ indicate the user code path and commission version number or branch, respectively. + + ```xml + + + git + userCodeURL + userCommitID + + + bz2 + *.tar + + + ``` + + >[!NOTE] **NOTE:** + >Click **Save** to save the **\_service** file. OBS downloads the source code from the specified URL to the software directory of the corresponding OBS project based on the **\_service** file description and replaces the original file. For example, the **kernel** directory of the **openEuler:Mainline** project in the preceding example. + +7. After the files are copied and replaced, OBS automatically starts to build the RPM software package. Wait until the build is complete and view the build status in the status bar on the right. + - **succeeded**: The build is successful. You can click **succeeded** to view the build logs, as shown in [Figure 2](#fig10319114217337). + + **Figure 2** **Succeeded** page + ![](./figures/succeeded-page.png) + + - **failed**: The build failed. Click **failed** to view error logs, locate the fault, and rebuild again. + - **unresolvable**: The build is not performed. The possible cause is that the dependency is missing. + - **disabled**: The build is manually closed or is queuing for build. + - **excluded**: The build is prohibited. The possible cause is that the .spec file is missing or the compilation of the target architecture is prohibited in the .spec file. + +#### Adding a Software Package + +To add a new software package on the OBS web page, perform the following steps: + +1. Log in to the OBS console. +2. Select a project based on the dependency of the new software package. That is, click **All Projects** and select the corresponding project, for example, **openEuler:Mainline**. +3. Click a software package in the project. The software package details page is displayed. +4. Click **Branch package**. On the confirmation page that is displayed, click **Accept**. +5. Click **Delete package** to delete the software package in the new subproject, as shown in [Figure 3](#fig18306181103615). + + **Figure 3** Deleting a software package from a subproject + ![](./figures/deleting-a-software-package-from-a-subproject.png) + + >[!NOTE] **NOTE:** + >The purpose of creating a project by using existing software is to inherit the dependency such as the environment. Therefore, you need to delete these files. + +6. Click **Create Package**. On the page that is displayed, enter the software package name, title, and description, and click **Create** to create a software package, as shown in [Figure 4](#fig6762111693811) and [Figure 5](#fig18351153518389). + + **Figure 4** **Create Package** page + ![](./figures/create-package-page.png) + + **Figure 5** Creating a software package + ![](./figures/creating-a-software-package.png) + +7. Click **Add file** to upload the .spec file and the file to be compiled \(specified in the .spec file\), as shown in [Figure 6](#fig1475845284011). + + **Figure 6** **Add file** page + ![](./figures/add-file-page.png) + +8. After the file is uploaded, OBS automatically starts to build the RPM software package. Wait until the build is complete and view the build status in the status bar on the right. + - **succeeded**: The build is successful. You can click **succeeded** to view the build logs. + - **failed**: The build failed. Click **failed** to view error logs, locate the fault, and rebuild again. + - **unresolvable**: The build is not performed. The possible cause is that the dependency is missing. + - **disabled**: The build is manually closed or is queuing for build. + - **excluded**: The build is prohibited. The possible cause is that the .spec file is missing or the compilation of the target architecture is prohibited in the .spec file. + +#### Obtaining the Software Package + +After the RPM software package is built, perform the following operations to obtain the RPM software package on the web page: + +1. Log in to the OBS console. +2. Click **All Projects** and find the project corresponding to the required software package, for example, **openEuler:Mainline**. +3. Click the name of the required software package in the project. The software package details page is displayed, for example, the **kernel** page in the preceding example. + +4. Click the **Repositories** tab. On the software repository management page that is displayed, click **Enable** in **Publish Flag** to enable the RPM software package download function \(the status changes from ![](./figures/en-us_image_0229243704.png) to ![](./figures/en-us_image_0229243702.png)\), as shown in [Figure 7](#fig17480830144217). + + **Figure 7** **Repositories** page + ![](./figures/repositories-page.png) + +5. Click the project name in the **Repository** column. On the RPM software package download page that is displayed, click **Download** on the right of the RPM software package to download the RPM software package, as shown in [Figure 8](#fig12152145615438). + + **Figure 8** RPM software package download page + ![](./figures/rpm-software-package-download-page.png) + +### Building a Software Package Using OSC + +This section describes how to use the OBS command line tool OSC to create a project and build an RPM software package. + +#### Installing and Configuring the OSC + +##### Prerequisites + +You have obtained the **root** permission, and have configured a repo source for openEuler. + +##### Procedure + +1. Install the OSC command line tool and its dependency as the **root** user. + + ```shell + dnf install osc build + ``` + + >[!NOTE] **NOTE:** + >The compilation of RPM software packages depends on build. + +2. Configure the OSC. + 1. Run the following command to open the **\~/.oscrc** file: + + ```shell + vi ~/.oscrc + ``` + + 2. Add the **user** and **pass** fields to **\~/.oscrc**. The values of _userName_ and _passWord_ are the account and password registered on the OBS website \(). + + ```text + [general] + apiurl = https://build.openeuler.openatom.cn + [https://build.openeuler.openatom.cn] + user=userName + pass=passWord + ``` + +#### Building an Existing Software Package + +**Creating a Project** + +1. You can copy an existing project to create a subproject of your own. For example, to copy the **zlib** software package in the **openEuler:Mainline** project to the new branch, run the following command: + + ```shell + osc branch openEuler:Mainline zlib + ``` + + If the following information is displayed, a new branch project **home:testUser:branches:openEuler:Mainline** is created for user **testUser**. + + ```console + A working copy of the branched package can be checked out with: + osc co home:testUser:branches:openEuler:Mainline/zlib + ``` + +2. Download the configuration file \(for example, **\_service**\) of the software package to be modified to the local directory. In the preceding command, _testUser_ indicates the account name configured in the **\~/.oscrc** configuration file. Change it based on the actual requirements. + + ```shell + osc co home:testUser:branches:openEuler:Mainline/zlib + ``` + + Information similar to the following is displayed: + + ```console + A home:testUser:branches:openEuler:Mainline + A home:testUser:branches:openEuler:Mainline/zlib + A home:testUser:branches:openEuler:Mainline/zlib/_service + ``` + +3. Go to the local subproject directory and synchronize the remote code of the software package to the local host. + + ```shell + cd home:testUser:branches:openEuler:Mainline/zlib + osc up -S + ``` + + Information similar to the following is displayed: + + ```console + A _service:tar_scm_kernel_repo:0001-Neon-Optimized-hash-chain-rebase.patch + A _service:tar_scm_kernel_repo:0002-Porting-optimized-longest_match.patch + A _service:tar_scm_kernel_repo:0003-arm64-specific-build-patch.patch + A _service:tar_scm_kernel_repo:zlib-1.2.11-optimized-s390.patch + A _service:tar_scm_kernel_repo:zlib-1.2.11.tar.xz + A _service:tar_scm_kernel_repo:zlib-1.2.5-minizip-fixuncrypt.patch + A _service:tar_scm_kernel_repo:zlib.spec + ``` + +**Building an RPM Package** + +1. Rename the source file and add the renamed source file to the temporary storage of OBS. + + ```shell + rm -f _service;for file in `ls | grep -v .osc`;do new_file=${file##*:};mv $file $new_file;done + osc addremove * + ``` + +2. Modify the source code and .spec file, and run the following command to update the file. + + ```shell + osc up + ``` + +3. Synchronize all modifications of the corresponding software package to the OBS server. The following is an example of command. The information after the **-m** parameter indicates the submmission record. + + ```shell + osc ci -m "commit log" + ``` + +4. Run the following command to obtain the repository name and architecture of the current project: + + ```shell + osc repos home:testUser:branches:openEuler:Mainline + ``` + +5. After the modification is committed, OBS automatically compiles the software package. You can run the following command to view the compilation logs of the corresponding repository. In the command, _standard\_aarch64_ and _aarch64_ indicate the repository name and architecture obtained in the command output. + + ```shell + osc buildlog standard_aarch64 aarch64 + ``` + + >[!NOTE] **NOTE:** + >You can also open the created project on the web client to view the build logs. + +#### Adding a Software Package + +To use the OSC tool of OBS to add a new software package, perform the following steps: + +**Creating a Project** + +1. Create a project based on the dependency of the new software package and a proper project. For example, to create a project based on **zlib** of the **openEuler:Mainline** project, run the following command \(**zlib** is any software package in the project\): + + ```shell + osc branch openEuler:Mainline zlib + ``` + +2. Delete unnecessary software packages added during project creation. For example, to delete the **zlib** software package, run the following command: + + ```shell + cd home:testUser:branches:openEuler:Mainline + osc rm zlib + osc commit -m "commit log" + ``` + +3. Create a software package in your own project. For example, to add the **my-first-obs-package** software package, run the following command: + + ```shell + mkdir my-first-obs-package + cd my-first-obs-package + ``` + +**Building an RPM Package** + +1. Add the prepared source file and .spec file to the software package directory. +2. Modify the source code and .spec file, and upload all files of the corresponding software package to the OBS server. The following is a command example. The information after the **-m** parameter is the commission record. + + ```shell + cd home:testUser:branches:openEuler:Mainline + osc add my-first-obs-package + osc ci -m "commit log" + ``` + +3. Run the following command to obtain the repository name and architecture of the current project: + + ```shell + osc repos home:testUser:branches:openEuler:Mainline + ``` + +4. After the modification is committed, OBS automatically compiles the software package. You can run the following command to view the compilation logs of the corresponding repository. In the command, _standard\_aarch64_ and _aarch64_ indicate the repository name and architecture obtained in the command output. + + ```shell + cd home:testUser:branches:openEuler:Mainline/my-first-obs-package + osc buildlog standard_aarch64 aarch64 + ``` + + >[!NOTE] **NOTE:** + >You can also open the created project on the web client to view the build logs. + +#### Obtaining the Software Package + +After the RPM software package is built, run the following command to obtain the RPM software package using the OSC: + +```shell +osc getbinaries home:testUser:branches:openEuler:Mainline my-first-obs-package standard_aarch64 aarch64 +``` + +The parameters in the command are described as follows. You can modify the parameters according to the actual situation. + +- _home:testUser:branches:openEuler:Mainline_: name of the project to which the software package belongs. +- _my-first-obs-package_: name of the software package. +- _standard\_aarch64_: repository name. +- _aarch64_: repository architecture name. + +>[!NOTE] **NOTE:** +>You can also obtain the software package built using OSC from the web page. For details, see [Obtaining the Software Package](#obtaining-the-software-package). diff --git a/docs/en/server/development/application_dev/figures/add-file-page.png b/docs/en/server/development/application_dev/figures/add-file-page.png new file mode 100644 index 0000000000000000000000000000000000000000..83f0bfaeeb9227bcbb863a93ab8d3535e2b2bc1d Binary files /dev/null and b/docs/en/server/development/application_dev/figures/add-file-page.png differ diff --git a/docs/en/server/development/application_dev/figures/branch-confirmation-page.png b/docs/en/server/development/application_dev/figures/branch-confirmation-page.png new file mode 100644 index 0000000000000000000000000000000000000000..e66cbcd22217b74785381b85128ea61895194882 Binary files /dev/null and b/docs/en/server/development/application_dev/figures/branch-confirmation-page.png differ diff --git a/docs/en/server/development/application_dev/figures/create-package-page.png b/docs/en/server/development/application_dev/figures/create-package-page.png new file mode 100644 index 0000000000000000000000000000000000000000..36ea525856d428b6f88a338202e7cb59b2204fc0 Binary files /dev/null and b/docs/en/server/development/application_dev/figures/create-package-page.png differ diff --git a/docs/en/server/development/application_dev/figures/creating-a-software-package.png b/docs/en/server/development/application_dev/figures/creating-a-software-package.png new file mode 100644 index 0000000000000000000000000000000000000000..f983809e8288f3c2ba7e951b60a3ca3a0f18775a Binary files /dev/null and b/docs/en/server/development/application_dev/figures/creating-a-software-package.png differ diff --git a/docs/en/server/development/application_dev/figures/deleting-a-software-package-from-a-subproject.png b/docs/en/server/development/application_dev/figures/deleting-a-software-package-from-a-subproject.png new file mode 100644 index 0000000000000000000000000000000000000000..a365cd1f46bfb8bec094b79477c0168861a5193b Binary files /dev/null and b/docs/en/server/development/application_dev/figures/deleting-a-software-package-from-a-subproject.png differ diff --git a/docs/en/server/development/application_dev/figures/en-us_image_0229243671.png b/docs/en/server/development/application_dev/figures/en-us_image_0229243671.png new file mode 100644 index 0000000000000000000000000000000000000000..ad5ed3f7beeb01e6a48707c4806606b41d687e22 Binary files /dev/null and b/docs/en/server/development/application_dev/figures/en-us_image_0229243671.png differ diff --git a/docs/en/server/development/application_dev/figures/en-us_image_0229243702.png b/docs/en/server/development/application_dev/figures/en-us_image_0229243702.png new file mode 100644 index 0000000000000000000000000000000000000000..96096879d161f04750a332e5c749a834c49d3173 Binary files /dev/null and b/docs/en/server/development/application_dev/figures/en-us_image_0229243702.png differ diff --git a/docs/en/server/development/application_dev/figures/en-us_image_0229243704.png b/docs/en/server/development/application_dev/figures/en-us_image_0229243704.png new file mode 100644 index 0000000000000000000000000000000000000000..267bc9508f3a065b5b40c367e745f0d8c3ddb5fa Binary files /dev/null and b/docs/en/server/development/application_dev/figures/en-us_image_0229243704.png differ diff --git a/docs/en/server/development/application_dev/figures/en-us_image_0229243712.png b/docs/en/server/development/application_dev/figures/en-us_image_0229243712.png new file mode 100644 index 0000000000000000000000000000000000000000..62ef0decdf6f1e591059904001d712a54f727e68 Binary files /dev/null and b/docs/en/server/development/application_dev/figures/en-us_image_0229243712.png differ diff --git a/docs/en/server/development/application_dev/figures/repositories-page.png b/docs/en/server/development/application_dev/figures/repositories-page.png new file mode 100644 index 0000000000000000000000000000000000000000..b7c04eedf9dd32cf4a9d024a05f5c8b294c76934 Binary files /dev/null and b/docs/en/server/development/application_dev/figures/repositories-page.png differ diff --git a/docs/en/server/development/application_dev/figures/rpm-software-package-download-page.png b/docs/en/server/development/application_dev/figures/rpm-software-package-download-page.png new file mode 100644 index 0000000000000000000000000000000000000000..9f32d6c16d344df6951fc4e6aa027d02dfb9ccb5 Binary files /dev/null and b/docs/en/server/development/application_dev/figures/rpm-software-package-download-page.png differ diff --git a/docs/en/server/development/application_dev/figures/succeeded-page.png b/docs/en/server/development/application_dev/figures/succeeded-page.png new file mode 100644 index 0000000000000000000000000000000000000000..3f10cd1db8bdc9be1ab8b660ef93e8a481c2d6b8 Binary files /dev/null and b/docs/en/server/development/application_dev/figures/succeeded-page.png differ diff --git a/docs/en/server/development/application_dev/installing_obs.md b/docs/en/server/development/application_dev/installing_obs.md new file mode 100644 index 0000000000000000000000000000000000000000..6b5347c44c998d0c1f01b75053a00d7e7ef61444 --- /dev/null +++ b/docs/en/server/development/application_dev/installing_obs.md @@ -0,0 +1,86 @@ +# Installing the OBS Tool + +## Description + +Open Build Service (OBS) is a general tool for building source packages into RPM packages or Linux images. +obs-server is the software package of OBS. + +## Supported Architectures + +OBS supports x86_64 and AArch64 architectures. + +## OBS Installation + +openEuler 22.03 LTS SP4 for the AArch64 architecture is used as an example to demonstrate how to install the multi-architecture obs-server packages. + +1. Check whether the OS is openEuler 22.03 LTS SP4. + + ```shell + $ cat /etc/openEuler-release + openEuler release 22.03 LTS SP4 + ``` + +2. Configure the Yum source. The repo source for the multi-architecture obs-server must be placed before the **everything** repo source. An example Yum source configuration is as follows: + + ```shell + [everything] + name=everything + baseurl=https://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/aarch64/ + enabled=1 + gpgcheck=0 + ``` + + RUn the following command to open the repo source file and add the preceding content. + + ```shell + sudo vi /etc/yum.repos.d/xxx.repo + ``` + +3. Enable the Yum source. + + ```shell + sudo yum clean all + sudo yum makecache + ``` + +4. Check whether OBS packages of other versions exist. + + ```shell + sudo rpm -qa obs-server obs-common obs-api mod_passenger obs-api-deps obs-bundled-gems passenger ruby ruby-help ruby-irb rubygem-bundler rubygem-io-console rubygem-json rubygem-openssl rubygem-psych rubygem-rake rubygem-rdoc rubygems rubygem-bigdecimal rubygem-did_you_mean + ``` + +5. (Optional) To prevent conflicts, uninstall OBS packages of other versions. + + ```shell + sudo yum remove -y obs-server obs-common obs-api mod_passenger obs-api-deps obs-bundled-gems passenger ruby ruby-help ruby-irb rubygem-bundler rubygem-io-console rubygem-json rubygem-openssl rubygem-psych rubygem-rake rubygem-rdoc rubygems rubygem-bigdecimal rubygem-did_you_mean + ``` + + > **Note** + > + >- The example repo source is the multi-architecture version of obs-server released with openEuler 22.03 LTS SP4. + >- Installation dependency packages of different versions may conflict, causing installation failure. You are advised to uninstall the preceding software packages before installation. + +6. Install obs-server packages. + + ```shell + sudo yum install -y obs-api obs-server + ``` + +7. Check whether obs-server packages are successfully installed. + + ```shell + $ rpm -qa | grep obs-server + obs-server-2.10.11-6.oe2203.noarch + $ rpm -qa | grep obs-api + obs-api-2.10.11-6.oe2203.noarch + ``` + +## OBS Deployment + +1. Obtain the deployment script at . + +2. Run the **restart_service.sh** script to deploy the OBS tool. + +## Usage Instructions + +You can build RPM packages using the OBS web UI or the osc CLI tool. For details, see [Building an RPM Package](./building_an_rpm_package.md). diff --git a/docs/en/server/development/application_dev/preparations_for_development_environment.md b/docs/en/server/development/application_dev/preparations_for_development_environment.md new file mode 100644 index 0000000000000000000000000000000000000000..34fc6c9f1e22c453084a8793f3cf2a4452189f89 --- /dev/null +++ b/docs/en/server/development/application_dev/preparations_for_development_environment.md @@ -0,0 +1,461 @@ +# Preparing the Development Environment + +## Environment Requirements + +- If physical machines (PMs) are used, the minimum hardware specifications of the development environment are listed in [Table 1](#table154419352610). + + **Table 1** Minimum hardware specifications + + + + + + + + + + + + + + + + + + + + + + + + +

Component

+

Minimum Hardware Specifications

+

Description

+

Architecture

+
  • AArch64
  • x86_64
+
  • 64-bit Arm architecture
  • 64-bit Intel x86 architecture
+

CPU

+
  • Huawei Kunpeng 920 series
  • Intel® Xeon® processor
+

-

+

Memory

+

≥ 4 GB (8 GB or higher is recommended for better experience.)

+

-

+

Hard drive

+

≥ 32 GB (≥ 120 GB for better user experience)

+

IDE, SATA, and SAS hard drives

+
+ +- If virtual machines (VMs) are used, the minimum virtualization space required by the development environment is listed in [Table 2](#table780410493819). + + **Table 2** Minimum virtualization space specifications + + + + + + + + + + + + + + + + + + + + + + + + +

Component

+

Minimum Virtualization Space

+

Description

+

Architecture

+
  • AArch64
  • x86_64
+

-

+

CPU

+

2 x CPU

+

-

+

Memory

+

≥ 4 GB (8 GB or higher is recommended for better experience.)

+

-

+

Hard drive

+

≥ 32 GB (120 GB or higher is recommended for better user experience.)

+

-

+
+ +### OS Requirements + +The openEuler OS is required. + +For details about how to install the openEuler OS, see the [Installation Guide](./../../installation_upgrade/installation/installation_guide.md). On the **SOFTWARE SELECTION** page, select **Development Tools** in the **Add-Ons for Selected Environment** area. + +## Configuring the openEuler Yum Source + +Configure an online Yum source using the online openEuler repo source. Alternatively, configure a local Yum source by mounting an ISO file and creating a local openEuler repo source. + +### Configuring an Online Yum Source by Obtaining the Online openEuler Repo Source + +>[!NOTE] **NOTE:** +>openEuler provides multiple repo sources for users to use online. For details about the repo sources, see [OS Installation](./../../releasenotes/os_installation.md). This section uses the OS repo source of the AArch64 architecture as an example to describe how to configure it as a Yum source. + +1. Go to the Yum source directory and view the .repo configuration file in the directory. + + ```shell + $ cd /etc/yum.repos.d + $ ls + openEuler.repo + ``` + +2. Edit the **openEuler.repo** file as the **root** user and configure the online openEuler repo source as the Yum source. + + ```shell + vi openEuler.repo + ``` + + Edit the **openEuler.repo** file as follows: + + ```text + [osrepo] + name=osrepo + baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/aarch64/ + enabled=1 + + gpgcheck=1 + gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/aarch64/RPM-GPG-KEY-openEuler + ``` + +>[!NOTE] **NOTE:** +> +> - *repoid* indicates the ID of the software repository. *repoid* in all .repo configuration files must be unique. In the example, *repoid* is set to **osrepo**. +> +> - **name** indicates the character string of the software repository description. +> - **baseurl** indicates the address of the software repository. +> - **enabled** indicates whether to enable the software source repository. The value can be **1** or **0**. The default value is **1**, indicating that the software source repository is enabled. +> - **gpgcheck** can be set to **1** or **0**. Value **1** indicates that the GNU Private Guard (GPG) check is enabled, while value **0** indicates that the GPG check is disabled. **gpgcheck** checks whether the source of the RPM package is valid and secure. If this option is not specified, the GPG check is enabled by default. +> - **gpgkey** indicates the public key used to verify the signature. + +### Configuring a Local Yum Source by Mounting an ISO File + +>[!NOTE] **NOTE:** +>openEuler provides multiple ISO release packages. For details about the ISO release packages, see [OS Installation](./../../releasenotes/os_installation.md). This section uses the **openEuler-22.03-LTS-SP4-aarch64-dvd.iso** release package and **openEuler-22.03-LTS-SP4-aarch64-dvd.iso.sha256sum** verification file as examples. Modify them based on the actual requirements. + +1. Download the ISO release package. + - Download an ISO image using a cross-platform file transfer tool. + 1. Visit the [openEuler community](https://www.openeuler.org/en/). + 2. Choose **Downloads** > **Community Editions**. + 3. Locate the target version, for example, **openEuler 22.03-LTS-SP4**. Then, click **Download**. The download list is displayed. + 4. The download list includes the following architectures and scenarios: + Architectures: + - **x86\_64**: ISO of the x86\_64 architecture. + - **AArch64**: ISO of the AArch64 architecture. + - **ARM32**: ISO for embedded devices. + Scenarios: + - Server: ISO for the server scenario. + - Edge computing: ISO for the edge computing scenario. + - Cloud computing: ISO for the cloud computing scenario. + - Embedded: ISO for the embedded scenario. + + 5. Click **AArch64**. + 6. Click **Server**. + 7. Choose **Offline Standard ISO** and click **Download** to download the openEuler release package to the local host. + 8. Click **SHA256** to copy the checksum. Save the checksum as a local verification file. + 9. Log in to the openEuler OS and create a directory for storing the release package and verification file, for example, **~/iso**. + + ```shell + mkdir ~/iso + ``` + + 10. Use a cross-platform file transfer tool (such as WinSCP) to upload the local openEuler release package and verification file to the openEuler OS. + + - Run the **wget** command to download the ISO image. + 1. Visit the [openEuler community](https://www.openeuler.org/en/). + 2. Choose **Downloads** > **Community Editions**. + 3. Locate the target version, for example, **openEuler 22.03-LTS-SP4**. Then, click **Download**. The download list is displayed. + 4. The download list includes the following architectures and scenarios: + Architectures: + - **x86\_64**: ISO of the x86\_64 architecture. + - **AArch64**: ISO of the AArch64 architecture. + - **ARM32**: ISO for embedded devices. + Scenarios: + - Server: ISO for the server scenario. + - Edge computing: ISO for the edge computing scenario. + - Cloud computing: ISO for the cloud computing scenario. + - Embedded: ISO for the embedded scenario. + + 5. Click **AArch64**. + 6. Click **Server**. + 7. Choose **Offline Standard ISO**, right-click **Download**, and copy the link address. + 8. Right-click **SHA256** and copy the link address. + 9. Log in to the openEuler OS, create a directory for storing the release package and verification file, for example, **~/iso**. Then switch to the directory. + + ```shell + mkdir ~/iso + cd ~/iso + ``` + + 10. Run the **wget** command to remotely download the release package and verification file. In the command, replace **ipaddriso** and **ipaddrisosum** with the addresses copied in steps 7 and 8. + + ```shell + wget ipaddriso + wget ipaddrisosum + ``` + +2. Verify the integrity of the release package. + 1. Obtain the verification value in the verification file. + + ```shell + cat openEuler-22.03-LTS-SP4-aarch64-dvd.iso.sha256sum + ``` + + 2. Calculate the SHA256 verification value of the openEuler release package. + + ```shell + sha256sum openEuler-22.03-LTS-SP4-aarch64-dvd.iso + ``` + + After the command is executed, the verification value is displayed. + + 3. Check whether the verification values calculated in step 1 and step 2 are the same. + + If the verification values are the same, the integrity of the ISO file is not damaged. If the verification values are different, the integrity of the ISO file is damaged and you need to obtain the ISO file again. + +3. Mount the ISO file and create a repo source. + + Run the `mount` command to mount the image file as the **root** user. + + Example: + + ```shell + mount /home/iso/openEuler-22.03-LTS-SP4-aarch64-dvd.iso /mnt/ + ``` + + The structure of the mounted **/mnt** directory is as follows: + + ```console + . + │── boot.catalog + │── docs + │── EFI + │── images + │── Packages + │── repodata + │── TRANS.TBL + └── RPM-GPG-KEY-openEuler + ``` + + In the directory, **Packages** indicates the directory where the RPM package is stored, **repodata** indicates the directory where the repo source metadata is stored, and **RPM-GPG-KEY-openEuler** indicates the public key for signing openEuler. + +4. Go to the Yum source directory and view the .repo configuration file in the directory. + + ```shell + $ cd /etc/yum.repos.d + + $ ls + openEuler.repo + ``` + +5. Edit the **openEuler.repo** file as the **root** user. Configure the local openEuler repo source created in step [3](#li6236932222) as the local Yum source. + + ```shell + vi openEuler.repo + ``` + + Edit the **openEuler.repo** file as follows: + + ```text + [localosrepo] + name=localosrepo + baseurl=file:///mnt + enabled=1 + gpgcheck=1 + gpgkey=file:///mnt/RPM-GPG-KEY-openEuler + ``` + +## Installing Software Packages + +Install the software required for development. The software required varies in different development environments, but the installation methods are the same. This section describes how to install common software packages (JDK and rpm-build). Some development software, such as GCC and GNU make, is provided by the openEuler OS by default. + +### Installing the JDK Software Package + +1. Run the `dnf list installed | grep jdk` command to check whether JDK has been installed. + + ```shell + dnf list installed | grep jdk + ``` + + Check the command output. If the command output contains **jdk**, the software has been installed and does not need to be installed again. If no information is displayed, the software is not installed. + +2. Clear the cache. + + ```shell + dnf clean all + ``` + +3. Create a cache. + + ```shell + dnf makecache + ``` + +4. Query the JDK software packages that can be installed. + + ```shell + dnf search jdk | grep jdk + ``` + + View the command output and install the **java-x.x.x-openjdk-devel.aarch64** software package. *x.x.x* indicates the version number. + +5. Install the JDK software package as the **root** user. The following uses the **java-1.8.0-openjdk-devel-1.8.0.372.b07-1.oe2203SP3.aarch64** software package as an example. + + ```shell + dnf install java-1.8.0-openjdk-devel-1.8.0.372.b07-1.oe2203SP3.aarch64 + ``` + +6. Query the JDK version. + + ```shell + java -version + ``` + + If the command output contains **openjdk version "1.8.0\_232"**, JDK has been correctly installed. **1.8.0\_232** indicates the JDK version. + +### Installing the rpm-build Software Package + +1. Run the `dnf list installed | grep rpm-build` command to check whether the rpm-build software has been installed. + + ```shell + dnf list installed | grep rpm-build + ``` + + Check the command output. If the command output contains **rpm-build**, the software has been installed and does not need to be installed again. If no information is displayed, the software is not installed. + +2. Clear the cache. + + ```shell + dnf clean all + ``` + +3. Create a cache. + + ```shell + dnf makecache + ``` + +4. Install the rpm-build software package as the **root** user. + + ```shell + dnf install rpm-build + ``` + +5. Query the rpm-build version. + + ```shell + rpmbuild --version + ``` + +## Using the IDE for Java Development + +For small-sized Java applications, you can directly use JDK to compile them to run Java applications. However, for medium- and large-sized Java applications, this method cannot meet developers' requirements. You can perform the following operations to install and use the development environment (IDE) to facilitate Java development on the openEuler OS. + +### Overview + +IntelliJ IDEA is a popular Java IDE. You can download and use the community edition of IntelliJ IDEA free of charge. Currently, openEuler supports Java program development using the IntelliJ IDEA, which improves the work efficiency of developers. + +### Logging In to the Server Using MobaXterm + +MobaXterm is an excellent SSH client. It has a built-in X Server and can easily solve the remote GUI display problems. + +You need to download and install MobaXterm in advance, start it, log in to your server in SSH mode, and perform the following operations. + +### Setting the JDK Environment + +Before setting **JAVA\_HOME**, you need to find the JDK installation path. If you have not installed JDK, install it by referring to the preceding section "Installing the JDK Software Package." + +Run the following commands to view the Java path: + +```shell +$ which java +/usr/bin/java +``` + +Run the following commands to check the directory to which the soft link points: + +```shell +$ ls -la /usr/bin/java +lrwxrwxrwx. 1 root root 22 Mar 6 20:28 /usr/bin/java -> /etc/alternatives/java +$ ls -la /etc/alternatives/java +lrwxrwxrwx. 1 root root 83 Mar 6 20:28 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-devel-1.8.0.372.b07-1.oe2203SP3.aarch64/jre/bin/java +``` + +The actual path of JDK is **/usr/lib/jvm/java-1.8.0-openjdk-devel-1.8.0.372.b07-1.oe2203SP3.aarch64**. Run the following commands to set **JAVA\_HOME** and **PATH**: + +```shell +export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-devel-1.8.0.372.b07-1.oe2203SP3.aarch64 +export PATH=$JAVA_HOME/bin:$PATH +``` + +### Downloading and Installing the GTK Library + +Run the following command: + +```shell +dnf list installed | grep gtk +``` + +If **gtk2** or **gtk3** is displayed, the GTK library has been installed. In this case, skip this step. Otherwise, run the following command as the **root** user to automatically download and install the GTK library: + +```shell +dnf -y install gtk2 libXtst libXrender xauth +``` + +### Setting X11 Forwarding + +Switch to the SSHD configuration directory. + +```shell +cd ~/.ssh +``` + +If the directory does not exist, run the following command to create it and then switch to it: + +```shell +mkdir ~/.ssh +``` + +Edit the **config** file in the .ssh directory and save the file. + +1. Run the **vim** command to open the **config** file. + + ```shell + vim config + ``` + +2. Add the following content to the end of the file and save the file: + + ```shell + Host * + ForwardAgent yes + ForwardX11 yes + ``` + +### Downloading and Running IntelliJ IDEA + +After performing the preceding environment configuration, you can download and use IntelliJ IDEA. The latest IntelliJ IDEA is incompatible with openEuler in some functions. You are advised to download the [Linux package of the 2018 version](https://www.jetbrains.com/idea/download/other.html). Move the downloaded package to the directory where you want to install the software and decompress the package. + +```shell +tar xf ideaIC-2018.3.tar.gz +``` + +Decompress the package, switch to the IntelliJ IDEA directory, and run IntelliJ IDEA. + +```shell +cd ./idea-IC-183.4284.148 +bin/idea.sh & +``` diff --git a/docs/en/server/development/application_dev/public_sys-resources/icon-caution.gif b/docs/en/server/development/application_dev/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/development/application_dev/public_sys-resources/icon-caution.gif differ diff --git a/docs/en/server/development/application_dev/public_sys-resources/icon-danger.gif b/docs/en/server/development/application_dev/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/development/application_dev/public_sys-resources/icon-danger.gif differ diff --git a/docs/en/server/development/application_dev/public_sys-resources/icon-note.gif b/docs/en/server/development/application_dev/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/server/development/application_dev/public_sys-resources/icon-note.gif differ diff --git a/docs/en/server/development/application_dev/public_sys-resources/icon-notice.gif b/docs/en/server/development/application_dev/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/en/server/development/application_dev/public_sys-resources/icon-notice.gif differ diff --git a/docs/en/server/development/application_dev/public_sys-resources/icon-tip.gif b/docs/en/server/development/application_dev/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/en/server/development/application_dev/public_sys-resources/icon-tip.gif differ diff --git a/docs/en/server/development/application_dev/public_sys-resources/icon-warning.gif b/docs/en/server/development/application_dev/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/development/application_dev/public_sys-resources/icon-warning.gif differ diff --git a/docs/en/server/development/application_dev/using_gcc_for_compilation.md b/docs/en/server/development/application_dev/using_gcc_for_compilation.md new file mode 100644 index 0000000000000000000000000000000000000000..6b2f59684099e1ef2548f559faff64220f67c306 --- /dev/null +++ b/docs/en/server/development/application_dev/using_gcc_for_compilation.md @@ -0,0 +1,592 @@ +# Using GCC for Compilation + +This chapter describes the basic knowledge of GCC compilation and provides examples for demonstration. For more information about GCC, run the **man gcc** command. + +## Overview + +The GNU Compiler Collection \(GCC\) is a powerful and high-performance multi-platform compiler developed by GNU. The GCC compiler can compile and link source programs, assemblers, and target programs of C and C++ into executable files. By default, the GCC software package is installed in the openEuler OS. + +## Basics + +### File Type + +For any given input file, the file type determines which compilation to perform. [Table 1](#table634145764320) describes the common GCC file types. + +**Table 1** Common GCC file types + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Extension (Suffix)

+

Description

+

.c

+

C source code file.

+

.C, .cc, or .cxx

+

C++ source code file.

+

.m

+

Objective-C source code file.

+

.s

+

Assembly language source code file.

+

.i

+

Preprocessed C source code file.

+

.ii

+

Preprocessed C++ source code file.

+

.S

+

Pre-processed assembly language source code file.

+

.h

+

Header file contained in the program.

+

.o

+

Target file after compilation.

+

.so

+

Dynamic link library, which is a special target file.

+

.a

+

Static link library.

+

.out

+

Executable files, which do not have a fixed suffix. The system distinguishes executable files from inexecutable files based on file attributes. If the name of an executable file is not given, GCC generates a file named a.out.

+
+ +### Compilation Process + +Using GCC to generate executable files from source code files requires preprocessing, compilation, assembly, and linking. + +1. Preprocessing: Preprocess the source program \(such as a **.c** file\) to generate an **.i** file. +2. Compilation: Compile the preprocessed **.i** file into an assembly language to generate an **.s** file. +3. Assemble: Assemble the assembly language file to generate the target file **.o**. +4. Linking: Link the **.o** files of each module to generate an executable program file. + +The **.i**, **.s**, and **.o** files are intermediate or temporary files. If the GCC is used to compile programs in C language at a time, these files will be deleted. + +### Compilation Options + +GCC compilation command format: **gcc** \[_options_\] \[_filenames_\] + +In the preceding information: + +_options_ : compilation options. + +_filenames_ : file name. + +GCC is a powerful compiler. It has many _options_, but most of them are not commonly used. [Table 2](#table1342946175212) describes the common _options_. + +**Table 2** Common GCC compilation options + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

options Value

+

Description

+

Example

+

-c

+

Compiles and assembles specified source files to generate target files without linking them. It is usually used to compile subprogram files.

+

# Use the -c option to compile the source files test1.c and test2.c.

+

gcc -c test1.c test2.c

+

-S

+

Compiles the specified source file to generate an assembly language file with the .s suffix but without assembling it.

+

# Use the compiler to preprocess circle.c, translate it into assembly language, and store the result in circle.s.

+

gcc -S circle.c

+

-E

+

Preprocesses specified source files without compiling them.

+

By default, the output of the preprocessor is imported to a standard output stream, such as a display. You can use the -o option to import it to an output file.

+

# Export the preprocessing result to the circle.i file.

+

gcc -E circle.c -o circle.i

+

-o file

+

Generates a specified output file when an executable file is generated. The name must be different from that of the source file. If this option is not given, GCC generates the preset executable file a.out.

+

# Use the source file as the input file and the executable file as the output file. That is, compile the entire program.

+

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

+

-g

+

Contains standard debugging information in executable programs.

+

-

+

-L library_path

+

Adds the library_path to the library file search path list.

+

-

+

-I library

+

Searches for the specified function library during linking.

+

When GCC is used to compile and link programs, GCC links libc.a or libc.so by default. However, other libraries (such as non-standard libraries and third-party libraries) need to be manually added.

+

# Use the -l option to link the math library.

+

gcc main.c -o main.out -lm

+
NOTE:

The file name of the math library is libm.a. The prefix lib and suffix .a are standard, and m is the basic name. GCC automatically adds these prefixes and suffixes to the basic name following the -l option. In this example, the basic name is m.

+
+

-I head_path

+

Adds the head_path to the search path list of the header file.

+

-

+

-static

+

Performs static compilation and links static libraries. Do not link dynamic libraries.

+

-

+

-shared

+

Default option, which can be omitted.

+
  • A dynamic library file can be generated.
  • During dynamic compilation, the dynamic library is preferentially linked. The static library with the same name is linked only when there is no dynamic library.
+

-

+

-fPIC (or -fpic)

+

Generates location-independent target code that uses a relative address. Generally, the -static option is used to generate a dynamic library file from the PIC target file.

+

-

+
+ +### Multi-file Compilation + +There are two methods provided for compiling multiple source files. + +- Multiple source files are compiled at the same time. All files need to be recompiled during compilation. + + Example: Compile **test1.c** and **test2.c** and link them to the executable file **test**. + + ```shell + $ gcc test1.c test2.c -o test + ``` + +- Compile each source file, and then link the target files generated after compilation. During compilation, only modified files need to be recompiled. + + For example, compile **test1.c** and **test2.c**, and link the target files **test1.o** and **test2.o** to the executable file **test**. + + ```shell + $ gcc -c test1.c + $ gcc -c test2.c + $ gcc test1.o test2.o -o test + ``` + +## Libraries + +A library is mature and reusable code that has been written for use. Each program depends on many basic underlying libraries. + +The library file name is prefixed with lib and suffixed with .so \(dynamic library\) or .a \(static library\). The middle part is the user-defined library file name, for example, libfoo.so or libfoo.a. Because all library files comply with the same specifications, the **lib** prefix can be omitted when the **-l** option specifies the name of the linked library file. That is, when GCC processes **-lfoo**, the library file **libfoo.so** or **libfoo.a** is automatically linked. When creating a library, you must specify the full file name **libfoo.so** or **libfoo.a**. + +Libraries are classified into static libraries and dynamic libraries based on the linking time. The static library links and packs the target file .o generated by assembly and the referenced library into an executable file in the linking phase. The dynamic library is not linked to the target code when the program is compiled, but is loaded when the program is run. The differences are as follows: + +- The resource usage is different. + + The static library is a part of the generated executable file, while the dynamic library is a separate file. Therefore, the sizes and occupied disk space of the executable files of the static library and dynamic library are different, which leads to different resource usage. + +- The scalability and compatibility are different. + + If the implementation of a function in the static library changes, the executable file must be recompiled. For the executable file generated by dynamic linking, only the dynamic library needs to be updated, and the executable file does not need to be recompiled. + +- The dependency is different. + + The executable file of the static library can run without depending on any other contents, while the executable file of the dynamic library must depend on the dynamic library. Therefore, the static library is convenient to migrate. + +- The loading speeds are different. + + Static libraries are linked together with executable files, while dynamic libraries are linked only when they are loaded or run. Therefore, for the same program, static linking is faster than dynamic linking. + +### Dynamic Link Library + +You can use the **-shared** and **-fPIC** options to create a dynamic link library \(DLL\) with the source file, assembly file, or target file. The **-fPIC** option is used in the compilation phase. This option is used when the target file is generated, so as to generate location-independent code. + +Example 1: Generate a DLL from the source file. + +```shell +$ gcc -fPIC -shared test.c -o libtest.so +``` + +Example 2: Generate a DLL from the target file. + +```shell +$ gcc -fPIC -c test.c -o test.o +$ gcc -shared test.o -o libtest.so +``` + +To link a DLL to an executable file, you need to list the name of the DLL in the command line. + +Example: Compile **main.c** and **libtest.so** into **app.out**. When **app.out** is running, the link library **libtest.so** is dynamically loaded. + +```shell +$ gcc main.c libtest.so -o app.out +``` + +In this mode, the **libtest.so** file in the current directory is used. + +If you choose to search for a DLL, to ensure that the DLL can be linked when the program is running, you must implement by using one of the following methods: + +- Save the DLL to a standard directory, for example, **/usr/lib**. +- Add the DLL path **libraryDIR** to the environment variable **LD\_LIBRARY\_PATH**. + + $ export LD\_LIBRARY\_PATH=libraryDIR:$LD\_LIBRARY\_PATH + + >[!NOTE] **NOTE:** + >**LD\_LIBRARY\_PATH** is an environment variable of the DLL. If the DLL is not in the default directories \(**/lib** and **/usr/lib**\), you need to specify the environment variable **LD\_LIBRARY\_PATH**. + +- Add the DLL path **libraryDIR** to **/etc/ld.so.conf** and run **ldconfig**, or use the DLL path **libraryDIR** as a parameter to run **ldconfig**. + +```shell +$ gcc main.c -L libraryDIR -ltest -o app.out +$ export LD_LIBRARY_PATH=libraryDIR:$LD_LIBRARY_PATH +``` + +### Static Link Library + +To create a static link library \(SLL\), you need to compile the source file to the target file, and then run the **ar** command to compress the target file into an SLL. + +Example: Compile and compress source files **test1.c**, **test2.c**, and **test3.c** into an SLL. + +```shell +$ gcc -c test1.c test2.c test3.c +$ ar rcs libtest.a test1.o test2.o test3.o +``` + +The **ar** command is a backup compression command. You can compress multiple files into a backup file \(also called an archive file\) or extract member files from the backup file. The most common use of **ar** is to compress the target files into an SLL. + +The format of the **ar** command to compress the target files into an SLL is as follows: + +ar rcs _Sllfilename_ _Targetfilelist_ + +- _Sllfilename_ : Name of the static library file. +- _Targetfilelist_ : Target file list. +- **r**: replaces the existing target file in the library or adds a new target file. +- **c**: creates a library regardless of whether the library exists. +- **s**: creates the index of the target file. The speed can be improved when a large library is created. + +Example: Create a main.c file to use the SLL. + +```shell +$ gcc main.c -L libraryDIR -ltest -o test.out +``` + +In the preceding command, **libraryDIR** indicates the path of the libtest.a library. + +## Examples + +### Example for Using GCC to Compile C Programs + +1. Run the **cd** command to go to the code directory. The **~/code** directory is used as an example. The command is as follows: + + ```shell + $ cd ~/code + ``` + +2. Compile the Hello World program and save it as **helloworld.c**. The following uses the Hello World program as an example. The command is as follows: + + ```shell + $ vi helloworld.c + ``` + + Code example: + + ```c + #include + int main() + { + printf("Hello World!\n"); + return 0; + } + ``` + +3. Run the following command to compile the code in the code directory: + + ```shell + $ gcc helloworld.c -o helloworld + ``` + + If no error is reported, the execution is successful. + +4. After the compilation is complete, the helloworld file is generated. Check the compilation result. The following is an example: + + ```shell + $ ./helloworld + Hello World! + ``` + +### Example for Creating and Using a DLL Using GCC + +1. Run the **cd** command to go to the code directory. The **~/code** directory is used as an example. Create the **src**, **lib**, and **include** subdirectories in the directory to store the source file, DLL file, and header file, respectively. + + ```shell + $ cd ~/code + $ mkdir src lib include + ``` + +2. Run the **cd** command to go to the **~/code/src** directory and create two functions **add.c** and **sub.c** to implement addition and subtraction, respectively. + + ```shell + $ cd ~/code/src + $ vi add.c + $ vi sub.c + ``` + + The following is an example of the **add.c** code: + + ```c + #include "math.h" + int add(int a, int b) + { + return a+b; + } + ``` + + The following is an example of the **sub.c** code: + + ```c + #include "math.h" + int sub(int a, int b) + { + return a-b; + } + ``` + +3. Compile the source files add.c and sub.c into the DLL libmath.so, and store the DLL in the **~/code/lib** directory. + + ```shell + $ gcc -fPIC -shared add.c sub.c -o ~/code/lib/libmath.so + ``` + +4. Go to the **~/code/include** directory, create a header file **math.h**, and declare the header file of the function. + + ```shell + $ cd ~/code/include + $ vi math.h + ``` + + The following is an example of the **math.h** code: + + ```c + #ifndef __MATH_H_ + #define __MATH_H_ + int add(int a, int b); + int sub(int a, int b); + #endif + ``` + +5. Run the **cd** command to go to the **~/code/src** directory and create a **main.c** function that invokes add\(\) and sub\(\). + + ```shell + $ cd ~/code/src + $ vi main.c + ``` + + The following is an example of the **math.c** code: + + ```c + #include + #include "math.h" + int main() + { + int a, b; + printf("Please input a and b:\n"); + scanf("%d %d", &a, &b); + printf("The add: %d\n", add(a,b)); + printf("The sub: %d\n", sub(a,b)); + return 0; + } + ``` + +6. Compile **main.c** and **libmath.so** into **math.out**. + + ```shell + $ gcc main.c -I ~/code/include -L ~/code/lib -lmath -o math.out + ``` + +7. Add the path of the DLL to the environment variable. + + ```shell + $ export LD_LIBRARY_PATH=~/code/lib:$LD_LIBRARY_PATH + ``` + +8. Run the following command to execute **math.out**: + + ```shell + $ ./math.out + ``` + + The command output is as follows: + + ```text + Please input a and b: + 9 2 + The add: 11 + The sub: 7 + ``` + +### Example for Creating and Using an SLL Using GCC + +1. Run the **cd** command to go to the code directory. The **~/code** directory is used as an example. Create the **src**, **lib**, and **include** subdirectories in the directory to store the source file, SLL file, and header file respectively. + + ```shell + $ cd ~/code + $ mkdir src lib include + ``` + +2. Run the **cd** command to go to the **~/code/src** directory and create two functions **add.c** and **sub.c** to implement addition and subtraction, respectively. + + ```shell + $ cd ~/code/src + $ vi add.c + $ vi sub.c + ``` + + The following is an example of the **add.c** code: + + ```c + #include "math.h" + int add(int a, int b) + { + return a+b; + } + ``` + + The following is an example of the **sub.c** code: + + ```c + #include "math.h" + int sub(int a, int b) + { + return a-b; + } + ``` + +3. Compile the source files **add.c** and **sub.c** into the target files **add.o** and **sub.o**. + + ```shell + $ gcc -c add.c sub.c + ``` + +4. Run the **ar** command to compress the **add.o** and **sub.o** target files into the SLL **libmath.a** and save the SLL to the **~/code/lib** directory. + + ```shell + $ ar rcs ~/code/lib/libmath.a add.o sub.o + ``` + +5. Go to the **~/code/include** directory, create a header file **math.h**, and declare the header file of the function. + + ```shell + $ cd ~/code/include + $ vi math.h + ``` + + The following is an example of the **math.h** code: + + ```c + #ifndef __MATH_H_ + #define __MATH_H_ + int add(int a, int b); + int sub(int a, int b); + #endif + ``` + +6. Run the **cd** command to go to the **~/code/src** directory and create a **main.c** function that invokes add\(\) and sub\(\). + + ```shell + $ cd ~/code/src + $ vi main.c + ``` + + The following is an example of the **math.c** code: + + ```c + #include + #include "math.h" + int main() + { + int a, b; + printf("Please input a and b:\n"); + scanf("%d %d", &a, &b); + printf("The add: %d\n", add(a,b)); + printf("The sub: %d\n", sub(a,b)); + return 0; + } + ``` + +7. Compile **main.c** and **libmath.a** into **math.out**. + + ```shell + $ gcc main.c -I ~/code/include -L ~/code/lib -lmath -o math.out + ``` + +8. Run the following command to execute **math.out**: + + ```shell + $ ./math.out + ``` + + The command output is as follows: + + ```text + Please input a and b: + 9 2 + The add: 11 + The sub: 7 + ``` diff --git a/docs/en/server/development/application_dev/using_jdk_for_compilation.md b/docs/en/server/development/application_dev/using_jdk_for_compilation.md new file mode 100644 index 0000000000000000000000000000000000000000..1a2abedac17bdeaa64b769f4fff8a7e218a21667 --- /dev/null +++ b/docs/en/server/development/application_dev/using_jdk_for_compilation.md @@ -0,0 +1,509 @@ +# Using JDK for Compilation + +## Overview + +A Java Development Kit \(JDK\) is a software package required for Java development. It contains the Java Runtime Environment \(JRE\) and compilation and commissioning tools. On the basis of OpenJDK, openEuler optimizes GC, enhances concurrency stability, and enhances security, improving the performance and stability of Java applications on ARM. + +## Basics + +### File Type and Tool + +For any given input file, the file type determines which tool to use for processing. The common file types and tools are described in [Table 1](#table634145764320) and [Table 2](#table103504146433). + +**Table 1** Common JDK file types + + + + + + + + + + + + + + + + +

Extension (Suffix)

+

Description

+

.java

+

Java source code file.

+

.class

+

Java bytecode file, which is intermediate code irrelevant to any specific machine or OS environment. It is a binary file, which is the target code file generated after the Java source file is compiled by the Java compiler.

+

.jar

+

JAR package of Java files.

+
+ +**Table 2** Common JDK tools + + + + + + + + + + + + + + + + +

Name

+

Description

+

java

+

Java running tool, which is used to run .class bytecode files or .jar files.

+

javac

+

Compiles Java source code files into .class bytecode files.

+

jar

+

Creates and manages JAR files.

+
+ +### Java Program Generation Process + +To generate a program from Java source code files and run the program using Java, compilation and run are required. + +1. Compilation: Use the Java compiler \(javac\) to compile Java source code files \(.java files\) into .class bytecode files. +2. Run: Execute the bytecode files on the Java virtual machine \(JVM\). + +### Common JDK Options + +#### Javac Compilation Options + +The command format for javac compilation is as follows: **javac** \[_options_\] \[_sourcefiles_\] \[_classes_\] \[@_argfiles_\] + +In the preceding information: + +_options_: command options. + +_sourcefiles_: one or more source files to be compiled. + +_classes_: one or more classes to be processed as comments. + +@_argfiles_: one or more files that list options and source files. The **-J** option is not allowed in these files. + +Javac is a Java compiler. It has many _options_, but most of them are not commonly used. [Table 3](#table1342946175212) describes the common options values. + +**Table 3** Common javac options + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

options Value

+

Description

+

Example

+

-d path

+

Path for storing the generated class files.

+

By default, the class files generated after compilation are in the same path as the source file. You can use the -d option to export the class files to the specified path.

+

# Use the -d option to export all class files to the bin directory.

+

javac /src/*.java -d /bin

+

-s path

+

Path for storing the generated source files.

+

-

+

-cp path or -classpath path

+

Searches for the class files required for compilation and specifies the location of the class files.

+

# In the Demo, the getLine() method in the GetStringDemo class needs to be invoked. The .class file compiled by the GetStringDemo class is stored in the bin directory.

+

javac -cp bin Demo.java -d bin

+

-verbose

+

Outputs information about the operations being performed by the compiler, such as loaded class information and compiled source file information.

+

# Display information about the operations that are being performed by the compiler.

+

javac -verbose -cp bin Demo.java

+

-source sourceversion

+

Specifies the location of the input source files to be searched for.

+

-

+

-sourcepath path

+

Searches for source files (Java files) required for compilation and specifies the location of the source files to be searched for, for example, JAR, ZIP, or other directories that contain Java files.

+

-

+

-target targetversion

+

Generates class files of a specific JVM version. The value can be 1.1, 1.2, 1.3, 1.4, 1.5 (or 5), 1.6 (or 6), 1.7 (or 7), or 1.8 (or 8). The default value of targetversion is related to sourceversion of the -source option. The options of sourceversion are as follows:

+
  • 1.2, corresponding to target version 1.4
  • 1.3, corresponding to target version 1.4
  • 1.5, 1.6, 1.7, and unspecified, corresponding to target version 1.8
  • For other values, the values of targetversion and sourceversion are the same.
+

-

+
+ +#### Java Running Options + +The Java running format is as follows: + +Running class file: **java** \[_options_\] _classesname_ \[args\] + +Running Java file: **java** \[_options_\] -jar _filename_ \[args\] + +In the preceding information: + +_options_: command options, which are separated by spaces. + +_classname_: name of the running .class file. + +_filename_: name of the running .jar file. + +args: parameters transferred to the main\(\) function. The parameters are separated by spaces. + +Java is a tool for running Java applications. It has many _options_, but most of them are not commonly used. [Table 4](#table371918587238) describes the common options. + +**Table 4** Common Java running options + + + + + + + + + + + + + + + + +

options Value

+

Description

+

Example

+

-cp path or -classpath path

+

Specifies the location of the file to be run and the class path to be used, including the .jar, .zip, and class file directories.

+

If there are multiple paths, separate them with colons (:).

+

-

+

-verbose

+

Outputs information about the operations being performed by the compiler, such as loaded class information and compiled source file information.

+

# Display information about the operations that are being performed by the compiler.

+

java -verbose -cp bin Demo.java

+
+ +#### JAR Options + +The JAR command format is as follows: **jar** \{c | t | x | u\}\[vfm0M\] \[_jarfile_\] \[_manifest_\] \[-C _dir_\] _file_... + +[Table 5](#table3691718114817) describes the parameters in the **jar** command. + +**Table 5** JAR parameter description + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

Example

+

c

+

Creates a JAR package.

+

# Compress the hello.class files in the current directory into Hello.jar. The compression process is not displayed. If the Hello.jar files do not exist, create them. Otherwise, clear the directory.

+

jar cf Hello.jar hello.class

+

t

+

Lists the contents of a JAR package.

+

# List the files contained in Hello.jar.

+

jar tf Hello.jar

+

x

+

Decompresses a JAR package.

+

# Decompress Hello.jar to the current directory. No information is displayed.

+

jar xf Hello.jar

+

u

+

Updates the existing JAR package, for example, add files to the JAR package.

+

-

+

v

+

Generates a detailed report and prints it to the standard output.

+

# Compress the hello.class files in the current directory into Hello.jar and display the compression process. If the Hello.jar files do not exist, create them. Otherwise, clear the directory.

+

jar cvf Hello.jar hello.class

+

f

+

Specifies the name of a JAR package. This parameter is mandatory.

+

-

+

m

+

Specifies the manifest file to be contained.

+

-

+

0

+

If this parameter is not set, the generated JAR package is larger but faster than that generated when this parameter is not set.

+

-

+

M

+

If the manifest file of all items is not generated, this parameter will be ignored.

+

# Compress the hello.class files in the current directory into Hello.jar and display the compression process. If the Hello.jar files do not exist, create them. Otherwise, clear the directory. However, the manifest file is not generated when Hello.jar is created.

+

jar cvfM Hello.jar hello.class

+

jarfile

+

JAR package, which is an auxiliary parameter of the f parameter.

+

-

+

manifest

+

Manifest file in .mf format, which is an auxiliary parameter of the m parameter.

+

-

+

-C dir

+

Runs the jar command in the specified dir. This command can be used only with parameters c and t.

+

-

+

file

+

Specifies the file or path list. All files in the file or path (including those in the recursive path) are compressed into the JAR package or the JAR package is decompressed to the path.

+

# Compress all class files in the current directory into Hello.jar and display the compression process. If the Hello.jar files do not exist, create them. Otherwise, clear the directory.

+

jar cvf Hello.jar *.class

+
+ +## Class Library + +The Java class library is implemented as a package, which is a collection of classes and interfaces. The Java compiler generates a bytecode file for each class, and the file name is the same as the class name. Therefore, conflicts may occur between classes with the same name. In the Java language, a group of classes and interfaces are encapsulated in a package. Class namespaces can be effectively managed by package. Classes in different packages do not conflict even if they have the same name. This solves the problem of conflicts between classes with the same name and facilitates the management of a large number of classes and interfaces. It also ensures the security of classes and interfaces. + +In addition to many packages provided by Java, developers can customize packages by collecting compiled classes and interfaces into a package for future use. + +Before using a custom package, you need to declare the package. + +### Package Declaration + +The declaration format of a package is package pkg1\[.pkg2\[.pkg3...\]\]. + +To declare a package, you must create a directory. The subdirectory name must be the same as the package name. Then declare the package at the beginning of the class file that needs to be placed in the package, indicating that all classes of the file belong to the package. The dot \(.\) in the package declaration indicates the directory hierarchy. If the source program file does not contain the package statement, the package is specified as an anonymous package. An anonymous package does not have a path. Generally, Java still stores the classes in the source file in the current working directory \(that is, the directory where the Java source files are stored\). + +The package declaration statement must be added to the beginning of the source program file and cannot be preceded by comments or spaces. If you use the same package declaration statement in different source program files, you can include the classes in different source program files in the same package. + +### Package Reference + +In Java, there are two methods to use the common classes in the package provided by Java or the classes in the custom package. + +- Add the package name before the name of the class to be referenced. + + For example, name.A obj=new name.A \(\) + + **name** indicates the package name, **A** indicates the class name, and **obj** indicates the object. This string indicates that class **A** in the **name** package is used to define an object **obj** in the program. + + Example: Create a test object of the Test class in the example package. + + ```java + example.Test test = new example.Test(); + ``` + +- Use **import** at the beginning of the file to import the classes in the package. + + The format of the **import** statement is import pkg1\[.pkg2\[.pkg3...\]\].\(classname | \*\). + + **pkg1\[.pkg2\[.pkg3...\]\]** indicates the package level, and **classname** indicates the class to be imported. If you want to import multiple classes from a package, you can use the wildcard \(\*\) instead. + + Example: Import the **Test** class in the **example** package. + + ```java + import example.Test; + ``` + + Example: Import the entire **example** package. + + ```java + import example.*; + ``` + +## Examples + +### Compiling a Java Program Without a Package + +1. Run the **cd** command to go to the code directory. The **~/code** directory is used as an example. The command is as follows: + + ```shell + cd ~/code + ``` + +2. Compile the Hello World program and save it as **HelloWorld.java**. The following uses the Hello World program as an example. The command is as follows: + + ```shell + vi HelloWorld.java + ``` + + Code example: + + ```java + public class HelloWorld { + public static void main(String[] args) { + System.out.println("Hello World"); + } + } + ``` + +3. Run the following command to compile the code in the code directory: + + ```shell + javac HelloWorld.java + ``` + + If no error is reported, the execution is successful. + +4. After the compilation is complete, the HelloWorld.class file is generated. You can run the **java** command to view the result. The following is an example: + + ```shell + $ java HelloWorld + Hello World + ``` + +### Compiling a Java Program with a Package + +1. Run the **cd** command to go to the code directory. The **~/code** directory is used as an example. Create the **~/code/Test/my/example**, **~/code/Hello/world/developers**, and **~/code/Hi/openos/openeuler** subdirectories in the directory to store source files. + + ```shell + cd ~/code + mkdir -p Test/my/example + mkdir -p Hello/world/developers + mkdir -p Hi/openos/openeuler + ``` + +2. Run the **cd** command to go to the **~/code/Test/my/example** directory and create **Test.java**. + + ```shell + cd ~/code/Test/my/example + vi Test.java + ``` + + The following is an example of the Test.java code: + + ```java + package my.example; + import world.developers.Hello; + import openos.openeuler.Hi; + public class Test { + public static void main(String[] args) { + Hello me = new Hello(); + me.hello(); + Hi you = new Hi(); + you.hi(); + } + } + ``` + +3. Run the **cd** command to go to the **~/code/Hello/world/developers** directory and create **Hello.java**. + + ```shell + cd ~/code/Hello/world/developers + vi Hello.java + ``` + + The following is an example of the Hello.java code: + + ```java + package world.developers; + public class Hello { + public void hello(){ + System.out.println("Hello, openEuler."); + } + } + ``` + +4. Run the **cd** command to go to the **~/code/Hi/openos/openeuler** directory and create **Hi.java**. + + ```shell + cd ~/code/Hi/openos/openeuler + vi Hi.java + ``` + + The following is an example of the Hi.java code: + + ```java + package openos.openeuler; + public class Hi { + public void hi(){ + System.out.println("Hi, the global developers."); + } + } + ``` + +5. Run the **cd** command to go to the **~/code** directory and use javac to compile the source file. + + ```shell + cd ~/code + javac -classpath Hello:Hi Test/my/example/Test.java + ``` + + After the command is executed, the **Test.class**, **Hello.class**, and **Hi.class** files are generated in the **~/code/Test/my/example**, **~/code/Hello/world/developers**, and **~/code/Hi/openos/openeuler** directories. + +6. Run the **cd** command to go to the **~/code** directory and run the **Test** program using Java. + + ```shell + cd ~/code + java -classpath Test:Hello:Hi my/example/Test + ``` + + The command output is as follows: + + ```console + Hello, openEuler. + Hi, the global developers. + ``` diff --git a/docs/en/server/development/application_dev/using_make_for_compilation.md b/docs/en/server/development/application_dev/using_make_for_compilation.md new file mode 100644 index 0000000000000000000000000000000000000000..48c3bb2f0b200197a2c20c4403582ac43a76c473 --- /dev/null +++ b/docs/en/server/development/application_dev/using_make_for_compilation.md @@ -0,0 +1,357 @@ +# Using Make for Compilation + +This chapter describes the basic knowledge of make compilation and provides examples for demonstration. For more options of `make`, run the `make --help` command, or see the [GNU official document](https://www.gnu.org/software/make/manual/make.html#Overview). + +## Overview + +The GNU make utility \(usually abbreviated as make\) is a tool for controlling the generation of executable files from source files. make automatically identifies which parts of the complex program have changed and need to be recompiled. Make uses a configuration file called makefile to control how the program is built. + +## Basics + +### File Type + +[Table 1](#table634145764320) describes the file types that may be used in the makefile file. + +**Table 1** File types + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Extension (Suffix)

+

Description

+

.c

+

C source code file.

+

.C, .cc, or .cxx

+

C++ source code file.

+

.m

+

Objective-C source code file.

+

.s

+

Assembly language source code file.

+

.i

+

Preprocessed C source code file.

+

.ii

+

Preprocessed C++ source code file.

+

.S

+

Pre-processed assembly language source code file.

+

.h

+

Header file contained in the program.

+

.o

+

Target file after compilation.

+

.so

+

Dynamic link library, which is a special target file.

+

.a

+

Static link library.

+

.out

+

Executable files, which do not have a fixed suffix. The system distinguishes executable files from inexecutable files based on file attributes. If the name of an executable file is not given, GCC generates a file named a.out.

+
+ +### make Work Process + +The process of deploying make to generate an executable file from the source code file is described as follows: + +1. The make command reads the makefiles, including the files named GNUmakefile, makefile, and Makefile in the current directory, the included makefile, and the rule files specified by the **-f**, **\-\-file**, and **\-\-makefile** options. +2. Initialize variables. +3. Derive implicit rules, analyze dependencies, and create a dependency chain. +4. Determine which targets need to be regenerated based on the dependency chain. +5. Run a command to generate the final file. + +### make Options + +make command format: **make** \[_option_\]... \[_target_\]... + +In the preceding command: + +_option_ : parameter option. + +_target_ : target specified in Makefile. + +[Table 2](#table261872312343) describes the common make options. + +**Table 2** Common make options + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

options Value

+

Description

+

-C dir, \-\-directory=dir

+

Specifies dir as the working directory after the make command starts to run.

+

When there are multiple -C options, the final working directory of make is the relative path of the first directory.

+

-d

+

Displays all debugging information during execution of the make command. You can use the -d option to display all the information during the construction of the dependency chain and the reconstruction of the target.

+

-e, \-\-environment-overrides

+

Overwrites the variable definition with the same name in Makefile with the environment variable definition.

+

-f file, \-\-file=file,

+

\-\-makefile=file

+

Specifies the file as the Makefile for the make command.

+

-h, \-\-help

+

Displays help information.

+

-i, \-\-ignore-errors

+

Ignores the errors occurred during the execution.

+

-k, \-\-keep-going

+

When an error occurs during command execution, the make command is not terminated. The make command executes all commands as many as possible until a critical error occurs.

+

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

+

Simulates the execution of commands (including the commands starting with @) in the actual execution sequence. This command is used only to display the execution process and has no actual execution effect.

+

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

+

The specified file does not need to be rebuilt even if its dependency has expired, and no target of this dependency file is rebuilt.

+

-p, \-\-print-data-base

+

Before the command is executed, all data of Makefile read by make and the version information of make are printed. If you only need to print the data, run the make -qp command to view the preset rules and variables before the make command is executed. You can run the make -p -f /dev/null command.

+

-r, \-\-no-builtin-rules

+

Ignores the use of embedded implicit rules and the implicit suffix list of all suffix rules.

+

-R, \-\-no-builtin-variables

+

Ignores embedded hidden variables.

+

-s, \-\-silent, \-\-quiet

+

Cancels the printing during the command execution.

+

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

+

Cancels the -k option. In the recursive make process, the sub-make inherits the upper-layer command line option through the MAKEFLAGS variable. You can use the -S option in the sub-make to cancel the -k option transferred by the upper-layer command, or cancel the -k option in the system environment variable MAKEFLAGS.

+

-t, \-\-touch

+

Updates the timestamp of all target files to the current system time. Prevents make from rebuilding all outdated target files.

+

-v, \-\-version

+

Displays the make version.

+
+ +## Makefiles + +Make is a tool that uses makefiles for compilation, linking, installation, and cleanup, so as to generate executable files and other related files from source code files. Therefore, makefiles describe the compilation and linking rules of the entire project, including which files need to be compiled, which files do not need to be compiled, which files need to be compiled first, which files need to be compiled later, and which files need to be rebuilt. The makefiles automate project compilation. You do not need to manually enter a large number of source files and parameters each time. + +This chapter describes the structure and main contents of makefiles. For more information about makefiles, run the **info make** command. + +### Makefile Structure + +The makefile file structure is as follows: + +_targets_:_prerequisites_ + +_command_ + +or + +_targets_:_prerequisites_;_command_ + +_command_ + +In the preceding information: + +- _targets_ : targets, which can be target files, executable files, or tags. +- _prerequisites_ : dependency files, which are the files or targets required for generating the _targets_. There can be multiple or none of them. +- _command_ : command \(any shell command\) to be executed by make. Multiple commands are allowed, and each command occupies a line. +- Use colons \(:\) to separate the target files from the dependency files. Press **Tab** at the beginning of each command line. + +The makefile file structure indicates the output target, the object on which the output target depends, and the command to be executed for generating the target. + +### Makefile Contents + +A makefile file consists of the following contents: + +- Explicit rule + + Specify the dependency, such as the file to be generated, dependency file, and generated command. + +- Implicit rule + + Specify the rule that is automatically derived by make. The make command supports the automatic derivation function. + +- Variable definition +- File indicator + + The file indicator consists of three parts: + + - Inclusion of other makefiles, for example, include xx.md + - Selective execution, for example, \#ifdef + - Definition of multiple command lines, for example, define...endef. \(define ... endef\) + +- Comment + + The comment starts with a number sign \(\#\). + +## Examples + +### Example of Using Makefile to Implement Compilation + +1. Run the **cd** command to go to the code directory. The **~/code** directory is used as an example. + + ```shell + cd ~/code + ``` + +2. Create a header file **hello.h** and two functions **hello.c** and **main.c**. + + ```shell + vi hello.h + vi hello.c + vi main.c + ``` + + The following is an example of the **hello.h** code: + + ```c + #pragma once + #include + void hello(); + ``` + + The following is an example of the **hello.c** code: + + ```c + #include "hello.h" + void hello() + { + int i=1; + while(i<5) + { + printf("The %dth say hello.\n", i); + i++; + } + } + ``` + + The following is an example of the **main.c** code: + + ```c + #include "hello.h" + #include + int main() + { + hello(); + return 0; + } + ``` + +3. Create the makefile. + + ```shell + vi Makefile + ``` + + The following provides an example of the makefile content: + + ```text + main:main.o hello.o + gcc -o main main.o hello.o + main.o:main.c + gcc -c main.c + hello.o:hello.c + gcc -c hello.c + clean: + rm -f hello.o main.o main + ``` + +4. Run the **make** command. + + ```shell + make + ``` + + After the command is executed, the commands executed in makefile are printed. If you do not need to print the information, add the **-s** option to the **make** command. + + ```shell + gcc -c main.c + gcc -c hello.c + gcc -o main main.o hello.o + ``` + +5. Execute the ./main target. + + ```shell + ./main + ``` + + After the command is executed, the following information is displayed: + + The 1th say hello. + + The 2th say hello. + + The 3th say hello. + + The 4th say hello. diff --git a/docs/en/server/development/distributed/_toc.yaml b/docs/en/server/development/distributed/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5fc6b88c592c0bed717d4fc2d880d18625762de7 --- /dev/null +++ b/docs/en/server/development/distributed/_toc.yaml @@ -0,0 +1,14 @@ +label: Distributed Middleware User Guide +isManual: true +description: Distributed middleware user Guide +sections: + - label: Distributed Data Management + href: ./distributed_data_management.md + - label: DSoftBus Application Based on Containers + href: ./dsoftbus_application_based_on_containers.md + - label: Ecosystem Expansion Based on DSoftBus + href: ./expanding_the_ecosystem_through_distributed_soft_bus.md + - label: hmdfs Distributed File System Overview + href: ./hmdfs_distributed_file_system_overview.md + - label: Distributed Middleware User Guide + href: ./overview.md diff --git a/docs/en/server/development/distributed/distributed_data_management.md b/docs/en/server/development/distributed/distributed_data_management.md new file mode 100644 index 0000000000000000000000000000000000000000..695a84040839434a19e12730fc6838f09c762a30 --- /dev/null +++ b/docs/en/server/development/distributed/distributed_data_management.md @@ -0,0 +1,83 @@ +# Distributed Data Management + +Distributed data management leverages distributed virtual bus to manage application data and user data distributed on different devices. Under such management, user data is no longer bound to a single physical device, service logic is decoupled from storage, and applications are running across devices. + +Distributed data management is ported from the upstream OpenHarmony 3.2 Release. It consists of the following components. + +| Component | openEuler Software Package | Description | +| ------------------------------ | ----------------------------------- | ---------------------------------------------------------------------------------------------- | +| Distributed Data Service (DDS) | distributeddatamgr_datamgr_service | Provides the capability to store data in the databases of different devices. | +| KV store | distributeddatamgr_kv_store | Manages key-value pairs for device applications. | +| Relational database | distributeddatamgr_relational_store | Manages data using a relational model. | +| Distributed Data Object | distributeddatamgr_data_object | An object-oriented in-memory data management framework featuring multi-device synchronization. | + +For more information about distributed data management, see section [Data Management](https://docs.openharmony.cn/pages/v3.2/en/application-dev/database/data-mgmt-overview.md/) in the OpenHarmony document . + +## Installation + +Distributed data management has been integrated in openEuler 22.03 LTS SP4 by default. You can directly install it. + +```shell +dnf install distributeddatamgr_kv_store distributeddatamgr_relational_store distributeddatamgr_datamgr_service distributeddatamgr_data_object +``` + +## Service Startup + +1. You can run the **start_services.sh** script to start the DDS. + + ```shell + /system/bin/start_services.sh datamgr + ``` + +2. You can run the `ps` command to check whether the distributed data management service is started. + + ```shell + ps -ef | grep distributeddata + ``` + +## Usage + +1. Create the **/data** directory required for running the demo. OpenHarmony applications require specific directories for running. Therefore, you need to create the directories in openEuler. + + ```shell + mkdir -p /data/app/el0/0/database/com.example.distributed.rdb/rdb + mkdir -p /data/app/el1/0/database/distributeddata/kvdb + mkdir -p /data/service/el1/public/database/distributeddata/meta + mkdir -p /data/service/el1/public/database/distributeddata/kvdb + mkdir -p /data/service/el1/public/database/distributeddata/meta/backup + ``` + +2. Write the client programs for the three databases (**kv_store**, **data_object**, and **relational_store**) to use the distributed data function. + + For details about how to write the client programs, see the demo source code of each database in [Repository](https://gitee.com/heppen/distributed-data-files). The source code is stored in the **demo** directory in the directory corresponding to each database, for example, **kv_store/demo**. You can use the **build.sh** script in the **demo** directory for compilation. + + > **Notice** + > + > It is recommended that the database path **db** specified by the demo be the same as the path of the sample demo. Otherwise, the path may not exist or the permission may be insufficient. + +3. Stop the distributed management service **datamgr_service**. + + ```shell + ./stop_services.sh all #Stop all services. + ./stop_services.sh datamgr #Stop only the datamgr service. + ``` + +## FAQs + +* When a service is started, the error message "Binder Driver died " is displayed. + + Cause: Binder is not enabled in the system. You can check whether the **/dev/binder** file exists. If the file does not exist, Binder is not enabled. + + Solution: Enable the binder function. For details, see [communication_ipc Repository Description](https://gitee.com/src-openeuler/communication_ipc/blob/46d83ed1462e521ce356aec48ef980dbf84cff80/README.md). + +* The softbus_server service fails to be started, and the error message "GetNetworkIfIp ifName:eth0 fail" is displayed. + + Cause: Run the `ip a` command to view the name of the NIC in the current system and check whether the wired NIC **eth0** exists. The softbus_server service obtains information such as the IP address through the wired NIC **eth0**. If **eth0** does not exist, softbus_server cannot be started. + + Solution 1: Change the NIC name to **eth0**. + + Solution 2: Modify the softbus_server source code and change the name of the dependent wired NIC to that of the NIC in the current system. + +## References + +[hmdfs Distributed File System Overview](hmdfs_distributed_file_system_overview.md) diff --git a/docs/en/server/development/distributed/dsoftbus_application_based_on_containers.md b/docs/en/server/development/distributed/dsoftbus_application_based_on_containers.md new file mode 100644 index 0000000000000000000000000000000000000000..575f4d039e632b83c76974fba4c1f878bb0498ef --- /dev/null +++ b/docs/en/server/development/distributed/dsoftbus_application_based_on_containers.md @@ -0,0 +1,140 @@ +# DSoftBus Application Based on Containers + +## Background + +Migrating user software to containers is an inevitable trend. This document describes how to deploy DSoftBus based on containers, simplifying the installation and deployment of DSoftBus clients and facilitating compatibility with service software. + +## Environment Setup + +**Hardware devices** + +| Device | OS | Description | Quantity| +| -------------------- | ----------------------- | ------------------------------- | --- | +| Raspberry Pi 4B | openEuler 22.03-LTS-SP4 | Raspberry Pi with openEuler installed | 2 | + +## Code Repository + + + +## Description + +### Installing the Services + +Perform the following steps on both devices. + +1. To install openEuler 22.03 LTS SP2 or later on a physical machine, the [Binder driver](https://gitee.com/src-openeuler/communication_ipc/blob/openEuler-22.03-LTS-SP2/README.md "binder") must be installed in the environment. + +2. Build softbus_client. + + ```sh + bash distributed-codelabs/build-repo/demo/dsoftbus/build.sh + ``` + +3. Install softbus_server. + + ```sh + dnf install dsoftbus -y + ``` + +4. Start softbus_server. + + ```sh + /system/bin/start_services.sh all + ``` + +### Testing the Multi-Client Container Scenario + +1. Run the script to build and load the container image on device A. + + ```sh + bash distributed-codelabs/build-repo/demo/dsoftbus/docker_img_build.sh + ``` + +2. Start the **softbus_client** container image on device A and map the SDKs and binder driver to the container. + + ```sh + docker run -it --privileged --net=host --name=softbus -v /dev/binderfs/binder:/dev/binder -v /system:/system -v /usr/lib64:/usr/lib64 -p 5684:5684/udp softbus_client_image bash + ``` + +3. Write to the **/etc/SI** file in the image as the flag of the DSoftBus client in the container. Note that the flag must be different from those of other clients on the network to avoid conflicts. + + ```sh + echo 123 > /etc/SI + ``` + +4. Start **softbus_client** in the container. + + ```sh + ./home/softbus_client + ``` + +5. You can repeat steps 2 and 3 to start different client containers on this node. + +6. Start DSoftBus on device B. + + ```sh + ./build-repo/demo/dsoftbus/softbus_client + ``` + +7. Run the following command on each client of device A to enable all connections: + + ```sh + openA + ``` + +8. View all opened sessions on the client of device B. + + ```sh + conDevices + ``` + + The command output indicates that two sessions whose IDs are 4 and 3 have been opened. The session IDs are allocated by softbus_server of the local host and will be used for subsequent message sending. + + ```sh + conDevices + 12-11 20:18:58.350 2780335 2780335 I A0fffe/SOFTBUS_DEMO: [SOFTBUS_DEMO]::PrintConnectedDevicesInfo: sessionId:4, networkId: 3c95f61941b81c48ecd73fef881262b82fcbc58e9b1f545e2097b0dc6fecea37 + 12-11 20:18:58.350 2780335 2780335 I A0fffe/SOFTBUS_DEMO: [SOFTBUS_DEMO]::PrintConnectedDevicesInfo: sessionId:3, networkId: 3c95f61941b81c48ecd73fef881262b82fcbc58e9b1f545e2097b0dc6fecea37 + ``` + +9. Use device B to send a message to the client of device A through session 4. + + ```sh + send 4 "hello4" + 12-11 20:19:14.975 2780335 2780335 I C015c0/dsoftbus: [TRAN]SendBytes: sessionId=4 + ``` + + If output is displayed in a client of device A, the client communicates with device B through session 4. Similarly, you can send messages to another client through session 3. + +10. Use the client in the container of device A to send a message to the client of device B and check the opened session ID. + + ```sh + conDevices + 12-11 20:25:48.995 344047 344047 I A0fffe/SOFTBUS_DEMO: [SOFTBUS_DEMO]::PrintConnectedDevicesInfo: sessionId:1, networkId: e69eab4e2d657264dfbb2006fdfa15524f4a27edeff0baa26d5d2a2b9502f300 + ``` + + The output indicates that session 1 is used for communication. + +11. Send a message. If device B receives the string, the message is received successfully. + + ```sh + send 1 "hello1" + ``` + +12. Use the client of device A to send a message to the client of device B and check the opened session ID. + + ```sh + conDevices + 12-11 20:37:24.823 3512580 3512580 I A0fffe/SOFTBUS_DEMO: [SOFTBUS_DEMO]::PrintConnectedDevicesInfo: sessionId:1, networkId: e69eab4e2d657264dfbb2006fdfa15524f4a27edeff0baa26d5d2a2b9502f300 + ``` + + The output indicates that session 1 is used for communication. + +13. Send a message. If device B receives the string, the message is received successfully. + + ```sh + send 1 "hello1" + ``` + +### Session ID Description + +In the test in the previous section, it is found that the session IDs used for communication between the two clients are different. The reason is that the session IDs are allocated by the server on the local host and are unique only on the local host. Similarly, the session names and group names of the container are isolated from those of the VM. Therefore, the session IDs of the local container are the same as those of the client on the VM. diff --git a/docs/en/server/development/distributed/expanding_the_ecosystem_through_distributed_soft_bus.md b/docs/en/server/development/distributed/expanding_the_ecosystem_through_distributed_soft_bus.md new file mode 100644 index 0000000000000000000000000000000000000000..7318618440cd75d8a1d5d2902869135ae93582f9 --- /dev/null +++ b/docs/en/server/development/distributed/expanding_the_ecosystem_through_distributed_soft_bus.md @@ -0,0 +1,242 @@ +# Expanding the Ecosystem Through Distributed Soft Bus + +## Background + +openEuler aims to build an operating system for digital infrastructure. To promote cooperation with the OpenHarmony ecosystem and implement interoperability in device-edge scenarios, openEuler introduces the distributed soft bus (DSoftBus) technology to the embedded field. + +DSoftBus is an open source communication base for distributed devices developed by the OpenHarmony community. It enables unified distributed communication between devices, achieving imperceptible device discovery and efficient data transmission. OpenHarmony is designed for smart devices, IoT devices, and industrial devices that require strong interaction, while openEuler is oriented to servers, edge computing, cloud, and embedded devices that require high reliability and performance. DSoftBus is an example of the collaborative technologies that allow users from both communities to explore more industry applications. + +For details about the working principles and processes of DSoftBus, see [openEuler Distributed Soft Bus](https://openeuler.gitee.io/yocto-meta-openeuler/master/features/distributed_softbus.html). + +## Environment + +**Hardware** + +| Device Name | OS | Description | +| -------------------- | ----------------------- | ------------------------------- | +| Raspberry Pi 4B | openEuler 22.03-LTS-SP4 | Raspberry Pi with openEuler installed | +| DAYU200 rk3568 development board| openHarmony 3.1 Release | Development board with OpenHarmony installed| + +**Software** + +| Item | Download URL | Description | +| ----------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| openEuler 22.03-LTS-SP4 | | Download the openEuler image in the raspi_img directory. For details, see [Installing openEuler on Raspberry Pi](https://www.cnblogs.com/rocedu/p/14615565.html).| +| openHarmony 3.1 Release | | Download the OpenHarmony OS. For details, see [Standard System Overview](https://docs.openharmony.cn/pages/v3.1/en/device-dev/quick-start/quickstart-ide-standard-overview.md/).| +| HUAWEI DevEco Studio | | Integrated development environment for OpenHarmony. For details, see [DevEco Studio User Guide (OpenHarmony)](https://developer.harmonyos.com/en/docs/documentation/doc-guides-V3/ohos-deveco-studio-overview-0000001263280421-V3). The code in this document is based on OpenHarmony SDK 9.| + +## Obtaining Code + +This document uses a Raspberry Pi (openEuler) and an RK3568 development board (openHarmony) for ecosystem interconnection demonstration. + +**Obtain the code for openEuler (Raspberry Pi)**: + +```shell +# Operations on openEuler are performed on Raspberry Pi. + +# The server software package has been integrated into openEuler 22.03 LTS SP4. Run the following command to install the server software package: + +dnf install dsoftbus -y + +# For the client code, use softbus_client_main.c provided by the openEuler Embedded SIG (https://openeuler.gitee.io/yocto-meta-openeuler/master/features/distributed_softbus.html). +``` + +**Obtain the code for OpenHarmony (RK3568 development board)**: + +```shell +# Operations on OpenHarmony (RK3568 development board) are performed on Windows. + +# DSoftBus has been integrated into the openHarmony 3.1 Release image. You do not need to manually obtain the server code. + +# The client code is based on Native C++. You can run the following git command to download the reference code. + +git clone https://gitee.com/liheavy/softbus_client_app.git +``` + +## Compiling Code + +**Compile the code for openEuler (Raspberry Pi)**: + +```shell +# After installing DSoftBus, save softbus_client_main.c to any path and run the following gcc command to compile the file. After the compilation is complete, the executable file softbus_client_main is generated in the path. Add the execute permission to the file. + +gcc softbus_client_main.c -I/usr/include/dsoftbus/ -L /usr/lib64 -lsoftbus_client.z -lboundscheck -o softbus_client_main + +chmod u+x softbus_client_main +``` + +**Compile the code for OpenHarmony (RK3568 development board)**: + +- Configure the IDE by referring to the [HUAWEI DevEco Studio User Guide](https://developer.harmonyos.com/en/docs/documentation/doc-guides-V3/ohos-deveco-studio-overview-0000001263280421-V3). + +- Open the downloaded **softbus_client_app/softbus_client_sample** reference code using DevEco. DevEco automatically initializes the project based on the configuration file. + + After the initialization, generate a signature file: `File --> Project Structure --> Project --> Signing Configs --> Automatically generate signature`. + + ![image-20221201101959764](figures/image-20221201101959764.png) + +- OpenHarmony SDK 9 does not provide the API of DSoftBus. Therefore, this project directly uses the API of DSoftBus service in the application. The dependent .so files (**libsoftbus_client.z.so** and **libsec_shared.z.so**) are required. Copy the file to the dynamic library path of the local openHarmony SDK. The .so files are downloaded to the local PC (**required_so** folder) together with the source code. You can also use the hdc tool to copy the two .so files in RK3568. The .so file path is **/lib/xxx.so**. + + To view the local OpenHarmony SDK installation path: `File --> Settings --> OpenHarmony SDK`. + + ![image-20221201103709581](figures/image-20221201103709581.png) + + Copy **libsoftbus_client.z.so** and **libsec_shared.z.so** to **OpenHarmony_SDK_installation_path/native/x.x.x.x/sysroot/usr/lib/arm-linux-ohos/**. + + After the compilation is complete, compile the code in DevEco: `Build --> Build Hap(s)/App(s) --> Build Hap(s)`. + + ![image-20221201111227158](figures/image-20221201111227158.png) + +## Running Code + +### Preparations + +**Configuring Device ID** + +**Configure device ID on openEuler (Raspberry Pi)**: + +The dependency on the device management module is temporarily removed in the current version of DSoftBus. To simplify device ID obtaining, the device ID is read from the **/etc/SN** file. Therefore, you need to write the device ID to **/etc/SN** before starting DSoftBus. Each device must have a unique ID to avoid authentication and communication errors. + +```shell +# Assume the device ID is 1. +echo "1" >>/etc/SN +``` + +**Connecting to the Network** + +The two devices must be in the same LAN and reachable to each other. You can run the `ifconfig` command on the OSs of each device to view the IP addresses. + +**On openEuler (Raspberry Pi)**: + +- Start the DSoftBus service. + + ```shell + # DSoftBus provides the softbus_server_main command. Execute the command directly. + + softbus_server_main + ``` + +**On OpenHarmony (RK3568 development board)**: + +- Connect to the RK3568 development board from the local PC. + + Connect the USB port of the local PC and the OTG USB port of the RK3568 development board. If the development board is displayed in the device list in the upper right corner of DevEco, The device is connected. + + ![image-20221201115003525](figures/image-20221201115003525.png) + +- Modify the permission configuration file of DSoftBus. + + OpenHarmony DSoftBus restricts access to its functions based on application permissions. Therefore, you need to modify the DSoftBus configuration file to run the demo. + + ```shell + # The permission configuration file can be replaced by the hdc_std tool, which is installed with OpenHarmony SDK. The installation path is: + + OpenHarmony_SDK_installation_path/toolchains/x.x.x.x/hdc_std.exe + + # The DSoftBus permission configuration file on RK3568 is in read-only mode. Run the following command to change the file system to read-write mode: + + hdc_std.exe shell "mount -o remount,rw /" + + # Replace the softbus_trans_permission.json file on RK3568 with the one from the softbus_client_app repository: + + hdc_std.exe file send softbus_trans_permission.json /system/etc/communication/softbus/ + ``` + +- Restart the DSoftBus service. + + ```shell + # Run the following command to restart the DSoftBus service for the modified permission configuration file to take effect: + + ps -ef | grep softbus_server | grep -v grep + + kill -9 PID_queried_in_the_last_step + ``` + +### Device Authentication + +The OpenHarmony and openEuler devices need to be added as trusted devices for each other during networking. Therefore, before the two devices communicate with each other, they need to be authenticated through the Hichain module. For details, see [Adding Trusted Devices](https://openeuler.gitee.io/yocto-meta-openeuler/master/features/distributed_softbus.html#id4). The following operations are performed on Raspberry Pi. + +- Create a soft link of the dynamic library. + + ```shell + # This method requires libsec_shared.z.so, which is replaced with libboundscheck.so in openEuler DSoftBus. Therefore, you need to create a soft link to use libsec_shared.z.so. + ln -s /usr/lib64/libboundscheck.so /usr/lib64/libsec_shared.z.so + + # In the Arm environment, /lib64/1d-linux-aarch64.so.1 is also required. + ln -s /lib/ld-linux-aarch64.so.1 /lib64/ld-linux-aarch64.so.1 + ``` + +- Run the authentication client. + + ```shell + # The demo executable file (devicemanager) of the authentication client is also stored in the hichain_sample directory of the softbus_client_app repository. + + chmod u+x devicemanager + ./devicemanager + ``` + + Enter **l** as prompted to list the devices in the same LAN. + + ![image-20221201145904897](figures/image-20221201145904897.png) + + Enter the OpenHarmony device number as prompted for authentication. After the number is entered, a confirmation dialog box is displayed on the RK3568 development board, asking whether to allow the peer device to connect. Click **Allow** and enter **l** on the Raspberry Pi. The device status changes from discovery to online, indicating a successful authentication. + + ![image-20221201150148988](figures/image-20221201150148988.png) + +### Device Communication + +- Burn and run the client on OpenHarmony (RK3568 development board). + + Connect the local PC to the RK3568 development board and click **Run** in the upper part of DevEco. + + ![image-20221201151951393](figures/image-20221201151951393.png) + + After the burning is complete, RK3568 directly runs the app. + + ![image-20221130193253259](figures/image-20221130193253259.png) + +- Send data from openEuler (Raspberry Pi). + + ```shell + # Run the compiled softbus_client_main executable file. + + ./softbus_client_main + ``` + + The networking devices are displayed. + + ![image-20221201162316137](figures/image-20221201162316137.png) + + Enter **c** as prompted. + + ![image-20221201163115659](figures/image-20221201163115659.png) + + Enter the ID of the openHarmony device as prompted. + + ![image-20221201163310745](figures/image-20221201163310745.png) + + The received character string is displayed on the top of the RK3568 development board screen. + +![](figures/receiving_data.png) + +- View terminal information OpenHarmony (RK3568 development board). + + Click the refresh icon on the app page. The devices connected to the device are displayed. Click the device icon to display the basic information about the device. + + ![](figures/terminal_info.png) + +- Send data from OpenHarmony (RK3568 development board): + + Click **Send Data** on the app page to send data to openEuler. + +![](figures/sending_data.png) + + The received information is displayed on openEuler (Raspberry Pi). + +![image-20221201165948378](figures/image-20221201165948378.png) + + The demonstration of interconnection between openEuler and OpenHarmony through DSoftBus is complete. + +## 6. Summary + +This document demonstrates how OpenHarmony devices and openEuler devices communicate with each other through the DSoftBus. The server code is being continuously optimized to support more distributed scenarios. The client code is only a demo and needs to be optimized. For example, the standard method for invoking DSoftBus in an OpenHarmony app is to develop a system ability to call the DSoftBus API and integrate the system ability to the SDK. However, in this document, the app directly invokes the DSoftBus API. We welcome enthusiasts to participate in the development to enrich the embedded capabilities of openEuler. diff --git a/docs/en/server/development/distributed/figures/hmdfs_dir_tree.png b/docs/en/server/development/distributed/figures/hmdfs_dir_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..52ff849452d43a0d5717fdf0c7242d4f2e59f21b Binary files /dev/null and b/docs/en/server/development/distributed/figures/hmdfs_dir_tree.png differ diff --git a/docs/en/server/development/distributed/figures/image-20221130193253259.png b/docs/en/server/development/distributed/figures/image-20221130193253259.png new file mode 100644 index 0000000000000000000000000000000000000000..9d43820821d9009a81ca72a5aa55ebe48a94fae0 Binary files /dev/null and b/docs/en/server/development/distributed/figures/image-20221130193253259.png differ diff --git a/docs/en/server/development/distributed/figures/image-20221201101959764.png b/docs/en/server/development/distributed/figures/image-20221201101959764.png new file mode 100644 index 0000000000000000000000000000000000000000..3f71db5e1024f1c02268a91e885966c83cb18d75 Binary files /dev/null and b/docs/en/server/development/distributed/figures/image-20221201101959764.png differ diff --git a/docs/en/server/development/distributed/figures/image-20221201103709581.png b/docs/en/server/development/distributed/figures/image-20221201103709581.png new file mode 100644 index 0000000000000000000000000000000000000000..116a16690df4e959fdf62e2238c3f5bc198b161d Binary files /dev/null and b/docs/en/server/development/distributed/figures/image-20221201103709581.png differ diff --git a/docs/en/server/development/distributed/figures/image-20221201111227158.png b/docs/en/server/development/distributed/figures/image-20221201111227158.png new file mode 100644 index 0000000000000000000000000000000000000000..33d16024f6be949edd8ab689cd83ff8d909086de Binary files /dev/null and b/docs/en/server/development/distributed/figures/image-20221201111227158.png differ diff --git a/docs/en/server/development/distributed/figures/image-20221201115003525.png b/docs/en/server/development/distributed/figures/image-20221201115003525.png new file mode 100644 index 0000000000000000000000000000000000000000..8246847c2982dc6c7d4bda07226d3cb9f397fbe3 Binary files /dev/null and b/docs/en/server/development/distributed/figures/image-20221201115003525.png differ diff --git a/docs/en/server/development/distributed/figures/image-20221201145904897.png b/docs/en/server/development/distributed/figures/image-20221201145904897.png new file mode 100644 index 0000000000000000000000000000000000000000..06bb03e7c6bad67e9a8ebf8ac017f89f910a23fb Binary files /dev/null and b/docs/en/server/development/distributed/figures/image-20221201145904897.png differ diff --git a/docs/en/server/development/distributed/figures/image-20221201150148988.png b/docs/en/server/development/distributed/figures/image-20221201150148988.png new file mode 100644 index 0000000000000000000000000000000000000000..b181cf33a2f492cec4ec95babf7f7c0f2a1b2f13 Binary files /dev/null and b/docs/en/server/development/distributed/figures/image-20221201150148988.png differ diff --git a/docs/en/server/development/distributed/figures/image-20221201151951393.png b/docs/en/server/development/distributed/figures/image-20221201151951393.png new file mode 100644 index 0000000000000000000000000000000000000000..28251fd311e820d8d7ad306fe0c9de30556b59a6 Binary files /dev/null and b/docs/en/server/development/distributed/figures/image-20221201151951393.png differ diff --git a/docs/en/server/development/distributed/figures/image-20221201162316137.png b/docs/en/server/development/distributed/figures/image-20221201162316137.png new file mode 100644 index 0000000000000000000000000000000000000000..3068d1845ded464b0ba3932599f7fb2f0f4db550 Binary files /dev/null and b/docs/en/server/development/distributed/figures/image-20221201162316137.png differ diff --git a/docs/en/server/development/distributed/figures/image-20221201163115659.png b/docs/en/server/development/distributed/figures/image-20221201163115659.png new file mode 100644 index 0000000000000000000000000000000000000000..7f691d52612709834b5d495b5909bff57f32f4e3 Binary files /dev/null and b/docs/en/server/development/distributed/figures/image-20221201163115659.png differ diff --git a/docs/en/server/development/distributed/figures/image-20221201163310745.png b/docs/en/server/development/distributed/figures/image-20221201163310745.png new file mode 100644 index 0000000000000000000000000000000000000000..a549f803d39ec746ba9cca91709e8ddd173f61cf Binary files /dev/null and b/docs/en/server/development/distributed/figures/image-20221201163310745.png differ diff --git a/docs/en/server/development/distributed/figures/image-20221201165948378.png b/docs/en/server/development/distributed/figures/image-20221201165948378.png new file mode 100644 index 0000000000000000000000000000000000000000..1f042cceb30d43d3056892a90c3d11ac909e5704 Binary files /dev/null and b/docs/en/server/development/distributed/figures/image-20221201165948378.png differ diff --git a/docs/en/server/development/distributed/figures/receiving_data.png b/docs/en/server/development/distributed/figures/receiving_data.png new file mode 100644 index 0000000000000000000000000000000000000000..05af0c2f4f649025453b70a331c71f28f1ac69a1 Binary files /dev/null and b/docs/en/server/development/distributed/figures/receiving_data.png differ diff --git a/docs/en/server/development/distributed/figures/sending_data.png b/docs/en/server/development/distributed/figures/sending_data.png new file mode 100644 index 0000000000000000000000000000000000000000..d6d8da09d48c884040729135298b9a453c4f577c Binary files /dev/null and b/docs/en/server/development/distributed/figures/sending_data.png differ diff --git a/docs/en/server/development/distributed/figures/terminal_info.png b/docs/en/server/development/distributed/figures/terminal_info.png new file mode 100644 index 0000000000000000000000000000000000000000..4ab47b3b83fd88635e258663bef1c7a56651f465 Binary files /dev/null and b/docs/en/server/development/distributed/figures/terminal_info.png differ diff --git a/docs/en/server/development/distributed/hmdfs_distributed_file_system_overview.md b/docs/en/server/development/distributed/hmdfs_distributed_file_system_overview.md new file mode 100644 index 0000000000000000000000000000000000000000..2dda39bca76e3b2dc955ecee27742209ad9b7bbc --- /dev/null +++ b/docs/en/server/development/distributed/hmdfs_distributed_file_system_overview.md @@ -0,0 +1,177 @@ +# hmdfs Distributed File System Overview + +OpenHarmony distributed file system (hmdfs) distributed file system provides cross-device file access capabilities in the following scenarios: + +- When two devices are deployed on a network, device A can transparently read and modify files on device B. + +- The edge server can automatically synchronize file data from multiple embedded devices on the network. + +The hmdfs provides a globally consistent access view across devices dynamically connected to a network via DSoftBus and allows you to implement high-performance read and write operations on files with low latency by using basic file system APIs. + +It consists of the following core modules: + +- distributed_file_daemon: user-mode daemon for distributed file management, which is responsible for access device networking, data transmission, and hmdfs mounting. + +- hmdfs: core module of the distributed filesystem. It is a high-performance, kernel-mode, and layered file system for mobile distributed scenarios. + +## Constraints + +### Supported Interfaces + +Distributed file management does not support or partially supports the following system calls of the Virtual File System (VFS): + +- `symlink` is not supported. +- `mmap` supports read only. +- `rename` supports only operations within the same directory. + +### Specifications + +- Maximum number of directory levels + + The value is the same as the overlaid file system, that is, the file system used by the **data** partition, such as ext4 and F2FS. +- Maximum file name length + + The smaller of 680 bytes and the length supported by the overlaid file system. For F2FS and ext4, the value is 255 bytes. +- Maximum size of a single file + + The smaller of $2^{64}$B and the size supported by the overlaid file system. The value is 16 TB for ext4 and 3.94 TB for F2FS. + +### Environment Restrictions + +- The name of the wired NIC in the running environment must be **eth0**, and the name of the wireless NIC must be **wlan0**. You can run the `ip a` command to check the NIC name in the current environment. If **eth0** or **wlan0** does not exist, softbus_server fails to be started and the function is invalid. For details, see [FAQs](#faqs). + +- The kernel version of openEuler must be 5.10.x. You can run the `uname -r` command to view the kernel version. + +- All openEuler devices are in the same subnet, and the connections between the devices are normal. The firewall does not intercept data packets from DSoftBus. + +## Description + +### Installation + +Note: If a step fails to be performed, rectify the fault by referring to [FAQs](#faqs). + +1. Install the **hmdfs** and **filemanagement_dfs_service** software packages. Run the following command: + + ```shell + sudo dnf install hmdfs filemanagement_dfs_service + ``` + +2. Install the hmdfs file system. After the **hmdfs** software package is installed, the **hmdfs.ko** file is provided and stored in the **/lib/modules/$(uname -r)/hmdfs** directory. Insert the **.ko** file to install hmdfs. + + ```shell + cd /lib/modules/$(uname -r)/hmdfs + insmod hmdfs.ko + ``` + + > **Notice** + > + > - If the **hmdfs.ko** file does not exist in the **/lib/modules/$(uname -r)/hmdfs/** directory, the kernel version used for building the hmdfs project is not the same as the kernel version in the current environment. You can search for the **hmdfs.ko** file of other kernel versions in the **/lib/modules** directory. + > - In the Raspberry Pi environment, use [**hmdfs.ko**](https://gitee.com/heppen/hmdfs_test/blob/dev/out/hmdfs_SP4_rasp.ko) compiled on openEuler 22.03 LTS SP4 raspberry-pi kernel. + +### Configuration + +1. The startup of some services depends on the dynamic library **libsec_shared.z.so**, which is named **libboundscheck.so** in openEuler (provided by the **libboundscheck** software package). Therefore, you need to create a soft link to **libsec_shared.z.so** in **/usr/lib64**. + + ```shell + ln -s /usr/lib64/libboundscheck.so /usr/lib64/libsec_shared.z.so + ``` + +2. Configure the SN of each device. Currently, services such as softbus_sever use the SN set in the **/etc/SN** file to obtain the UDID of the device. Therefore, you need to set **a unique SN** for each openEuler device. + + ```shell + echo "111" > /etc/SN # Set different values for different devices. + ``` + +### Usage + +To use hmdfs, you need to mount the hmdfs directory and start the distributed_file_daemon service. +> **Notice** +> +> Perform the following steps on each openEuler device. + +#### Mounting the hmdfs Directory + +1. Run the `mount` command to mount the hmdfs directory. Ensure that the directory structure is the same as that of OpenHarmony. Mount **/data/service/el2/100/non_account** to **/mnt/hmdfs/100/non_account**. + + ```shell + mkdir -p /data/service/el2/100/non_account + mkdir -p /mnt/hmdfs/100/non_account + sudo mount -t hmdfs -o merge,local_dst="/mnt/hmdfs/100/non_account" "/data/service/el2/100//non_account" "/mnt/hmdfs/100/non_account" + ``` + + After the directory is mounted, you can run the `df -h` command to view the mounted directory, which contains the **device_view** and **merge_view** directories. + + ```txt + ├── device_view + │ └── local + └── merge_view + ``` + +#### Starting the dfs_service Service + +After **filemanagement_dfs_service** and its dependent software packages are installed, related executable binary files are stored in **/system/bin/**, and library files are stored in **/system/lib64**. + +1. Start the dfs_service distributed file service: + + ```shell + cd /system/bin + ./start_services.sh dfs + ``` + +2. Stop the dfs_service distributed file service: + + ```shell + cd /system/bin + ./stop_service.sh dfs + ``` + +### Function Usage + +After distributed_file_daemon is started on each openEuler device, you can view the directories of the remote devices in **/mnt/hmdfs/100/non_account**. In this example, only two openEuler devices are connected. + +```txt +├── device_view +│ ├── fceda1e26c36d1dd0ba65c00d71c1ab619fcf088ad2adf33cd1e2f396dc70ee2 +│ └── local +└── merge_view +``` + +There are two file views in the directory: **device_view**, which contains **local** file view and remote file view; and **merge_view**, which is the merged file view, containing files of multiple devices. + +If you need to perform cross-device file operations, simply perform operations on the files in the remote device directory in **device_view**. + +## FAQs + +- When a service is started, the error message "Binder Driver died" is displayed. + + Cause: Binder is not enabled in the system. You can check whether the **/dev/binder** file exists. If the file does not exist, Binder is not enabled. + + Solution: Start Binder by referring to the [communication_ipc repository README](https://gitee.com/src-openeuler/communication_ipc/blob/openEuler-22.03-LTS-SP4/README.md). + +- The **hmdfs.ko** file cannot be inserted, and the error "insmod: ERROR: could not insert module hmdfs.ko: Invalid parameters" is reported. + + Cause: The kernel used for compiling hmdfs is different from that in the current environment. + + Solution 1: Compile a **hmdfs.ko** file that matches the kernel of the current environment, and then insert the **.ko** file. + + Solution 2: Use an openEuler version that has the same kernel as openEuler 22.03 LTS SP4. + +- In the openEuler 22.03 LTS SP4 Raspberry Pi version, the **hmdfs.ko** file cannot be inserted and the error "insmod: ERROR: could not insert module hmdfs.ko: Invalid module format" is reported. + + Cause: The Raspberry Pi version uses a special kernel. However, the hmdfs software in the repository is built using the kernel of the openEuler 22.03 LTS SP4 server version. Therefore, the **.ko** file cannot be inserted. + + Solution: Use [**hmdfs.ko**](https://gitee.com/heppen/hmdfs_test/blob/dev/out/hmdfs_SP4_rasp.ko) compiled on openEuler 22.03 LTS SP4 raspberry-pi kernel. + +- The softbus_server service fails to be started, and the error message "GetNetworkIfIp ifName:eth0 fail" is displayed. + + Cause: Run the ip a command to view the name of the NIC in the current system and check whether the wired NIC **eth0** exists. The softbus_server service obtains information such as the IP address through the wired NIC **eth0**. If **eth0** does not exist, softbus_server cannot be started. + + Solution 1: Change the NIC name to **eth0**. + + Solution 2: Modify the softbus_server source code and change the name of the dependent wired NIC to that of the NIC in the current system. + +- After the softbus_server service is started on multiple openEuler devices, the distributed_file_daemon service logs show that no online device is found. + + Cause: The network between devices is disconnected, or the firewall blocks DSoftBus data. + + Solution: Check whether the network is normal. (You can run `systemctl stop firewalld.service` to temporarily disable the firewall and test the network if services will not be affected.) diff --git a/docs/en/server/development/distributed/overview.md b/docs/en/server/development/distributed/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..cb30fb10f8a73063e87a4064872d500636219f07 --- /dev/null +++ b/docs/en/server/development/distributed/overview.md @@ -0,0 +1,13 @@ +# Distributed Middleware User Guide + +This document describes how to use DSoftBus on openEuler for for multi-device communication and introduces the DSoftBus-based distributed file system. + +You can learn about the native discovery and connection mode between openEuler edge servers, embedded devices, and OpenHarmony devices, as well as related extension applications. + +Users must: + +- Know basic Linux operations. + +- Understand the application development and test processes of OpenHarmony and openEuler. + +- Be familiar with the background knowledge of IPC and PRC, as well as data synchronization in distributed architectures. diff --git a/docs/en/server/development/driver_development_specifications/_toc.yaml b/docs/en/server/development/driver_development_specifications/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e456b3e4c40df81bb91b4a28629fcf151264e539 --- /dev/null +++ b/docs/en/server/development/driver_development_specifications/_toc.yaml @@ -0,0 +1,6 @@ +label: openEuler Driver Development Specifications +isManual: true +description: openEuler driver development specifications +sections: + - label: openEuler Driver Development Specifications + href: ./openeuler_driver_development_specifications.md diff --git a/docs/en/server/development/driver_development_specifications/openEuler_driver_development_specifications.md b/docs/en/server/development/driver_development_specifications/openEuler_driver_development_specifications.md new file mode 100644 index 0000000000000000000000000000000000000000..6e860cd0f922d7e15dd4b2a07c0ce23490262eed --- /dev/null +++ b/docs/en/server/development/driver_development_specifications/openEuler_driver_development_specifications.md @@ -0,0 +1,42 @@ +# openEuler Driver Development Specifications + +## Purpose + +The openEuler driver development specifications are formulated to standardize and unify the submission process and mode of developed openEuler drivers and enable drivers on openEuler. + +## Application Scope + +The openEuler driver development specifications apply to the development of openEuler and all released versions. + +## Basic Requirements for Drivers + +Objectives of openEuler: + +- Becomes a platform that accelerates technological innovation, maturity, and application. +- Maintains the secure, stable, and reliable kernel with optimal performance boosted by an extensive ecosystem, facilitating quick application in the industry. + +Drivers that meet the preceding principles can be submitted to openEuler. + +### Contributor License Agreement (CLA) + +Contributors must sign the [CLA](https://www.openeuler.org/en/community/contribution/) before contributing to the openEuler community. + +>**Note**: It takes about one week for the CLA to take effect after it is signed. + +### Driver Requirements + +The driver must meet the following requirements: + +1. Have a unique name in the system. +2. Pass the Kernel Application Binary Interface (kABI) check of the openEuler community. +3. Provide correct driver version information. +4. Provide a description of driver module parameters. +5. Provide required auxiliary tools. +6. Declare the license information. +7. It is recommended that the coupling mode between the driver and the OS release be added. For example, directly check the **/etc/openEuler-release** file or other technical roadmaps, and do not couple the driver with the specific release information. +8. Provide the driver installation guide in the community repository. + +## Reference + +- [Kernel SIG | openEuler Kernel Patch Incorporation Specifications](https://mp.weixin.qq.com/s/rSH79v7btJfsdivC2mki1w) +- [How to Participate in openEuler Kernel Development](https://mp.weixin.qq.com/s/a42a5VfayFeJgWitqbI8Qw) diff --git a/docs/en/server/development/fangtian/_toc.yaml b/docs/en/server/development/fangtian/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c9a98a7be2f655f89c736ba9d62717a3e73a9051 --- /dev/null +++ b/docs/en/server/development/fangtian/_toc.yaml @@ -0,0 +1,10 @@ +label: FangTian Window Engine +isManual: true +description: Installation and development guide for the FangTian Window Engine +sections: + - label: FangTian Window Engine User Guide + href: ./overview.md + - label: FangTian Environment Configuration + href: ./fangtian_environment_configuration.md + - label: FangTian for Wayland and OpenHarmony Applications + href: ./fangtian_for_linux_waylan_and_openharmony_applications.md \ No newline at end of file diff --git a/docs/en/server/development/fangtian/fangtian_environment_configuration.md b/docs/en/server/development/fangtian/fangtian_environment_configuration.md new file mode 100644 index 0000000000000000000000000000000000000000..2e6b17a6e9a443100e3e92cfbbf67b48937dd3ad --- /dev/null +++ b/docs/en/server/development/fangtian/fangtian_environment_configuration.md @@ -0,0 +1,85 @@ +# FangTian Installation and Deployment + +This chapter describes how to install FangTian in openEuler. + +## Software and Hardware Requirements + +### Hardware Requirements + +Currently, only the x86 and AArch64 architectures are supported. + +### Software Requirements + +OS: openEuler 22.03 LTS SP4 + +### Environment Setup + +Install the openEuler OS. For details, see the *[openEuler Installation Guide](../../installation_upgrade/installation/installation_guide.md)*. + +### Installing the FangTian Software Package + + On the x86 platform: + + ```shell + sudo dnf install ft_multimedia ft_mmi ft_flutter ft_engine arkui-linux ft_utils + sudo dnf install ft_multimedia-devel ft_mmi-devel ft_flutter-devel ft_engine-devel + ``` + + On the AArch64 platform: + + ```shell + sudo dnf install ft_multimedia ft_mmi ft_flutter ft_engine ft_utils + sudo dnf install ft_multimedia-devel ft_mmi-devel ft_flutter-devel ft_engine-devel + ``` + +## Starting FangTian + +- Start the SAMGR system service. + + Assume that binder and ashmem have been installed. + + ```shell + sudo /usr/share/sa/pre_oneshot_samgr + ``` + + Directly start SAMGR. + + ```shell + mkdir -p ~/tmp + sudo samgr > ~/tmp/samgr.log 2>&1 & + ``` + + Alternatively, set SAMGR as a service and start the service. + + ```shell + sudo systemctl restart samgr + ``` + +- Start the SA engine. + + ```shell + sa_main /system/profile/ft/ft.xml > ~/tmp/ftsa.log 2>&1 & + ``` + + > Description + > + > - SA stands for system ability. A process can have multiple SAs. The **ft.xml** file specifies multiple SAs for the ft process. For details about SAMGR and SAs, see the OpenHarmony documentation. + > - The SA configuration XML file, **sa_main**, and SAMGR are automatically deployed during software package installation. + +## Developing and Running a Simple GUI Application Using FangTian + +[Example](https://gitee.com/openeuler/ft_engine/blob/master/samples/) of a simple C++ GUI application. + +Run the application: + +```shell +desktop & +``` + +The following window is displayed: + +![](./figures/desktop_simple_apps.png) + +> **Description** + > + > For details about FangTian application development, see [FT interfaces](https://gitee.com/openeuler/ft_engine/wikis/1.0-alpha%E6%8E%A5%E5%8F%A3/1.0-alpha%20Interface%20Overview). diff --git a/docs/en/server/development/fangtian/fangtian_for_linux_waylan_and_openharmony_applications.md b/docs/en/server/development/fangtian/fangtian_for_linux_waylan_and_openharmony_applications.md new file mode 100644 index 0000000000000000000000000000000000000000..7b98f5aef702c640f388d63377ac525ae8ad66fb --- /dev/null +++ b/docs/en/server/development/fangtian/fangtian_for_linux_waylan_and_openharmony_applications.md @@ -0,0 +1,75 @@ +# FangTian for Linux Wayland and OpenHarmony Applications + +The FangTian window engine integrates multiple application ecosystems, allowing Linux and OpenHarmony applications to run on openEuler simultaneously. + +## Wayland Application Support + +### Wayland Protocols + +To support native Linux applications, FangTian is compatible with Wayland applications. Due to the complexity of Wayland protocols, currently, FangTian supports core, stable, and unstable protocols. + +### Application Running + +1. After [starting the FangTian engine](./fangtian_environment_configuration.md#starting-fangtian), start the SA of the Wayland adapter. + + ```shell + mkdir -p ~/tmp + sa_main /system/profile/ft/ft_wl.xml > ~/tmp/ftwlsa.log 2>&1 & + ``` + +2. Configure the Wayland environment. + + ```shell + export XDG_SESSION_TYPE=wayland + export WAYLAND_DISPLAY="wayland-0" + export QT_QPA_PLATFORMTHEME=ukui + ``` + +3. Download and install Linux Wayland applications. + + ```shell + sudo dnf install kylin-calculator deepin-terminal + ``` + +4. The following applications are installed: + +![](./figures/wayland_apps.png) + +## OpenHarmony Application Support + +### ArkUI Framework + +Currently, FangTian supports some ArkUI controls, such as texts, buttons, and images. Developers can develop Harmony applications using [DevEco Studio](https://developer.harmonyos.com/en/develop/deveco-studio/). + +### Application Source Code + +- [Electronic Album](https://gitee.com/openharmony/codelabs/tree/master/ETSUI/ElectronicAlbum) +- [Simple Calculator](https://gitee.com/openharmony/codelabs/tree/master/ETSUI/SimpleCalculator) + +### Installation and Running + +1. Copy the **.hap** file of the application from DevEco Studio to an openEuler directory, for example, **~/apps/tmp**. + +2. Decompress the **.hap** file, for example, **eletronicAlbum.hap**. + + ```shell + unzip eletronicAlbum.hap + ``` + + After the decompression, the application is in **~/apps/tmp/eletronicAlbum**. + +3. After [starting the FangTian engine](./fangtian_environment_configuration.md#starting-fangtian), run the application. + + ```shell + hap_executor ~/apps/tmp/eletronicAlbum + ``` + +4. The following window is displayed: + +![](./figures/arkui_ele.png) + +### Constraints + +- Currently, ArkUI controls are not fully supported. Web and video controls are unavailable. You need to develop and port the NAPI interfaces. + +- ArkUI supports only the x86 architecture in this version. diff --git a/docs/en/server/development/fangtian/figures/arkui_ele.png b/docs/en/server/development/fangtian/figures/arkui_ele.png new file mode 100644 index 0000000000000000000000000000000000000000..d2c8010cddaa99a852c072f7852f51e48c9b9675 Binary files /dev/null and b/docs/en/server/development/fangtian/figures/arkui_ele.png differ diff --git a/docs/en/server/development/fangtian/figures/desktop_simple_apps.png b/docs/en/server/development/fangtian/figures/desktop_simple_apps.png new file mode 100644 index 0000000000000000000000000000000000000000..cf625a544183dafb9747ececc544722dd1e42f87 Binary files /dev/null and b/docs/en/server/development/fangtian/figures/desktop_simple_apps.png differ diff --git a/docs/en/server/development/fangtian/figures/wayland_apps.png b/docs/en/server/development/fangtian/figures/wayland_apps.png new file mode 100644 index 0000000000000000000000000000000000000000..bb62dd4f352625b273b22b8681a9de34123eb0ca Binary files /dev/null and b/docs/en/server/development/fangtian/figures/wayland_apps.png differ diff --git a/docs/en/server/development/fangtian/overview.md b/docs/en/server/development/fangtian/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..f99b1d38b01242f596e574ca65e558de0125e10d --- /dev/null +++ b/docs/en/server/development/fangtian/overview.md @@ -0,0 +1,8 @@ +# FangTian Window Engine User Guide + +This document describes how to install and develop the FangTian window engine in openEuler. + +This article is intended for community developers, open source enthusiasts, and partners who use the openEuler OS and want to learn and use FangTian. Users must: + +* Know basic Linux operations. +* Understand Linux GUI development and ArkUI development. diff --git a/docs/en/server/development/gcc/_toc.yaml b/docs/en/server/development/gcc/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5234d2ff01b54f201161c83f3f50d35bc1158489 --- /dev/null +++ b/docs/en/server/development/gcc/_toc.yaml @@ -0,0 +1,14 @@ +label: GCC User Guide +isManual: true +description: >- + GCC for openEuler builds upon the open source GCC, with a primary focus on + optimizing C, C++, and Fortran languages +sections: + - label: GCC Basic Performance Optimization User Guide + href: ./gcc_basic_performance_optimization_user_guide.md + - label: GCC Toolset User Guide + href: ./gcc_toolset_user_guide.md + - label: GCC User Guide + href: ./gcc_user_guide.md + - label: Kernel FDO User Guide + href: ./kernel_fdo_user_guide.md diff --git a/docs/en/server/development/gcc/figures/p1.png b/docs/en/server/development/gcc/figures/p1.png new file mode 100644 index 0000000000000000000000000000000000000000..9158ad7ae0b9d7994733a53a215eae721439abcf Binary files /dev/null and b/docs/en/server/development/gcc/figures/p1.png differ diff --git a/docs/en/server/development/gcc/figures/p2.png b/docs/en/server/development/gcc/figures/p2.png new file mode 100644 index 0000000000000000000000000000000000000000..4007354f8a9a7c8a80e72d2e11b8f992ecf1abb4 Binary files /dev/null and b/docs/en/server/development/gcc/figures/p2.png differ diff --git a/docs/en/server/development/gcc/figures/p3.png b/docs/en/server/development/gcc/figures/p3.png new file mode 100644 index 0000000000000000000000000000000000000000..1eeda0e3f0ce064ae15437d4627b27c62023d34b Binary files /dev/null and b/docs/en/server/development/gcc/figures/p3.png differ diff --git a/docs/en/server/development/gcc/figures/p4.png b/docs/en/server/development/gcc/figures/p4.png new file mode 100644 index 0000000000000000000000000000000000000000..b7960fd8604e8ee027adde5ac678b79baf86b076 Binary files /dev/null and b/docs/en/server/development/gcc/figures/p4.png differ diff --git a/docs/en/server/development/gcc/gcc_basic_performance_optimization_user_guide.md b/docs/en/server/development/gcc/gcc_basic_performance_optimization_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..76e0ab96d2f68f01a3d3408d0c2e9f692e91b860 --- /dev/null +++ b/docs/en/server/development/gcc/gcc_basic_performance_optimization_user_guide.md @@ -0,0 +1,173 @@ +# GCC Base Performance Optimization Guide + +## Overview + +The optimization of compiler base performance is crucial to improving the development efficiency, running performance, and maintainability of applications. It is an important research direction in computer science and one of the key steps in the process of software development. Based on the general compilation optimization capability, GCC for openEuler enhances mid- and back-end performance optimization technologies, including instruction optimization, vectorization enhancement, prefetch enhancement, and data flow analysis enhancement. + +## Installation and Deployment + +### Software Requirements + +OS: openEuler 22.03 LTS SP4 + +### Hardware Requirements + +AArch64 architecture + +### Software Installation + +Install GCC and related components as required. For example, install GCC: + +```shell +yum install gcc +``` + +## Usage + +### CRC Optimization + +#### Description + +Cyclic redundancy check (CRC) code is identified to generate efficient hardware instructions. + +#### Usage + +Add the `-floop-crc` option during compilation. + +Note: `-floop-crc` must be used together with `-O3 -march=armv8.1-a`. + +### IF-conversion Enhancement + +#### Description + +IF-conversion is enhanced to use more registers to reduce conflicts. + +#### Usage + +This enhancement is part of the IF-conversion optimization of the Register Transfer Language (RTL). Enable the enhancement by using the following options. + +`-fifcvt-allow-complicated-cmps` + +`-param=ifcvt-allow-register-renaming=[0,1,2]` The default value is 0. The number is used to control the optimization scope. + +Note: This enhancement requires the `-O2` optimization level and must be used together with `--param=max-rtl-if-conversion-unpredictable-cost=48` and `--param=max-rtl-if-conversion-predictable-cost=48`. + +### Multiplication Optimization + +#### Description + +Arm instructions are combined to convert low-order multiplications into high-order multiplication instructions. + +#### Usage + +Use the `-fuaddsub-overflow-match-all` and `-fif-conversion-gimple` options. + +Note: This optimization requires the `-O3` or higher optimization level and must be used together with `-ftree-fold-phiopt option`. + +### CMLT Instruction Generation + +#### Description + +CMLT instructions are generated for some elementary arithmetic operations to reduce the number of instructions. + +#### Usage + +Use the `-mcmlt-arith` option. + +Note: This optimization requires the `-O3` or higher optimization level. + +### Vectorization Enhancement + +#### Description + +Redundant instructions generated during vectorization are identified and simplified, and shorter arrays can be vectorized. + +#### Usage + +Use `--param=tree-forwprop-perm=1` and `--param=vect-alias-flexible-segment-len=1`. The default values are 0. + +Note: This optimization requires the `-O3` or higher optimization level. + +### maxmin and UZP1/UZP2 Instruction Optimization + +#### Description + +The maxmin and UZP1/UZP2 instructions are optimized to reduce the total instructions and improve performance. + +#### Usage + +Use the `-fconvert-minmax` option. UZP1/UZP2 instruction optimization is enabled by default at a level higher than `-O3`. + +Note: This optimization requires the `-O3` or higher optimization level. + +### LDP and STP Optimization + +#### Description + +Each LDP and STP instruction with poor performance is split into two LDR and STR instructions. + +#### Usage + +Use the `-fsplit-ldp-stp` option. Use `--param=param-ldp-dependency-search-range= [1,32]` to control the search range. The default value is 16. + +Note: This optimization requires the `-O1` or higher optimization level. + +### AES Instruction Optimization + +#### Description + +The AES algorithm code is identified to accelerate instructions using hardware. + +#### Usage + +Use the `-fcrypto-accel-aes` option. + +Note: This optimization requires the `-O3` or higher optimization level. + +### Indirect Call Optimization + +#### Description + +Indirect calls in programs are identified and analyzed to convert them into direct calls. + +#### Usage + +Use the `-ficp -ficp-speculatively` option. + +Note: This optimization must be used together with `-O2 -flto -flto-partition=one`. + +### IPA-prefetch + +#### Description + +Indirect memory accesses in a loop are identified to insert a prefetch instruction, thereby reducing the delay of indirect memory accesses. + +#### Usage + +Use the `-fipa-prefetch -fipa-ic` option. + +Note: This optimization must be used together with `-O3 -flto`. + +### LLC-prefetch + +#### Description + +GCC for openEuler analyzes main execution paths in programs, performs memory multiplexing analysis on loops on the primary path, calculates and sorts top hot data, and inserts prefetch instructions to pre-allocate data to LLCs, reducing LLC misses. + +#### Usage + +Use the `-fllc-allocate` option. The `-O2` or higher optimization level is required. + +Other related interfaces: + +| Option | Default Value | Description | +| ---- | ---- | ---- | +| -param=mem-access-ratio=[0,100] | 20 | Ratio of the number of memory accesses in a loop to the number of instructions.| +| -param=mem-access-num=unsigned | 3 | Number of memory accesses in a loop. | +| -param=outer-loop-nums=[1,10] | 1 | Maximum number of outer loop layers that can be unrolled. | +| -param=filter-kernels=[0,1] | 1 | Whether to perform path series filtering on loops. | +| -param=branch-prob-threshold=[50,100] | 80 | Probability threshold for a branch to be considered highly probable. | +| -param=prefetch-offset=[1,999999] | 1024 | Prefetch offset distance. Generally, the value is a power of 2.| +| -param=issue-topn=unsigned | 1 | Number of prefetch instructions.| +| -param=force-issue=[0,1] | 0 | Whether to perform forcible prefetch, that is, the static mode.| +| -param=llc-capacity-per-core=[0,999999] | 114 | Average LLC capacity allocated to each core in multi-branch prefetch mode. | diff --git a/docs/en/server/development/gcc/gcc_toolset_user_guide.md b/docs/en/server/development/gcc/gcc_toolset_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..70fbc8e79eb7ec5284524bac3a4bdda45b70fe31 --- /dev/null +++ b/docs/en/server/development/gcc/gcc_toolset_user_guide.md @@ -0,0 +1,48 @@ +# GCC Toolset User Guide + +## Overview + +To ensure the stability of the OS, the latest version of base software is not selected generally. Instead, a relatively stable version is used. openEuler 22.03 LTS uses GCC 10.3.1 as the baseline for development. For GCC 10.3.1, Fortran supports only some OpenMP 4.5 specifications, while C/C++ supports a few OpenMP 5.0 specifications. To support all OpenMP 4.5 specifications with Fortran, the GCC toolset is designed. For applications that require the OpenMP 4.5 specifications not supported by GCC 10.3.1, GCC Toolset 12 can be used to compile and build. + +## Installation and Deployment + +### Software Requirements + +OS: openEuler 22.03 LTS SP4 + +### Hardware Requirements + +AArch64 architecture + +### Software Installation + +To prevent conflicts between installation dependencies of GCC Toolset 12 and the default GCC, the software package of GCC Toolset 12 is prefixed with **gcc-toolset-12-**, followed by the name of the original GCC software package. + +Install the default compiler GCC 10.3.1 in `/usr/`. + +```shell +yum install -y gcc gcc-c++ gcc-gfortran +``` + +Install GCC Toolset 12 in `/opt/openEuler/gcc-toolset-12/root/usr/`. + +```shell +yum install -y gcc-toolset-12-gcc* +``` + +## How to Use + +Because GCC Toolset 12 is installed in `/opt/openEuler/gcc-toolset-12/root/usr/`, run the following commands to use the software: + +```shell +export PATH=/opt/openEuler/gcc-toolset-12/root/usr/bin/:$PATH +export LD_LIBRARY_PATH=/opt/openEuler/gcc-toolset-12/root/usr/lib64/:$LD_LIBRARY_PATH +``` + +**Note: GCC Toolset 12 is used only to support the OpenMP 4.5 specifications not supported by GCC 10.3.1. For other features, the default compiler GCC 10.3.1 is recommended to prevent unknown compilation errors.** + +## Compatibility + +This section describes the compatibility issues in some special scenarios. This project is in continuous iteration and issues will be fixed as soon as possible. Developers are welcome to join this project. + +* Currently, the GCC toolset solution applies only to the scenario requiring OpenMP 4.5 specifications. diff --git a/docs/en/server/development/gcc/gcc_user_guide.md b/docs/en/server/development/gcc/gcc_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..74ee4fb27f086814931e0e7a5c6a38c5797b161c --- /dev/null +++ b/docs/en/server/development/gcc/gcc_user_guide.md @@ -0,0 +1,930 @@ +# 1 CFGO + +## 1.1 Feature Description + +- Concept: Continuous feature-guided optimization (CFGO) is a feature that continuously optimizes multimodal files (source code and binaries) and full lifecycle (covering compilation, linking, post-linking, runtimes, OSs, and libraries) of programs. +- Core idea: Assuming that the program functions remain unchanged, runtime profiling data is used to guide optimizations, resulting in a more refined program with better performance. +- Major optimizations include: + - Code layout optimization: The binary layout of the target program is optimized by using techniques such as basic block reordering, function rearrangement, and hot/cold splitting to improve the I-cache and I-TLB hits. + - Advanced compiler optimization: Optimization techniques such as inlining, loop unrolling, vectorization, and indirect calling enable the compiler to make more informed decisions on optimization. + +## 1.2 BOLTUSE + +### 1.2.1 Option Description + +#### Option `-fbolt-use` + +This option uses Binary Optimization and Layout Tool (BOLT) for profiling to complete post-linking optimization. Prepare the profiling file required for BOLT optimization in advance. You can obtain the profiling file either by using the AutoBOLT mode or by collecting data with `perf` and then converting it to a BOLT-compatible format with `perf2bolt`. + +### 1.2.2 Common Application Enabling Methods + +1. MySQL + + ```bash + cmake .. -DCMAKE_INSTALL_PREFIX=/home/install/mysql-8.0.25 -DBUILD_CONFIG=mysql_release -DWITH_BOOST=../boost -DCMAKE_C_FLAGS="-Wl,-q" -DCMAKE_CXX_FLAGS="-Wl,-q" -DCMAKE_C_LINK_FLAGS="-Wl,-q" -DCMAKE_CXX_LINK_FLAGS="-Wl,-q -fbolt-use=/path/to/mysqld.profile -fbolt-target=mysqld" -DCMAKE_EXE_LINKER_FLAGS="-Wl,-q" + ``` + +2. MongoDB + + ```bash + # Build a baseline version with relocation information. + python3 buildscripts/scons.py MONGO_VERSION=6.1.0 DESTDIR=/usr/local/mongo install-all-meta CFLAGS="-march=armv8-a+crc -mtune=generic -Wl,-q" CXXFLAGS="-march=armv8-a+crc -mtune=generic -Wl,-q" LINKFLAGS="-Wl,-q" -j 128 --disable-warnings-as-errors + # Use perf and perf2bolt to generate a BOLT-compatible profiling file. + # Use BOLTUSE to build an optimized version. Note that if the LLVM-BOLT version does not support PIEs, you need to manually delete the pie option from SConstruct. + python3 buildscripts/scons.py MONGO_VERSION=6.1.0 DESTDIR=/usr/local/mongo install-devcore CFLAGS="-march=armv8-a+crc -mtune=generic -Wl,-q" CXXFLAGS="-march=armv8-a+crc -mtune=generic -Wl,-q" LINKFLAGS="-Wl,-q -fbolt-use=./mongod.profile -fbolt-target=mongod" -j 128 --disable-warnings-as-errors + ``` + +3. Redis + + ```bash + make CFLAGS="-Wl,-q" LDFLAGS="-fbolt-use=/path/to/redis.profile -fbolt-target=redis-server" + ``` + + **Note:** + + - By default, the profiling file named **data.fdata** in the current path is used for optimization. You can use `-fbolt-use=FILE` to specify the profiling file to be used, for example, `-fbolt-use=/tmp/a.fdata`. + - It can be used together with `-fbolt-target` and `-fbolt-option=`. + +## 1.3 AutoBOLT + +### 1.3.1 Option Description + +In the instrumentation feedback-directed optimization scenario, two compilations are required. The first compilation is performed with compilation option `-fprofile-generate[=path]`. After a series of typical scenario tests, the profiling data is generated. The second compilation is performed with compilation option `-fprofile-use[=path]`, during which AutoBOLT converts the instrumentation data to a BOLT-compatible profiling file and automatically enables post-link optimization. + +#### Application Scenarios + +Scenarios that are insensitive to performance loss in the instrumentation phase, or those insensitive to the build and test time but pursue ultimate performance. + +#### How to Use + +```bash +# Perform instrumentation to generate gcno. +gcc -O3 -fprofile-generate[=path] -fprofile-update=atomic -o test test.c +# Perform tests to obtain gcda./test. +# Use the generated gcda to build a new executable file. +gcc -O3 -fprofile-use[=path] -fprofile-correction -Wno-error=coverage-mismatch -Wno-error=missing-profile -fauto-bolt -fbolt-target=test_pgoed -o test_pgoed test.c +``` + +### 1.3.2 Automatic (Sampling) Feedback-Directed Optimization + +Different from instrumentation feedback-directed optimization, automatic feedback-directed optimization (AutoFDO) uses `perf` to collect program runtime information, `create_gcov` to resolve the sampling information from `perf` to the profiling data required by the compiler, and `-fauto-profile` to read the profiling data to complete optimization. The `-fprofile-correction` option is used to enable the MCF algorithm to smooth the basic block count imbalance caused by sampling. + +#### Application Scenarios + +Scenarios where versions are frequently released and the entire system needs to be deployed in the production environment. + +#### How to Use + +```bash +# Compile an executable file with debugging information. +gcc -O3 -g -o test_prof test.c +# Use perf to collect profiling data. +perf record -e br_retired -- ./test_prof +# Use create_gcov to resolve perf.data to a gcov file. +create_gcov --binary=./test_prof --profile=perf.data --gcov=test.gcov -gcov_version=2 +# Use gcov to compile profiling data to generate a new executable file. +gcc -O3 -fauto-profile=test.gcov test.c -o test_autofdo +``` + +#### Additional Information + +1. By default, the converted profiling file is saved in the current path. You can use `-fauto-bolt=PATH` to specify the path for saving the BOLT-compatible profiling file, for example, `-fauto-bolt=/tmp`. +2. In instrumentation feedback-directed optimization, the gcov-tool tool can be used to combine instrumentation feedback-directed optimization files to generate a high-performance kernel that improves performance in multiple scenarios. +3. When `-fprofile-generate[=path]` is used in instrumentation feedback-directed optimization for multi-thread applications, `-fprofile-update=atomic` can be added to generate more accurate data. +4. In scenarios where instrumentation feedback-directed optimization is used to optimize applications, `-fprofile-correction` can be used to automatically correct some profiling data, and `-Wno-error=coverage-mismatch -Wno-error=missing-profile` can be used to mask errors reported when the profiling file cannot be matched or does not exist. + +#### Typical Application Enabling Methods + +1. Applications built using CMake, such as MySQL and RocksDB + + ```bash + # Build a baseline version with relocation information. + cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DBUILD_CONFIG=mysql_release -DWITH_BOOST=../boost -DCMAKE_C_FLAGS="-Wl,-q" -DCMAKE_CXX_FLAGS="-Wl,-q" -DCMAKE_C_LINK_FLAGS="-Wl,-q" -DCMAKE_CXX_LINK_FLAGS="-Wl,-q" -DCMAKE_EXE_LINKER_FLAGS="-Wl,-q" + # Use AutoBOLT to build an optimized version. + ``` + +2. Applications built using Make, such as Redis and Memcached + + ```bash + # Build a baseline version with relocation information. + make CFLAGS="-Wl,-q" CXXFLAGS="-Wl,-q" + # Build an optimized version. + make CFLAGS="-fprofile-use=./profile -fauto-bolt -fbolt-target=redis-server -Wl,-q -Wno-missing-profile" LDFLAGS="-Wl,-q" + ``` + +#### Performance Boosts for Typical Applications + +| MySQL | openGauss | Nginx | Ceph | Redis | kernel | +| ----- | --------- | ----- | ---- | ----- | ------ | +| +15% | +5% | +15% | +7% | +5% | +5% | + +#### FAQs + +1. When `-fauto-bolt` and `-fbolt-target` are used, message "The linker\[2] is not for exec, just skip." displayed. In versions earlier than openEuler 22.03 LTS SP3, GCC does not support PIE or SO optimization. You can use openEuler 22.03 LTS SP4 or later. + +#### Common Options for AutoBOLT and BOLTUSE + +- -`fbolt-target=NAME` specifies the BOLT optimization object. If this option is used, the binaries and dynamic libraries except that specified by `NAME` will not be optimized. To use this option, `NAME` must be specified. +- -`fbolt-option=PARAM` specifies the BOLT optimization option. Different options must be separated by commas (,). For example, `-fbolt-option="-reorder-blocks=cache+,-reorder-functions=hfsort+"`. To use this option, `PARAM` must be specified. You can use `llvm-bolt --help` to query details about the optimization option. + +## 1.4 Profile-Guided Optimization (PGO) + +### Feature Description + +PGO enhances program performance by leveraging runtime information (profiling files) gathered through instrumentation. The compiler utilizes these profiling files to make more informed optimization decisions during the compilation process, resulting in a more optimized executable file. + +PGO primarily encompasses two optimization methods: + +1. Edge profiling: Counters are inserted along the edges of the control flow graph (CFG) of the function to collect program execution count information. +2. Value profiling: This optimization inserts code during instrumentation to gather statistics on frequently occurring values of expressions and variables, providing the compiler with insights for better optimization decisions. After program execution, the generated profiling file is read back by the compiler to guide corresponding optimization passes. GCC currently supports various value profile counting functionalities, including frequently used variable values, identification of powers of two, common indirect call addresses, and function first run IDs. + +### 1.4.1 Compilation Options + +#### `-fprofile-generate[=path]` + +This option enables both `-fprofile-arcs` and `-fprofile-values`. `-fprofile-generate` optionally accepts a `path` argument, specifying the directory for storing profiling feedback data files. This function is equivalent to `-fprofile-dir`. + +#### `-fprofile-correction` + +This option employs heuristics for error correction or smoothing to mitigate inconsistencies in the profiling feedback data. + +#### `-Wno-coverage-mismatch` + +By default, profile mismatches with the source code are treated as errors. This option downgrades such errors to warnings, recommended only for situations with minimal code changes, particularly in cold code paths. + +#### `-fprofile-use[=path]` + +This option instructs the compiler to use profiling files stored at the specified `path` for optimization guidance. + +### 1.4.2 Kernel Feedback Optimization + +#### Background + +As most servers today are dedicated to running a single or a limited set of applications, optimizing the OS based on the execution profile of these specific programs can yield significant performance gains. + +#### Example + +1. Download the kernel source code. + + ```bash + yum install -y kernel-source + ``` + +2. Compile the instrumented kernel. + + Go to the kernel source directory and configure the kernel options. This example uses kernel 5.10. + + ```bash + cd /usr/src/linux-5.10.0*** + make openeuler_defconfig + make menuconfig + ``` + + Within the menu: + - Go to **General setup** > **Local Version-append to kernel release**, and provide a suitable suffix (such as **-test-going**). + - Press **Esc** twice to return to the main menu. + - Go to **General architecture-dependent options** > **GCOV-based kernel profiling**. + - Press **Esc** twice to return to the main menu. + - Go to **Kernel hacking** > **Compile-time checks and compiler options profiling** and disable **Compile the kernel with debug info**. + - Save and exit. + +3. Build the RPM package (replace 96 with the maximum core count). + + ```bash + make binrpm-pkg -j 96 + ``` + +4. Deploy the instrumented kernel. + + Install the instrumented kernel on the server, set it as the default, and reboot. + + ```bash + rpm -ivh kernel*** --forcegrub2-set-default 0 reboot + ``` + +5. Execute target application workload for profiling. This example uses the wrk testing suite of Nginx. + + Start the Nginx server. + + ```bash + nginx -c nginx.conf + ``` + + Run the Nginx wrk test suite on the client. + + ```bash + wrk -c 2000 -d 60s -t 20 --latency --timeout 5s -H "Connection: close" http://192.168.1.10:10000/index.html + ``` + +6. Execute the profile collection script to write the profiling information from memory to the drive. + +7. (Optional) To optimize the kernel for multiple applications, you can merge multiple application profiling files. Here is an example with applications A and B: + + ```bash + gcov-tool merge a/gcovdata b/gcovdata + ``` + +8. Compile the optimized kernel. Go to the kernel source directory and configure the kernel options. + + ```bash + make openeuler_defconfig + make menuconfig + ``` + + Within the menu: + - Go to **General setup** > **Local version-append to kernel release** and provide a suitable suffix (such as **-test-pgoed**). + - Press **Esc** to return to the main menu. + - Disable **Compile the kernel with debug info**. + - Save and exit. + +9. Build the RPM package (replace 96 with the maximum core count). + + ```bash + make binrpm-pkg -j 96 KCFLAGS="-fprofile-use -fprofile-correction -Wno-error=coverage-mismatch -Wno-error=missing-profile -fprofile-dir=gcovdata" + ``` + + **Note:** + + The `-fprofile-dir` parameter should point to the absolute path of the **gcovdata** directory generated in step 6. + +#### Common Issues + +- Profiling files are not generated correctly. + + - Possible cause 1: The program does not have sufficient permissions to write in the directory specified by `-fprofile-generate` for profile generation. Run `chmod 777 [absolute path to the directory]` to grant permissions. + - Possible cause 2: The program did not exit normally. The `__gcov_exit()` function is responsible for flushing profile information upon application exit. You can attach to the application using GDB and manually call `__gcov_exit()` to resolve this. + +## 1.5 Link-Time Optimization (LTO) + +### 1.5.1 Introduction + +**Background** + +Traditional compilation processes, like those using GCC, compile and optimize individual source files (compilation units) into object files (.o) containing assembly code. The linker then resolves symbols and relocates code from these object files to create an executable file. However, while the linker has access to cross-file function call information, it operates on assembly code, limiting its ability to perform optimizations. This traditional framework, while efficient for incremental compilation, misses optimization opportunities that span multiple files. + +**LTO process** + +LTO aims to overcome these limitations by enabling optimization across compilation units at link time. To achieve this, LTO preserves intermediate representation (IR) information needed for optimization. During linking, the linker invokes an LTO plugin which performs program-wide analysis, resulting in more effective optimization decisions. The optimized IR is then transformed back into object files containing assembly code, and finally, the linker performs the usual linking process. + +**Partitioning and parallelism** + +LTO often requires longer compilation times due to the need to analyze the global call graph. To speed up LTO compilation, partitioning is introduced. In partitioned mode, the global call graph is divided into partitions based on module dependencies. Each partition is optimized independently and in parallel, striking a balance between compilation time and optimization effectiveness. + +### 1.5.2 Usage + +#### `-flto=` + +Enable LTO by adding this option to the compilation command. The number of parallel LTO jobs can be specified using `-flto=n`. Using `-flto=auto` automatically determines the appropriate number of jobs based on the environment (such as GNU Make configuration or available CPU cores). + +#### `-ffat-lto-objects` + +This option generates object files containing both assembly code and LTO information. When `-ffat-lto-objects` is enabled, `-fno-lto` can be used to perform regular linking using the assembly code of the object file, bypassing LTO. + +#### `-flto-partion=1to1|balanced|max|one|none` + +This option controls the partitioning strategy used to speed up compilation: + +- `1to1`: corresponds each source file to a partition. +- `balanced`: makes partitions roughly equal in size. +- `max`: creates a partition for each symbol. +- `one`: attempts to create a single partition. +- `none`: disables partitioning. + +#### `-flto-compresson-level=n` + +This option controls the compression level of the IR information stored in the object files. + +**Example** + +```bash +# four.cint four() { return 4;} +# five.cint five() { return 5;} +# test.cextern int four();extern int five();int main() { return four() + five();} +gcc -O2 -flto test.c four.c five.c +# Or +gcc -O2 -flto -c test.cgcc -O2 -flto -c four.cgcc -O2 -flto -c five.cgcc test.o four.o five.o +``` + +**Explanation** + +In this example, LTO enables the compiler to perform inlining and constant folding across files. The expression `four() + five()` is optimized to the immediate value 9, eliminating the function calls and calculation overhead. This optimization would not be possible without LTO. Note that if only **four.c** and **test.c** are compiled with LTO, the optimization would be limited to those files, resulting in `4 + five()`. + +### 1.5.3 Common Issues + +- `plugin needed to handle lto object` + + This error occurs when the linker or related tools lack the necessary LTO plugin to process LTO object files. It commonly arises when using tools like `ar`, `ranlib`, or `nm` without LTO support. Switching to their GCC counterparts (`gcc-ar`, `gcc-ranlib`, `gcc-nm`) usually resolves the issue. + +- `undefined symbol` + + This issue can have multiple causes, for example: + + - Symbol versioning: GCC does not support symbol versioning using `__asm__`. Use `__attribute__((.symver))` instead. + + - Incompatible tools: Tools like `objcopy` may not fully support LTO object files. This can lead to issues with symbol renaming and result in undefined symbol errors. + + - Link-time instrumentation: Using `-Wl,--wrap=foo` with LTO might lead to an undefined symbol error for `__wrap_foo`. This is a known issue being addressed upstream. + +- `multi-defined symbol` + + This issue is often caused by tools like `objcopy` that lack full LTO support. Symbols intended to be hidden might not be properly handled, leading to multiple definitions. + +## 1.6 Static Compilation Options + +### 1.6.1 `-fipa-struct-reorg` + +The `-fipa-struct-reorg` option enables structure reorganization optimizations to improve cache hit rate by re-arranging the layout of structure members in memory. + +- Structure splitting: splits a structure into separate structures based on the access frequency (hot and cold) of its members. + + **Figure 1** Structure splitting optimization + + ![Structure splitting optimization](./figures/p1.png) + + **Example:** + + Original structure: + + ```c + struct S + { + type1 field1; + // Hot field + type2 field2; + };S *v; + ``` + + Transformed structure: + + ```c + struct S_hot + { + type1 field1; + }; + struct S_cold + { + type2 field2; + }; + S_hot *v_hot; + S_cold *v_cold; + ``` + +- Structure array optimization: transforms an array of structures into a structure of arrays. + + **Figure 1** Structure array optimization + + ![Structure array optimization](./figures/p2.png) + + **Example:** + + Original structure: + + ```bash + struct + { + type1 field1; + type2 field2; + type3 field3; + } arr[N]; + ``` + + Transformed structure: + + ```bash + struct + { + type1 field1[N]; + type2 field2[N]; + type3 field3[N]; + } arr; + ``` + +#### How to Use + +Add the following options during compilation: + +```bash +-O3 -flto -flto-partition=one -fipa-struct-reorg +``` + +**Note:** + +The `-fipa-struct-reorg` option requires the `-O3 -flto -flto-partition=one` options to be enabled globally. + +Optimization effect: Up to 20% performance improvement is observed on the SPECCPU2017 intrate 505.mcf benchmark. + +### 1.6.2 `-fipa-reorder-fields` + +The `-fipa-reorder-fields` option reorders the fields within a structure based on their size (from largest to smallest). This minimizes padding due to alignment requirements, reduces the overall memory footprint of the structure, and improves cache hit rate. + +Original structure: + +```c +struct S + { + double a; + int b;double c; + double d; + short e; + double f; + double g; + double h; + double i; + }; +``` + +Reordered structure: + +```c +struct S.reorder + { + double a; + double i; + double c; + double d; + double f; + double g; + double h; + int b; + short e; + } +``` + +#### How to Use + +Add the following options during compilation: + +```bash +-O3 -flto -flto-partition=one -fipa-reorder-fields +``` + +**Note:** + +The `-fipa-reorder-fields` option requires the `-O3 -flto -flto-partition=one` options to be enabled globally. + +Optimization effect: Up to 20% performance improvement is observed on the SPECCPU2017 intrate 505.mcf benchmark. + +### 1.6.3 `-fipa-struct-reorg=n` + +This option provides granular control over a series of structure layout optimizations. The value of _n_ determines the level of optimization: + +- `-fipa-struct-reorg=0`: disables all structure layout optimizations. + +- `-fipa-struct-reorg=1`: enables structure splitting and structure array optimization (equivalent to using `-fipa-struct-reorg`). + +- `-fipa-struct-reorg=2`: includes all optimizations from level 1, and additionally enables structure member reordering (`-fipa-reorder-fields`). + +- `-fipa-struct-reorg=3`: includes all optimizations from level 2, and additionally enables **structure redundant member elimination**. This optimization removes unread structure members and their corresponding write statements. + + **Example:** + + Original structure: + + ```c + struct S + { + type1 field1; + // Never read in whole program + type2 field2;}; + ``` + + Transformed structure: + + ```c + struct S.layout + { + type2 field2; + }; + ``` + +- `-fipa-struct-reorg=4`: includes all optimizations from level 3, and additionally enables **safe structure pointer compression**. + + This optimization compresses structure pointers within structure fields to 8, 16, or 32 bits (configurable), reducing memory footprint and bandwidth pressure. + + - Safe structure pointer compression supports only scenarios where the size of the structure array is known at compile time. + - Use `--param compressed-pointer-size=[8,16,32]` to control the compressed size (the default value is 32). + + **Example:** + + Original structure: + + ```c + struct S + { + struct S* field1; + type2 field2; + }; + ``` + + Optimized structure: + + ```c + struct S.layout + { + uint32_t field1.pc; + type2 field2; + }; + ``` + +- `-fipa-struct-reorg=5`: includes all optimizations from level 4, and **relaxes the constraints for structure pointer compression**. + + This level supports scenarios where the size of the structure array is unknown at compile time. Users must ensure the legality of the compression level. The following table shows the maximum supported structure array size for different compression levels. + + | Pointer Size | Maximum Supported Array Range | + | ------------ | ----------------------------- | + | 8 | 254 (0xff-1) | + | 16 | 65534 (0xffff-1) | + | 32 | 4294967294 (0xffffffff-1) | + +- `-fipa-struct-reorg=6`: includes all optimizations from level 5, and additionally enables **structure array semi-relayout optimization**. + + Semi-relayout packs and re-arranges members of structures within a certain range, improving data locality and enhancing performance. + + - Control the relayout scale with `--param semi-relayout-level=[11,12,13,14,15]` (the default value is 13). A value of 13 means semi-relayout will re-arrange every 1024 structures as a group. If there are fewer than 1024 structures, padding is added to reach 1024. Calculation: `(1 << semi-relayout-level) / 8`. + + - The figure below illustrates the transformation of structure array layout in memory from consecutive structures after applying semi-relayout. + + **Figure 1** Semi-relayout optimization principle diagram + + ![Semi-relayout](./figures/p3.png) + + ```c + struct S + { + long a, + int b, + short c + }; + ``` + +#### How to Use + +Add the following options during compilation: + +```bash +-O3 -flto -flto-partition=one -fipa-struct-reorg=n +``` + +Where _n_ can be between 0 and 6. + +**Note:** + +The `-fipa-struct-reorg=n` option requires the `-O3 -flto -flto-partition=one` options to be enabled globally. + +### 1.6.4 `-ftree-slp-transpose-vectorize` + +This option improves the analysis of loops with consecutive memory reads by inserting temporary arrays to split the loop during loop splitting, and adds analysis to transpose grouped stores in the superword level parallelism (SLP) vectorization stage. + +**Example:** + +Consider the following code: + +```c +int foo (unsigned char *oxa, int ia, unsigned char *oxb, int ib) + { + unsigned tmp[4][4]; + unsigned a0, a1, a2, a3;int sum = 0; + for (int i = 0; i < 4; i++, oxa += ia, oxb += ib) + { + a0 = (oxa[0] - oxb[0]) + ((oxa[4] - oxb[4]) << 16); + a1 = (oxa[1] - oxb[1]) + ((oxa[5] - oxb[5]) << 16); + a2 = (oxa[2] - oxb[2]) + ((oxa[6] - oxb[6]) << 16); + a3 = (oxa[3] - oxb[3]) + ((oxa[7] - oxb[7]) << 16); + int t0 = a0 + a1;int t1 = a0 - a1;int t2 = a2 + a3; + int t3 = a2 - a3;tmp[i][0] = t0 + t2; + tmp[i][2] = t0 - t2;tmp[i][1] = t1 + t3; + tmp[i][3] = t1 - t3; + } + for (int i = 0; i < 4; i++) + { + int t0 = tmp[0][i] + tmp[1][i]; + int t1 = tmp[0][i] - tmp[1][i]; + int t2 = tmp[2][i] + tmp[3][i]; + int t3 = tmp[2][i] - tmp[3][i]; + a0 = t0 + t2; + a2 = t0 - t2; + a1 = t1 + t3; + a3 = t1 - t3; + sum += a0 + a1 + a2 + a3; + } + return sum; + } +``` + +The first loop can be split as follows: + +```c +for (int i = 0; i < 4; i++, oxa += ia, oxb += ib) + { + a00[i] = (oxa[0] - oxb[0]) + ((oxa[4] - oxb[4]) << 16); + a11[i] = (oxa[1] - oxb[1]) + ((oxa[5] - oxb[5]) << 16); + a22[i] = (oxa[2] - oxb[2]) + ((oxa[6] - oxb[6]) << 16); + a33[i] = (oxa[3] - oxb[3]) + ((oxa[7] - oxb[7]) << 16); + } +for (int i = 0; i < 4; i++) + { + int t0 = a00[i] + a11[i]; + int t1 = a00[i] - a11[i]; + int t2 = a22[i] + a33[i]; + int t3 = a22[i] - a33[i]; + tmp[i][0] = t0 + t2; + tmp[i][2] = t0 - t2; + tmp[i][1] = t1 + t3; + tmp[i][3] = t1 - t3; + } +``` + +The calculations on the right side of the first split loop are isomorphic and involve consecutive loads, making them suitable for vectorization. However, the memory addresses of `a00[i]`, `a11[i]`, `a22[i]`, and `a33[i]` on the left side are not consecutive, preventing them from being the root node of the vectorized SLP tree. Ideally, the register content after each iteration should be: + +| **register** | **values** | +| ------------ | --------------------------- | +| vec0 | a00\[0] a00\[1] a00\[2] a00\[3] | +| vec1 | a11\[0] a11\[1] a11\[2] a11\[3] | +| vec2 | a22\[0] a22\[1] a22\[2] a22\[3] | +| vec3 | a33\[0] a33\[1] a33\[2] a33\[3] | + +However, the actual content calculated within each iteration is: + +| **register** | **values** | +| ------------ | --------------------------- | +| vec0 | a00\[0] a11\[0] a22\[0] a33\[0] | +| vec1 | a00\[1] a11\[1] a22\[1] a33\[1] | +| vec2 | a00\[2] a11\[2] a22\[2] a33\[2] | +| vec3 | a00\[3] a11\[3] a22\[3] a33\[3] | + +By transposing the grouped stores, the desired SLP tree root node can be obtained. Subsequently, leveraging the existing capabilities of SLP, further vectorization analysis can be performed. + +In addition, for scenarios like the second split loop and the last loop in the example, where the `tmp` two-dimensional array is written to memory and immediately read, this optimization transforms the memory access into permutation operations between registers. This optimization is enabled by default. + +#### How to Use + +Add the following option during compilation: + +```bash +-O3 -ftree-slp-transpose-vectorize +``` + +**Note:** + +The `-ftree-slp-transpose-vectorize` option requires `-O3` to be enabled. + +### 1.6.5 `-fccmp2` + +This option enhances the usage scenarios for the Arm CCMP instruction, streamlining instruction pipelining and improving performance. + +For code like the following: + +```bash +int f(int a, int b, int c) { while(1) { if (a--==0||b>=c){ return 1; } }} +``` + +Enabling the `-fccmp2` option can result in the following assembly code that leverages the CCMP instruction: + +**Figure 1** Assembly code with the CCMP instruction + +![Assembly code with the CCMP instruction](./figures/p4.png) + +#### How to Use + +Add the following option during compilation: + +```bash +-fccmp2 +``` + +**Note:** + +Optimization effect: Approximately 1% performance improvement observed on SPECCPU2017 intrate 557.xz_r benchmark. + +### 1.6.6 `-farray-widen-compare` + +This option enables array widening during comparison operations. It allows the compiler to use wider data types to dereference array pointers (where the array elements are of a narrower type), effectively comparing multiple elements at once and enhancing performance. + +**Example:** + +Original code: + +```c +#define my_min(x, y) ((x) < (y) ? (x) : (y)) +uint32_t func (uint32_t n0, uint32_t n1, const uint32_t limit, const uint8_t * a, const uint8_t * b) + { + uint32_t n = my_min(n0, n1); + while (++n != limit) + if (a[n] != b[n]) + break; + return n;} +``` + +Optimized code with `-farray-widen-compare`: + +```bash +#define my_min(x, y) ((x) < (y) ? (x) : (y)) +uint32_t func (uint32_t n0, uint32_t n1, const uint32_t limit, const uint8_t * a, const uint8_t * b) + { + uint32_t n = my_min(n0, n1); + for (++n; n + sizeof(uint64_t) <= limit; n += sizeof(uint64_t)) + { + uint64_t k1 = *((uint64_t*)(a+n)); + uint64_t k2 = *((uint64_t*)(b+n)); + if(k1 != k2) + { + int lz = __builtin_ctzll(k1 ^ k2); + n += lz/8; + return n; + } + } + for (;n != limit; ++n) + { + if (a[n] != b[n]) + break; + } + return n; + } +``` + +#### How to Use + +Add the following options during compilation: + +```bash +-O3 -farray-widen-compare +``` + +# 2 AI for Compiler + +## 2.1 Sampling Feedback-Directed Optimization Enhancement + +### 2.1.1 Feature Description + +Using relevant algorithms and a framework, AI for compiler can further enhance the sampling feedback-directed optimization, more accurately predict key values in the compilation optimization process, assist the compiler in making more reasonable optimization decisions, and improve the compilation optimization effect. Using AI for compiler algorithms such as code representation learning, AI for compiler trains a basic block precision correction model for BOLT sampling, builds a framework integrated with GCC for openEuler, and achieves performance improvement. + +By optimizing the code and data layout in the binary file, BOLT reduces the CPU cache miss rate and branch prediction error, thus providing further optimization after the compiler has applied LTO and feedback-directed optimization (FDO). BOLT has two ways to use dynamic profiling data for program performance improvement: instrumentation and sampling. The instrumentation method has high performance overhead but high precision, while the sampling method has very low performance overhead but low precision. The basic block precision correction model of BOLT sampling aims to predict the Count value of a basic block by exploring multi-granularity code information such as the included instructions/variables and the function/file the basic block belongs, so as to improve the accuracy of CFG and make the sampling BOLT achieve the optimization effect close to that of the instrumentation BOLT. + +### 2.1.2 Installation + +1. Install rpmbuild and rpmdevtools using root privileges. + + ```bash + ## Install rpmbuild. + yum install rpm-build + ## Install rpmdevtools. + yum install rpmdevtools + ``` + +2. Download code from the target repository. + + ```bash + git clone https://gitee.com/src-openeuler/AI4C.git + ``` + +3. Generate the **rpmbuild** directory. + + ```bash + rpmbuild-setuptree + # Place AI4C-v0.2.0-alpha.tar.gz and related patch files in the SOURCES directory under the rpmbuild directory. + # Place AI4C.spec to the SPECS directory. + ``` + +4. Install AI4C. + + ```bash + rpm -ivh + ``` + + If a file conflict occurs due to an installed package of an older version, add the `--force` option to `rpm -ivh ` to force the installation of the new version. Alternatively, update the package by running `rpm -Uvh `. + +5. After the installation is complete, you can find the related dynamic library under **/usr/lib64** and the related model under the **/usr/lib64/AI4C** directory. + +### 2.1.3 Usage + +AI4C empowers users with two inference methods: utilizing custom models via API calls or leveraging preset models with sampling feedback optimization and tuning options provided by compilation flags. + +To use custom models for inference: + +1. Developers first need to build their models and save them as ONNX models using ONNX Runtime. + +2. Users need to call the APIs provided by AI4C within the adaptation layer of their target optimization backend to perform model inference, as shown in the table below. The interfaces listed are available in the dynamic library, **libONNXRunner.so**, and are used for model inference configuration, inference execution, and resource cleanup after inference. + + | API Name | Description | + | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | + | extern ONNXRunner*createONNXRunner(const char* model_path) | Takes the model path as a parameter and creates a session to initialize and configure the inference. | + | extern void deleteONNXRunner(ONNXRunner* instance) | Deletes the **ONNXRunner** object. | + | extern float runONNXModel(ONNXRunner* instance, std::vector<std::string> input_string, std::vector<int64_t> input_int64, std::vector<float> input_float) | Takes the model inputs as parameters and performa inference to obtain the corresponding results. | + +## 2.1.4 Performance Boosts in Common Applications + +This test uses the MySQL as the test program. MySQL is a popular open source relational database management system (RDBMS), widely used in various applications. The AI for Compiler algorithm and framework enable more accurate estimations of critical values during the BOLT optimization phase, assisting the compiler in making more reasonable optimization decisions and enhancing the optimization effect. This ultimately leads to improved MySQL performance. Based on the tpmC throughput test results for MySQL, the AI for Compiler framework, combined with tuning options, can help achieve a 5% performance improvement in MySQL. + +# 3 PIN + +## 3.1 Feature Description + +The Plug-IN (PIN) framework is a plug-in development platform that helps develop plug-ins once but apply to multiple compilers, thereby reducing development costs. It also supports and maintains common capabilities. PIN uses the proxy mode and consists of two key components: server and client. The PIN server bears the plug-in logic and enables developers to develop plug-ins based on the relatively neutral MLIR and a series of plug-in APIs, allowing developers to focus on designing the plug-in logic. The server connects to clients of different compilers, transfers intermediate representations (IRs) and operations through cross-process communication, converts and maps plug-in logic, and executes the logic on the client compiler. In this way, one piece of code can be implemented on multiple compilers. + +Plug-in users only need to download the library file and verification file of the required plug-in and enable the plug-in on the compiler client through the PIN configuration file. The PIN client is loaded as a GCC/LLVM plug-in. New functions can be implemented without modifying the source code of the GCC compiler. In this way, users can use the plug-in more flexibly while enjoying various common capabilities supported and maintained by PIN. + +## 3.2 Download and Installation + +1. Install dependencies. + + ```bash + ## Install dependencies for the GCC client. + yum install -y gityum install -y makeyum install -y cmakeyum install -y grpcyum install -y grpc-develyum install -y grpc-pluginsyum install -y protobuf-develyum install -y jsoncppyum install -y jsoncpp-develyum install -y gcc-plugin-develyum install -y llvm-mliryum install -y llvm-mlir-develyum install -y llvm-devel + ## Install dependencies for the PIN server. + yum install -y gityum install -y makeyum install -y cmakeyum install -y grpcyum install -y grpc-develyum install -y grpc-pluginsyum install -y protobuf-develyum install -y jsoncppyum install -y jsoncpp-develyum install -y llvm-mliryum install -y llvm-mlir-develyum install -y llvm-devel + ``` + +2. Use either of the following methods to install or build PIN: + + 1. Build + + ```bash + ## Build the GCC client on PIN. + git clone https://gitee.com/openeuler/pin-gcc-client.gitcd pin-gcc-clientmkdir buildcd buildcmake ../ -DMLIR_DIR=${MLIR_PATH} -DLLVM_DIR=${LLVM_PATH}make + ## Build the PIN server. + git clone https://gitee.com/openeuler/pin-server.gitcd pin-servermkdir buildcd buildcmake ../ -DMLIR_DIR=${MLIR_PATH} -DLLVM_DIR=${LLVM_PATH}make + ``` + + 2. Install through Yum + + ```bash + ## Install the GCC client. + yum install -y pin-gcc-client + ## Install the PIN server. + yum install -y pin-server + ``` + +# 4 GCC Toolset + +## 4.1 Feature Description + +To ensure the robustness of the OS, the foundational software selection policy prefers the version that has been verified and is relatively stable instead of the latest version. This policy helps avoid potential instability caused by version changes and ensures that the OS remains relatively stable throughout the long-term support (LTS) cycle. For this reason, GCC 12.3.1 is used as the baseline for openEuler 24.03 LTS development throughout its lifecycle. + +Such a selection may cause the following problems: On one hand, many hardware features require the support of the basic GCC toolchain. If the GCC of a non-latest version is selected, new features cannot be enabled on the newly released OS in a timely manner. On the other hand, some users tend to use the latest compiler to enable the latest features for improved performance compared with earlier compilers. + +To enable new features of various computing cases and meet different users' requirements for different hardware features, openEuler GCC Toolset comes with openEuler 24.09. This toolchain is designed to support compilation with multiple versions of GCC on openEuler. Typically, it provides a minor GCC that is later than the major GCC of the OS, enabling you to flexibly select the compilation environment. By using openEuler GCC Toolset, you can easily switch between GCC of different versions to make full use of new hardware features and enjoy the improved performance brought by the latest GCC optimization. + +## 4.2 Restrictions + +In openEuler 24.09, the default major GCC is GCC 12.3.1 and the minor GCC is gcc-toolset-14. This sets up a compilation environment that supports both GCC 12 and GCC 14. + +- OS: openEuler 24.09 +- Hardware architecture: AArch64/x86_64 + +## 4.3 Download and Installation + +### 4.3.1 Installing SCL + +```bash +yum install scl-utils scl-utils-build +``` + +### 4.3.2 Installing GCC Toolset + +Install gcc-toolset-14 in **/opt/openEuler/gcc-toolset-14/**. + +```bash +yum install -y gcc-toolset-14-gcc* +yum install -y gcc-toolset-14-binutils* +``` + +## 4.4 How to Use + +With Software Collections (SCL), you can manage multiple versions of compilation toolchains. + +### 4.4.1 Registering gcc-toolset-14 + +```bash +## Register gcc-toolset-14. +scl register /opt/openEuler/gcc-toolset-14/ +##Deregister gcc-toolset-14. +scl deregister gcc-toolset-14 +``` + +Run `scl list-collections`. If gcc-toolset-14 is displayed, the toolset has been registered with SCL. + +### 4.4.3 Switching to gcc-toolset-14 + +Start a new Bash shell session to use gcc-toolset-14 instead of the default GCC. In the new Bash shell session, you do not need to explicitly use the `scl` command. + +```bash +scl enable gcc-toolset-14 bash +``` + +To exit the gcc-toolset-14 compilation environment, enter `exit` to exit the Bash shell session. GCC is switched to the default version. + +SCL automatically sets environment variables for different GCC versions. For details, see the **/opt/openEuler/gcc-toolset-14/enable** file, in which the environment variables of gcc-toolset-14 are set. If SCL is unavailable in the OS, switch the toolchain version as follows: + +```bash +## Solution 1: Use a script to switch the compilation toolchain if SCL is unavailable. +source /opt/openEuler/gcc-toolset-14/enable + +## Solution 2: If SCL is available, use it to switch the compilation toolchain and activate the operating environment. +scl enable gcc-toolset-14 bash +``` + +## 4.5 Application Scenarios + +Major GCC: The default GCC 12.3.1 is used for compilation. + +Minor GCC: If the features of GCC 14 are required to build related applications, use SCL to switch the Bash environment to that of gcc-toolset-14. diff --git a/docs/en/server/development/gcc/kernel_fdo_user_guide.md b/docs/en/server/development/gcc/kernel_fdo_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..f0ffef86213115df6a9f92ca591eb13947de49d2 --- /dev/null +++ b/docs/en/server/development/gcc/kernel_fdo_user_guide.md @@ -0,0 +1,72 @@ +# Overview + +The feedback-directed optimization (FDO) of the kernel allows users to build optimized kernels for different applications to improve the application performance in single-application scenarios. In addition, FDO is integrated GCC for openEuler, and A-FOT provides automatic optimization, enabling users to easily enable FDO. + +# Installation and Deployment + +## Software Requirements + +* OS: openEuler 22.03 LTS SP4 + +## Hardware Requirements + +* Architecture: AArch64 or x86_64 + +## Software Installation + +### Downloading the Kernel Source Code + +```shell +yum install -y kernel-source +cp -r /usr/src/linux-5.10.0-153.12.0.89.oe2203SP4.aarch64 . +``` + +**Note: Change the version number as required.** + +### (Optional) Installing GCC + +GCC of openEuler 22.03 LTS SP4 can compile kernels with PGO. Alternatively, you can perform the following steps to manually build a customized GCC based on other GCC versions (GCC 10 or later). The key is to add `--disable-tls --disable-libsanitizer` during configuration. + +```shell +cd ${GCC_DIR} +mkdir build +cd build +../configure --prefix=${GCC_INSTALL_PREFIX} --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,fortran,lto --enable-plugin --enable-initfini-array --disable-libgcj --without-isl --without-cloog --enable-gnu-indirect-function --build=aarch64-linux-gnu --with-stage1-ldflags='-Wl,-z,relro,-z,now' --with-boot-ldflags='-Wl,-z,relro,-z,now' --disable-bootstrap --with-multilib-list=lp64 --enable-bolt --disable-tls --disable-libsanitizer +make -j 96 && make install -j 96 +``` + +### Installing A-FOT + +```shell +git clone https://gitee.com/openeuler/A-FOT.git +``` + +# Usage + +You can use A-FOT to enable kernel FDO and obtain the optimized kernel by specifying **opt_mode** as **Auto_kernel_PGO**. Other configuration items can be specified on the CLI, for example, `./a-fot --pgo_phase 1`. `-s` and `-n` options can be specified on CLI only. Options related to kernel FDO are as follows. + +| No.| Option (Configuration File)| Description | Default Value | +| ---- | -------------------- | ------------------------------------------------------------ | ------------------------ | +| 1 | config_file | Path of the configuration file. User configurations are read from this file. | ${afot_path}/a-fot.ini | +| 2 | opt_mode | Optimization mode to be executed by the tool. The value can be **AutoFDO**, **AutoPrefetch**, **AutoBOLT**, or **Auto_kernel_PGO**.| AutoPrefetch | +| 3 | pgo_mode | Kernel FDO mode, which can be GCOV or full PGO. | all | +| 4 | pgo_phase | FDO execution phase. | 1 | +| 5 | kernel_src | Kernel source code directory. If this option is not specified, the tool automatically downloads the source code. | None (optional) | +| 6 | kernel_name | File name of the kernel build. The tool will add the **-pgoing** or **-pgoed** suffix depending on the phase. | kernel | +| 7 | work_path | Script working directory, which is used to store log files, wrappers, and profiles. | **/opt** (**/tmp** cannot be used.)| +| 8 | run_script | Application execution script. The user needs to write the script, which will be used by the tool to execute the target application.| /root/run.sh | +| 9 | gcc_path | GCC path. | /usr | + +After configuring the compilation options, run the following command to use A-FOT to automatically optimize the kernel: + +```shell +a-fot --config_file ./a-fot.ini -s +``` + +**Note: The `-s` option instructs A-FOT to automatically reboot into the compiled kernel. If you do not want the tool to automatically perform this sensitive operation, omit this option. However, you need to manually reboot and perform the second phase (`--pgo_phase 2`).** + +# Compatibility + +This section describes the compatibility issues in some special scenarios. This project is in continuous iteration and issues will be fixed as soon as possible. Developers are welcome to join this project. + +* The implementation of FDO in the GCC varies with the version. Therefore, GCC 10 or later is required. diff --git a/docs/en/server/development/lustre/_toc.yaml b/docs/en/server/development/lustre/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ff1d987b975c5a70e204facb5f81154b44291956 --- /dev/null +++ b/docs/en/server/development/lustre/_toc.yaml @@ -0,0 +1,6 @@ +label: Lustre User Guide +isManual: true +description: Lustre is an open source distributed file system +sections: + - label: Overview + href: ./user_guide.md diff --git a/docs/en/server/development/lustre/figures/lustre-architecture.png b/docs/en/server/development/lustre/figures/lustre-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..cad3c0d14edac396fcaedf0c77d7fdc1c9fcc13a Binary files /dev/null and b/docs/en/server/development/lustre/figures/lustre-architecture.png differ diff --git a/docs/en/server/development/lustre/user_guide.md b/docs/en/server/development/lustre/user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..2d0ae13b13c5ac8cea4b89c96011c3e6cfc30d50 --- /dev/null +++ b/docs/en/server/development/lustre/user_guide.md @@ -0,0 +1,189 @@ +# Overview + +Lustre is an open source parallel file system designed for high scalability, performance, and availability. Lustre runs on Linux and provides POSIX-compliant UNIX file system interfaces. + +An Lustre cluster contains four main components: + +- Management Service (MGS): Stores configuration information for the Lustre file system. +- Metadata Service (MDS): Provides metadata service for the Lustre file systems. +- Object Storage Service (OSS): Stores file data as objects. +- Lustre clients: Mounts the Lustre file system. + +These components are connected through Lustre Network(LNet), as shown below figure: + +![](./figures/lustre-architecture.png) + +# Environment Requirements + +**Server specifications** + +- One or more x86 or Arm serves installed with openEuler 22.03 LTS SP4. +- A dedicated drive is reserved for Lustre. +- An Ethernet or InfiniBand NIC is installed. + +>**Notice:** +> +> In the production deployment, carefully read [Lustre manual](https://doc.lustre.org/lustre_manual.xhtml) chapters 5 and 6 for Lustre hardware configuration and storage RAID requirements. + +# Installation + +Install Lustre all nodes. + +1. Install the Lustre RPM repository package. + + `sudo dnf install lustre-release` + +2. Install the Lustre RPM packages. + + `sudo dnf install lustre lustre-tests` + +>**Notice:** +> +> The current Lustre RPM packages are compiled based on the kernel in-tree IB driver for the ldiskfs backend. If you need to compile the RPM packages based on third-party IB drivers (such as the MLX IB NIC driver) or compile ZFS backend support, recompile the Lustre source RPM package. +> +> Lustre source RPM download: +> +> **Install compilation dependencies.** +> +> `sudo dnf builddep --srpm lustre-2.15.3-2.oe2203SP4.src.rpm` +> +> **Recompile based on the MLX IB NIC driver.** +> +> You need to install the MLX IB NIC driver in advance. +> +> `rpmbuild --rebuild --with mofed lustre-2.15.3-2.oe2203SP4.src.rpm` +> +> **Recompile for the ZFS backend.** +> +> Use verification branch [zfs-2.1-release](https://github.com/openzfs/zfs/tree/zfs-2.1-release) to compile for the ZFS backend. +> +> `git clone -b zfs-2.1-release https://github.com/openzfs/zfs` +> +> `cd zfs && sh autogen.sh && ./configure --with-spec=redhat && make rpms` +> +> `sudo dnf install ./*$(arch).rpm` +> +> `rpmbuild --rebuild --with zfs lustre-2.15.3-2.oe2203SP4.src.rpm` + +# Deployment + +> **Notice:** +> +> The following steps are simplified. In the production environment, you are advised to follow the details steps in chapter 4 of the [Lustre manual](https://www.lustre.org/documentation/). + +**Configure the network.** + +If there are multiple NICs, specify the one(s) for Lustre to use. For example, specify one Ethernet and IB NICs for Lustre. + +```bash +$ cat /etc/modprobe.d/lustre.conf +options lnet networks="tcp(enp125s0f0),o2ib(enp133s0f0) +``` + +**Load the Lustre module.** + +Check if the LNet is normal. + +```bash +$ sudo modproe lustre +$ sudo lctl list_nids +175.200.20.14@tcp +10.20.20.14@o2ib +``` + +**Deploy a standalone node.** + +Run the following commands to build a single-node environment for test and verification: + +```bash +$ sudo /lib64/lustre/tests/llmount.sh +$ mount +... +192.168.1.203@tcp:/lustre on /mnt/lustre type lustre (rw,checksum,flock,user_xattr,lruresize,lazystatfs,nouser_fid2path,verbose,encrypt) +$ lfs df -h +UUID bytes Used Available Use% Mounted on +lustre-MDT0000_UUID 95.8M 3.2M 90.5M 4% /mnt/lustre[MDT:0] +lustre-OST0000_UUID 239.0M 3.0M 234.0M 2% /mnt/lustre[OST:0] +lustre-OST0001_UUID 239.0M 3.0M 234.0M 2% /mnt/lustre[OST:1] + +filesystem_summary: 478.0M 6.0M 468.0M 2% /mnt/lustre +``` + +**Deploy a multi-node cluster.** + +On the MGS/MDS node, add an MDT whose name in the Lustre file system is **temp**. + +```bash +$ sudo mkfs.lustre --fsname=temp --mgs --mdt --index=0 /dev/vdb + Permanent disk data: +Target: temp:MDT0000 +Index: 0 +Lustre FS: temp +Mount type: ldiskfs +Flags: 0x65 + (MDT MGS first_time update ) +Persistent mount opts: user_xattr,errors=remount-ro +Parameters: + +device size = 81920MB +formatting backing filesystem ldiskfs on /dev/vdb + target name temp:MDT0000 + kilobytes 83886080 + options -J size=3276 -I 1024 -i 2560 -q -O dirdata,uninit_bg,^extents,dir_nlink,quota,project,huge_file,ea_inode,large_dir,^fast_commit,flex_bg -E lazy_journal_init="0",lazy_itable_init="0" -F +mkfs_cmd = mke2fs -j -b 4096 -L temp:MDT0000 -J size=3276 -I 1024 -i 2560 -q -O dirdata,uninit_bg,^extents,dir_nlink,quota,project,huge_file,ea_inode,large_dir,^fast_commit,flex_bg -E lazy_journal_init="0",lazy_itable_init="0" -F /dev/vdb 83886080k +Writing CONFIGS/mountdata + +$ sudo mkdir /mnt/lustre-mdt1 +$ sudo mount -t lustre /dev/vdb /mnt/lustre-mdt1 +``` + +Add multiple MDTs in the same way with incrementing values of `--index`. + +On the OSS node, add an OST: + +```bash +$ sudo lctl list_nids +192.168.1.203@tcp +]$ sudo mkfs.lustre --fsname=temp --mgsnode=192.168.1.203@tcp --ost --index=0 /dev/vdc + Permanent disk data: +Target: temp:OST0000 +Index: 0 +Lustre FS: temp +Mount type: ldiskfs +Flags: 0x62 + (OST first_time update ) +Persistent mount opts: ,errors=remount-ro +Parameters: mgsnode=192.168.1.203@tcp + +device size = 51200MB +formatting backing filesystem ldiskfs on /dev/vdc + target name temp:OST0000 + kilobytes 52428800 + options -J size=1024 -I 512 -i 69905 -q -O extents,uninit_bg,dir_nlink,quota,project,huge_file,^fast_commit,flex_bg -G 256 -E resize="4290772992",lazy_journal_init="0",lazy_itable_init="0" -F +mkfs_cmd = mke2fs -j -b 4096 -L temp:OST0000 -J size=1024 -I 512 -i 69905 -q -O extents,uninit_bg,dir_nlink,quota,project,huge_file,^fast_commit,flex_bg -G 256 -E resize="4290772992",lazy_journal_init="0",lazy_itable_init="0" -F /dev/vdc 52428800k +Writing CONFIGS/mountdata +$ sudo mkdir /mnt/lustre-ost1 +$ sudo mount -t lustre /dev/vdc /mnt/lustre-ost1 +``` + +Add multiple OSTs in the same way with incrementing values of `--index`. + +On the client node, mount the Lustre file system and test file read and write: + +```bash +$ sudo mount -t lustre 192.168.1.203@tcp:/temp /mnt/lustre +$ mount +... +192.168.1.203@tcp:/temp on /mnt/lustre type lustre (rw,checksum,flock,nouser_xattr,lruresize,lazystatfs,nouser_fid2path,verbose,encrypt) +$ lfs df -h +UUID bytes Used Available Use% Mounted on +temp-MDT0000_UUID 44.4G 4.8M 40.4G 1% /mnt/lustre[MDT:0] +temp-OST0000_UUID 48.2G 1.2M 45.7G 1% /mnt/lustre[OST:0] + +filesystem_summary: 48.2G 1.2M 45.7G 1% /mnt/lustre + +$ echo "1234asdf"|sudo tee /mnt/lustre/testfile +1234asdf +$ cat /mnt/lustre/testfile +1234asdf +``` diff --git a/docs/en/server/diversified_computing/dpu_offload/_toc.yaml b/docs/en/server/diversified_computing/dpu_offload/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..66439bfd2daf45154d2ca8ea401d88f688f1e550 --- /dev/null +++ b/docs/en/server/diversified_computing/dpu_offload/_toc.yaml @@ -0,0 +1,10 @@ +label: Direct Connection Aggregation User Guide +isManual: true +description: DPU offloading feature for container management and its installation and deployment method on openEuler +sections: + - label: libvirt Direct Connection Aggregation Environment Establishment + href: ./libvirt_direct_connection_aggregation_environment_establishment.md + - label: qtfs Shared File System + href: ./qtfs_architecture_and_usage.md + - label: Imperceptible DPU Offload on the Container Management Plane + href: ./container_management_plane_direct_connection_aggregation_environment_establishment.md diff --git a/docs/en/server/diversified_computing/dpu_offload/config/client.json b/docs/en/server/diversified_computing/dpu_offload/config/client.json new file mode 100644 index 0000000000000000000000000000000000000000..4aedf4c846914a6bc34dff1988c7794ddb1fa521 --- /dev/null +++ b/docs/en/server/diversified_computing/dpu_offload/config/client.json @@ -0,0 +1,5 @@ +{ + "Protocol": "tcp", + "Ipaddr" : "192.168.10.11", + "Port" : "7777" +} diff --git a/docs/en/server/diversified_computing/dpu_offload/config/prepare.sh b/docs/en/server/diversified_computing/dpu_offload/config/prepare.sh new file mode 100644 index 0000000000000000000000000000000000000000..996a453b0da8632bfad82e08440c143b7e98032d --- /dev/null +++ b/docs/en/server/diversified_computing/dpu_offload/config/prepare.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +mkdir -p /another_rootfs/var/run/docker/containerd +iptables -t nat -N DOCKER + +echo "---------insmod qtfs ko----------" +# TEST_MODE: IP +insmod ${YOUR_PATH}/qtfs.ko qtfs_server_ip=${YOUR_SERVER_IP} qtfs_log_level=INFO #此处需要自行修改ip, 以及ko的路径 +nohup ${YOUR_PATH}/udsproxyd 1 ${YOUR_CLIENT_IP} 12121 ${YOUR_SERVER_IP} 12121 2>&1 & + +# TEST_MODE: vsock +# insmod ${YOUR_PATH}/qtfs.ko qtfs_server_vsock_cid=${YOUR_SERVER_VSOCK_CID} qtfs_log_level=INFO #此处需要自行修改ip, 以及ko的路径 +# nohup ${YOUR_PATH}/udsproxyd 1 ${YOUR_CLIENT_VSOCK_CID} 12121 ${YOUR_SERVER_VSOCK_CID} 12121 2>&1 & + +qtcfg -w udsconnect -x /var/run/rexec +qtcfg -w udsconnect -x /run/rexec + +mkdir /another_rootfs/local_proc/ +mount -t proc proc /another_rootfs/local_proc/ +mount --bind /var/run/ /another_rootfs/var/run/ +mount --bind /var/lib/ /another_rootfs/var/lib/ +mount --bind /etc /another_rootfs/etc +mount -t devtmpfs devtmpfs /another_rootfs/dev/ +mount -t sysfs sysfs /another_rootfs/sys +mkdir -p /another_rootfs/sys/fs/cgroup +mount -t tmpfs tmpfs /another_rootfs/sys/fs/cgroup +list="perf_event freezer files net_cls,net_prio hugetlb pids rdma cpu,cpuacct memory devices blkio cpuset" +for i in $list +do + echo $i + mkdir -p /another_rootfs/sys/fs/cgroup/$i + mount -t cgroup cgroup -o rw,nosuid,nodev,noexec,relatime,$i /another_rootfs/sys/fs/cgroup/$i +done + +mount -t qtfs -o proc /proc /another_rootfs/proc +echo "proc" +mount -t qtfs /sys /another_rootfs/sys +echo "cgroup" + +mkdir -p /another_rootfs/var/lib/docker/containers +mkdir -p /another_rootfs/var/lib/docker/containerd +mkdir -p /another_rootfs/var/lib/docker/overlay2 +mkdir -p /another_rootfs/var/lib/docker/image +mkdir -p /another_rootfs/var/lib/docker/tmp +mount -t qtfs /var/lib/docker/containers /another_rootfs/var/lib/docker/containers +mount -t qtfs /var/lib/docker/containerd /another_rootfs/var/lib/docker/containerd +mount -t qtfs /var/lib/docker/overlay2 /another_rootfs/var/lib/docker/overlay2 +mount -t qtfs /var/lib/docker/image /another_rootfs/var/lib/docker/image +mount -t qtfs /var/lib/docker/tmp /another_rootfs/var/lib/docker/tmp +mkdir -p /another_rootfs/run/containerd/io.containerd.runtime.v1.linux/ +mount -t qtfs /run/containerd/io.containerd.runtime.v1.linux/ /another_rootfs/run/containerd/io.containerd.runtime.v1.linux/ +mkdir -p /another_rootfs/var/run/docker/containerd +mount -t qtfs /run/docker/containerd /another_rootfs/run/docker/containerd +mkdir -p /another_rootfs/var/lib/containerd/io.containerd.runtime.v1.linux +mount -t qtfs /var/lib/containerd/io.containerd.runtime.v1.linux /another_rootfs/var/lib/containerd/io.containerd.runtime.v1.linux + +qtcfg -w udsconnect -x /another_rootfs/var/run/rexec +qtcfg -w udsconnect -x /another_rootfs/run/rexec diff --git a/docs/en/server/diversified_computing/dpu_offload/config/rexec.service b/docs/en/server/diversified_computing/dpu_offload/config/rexec.service new file mode 100644 index 0000000000000000000000000000000000000000..52c9d7993d38a0d9c057a92388e026354904859e --- /dev/null +++ b/docs/en/server/diversified_computing/dpu_offload/config/rexec.service @@ -0,0 +1,12 @@ +[Unit] +Description=Rexec_server Service +After=network.target + +[Service] +Type=simple +ExecStart=/usr/bin/rexec_server +ExecReload=/bin/kill -s HUP $MAINPID +KillMode=process + +[Install] +WantedBy=multi-user.target diff --git a/docs/en/server/diversified_computing/dpu_offload/config/server.json b/docs/en/server/diversified_computing/dpu_offload/config/server.json new file mode 100644 index 0000000000000000000000000000000000000000..1d4a7bbbc1cbf086e18b147f3f27e6a15c2e322e --- /dev/null +++ b/docs/en/server/diversified_computing/dpu_offload/config/server.json @@ -0,0 +1,5 @@ +{ + "Protocol": "tcp", + "Ipaddr" : "0.0.0.0", + "Port" : "7777" +} diff --git a/docs/en/server/diversified_computing/dpu_offload/config/server_start.sh b/docs/en/server/diversified_computing/dpu_offload/config/server_start.sh new file mode 100644 index 0000000000000000000000000000000000000000..fd3655159ddb0fc6069dfa3ab802f4c9f8520c13 --- /dev/null +++ b/docs/en/server/diversified_computing/dpu_offload/config/server_start.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +modprobe overlay +mkdir /var/lib/docker/containers +mkdir -p /var/lib/docker/containers +mkdir -p /var/lib/docker/containerd +mkdir -p /var/lib/docker/overlay2 +mkdir -p /var/lib/docker/tmp +mkdir -p /var/lib/docker/image +mkdir -p /var/run/docker/containerd +mkdir -p /run/containerd/io.containerd.runtime.v1.linux/ +mkdir -p /var/run/docker/netns +mkdir -p /var/lib/containerd/io.containerd.runtime.v1.linux/ +mkdir -p /run/user/0 +touch /var/run/docker/netns/default +# this should be done once +mount --bind /proc/1/ns/net /var/run/docker/netns/default + +function TaskClean() +{ + echo "Now do task clean..." + pkill engine + rmmod qtfs_server + echo "TaskClean done" +} + +trap "TaskClean exit" SIGINT + +mkdir -p /var/run/docker/containerd +mkdir -p /run/containerd/io.containerd.runtime.v1.linux/ + +# TEST_MODE: IP +insmod ${YOUR_PATH}/qtfs_server.ko qtfs_server_ip=${YOUR_SERVER_IP} qtfs_log_level=ERROR +nohup ${YOUR_PATH}/engine 16 1 ${YOUR_SERVER_IP} 12121 ${YOUR_CLIENT_IP} 12121 2>&1 & + +# TEST_MODE: vsock +# insmod ${YOUR_PATH}/qtfs_server.ko qtfs_server_vsock_cid=${YOUR_SERVER_VSOCK_CID} qtfs_log_level=ERROR +# nohup ${YOUR_PATH}/engine 16 1 ${YOUR_SERVER_VSOCK_CID} 12121 ${YOUR_CLIENT_VSOCK_CID} 12121 2>&1 & + +sleep 2 + +qtcfg -w udsconnect -x /var/run/rexec +qtcfg -w udsconnect -x /run/rexec +qtcfg -w udsconnect -x /var/run/containerd diff --git a/docs/en/server/diversified_computing/dpu_offload/config/whitelist b/docs/en/server/diversified_computing/dpu_offload/config/whitelist new file mode 100644 index 0000000000000000000000000000000000000000..70ca91b8b6ca3a37354f7452c57dc9a413373aa3 --- /dev/null +++ b/docs/en/server/diversified_computing/dpu_offload/config/whitelist @@ -0,0 +1,15 @@ +kill +taskset +qemu-kvm +rexec_shim +/usr/bin/taskset +/usr/bin/kill +/usr/bin/qemu-kvm +/usr/bin/rexec_shim +/usr/bin/dockerd +/usr/bin/containerd +/usr/bin/rexec_shim +/usr/bin/containerd-shim +/usr/bin/containerd-real +/usr/bin/runc +/usr/bin/modprobe diff --git a/docs/en/server/diversified_computing/dpu_offload/container_management_plane_direct_connection_aggregation_environment_establishment.md b/docs/en/server/diversified_computing/dpu_offload/container_management_plane_direct_connection_aggregation_environment_establishment.md new file mode 100644 index 0000000000000000000000000000000000000000..d211bb17c8d9f8016928d7fb81310f18edd97e4e --- /dev/null +++ b/docs/en/server/diversified_computing/dpu_offload/container_management_plane_direct_connection_aggregation_environment_establishment.md @@ -0,0 +1,462 @@ +# 1 Imperceptible Container Management Plane Offload + +## 1.1 Overview + +The container management plane refers to container management tools such as dockerd, containerd, and isulad. Container management plane offload means to offload the container management plane from the HOST where the container is located to the DPU. + +We use qtfs to mount some directories related to container running on the HOST to the DPU so that the container management plane can access these directories to prepare the environment required for container running. In addition, the remote proc and sys file systems need to be mounted. To avoid impact on the current system, you can create a dedicated rootfs (referred to as **/another_rootfs**) as the running environment of dockerd and containerd. + +The `rexec` command is used to start or delete containers, allowing the management plane and containers to be separated on different machines for remote management. You can use either of the following modes to verify the offload. + +## 1.1.1 Test Mode + +Prepare two physical machines or VMs that can communicate with each other. + +One physical machine functions as the DPU, and the other functions as the host. In this document, DPU and HOST refer to the two physical machines. + +>[!NOTE] **NOTE:** +>In the test mode, network ports are exposed without connection authentication, which is risky and should be used only for internal tests and verification. Do not use this mode in the production environment. +>In the production environment, use closed communication to prevent external connections, such as the vsock mode. + +## 1.1.2 vsock Mode + +The DPU and HOST are required and must be able to provide vsock communication through virtio. + +This document describes only the test mode usage. If vsock communication is supported in the test environment (virtual environment or DPU-HOST environment that supports vsock), the following test procedure is applicable, except that you need to change the IP addresses to the vsock CIDs (**TEST_MODE** is not required for binary file compilation). + +# 2 Environment Setup + +## 2.1 qtfs File System Deployment + +For details, see [qtfs](https://gitee.com/openeuler/dpu-utilities/tree/master/qtfs). + +>[!NOTE] **NOTE:** +>If the test mode is used, set **qtfs_TEST_MODE** to 1 when compiling the **.ko** files on the qtfs client and server. If the vsock mode is used, you do not need to set **qtfs_TEST_MODE**. + +To establish a qtfs connection, you need to disable the firewall between the DPU and HOST, or open related network ports on the firewall. + +## 2.2 udsproxyd Service Deployment + +### 2.2.1 Overview + +udsproxyd is a cross-host Unix domain socket (UDS) proxy service and needs to be deployed on the HOST and DPU. The udsproxyd components are in a peer relationship. Their respective processes on the host and DPU can communicate with each other transparently using the standard UDSs. That is, if the two processes communicate with each other through UDSs on the same host, they can also communicate with each other between the HOST and DPU without the need for modifying code. As a cross-host Unix socket service, udsproxyd can be used by running with `LD_PRELOAD=libudsproxy.so` or configuring the udsconnect allowlist in advance. The methods for configuring the allowlist are described later. + +### 2.2.2 Deploying udsproxyd + +Compile udsproxyd in the dpu-utilities project. + +```bash +cd qtfs/ipc + +make -j UDS_TEST_MODE=1 && make install +``` + +>[!NOTE] **NOTE:** +>If the vsock mode is used, you do not need to set **UDS_TEST_MODE** during compilation. + +The latest engine service on the qtfs server has integrated the udsproxyd capability. Therefore, you do not need to start the udsproxyd service on the server. Start the udsproxyd service on the client. + +```bash +nohup /usr/bin/udsproxyd 2>&1 & +``` + +Parameters: + +```bash +thread num: number of threads. Currently, only one thread is supported. + +addr: IP address of the host. If the vsock communication mode is used, the value is the CID. + +port: Port used on the host. + +peer addr: IP address of the udsproxyd peer. If the vsock communication mode is used, the value is the CID. + +peer port: port used on the udsproxyd peer. +``` + +Example: + +```bash +nohup /usr/bin/udsproxyd 1 192.168.10.10 12121 192.168.10.11 12121 2>&1 & +``` + +If the qtfs engine service is not started and you want to test udsproxyd separately, start udsproxyd on the server. + +```bash +nohup /usr/bin/udsproxyd 1 192.168.10.11 12121 192.168.10.10 12121 2>&1 & +``` + +### 2.2.3 Using udsproxyd + +#### 2.2.3.1 Using the udsproxyd Service Independently + +When starting the client process of the Unix socket application that uses the UDS service, add the **LD_PRELOAD=libudsproxy.so** environment variable to intercept the **connect** API of glibc for UDS interconnection. Alternatively, run the `qtcfg` command to configure the udsconnect allowlist to instruct the system to take over UDS connections in specified directories. + +#### 2.2.3.2 Using the udsproxyd Service Transparently + +Configure the allowlist of the UDS service for qtfs. The socket file bound to the Unix socket server needs to be added to the allowlist. You can use either of the following methods: + +* Load the allowlist by using the `qtcfg` utility. First compile the utility in **qtfs/qtinfo**. + +Run the following command on the qtfs client: + +```bash +make role=client +make install +``` + +Run the following command on the qtfs server: + +```bash +make role=server +make install +``` + +After `qtcfg` is installed automatically, run `qtcfg` to configure the allowlist. Assume that **/var/lib/docker** needs to be added to the allowlist: + +```bash +qtcfg -w udsconnect -x /var/lib/docker +``` + +Query the allowlist: + +```bash +qtcfg -w udsconnect -z +``` + +Delete an allowlist entry: + +```bash +qtcfg -w udsconnect -y 0 +``` + +The parameter is the index number listed when you query the allowlist. + +* Add an allowlist entry through the configuration file. The configuration file needs to be set before the qtfs or qtfs_server kernel module is loaded. The allowlist is loaded when the kernel modules are initialized. + +Add the following content to the **/etc/qtfs/whitelist** file. + +```bash +[Udsconnect] +/var/lib/docker +``` + +>[!NOTE] **NOTE:** +>The allowlist prevents irrelevant Unix sockets from establishing remote connections, causing errors or wasting resources. You are advised to set the allowlist as precisely as possible. For example, in this document, **/var/lib/docker** is set in the container scenario. It would be risky to directly add **/var/lib**, **/var**, or the root directory. + +## 2.3 rexec Service Deployment + +### 2.3.1 Overview + +rexec is a remote execution component developed using the C language. It consists of the rexec client and rexec server. The server is a daemon process, and the client is a binary file. After being started, the client establishes a UDS connection with the server using the udsproxyd service, and the server daemon process starts a specified program on the server machine. During container management plane offload, dockerd is offloaded to the DPU. When dockerd needs to start a service container process on the HOST, the rexec client is invoked to remotely start the process. + +### 2.3.2 Deploying rexec + +#### 2.3.2.1 Configuring the Environment Variables and Allowlist + +Configure the rexec server allowlist on the host. Put the **whitelist** file in the **/etc/rexec** directory, and change the file permission to read-only. + +```bash +chmod 400 /etc/rexec/whitelist +``` + +After downloading the dpu-utilities code, go to the **qtfs/rexec** directory and run `make && make install` to install all binary files required by rexec (**rexec** and **rexec_server**) to the **/usr/bin** directory. + +Before starting the rexec_server service on the server, check whether the **/var/run/rexec** directory exists. If not, create it. + +```bash +mkdir /var/run/rexec +``` + +The underlying communication of the rexec service uses Unix sockets. Therefore, cross-host communication between rexec and rexec_server depends on the udsproxyd service, and the related files need to be added to the udsproxy allowlist. + +```bash +qtcfg -w udsconnect -x /var/run/rexec +``` + +#### 2.3.2.2 Starting the Service + +You can start the rexec_server service on the server in either of the following ways. + +* Method 1: +Configure rexec as a systemd service. + +Add the **[rexec.service](./config/rexec.service)** file to **/usr/lib/systemd/system**. + +[rexec.service](./config/rexec.service) + +Then, use `systemctl` to manage the rexec service. + +Start the service for the first time: + +```bash +systemctl daemon-reload +systemctl enable --now rexec +``` + +Restart the service: + +```bash +systemctl stop rexec +systemctl start rexec +``` + +* Method 2: +Manually start the service in the background. + +```bash +nohup /usr/bin/rexec_server 2>&1 & +``` + +## 3 Changes to Management Plane Components + +### 3.1 dockerd + +The changes to dockerd are based on version 18.09. + +For details about the changes to Docker, see the patch file in [this directory](https://gitee.com/openeuler/dpu-utilities/tree/master/usecases/transparent-offload/patches/docker). + +### 3.2 containerd + +The changes to containerd are based on containerd-1.2-rc.1. + +For details about the changes to containerd, see the patch file in [this directory](https://gitee.com/openeuler/dpu-utilities/tree/master/usecases/transparent-offload/patches/containerd). + +# 4 Container Management Plane Offload Guide + +>[!NOTE] **NOTE:** +> +> 1. Start rexec_server on both the HOST and DPU. +> 2. rexec_server on the HOST is used to start containerd-shim by using rexec when the DPU creates a container. +> 3. rexec_server on the DPU is used to execute the call to dockerd and containerd by containerd-shim. + +## 4.1 Preparing the Rootfs for Running dockerd and containerd + +> Note: Perform this step only on the DPU. + +In the following document, the rootfs is called **/another_rootfs** (the directory name can be changed as required). + +### 4.1.1 Using the Official openEuler QCOW2 Image + +You are advised to use the QCOW2 image provided by openEuler to prepare the new rootfs. + +#### 4.1.1.1 Installing the Tools + +Use `yum` to install xz, kpartx, and qemu-img. + +``` bash +yum install xz kpartx qemu-img +``` + +#### 4.1.1.2 Downloading the QCOW2 Image + +Download the [openEuler 22.03 LTS VM image for x86](https://repo.openeuler.org/openEuler-22.03-LTS/virtual_machine_img/x86_64/openEuler-22.03-LTS-x86_64.qcow2.xz) or [openEuler 22.03 LTS VM image for Arm64](https://repo.openeuler.org/openEuler-22.03-LTS/virtual_machine_img/aarch64/openEuler-22.03-LTS-aarch64.qcow2.xz) from the openEuler official website. + +#### 4.1.1.3 Decompressing the QCOW2 Image + +Run `xz -d` to decompress the package and obtain the **openEuler-22.03-LTS-\.qcow2** file. The following uses the x86 image as an example. + +``` bash +xz -d openEuler-22.03-LTS-x86_64.qcow2.xz +``` + +#### 4.1.1.4 Mounting the QCOW2 Image and Copying Files + +1. Run the `modprobe nbd maxpart=` command to load the nbd module. +2. `qemu-nbd -c /dev/nbd0 ` +3. Create a folder, for example, `/random_dir`. +4. `mount /dev/nbd0p2 /random_dir` +5. Copy the files. + +``` bash +mkdir /another_rootfs +cp -r /random_dir/* /another_rootfs/ +``` + +The VM image has been mounted to **/another_rootfs**. + +#### 4.1.1.5 Unmounting QCOW2 + +After the rootfs is prepared, run the following command to umount the QCOW2 file: + +``` bash +umount /random_dir +qemu-nbd -d /dev/nbd0 +``` + +### 4.1.2 Installing Software in /another_rootfs + +1. Copy **/etc/resolv.conf** from the root directory to **/another_rootfs/etc/resolv.conf**. +2. Remove the files in **/another_rootfs/etc/yum.repos.d** and copy the files in **/etc/yum.repos.d/** to **/another_rootfs/etc/yum.repos.d**. +3. Run `yum install --installroot=/another_rootfs` to install a software package. + +```bash +yum install --installroot=/another_rootfs iptables +``` + +## 4.2 Starting qtfs_server on the HOST + +Copy **rexec**, **containerd-shim**, **runc**, and **engine** to the **/usr/bin** directory. Pay attention to the permissions. **rexec** and **engine** have been provided. Compile Docker binary files based on the patch described in "Changes to Management Plane Components." + +### 4.2.1 Inserting the qtfs_server Module + +Create a folder required by the container management plane, insert **qtfs_server.ko**, and start the engine process. + +You can run [this script](./config/server_start.sh) to perform this operation. If an error occurs during the execution, try using dos2unix to convert the format of the script (the same applies to all the following scripts). + +>Replace the paths of the module and binary file in the script with the actual qtfs path. + +In addition, create the **/usr/bin/dockerd** and **/usr/bin/containerd** scripts for executing the `rexec` command on the HOST. + +**/usr/bin/dockerd**: + +``` bash +#!/bin/bash +rexec /usr/bin/dockerd $* +``` + +**/usr/bin/containerd**: + +``` bash +#!/bin/bash +exec /usr/bin/containerd $* +``` + +After the two scripts are created, run the `chmod` command to grant execute permission on them. + +``` bash +chmod +x /usr/bin/containerd +chmod +x /usr/bin/dockerd +``` + +## 4.3 Mounting the Dependency Directories on the HOST to the DPU + +### 4.3.1 Installing the Software Packages + +#### 4.3.2.1 Installing in the Root Directory + +In the DPU root directory (not **/another_rootfs**), install iptables, libtool, libcgroup, and tar using `yum`. + +```bash +yum install iptables libtool libcgroup tar +``` + +You can also download all dependency packages and run the `rpm` command to install them. The iptables and libtool packages and their dependency packages are: [iptables](https://repo.openeuler.org/openEuler-22.03-LTS/everything/x86_64/Packages/iptables-1.8.7-5.oe2203.x86_64.rpm), [libtool](https://repo.openeuler.org/openEuler-22.03-LTS/everything/x86_64/Packages/libtool-2.4.6-34.oe2203.x86_64.rpm), [emacs](https://repo.openeuler.org/openEuler-22.03-LTS/everything/x86_64/Packages/emacs-27.2-3.oe2203.x86_64.rpm), [autoconf](https://repo.openeuler.org/openEuler-22.03-LTS/everything/x86_64/Packages/autoconf-2.71-2.oe2203.noarch.rpm), [automake](https://repo.openeuler.org/openEuler-22.03-LTS/everything/x86_64/Packages/automake-1.16.5-3.oe2203.noarch.rpm), [libtool-ltdl](https://repo.openeuler.org/openEuler-22.03-LTS/everything/x86_64/Packages/libtool-ltdl-2.4.6-34.oe2203.x86_64.rpm), [m4](https://repo.openeuler.org/openEuler-22.03-LTS/everything/x86_64/Packages/m4-1.4.19-2.oe2203.x86_64.rpm) and [tar](https://repo.openeuler.org/openEuler-22.03-LTS/everything/x86_64/Packages/tar-1.34-1.oe2203.x86_64.rpm), [libcgroup](https://repo.openeuler.org/openEuler-22.03-LTS/everything/x86_64/Packages/libcgroup-0.42.2-1.oe2203.x86_64.rpm). + +After downloading the preceding software packages, run the following command: + +``` bash +rpm -ivh iptables-1.8.7-5.oe2203.x86_64.rpm libtool-2.4.6-34.oe2203.x86_64.rpm emacs-27.2-3.oe2203.x86_64.rpm autoconf-2.71-2.oe2203.noarch.rpm automake-1.16.5-3.oe2203.noarch.rpm libtool-ltdl-2.4.6-34.oe2203.x86_64.rpm m4-1.4.19-2.oe2203.x86_64.rpm tar-1.34-1.oe2203.x86_64.rpm libcgroup-0.42.2-1.oe2203.x86_64.rpm +``` + +#### 4.3.2.2 Configuring the /another_rootfs Environment + +1. Install iptables in **/another_rootfs**, which is mandatory for dockerd startup. + + Run `yum install --installroot=/another_rootfs` to install. + +2. Copy **rexec** to **/another_rootfs/usr/bin** and grant execute permission. + + ``` bash + cp rexec /another_rootfs/usr/bin + chmod +x /another_rootfs/usr/bin/rexec + ``` + +3. In addition, copy **containerd** and **dockerd** compiled based on the community Docker source code and the preceding patch to **/another_rootfs/usr/bin**, and copy **docker** to **/usr/bin**. + + ``` bash + cp {YOUR_PATH}/dockerd /another_rootfs/usr/bin + cp {YOUR_PATH}/containerd /another_rootfs/usr/bin + cp {YOUR_PATH}/docker /usr/bin + ``` + +4. Delete **/another_rootfs/usr/sbin/modprobe** from **/another_rootfs**. + + ``` bash + rm -f /another_rootfs/usr/sbin/modprobe + ``` + +5. Create the following scripts in **/another_rootfs**: + + **/another_rootfs/usr/local/bin/containerd-shim**: + + ``` bash + #!/bin/bash + /usr/bin/rexec /usr/bin/containerd-shim $* + ``` + + **/another_rootfs/usr/bin/remote_kill**: + + ``` bash + #!/bin/bash + /usr/bin/rexec /usr/bin/kill $* + ``` + + **/another_rootfs/usr/sbin/modprobe**: + + ``` bash + #!/bin/bash + /usr/bin/rexec /usr/sbin/modprobe $* + ``` + + After the creation is complete, grant execute permission to them. + + ``` bash + chmod +x /another_rootfs/usr/local/bin/containerd-shim + chmod +x /another_rootfs/usr/bin/remote_kill + chmod +x /another_rootfs/usr/sbin/modprobe + ``` + +#### 4.3.2.3 Mounting Directories + +Run the [prepare.sh](./config/prepare.sh) script on the DPU to mount the HOST directories required by dockerd and containerd to the DPU. + +In addition, ensure that the remote directories mounted by the script exist on both the HOST and DPU. + +## 4.4 dockerd and containerd Startup + +On the DPU, open two sessions and chroot them to the **/another_rootfs** required for running dockerd and containerd. + +``` bash +chroot /another_rootfs +``` + +Run the following commands in the two sessions to start containerd and then dockerd: + +**containerd** + +``` bash +#!/bin/bash +SHIM_HOST=${YOUR_SERVER_IP} containerd --config /var/run/docker/containerd/containerd.toml --address /var/run/containerd/containerd.sock +``` + +**dockerd** + +``` bash +#!/bin/bash +# this need to be done once +/usr/bin/rexec mount -t qtfs /var/lib/docker/overlay2 /another_rootfs/var/lib/docker/overlay2/ +SHIM_HOST=${YOUR_SERVER_IP} /usr/bin/dockerd --containerd /var/run/containerd/containerd.sock -s overlay2 --iptables=false --debug 2>&1 | tee docker.log +``` + +Because **/var/run/** and **/another_rootfs/var/run/** have been bind-mounted, you can access the **docker.sock** interface through Docker in a normal rootfs to manage containers. + +# 5 Environment Restoration + +To unmount related directories, delete the existing containers, stop containerd and dockerd, and run the following commands: + +``` bash +for i in `lsof | grep v1.linux | awk '{print $2}'` +do + kill -9 $i +done +mount | grep qtfs | awk '{print $3}' | xargs umount +mount | grep another_rootfs | awk '{print $3}' | xargs umount + +sleep 1 + +umount /another_rootfs/etc +umount /another_rootfs/sys +pkill udsproxyd +rmmod qtfs +``` diff --git a/docs/en/server/diversified_computing/dpu_offload/figures/arch.png b/docs/en/server/diversified_computing/dpu_offload/figures/arch.png new file mode 100644 index 0000000000000000000000000000000000000000..b6a7836fd6fab75009e781ac1ed96c73c352f75b Binary files /dev/null and b/docs/en/server/diversified_computing/dpu_offload/figures/arch.png differ diff --git a/docs/en/server/diversified_computing/dpu_offload/figures/offload-arch.png b/docs/en/server/diversified_computing/dpu_offload/figures/offload-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..b0f7b8587c47838880bcca5d6694f66a16ec0aaf Binary files /dev/null and b/docs/en/server/diversified_computing/dpu_offload/figures/offload-arch.png differ diff --git a/docs/en/server/diversified_computing/dpu_offload/figures/qtfs-arch.png b/docs/en/server/diversified_computing/dpu_offload/figures/qtfs-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..749b007287d8503badcea52036b7a71b06092bc2 Binary files /dev/null and b/docs/en/server/diversified_computing/dpu_offload/figures/qtfs-arch.png differ diff --git a/docs/en/server/diversified_computing/dpu_offload/libvirt_direct_connection_aggregation_environment_establishment.md b/docs/en/server/diversified_computing/dpu_offload/libvirt_direct_connection_aggregation_environment_establishment.md new file mode 100644 index 0000000000000000000000000000000000000000..32b5bf1bbbc42a369a08a65a1f0510581aea2555 --- /dev/null +++ b/docs/en/server/diversified_computing/dpu_offload/libvirt_direct_connection_aggregation_environment_establishment.md @@ -0,0 +1,365 @@ +# 1 Hardware Preparation + +## Test Mode + +Prepare two physical machines (VMs have not been tested) that can communicate with each other. + +One physical machine functions as the DPU, and the other functions as the host. In this document, DPU and HOST refer to the two physical machines. + +>[!NOTE] **NOTE:** +>In the test mode, network ports are exposed without connection authentication, which is risky and should be used only for internal tests and verification. Do not use this mode in the production environment. +>In the production environment, use closed communication to prevent external connections, such as the vsock mode. + +## vsock mode + +The DPU and HOST are required. The DPU must be able to provide vsock communication through virtio. + +This document describes only the test mode usage. If vsock communication is supported in the test environment (virtual environment or DPU-HOST environment that supports vsock), the following test procedure is applicable, except that you need to change the IP addresses to the vsock CIDs (**TEST_MODE** is not required for binary file compilation). + +# 2 libvirt offload architecture + +![arch](./figures/arch.png) + +# 3 Environment Setup + +## 3.1 qtfs File System Deployment + +For details, visit . + +To establish a qtfs connection, you need to disable the firewall between the DPU and HOST, or open related network ports on the firewall. + +## 3.2 Deploying the udsproxyd Service + +### 3.2.1 Introduction + +udsproxyd is a cross-host Unix domain socket (UDS) proxy service, which needs to be deployed on both the host and DPU. The udsproxyd components on the host and dpu are peers. They implement seamless UDS communication between the host and DPU, which means that if two processes can communicate with each other through UDSs on the same host, they can do the same between the host and DPU. The code of the processes does not need to be modified, only that the client process needs to run with the **LD_PRELOAD=libudsproxy.so** environment variable. As a cross-host Unix socket service, udsproxyd can be used by running with `LD_PRELOAD=libudsproxy.so`. With the support of qtfs, udsproxyd can also be used transparently. You need to configure the allowlist in advance. The specific operations are described later. + +### 3.2.2 Deploying udsproxyd + +Build udsproxyd in the dpu-utilities project: + +```bash +cd qtfs/ipc +make -j UDS_TEST_MODE=1 && make install +``` + +>If the vsock mode is used, you do not need to set **UDS_TEST_MODE** during compilation. + +The engine service on the qtfs server has incorporated the udsproxyd feature. You do not need to manually start udsproxyd if the qtfs server is deployed. However, you need to start udsproxyd on the client by running the following command: + +```bash +nohup /usr/bin/udsproxyd 2>&1 & +``` + +Parameters: + +```bash +thread num: number of threads. Currently, only one thread is supported. +addr: IP address of the host. If the vsock communication mode is used, the value is the CID. +port: Port used on the host. +peer addr: IP address of the udsproxyd peer. If the vsock communication mode is used, the value is the CID. +peer port: port used on the udsproxyd peer. +``` + +Example: + +```bash +nohup /usr/bin/udsproxyd 1 192.168.10.10 12121 192.168.10.11 12121 2>&1 & +``` + +If the qtfs engine service is not started, you can start udsproxyd on the server to test udsproxyd separately. Run the following command: + +```bash +nohup /usr/bin/udsproxyd 1 192.168.10.11 12121 192.168.10.10 12121 2>&1 & +``` + +### 3.2.3 Using udsproxyd + +#### 3.2.3.1 Using udsproxyd Independently + +When starting the client process of the Unix socket application that uses the UDS service, add the **LD_PRELOAD=libudsproxy.so** environment variable to intercept the **connect** API of glibc for UDS interconnection. In the libvirt offload scenario, you can copy **libudsproxy.so**, which will be used by the libvirtd service, to the **/usr/lib64** directory in the chroot directory of libvirt. + +#### 3.2.3.2 Using the udsproxyd Service Transparently + +Configure the UDS service allowlist for qtfs. The allowlist is the sock file address bound to the Unix socket server. For example, the files of the Unix socket server created by the libvirt VM are in the **/var/lib/libvirt** directory. In this case, add the directory path to the allowlist in either of the following ways: + +* Load the allowlist by using the `qtcfg` utility. First compile the utility in **qtfs/qtinfo**. + +Run the following command on the qtfs client: + +```bash +make role=client +make install +``` + +Run the following command on the qtfs server: + +```bash +make role=server +make install +``` + +After `qtcfg` is installed automatically, run `qtcfg` to configure the allowlist. Assume that **/var/lib/libvirt** needs to be added to the allowlist: + +```bash +qtcfg -w udsconnect -x /var/lib/libvirt/ +``` + +Query the allowlist: + +```bash +qtcfg -w udsconnect -z +``` + +Delete an allowlist entry: + +```bash +qtcfg -w udsconnect -y 0 +``` + +The parameter is the index number listed when you query the allowlist. + +* Add an allowlist entry through the configuration file. The configuration file needs to be set before the qtfs or qtfs_server kernel module is loaded. The allowlist is loaded when the kernel modules are initialized. + +>[!NOTE] **NOTE:** +>The allowlist prevents irrelevant Unix sockets from establishing remote connections, causing errors or wasting resources. You are advised to set the allowlist as precisely as possible. For example, in this document, **/var/lib/libvirt** is set in the libvirt scenario. It would be risky to directly add **/var/lib**, **/var**, or the root directory. + +## 3.3 rexec Service Deployment + +### 3.3.1 Introduction + +rexec is a remote execution component developed using the C language. It consists of the rexec client and rexec server. The server is a daemon process, and the client is a binary file. After being started, the client establishes a UDS connection with the server using the udsproxyd service, and the server daemon process starts a specified program on the server machine. During libvirt virtualization offload, libvirtd is offloaded to the DPU. When libvirtd needs to start the QEMU process on the HOST, the rexec client is invoked to remotely start the process. + +### 3.3.2 Deploying rexec + +#### 3.3.2.1 Configuring the Environment Variables and Allowlist + +Configure the rexec server allowlist on the host. Put the **whitelist** file in the **/etc/rexec** directory, and change the file permission to read-only. + +```bash +chmod 400 /etc/rexec/whitelist +``` + +In the test environment, the allowlist is not mandatory. You can disable the allowlist by deleting the **whitelist** file and restarting the rexec_server process. + +After downloading the dpu-utilities code, go to the **qtfs/rexec** directory and run `make && make install` to install all binary files required by rexec (**rexec** and **rexec_server**) to the **/usr/bin** directory. + +Before starting the rexec_server service on the server, check whether the **/var/run/rexec** directory exists. If not, create it. + +```bash +mkdir /var/run/rexec +``` + +The underlying communication of the rexec service uses Unix sockets. Therefore, cross-host communication between rexec and rexec_server depends on the udsproxyd service, and the related files need to be added to the udsproxy allowlist. + +```bash +qtcfg -w udsconnect -x /var/run/rexec +``` + +#### 3.3.2.2 Starting the Service + +You can start the rexec_server service on the server in either of the following ways. + +* Method 1: +Configure rexec as a systemd service. + +Add the **[rexec.service](./config/rexec.service)** file to **/usr/lib/systemd/system**. + +Then, use `systemctl` to manage the rexec service. + +Start the service for the first time: + +```bash +systemctl daemon-reload + +systemctl enable --now rexec +``` + +Restart the service: + +```bash +systemctl stop rexec + +systemctl start rexec +``` + +* Method 2: +Manually start the service in the background. + +```bash +nohup /usr/bin/rexec_server 2>&1 & +``` + +## 3.4 libvirt Service Deployment + +### 3.4.1 Deploying on the HOST + +Install the VM runtime and libvirt. (libvirt is installed to create related directories.) + +```bash +yum install -y qemu libvirt edk2-aarch64 # (required for starting VMs in the Arm environment) +``` + +Put the VM image on the HOST. The VM image will be mounted to the client through qtfs and shared with libvirt. + +### 3.4.2 Deploying on the DPU + +#### 3.4.2.1 Creating the Chroot Environment + +(a) Download the QCOW image from the openEuler official website, for example, openEuler 22.03 LTS: . + +(b) Mount the QCOW2 image. + +```bash +cd /root/ + +mkdir p2 new_root_origin new_root + +modprobe nbd maxport=8 + +qemu-nbd -c /dev/nbd0 xxx.qcow2 + +mount /dev/nbd0p2 /root/p2 + +cp -rf /root/p2/* /root/new_root_origin/ + +umount /root/p2 + +qemu-nbd -d /dev/nbd0 +``` + +(c) Now, the root directory of the image is decompressed in **new_root_origin**. Bind mount **new_root** to **new_root_origin** as the mount point for chroot. + +```bash +mount --bind /root/new_root_origin /root/new_root +``` + +#### 3.4.2.2 Installing libvirt + +Compile the source code with a patch. + +(a) Go to the chroot environment and install the compilation environment and common tools. + +```bash +yum groupinstall "Development tools" -y +yum install -y vim meson qemu qemu-img strace edk2-aarch64 tar +``` + +**edk2-aarch64** is required for starting VMs in the Arm environment. + +(b) Install the dependency packages required for libvirt compilation. + +```bash + yum install -y rpcgen python3-docutils glib2-devel gnutls-devel libxml2-devel libpciaccess-devel libtirpc-devel yajl-devel systemd-devel dmidecode glusterfs-api numactl +``` + +(c) Download the libvirt-6.9.0 source code package . + +(d) Obtain the libvirt patch: + +. + +(e) Decompress the source code package to a directory in the chroot environment, for example, **/home**, and apply the patch. + +(f) Go to the **libvirt-6.9.0** directory and run the following command: + +```bash +meson build --prefix=/usr -Ddriver_remote=enabled -Ddriver_network=enabled -Ddriver_qemu=enabled -Dtests=disabled -Ddocs=enabled -Ddriver_libxl=disabled -Ddriver_esx=disabled -Dsecdriver_selinux=disabled -Dselinux=disabled +``` + +(g) Complete the installation. + +```bash +ninja -C build install +``` + +#### 3.4.2.3 Starting the libvirtd Service + +To use libvirt direct connection aggregation, you need to start the libvirtd service in the chroot environment, which requires the libvirtd service outside the chroot environment to be stopped. + +(a) Put the [VM jumper script](./scripts/qemu-kvm) in **/usr/bin** and **/usr/libexec** in the chroot environment to replace the **qemu-kvm** binary file. The jumper script will call rexec to start a remote VM. +>[!NOTE] **NOTE:** +>In the XML file of virsh, set **\** under **\** to **qemu-kvm**. If you set **\** to another value, change it to **qemu-kvm** or replace the binary file specified by **\** with the jumper script. The content of the jumper script also needs to be modified accordingly. + +(b) Copy the **libudsproxy.so** file generated during udsproxyd compilation to the **/usr/lib64** directory in the chroot directory. If the udsproxyd service is used by configuring the UDS allowlist of qtfs, you do not need to copy the **libudsproxy.so** file. + +(c) Save the **rexec** binary file generated during rexec compilation to the **/usr/bin** directory of the chroot environment. + +(d) To configure the chroot mounting environment, you need to mount some directories. Use the following scripts: + +* [virt_start.sh](./scripts/virt_start.sh) is the configuration script. In the script, you need to manually change the **qtfs.ko** path to the path of the compiled **.ko** file and set the correct HOST IP address. +* [virt_umount.sh](./scripts/virt_umount.sh) is the configuration revert script. + +(e) The mount directories in the script are based on the examples in this document. You can modify the paths in the script as required. + +(f) After the chroot environment is configured, enter the chroot environment and manually start libvirtd. + +If qtfs is not configured to use the udsproxyd allowlist, run the following commands: + +```bash +LD_PRELOAD=/usr/lib64/libudsproxy.so virtlogd -d +LD_PRELOAD=/usr/lib64/libudsproxy.so libvirtd -d +``` + +If qtfs is configured to use the udsproxyd allowlist, the LD_PRELOAD prefix is not required: + +```bash +virtlogd -d +libvirtd -d +``` + +To check whether the allowlist is configured, run the following command in another terminal that is not in the chroot environment: + +```bash +qtcfg -z +``` + +Check whether the allowlist contains **/var/lib/libvirt**. + +## 3.5 VM Startup + +After the service is deployed, you can manage the VM life cycle from the DPU. + +### 3.5.1 Defining the VM + +(a) Place the VM boot image in a directory on the HOST, for example: + +```bash +/home/VMs/Domain_name +``` + +(b) Use qtfs to mount the directory to the DPU. + +```bash +mount -t qtfs /home/VMs /home/VMs +``` + +(c) In the XML file, **/home/VMs/Domain_name** is used as the boot image. In this way, the same image file is presented to the DPU and HOST (**Domain_name** is the VM **domain**). + +(d) Check whether **\** in the XML file points to the jumper script. + +(e) Define the VM. + +```bash +virsh define xxx.xml +``` + +### 3.5.2 Starting the VM + +```bash +virsh start domain +``` + +# 4 Environment Reset + +Some libvirt directories are shared between the DPU and the HOST. Therefore, you need to unmount these directories before uninstalling the environment. Generally, stop the libvirtd and virtlogd processes and run the **virt_umount.sh** script. If a VM is running on the HOST, stop the VM before unmounting the directories. + +# 5 Common Errors + +1. libvirt compilation failure: Check whether the dependency packages are installed. If an external directory or HOST directory is mounted to the chroot environment, the compilation may fail. In this case, unmount the directory first. + +2. qtfs mounting failure: The engine process on the server is not started or the firewall is not disabled. As a result, the qtfs connection fails. + +3. VM definition failure: Check whether the emulator in the XML file points to the jumper script, whether the VM image has been mounted to the DPU through qtfs, and whether the path is the same as that on the HOST. + +4. VM startup failure: Check whether the libvirtd and virtlogd services are started, whether the rexec service is started, whether the jumper process is started, and whether an error is reported when qemu-kvm is started. diff --git a/docs/en/server/diversified_computing/dpu_offload/public_sys-resources/icon-note.gif b/docs/en/server/diversified_computing/dpu_offload/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/server/diversified_computing/dpu_offload/public_sys-resources/icon-note.gif differ diff --git a/docs/en/server/diversified_computing/dpu_offload/qtfs_architecture_and_usage.md b/docs/en/server/diversified_computing/dpu_offload/qtfs_architecture_and_usage.md new file mode 100644 index 0000000000000000000000000000000000000000..7fe0544418ae42a58daab9eb2e091f945d944416 --- /dev/null +++ b/docs/en/server/diversified_computing/dpu_offload/qtfs_architecture_and_usage.md @@ -0,0 +1,77 @@ +# qtfs Shared File System Architecture and Usage + +## Introduction + +qtfs is a shared file system project. It can be deployed on either a host-DPU hardware architecture or on two hosts. qtfs works in client-server mode, allowing the client to access specified file systems on the server in the same way that local files are accessed. + +qtfs provides the following features: + ++ Mount point propagation + ++ Sharing of special file systems such as proc, sys, and cgroup + ++ Shared read and write of remote files + ++ Remote mounting of server file systems on the client + ++ Customized processing of special files + ++ Remote FIFO, Unix sockets, and epoll that allow the client and server to access the files as if they were like local + ++ Bottom-layer host-DPU communication over the PCIe protocol, outperforming the network + ++ Kernel module development, preventing intrusive modification to the kernel + +## Software Architecture + +![qtfs-arch](./figures/qtfs-arch.png) + +## Installation + +Perform operations in the following qtfs-related directories: + ++ **qtfs**: code of the client kernel module. Compile the client **.ko** file in this directory. + ++ **qtfs_server**: code of the server kernel module. Compile the server **.ko** files and related programs in this directory. + ++ **qtinfo**: diagnosis tool that is used to check the status of file systems and change the log level. + ++ **demo**, **test**, and **doc**: demo programs, test programs, and project documents. + ++ Root directory: code of common modules used by the client and server. + +Configure the kernel compilation environment on two servers (or VMs). + +1. The kernel version must be 5.10 or later. +2. Install the kernel development package by running `yum install kernel-devel`. +3. Assume that the host IP address is 192.168.10.10 and the DPU IP address is 192.168.10.11. + +Install the qtfs server. + +```bash + 1. cd qtfs_server + 2. make clean && make + 3. insmod qtfs_server.ko qtfs_server_ip=192.168.10.10 qtfs_server_port=12345 qtfs_log_level=WARN + 4. nohup ./engine 16 1 192.168.10.10 12121 192.168.10.11 12121 2>&1 & +``` + +Install the qtfs client. + +```bash + 1. cd qtfs + 2. make clean && make + 3. insmod qtfs.ko qtfs_server_ip=192.168.10.10 qtfs_server_port=12345 qtfs_log_level=WARN + 4. cd ../ipc/ + 5. make clean && make && make install + 6. nohup udsproxyd 1 192.168.10.11 12121 192.168.10.10 12121 2>&1 & +``` + +## Usage + +After the installation is complete, mount the server file system to the client. For example: + +```bash + mount -t qtfs / /root/mnt/ +``` + +The file system is visible to the client. Access **/root/mnt** on the client to view and operate files on the server. diff --git a/docs/en/server/diversified_computing/dpu_offload/scripts/qemu-kvm b/docs/en/server/diversified_computing/dpu_offload/scripts/qemu-kvm new file mode 100644 index 0000000000000000000000000000000000000000..e869371be109b57f59709fc23bc5b1cb2002cfbf --- /dev/null +++ b/docs/en/server/diversified_computing/dpu_offload/scripts/qemu-kvm @@ -0,0 +1,3 @@ +#!/bin/bash + +exec /usr/bin/rexec /usr/bin/qemu-kvm $* diff --git a/docs/en/server/diversified_computing/dpu_offload/scripts/virt_start.sh b/docs/en/server/diversified_computing/dpu_offload/scripts/virt_start.sh new file mode 100644 index 0000000000000000000000000000000000000000..06ca194b7a639a947b6e395f116beeba7c897459 --- /dev/null +++ b/docs/en/server/diversified_computing/dpu_offload/scripts/virt_start.sh @@ -0,0 +1,48 @@ +#!/bin/bash +insmod ./qtfs.ko qtfs_server_ip=192.168.10.11 qtfs_log_level=NONE + +systemctl stop libvirtd + +if [ ! -d "/root/new_root/local_proc" ]; then + mkdir -p /root/new_root/local_proc +fi +if [ ! -d "/root/new_root/local" ]; then + mkdir -p /root/new_root/local +fi +mount -t proc proc /root/new_root/local_proc/ +mount -t proc proc /root/new_root/local/proc +mount -t sysfs sysfs /root/new_root/local/sys +mount --bind /var/run/ /root/new_root/var/run/ +mount --bind /var/lib/ /root/new_root/var/lib/ +mount --bind /var/cache/ /root/new_root/var/cache +mount --bind /etc /root/new_root/etc + +mkdir -p /root/new_root/home/VMs/ +mount -t qtfs /home/VMs/ /root/new_root/home/VMs/ + +mount -t qtfs /var/lib/libvirt /root/new_root/var/lib/libvirt + +mount -t devtmpfs devtmpfs /root/new_root/dev/ +mount -t hugetlbfs hugetlbfs /root/new_root/dev/hugepages/ +mount -t mqueue mqueue /root/new_root/dev/mqueue/ +mount -t tmpfs tmpfs /root/new_root/dev/shm + +mount -t sysfs sysfs /root/new_root/sys +mkdir -p /root/new_root/sys/fs/cgroup +mount -t tmpfs tmpfs /root/new_root/sys/fs/cgroup +list="perf_event freezer files net_cls,net_prio hugetlb pids rdma cpu,cpuacct memory devices blkio cpuset" +for i in $list +do + echo $i + mkdir -p /root/new_root/sys/fs/cgroup/$i + mount -t cgroup cgroup -o rw,nosuid,nodev,noexec,relatime,$i /root/new_root/sys/fs/cgroup/$i +done + +## common system dir +mount -t qtfs -o proc /proc /root/new_root/proc +echo "proc" + +mount -t qtfs /sys /root/new_root/sys +echo "cgroup" +mount -t qtfs /dev/pts /root/new_root/dev/pts +mount -t qtfs /dev/vfio /root/new_root/dev/vfio diff --git a/docs/en/server/diversified_computing/dpu_offload/scripts/virt_umount.sh b/docs/en/server/diversified_computing/dpu_offload/scripts/virt_umount.sh new file mode 100644 index 0000000000000000000000000000000000000000..4adddec913c23069c6bffddec0bf1770f8c5ce71 --- /dev/null +++ b/docs/en/server/diversified_computing/dpu_offload/scripts/virt_umount.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +umount /root/new_root/dev/hugepages +umount /root/new_root/etc +umount /root/new_root/home/VMs +umount /root/new_root/local_proc +umount /root/new_root/local/proc +umount /root/new_root/var/lib/libvirt +umount /root/new_root/var/lib +umount /root/new_root/* +umount /root/new_root/dev/pts +umount /root/new_root/dev/mqueue +umount /root/new_root/dev/shm +umount /root/new_root/dev/vfio +umount /root/new_root/dev +rmmod qtfs + +umount /root/new_root/sys/fs/cgroup/* +umount /root/new_root/sys/fs/cgroup +umount /root/new_root/sys diff --git a/docs/en/server/high_availability/ha/_toc.yaml b/docs/en/server/high_availability/ha/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..fec7afaaf83868aa7a1864731bc97a7e19bd441e --- /dev/null +++ b/docs/en/server/high_availability/ha/_toc.yaml @@ -0,0 +1,8 @@ +label: HA User Guide +isManual: true +description: HA cluster installation and usage +sections: + - label: HA Installation and Deployment + href: ./ha_installation_and_deployment.md + - label: HA Usage Examples + href: ./ha_usecase_examples.md diff --git a/docs/en/server/high_availability/ha/figures/.keep b/docs/en/server/high_availability/ha/figures/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/en/server/high_availability/ha/figures/1.png b/docs/en/server/high_availability/ha/figures/1.png new file mode 100644 index 0000000000000000000000000000000000000000..40af4242eebb440a76c749a8d970d50cd7b89bf4 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/1.png differ diff --git a/docs/en/server/high_availability/ha/figures/10.png b/docs/en/server/high_availability/ha/figures/10.png new file mode 100644 index 0000000000000000000000000000000000000000..e588ffbe3d8d7b66d92ae8f2b4bcec7c80d0592c Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/10.png differ diff --git a/docs/en/server/high_availability/ha/figures/11.png b/docs/en/server/high_availability/ha/figures/11.png new file mode 100644 index 0000000000000000000000000000000000000000..1989a5bb08155f920363e154e68bb148715c7e9e Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/11.png differ diff --git a/docs/en/server/high_availability/ha/figures/12.png b/docs/en/server/high_availability/ha/figures/12.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6346161182d2cfeaf3818d5ec518ddb11c732e Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/12.png differ diff --git a/docs/en/server/high_availability/ha/figures/13.png b/docs/en/server/high_availability/ha/figures/13.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7def1fb66c90da62acde799eaffca97e3b5396 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/13.png differ diff --git a/docs/en/server/high_availability/ha/figures/14.png b/docs/en/server/high_availability/ha/figures/14.png new file mode 100644 index 0000000000000000000000000000000000000000..3a27a66d57e284775420d467f90dcc02889bbffe Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/14.png differ diff --git a/docs/en/server/high_availability/ha/figures/15.png b/docs/en/server/high_availability/ha/figures/15.png new file mode 100644 index 0000000000000000000000000000000000000000..370bea32abcaa8a2b06a1a61c1455d4b35f43474 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/15.png differ diff --git a/docs/en/server/high_availability/ha/figures/16.png b/docs/en/server/high_availability/ha/figures/16.png new file mode 100644 index 0000000000000000000000000000000000000000..812ee462669c5263ef4bffc49ca4f9b6af4541c6 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/16.png differ diff --git a/docs/en/server/high_availability/ha/figures/17.png b/docs/en/server/high_availability/ha/figures/17.png new file mode 100644 index 0000000000000000000000000000000000000000..36e524b806874fa3788f5e4dcd78350686281107 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/17.png differ diff --git a/docs/en/server/high_availability/ha/figures/18.png b/docs/en/server/high_availability/ha/figures/18.png new file mode 100644 index 0000000000000000000000000000000000000000..51b32442980aa60646f77dabd53ade74f55891fe Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/18.png differ diff --git a/docs/en/server/high_availability/ha/figures/19.png b/docs/en/server/high_availability/ha/figures/19.png new file mode 100644 index 0000000000000000000000000000000000000000..c9457d09aa9f1662b2c9e4550cdbdb9f57dd020e Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/19.png differ diff --git a/docs/en/server/high_availability/ha/figures/2.png b/docs/en/server/high_availability/ha/figures/2.png new file mode 100644 index 0000000000000000000000000000000000000000..97917cc245484a43bec8562757d920a06f123121 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/2.png differ diff --git a/docs/en/server/high_availability/ha/figures/20.png b/docs/en/server/high_availability/ha/figures/20.png new file mode 100644 index 0000000000000000000000000000000000000000..b0943189920d7a541d35da27340593ea93f92a17 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/20.png differ diff --git a/docs/en/server/high_availability/ha/figures/21.png b/docs/en/server/high_availability/ha/figures/21.png new file mode 100644 index 0000000000000000000000000000000000000000..e590c22c0ea28906b5f4ea7ccbc6ab11e47ad173 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/21.png differ diff --git a/docs/en/server/high_availability/ha/figures/22.png b/docs/en/server/high_availability/ha/figures/22.png new file mode 100644 index 0000000000000000000000000000000000000000..03a548b1ffb1f0ad53cfa5387af2721af90bca81 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/22.png differ diff --git a/docs/en/server/high_availability/ha/figures/23.png b/docs/en/server/high_availability/ha/figures/23.png new file mode 100644 index 0000000000000000000000000000000000000000..834c492094715cde1c02c91752ecabfe7921ed62 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/23.png differ diff --git a/docs/en/server/high_availability/ha/figures/24.png b/docs/en/server/high_availability/ha/figures/24.png new file mode 100644 index 0000000000000000000000000000000000000000..1881e868b74a60888b319576fa38fb4af92ba75c Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/24.png differ diff --git a/docs/en/server/high_availability/ha/figures/25.png b/docs/en/server/high_availability/ha/figures/25.png new file mode 100644 index 0000000000000000000000000000000000000000..f38839725d27a3486984d152e5d9de305364fbd2 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/25.png differ diff --git a/docs/en/server/high_availability/ha/figures/26.png b/docs/en/server/high_availability/ha/figures/26.png new file mode 100644 index 0000000000000000000000000000000000000000..6d7957119133ecb98b1b6b104e54a3a4647ec2a5 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/26.png differ diff --git a/docs/en/server/high_availability/ha/figures/27.png b/docs/en/server/high_availability/ha/figures/27.png new file mode 100644 index 0000000000000000000000000000000000000000..3e4733717fdc5172d6479b393005219e65e96df4 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/27.png differ diff --git a/docs/en/server/high_availability/ha/figures/28.png b/docs/en/server/high_availability/ha/figures/28.png new file mode 100644 index 0000000000000000000000000000000000000000..a77772e818e3f6c11acac3b9cfa18bad14a0a48c Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/28.png differ diff --git a/docs/en/server/high_availability/ha/figures/29.png b/docs/en/server/high_availability/ha/figures/29.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f58ffe5855295268298448744e5aadbdc55276 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/29.png differ diff --git a/docs/en/server/high_availability/ha/figures/3.png b/docs/en/server/high_availability/ha/figures/3.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb76b336957020ed6867d908e0a8bdcfc953c52 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/3.png differ diff --git a/docs/en/server/high_availability/ha/figures/30.png b/docs/en/server/high_availability/ha/figures/30.png new file mode 100644 index 0000000000000000000000000000000000000000..d91adefba1753959e90ccf4aa1501ac08d7144bd Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/30.png differ diff --git a/docs/en/server/high_availability/ha/figures/31.png b/docs/en/server/high_availability/ha/figures/31.png new file mode 100644 index 0000000000000000000000000000000000000000..0abef09ab438f5f8cfb68090993f55c493b8c15e Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/31.png differ diff --git a/docs/en/server/high_availability/ha/figures/32.png b/docs/en/server/high_availability/ha/figures/32.png new file mode 100644 index 0000000000000000000000000000000000000000..d567cfbacc07a9eb46ff2c54a68432f45e034e94 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/32.png differ diff --git a/docs/en/server/high_availability/ha/figures/33.png b/docs/en/server/high_availability/ha/figures/33.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5896e2884520672c0bd88d68471b45a09c56fe Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/33.png differ diff --git a/docs/en/server/high_availability/ha/figures/34.png b/docs/en/server/high_availability/ha/figures/34.png new file mode 100644 index 0000000000000000000000000000000000000000..81bc9480fbbd81a97c559d7a6a74274deeab2bd1 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/34.png differ diff --git a/docs/en/server/high_availability/ha/figures/35.png b/docs/en/server/high_availability/ha/figures/35.png new file mode 100644 index 0000000000000000000000000000000000000000..ab2399847a643a87279337704e23fea7609bb211 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/35.png differ diff --git a/docs/en/server/high_availability/ha/figures/36.png b/docs/en/server/high_availability/ha/figures/36.png new file mode 100644 index 0000000000000000000000000000000000000000..536981609b9ae5d32be56bec612f2b3446146184 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/36.png differ diff --git a/docs/en/server/high_availability/ha/figures/37.png b/docs/en/server/high_availability/ha/figures/37.png new file mode 100644 index 0000000000000000000000000000000000000000..e39aa03587642dc1f8622fff515b05a9a3085b28 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/37.png differ diff --git a/docs/en/server/high_availability/ha/figures/38.png b/docs/en/server/high_availability/ha/figures/38.png new file mode 100644 index 0000000000000000000000000000000000000000..838f5ff0616a83cdf42edb053f4e72b93bfa644e Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/38.png differ diff --git a/docs/en/server/high_availability/ha/figures/39.png b/docs/en/server/high_availability/ha/figures/39.png new file mode 100644 index 0000000000000000000000000000000000000000..12a379403d73a47b2fa564120a28fdb58d188963 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/39.png differ diff --git a/docs/en/server/high_availability/ha/figures/4.png b/docs/en/server/high_availability/ha/figures/4.png new file mode 100644 index 0000000000000000000000000000000000000000..5078e36aca713706d2cf08a3ebecdc3769951899 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/4.png differ diff --git a/docs/en/server/high_availability/ha/figures/40.png b/docs/en/server/high_availability/ha/figures/40.png new file mode 100644 index 0000000000000000000000000000000000000000..bf419894eab852b45604966c62fafa71f051c4df Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/40.png differ diff --git a/docs/en/server/high_availability/ha/figures/41.png b/docs/en/server/high_availability/ha/figures/41.png new file mode 100644 index 0000000000000000000000000000000000000000..f94b0ee72e0d4e9277e9b44b4268cfbdb8402104 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/41.png differ diff --git a/docs/en/server/high_availability/ha/figures/42.png b/docs/en/server/high_availability/ha/figures/42.png new file mode 100644 index 0000000000000000000000000000000000000000..3182e551c4e4b03885bad6339f1de514b3f55f8c Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/42.png differ diff --git a/docs/en/server/high_availability/ha/figures/43.jpg b/docs/en/server/high_availability/ha/figures/43.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26e9244f58ea9800081fd61ae135477f05b21b40 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/43.jpg differ diff --git a/docs/en/server/high_availability/ha/figures/44.png b/docs/en/server/high_availability/ha/figures/44.png new file mode 100644 index 0000000000000000000000000000000000000000..c3abaecd6e053272d81e0ad9bd183c6858b4f3c5 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/44.png differ diff --git a/docs/en/server/high_availability/ha/figures/45.png b/docs/en/server/high_availability/ha/figures/45.png new file mode 100644 index 0000000000000000000000000000000000000000..86b051acde857c88479714414f721a7f59cca483 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/45.png differ diff --git a/docs/en/server/high_availability/ha/figures/46.png b/docs/en/server/high_availability/ha/figures/46.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ec41c87628bf28c9905523f99ae93aebd13614 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/46.png differ diff --git a/docs/en/server/high_availability/ha/figures/47.jpg b/docs/en/server/high_availability/ha/figures/47.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf95f03c8ea0f84a878bc63af20972c9da71bc04 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/47.jpg differ diff --git a/docs/en/server/high_availability/ha/figures/48.png b/docs/en/server/high_availability/ha/figures/48.png new file mode 100644 index 0000000000000000000000000000000000000000..ef21fa1ce1e2e9848a8dca16e692de673df7c6d7 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/48.png differ diff --git a/docs/en/server/high_availability/ha/figures/49.png b/docs/en/server/high_availability/ha/figures/49.png new file mode 100644 index 0000000000000000000000000000000000000000..3b77668e5a4d1bdb3043c473dff9b36fa7144714 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/49.png differ diff --git a/docs/en/server/high_availability/ha/figures/5.png b/docs/en/server/high_availability/ha/figures/5.png new file mode 100644 index 0000000000000000000000000000000000000000..2976a745cfaede26594d6daa01cfc18d18b1de8b Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/5.png differ diff --git a/docs/en/server/high_availability/ha/figures/50.png b/docs/en/server/high_availability/ha/figures/50.png new file mode 100644 index 0000000000000000000000000000000000000000..b86a55fe4363f56fc18befc9d27025a75ca427ad Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/50.png differ diff --git a/docs/en/server/high_availability/ha/figures/51.png b/docs/en/server/high_availability/ha/figures/51.png new file mode 100644 index 0000000000000000000000000000000000000000..d427ac871dba9c32eb4ffe736d5352f8408da533 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/51.png differ diff --git a/docs/en/server/high_availability/ha/figures/52.png b/docs/en/server/high_availability/ha/figures/52.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca0a2db05c70bc25f9bb59e82d074f671cfc74e Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/52.png differ diff --git a/docs/en/server/high_availability/ha/figures/53.png b/docs/en/server/high_availability/ha/figures/53.png new file mode 100644 index 0000000000000000000000000000000000000000..76fbc34a1d5621b83c2d8c93222766acad33350d Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/53.png differ diff --git a/docs/en/server/high_availability/ha/figures/54.png b/docs/en/server/high_availability/ha/figures/54.png new file mode 100644 index 0000000000000000000000000000000000000000..49ecae6f8941a118223f3765c23015df074c4983 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/54.png differ diff --git a/docs/en/server/high_availability/ha/figures/56.png b/docs/en/server/high_availability/ha/figures/56.png new file mode 100644 index 0000000000000000000000000000000000000000..36fee795bfe593b6246c8d6c2bddea9386b06f45 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/56.png differ diff --git a/docs/en/server/high_availability/ha/figures/57.png b/docs/en/server/high_availability/ha/figures/57.png new file mode 100644 index 0000000000000000000000000000000000000000..539d06b77b058a933cb154c43641d498050986e0 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/57.png differ diff --git a/docs/en/server/high_availability/ha/figures/58.png b/docs/en/server/high_availability/ha/figures/58.png new file mode 100644 index 0000000000000000000000000000000000000000..396ca16d873e54505bcdbd41d669366eea7f5dee Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/58.png differ diff --git a/docs/en/server/high_availability/ha/figures/59.png b/docs/en/server/high_availability/ha/figures/59.png new file mode 100644 index 0000000000000000000000000000000000000000..9b1de98ac4fe686937ca844d3e9481548a79ce63 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/59.png differ diff --git a/docs/en/server/high_availability/ha/figures/6.png b/docs/en/server/high_availability/ha/figures/6.png new file mode 100644 index 0000000000000000000000000000000000000000..275c23872f2353f007371672714902babcc3db53 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/6.png differ diff --git a/docs/en/server/high_availability/ha/figures/60.jpg b/docs/en/server/high_availability/ha/figures/60.jpg new file mode 100644 index 0000000000000000000000000000000000000000..033c88aaadd04f7d4058ec2eb5b2c70498319bf7 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/60.jpg differ diff --git a/docs/en/server/high_availability/ha/figures/61.png b/docs/en/server/high_availability/ha/figures/61.png new file mode 100644 index 0000000000000000000000000000000000000000..8df17062963a3baf92318a12ec34b1378122687b Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/61.png differ diff --git a/docs/en/server/high_availability/ha/figures/62.png b/docs/en/server/high_availability/ha/figures/62.png new file mode 100644 index 0000000000000000000000000000000000000000..ec312d6c0c22018c1745dd866da71ce9be47fbda Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/62.png differ diff --git a/docs/en/server/high_availability/ha/figures/63.jpg b/docs/en/server/high_availability/ha/figures/63.jpg new file mode 100644 index 0000000000000000000000000000000000000000..504f7cf59768f6fd1cd73a115d01fbc4e15a02e1 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/63.jpg differ diff --git a/docs/en/server/high_availability/ha/figures/63.png b/docs/en/server/high_availability/ha/figures/63.png new file mode 100644 index 0000000000000000000000000000000000000000..86b051acde857c88479714414f721a7f59cca483 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/63.png differ diff --git a/docs/en/server/high_availability/ha/figures/64.png b/docs/en/server/high_availability/ha/figures/64.png new file mode 100644 index 0000000000000000000000000000000000000000..cbbd2ede047e735c3766e08b04595f08cd72f5b2 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/64.png differ diff --git a/docs/en/server/high_availability/ha/figures/7.png b/docs/en/server/high_availability/ha/figures/7.png new file mode 100644 index 0000000000000000000000000000000000000000..4d397959ac7f6d166ef5a3b7084bd5c3c93b475f Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/7.png differ diff --git a/docs/en/server/high_availability/ha/figures/8.png b/docs/en/server/high_availability/ha/figures/8.png new file mode 100644 index 0000000000000000000000000000000000000000..8ade274092d7b3e461c96d7909a9d89d3a944f09 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/8.png differ diff --git a/docs/en/server/high_availability/ha/figures/9.png b/docs/en/server/high_availability/ha/figures/9.png new file mode 100644 index 0000000000000000000000000000000000000000..f7b2215404929346f1a814b0b1d6d482559c08b5 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/9.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-add-resource.png b/docs/en/server/high_availability/ha/figures/HA-add-resource.png new file mode 100644 index 0000000000000000000000000000000000000000..ac24895a1247828d248132f6c789ad8ef51a57e4 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-add-resource.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-apache-show.png b/docs/en/server/high_availability/ha/figures/HA-apache-show.png new file mode 100644 index 0000000000000000000000000000000000000000..c216500910f75f2de1108f6b618c5c08f4df8bae Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-apache-show.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-apache-suc.png b/docs/en/server/high_availability/ha/figures/HA-apache-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..23a7aaa702e3e68190ff7e01a5a673aee2c92409 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-apache-suc.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-api.png b/docs/en/server/high_availability/ha/figures/HA-api.png new file mode 100644 index 0000000000000000000000000000000000000000..f825fe005705d30809d12df97958cff0e5a80135 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-api.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-clone-suc.png b/docs/en/server/high_availability/ha/figures/HA-clone-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..4b6099ccc88d4f6f907a0c4563e729ab2a4dece1 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-clone-suc.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-clone.png b/docs/en/server/high_availability/ha/figures/HA-clone.png new file mode 100644 index 0000000000000000000000000000000000000000..1b09ab73849494f4ffd759fa612ae3c241bd9c1d Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-clone.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-corosync.png b/docs/en/server/high_availability/ha/figures/HA-corosync.png new file mode 100644 index 0000000000000000000000000000000000000000..c4d93242e65c503b6e1b6a457e2517f647984a66 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-corosync.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-firstchoice-cmd.png b/docs/en/server/high_availability/ha/figures/HA-firstchoice-cmd.png new file mode 100644 index 0000000000000000000000000000000000000000..a265bab07f1d8e46d9d965975be180a8de6c9eb2 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-firstchoice-cmd.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-firstchoice.png b/docs/en/server/high_availability/ha/figures/HA-firstchoice.png new file mode 100644 index 0000000000000000000000000000000000000000..bd982ddcea55c629c0257fca86051a9ffa77e7b4 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-firstchoice.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-group-new-suc.png b/docs/en/server/high_availability/ha/figures/HA-group-new-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..437fd01ee83a9a1f65c12838fe56eea8435f6759 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-group-new-suc.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-group-new-suc2.png b/docs/en/server/high_availability/ha/figures/HA-group-new-suc2.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb933bd761f9808de95a324a50226ff041ebd4f Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-group-new-suc2.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-group-new.png b/docs/en/server/high_availability/ha/figures/HA-group-new.png new file mode 100644 index 0000000000000000000000000000000000000000..9c914d0cc2e14f3220fc4346175961f129efb37b Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-group-new.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-group-suc.png b/docs/en/server/high_availability/ha/figures/HA-group-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..2338580343833ebab08627be3a2efbcdb48aef9e Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-group-suc.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-group.png b/docs/en/server/high_availability/ha/figures/HA-group.png new file mode 100644 index 0000000000000000000000000000000000000000..6897817665dee90c0f8c47c6a3cb4bb09db52d78 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-group.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-home-page.png b/docs/en/server/high_availability/ha/figures/HA-home-page.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a7a82dc412250d4c0984b3876c6f93c6aca789 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-home-page.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-login.png b/docs/en/server/high_availability/ha/figures/HA-login.png new file mode 100644 index 0000000000000000000000000000000000000000..65d0ae11ec810da7574ec72bebf6e1b020c94a0d Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-login.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-mariadb-suc.png b/docs/en/server/high_availability/ha/figures/HA-mariadb-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..6f6756c945121715edc623bd9a848bc48ffeb4ca Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-mariadb-suc.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-mariadb.png b/docs/en/server/high_availability/ha/figures/HA-mariadb.png new file mode 100644 index 0000000000000000000000000000000000000000..d29587c8609b9d6aefeb07170901361b5ef8402d Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-mariadb.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-nfs-suc.png b/docs/en/server/high_availability/ha/figures/HA-nfs-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..c0ea6af79e91649f1ad7d97ab6c2a0069a4f4fb8 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-nfs-suc.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-nfs.png b/docs/en/server/high_availability/ha/figures/HA-nfs.png new file mode 100644 index 0000000000000000000000000000000000000000..f6917938eec2e0431a9891c067475dd0b21c1bd9 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-nfs.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-pacemaker.png b/docs/en/server/high_availability/ha/figures/HA-pacemaker.png new file mode 100644 index 0000000000000000000000000000000000000000..7681f963f67d2b803fef6fb2c3247384136201f8 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-pacemaker.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-pcs-status.png b/docs/en/server/high_availability/ha/figures/HA-pcs-status.png new file mode 100644 index 0000000000000000000000000000000000000000..fb150fba9f6258658702b35caacf98076d1fd109 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-pcs-status.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-pcs.png b/docs/en/server/high_availability/ha/figures/HA-pcs.png new file mode 100644 index 0000000000000000000000000000000000000000..283670d7c3d0961ee1cb41345c2b2a013d7143b0 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-pcs.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-refresh.png b/docs/en/server/high_availability/ha/figures/HA-refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..c2678c0c2945acbabfbeae0d5de8924a216bbf31 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-refresh.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-vip-suc.png b/docs/en/server/high_availability/ha/figures/HA-vip-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..313ce56e14f931c78dad4349ed57ab3fd7907f50 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-vip-suc.png differ diff --git a/docs/en/server/high_availability/ha/figures/HA-vip.png b/docs/en/server/high_availability/ha/figures/HA-vip.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b417df2e64527d3b29d0289756dfbb01bf66ec Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/HA-vip.png differ diff --git a/docs/en/server/high_availability/ha/figures/dde-1.png b/docs/en/server/high_availability/ha/figures/dde-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fb1d5177c39262ed182f10a57fdae850d007eeb1 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/dde-1.png differ diff --git a/docs/en/server/high_availability/ha/figures/dde-2.png b/docs/en/server/high_availability/ha/figures/dde-2.png new file mode 100644 index 0000000000000000000000000000000000000000..be5d296937bd17b9646b32c80934aa76738027af Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/dde-2.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-1.png b/docs/en/server/high_availability/ha/figures/gnome-1.png new file mode 100644 index 0000000000000000000000000000000000000000..b33f802aa6dcf8b23a70fe451830015c614193b3 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-1.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-10.png b/docs/en/server/high_availability/ha/figures/gnome-10.png new file mode 100644 index 0000000000000000000000000000000000000000..1c7b1465209c7a92db36d1b4c83445ce45e0d187 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-10.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-11.png b/docs/en/server/high_availability/ha/figures/gnome-11.png new file mode 100644 index 0000000000000000000000000000000000000000..cc534ce5e1b250547dd9eb1db2b3f43a79c00409 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-11.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-12.png b/docs/en/server/high_availability/ha/figures/gnome-12.png new file mode 100644 index 0000000000000000000000000000000000000000..65de953b821cac6b09b9f0d6623760dc339d867b Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-12.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-13.png b/docs/en/server/high_availability/ha/figures/gnome-13.png new file mode 100644 index 0000000000000000000000000000000000000000..103370de2f2d81fe4e880f18bb9a3b4546d14840 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-13.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-14.png b/docs/en/server/high_availability/ha/figures/gnome-14.png new file mode 100644 index 0000000000000000000000000000000000000000..13e1367d6ce006567e69fed8fd334aeb4810196c Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-14.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-15.png b/docs/en/server/high_availability/ha/figures/gnome-15.png new file mode 100644 index 0000000000000000000000000000000000000000..fb86a36e2eb9c5ccfb3c53b0c49864e73c622ccf Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-15.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-16.png b/docs/en/server/high_availability/ha/figures/gnome-16.png new file mode 100644 index 0000000000000000000000000000000000000000..9b375517e433740b7e2c27ede1159cda1eb986b8 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-16.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-17.png b/docs/en/server/high_availability/ha/figures/gnome-17.png new file mode 100644 index 0000000000000000000000000000000000000000..ebfcc9c71afeda1d50b5355f23ec1ea422a17889 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-17.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-18.png b/docs/en/server/high_availability/ha/figures/gnome-18.png new file mode 100644 index 0000000000000000000000000000000000000000..5d28c8372499dd2b9b71186dee7d4854b5320999 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-18.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-19.png b/docs/en/server/high_availability/ha/figures/gnome-19.png new file mode 100644 index 0000000000000000000000000000000000000000..bea391d41386ab9b7953b269c44aec6cba4667c5 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-19.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-2.png b/docs/en/server/high_availability/ha/figures/gnome-2.png new file mode 100644 index 0000000000000000000000000000000000000000..520df0228a38914ca7897dec6dc84e9639b757c0 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-2.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-20.png b/docs/en/server/high_availability/ha/figures/gnome-20.png new file mode 100644 index 0000000000000000000000000000000000000000..d720a2c215de4172a8051d7e0554c7f6b3d6d043 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-20.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-21.png b/docs/en/server/high_availability/ha/figures/gnome-21.png new file mode 100644 index 0000000000000000000000000000000000000000..dec78c390a65a1e707a5c9620fa3392e38124430 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-21.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-22.png b/docs/en/server/high_availability/ha/figures/gnome-22.png new file mode 100644 index 0000000000000000000000000000000000000000..d8564596fd8ada47891a28b8fd97915722b28ff9 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-22.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-23.png b/docs/en/server/high_availability/ha/figures/gnome-23.png new file mode 100644 index 0000000000000000000000000000000000000000..6fcb86d0b74acd102bc4e19bd483165fca0921bc Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-23.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-24.png b/docs/en/server/high_availability/ha/figures/gnome-24.png new file mode 100644 index 0000000000000000000000000000000000000000..692929de10b612af7e15ddef689a611b7f4e8693 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-24.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-25.png b/docs/en/server/high_availability/ha/figures/gnome-25.png new file mode 100644 index 0000000000000000000000000000000000000000..793a5a2d3ec63581902da5d4b8863f9ba33675b8 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-25.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-26.png b/docs/en/server/high_availability/ha/figures/gnome-26.png new file mode 100644 index 0000000000000000000000000000000000000000..4d3f5418352e644f56a16099a9c77218045dabab Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-26.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-27.png b/docs/en/server/high_availability/ha/figures/gnome-27.png new file mode 100644 index 0000000000000000000000000000000000000000..908998f4c4624e8b3317a311643123f690153325 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-27.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-28.png b/docs/en/server/high_availability/ha/figures/gnome-28.png new file mode 100644 index 0000000000000000000000000000000000000000..8b47b2397fa8818dfecbc3c05341e31d4d70a940 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-28.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-29.png b/docs/en/server/high_availability/ha/figures/gnome-29.png new file mode 100644 index 0000000000000000000000000000000000000000..fc90cb58691e6484b6e263f4e81a1046e3adbed1 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-29.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-3.png b/docs/en/server/high_availability/ha/figures/gnome-3.png new file mode 100644 index 0000000000000000000000000000000000000000..4d423b13941604a29ff794817ed6fb1d6fea9c1e Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-3.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-30.png b/docs/en/server/high_availability/ha/figures/gnome-30.png new file mode 100644 index 0000000000000000000000000000000000000000..8f4ab5dcd8ebd61b05a1b129b4c90e342f97e0fd Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-30.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-31.png b/docs/en/server/high_availability/ha/figures/gnome-31.png new file mode 100644 index 0000000000000000000000000000000000000000..93159341a996153105985451fa6d8391c358b52e Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-31.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-32.png b/docs/en/server/high_availability/ha/figures/gnome-32.png new file mode 100644 index 0000000000000000000000000000000000000000..c4ca5695e67a4a585f0ff074cd3645a32a9e4e83 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-32.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-33.png b/docs/en/server/high_availability/ha/figures/gnome-33.png new file mode 100644 index 0000000000000000000000000000000000000000..e0b166e013144ed7e5f26c2b7bd7e8a00ac6a57f Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-33.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-34.png b/docs/en/server/high_availability/ha/figures/gnome-34.png new file mode 100644 index 0000000000000000000000000000000000000000..dc8653255f8782ab72b8a24eeadff8fe64f88bb1 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-34.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-35.png b/docs/en/server/high_availability/ha/figures/gnome-35.png new file mode 100644 index 0000000000000000000000000000000000000000..595c8d76ddc857ed9e76d421cf1e755874a6cc4a Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-35.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-36.png b/docs/en/server/high_availability/ha/figures/gnome-36.png new file mode 100644 index 0000000000000000000000000000000000000000..f5a22198f57d34fe05336d88c6e4b288ed78dc8e Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-36.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-37.png b/docs/en/server/high_availability/ha/figures/gnome-37.png new file mode 100644 index 0000000000000000000000000000000000000000..1a855eee24e959c3e8bfed371d2f74f93fceda3c Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-37.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-38.png b/docs/en/server/high_availability/ha/figures/gnome-38.png new file mode 100644 index 0000000000000000000000000000000000000000..e80fcb9c25299130ca94bef2cdce9d5e7f9ba02c Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-38.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-39.png b/docs/en/server/high_availability/ha/figures/gnome-39.png new file mode 100644 index 0000000000000000000000000000000000000000..29843d242f260cd1b722fdcc13cef645a3679e7f Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-39.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-4.png b/docs/en/server/high_availability/ha/figures/gnome-4.png new file mode 100644 index 0000000000000000000000000000000000000000..04391e2e926d5195b21d7e05dc5322a0d7646ad6 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-4.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-40.png b/docs/en/server/high_availability/ha/figures/gnome-40.png new file mode 100644 index 0000000000000000000000000000000000000000..8497bdd58dffe2210fca22d01912f82b5c39fd9c Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-40.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-41.png b/docs/en/server/high_availability/ha/figures/gnome-41.png new file mode 100644 index 0000000000000000000000000000000000000000..a4357eb95c379dfecc1d627c59eb5da660d42d14 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-41.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-42.png b/docs/en/server/high_availability/ha/figures/gnome-42.png new file mode 100644 index 0000000000000000000000000000000000000000..bc01808fe7c12d7d433dc1da9367e858027fcce9 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-42.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-43.png b/docs/en/server/high_availability/ha/figures/gnome-43.png new file mode 100644 index 0000000000000000000000000000000000000000..467e52cf41a32df9c7207417817f906b518c54c3 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-43.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-44.png b/docs/en/server/high_availability/ha/figures/gnome-44.png new file mode 100644 index 0000000000000000000000000000000000000000..71303b84fce85478ccba02b10f6c0358c5bdc2a0 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-44.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-45.png b/docs/en/server/high_availability/ha/figures/gnome-45.png new file mode 100644 index 0000000000000000000000000000000000000000..a0927659af30d18715ab8b43266de3f54a3142a0 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-45.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-46.png b/docs/en/server/high_availability/ha/figures/gnome-46.png new file mode 100644 index 0000000000000000000000000000000000000000..ad2093e67041d656c25a5674a6e4282c804ec6f2 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-46.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-47.png b/docs/en/server/high_availability/ha/figures/gnome-47.png new file mode 100644 index 0000000000000000000000000000000000000000..9a67dd6b3b0081fa858b4beed0cc40708d5418e9 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-47.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-48.png b/docs/en/server/high_availability/ha/figures/gnome-48.png new file mode 100644 index 0000000000000000000000000000000000000000..8789fcb96ee2143eae12131b07acf1cfbd82cf41 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-48.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-49.png b/docs/en/server/high_availability/ha/figures/gnome-49.png new file mode 100644 index 0000000000000000000000000000000000000000..e5df514480c825a5c65b607721d80cf59642b4a1 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-49.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-5.png b/docs/en/server/high_availability/ha/figures/gnome-5.png new file mode 100644 index 0000000000000000000000000000000000000000..b7148601f06fcee9517864aca19ba3cee863ba33 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-5.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-50.png b/docs/en/server/high_availability/ha/figures/gnome-50.png new file mode 100644 index 0000000000000000000000000000000000000000..7b1f4678846cb691b144b26f24bc5570961a3d7d Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-50.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-51.png b/docs/en/server/high_availability/ha/figures/gnome-51.png new file mode 100644 index 0000000000000000000000000000000000000000..10466de4bbd4c7b31654bb1369a9a85a20e88a27 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-51.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-52.png b/docs/en/server/high_availability/ha/figures/gnome-52.png new file mode 100644 index 0000000000000000000000000000000000000000..16c8191ae59475d46cd7c275ad3841419544397d Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-52.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-53.png b/docs/en/server/high_availability/ha/figures/gnome-53.png new file mode 100644 index 0000000000000000000000000000000000000000..b968bbd5c5df6148ef26c8cf292e040220987554 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-53.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-54.png b/docs/en/server/high_availability/ha/figures/gnome-54.png new file mode 100644 index 0000000000000000000000000000000000000000..6f169f432a1ad4290b3fca12b1a835330d922ab0 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-54.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-55.png b/docs/en/server/high_availability/ha/figures/gnome-55.png new file mode 100644 index 0000000000000000000000000000000000000000..e40794fbf2e23e3496ac7f9352abe84ac943cb8c Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-55.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-56.png b/docs/en/server/high_availability/ha/figures/gnome-56.png new file mode 100644 index 0000000000000000000000000000000000000000..d66360c2865ba03e7f2959612b2e33061dfad39f Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-56.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-57.png b/docs/en/server/high_availability/ha/figures/gnome-57.png new file mode 100644 index 0000000000000000000000000000000000000000..f2ffff79898f36e290bb133efc36c7439d089f57 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-57.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-58.png b/docs/en/server/high_availability/ha/figures/gnome-58.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb30604a6dc2a4194da688830f88d0e596c5be9 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-58.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-59.png b/docs/en/server/high_availability/ha/figures/gnome-59.png new file mode 100644 index 0000000000000000000000000000000000000000..9b25d253604f353b0bd3ef0c153237d74459ccae Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-59.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-6.png b/docs/en/server/high_availability/ha/figures/gnome-6.png new file mode 100644 index 0000000000000000000000000000000000000000..3c54d7f40cb5caab2c3cecb9945f9c89a1afe00e Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-6.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-7.png b/docs/en/server/high_availability/ha/figures/gnome-7.png new file mode 100644 index 0000000000000000000000000000000000000000..fa4b0e178fb0332d334d98e0106746b7bff65449 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-7.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-8.png b/docs/en/server/high_availability/ha/figures/gnome-8.png new file mode 100644 index 0000000000000000000000000000000000000000..5c39bb44371d94a66c66e053a7f498b46d3a0937 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-8.png differ diff --git a/docs/en/server/high_availability/ha/figures/gnome-9.png b/docs/en/server/high_availability/ha/figures/gnome-9.png new file mode 100644 index 0000000000000000000000000000000000000000..00a9ad1a7c94054c9418795c39b29574bfe16bf0 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/gnome-9.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon1.png b/docs/en/server/high_availability/ha/figures/icon1.png new file mode 100644 index 0000000000000000000000000000000000000000..9bac00355cf4aa57d32287fd4271404f6fd3fd4d Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon1.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon10-o.png b/docs/en/server/high_availability/ha/figures/icon10-o.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c56d1a64c588d86f8fe510c74e5a7c4cb810d4 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon10-o.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon101-o.svg b/docs/en/server/high_availability/ha/figures/icon101-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..af1c5d3dc0277a6ea59e71efb6ca97bdfc782e8e --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon101-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/server/high_availability/ha/figures/icon103-o.svg b/docs/en/server/high_availability/ha/figures/icon103-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..c06c885725c569ab8db1fe7d595a7c65f18c5142 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon103-o.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon105-o.svg b/docs/en/server/high_availability/ha/figures/icon105-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..36c49949fa569330b761c2d65518f36c10435508 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon105-o.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon107-o.svg b/docs/en/server/high_availability/ha/figures/icon107-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..fb5a3ea756f6ccb7b3e5c31122a433347a908c96 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon107-o.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon11-o.png b/docs/en/server/high_availability/ha/figures/icon11-o.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1f2cb7f99b583768c7cbd7e05a57f302dbe8a Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon11-o.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon110-o.svg b/docs/en/server/high_availability/ha/figures/icon110-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..7958e3f192061592e002e1e8a1bad06ffa86742c --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon110-o.svg @@ -0,0 +1,12 @@ + + + + reboot_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/icon111-o.svg b/docs/en/server/high_availability/ha/figures/icon111-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..097d16a08d305a8b3f3b2268ab1ea8342e799377 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon111-o.svg @@ -0,0 +1,13 @@ + + + + Right + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/icon112-o.svg b/docs/en/server/high_availability/ha/figures/icon112-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e51628c2b8b10495f3410d219814286696ea2fd5 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon112-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon116-o.svg b/docs/en/server/high_availability/ha/figures/icon116-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..4d79cd6dbbbfd3969f4e0ad0ad88e27398853505 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon116-o.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon12-o.png b/docs/en/server/high_availability/ha/figures/icon12-o.png new file mode 100644 index 0000000000000000000000000000000000000000..f1f0f59dd3879461a0b5bc0632693a4a4124def3 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon12-o.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon120-o.svg b/docs/en/server/high_availability/ha/figures/icon120-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e895c347d16a200aea46b00428b0b9f1a3c94246 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon120-o.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon122-o.svg b/docs/en/server/high_availability/ha/figures/icon122-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..7fb014b5fd6097ca37a84d0b6a27dc982d675c8a --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon122-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/server/high_availability/ha/figures/icon124-o.svg b/docs/en/server/high_availability/ha/figures/icon124-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..960c0ec096c925213f8953398f0e8e5db3cdaed3 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon124-o.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon125-o.svg b/docs/en/server/high_availability/ha/figures/icon125-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..011c05f4b8f296867cd408a339230323fcbb28dd --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon125-o.svg @@ -0,0 +1,9 @@ + + + tips + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/icon126-o.svg b/docs/en/server/high_availability/ha/figures/icon126-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e0a43b6b8beb434090ac0dd3a8fd68c023f11fce --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon126-o.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon127-o.svg b/docs/en/server/high_availability/ha/figures/icon127-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..bed95d35334a8d0151211054236c0bacddcc0dd3 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon127-o.svg @@ -0,0 +1,13 @@ + + + + Up + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/icon128-o.svg b/docs/en/server/high_availability/ha/figures/icon128-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..aa727f3f5d5883b3fb83a79c4b98e8b5bfe4ade6 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon128-o.svg @@ -0,0 +1,12 @@ + + + + userswitch_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/icon13-o.png b/docs/en/server/high_availability/ha/figures/icon13-o.png new file mode 100644 index 0000000000000000000000000000000000000000..c05a981b29d8ad11c6682f796f79b4cafd0f088b Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon13-o.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon132-o.svg b/docs/en/server/high_availability/ha/figures/icon132-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..588ba9d98864ba67a562fa9179f29405f7687aa0 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon132-o.svg @@ -0,0 +1,15 @@ + + + + - + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/icon133-o.svg b/docs/en/server/high_availability/ha/figures/icon133-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..886d90a83e33497d134bdb3dcc864a5c2df53f20 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon133-o.svg @@ -0,0 +1,13 @@ + + + + + + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/icon134-o.svg b/docs/en/server/high_availability/ha/figures/icon134-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..784cf383eb0e8f5c7a57a602047be50ad0a3bc05 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon134-o.svg @@ -0,0 +1,15 @@ + + + + = + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/icon135-o.svg b/docs/en/server/high_availability/ha/figures/icon135-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..cea628a8f5eb92d10661b690242b6de41ca64816 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon135-o.svg @@ -0,0 +1,15 @@ + + + + ~ + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/icon136-o.svg b/docs/en/server/high_availability/ha/figures/icon136-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..24aa139ab2fefaee20935551f1af5aef473719ed --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon136-o.svg @@ -0,0 +1,12 @@ + + + + poweroff_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/icon14-o.png b/docs/en/server/high_availability/ha/figures/icon14-o.png new file mode 100644 index 0000000000000000000000000000000000000000..b21deee4d98593d93fb5f72158d2d78f3d3f1cb9 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon14-o.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon15-o.png b/docs/en/server/high_availability/ha/figures/icon15-o.png new file mode 100644 index 0000000000000000000000000000000000000000..1827a20e9da4d28e35e8ab2eae739b2fec37b385 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon15-o.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon16.png b/docs/en/server/high_availability/ha/figures/icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..f271594dda9d3ad0f038c9d719dd68c3e82c59f1 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon16.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon17.png b/docs/en/server/high_availability/ha/figures/icon17.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe58b89347c857920bce25f067fbd11c308e502 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon17.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon18.png b/docs/en/server/high_availability/ha/figures/icon18.png new file mode 100644 index 0000000000000000000000000000000000000000..1827a20e9da4d28e35e8ab2eae739b2fec37b385 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon18.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon19-o.png b/docs/en/server/high_availability/ha/figures/icon19-o.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1f2cb7f99b583768c7cbd7e05a57f302dbe8a Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon19-o.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon2.png b/docs/en/server/high_availability/ha/figures/icon2.png new file mode 100644 index 0000000000000000000000000000000000000000..9101e4b386df065a87d422bc5a0b287528ea5ec7 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon2.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon20.png b/docs/en/server/high_availability/ha/figures/icon20.png new file mode 100644 index 0000000000000000000000000000000000000000..4de3c7c695893539967245ea5e269b26e2b735be Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon20.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon21.png b/docs/en/server/high_availability/ha/figures/icon21.png new file mode 100644 index 0000000000000000000000000000000000000000..e7b4320b6ce1fd4adb52525ba2c60983ffb2eed3 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon21.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon22.png b/docs/en/server/high_availability/ha/figures/icon22.png new file mode 100644 index 0000000000000000000000000000000000000000..43bfa96965ad13e0a34ead3cb1102a76b9346a23 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon22.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon23.png b/docs/en/server/high_availability/ha/figures/icon23.png new file mode 100644 index 0000000000000000000000000000000000000000..aee221ddaa81d06fa7bd5b89a624da90cd1e53da Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon23.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon24.png b/docs/en/server/high_availability/ha/figures/icon24.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e5d700431ca1666fe9eda2cefce5dd2f83bdcd Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon24.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon25.png b/docs/en/server/high_availability/ha/figures/icon25.png new file mode 100644 index 0000000000000000000000000000000000000000..3de0f9476bbee9e89c3b759afbed968f17b5bbcc Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon25.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon26-o.png b/docs/en/server/high_availability/ha/figures/icon26-o.png new file mode 100644 index 0000000000000000000000000000000000000000..2293a893caf6d89c3beb978598fe7f281e68e7d5 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon26-o.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon27-o.png b/docs/en/server/high_availability/ha/figures/icon27-o.png new file mode 100644 index 0000000000000000000000000000000000000000..abbab8e40f7e3ca7c2a6f28ff78f08f15117828e Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon27-o.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon28-o.png b/docs/en/server/high_availability/ha/figures/icon28-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon28-o.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon29-o.png b/docs/en/server/high_availability/ha/figures/icon29-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon29-o.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon3.png b/docs/en/server/high_availability/ha/figures/icon3.png new file mode 100644 index 0000000000000000000000000000000000000000..930ee8909e89e3624c581f83d713af271cd96c75 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon3.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon30-o.png b/docs/en/server/high_availability/ha/figures/icon30-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon30-o.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon31-o.png b/docs/en/server/high_availability/ha/figures/icon31-o.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon31-o.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon32.png b/docs/en/server/high_availability/ha/figures/icon32.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon32.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon33.png b/docs/en/server/high_availability/ha/figures/icon33.png new file mode 100644 index 0000000000000000000000000000000000000000..88ed145b25f6f025ad795ceb012500e0944cb54c Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon33.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon34.png b/docs/en/server/high_availability/ha/figures/icon34.png new file mode 100644 index 0000000000000000000000000000000000000000..8247f52a3424c81b451ceb318f4a7979a5eddece Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon34.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon35.png b/docs/en/server/high_availability/ha/figures/icon35.png new file mode 100644 index 0000000000000000000000000000000000000000..7c656e9030b94809a57c7e369921e6a585f3574c Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon35.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon36.png b/docs/en/server/high_availability/ha/figures/icon36.png new file mode 100644 index 0000000000000000000000000000000000000000..7d29d173e914dfff48245d3d3a4d42575ce2d1db Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon36.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon37.png b/docs/en/server/high_availability/ha/figures/icon37.png new file mode 100644 index 0000000000000000000000000000000000000000..58be4c621b6638115153e361801deb9ee06634d8 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon37.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon38.png b/docs/en/server/high_availability/ha/figures/icon38.png new file mode 100644 index 0000000000000000000000000000000000000000..0c861ccb891f4fb5e533eb7f7151a8fce1571f17 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon38.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon39.png b/docs/en/server/high_availability/ha/figures/icon39.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ba1f347452d0cd1c06c6c51d2cdf5aea5e490b Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon39.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon4.png b/docs/en/server/high_availability/ha/figures/icon4.png new file mode 100644 index 0000000000000000000000000000000000000000..548dc8b648edb73ff1dd8a0266e8479203e72ca0 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon4.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon40.png b/docs/en/server/high_availability/ha/figures/icon40.png new file mode 100644 index 0000000000000000000000000000000000000000..9c29dd1e9a1bf22c36abf51cb18fa9e47b455fab Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon40.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon41.png b/docs/en/server/high_availability/ha/figures/icon41.png new file mode 100644 index 0000000000000000000000000000000000000000..9e8aea527a2119433fffec5a8800ebfa4fa5062f Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon41.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon42-o.png b/docs/en/server/high_availability/ha/figures/icon42-o.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon42-o.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon42.png b/docs/en/server/high_availability/ha/figures/icon42.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon42.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon43-o.png b/docs/en/server/high_availability/ha/figures/icon43-o.png new file mode 100644 index 0000000000000000000000000000000000000000..284bdd551baf25beb4143013402e77a1a4c60ccb Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon43-o.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon44-o.png b/docs/en/server/high_availability/ha/figures/icon44-o.png new file mode 100644 index 0000000000000000000000000000000000000000..810f4d784ee140dbf562e67a0d3fd391272626a5 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon44-o.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon45-o.png b/docs/en/server/high_availability/ha/figures/icon45-o.png new file mode 100644 index 0000000000000000000000000000000000000000..3e528ce2c98284f020ae4912a853f5864526396b Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon45-o.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon46-o.png b/docs/en/server/high_availability/ha/figures/icon46-o.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6a3ca0fe57016f3685981ed518493ceea1c855 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon46-o.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon47-o.png b/docs/en/server/high_availability/ha/figures/icon47-o.png new file mode 100644 index 0000000000000000000000000000000000000000..6eeaba98d908775bd363a8ffcec27c3b6a214013 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon47-o.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon49-o.svg b/docs/en/server/high_availability/ha/figures/icon49-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..f2d76acd147ccaf5e493a7c035bb90640af7817c --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon49-o.svg @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon5.png b/docs/en/server/high_availability/ha/figures/icon5.png new file mode 100644 index 0000000000000000000000000000000000000000..e4206b7b584bf0702c7cb2f03a3a41e20bfba844 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon5.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon50-o.svg b/docs/en/server/high_availability/ha/figures/icon50-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..05026802be4718205065d6369e14cc0b6ef05bc7 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon50-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon52-o.svg b/docs/en/server/high_availability/ha/figures/icon52-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..23149c05873259cd39721b8ee9c3ab7db86d64c5 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon52-o.svg @@ -0,0 +1,9 @@ + + + attention + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/icon53-o.svg b/docs/en/server/high_availability/ha/figures/icon53-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..50e33489ce984b0acfd621da4a8ef837fdf048c1 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon53-o.svg @@ -0,0 +1,11 @@ + + + + previous + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/icon54-o.svg b/docs/en/server/high_availability/ha/figures/icon54-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..3b599aef4b822c707d2f646405bb00837aed96fd --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon54-o.svg @@ -0,0 +1,18 @@ + + + + Backspace + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/icon56-o.svg b/docs/en/server/high_availability/ha/figures/icon56-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9f13b6861e3858deec8d57a5301c934acc247069 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon56-o.svg @@ -0,0 +1,19 @@ + + + + Slice 1 + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/icon57-o.svg b/docs/en/server/high_availability/ha/figures/icon57-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e6fbfa1381b76ab3fcd45652b33267a7f6c69bb7 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon57-o.svg @@ -0,0 +1,11 @@ + + + + titlebutton/close_normal + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/icon58-o.svg b/docs/en/server/high_availability/ha/figures/icon58-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9746dcacfc8e5d4c4b63233801e37418a190fc8f --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon58-o.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon6.png b/docs/en/server/high_availability/ha/figures/icon6.png new file mode 100644 index 0000000000000000000000000000000000000000..88ced3587e9a42b145fe11393726f40aba9d1b2c Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon6.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon62-o.svg b/docs/en/server/high_availability/ha/figures/icon62-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..09f61b446669df2e05a3351d40d8c30879c7b035 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon62-o.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon63-o.svg b/docs/en/server/high_availability/ha/figures/icon63-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..06c03ed99260ffadc681475dad35610aedf67f83 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon63-o.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon66-o.svg b/docs/en/server/high_availability/ha/figures/icon66-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..5793b3846b7fe6a5758379591215b16c7f9e1b52 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon66-o.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon68-o.svg b/docs/en/server/high_availability/ha/figures/icon68-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..a7748052dfa436116d8742dca28f7d90865231ed --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon68-o.svg @@ -0,0 +1,23 @@ + + + + deepin-system-monitor + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/icon69-o.svg b/docs/en/server/high_availability/ha/figures/icon69-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e21dfd00a32a44ee1c8e3882b4ca8239be04690f --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon69-o.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon7.png b/docs/en/server/high_availability/ha/figures/icon7.png new file mode 100644 index 0000000000000000000000000000000000000000..05fe8aa38c84ca0c0c99b0b005ddec2f2ba42f4a Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon7.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon70-o.svg b/docs/en/server/high_availability/ha/figures/icon70-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..b5787a7ffa5ed9519a48c6937c60927fd11fd455 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon70-o.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon71-o.svg b/docs/en/server/high_availability/ha/figures/icon71-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..669a21f143b06cb45ea3f45f7f071809f2cbc8a8 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon71-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon72-o.svg b/docs/en/server/high_availability/ha/figures/icon72-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..79067ed9b9ff7912e1742183b461fa056601b9cc --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon72-o.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon73-o.svg b/docs/en/server/high_availability/ha/figures/icon73-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..cf6292387f5e790db6ebd66184aabcbb39257ee7 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon73-o.svg @@ -0,0 +1,13 @@ + + + + Down + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/icon75-o.svg b/docs/en/server/high_availability/ha/figures/icon75-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..ef6823ccc19858f57374f0b78ad31514e8311be3 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon75-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/server/high_availability/ha/figures/icon8.png b/docs/en/server/high_availability/ha/figures/icon8.png new file mode 100644 index 0000000000000000000000000000000000000000..01543c3e0f5e96a023b4e1f0859a03e3a0dafd56 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon8.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon83-o.svg b/docs/en/server/high_availability/ha/figures/icon83-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..35dd6eacc54a933dc9ebc3f3010edfa7363fecc0 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon83-o.svg @@ -0,0 +1,84 @@ + + + + + + image/svg+xml + + img_upload + + + + + + img_upload + Created with Sketch. + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon84-o.svg b/docs/en/server/high_availability/ha/figures/icon84-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9bd11b9e7b45b506dd7e1c87d09d545d8f48af06 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon84-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon86-o.svg b/docs/en/server/high_availability/ha/figures/icon86-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..5da20233309c43d4fc7b315f441cde476c835c67 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon86-o.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon88-o.svg b/docs/en/server/high_availability/ha/figures/icon88-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..c2570c26575fd14cb5e9d9fe77831d2e8f6c9333 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon88-o.svg @@ -0,0 +1,13 @@ + + + + Left + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/icon9.png b/docs/en/server/high_availability/ha/figures/icon9.png new file mode 100644 index 0000000000000000000000000000000000000000..a07c9ab8e51decd9a3bca8c969d2ae95bd68512c Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/icon9.png differ diff --git a/docs/en/server/high_availability/ha/figures/icon90-o.svg b/docs/en/server/high_availability/ha/figures/icon90-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..79b5e0a141f7969a8f77ae61f4c240de7187afe9 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon90-o.svg @@ -0,0 +1,12 @@ + + + + lock_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/icon92-o.svg b/docs/en/server/high_availability/ha/figures/icon92-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..21341b64a832e1935252aa82e7a4e0b083c16eae --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon92-o.svg @@ -0,0 +1,12 @@ + + + + logout_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/icon94-o.svg b/docs/en/server/high_availability/ha/figures/icon94-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..a47044149a02101dbd24a3fdb2f3ead77efca6c1 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon94-o.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon97-o.svg b/docs/en/server/high_availability/ha/figures/icon97-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..4f4670de29d8c86885b5aa806b2c8cdc6fc16dcb --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon97-o.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/server/high_availability/ha/figures/icon99-o.svg b/docs/en/server/high_availability/ha/figures/icon99-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e9a3aa60a51404c9390bfbea8d8ff09edc0e2e32 --- /dev/null +++ b/docs/en/server/high_availability/ha/figures/icon99-o.svg @@ -0,0 +1,11 @@ + + + notes + + + + + + + + \ No newline at end of file diff --git a/docs/en/server/high_availability/ha/figures/kiran-1.png b/docs/en/server/high_availability/ha/figures/kiran-1.png new file mode 100644 index 0000000000000000000000000000000000000000..6f17788dce804c004027adfe45628eebffaa48cf Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-1.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-10.png b/docs/en/server/high_availability/ha/figures/kiran-10.png new file mode 100644 index 0000000000000000000000000000000000000000..18cfa3074af1f4b8d49d064a77b016f24ab8c17c Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-10.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-11.png b/docs/en/server/high_availability/ha/figures/kiran-11.png new file mode 100644 index 0000000000000000000000000000000000000000..b58fbb7ce8a798d5355855a4ac0638540df74d9e Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-11.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-12.png b/docs/en/server/high_availability/ha/figures/kiran-12.png new file mode 100644 index 0000000000000000000000000000000000000000..920d0c7112be6bed509773413de36506d748b822 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-12.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-13.png b/docs/en/server/high_availability/ha/figures/kiran-13.png new file mode 100644 index 0000000000000000000000000000000000000000..473ac4151c65951050800cb73313fee07077a9d6 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-13.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-14.png b/docs/en/server/high_availability/ha/figures/kiran-14.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba17ddca84d25f112e564b542a971d6e7d4c10a Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-14.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-15.png b/docs/en/server/high_availability/ha/figures/kiran-15.png new file mode 100644 index 0000000000000000000000000000000000000000..b561a2fccb7f159106065baaf88ff9fa32bba1d8 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-15.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-16.png b/docs/en/server/high_availability/ha/figures/kiran-16.png new file mode 100644 index 0000000000000000000000000000000000000000..a4d71e812144e74cb854e25f215197368b60017f Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-16.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-17.png b/docs/en/server/high_availability/ha/figures/kiran-17.png new file mode 100644 index 0000000000000000000000000000000000000000..5f52f0d0885fbcd62af5127df6f464bcd334e2b3 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-17.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-18.png b/docs/en/server/high_availability/ha/figures/kiran-18.png new file mode 100644 index 0000000000000000000000000000000000000000..bbd1a5dbd99c509d936e51e1bcc5970c2311da9d Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-18.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-19.png b/docs/en/server/high_availability/ha/figures/kiran-19.png new file mode 100644 index 0000000000000000000000000000000000000000..a9ad75326f5d5463a45b532ae05b110155426083 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-19.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-2.png b/docs/en/server/high_availability/ha/figures/kiran-2.png new file mode 100644 index 0000000000000000000000000000000000000000..b62c95a0b7d2bcfbc0bbac084ed7df74e5412da5 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-2.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-20.png b/docs/en/server/high_availability/ha/figures/kiran-20.png new file mode 100644 index 0000000000000000000000000000000000000000..a43f8e2dc5ff4b5445386fd0c703bdf6b1e186ec Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-20.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-21.png b/docs/en/server/high_availability/ha/figures/kiran-21.png new file mode 100644 index 0000000000000000000000000000000000000000..19c758d585016351a1f26fdac48221bdf0710a53 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-21.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-22.png b/docs/en/server/high_availability/ha/figures/kiran-22.png new file mode 100644 index 0000000000000000000000000000000000000000..703327a3f511c20cd977ae4cd68552ecb3dd6971 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-22.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-23.png b/docs/en/server/high_availability/ha/figures/kiran-23.png new file mode 100644 index 0000000000000000000000000000000000000000..ddbbd80be5b926ab3446cbb10c22d892487956f8 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-23.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-24.png b/docs/en/server/high_availability/ha/figures/kiran-24.png new file mode 100644 index 0000000000000000000000000000000000000000..54e864dcfd194db4b1672c05d3e60eb6acc605d9 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-24.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-25.png b/docs/en/server/high_availability/ha/figures/kiran-25.png new file mode 100644 index 0000000000000000000000000000000000000000..f64461cc2610fb82db1eb27a5562c2ab0737dcf4 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-25.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-26.png b/docs/en/server/high_availability/ha/figures/kiran-26.png new file mode 100644 index 0000000000000000000000000000000000000000..2bcd5335c14d3e241b732b2ee6c2adf3effbe652 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-26.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-27.png b/docs/en/server/high_availability/ha/figures/kiran-27.png new file mode 100644 index 0000000000000000000000000000000000000000..2bcd5335c14d3e241b732b2ee6c2adf3effbe652 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-27.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-28.png b/docs/en/server/high_availability/ha/figures/kiran-28.png new file mode 100644 index 0000000000000000000000000000000000000000..1650e93b66f11849ed69a9dacd5c9c5f135fc053 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-28.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-29.png b/docs/en/server/high_availability/ha/figures/kiran-29.png new file mode 100644 index 0000000000000000000000000000000000000000..5d0b225b54dc5da9053aeb6f4b805e59d8685f7f Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-29.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-3.png b/docs/en/server/high_availability/ha/figures/kiran-3.png new file mode 100644 index 0000000000000000000000000000000000000000..774ba1ea233c20bf3c7ae661e126e5251aef8662 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-3.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-30.png b/docs/en/server/high_availability/ha/figures/kiran-30.png new file mode 100644 index 0000000000000000000000000000000000000000..ae7f591fdd3da24fdf30b95785cd07c9959ecb2b Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-30.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-31.png b/docs/en/server/high_availability/ha/figures/kiran-31.png new file mode 100644 index 0000000000000000000000000000000000000000..fc4127dcd736d084ecabe84b40f165f0b07695b2 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-31.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-32.png b/docs/en/server/high_availability/ha/figures/kiran-32.png new file mode 100644 index 0000000000000000000000000000000000000000..b02d7b1fbdfa58d63618e99085fd5a0ed517ce4d Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-32.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-33.png b/docs/en/server/high_availability/ha/figures/kiran-33.png new file mode 100644 index 0000000000000000000000000000000000000000..502f5d272b6200b440b1ce916924e44c987f9922 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-33.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-34.png b/docs/en/server/high_availability/ha/figures/kiran-34.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ad35752dba85a00024170f88702c3398e0872c Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-34.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-35.png b/docs/en/server/high_availability/ha/figures/kiran-35.png new file mode 100644 index 0000000000000000000000000000000000000000..6c566afea5f485d79ff7de2ccd3d27a24835f14c Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-35.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-36.png b/docs/en/server/high_availability/ha/figures/kiran-36.png new file mode 100644 index 0000000000000000000000000000000000000000..842470a94fb6864cdd45f2c9971ec73e7866ea88 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-36.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-37.png b/docs/en/server/high_availability/ha/figures/kiran-37.png new file mode 100644 index 0000000000000000000000000000000000000000..b827be98850a3626f92ed1cd7b6b76f95d761261 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-37.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-38.png b/docs/en/server/high_availability/ha/figures/kiran-38.png new file mode 100644 index 0000000000000000000000000000000000000000..f0972490115d0965e8e9006abd2e5e96ac2fc37c Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-38.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-39.png b/docs/en/server/high_availability/ha/figures/kiran-39.png new file mode 100644 index 0000000000000000000000000000000000000000..f833c66c77737fb7cfbe5b4c4af48b0ba7747cea Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-39.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-4.png b/docs/en/server/high_availability/ha/figures/kiran-4.png new file mode 100644 index 0000000000000000000000000000000000000000..7a6cf9c1f25266c31ddcb76f093bec664d64bac7 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-4.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-40.png b/docs/en/server/high_availability/ha/figures/kiran-40.png new file mode 100644 index 0000000000000000000000000000000000000000..da430f32720ef8a032e2c16fe9caabd815f8b62f Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-40.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-41.png b/docs/en/server/high_availability/ha/figures/kiran-41.png new file mode 100644 index 0000000000000000000000000000000000000000..424f50da38c18c12a235ebb56edd6d02ec1638f0 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-41.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-42.png b/docs/en/server/high_availability/ha/figures/kiran-42.png new file mode 100644 index 0000000000000000000000000000000000000000..a506b0c4e7fd23c393c34e01b26086dae1ea9c62 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-42.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-43.png b/docs/en/server/high_availability/ha/figures/kiran-43.png new file mode 100644 index 0000000000000000000000000000000000000000..90ca8be50f4343adcc0cc05b1ae7d0f32efcedc2 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-43.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-44.png b/docs/en/server/high_availability/ha/figures/kiran-44.png new file mode 100644 index 0000000000000000000000000000000000000000..bc38c38001a8428cf18a05e6cd4a8f46b1d633a2 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-44.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-45.png b/docs/en/server/high_availability/ha/figures/kiran-45.png new file mode 100644 index 0000000000000000000000000000000000000000..fadb655f342f99c669425480ad48733f1dccb2c9 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-45.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-46.png b/docs/en/server/high_availability/ha/figures/kiran-46.png new file mode 100644 index 0000000000000000000000000000000000000000..096688c85e47acded83be03a7ff69f9d829d956b Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-46.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-47.png b/docs/en/server/high_availability/ha/figures/kiran-47.png new file mode 100644 index 0000000000000000000000000000000000000000..3faa55c80eead6bfc9e96f59babcd2100392c2e5 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-47.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-48.png b/docs/en/server/high_availability/ha/figures/kiran-48.png new file mode 100644 index 0000000000000000000000000000000000000000..1e44996d99006ffe793ae29b55035976942ac504 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-48.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-49.png b/docs/en/server/high_availability/ha/figures/kiran-49.png new file mode 100644 index 0000000000000000000000000000000000000000..000cc37cb59fecc9ea497726f87231df187baf34 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-49.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-5.png b/docs/en/server/high_availability/ha/figures/kiran-5.png new file mode 100644 index 0000000000000000000000000000000000000000..a27574bb4793e401750fff28e4568403dc489507 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-5.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-50.png b/docs/en/server/high_availability/ha/figures/kiran-50.png new file mode 100644 index 0000000000000000000000000000000000000000..900efd80a6db6ab00fee3fa519e963f8f0620ba7 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-50.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-6.png b/docs/en/server/high_availability/ha/figures/kiran-6.png new file mode 100644 index 0000000000000000000000000000000000000000..42c4f0357dfa11b53ca27a4d0d255b67a0f9c5ae Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-6.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-7.png b/docs/en/server/high_availability/ha/figures/kiran-7.png new file mode 100644 index 0000000000000000000000000000000000000000..254ef11f36d958f6ef7c70853e5f61032f825463 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-7.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-8.png b/docs/en/server/high_availability/ha/figures/kiran-8.png new file mode 100644 index 0000000000000000000000000000000000000000..29b5845d2fa94cba92719b8649a5e86c926ea911 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-8.png differ diff --git a/docs/en/server/high_availability/ha/figures/kiran-9.png b/docs/en/server/high_availability/ha/figures/kiran-9.png new file mode 100644 index 0000000000000000000000000000000000000000..46bcfdd0e1e88ad0f0ade4a3990c3ac5d66060e7 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kiran-9.png differ diff --git a/docs/en/server/high_availability/ha/figures/kubesphere-console.png b/docs/en/server/high_availability/ha/figures/kubesphere-console.png new file mode 100644 index 0000000000000000000000000000000000000000..9c93fbeafe366d78bc05dda6e0e673d2dad8874f Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kubesphere-console.png differ diff --git a/docs/en/server/high_availability/ha/figures/kubesphere.png b/docs/en/server/high_availability/ha/figures/kubesphere.png new file mode 100644 index 0000000000000000000000000000000000000000..939dcb70202b19c7853cbfd8f27f6e8e4678ce26 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/kubesphere.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-1.png b/docs/en/server/high_availability/ha/figures/xfce-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0e478b9f10ddf3210d5f5fada2e45329e2d1d028 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-1.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-2.png b/docs/en/server/high_availability/ha/figures/xfce-2.png new file mode 100644 index 0000000000000000000000000000000000000000..33a946d988d499a1e98cb43968b72119bd48d7a5 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-2.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-3.png b/docs/en/server/high_availability/ha/figures/xfce-3.png new file mode 100644 index 0000000000000000000000000000000000000000..020356f0c981fac2aafe33c8e997efbf01af9253 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-3.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-4.png b/docs/en/server/high_availability/ha/figures/xfce-4.png new file mode 100644 index 0000000000000000000000000000000000000000..21369e366322955023b427e7a2ae63fd29b387e5 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-4.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-5.png b/docs/en/server/high_availability/ha/figures/xfce-5.png new file mode 100644 index 0000000000000000000000000000000000000000..1f7807877f775fe6aa32652a29ef833e48e1a6ee Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-5.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-6.png b/docs/en/server/high_availability/ha/figures/xfce-6.png new file mode 100644 index 0000000000000000000000000000000000000000..e5376fcfd1737234a885d4d95649cd996005cf0c Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-6.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-7.png b/docs/en/server/high_availability/ha/figures/xfce-7.png new file mode 100644 index 0000000000000000000000000000000000000000..b7a94df356b7b9f7dca3d305d066ec854406aaab Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-7.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-71.png b/docs/en/server/high_availability/ha/figures/xfce-71.png new file mode 100644 index 0000000000000000000000000000000000000000..11d1618c907d4bb18de1eb68e42e9b98d92d91c3 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-71.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-8.png b/docs/en/server/high_availability/ha/figures/xfce-8.png new file mode 100644 index 0000000000000000000000000000000000000000..f6f97d9a173105cb6a72e4b8c48deab25ecac898 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-8.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-81.png b/docs/en/server/high_availability/ha/figures/xfce-81.png new file mode 100644 index 0000000000000000000000000000000000000000..b97c9a81c2a07efe361e6dc6ee8bed5db445ecfa Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-81.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-811.png b/docs/en/server/high_availability/ha/figures/xfce-811.png new file mode 100644 index 0000000000000000000000000000000000000000..58233638eca203d917081d6a9ac5003474cbf60b Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-811.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-812.png b/docs/en/server/high_availability/ha/figures/xfce-812.png new file mode 100644 index 0000000000000000000000000000000000000000..0fc975f75da95dce8a3e5a098d024578335c9426 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-812.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-813.png b/docs/en/server/high_availability/ha/figures/xfce-813.png new file mode 100644 index 0000000000000000000000000000000000000000..4d399468c74355cbaa765380720cb9561e95f834 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-813.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-814.png b/docs/en/server/high_availability/ha/figures/xfce-814.png new file mode 100644 index 0000000000000000000000000000000000000000..c09fd6524a20ba04e0fca30307d35fa05e79c1f4 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-814.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-82.png b/docs/en/server/high_availability/ha/figures/xfce-82.png new file mode 100644 index 0000000000000000000000000000000000000000..170deb5fb43f4e924d5ba4eba94a02c341d31515 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-82.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-821.png b/docs/en/server/high_availability/ha/figures/xfce-821.png new file mode 100644 index 0000000000000000000000000000000000000000..c5c1f3567dccda3d0d49ae445612d5b9ba27e09a Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-821.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-83.png b/docs/en/server/high_availability/ha/figures/xfce-83.png new file mode 100644 index 0000000000000000000000000000000000000000..95e4844c0ece09819d3e9f1e8457bbf371b1282e Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-83.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-831.png b/docs/en/server/high_availability/ha/figures/xfce-831.png new file mode 100644 index 0000000000000000000000000000000000000000..6456dd02f0281a5ec8d752ba5b95be581bcbfa09 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-831.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-832.png b/docs/en/server/high_availability/ha/figures/xfce-832.png new file mode 100644 index 0000000000000000000000000000000000000000..2932aaacf71fa53f1d0c10340df3aebcc016e991 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-832.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-84.png b/docs/en/server/high_availability/ha/figures/xfce-84.png new file mode 100644 index 0000000000000000000000000000000000000000..e0435c2edf9f68d193cff036215f32c259d378f0 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-84.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-841.png b/docs/en/server/high_availability/ha/figures/xfce-841.png new file mode 100644 index 0000000000000000000000000000000000000000..c2c06346d4a296bfbe7836139cd943baa1ce6ea5 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-841.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-842.png b/docs/en/server/high_availability/ha/figures/xfce-842.png new file mode 100644 index 0000000000000000000000000000000000000000..101bf6923e3780617d33dde04b92232ca7f87b42 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-842.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-85.png b/docs/en/server/high_availability/ha/figures/xfce-85.png new file mode 100644 index 0000000000000000000000000000000000000000..21b39638fe4c83e0da5cdc69ecad9b7a22718a55 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-85.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-851.png b/docs/en/server/high_availability/ha/figures/xfce-851.png new file mode 100644 index 0000000000000000000000000000000000000000..893064ca10399a683afbcb3752266d93b0a79a51 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-851.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-86.png b/docs/en/server/high_availability/ha/figures/xfce-86.png new file mode 100644 index 0000000000000000000000000000000000000000..35e8a99e31e4a49eb64b24cfbab825111e40f709 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-86.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-861.png b/docs/en/server/high_availability/ha/figures/xfce-861.png new file mode 100644 index 0000000000000000000000000000000000000000..affc46c874991a3b289e15072e06ba6566c099b1 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-861.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-87.png b/docs/en/server/high_availability/ha/figures/xfce-87.png new file mode 100644 index 0000000000000000000000000000000000000000..47524c21d57c887c3398ea53a675f89e9f92113f Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-87.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-9.png b/docs/en/server/high_availability/ha/figures/xfce-9.png new file mode 100644 index 0000000000000000000000000000000000000000..5586c4f62cc161665b91a56ad23b2320901901c0 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-9.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-91.png b/docs/en/server/high_availability/ha/figures/xfce-91.png new file mode 100644 index 0000000000000000000000000000000000000000..ee69879bb4ad66405b045af5e3965e275fe8eabf Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-91.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-911.png b/docs/en/server/high_availability/ha/figures/xfce-911.png new file mode 100644 index 0000000000000000000000000000000000000000..b49416558e9ab844fda2026b76e2e900ac106842 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-911.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-92.png b/docs/en/server/high_availability/ha/figures/xfce-92.png new file mode 100644 index 0000000000000000000000000000000000000000..78dd6313c603aad9ebd37fe68e06f98b2a3b331e Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-92.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-921.png b/docs/en/server/high_availability/ha/figures/xfce-921.png new file mode 100644 index 0000000000000000000000000000000000000000..5eb6f40df9ca73e11b9b9fa5079496ac0c36857b Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-921.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-93.png b/docs/en/server/high_availability/ha/figures/xfce-93.png new file mode 100644 index 0000000000000000000000000000000000000000..06ac80c152fefbe1ad2ba1c989f6acfbbaf1a992 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-93.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-931.png b/docs/en/server/high_availability/ha/figures/xfce-931.png new file mode 100644 index 0000000000000000000000000000000000000000..a156e5cf14ae154b93e845ff1bd5bc6ba12c9beb Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-931.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-94.png b/docs/en/server/high_availability/ha/figures/xfce-94.png new file mode 100644 index 0000000000000000000000000000000000000000..f48064ff5902c4ea740ccba9a1640cbca27b5b72 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-94.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-941.png b/docs/en/server/high_availability/ha/figures/xfce-941.png new file mode 100644 index 0000000000000000000000000000000000000000..f7904da12dc807836acfb9d6f24b8d9b976a2fdc Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-941.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-95.png b/docs/en/server/high_availability/ha/figures/xfce-95.png new file mode 100644 index 0000000000000000000000000000000000000000..bda965b15a859e4cccf4b80f62875f79eb3470fd Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-95.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-951.png b/docs/en/server/high_availability/ha/figures/xfce-951.png new file mode 100644 index 0000000000000000000000000000000000000000..6521a28275d2b63c12b47604c7afc926f7938697 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-951.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-96.png b/docs/en/server/high_availability/ha/figures/xfce-96.png new file mode 100644 index 0000000000000000000000000000000000000000..29ce24923477065b98cacf603f185113e9959069 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-96.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-961.png b/docs/en/server/high_availability/ha/figures/xfce-961.png new file mode 100644 index 0000000000000000000000000000000000000000..874fa200f4e63b690261d7827f3c73cf70861b32 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-961.png differ diff --git a/docs/en/server/high_availability/ha/figures/xfce-962.png b/docs/en/server/high_availability/ha/figures/xfce-962.png new file mode 100644 index 0000000000000000000000000000000000000000..bb84e35e43e992bc68b053a0da760bd5aa8b0270 Binary files /dev/null and b/docs/en/server/high_availability/ha/figures/xfce-962.png differ diff --git a/docs/en/server/high_availability/ha/ha_installation_and_deployment.md b/docs/en/server/high_availability/ha/ha_installation_and_deployment.md new file mode 100644 index 0000000000000000000000000000000000000000..f701e2f19c528fe9647a019d3cd047082ce23508 --- /dev/null +++ b/docs/en/server/high_availability/ha/ha_installation_and_deployment.md @@ -0,0 +1,199 @@ +# HA Installation and Deployment + +This document describes how to install and deploy an HA cluster. + +## Installation and Deployment + +- Prepare the environment: At least two physical machines or VMs with openEuler installed are required. (This section uses two physical machines or VMs as an example.) For details about how to install openEuler openEuler 22.03 LTS SP4, see the [_openEuler Installation Guide_](../../installation_upgrade/installation/installation_on_servers.md). + +### Modifying the Host Name and the /etc/hosts File + +- **Note: You need to perform the following operations on both hosts. The following takes one host as an example. IP addresses in this document are for reference only.** + +Before using the HA software, ensure that all host names have been changed and written into the **/etc/hosts** file. + +- Run the following command to change the host name: + +```shell +hostnamectl set-hostname ha1 +``` + +- Edit the **/etc/hosts** file and write the following fields: + +```conf +172.30.30.65 ha1 +172.30.30.66 ha2 +``` + +### Configuring the Yum Repository + +After the system is successfully installed, the Yum source is configured by default. The file location is stored in the **/etc/yum.repos.d/openEuler.repo** file. The HA software package uses the following sources: + +```conf +[OS] +name=OS +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/$basearch/RPM-GPG-KEY-openEuler + +[everything] +name=everything +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/$basearch/RPM-GPG-KEY-openEuler + +[EPOL] +name=EPOL +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/$basearch/RPM-GPG-KEY-openEuler +``` + +### Installing the HA Software Package Components + +```shell +yum install -y corosync pacemaker pcs fence-agents fence-virt corosync-qdevice sbd drbd drbd-utils +``` + +### Setting the hacluster User Password + +```shell +passwd hacluster +``` + +### Modifying the /etc/corosync/corosync.conf File + +```conf +totem { + version: 2 + cluster_name: hacluster + crypto_cipher: none + crypto_hash: none +} +logging { + fileline: off + to_stderr: yes + to_logfile: yes + logfile: /var/log/cluster/corosync.log + to_syslog: yes + debug: on + logger_subsys { + subsys: QUORUM + debug: on + } +} +quorum { + provider: corosync_votequorum + expected_votes: 2 + two_node: 1 + } +nodelist { + node { + name: ha1 + nodeid: 1 + ring0_addr: 172.30.30.65 + } + node { + name: ha2 + nodeid: 2 + ring0_addr: 172.30.30.66 + } + } +``` + +### Managing the Services + +#### Disabling the firewall + +1. Stop the firewall. + + ```shell + systemctl stop firewalld + ``` + +2. Change the status of SELINUX in the **/etc/selinux/config** file to disabled. + + ```conf + # SELINUX=disabled + ``` + +#### Managing the pcs service + +1. Start the pcs service. + + ```shell + systemctl start pcsd + ``` + +2. Query the pcs service status. + + ```shell + systemctl status pcsd + ``` + + The service is started successfully if the following information is displayed: + + ![](./figures/HA-pcs.png) + +#### Managing the Pacemaker service + +1. Start the Pacemaker service. + + ```shell + systemctl start pacemaker + ``` + +2. Query the Pacemaker service status. + + ```shell + systemctl status pacemaker + ``` + + The service is started successfully if the following information is displayed: + + ![](./figures/HA-pacemaker.png) + +#### Managing the Corosync service + +1. Start the Corosync service. + + ```shell + systemctl start corosync + ``` + +2. Query the Corosync service status. + + ```shell + systemctl status corosync + ``` + + The service is started successfully if the following information is displayed: + + ![](./figures/HA-corosync.png) + +### Performing Node Authentication + +- **Note: Run this command on any node.** + +```shell +pcs host auth ha1 ha2 +``` + +### Accessing the Front-End Management Platform + +After the preceding services are started, open the browser (Chrome or Firefox is recommended) and enter `https://localhost:2224` in the navigation bar. + +- This page is the native management platform. + +![](./figures/HA-login.png) + +For details about how to install the management platform newly developed by the community, see . + +- The following is the management platform newly developed by the community. + +![](./figures/HA-api.png) + +- For how to quickly use an HA cluster and add an instance, see the [HA Usage Example](ha_usecase_examples.md). diff --git a/docs/en/server/high_availability/ha/ha_usecase_examples.md b/docs/en/server/high_availability/ha/ha_usecase_examples.md new file mode 100644 index 0000000000000000000000000000000000000000..62f53c9ef3ff5346772454cac84c93db5087bfa5 --- /dev/null +++ b/docs/en/server/high_availability/ha/ha_usecase_examples.md @@ -0,0 +1,248 @@ +# HA Usage Examples + +This section describes how to get started with the HA cluster and add an instance. If you are not familiar with HA cluster installation, see [HA Installation and Deployment](ha_installation_and_deployment.md). + +## Quick Start Guide + +The following operations use the management platform newly developed by the community as an example. + +### Login Page + +The user name is `hacluster`, and the password is the one set on the host by the user. + +![](./figures/HA-api.png) + +### Home page + +After logging in to the system, the main page is displayed. The main page consists of the side navigation bar, the top operation area, the resource node list area, and the node operation floating area. + +The following describes the features and usage of the four areas in detail. + +![](./figures/HA-home-page.png) + +#### Navigation bar + +The side navigation bar consists of two parts: the name and logo of the HA cluster software, and the system navigation. The system navigation consists of three parts: **System**, **Cluster Configurations**, and **Tools**. **System** is the default option and the corresponding item to the home page. It displays the information and operation entries of all resources in the system. **Preference Settings** and **Heartbeat Configurations** are set under **Cluster Configurations**. **Log Download** and **Quick Cluster Operation** are set under **Tools**. These two items are displayed in a pop-up box after you click them. + +#### Top Operation Area + +The current login user is displayed statically. When you hover the mouse cursor on the user icon, the operation menu items are displayed, including **Refresh Settings** and **Log Out**. After you click **Refresh Settings**, the **Refresh Settings** dialog box is displayed with the **Refresh Settings** option. You can set the automatic refresh modes for the system, the options are **Do not refresh automatically**, **Refresh every 5 seconds**, and **Refresh every 10 seconds**. By default, **Do not refresh automatically** is selected. Click **Log Out** to log out and jump to the login page. After that, a re-login is required if you want to continue to access the system. + +![](./figures/HA-refresh.png) + +#### Resource Node List Area + +The resource node list displays the resource information such as **Resource Name**, **Status**, **Resource Type**, **Service**, and **Running Node** of all resources in the system, and the node information such as all nodes in the system and the running status of the nodes. In addition, you can **Add**, **Edit**, **Start**, **Stop**, **Clear**, **Migrate**, **Migrate Back**, **Delete**, and **Associate** the resources. + +#### Node Operation Floating Area + +By default, the node operation floating area is collapsed. When you click a node in the heading of the resource node list, the node operation area is displayed on the right, as shown in the preceding figure. This area consists of the collapse button, the node name, the stop button, and the standby button, and provides the stop and standby operations. Click the arrow in the upper left corner of the area to collapse the area. + +### Preference Settings + +The following operations can be performed using command lines. The following is a simple example. For more command details, run the `pcs --help` command. + +- Through the CLI + + ```shell + # pcs property set stonith-enabled=false + # pcs property set no-quorum-policy=ignore + ``` + + Run the following command to view all configurations: + + ```shell + pcs property + ``` + + ![](./figures/HA-firstchoice-cmd.png) + +- Through the GUI + Clicking **Preference Settings** in the navigation bar, the **Preference Settings** dialog box is displayed. Change the values of **No Quorum Policy** and **Stonith Enabled** from the default values to the values shown in the following figure. Then, click OK. + + ![](./figures/HA-firstchoice.png) + +### Add Resource + +#### Adding Common Resources + +1. Click **Add Common Resource**. The **Create Resource** dialog box is displayed. + All mandatory configuration items of a resource are displayed on the **Basic** page. After you select a resource type on the **Basic** page, other mandatory and optional configuration items of the resource are displayed. + +2. Enter the resource configuration information. + A gray text area is displayed on the right of the dialog box to describe the current configuration item. After all mandatory parameters are set, click **OK** to create a common resource or click **Cancel** to cancel the add operation. + The optional configuration items on the **Instance Attribute**, **Meta Attribute**, or **Operation Attribute** page are optional. If they are not configured, the resource creation process is not affected. You can modify them as required. Otherwise, the default values are used. + +The following uses Apache as an example to describe how to add resources through the CLI and GUI. + +- Through the CLI + + ```shell + # pcs resource create httpd ocf:heartbeat:apache + ``` + + Check the resource running status: + + ```shell + # pcs status + ``` + + ![](./figures/HA-pcs-status.png) + +- Through the GUI + +1. Enter the resource name and resource type, as shown in the following figure. + + ![](./figures/HA-add-resource.png) + +2. If the following information is displayed, the resource is successfully added and started, and runs on a node, for example, ha1. + + ![](./figures/HA-apache-suc.png) +3. Access the Apache page. + + ![](./figures/HA-apache-show.png) + +#### Adding Group Resources + +>**Note:** +> Adding group resources requires at least one common resource in the cluster. + +1. Click **Add Group Resource**. The **Create Resource** dialog box is displayed. + All the parameters on the **Basic** tab page are mandatory. After setting the parameters, click **OK** to add the resource or click **Cancel** to cancel the add operation. + + ![](./figures/HA-group.png) + + > **Notes:** + > Group resources are started in the sequence of child resources. Therefore, you need to select child resources in sequence. + +2. If the following information is displayed, the resource is added successfully. + + ![](./figures/HA-group-suc.png) + +#### Adding Clone Resources + +1. Click **Add Clone Resource**. The **Create Resource** dialog box is displayed. + On the **Basic** page, enter the object to be cloned. The resource name is automatically generated. After entering the object name, click **OK** to add the resource, or click **Cancel** to cancel the add operation. + + ![](./figures/HA-clone.png) + +2. If the following information is displayed, the resource is added successfully. + + ![](./figures/HA-clone-suc.png) + +### Editing Resources + +- Starting a resource: Select a target resource from the resource node list. The target resource must not be running. Start the resource. +- Stopping a resource: Select a target resource from the resource node list. The target resource must be running. Stop the resource. +- Clearing a resource: Select a target resource from the resource node list. Clear the resource. +- Migrating a resource: Select a target resource from the resource node list. The resource must be a common resource or group resource in the running status. Migrate the resource to migrate it to a specified node. +- Migrating back a resource: Select a target resource from the resource node list. The resource must be a migrated resource. Migrate back the resource to clear the migration settings of the resource and migrate the resource back to the original node. After you click **Migrate Back**, the status change of the resource item in the list is the same as that when the resource is started. +- Deleting a resource: Select a target resource from the resource node list. Delete the resource. + +### Setting Resource Relationships + +Resource relationships are used to set restrictions for the target resources. There are three types resource restrictions: resource location, resource collaboration, and resource order. + +- Resource location: sets the running level of the resource on the nodes in the cluster to determine the node where the resource runs during startup or switchover. The running levels are Master Node and Slave 1 in descending order. +- Resource collaboration: indicates whether the target resource and other resources in the cluster run on the same node. **Same Node** indicates that this node must run on the same node as the target resource. **Mutually Exclusive** indicates that this node cannot run on the same node as the target resource. +- Resource order: Set the order in which the target resource and other resources in the cluster are started. **Front Resource** indicates that this resource must be started before the target resource. **Follow-up Resource** indicates that this resource can be started only after the target resource is started. + +## HA MySQL Configuration Example + +### Configuring the Virtual IP Address + +1. On the home page, choose **Add** > **Add Common Resource**, and set the parameters as follows: + + ![](./figures/HA-vip.png) + +2. The resource is successfully created and started, and runs on a node, for example, ha1. +3. The IP address can be pinged and connected. After login, you can perform various operations normally. Resources can be switched to ha2 and can be accessed normally. See the following figure. + ![](./figures/HA-vip-suc.png) + +### Configuring NFS Storage + +Perform the following steps to configure another host as the NFS server: + +1. Install the software package. + + ```shell + # yum install -y nfs-utils rpcbind + ``` + +2. Disable the firewall. + + ```shell + # systemctl stop firewalld && systemctl disable firewalld + ``` + +3. Modify the /etc/selinux/config file to change the status of SELinux to disabled. + + ```shell + # SELINUX=disabled + ``` + +4. Start services. + + ```shell + # systemctl start rpcbind && systemctl enable rpcbind + # systemctl start nfs-server && systemctl enable nfs-server + ``` + +5. Create a shared directory on the server. + + ```shell + # mkdir -p /test + ``` + +6. Modify the NFS configuration file. + + ```shell + # vim /etc/exports + # /test *(rw,no_root_squash) + ``` + +7. Reload the service. + + ```shell + # systemctl reload nfs + ``` + +8. Install the software package on the client. Install MySQL first and then mount NFS to the MySQL data path. + + ```shell + # yum install -y nfs-utils mariadb-server + ``` + +9. On the home page, choose **Add** > **Add Common Resource** and configure the NFS resource as follows: + + ![](./figures/HA-nfs.png) + +10. The resource is successfully created and started, and runs on a node, for example, ha1. The NFS is mounted to the `/var/lib/mysql` directory. The resource is switched to ha2. The NFS is unmounted from ha1 and automatically mounted to ha2. See the following figure. + + ![](./figures/HA-nfs-suc.png) + +### Configuring MySQL + +1. On the home page, choose **Add** > **Add Common Resource** and configure the MySQL resource as follows: + + ![](./figures/HA-mariadb.png) + +2. If the following information is displayed, the resource is successfully added: + + ![](./figures/HA-mariadb-suc.png) + +### Adding the Preceding Resources as a Group Resource + +1. Add the three resources in the resource startup sequence. + + On the home page, choose **Add** > **Add Group Resource** and configure the group resource as follows: + + ![](./figures/HA-group-new.png) + +2. The group resource is successfully created and started. If the command output is the same as that of the preceding common resources, the group resource is successfully added. + + ![](./figures/HA-group-new-suc.png) + +3. Use ha1 as the standby node and migrate the group resource to the ha2 node. The system is running properly. + + ![](./figures/HA-group-new-suc2.png) diff --git a/docs/en/server/installation_upgrade/installation/_toc.yaml b/docs/en/server/installation_upgrade/installation/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..77953f0b5d14ea63bd79cb324971d905f7ebe32f --- /dev/null +++ b/docs/en/server/installation_upgrade/installation/_toc.yaml @@ -0,0 +1,26 @@ +label: Installation Guide +isManual: true +description: Install openEuler +sections: + - label: Installation on Servers + href: ./installation_on_servers.md + sections: + - label: Installation Preparations + href: ./installation_preparations.md + - label: Installation Modes + href: ./installation_modes.md + - label: Installation Guide + href: ./installation_guide.md + - label: Using Kickstart for Automatic Installation + href: ./using_kickstart_for_automatic_installation.md + - label: Installation on Raspberry Pi + href: ./install_pi.md + sections: + - label: Installation Preparations + href: ./installation_preparations_1.md + - label: Installation Modes + href: ./installation_modes_1.md + - label: Installation Guide + href: ./installation_guide_1.md + - label: More Reroutes + href: ./more_resources.md diff --git a/docs/en/server/installation_upgrade/installation/faq.md b/docs/en/server/installation_upgrade/installation/faq.md new file mode 100644 index 0000000000000000000000000000000000000000..fa76d0696d9c5d73fe8eb5bc5ddd7d866cedd6ce --- /dev/null +++ b/docs/en/server/installation_upgrade/installation/faq.md @@ -0,0 +1,348 @@ +# FAQs + +## openEuler Fails to Start After It Is Installed to the Second Drive + +### Symptom + +The OS is installed on the second drive **sdb** during the installation, causing startup failure. + +### Possible Causes + +When openEuler is installed to the second drive, MBR and GRUB are installed to the second drive **sdb** by default. The following two situations may occur: + +1. The first drive contains a complete OS. The OS on the first drive is loaded and started. +2. The first drive does not contain a complete OS. The system fails to be booted from the hard drives. + +These two situations occur because the BIOS loads the boot loader from the first drive **sda** by default to start the OS. If no OS is not installed on the **sda** drive, the system fails to be booted. + +### Solutions + +This problem can be solved using either of the following two methods: + +- During the openEuler installation, select the first drive or both drives, and install the boot loader on the first drive **sda**. +- If openEuler is already installed, modifying the boot sequence in the BIOS and restart the system. + +## openEuler Enters Emergency Mode After It Is Started + +### Symptom + +openEuler enters emergency mode after it is started. + +![](./figures/en-us_image_0229291264.jpg) + +### Possible Causes + +The drive fails to be mounted due to damaged OS files or timeout caused by excessively high I/O pressure (the timeout threshold is 90 seconds). + +These causes may be the results of an unexpected system power-off or low I/O performance of drives. + +### Solutions + +1. Log in to openEuler as the **root** user. +2. Check and restore files by using the file system check \(fsck\) tool, and restart openEuler. + + >[!NOTE] **NOTE:** + >The fsck tool checks and maintains inconsistent file systems. If an unexpected system power-off occurs or a drive is faulty, run the **fsck** command to check file systems. Run the **fsck.ext3 -h** and **fsck.ext4 -h** commands to view the usage of the fsck tool. + +If you want to disable the timeout mechanism of drive mounting, add **x-systemd.device-timeout=0** to the **etc/fstab** file. For example: + +```shell +# /etc/fstab +# Created by anaconda on Mon Sep 14 17:25:48 2015 +# +# Accessible filesystems, by reference, are maintained under '/dev/disk' +# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info +# +/dev/mapper/openEuler-root / ext4 defaults,x-systemd.device-timeout=0 0 0 +UUID=afcc811f-4b20-42fc-9d31-7307a8cfe0df /boot ext4 defaults,x-systemd.device-timeout=0 0 0 +/dev/mapper/openEuler-home /home ext4 defaults 0 0 +/dev/mapper/openEuler-swap swap swap defaults 0 0 +``` + +## openEuler Fails to Be Reinstalled When an Logical Volume Group Cannot Be Activated + +### Symptom + +After a drive fails, a logical volume group cannot be activated and openEuler fails to be reinstalled. + +### Possible Causes + +During the installation of openEuler, the logical volume groups are activated. An error message is displayed when one of the groups fails to be activated. + +### Solutions + +Before reinstalling openEuler, restore the abnormal logical volume group to the normal status or remove it. For example: + +- Restore the logical volume group. + 1. Clear the activation status of the abnormal logical volume group to ensure that the error message "Can't open /dev/sdc exclusively mounted filesystem" is not displayed: + + ```shell + vgchange -a n testvg32947 + ``` + + 2. Recreate a physical volume based on the backup file: + + ```shell + pvcreate --uuid JT7zlL-K5G4-izjB-3i5L-e94f-7yuX-rhkLjL --restorefile /etc/lvm/backup/testvg32947 /dev/sdc + ``` + + 3. Restore the logical volume group information: + + ```shell + vgcfgrestore testvg32947 + ``` + + 4. Reactivate the logical volume group: + + ```shell + vgchange -ay testvg32947 + ``` + +- Remove the logical volume group: + + ```shell + vgchange -a n testvg32947 + vgremove -y testvg32947 + ``` + +## An Exception Occurs During the Selection of the Installation Source + +### Symptom + +After the installation source is selected, the message "Error checking software selection" is displayed. + +### Possible Causes + +The software package dependency in the installation source is abnormal. + +### Solutions + +Check whether the installation source is abnormal. If yes, use a new installation source. + +## Kdump Service Fails to Be Enabled + +### Symptom + +The **systemctl status kdump** command displays the following output, indicating that no memory is reserved. + +![](./figures/en-us_image_0229291280.png) + +### Possible Causes + +The kdump service requires the system to reserve memory for running the kdump kernel. However, the system does not reserve memory for the kdump service. As a result, the kdump service cannot be started. + +### Solutions + +If openEuler is already installed: + +1. Add **crashkernel=1024M,high** to **/boot/efi/EFI/openEuler/grub.cfg**. +2. Restart the system for the configuration to take effect. +3. Run the following command to check the kdump status: + + ```shell + systemctl status kdump + ``` + + If the following information is displayed, the kdump status is **active**, indicating that the kdump service is enabled. No further action is required. + + ![](./figures/en-us_image_0229291272.png) + +### Parameter Description + +The following parameters are used to specify the memory reserved for the kdump kernel. + +**Table 1** crashkernel parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Kernel Boot Parameter

+

Description

+

Default Value

+

Remarks

+

crashkernel=X

+

Reserve X of the physical memory for kdump when the physical memory is less than 4 GB.

+

None. You can adjust the value as required.

+

This parameter is used only when the memory is less than 4 GB. Ensure that the available contiguous memory is sufficient for reservation.

+

crashkernel=X@Y

+

Reserve X of the memory at the start address Y for kdump.

+

None. You can adjust the value as required.

+

Ensure that the X of the memory at the start address Y is not reserved for other modules.

+

crashkernel=X,high

+

Reserve 256 MB of the physical memory for kdump when the physical memory is less than 4 GB, or X of the physical memory for kdump when the physical memory is greater than or equal to 4 GB.

+

None. You can adjust the value based as required. The recommended value is 1024M,high.

+

Ensure that 256 MB of continuous memory is available when the physical memory is less than 4 GB, or X of continuous memory is available when the physical memory is greater than or equal to 4 GB. The actual reserved memory is 256 MB plus X.

+

crashkernel=X,low

+

crashkernel=Y,high

+

Reserve X of the physical memory for kdump when the physical memory is less than 4 GB, or Y of the physical memory for kdump when the physical memory is greater than or equal to 4 GB.

+

None. You can adjust the value as required.

+

Ensure that X of of continuous memory is available when the physical memory is less than 4 GB, or Y of continuous memory is available when the physical memory is greater than or equal to 4 GB. The actual reserved memory is X plus Y.

+
+ +## Fails to Select Only One Drive for Reinstallation When openEuler Is Installed on a Logical Volume Consisting of Multiple Drives + +### Symptom + +openEuler is installed on a logical volume consisting of multiple drives. An error message as shown in [Figure 1](#fig115949762617) is displayed when you attempt to select one of the drives for reinstallation. + +**Figure 1** Error message +![](./figures/error-message.png) + +### Possible Causes + +The logical volume used for previous installation contains multiple drives. If you select one of the drives for reinstallation, the logical volume will be damaged. + +### Solutions + +The logical volume formed by multiple drives is equivalent to a volume group. Therefore, you only need to delete the corresponding volume group. + +1. Press **Ctrl**+**Alt**+**F2** to switch to the CLI and run the following command to find the volume group: + + ```shell + vgs + ``` + + ![](./figures/en-us_image_0231657950.png) + +2. Run the following command to delete the volume group: + + ```shell + vgremove euleros + ``` + +3. Run the following command to restart the installation program for the modification to take effect: + + ```shell + systemctl restart anaconda + ``` + + >[!NOTE] **NOTE:** + >You can also press **Ctrl**+**Alt**+**F6** to return to the GUI and click **Refresh** in the lower right corner to refresh the storage configuration. + +## openEuler Fails to Be Installed on an x86 PM in UEFI Mode due to the Secure Boot Setting + +### Symptom + +During the installation of openEuler on an x86 PM in UEFI mode, the system stays at the "No bootable device" page and the installation cannot continue because secure boot is set to enabled \(by default, it is disabled\), as shown in [Figure 2](#fig115949762618). + +**Figure 2** "No bootable device" page +![](./figures/No-bootable-device.png) + +### Possible Causes + +After secure boot is set to enabled, the mainboard verifies the boot loader and OS. If the boot loader and OS are not signed using the corresponding private key, they cannot pass the authentication of the built-in public key on the mainboard. + +### Solutions + +Enter the BIOS, disable secure boot, and reinstall openEuler. + +1. During the system startup, press **F11** and enter the password **Admin@9000** to access the BIOS. + + >[!NOTE] **NOTE:** + >The server here refers to the Huawei TaiShan server. If other servers are used, you need to confirm your password. + + ![](./figures/bios.png) + +2. Choose **Administer Secure Boot**. + + ![](./figures/security.png) + +3. Set **Enforce Secure Boot** to **Disabled**. + + ![](./figures/enforce-secure-boot.png) + + >[!NOTE] **NOTE:** + >After **Enforce Secure Boot** is set to **Disabled**, save the settings and exit. Then, reinstall the system. + +## pmie_check Failure Is Reported in the messages Log During openEuler Installation + +### Symptom + +During the OS installation, if you click **Server > Performance tool**, PCP is installed. After the OS is installed and restarted, an error "pmie_check failed in /usr/share/pcp/lib/pmie" is displayed in the **/var/log/messages** log. + +### Possible Causes + +Anaconda cannot install the SELinux policy module in the chroot environment. During the PCP-SELinux installation, the postin script fails to execute the PCP-related SELinux policy module. As a result, an error is reported after the OS is restarted. + +### Solutions + +After the openEuler is installed and restarted, perform either of the following two operations: + +1. Install SElinux policy module pcpupstream. + + ```shell + /usr/libexec/pcp/bin/selinux-setup /var/lib/pcp/selinux install "pcpupstream" + + ``` + +2. Reinstall pcp-selinux + + ```shell + sudo dnf reinstall pcp-selinux + + ``` + +## Installation Fails when You Select Two Drives with OSs Installed for Custom Partitioning + +### Symptom + +Two drives with OSs installed exist in on the machine. During openEuler installation, if you select one drive for custom partitioning, click **Cancel**, and then perform custom partitioning on the other drive, the installation fails. + +![](./figures/cancle_drive.png) + +![](./figures/custom_paratition.png) + +### Possible Causes + +Two drive selection operations are performed. After you click **Cancel** and then selects another drive, the drive information is incorrect. As a result, the installation fails. + +### Solutions + +Directly select the target drive for custom partitioning. Do not frequently cancel the operation. If you have to cancel and select another drive, you are advised to restart the installation procedure. + +### Learn More About the Issue at + + + +## vmcore Fails to Be Generated by Kdump on the PM with LSI MegaRAID Controller Card Installed + +### Symptom + +After the Kdump service is deployed, kernel breaks down due to the manual execution of the **echo c > /proc/sysrq-trigger** command or kernel fault. When Kdump attempts to boot into the second kernel, an error "BRCM Debug mfi stat 0x2d, data len requested/completed 0x200/0x0" is reported by the MegaRAID driver, as shown in the following figure. As a result, vmcore fails to be generated. + +![Error information](figures/Megaraid_IO_Request_uncompleted.png) + +### Possible Causes + +The **reset_devices** boot parameter is configured by default, making the MegaRAID controller card or drive faulty during second kernel startup. An error is reported when the vmcore file is dumped to the array controlled by the MegaRAID controller. As a result, vmcore fails to be generated. + +### Solutions + +Delete the **reset_devices** parameter in the **/etc/sysconfig/kdump** file on the PM, as shown in the following figure. In this way, the I/O request will be responded when the MegaRAID driver resets the device during the second kernel startup, and vmcore will be successfully generated. + +![Deleting reset_devices](figures/reset_devices.png) diff --git a/docs/en/server/installation_upgrade/installation/figures/Advanced_User_Configuration.png b/docs/en/server/installation_upgrade/installation/figures/Advanced_User_Configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..1cd4abd99186b3e90d00299695644abf66283386 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/Advanced_User_Configuration.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/Figure-18.png b/docs/en/server/installation_upgrade/installation/figures/Figure-18.png new file mode 100644 index 0000000000000000000000000000000000000000..983d1f2f4803f3a462b7946de7add2c26ac0552f Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/Figure-18.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/Installation_source.png b/docs/en/server/installation_upgrade/installation/figures/Installation_source.png new file mode 100644 index 0000000000000000000000000000000000000000..a2a69b197aea75ab494e1b5a66fe5efa1ff7d6a9 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/Installation_source.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/Installation_wizard.gif b/docs/en/server/installation_upgrade/installation/figures/Installation_wizard.gif new file mode 100644 index 0000000000000000000000000000000000000000..f57d3d3b1823573156150e00f51f406730719e2d Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/Installation_wizard.gif differ diff --git a/docs/en/server/installation_upgrade/installation/figures/Installation_wizard.png b/docs/en/server/installation_upgrade/installation/figures/Installation_wizard.png new file mode 100644 index 0000000000000000000000000000000000000000..f7fdb5c5cdde459c50ad765e015dabe665170303 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/Installation_wizard.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/Keyboard_layout.png b/docs/en/server/installation_upgrade/installation/figures/Keyboard_layout.png new file mode 100644 index 0000000000000000000000000000000000000000..7ba59e5593c9e46f66648fb6c70ff0a984f555b4 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/Keyboard_layout.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/Manual_partitioning.png b/docs/en/server/installation_upgrade/installation/figures/Manual_partitioning.png new file mode 100644 index 0000000000000000000000000000000000000000..0b6e02d1fa4d46ba1a1c25361a4f37d1b7b01268 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/Manual_partitioning.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/Megaraid_IO_Request_uncompleted.png b/docs/en/server/installation_upgrade/installation/figures/Megaraid_IO_Request_uncompleted.png new file mode 100644 index 0000000000000000000000000000000000000000..9f5a9e0f03055c59148830c8f8894196acd6861f Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/Megaraid_IO_Request_uncompleted.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/NetworkandHostName.png b/docs/en/server/installation_upgrade/installation/figures/NetworkandHostName.png new file mode 100644 index 0000000000000000000000000000000000000000..1066309b2171f5877eacf0fb3baf174863f914c2 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/NetworkandHostName.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/No-bootable-device.png b/docs/en/server/installation_upgrade/installation/figures/No-bootable-device.png new file mode 100644 index 0000000000000000000000000000000000000000..944c658d621f00b18e4aa75eaca420d76c08715c Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/No-bootable-device.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/Partition_expansion.png b/docs/en/server/installation_upgrade/installation/figures/Partition_expansion.png new file mode 100644 index 0000000000000000000000000000000000000000..37a6ef7a2371a9a5518f6d2ce0dc6d36fc71fe1b Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/Partition_expansion.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/Target_installation_position - 01.png b/docs/en/server/installation_upgrade/installation/figures/Target_installation_position - 01.png new file mode 100644 index 0000000000000000000000000000000000000000..339d3d96f469f54f5b9c0f3b40fb0cd78935180c Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/Target_installation_position - 01.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/Target_installation_position.png b/docs/en/server/installation_upgrade/installation/figures/Target_installation_position.png new file mode 100644 index 0000000000000000000000000000000000000000..f2ca227f06dc9a986137c5d77180bbb575921b54 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/Target_installation_position.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/advanced-user-configuration.png b/docs/en/server/installation_upgrade/installation/figures/advanced-user-configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..5f8ffd97ab2b18eb98bda88534b5ba03ce0f769a Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/advanced-user-configuration.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/bios.png b/docs/en/server/installation_upgrade/installation/figures/bios.png new file mode 100644 index 0000000000000000000000000000000000000000..d5a96738001c5a910174c030af583bb09ff29ce6 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/bios.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/cancle_drive.png b/docs/en/server/installation_upgrade/installation/figures/cancle_drive.png new file mode 100644 index 0000000000000000000000000000000000000000..f1db0f2c524695303f0d8791fcb3c256c75507ad Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/cancle_drive.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/choosesoftware.png b/docs/en/server/installation_upgrade/installation/figures/choosesoftware.png new file mode 100644 index 0000000000000000000000000000000000000000..83d9f9eb3dea46b9cbb303e59cd48df6da0ec356 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/choosesoftware.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/completing-the-automatic-installation.png b/docs/en/server/installation_upgrade/installation/figures/completing-the-automatic-installation.png new file mode 100644 index 0000000000000000000000000000000000000000..f2169685ef202bae133ae74fec620ec64aea46df Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/completing-the-automatic-installation.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/confignetwork.png b/docs/en/server/installation_upgrade/installation/figures/confignetwork.png new file mode 100644 index 0000000000000000000000000000000000000000..0ebad9164b82bcc712074034938a8a5895ff50ee Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/confignetwork.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/confignetwork1.png b/docs/en/server/installation_upgrade/installation/figures/confignetwork1.png new file mode 100644 index 0000000000000000000000000000000000000000..92ee39c541da427f664ceaf9d7a647542425e6ab Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/confignetwork1.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/createuser.png b/docs/en/server/installation_upgrade/installation/figures/createuser.png new file mode 100644 index 0000000000000000000000000000000000000000..992b075c49ed8605255b0fcae1fc921ad88d2fed Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/createuser.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/creating-a-user.png b/docs/en/server/installation_upgrade/installation/figures/creating-a-user.png new file mode 100644 index 0000000000000000000000000000000000000000..0e2befb0832d1167f5ffdcafdf7d9952d9ccdfbe Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/creating-a-user.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/custom_paratition.png b/docs/en/server/installation_upgrade/installation/figures/custom_paratition.png new file mode 100644 index 0000000000000000000000000000000000000000..d2e8c68e6af866e96bf5dd2a2f532de81c59a9d9 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/custom_paratition.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/dateandtime.png b/docs/en/server/installation_upgrade/installation/figures/dateandtime.png new file mode 100644 index 0000000000000000000000000000000000000000..21316edd16c657cf4c75ac07b5402bb5591ff781 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/dateandtime.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/disk-encryption-password.png b/docs/en/server/installation_upgrade/installation/figures/disk-encryption-password.png new file mode 100644 index 0000000000000000000000000000000000000000..ba84e060133644910ff199376e11d2929cfe8d47 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/disk-encryption-password.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/drive-icon.png b/docs/en/server/installation_upgrade/installation/figures/drive-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b41fcb09dfbf805da4863142855e7c2de4bf4c7b Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/drive-icon.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/en-us_image_0213178479.png b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0213178479.png new file mode 100644 index 0000000000000000000000000000000000000000..62ef0decdf6f1e591059904001d712a54f727e68 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0213178479.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291229.png b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291229.png new file mode 100644 index 0000000000000000000000000000000000000000..b315531ca7f99d2a045b7933351af96cadc1ad77 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291229.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291236.png b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291236.png new file mode 100644 index 0000000000000000000000000000000000000000..bf466a3d751df4a4c6fd99aecf620ec9adf540a3 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291236.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291243.png b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291243.png new file mode 100644 index 0000000000000000000000000000000000000000..2418510f855facae4b47129840894490a1eac7ca Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291243.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291247.png b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291247.png new file mode 100644 index 0000000000000000000000000000000000000000..d67b599b9ab74017c0800529053befed3efab8a7 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291247.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291264.jpg b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291264.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f0a0658e08010f4f453e558a41e31257783b416 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291264.jpg differ diff --git a/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291270.png b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291270.png new file mode 100644 index 0000000000000000000000000000000000000000..deefef68670d64c131e4c41911a01236158f1dd1 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291270.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291272.png b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291272.png new file mode 100644 index 0000000000000000000000000000000000000000..e0ad8102bddd886c3bd7a306b088e8a52e2b99c9 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291272.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291280.png b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291280.png new file mode 100644 index 0000000000000000000000000000000000000000..5754e734c48b23ace2a4fbf1302b820077cd7b71 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291280.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291286.png b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291286.png new file mode 100644 index 0000000000000000000000000000000000000000..4ffcb081e2c8f82bcc49a65a939f2cd8bd6f949b Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229291286.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229420473.png b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229420473.png new file mode 100644 index 0000000000000000000000000000000000000000..86c61a4b8e2a5795baff2fc74629924d01d7b97b Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0229420473.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/en-us_image_0231657950.png b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0231657950.png new file mode 100644 index 0000000000000000000000000000000000000000..bea985ef710c57aeba16600067304b1005ad92e8 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/en-us_image_0231657950.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/enforce-secure-boot.png b/docs/en/server/installation_upgrade/installation/figures/enforce-secure-boot.png new file mode 100644 index 0000000000000000000000000000000000000000..0e40f5fd8d73dbcbad6bdcec5d56d3883d54023a Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/enforce-secure-boot.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/error-message.png b/docs/en/server/installation_upgrade/installation/figures/error-message.png new file mode 100644 index 0000000000000000000000000000000000000000..8c2f803bff304fd016e6c92d63ad60d9544d442e Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/error-message.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/figure-10.png b/docs/en/server/installation_upgrade/installation/figures/figure-10.png new file mode 100644 index 0000000000000000000000000000000000000000..02d800c992dc4ad61d97e7f341436c12171d7842 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/figure-10.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/figure-11.png b/docs/en/server/installation_upgrade/installation/figures/figure-11.png new file mode 100644 index 0000000000000000000000000000000000000000..d425a3da237076fa7743191cde86bd1960a4d906 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/figure-11.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/figure-12.png b/docs/en/server/installation_upgrade/installation/figures/figure-12.png new file mode 100644 index 0000000000000000000000000000000000000000..84a7ae7c32ec5636461c2ba9e1fac0172055ddc0 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/figure-12.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/figure-13.png b/docs/en/server/installation_upgrade/installation/figures/figure-13.png new file mode 100644 index 0000000000000000000000000000000000000000..d300219fa6d11d75a0bca332ef3c86ff2fc348c2 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/figure-13.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/figure-14.png b/docs/en/server/installation_upgrade/installation/figures/figure-14.png new file mode 100644 index 0000000000000000000000000000000000000000..028e71d444d2c5ae729758efcbdc5ef1555e96d4 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/figure-14.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/figure-15.png b/docs/en/server/installation_upgrade/installation/figures/figure-15.png new file mode 100644 index 0000000000000000000000000000000000000000..4acae17425a117c5384e994cd6bd0c5b0e2594f2 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/figure-15.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/figure-16.png b/docs/en/server/installation_upgrade/installation/figures/figure-16.png new file mode 100644 index 0000000000000000000000000000000000000000..d03641c19cb7c967873ad27b1cd944f6cb8770ab Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/figure-16.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/figure-17.png b/docs/en/server/installation_upgrade/installation/figures/figure-17.png new file mode 100644 index 0000000000000000000000000000000000000000..1fe04d7ce08e516e2dade3903f6adf7257ff7443 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/figure-17.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/figure-19.png b/docs/en/server/installation_upgrade/installation/figures/figure-19.png new file mode 100644 index 0000000000000000000000000000000000000000..9acefe6c57e060f0dc229955c4f25815fa877b41 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/figure-19.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/figure-4.png b/docs/en/server/installation_upgrade/installation/figures/figure-4.png new file mode 100644 index 0000000000000000000000000000000000000000..329cc06b70cc26cde85106d40db2c8a17947f937 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/figure-4.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/figure-5.png b/docs/en/server/installation_upgrade/installation/figures/figure-5.png new file mode 100644 index 0000000000000000000000000000000000000000..e6eb645d14879a96012b1b701f19ef089fe30b66 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/figure-5.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/figure-6.png b/docs/en/server/installation_upgrade/installation/figures/figure-6.png new file mode 100644 index 0000000000000000000000000000000000000000..516532dc50f460cb9b6c584093fc2ff5a30eb9db Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/figure-6.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/figure-7.png b/docs/en/server/installation_upgrade/installation/figures/figure-7.png new file mode 100644 index 0000000000000000000000000000000000000000..36691fe6df613f8d52255fdf04abe6049227d0ab Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/figure-7.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/figure-8.png b/docs/en/server/installation_upgrade/installation/figures/figure-8.png new file mode 100644 index 0000000000000000000000000000000000000000..73a3a7ae52f88fd396b30971e39d96f5710a94d1 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/figure-8.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/figure-9.png b/docs/en/server/installation_upgrade/installation/figures/figure-9.png new file mode 100644 index 0000000000000000000000000000000000000000..e61db35b24ac5990117916135dd07950c55fd306 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/figure-9.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/ftp-mode.png b/docs/en/server/installation_upgrade/installation/figures/ftp-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..6ff977f26b7c483b921db9c458873e7edc0e52a9 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/ftp-mode.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/host_env8.png b/docs/en/server/installation_upgrade/installation/figures/host_env8.png new file mode 100644 index 0000000000000000000000000000000000000000..d08dcc89f40e1671a55a42fbcb02f26e987a461e Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/host_env8.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/http-mode.png b/docs/en/server/installation_upgrade/installation/figures/http-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..9df5b0988413526c1fd3e45c6d70076e1486840a Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/http-mode.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/image-dialog-box.png b/docs/en/server/installation_upgrade/installation/figures/image-dialog-box.png new file mode 100644 index 0000000000000000000000000000000000000000..caeb56bb46f766dd39d66a65e308c591954d32cf Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/image-dialog-box.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/installation-process.png b/docs/en/server/installation_upgrade/installation/figures/installation-process.png new file mode 100644 index 0000000000000000000000000000000000000000..8b7d5361693eaa2eb9ecb457aa9b14fa6e08abb6 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/installation-process.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/installation-summary.png b/docs/en/server/installation_upgrade/installation/figures/installation-summary.png new file mode 100644 index 0000000000000000000000000000000000000000..83dd0d2d68b446807c6a82f24409535c6e150541 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/installation-summary.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/installation_overview.png b/docs/en/server/installation_upgrade/installation/figures/installation_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..4881306ff9d7adb4c0e9f5f9285300c020958a18 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/installation_overview.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/installation_procedure.png b/docs/en/server/installation_upgrade/installation/figures/installation_procedure.png new file mode 100644 index 0000000000000000000000000000000000000000..ef06d29cad2b0a9f41940c25d8f0d27ca711219e Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/installation_procedure.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/installsourceen.png b/docs/en/server/installation_upgrade/installation/figures/installsourceen.png new file mode 100644 index 0000000000000000000000000000000000000000..43e59b694ec1afcf8591e8272390da927da9a3fe Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/installsourceen.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/languagesupport.png b/docs/en/server/installation_upgrade/installation/figures/languagesupport.png new file mode 100644 index 0000000000000000000000000000000000000000..025d769cd7da3f1e2c42485df8e10ce26d2a6c84 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/languagesupport.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/manual-partitioning-page.png b/docs/en/server/installation_upgrade/installation/figures/manual-partitioning-page.png new file mode 100644 index 0000000000000000000000000000000000000000..6d61aa6c698b9dbc01255d7d646548e636482872 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/manual-partitioning-page.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/nfs-mode.png b/docs/en/server/installation_upgrade/installation/figures/nfs-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..9c678c7e0a32ea10dc6fce04e662139a5c8673b8 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/nfs-mode.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/password-of-the-root-account.png b/docs/en/server/installation_upgrade/installation/figures/password-of-the-root-account.png new file mode 100644 index 0000000000000000000000000000000000000000..97c52081490f5fdaf733f7c45dd91e99a81eb1db Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/password-of-the-root-account.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/reset_devices.png b/docs/en/server/installation_upgrade/installation/figures/reset_devices.png new file mode 100644 index 0000000000000000000000000000000000000000..70cc2e0138dd48950f4704bd3f1160448d5058a1 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/reset_devices.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/restart-icon.png b/docs/en/server/installation_upgrade/installation/figures/restart-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a1b02b2dff42c90845d2491192507ea6967352e3 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/restart-icon.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/root_password.png b/docs/en/server/installation_upgrade/installation/figures/root_password.png new file mode 100644 index 0000000000000000000000000000000000000000..c8fd84613b9fbb9bee287ba911d1bcef050f8d0e Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/root_password.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/security.png b/docs/en/server/installation_upgrade/installation/figures/security.png new file mode 100644 index 0000000000000000000000000000000000000000..59ac7bfcef796fc32d0127a9d6095d32cb282fb2 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/security.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/selecting-a-language.png b/docs/en/server/installation_upgrade/installation/figures/selecting-a-language.png new file mode 100644 index 0000000000000000000000000000000000000000..73a3a7ae52f88fd396b30971e39d96f5710a94d1 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/selecting-a-language.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/selecting-installation-software.png b/docs/en/server/installation_upgrade/installation/figures/selecting-installation-software.png new file mode 100644 index 0000000000000000000000000000000000000000..6c51b6ec9a78aa5d411dbef05b4218953f90a893 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/selecting-installation-software.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/selectlanguage.png b/docs/en/server/installation_upgrade/installation/figures/selectlanguage.png new file mode 100644 index 0000000000000000000000000000000000000000..0d1ba203357b9c1389b8894af057431abef7daaf Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/selectlanguage.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/setting-a-system-language.png b/docs/en/server/installation_upgrade/installation/figures/setting-a-system-language.png new file mode 100644 index 0000000000000000000000000000000000000000..e8e6faa69580e707657cba3f2f589918321a4b4d Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/setting-a-system-language.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/setting-date-and-time.png b/docs/en/server/installation_upgrade/installation/figures/setting-date-and-time.png new file mode 100644 index 0000000000000000000000000000000000000000..6e366072db2ca698ae2bc317a361e9d38877a2d0 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/setting-date-and-time.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/setting-the-boot-device.png b/docs/en/server/installation_upgrade/installation/figures/setting-the-boot-device.png new file mode 100644 index 0000000000000000000000000000000000000000..42455bcd651b98a08b012b275d5f170daf07ac59 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/setting-the-boot-device.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/setting-the-installation-destination.png b/docs/en/server/installation_upgrade/installation/figures/setting-the-installation-destination.png new file mode 100644 index 0000000000000000000000000000000000000000..05d2e071983324563991e919a61f4d0690d543f6 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/setting-the-installation-destination.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/setting-the-keyboard-layout.png b/docs/en/server/installation_upgrade/installation/figures/setting-the-keyboard-layout.png new file mode 100644 index 0000000000000000000000000000000000000000..62b0074220b8e2c8ebca37dceecc92e0c2fcdffc Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/setting-the-keyboard-layout.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/setting-the-network-and-host-name.png b/docs/en/server/installation_upgrade/installation/figures/setting-the-network-and-host-name.png new file mode 100644 index 0000000000000000000000000000000000000000..b17ebdaafeaa2228ddbe0d8135fee3eabdc1cb76 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/setting-the-network-and-host-name.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/sourceftp.png b/docs/en/server/installation_upgrade/installation/figures/sourceftp.png new file mode 100644 index 0000000000000000000000000000000000000000..71a9ddda1f20a439b034dd4d2dcffe69a79cc4ea Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/sourceftp.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/sourcehttp.png b/docs/en/server/installation_upgrade/installation/figures/sourcehttp.png new file mode 100644 index 0000000000000000000000000000000000000000..9e1a5ed391edaf5411061be1730ccab76e12ed42 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/sourcehttp.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/sourcenfs.png b/docs/en/server/installation_upgrade/installation/figures/sourcenfs.png new file mode 100644 index 0000000000000000000000000000000000000000..f0e97bdba65e7b2a54b78d3f5e99f792a6ff82af Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/sourcenfs.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/startparam.gif b/docs/en/server/installation_upgrade/installation/figures/startparam.gif new file mode 100644 index 0000000000000000000000000000000000000000..8d1f106947d70b0df1d79bbed3cb513c1bbc7d81 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/startparam.gif differ diff --git a/docs/en/server/installation_upgrade/installation/figures/startparam.png b/docs/en/server/installation_upgrade/installation/figures/startparam.png new file mode 100644 index 0000000000000000000000000000000000000000..b197f4d492213513edf84a99cdb14f186630a828 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/startparam.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/target_install_position.png b/docs/en/server/installation_upgrade/installation/figures/target_install_position.png new file mode 100644 index 0000000000000000000000000000000000000000..7f98f41f9819cb8826939d1a4fb605e26b171401 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/target_install_position.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291243.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291243.png new file mode 100644 index 0000000000000000000000000000000000000000..2418510f855facae4b47129840894490a1eac7ca Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291243.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291247.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291247.png new file mode 100644 index 0000000000000000000000000000000000000000..d67b599b9ab74017c0800529053befed3efab8a7 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291247.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291264.jpg b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291264.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f0a0658e08010f4f453e558a41e31257783b416 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291264.jpg differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291270.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291270.png new file mode 100644 index 0000000000000000000000000000000000000000..deefef68670d64c131e4c41911a01236158f1dd1 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291270.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291272.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291272.png new file mode 100644 index 0000000000000000000000000000000000000000..e0ad8102bddd886c3bd7a306b088e8a52e2b99c9 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291272.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291280.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291280.png new file mode 100644 index 0000000000000000000000000000000000000000..5754e734c48b23ace2a4fbf1302b820077cd7b71 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291280.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291286.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291286.png new file mode 100644 index 0000000000000000000000000000000000000000..4ffcb081e2c8f82bcc49a65a939f2cd8bd6f949b Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229291286.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229420473.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229420473.png new file mode 100644 index 0000000000000000000000000000000000000000..86c61a4b8e2a5795baff2fc74629924d01d7b97b Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0229420473.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0231657950.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0231657950.png new file mode 100644 index 0000000000000000000000000000000000000000..bea985ef710c57aeba16600067304b1005ad92e8 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_0231657950.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_Installed.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_Installed.png new file mode 100644 index 0000000000000000000000000000000000000000..33d0a04f04cf029e31ea5d8ae44839031e62b675 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_Installed.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_createUsr.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_createUsr.png new file mode 100644 index 0000000000000000000000000000000000000000..4cee49e214e87de21ecea2eea4a943f83cbe7a5b Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_createUsr.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_installSofware.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_installSofware.png new file mode 100644 index 0000000000000000000000000000000000000000..b9a4e5f26f07ba8a30f81d277c5623942bb497bb Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_installSofware.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_installSource.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_installSource.png new file mode 100644 index 0000000000000000000000000000000000000000..3d389473db457b9a19be7dacdd518489ffcfcbd3 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_installSource.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_installdest.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_installdest.png new file mode 100644 index 0000000000000000000000000000000000000000..4209d529e8e9fe7c6994b115406d9f0f54591685 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_installdest.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_language.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_language.png new file mode 100644 index 0000000000000000000000000000000000000000..926764de3579ec3efd00143d87d0a3421c8e53a7 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_language.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_menu.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..5a926240fc432344679691226356b0995e8ecca4 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_menu.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_net.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_net.png new file mode 100644 index 0000000000000000000000000000000000000000..9dac3c51959809b2a1caddd869f947a2aaa2335d Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_net.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_networkConfig.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_networkConfig.png new file mode 100644 index 0000000000000000000000000000000000000000..f63832b0fbe4192c575ea1e7fc390f3a8f2c02df Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_networkConfig.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_ntp.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_ntp.png new file mode 100644 index 0000000000000000000000000000000000000000..c3fe55d693f634bba48ccfc7394ca3cf08cc722a Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_ntp.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_rootpassword.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_rootpassword.png new file mode 100644 index 0000000000000000000000000000000000000000..0eca548547c20a192b65beea2975613c8c78517c Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_rootpassword.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_rootset.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_rootset.png new file mode 100644 index 0000000000000000000000000000000000000000..88fa89f98e11762b72382da6cd25a70aa83031c4 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_rootset.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_software.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_software.png new file mode 100644 index 0000000000000000000000000000000000000000..93eb89226c05c01b7f6e6bffee6e87edaa4b7588 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_software.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_startInstall.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_startInstall.png new file mode 100644 index 0000000000000000000000000000000000000000..5c5a722f855a9f054b7818289e0521b48a73664a Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_startInstall.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_timeNTP.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_timeNTP.png new file mode 100644 index 0000000000000000000000000000000000000000..5ab50811e839af0934ace8a59348c501e20ed8be Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_timeNTP.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_timeZone.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_timeZone.png new file mode 100644 index 0000000000000000000000000000000000000000..d3dba49b4fc51f01dbe8a33edf8234bddee52500 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_timeZone.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_timeZoneCity.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_timeZoneCity.png new file mode 100644 index 0000000000000000000000000000000000000000..82a185c151638ceb3f8b96bbc1ca3fe5f20bacf9 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_timeZoneCity.png differ diff --git a/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_timedate.png b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_timedate.png new file mode 100644 index 0000000000000000000000000000000000000000..b5f0396032c9fb2db64fb3d0cb3ad21ba8da70b4 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/figures/zh-cn_image_text_timedate.png differ diff --git a/docs/en/server/installation_upgrade/installation/install_pi.md b/docs/en/server/installation_upgrade/installation/install_pi.md new file mode 100644 index 0000000000000000000000000000000000000000..9c643080454ac812127fbe4c24e2cfbf41cda648 --- /dev/null +++ b/docs/en/server/installation_upgrade/installation/install_pi.md @@ -0,0 +1,3 @@ +# Installation on Raspberry Pi + +This section describes how to install openEuler on Raspberry Pi. Users must have basic knowledge of Linux OS management. diff --git a/docs/en/server/installation_upgrade/installation/installation_guide.md b/docs/en/server/installation_upgrade/installation/installation_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..9b21126594622bd428b69558f893afa0c65306a9 --- /dev/null +++ b/docs/en/server/installation_upgrade/installation/installation_guide.md @@ -0,0 +1,512 @@ +# Installation Guideline + +This section describes how to install openEuler using a CD/DVD-ROM. The installation process is the same for other installation modes except the boot option. + +## Starting the Installation + +### Booting from the CD/DVD-ROM Drive + +Mount the ISO image of openEuler to the CD/DVD-ROM drive of the server and restart the server. The procedure is as follows: + +>[!NOTE] **Note** +>Before the installation, ensure that the server boots from the CD/DVD-ROM drive preferentially. The following steps describe how to use connect a virtual CD/DVD-ROM drive to the baseboard management controller (BMC) and install openEuler. The procedure for installing openEuler from a physical drive is the same as that of a virtual drive. + +1. On the toolbar, click the icon shown in the following figure. + + **Figure 1** Drive icon + ![](./figures/drive-icon.png) + + An image dialog box is displayed, as shown in the following figure. + + **Figure 2** Image dialog box + ![](./figures/image-dialog-box.png) + +2. Select **Image File** and then click **Browse**. The **Open** dialog box is displayed. +3. Select the image file and click **Open**. In the image dialog box, click **Connect**. If **Connect** changes to **Disconnect**, the virtual CD/DVD-ROM drive is connected to the server. +4. On the toolbar, click the restart icon shown in the following figure to restart the device. + + **Figure 3** Restart icon + ![](./figures/restart-icon.png) + +### Installation Boot Menu + +A boot menu is displayed after the system is booted using the boot medium. In addition to options for starting the installation program, some other options are available on the boot menu. During system installation, the **Test this media & install openEuler 22.03-LTS-SP4** option is selected by default. If you want to select an option other than the default option, use the "↑" and "↓" arrow keys on the keyboard to make the selection and press Enter when the. + +>[!NOTE] **Note** +> +>- If you do not perform any operations within 1 minute, the system automatically selects the default option **Test this media & install openEuler 22.03-LTS-SP4** and enters the installation page. +>- During physical machine installation, if you cannot use the arrow keys to select boot options and the system does not respond after you press **Enter**, click ![](./figures/en-us_image_0229420473.png) on the BMC page and configure **Key & Mouse Reset**. + +**Figure 4** Installation boot menu +![](./figures/Installation_wizard.png) + +Installation boot options are described as follows: + +- **Install openEuler 22.03-LTS-SP4**: Install openEuler on your server in GUI mode. + +- **Test this media & install openEuler 22.03-LTS-SP4**: Default option. Install openEuler on your server in GUI mode. The integrity of the installation medium is checked before the installation program is started. + +- **Troubleshooting**: Troubleshooting mode, which is used when the system cannot be installed properly. In troubleshooting mode, the following options are available: + - **Install openEuler 22.03-LTS-SP4 in basic graphics mode**: Basic graphics installation mode. In this mode, the video driver is not started before the system starts and runs. + - **Rescue the openEuler system**: Rescue mode, which is used to restore the system. In rescue mode, the installation process is printed to the VNC or BMC, and the serial port is unavailable. + +On the installation boot menu screen, press **e** to go to the parameter editing screen of the selected option, and press **c** to go to the command line interface (CLI). + +### Installation in GUI Mode + +On the installation wizard page, select **Test this media & install openEuler 22.03-LTS-SP4** to enter the GUI installation mode. + +You can perform graphical installation operations using a keyboard. + +- Press **Tab** or **Shift+Tab** to move between GUI controls (such as buttons, area boxes, and check boxes). +- Press the up or down arrow key to navigate through a list. +- Press the left or right arrow key to move between the horizontal toolbars and list bars. +- Press the spacebar or **Enter** to select or delete highlighted options, expand or collapse a drop-down list. +- Press **Alt+a shortcut key** to select the control where the shortcut key is located. The shortcut key can be highlighted (underlined) by holding down **Alt**. + +#### Selecting the Installation Language + +After the installation starts, you are prompted to choose the language that is used during the installation process. English is configured by default, as shown in the following figure. Configure the language as required. + +**Figure 5** Selecting a language +![](./figures/selectlanguage.png) + +After the language is selected, click **Continue**. The installation page is displayed. + +If you want to exit the installation, click **Exit**. The message **Are you sure you want to exit the installation program?** is displayed. Click **Yes** in the dialog box to go back to the installation wizard page. + +#### Entering the Installation Page + +After the installation program starts, the installation page is displayed, as shown in the following figure. On the page, you can configure the time, language, installation source, network, and storage device. + +Some configuration items are marked with alarm symbols. A alarm symbol will disappear after the item is configured. Start the installation only when all the alarm symbols disappear from the page. + +If you want to exit the installation, click **Exit**. The message **Are you sure you want to exit the installation program?** is displayed. Click **Yes** in the dialog box to go back to the installation boot menu. + +**Figure 6** Installation summary +![](./figures/installation_overview.png) + +#### Setting the Keyboard Layout + +On the **INSTALLATION SUMMARY** page, click **Keyboard**. You can add or delete multiple keyboard layouts in the system. + +- To view the keyboard layout: Select a keyboard layout in the left box and click the keyboard icon under the box. +- To test the keyboard layout: Select the keyboard layout in the left box and click the keyboard icon in the upper right corner to switch to the desired layout, and then type in the right box to check if the keyboard layout works properly. + +**Figure 7** Setting the keyboard layout +![](./figures/Keyboard_layout.png) + +After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. + +#### Setting the System Language + +On the **INSTALLATION SUMMARY** page, click **Language Support** to set the system language, as shown in the following figure. You can select another language as required. + +>[!NOTE] **Note** +>If you select **Chinese**, the system does not support the display of Chinese characters when you log in to the system using VNC, but supports the display of Chinese characters when you log in to the system using a serial port. When you log in to the system using SSH, whether the system supports the display of Chinese characters depends on the SSH client. If you select **English**, the display is not affected. + +**Figure 8** Setting a system language + +![](./figures/languagesupport.png) + +After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. + +#### Setting Date and Time + +On the **INSTALLATION SUMMARY** page, click **Time & Date**. On the **TIME & DATE** page, set the system time zone, date, and time. + +When setting the time zone, click a specific city on the map, or select a region from the drop-down list of **Region** and a city from the drop-down list of **City** at the top of the page, as shown in the following figure. + +If your city is not displayed on the map or in the drop-down list, select the nearest city in the same time zone. + +>[!NOTE] **Note** +> +>- Before manually setting the time zone, disable the network time synchronization function in the upper right corner. +>- If you want to use the network time, ensure that the remote NTP server is reachable. For details about how to set the network, see [Setting the Network and Host Name](#setting-the-network-and-host-name). + +**Figure 9** Setting date and time + +![](./figures/dateandtime.png) + +After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. + +#### Setting the Installation Source + +On the **INSTALLATION SUMMARY** page, click **Installation Source** to specify the installation source. + +- When you use a full CD/DVD image for installation, the installation program automatically detects and displays the installation source information. You can use the default settings, as shown in the following figure. + + **Figure 10** Installation source + ![](./figures/Installation_source.png) + +- When the network source is used for installation, you need to set the URL of the network source. + + - HTTP or HTTPS mode + + The following figure shows the installation source in HTTP or HTTPS mode. Enter the actual installation source address, for example, ****, where **openEuler-22.03-LTS** indicates the version number, and **x86_64** indicates the CPU architecture. Use the actual version number and CPU architecture. + + ![](./figures/sourcehttp.png) + + >[!NOTE] **Note:** + > + >If the HTTPS server uses a private certificate, press **e** on the installation boot menu go to the parameter editing page of the selected option, and add the **inst.noverifyssl** parameter. In UEFI mode, add the parameter to the line starting with **linux**. + + - FTP mode + + The following figure shows the installation source in FTP mode. Enter the FTP address in the text box. + + ![](./figures/sourceftp.png) + + You need to set up an FTP server, mount the ISO image, and copy the mounted files to the shared directory on the FTP server. + + - NFS mode + + The following figure shows the installation source in NFS mode. Enter the NFS address in the text box. + + ![](./figures/sourcenfs.png) + + You need to set up an NFS server, mount the ISO image, and copy the mounted file to the shared directory on the NFS server. + +During the installation, if you have any questions about configuring the installation source, see [An Exception Occurs During the Selection of the Installation Source](./faq.md#an-exception-occurs-during-the-selection-of-the-installation-source). + +After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. + +#### Selecting Additional Software + +On the **INSTALLATION SUMMARY** page, click **Software Selection** to specify the software package to be installed. + +Based on the actual requirements, select **Minimal Install** in the left box and select additional software in the **Additional software for Selected Environment** area in the right box, as shown in the following figure. + +**Figure 11** Selecting additional software +![](./figures/choosesoftware.png) + +>[!NOTE] **Note** +> +>- In **Minimal Install** mode, not all packages in the installation source are installed. If the required package is not installed, you can mount the installation source to the local host as a repo source, and use DNF to install the package. +>- If you select **Virtualization Host**, the virtualization components QEMU, libvirt, and edk2 are installed by default. You can select whether to install the OVS component in the additional software area. + +After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. + +#### Setting the Installation Destination + +On the **INSTALLATION SUMMARY** page, click **Installation Destination** to select the OS installation drive and partition. + +You can view available local storage devices on the **INSTALLATION DESTINATION** page, as shown in the following figure. + +**Figure 12** Setting the installation destination +![](./figures/Target_installation_position.png) + +##### Storage Configuration + +On the **INSTALLATION DESTINATION** page, configure the storage for partitioning. You can either manually configure partitions or select **Automatic** for automatic partitioning. + +>[!NOTE] **Note** +> +>- During partitioning, to ensure system security and performance, you are advised to divide the device into the following partitions: **/boot**, **/var**, **/var/log**, **/var/log/audit**, **/home**, and **/tmp**. +>- If the system is configured with the **swap** partition, the **swap** partition is used when the physical memory of the system is insufficient. Although the **swap** partition can be used to expand the physical memory, if it is used due to insufficient memory, the system response slows and the system performance deteriorates. Therefore, you are not advised to configure it in a system with sufficient physical memory or in a performance sensitive system. +>- If you need to split a logical volume group, select **Custom** to manually partition the logical volume group. On the **MANUAL PARTITIONING** page, click **Modify** in the **Volume Group** area to reconfigure the logical volume group. + +**Automatic** + +Select **Automatic** if openEuler is installed in a new storage device or the data in the storage device is not required. After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. + +**Custom** + +If you need to manually partition the disk, click **Custom** and click **Done** in the upper left corner. The following page is displayed. + +On the **MANUAL PARTITIONING** page, you can partition the disk in either of the following ways. After the partitioning is completed, the window shown in the following figure is displayed. + +- Automatic creation: Click **Click here to create them automatically**. The system automatically assigns four mount points ( **/boot**, **/**, **/home**, and **swap**) according to the available storage space. + +- Manual creation: Click ![](./figures/en-us_image_0229291243.png) to add a mount point. It is recommended that the expected capacity of each mount point not exceed the available space. + + >[!NOTE] **Note** + >If the expected capacity of the mount point exceeds the available space, the system allocates all available space to the mount point. + +**Figure 13** MANUAL PARTITIONING page +![](./figures/Manual_partitioning.png) + +>[!NOTE] **Note** +>The **/boot/efi** partition is required for UEFI mode only. + +After the setting is complete, click **Done** in the upper left corner to go back to the **SUMMARY OF CHANGES** page. + +Click **Accept Changes** to go back to the **INSTALLATION SUMMARY** page. + +#### Setting the Network and Host Name + +On the **INSTALLATION SUMMARY** page, select **Network & Host Name** to configure the system network functions. + +The installation program automatically detects accessible local interfaces. The detected interfaces are listed in the left box, and the interface details are displayed in the right area, as shown in [Figure 14](#zh-cn_topic_0186390264_zh-cn_topic_0122145831_fig123700157297). You can enable or disable a network interface by clicking the switch in the upper right corner of the page. The switch is turned off by default. If the installation source is set to network, turn on the switch. You can also click **Configure** to configure the selected interface. Select **Connect automatically with priority** to enable the NIC automatic startup upon system startup, as shown in [Figure 15](#zh-cn_topic_0186390264_zh-cn_topic_0122145831_fig6). + +In the lower left box, enter the host name. The host name can be the fully quantified domain name (FQDN) in the format of *hostname.domain_name* or the brief host name in the format of *hostname*. + +**Figure 14** Setting the network and host name +![](./figures/NetworkandHostName.png) + +**Figure 15** Configuring the network +![](./figures/confignetwork1.png) + +After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. + +#### Setting the Root Password + +Select **Root Password** on the **INSTALLATION SUMMARY** page. The **ROOT PASSWORD** page is displayed, as shown in the [Figure 16](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1323165793018). Enter a password that meets the [Password Complexity](#password-complexity) requirements and confirm the password. + +>[!NOTE] **Note** +> +>- The **root** account is used to perform key system management tasks. You are not advised to use the **root** account for daily work or system access. +>- If you select **Lock root account** on the **Root Password** page, the **root** account will be disabled. + +**Figure 16** root password +![](./figures/root_password.png) + +##### Password Complexity + +The password of the **root** user or the password of the new user must meet the password complexity requirements. Otherwise, the password configuration or user creation will fail. The password complexity requirements are as follows: + +1. A password must contain at least eight characters. + +2. A password must contain at least three of the following types: uppercase letters, lowercase letters, digits, and special characters. + +3. A password must be different from the user name. + +4. A password cannot contain words in the dictionary. + + >[!NOTE] **Note** + >In the installed openEuler environment, you can run the `cracklib-unpacker /usr/share/cracklib/pw_dict > dictionary.txt` command to export the dictionary library file **dictionary.txt**, and then check whether the password is in the dictionary. + +After the settings are completed, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. + +#### Creating a User + +Click **User Creation**. The **CREATE USER** is displayed, as shown in [Figure 17](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1237715313319). Enter a username and set a password. By clicking **Advanced**, you can also configure the home directory and user group, as shown in [Figure 18](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig128716531312). + +**Figure 17** Creating a user +![](./figures/createuser.png) + +**Figure 18** Advanced user configuration +![](./figures/Advanced_User_Configuration.png) + +##### Advanced User Configuration Requirements + +When a user is created, a user group with the same name is created by default. In **ADVANCED USER CONFIGURATION**, you set the user ID and user group ID as required, but leave **Group Membership** blank unless you want to create a user group with a different name from the user. If the user group with the same name as the user is entered, the user cannot be created. + +After configuration, click **Done** in the upper left corner to go back back to the **INSTALLATION SUMMARY** page. + +#### Starting Installation + +On the installation page, after all the mandatory items are configured, the alarm symbols will disappear. Then, you can click **Begin Installation** to install openEuler. + +#### Installation Procedure + +After the installation starts, the overall installation progress and the progress of writing the software package to the system are displayed. See [Figure 19](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1590863119306) + +>![](./figures/en-us_image_0213178479.png) +>During the OS installation, if you click Exit, reset, or power off the server, or the virtual CD-ROM drive is disconnected due network faults, the installation is interrupted and the OS is unavailable. In this case, you need to reinstall the OS. + +**Figure 19** Installation progress +![](./figures/installation_procedure.png) + +#### Completing the Installation + +After openEuler is installed, Click **Reboot** to reboot the system. + +>[!NOTE] **Note** +> +>- If a physical CD/DVD-ROM is used for installation and it is not automatically ejected during the restart, manually remove it. Then, the openEuler CLI login screen is displayed. +>- If a virtual CD/DVD-ROM is used for installation, change the server boot option to **Hard Disk** and restart the server. Then, the openEuler CLI login screen is displayed. + +### Installation in CLI Mode + +You can perform installation operations in CLI mode using a keyboard. See **Figure 1**. + +**Figure 1** CLI mode main menu +![](figures/zh-cn_image_text_menu.png) + +>[!NOTE] **Note:** +**\[x\]** indicates that the item has been configured or is configured by default. You can modify the configuration as required. **\[!\]** indicates that the item is not configured. You must configure the item before starting installation. + +#### Setting the System Language + +In the main menu, enter **1** to enter the language settings, and enter **1** or **2** to set the system language as required. See **Figure 2**. + +**Figure 2** Selecting a Language +![](figures/zh-cn_image_text_language.png) + +After completing the settings, enter **c** to go back to the main menu. + +#### Setting Date and Time + +In the main menu, enter **2** to enter time zone settings. See **Figure 3**. + +**Figure 3** Time settings +![](figures/zh-cn_image_text_timedate.png) + +- Time zone settings +In **Time settings**, enter **1** to enter time zone settings. You can change regions and cities as required. See **Figure 4**. + +**Figure 4** Timezone settings +![](figures/zh-cn_image_text_timeZone.png) + +Cities are displayed in pages. Press **Enter** multiple times to view all cities. See **Figure 5**. + +**Figure 5** Selecting a city +![](figures/zh-cn_image_text_timeZoneCity.png) + +After completing the settings, enter **c** to go back to the main menu. + +- NTP configuration +In **Time settings**, enter **2** to enter NTP configuration. See **Figure 6**. + +**Figure 6** NTP configuration +![](figures/zh-cn_image_text_timeNTP.png) + +After completing the settings, enter **c** to go back to the main menu. + +#### Setting the Installation Source + +In the main menu, enter **3** to enter installation source settings. See **Figure 7**. You can select a local installation source or a network location. + +**Figure 7** Installation source +![](figures/zh-cn_image_text_installSource.png) + +After completing the settings, enter **c** to go back to the main menu. + +>[!NOTE] **Note:** +> +>- CD/DVD: Install from a mounted CD/DVD drive. +>- local ISO file: Install from a local ISO file. +>- Network: Install from a network location using HTTP, HTTPS, FTP, or NFS protocol. + +#### Selecting Software + +In the main menu, enter **4** to enter the software selection menu. See **Figure 8**. +The default **Minimal Install** indicates the minimal environment that provides basic openEuler functions. After selecting the environment, enter **c** to select additional software. + +**Figure 8** Software selection +![](figures/zh-cn_image_text_installSofware.png) + +Available software varies from the selected environment: + +1. Standard: standard openEuler software packages +2. Container Management: software packages for managing Linux containers +3. Development Tools: basic development environment +4. Headless Management: tools for managing non-graphical terminal systems +5. Legacy UNIX Compatibility: compatibility tools for migrating from legacy UNIX environments +6. Network Servers: network server software, such as DHCP, Kerberos, and NIS +7. Scientific Support: tools for scientific computing and parallel computing +8. Security Tools: tools for integrity and trustworthiness verification +9. System Tools: various system tools, such as SMB client and network traffic monitoring tools +10. Smart Card Support: support for smart card verification + +After completing the settings, enter **c** to go back to the main menu. + +#### Setting the Installation Destination + +In the main menu, enter **5** to select the OS installation destination. See **Figure 9**. The installer automatically detects available locations. Generally, you can use the default configuration. + +**Figure 9** Installation destination +![](figures/zh-cn_image_text_installdest.png) + +- Partitioning options + - Replace Existing Linux system (s): Use only the space occupied by the existing OS. Data of the existing OS will be overwritten. + - Use All Space: Delete data of the OS partition and use all space on the drive. + - Use Free Space: Install openEuler to the free space on the drive without deleting data of the existing OS. + - Manually assign mount points: This option is experimental and may not take effect. +- Partitioning scheme options + - Standard Partition: A standard partition can be a file system, swap partition, or a container for software RAID or LVM physical volume. + - LVM: Logical volume management (LVM) displays a simple bare-metal view of basic physical storage space, such as a hard disk or an LUN. Partitions that are regarded as physical volumes in physical storage can be grouped into volume groups. Each volume group can be divided into multiple logical volumes, and each logical volume simulates a standard disk partition. Therefore, an LVM logical volume can be used as a partition that contains multiple physical disks. + - LVM Thin Provisioning: Thin provisioning allows you to manage storage pools with available space, also called thin pools, which can be allocated to any number of devices as required. The thin pools can be dynamically expanded as required to allocate storage space. +After completing the settings, enter **c** to go back to the main menu. + +>[!NOTE] **Note:** +> +>- For system performance and security purposes, you are advised to configure the following partitions: **/boot**, **/var**, **/var/log** , **/var/log/audit**, **/home**, **/tmp**. +>- If the system is configured with the swap partition, the swap partition is used when the physical memory of the system is insufficient. Although the swap partition can be used to expand the physical memory, if the swap partition is used due to insufficient memory, the system response slows and the system performance deteriorates. Therefore, you are not advised to configure the swap partition in the system with sufficient physical memory or the performance sensitive system. In addition, unmounting of the swap partition requires the available memory (including the reclaimable memory) to be more than the size of used swap space. Otherwise, the swap partition will fail to be unmounted. +>- By default, the OS is booted from the first drive. You are advised to install the OS on the first drive. Otherwise, the OS may fail to be booted. + +#### Setting the Network and Host Name + +In the main menu, enter **6** to enter network configuration. See **Figure 10**. You can configure the host name and network devices. Alternatively, you can perform network configuration after the OS is installed. + +**Figure 10** Network configuration +![](figures/zh-cn_image_text_net.png) + +- Set the host name. +Enter **1**, type in a host name, then press **Enter**. +Ensure that the host name does not end with a period (.) because it is not supported by the kernel and systemd. +- Configure the NIC. +Enter **2** to enter network device configuration. See **Figure 11**. + +**Figure 11** Device configuration +![](figures/zh-cn_image_text_networkConfig.png) + +1. IPv4 address or "dhcp" for DHCP: The default value is dhcp, that is, the IP address is assigned by a DHCP server. +2. IPv4 netmask +3. IPv4 gateway +4. IPv6 address\[/prefix\] or "auto" for automatic, "dhcp" for DHCP, "ignore" to turn off: The default value is **auto**. +5. IPv6 default gateway +6. Nameservers (comma separated): Domain name servers +7. Connect automatically after reboot +8. Apply configuration in installer + +After completing the settings, enter **c** to go back to the main menu. + +#### Setting the Root Password + +In the main menu, enter **7** to enter the root password setting. See **Figure 12**. + +**Figure 12** Root password setting +![](figures/zh-cn_image_text_rootset.png) + +Enter **1** to select SM3 encryption, then press **c** to start entering the password. Alternatively, you can skip SM3 encryption. See **Figure 13**. + +**Figure 13** Entering root password +![](figures/zh-cn_image_text_rootpassword.png) + +After completing the settings, enter **c** to go back to the main menu. + +>[!NOTE] **Note:** +> +>- The root password is mandatory for OS installation. +> +>- The root user is used to perform key OS management tasks. You are advised not to use the root user for routine operations and OS access. +>- The default encryption algorithm is yescrypt. If yescrypt is not supported, SHA512 will be used. +>- When setting the password of the **root** user or that of a new user, you are advised to set the password according to the password complexity requirements. When you set a weak password (the password does not meet the complexity requirements), the system generates an alarm and asks you whether to use the weak password. If you enter **yes**, the weak password is forcibly set. However, the weak password poses security risks. Therefore, exercise caution when selecting a weak password. A strong password is expected to: +> 1. Contain at least 8 characters +> 2. Contain at least 3 of the following types: uppercase letters, lowercase letters, digits, and special characters. +> 3. Be different from the user name. +> 4. Not contain words in the dictionary. + +#### Creating a User + +In the main menu, enter **8** to enter user creation. Configure user information, such as the full name, user name, user password, whether the user is an administrator, and group of the user. See **Figure 14**. + +**Figure 14** User creation +![](./figures/zh-cn_image_text_createUsr.png) + +>[!NOTE] **Note:** +> +>- The default encryption algorithm is yescrypt. If yescrypt is not supported, SHA512 will be used. +>- Password of the new user must meet the password complexity requirements. Otherwise, user creation will fail. The password is expected to: +> 1. Contain at least 8 characters +> 2. Contain at least 3 of the following types: uppercase letters, lowercase letters, digits, and special characters. +> 3. Be different from the user name. +> 4. Not contain words in the dictionary. + +After completing the settings, enter **c** to go back to the main menu. + +#### Starting the Installation + +After all mandatory configurations are complete, the warnings (**\[!\]**) in the main menu disappear. See **Figure 15**. Enter **b** to start OS installation. + +**Figure 15** Configuration complete +![](./figures/zh-cn_image_text_startInstall.png) + +Wait for the installation to complete. See **Figure 16**. + +**Figure 16** Installation complete +![](./figures/zh-cn_image_text_Installed.png) + +After the installation is complete, press **Enter** to reboot the system. diff --git a/docs/en/server/installation_upgrade/installation/installation_guide_1.md b/docs/en/server/installation_upgrade/installation/installation_guide_1.md new file mode 100644 index 0000000000000000000000000000000000000000..06fffce354109b8bb0af95cf69ae0ec963cb9992 --- /dev/null +++ b/docs/en/server/installation_upgrade/installation/installation_guide_1.md @@ -0,0 +1,182 @@ +# Installation Guide + +This section describes how to enable the Raspberry Pi function after [Writing Raspberry Pi Images into the SD card](./installation_modes_1.md). + +## Starting the System + +After an image is written into the SD card, insert the SD card into the Raspberry Pi and power on the SD card. + +For details about the Raspberry Pi hardware, visit the [Raspberry Pi official website](https://www.raspberrypi.org/). + +## Logging in to the System + +You can log in to the Raspberry Pi in either of the following ways: + +1. Local login + + Connect the Raspberry Pi to the monitor (the Raspberry Pi video output interface is Micro HDMI), keyboard, and mouse, and start the Raspberry Pi. The Raspberry Pi startup log is displayed on the monitor. After Raspberry Pi is started, enter the user name **root** and password **openeuler** to log in. + +2. SSH remote login + + By default, the Raspberry Pi uses the DHCP mode to automatically obtain the IP address. If the Raspberry Pi is connected to a known router, you can log in to the router to check the IP address. The new IP address is the Raspberry Pi IP address. + + For example, the IP address of the Raspberry Pi is **192.168.31.109**. You can run the `ssh root@192.168.31.109` command and enter the password `openeuler` to remotely log in to the Raspberry Pi. + +## Configuring the System + +### Expanding the Root Directory Partition + +The space of the default root directory partition is small. Therefore, you need to expand the partition capacity before using it. + +To expand the root directory partition capacity, perform the following procedure: + +1. Run the `fdisk -l` command as the root user to check the drive partition information. The command output is as follows: + + ```sh + # fdisk -l + Disk /dev/mmcblk0: 14.86 GiB, 15931539456 bytes, 31116288 sectors + Units: sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + Disklabel type: dos + Disk identifier: 0xf2dc3842 + + Device Boot Start End Sectors Size Id Type + /dev/mmcblk0p1 * 8192 593919 585728 286M c W95 FAT32 (LBA) + /dev/mmcblk0p2 593920 1593343 999424 488M 82 Linux swap / Solaris + /dev/mmcblk0p3 1593344 5044223 3450880 1.7G 83 Linux + ``` + + The drive letter of the SD card is **/dev/mmcblk0**, which contains three partitions: + + - **/dev/mmcblk0p1**: boot partition + - **/dev/mmcblk0p2**: swap partition + - **/dev/mmcblk0p3**: root directory partition + + Here, we need to expand the capacity of `/dev/mmcblk0p3`. + +2. Run the `fdisk /dev/mmcblk0` command as the root user and the interactive command line interface (CLI) is displayed. To expand the partition capacity, perform the following procedure as shown in [Figure 2](#zh-cn_topic_0151920806_f6ff7658b349942ea87f4521c0256c315). + + 1. Enter `p` to check the partition information. + + Record the start sector number of `/dev/mmcblk0p3`. That is, the value in the `Start` column of the `/dev/mmcblk0p3` information. In the example, the start sector number is `1593344`. + + 2. Enter `d` to delete the partition. + + 3. Enter `3` or press `Enter` to delete the partition whose number is `3`. That is, the `/dev/mmcblk0p3`. + + 4. Enter `n` to create a partition. + + 5. Enter `p` or press `Enter` to create a partition of the `Primary` type. + + 6. Enter `3` or press `Enter` to create a partition whose number is `3`. That is, the `/dev/mmcblk0p3`. + + 7. Enter the start sector number of the new partition. That is, the start sector number recorded in Step `1`. In the example, the start sector number is `1593344`. + + > [!TIP] **NOTE:** +Do not press **Enter** or use the default parameters. + + 8. Press `Enter` to use the last sector number by default as the end sector number of the new partition. + + 9. Enter `N` without changing the sector ID. + + 10. Enter `w` to save the partition settings and exit the interactive CLI. + + **Figure 2** Expand the partition capacity +![](./figures/Partition_expansion.png) + +3. Run the `fdisk -l` command as the root user to check the drive partition information and ensure that the drive partition is correct. The command output is as follows: + + ```sh + # fdisk -l + Disk /dev/mmcblk0: 14.86 GiB, 15931539456 bytes, 31116288 sectors + Units: sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + Disklabel type: dos + Disk identifier: 0xf2dc3842 + + Device Boot Start End Sectors Size Id Type + /dev/mmcblk0p1 * 8192 593919 585728 286M c W95 FAT32 (LBA) + /dev/mmcblk0p2 593920 1593343 999424 488M 82 Linux swap / Solaris + /dev/mmcblk0p3 1593344 31116287 29522944 14.1G 83 Linux + ``` + +4. Run the `resize2fs /dev/mmcblk0p3` command as the root user to increase the size of the unloaded file system. + +5. Run the `df -lh` command to check the drive space information and ensure that the root directory partition has been expanded. + + > [!TIP] **NOTE:** +If the root directory partition is not expanded, run the `reboot` command to restart the Raspberry Pi and then run the `resize2fs /dev/mmcblk0p3` command as the root user. + +### Connecting to the Wi-Fi Network + +To connect to the Wi-Fi network, perform the following procedure: + +1. Check the IP address and network adapter information. + + ```sh + ip a + ``` + + Obtain information about the wireless network adapter **wlan0**: + + ```sh + 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + inet 127.0.0.1/8 scope host lo + valid_lft forever preferred_lft forever + inet6 ::1/128 scope host + valid_lft forever preferred_lft forever + 2: eth0: mtu 1500 qdisc mq state UP group default qlen 1000 + link/ether dc:a6:32:50:de:57 brd ff:ff:ff:ff:ff:ff + inet 192.168.31.109/24 brd 192.168.31.255 scope global dynamic noprefixroute eth0 + valid_lft 41570sec preferred_lft 41570sec + inet6 fe80::cd39:a969:e647:3043/64 scope link noprefixroute + valid_lft forever preferred_lft forever + 3: wlan0: mtu 1500 qdisc fq_codel state DOWN group default qlen 1000 + link/ether e2:e6:99:89:47:0c brd ff:ff:ff:ff:ff:ff + ``` + +2. Scan information about available Wi-Fi networks. + + ```sh + nmcli dev wifi + ``` + +3. Connect to the Wi-Fi network. + + Run the `nmcli dev wifi connect SSID password PWD` command as the root user to connect to the Wi-Fi network. + + In the command, `SSID` indicates the SSID of the available Wi-Fi network scanned in the preceding step, and `PWD` indicates the password of the Wi-Fi network. For example, if the `SSID` is `openEuler-wifi`and the password is `12345678`, the command for connecting to the Wi-Fi network is `nmcli dev wifi connect openEuler-wifi password 12345678`. The connection is successful. + + ```sh + Device 'wlan0' successfully activated with '26becaab-4adc-4c8e-9bf0-1d63cf5fa3f1'. + ``` + +4. Check the IP address and wireless network adapter information. + + ```sh + ip a + ``` + + ```sh + 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + inet 127.0.0.1/8 scope host lo + valid_lft forever preferred_lft forever + inet6 ::1/128 scope host + valid_lft forever preferred_lft forever + 2: eth0: mtu 1500 qdisc mq state UP group default qlen 1000 + link/ether dc:a6:32:50:de:57 brd ff:ff:ff:ff:ff:ff + inet 192.168.31.109/24 brd 192.168.31.255 scope global dynamic noprefixroute eth0 + valid_lft 41386sec preferred_lft 41386sec + inet6 fe80::cd39:a969:e647:3043/64 scope link noprefixroute + valid_lft forever preferred_lft forever + 3: wlan0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 + link/ether dc:a6:32:50:de:58 brd ff:ff:ff:ff:ff:ff + inet 192.168.31.110/24 brd 192.168.31.255 scope global dynamic noprefixroute wlan0 + valid_lft 43094sec preferred_lft 43094sec + inet6 fe80::394:d086:27fa:deba/64 scope link noprefixroute + valid_lft forever preferred_lft forever + ``` diff --git a/docs/en/server/installation_upgrade/installation/installation_modes.md b/docs/en/server/installation_upgrade/installation/installation_modes.md new file mode 100644 index 0000000000000000000000000000000000000000..31332b43ebd2fb67adfc698d0f3cf1d672be37b4 --- /dev/null +++ b/docs/en/server/installation_upgrade/installation/installation_modes.md @@ -0,0 +1,180 @@ +# Installation Modes + +>[!TIP] **NOTICE** +> +>- Only TaiShan 200 servers and FusionServer Pro rack server are supported. For details about the supported server models, see [Hardware Compatibility](./installation_preparations.md#hardware-compatibility). Only a virtualization platform created by the virtualization components \(openEuler as the host OS and QEMU and KVM provided in the release package\) of openEuler and the x86 virtualization platform of Huawei public cloud are supported. +>- Currently, only installation modes such as DVD-ROM, USB flash drive, network, QCOW2 image, and private image are supported. In addition, only the x86 virtualization platform of Huawei public cloud supports the private image installation mode. + +## Installation Through a DVD-ROM + +This section describes how to create or use a DVD-ROM to install the openEuler. + +### Preparing the Installation Source + +If you have obtained a DVD-ROM, directly install the OS using the DVD-ROM. If you have obtained an ISO file, record the ISO file to a DVD and install the OS using the obtained DVD. + +### Starting the Installation + +Perform the following operations to start the installation: + +>[!NOTE] **NOTE** +>Set the system to preferentially boot from the DVD-ROM drive. Take BIOS as an example. You need to move the **CD/DVD-ROM Drive** option under **Boot Type Order** to the top. + +1. (Optional) Disconnect all drives that are not required, such as USB drives. +2. Start your computer system. +3. Insert the installation DVD-ROM into the computer. +4. Restart the computer system. + +After a short delay, a graphical wizard page is displayed, which contains different boot options. If you do not perform any operation within one minute, the installation starts automatically with the default option. + +## Installation Through a USB Flash Drive + +This section describes how to create or use a USB flash drive to install the openEuler. + +### Preparing the Installation Source + +Pay attention to the capacity of the USB flash drive. The USB flash drive must have sufficient space to store the entire image. It is recommended that the USB flash drive have more than 16 GB space. + +1. Connect the USB flash drive to the system and run the **dmesg** command to view related log. At the end of the log, you can view the information generated by the USB flash drive that is just connected. The information is similar to the following: + + ```console + [ 170.171135] sd 5:0:0:0: [sdb] Attached SCSI removable disk + ``` + + >[!NOTE] **NOTE** + >Take the **sdb** USB flash drive as an example. + +2. Switch to user **root**. When running the **su** command, you need to enter the password. + + ```shell + su - root + ``` + +3. Ensure that the USB flash drive is not mounted. + + ```shell + findmnt /dev/sdb + ``` + + - If no command output is displayed, the file system is not mounted. Go to the next step. + + - If the following information is displayed, the USB flash drive is automatically mounted. + + ```shell + $ findmnt /dev/sdb + TARGET SOURCE FSTYPE OPTIONS + /mnt/iso /dev/sdb iso9660 ro,relatime + ``` + + In this case, you need to run the **umount** command to uninstall the device. + + ```shell + umount /mnt/iso + ``` + +4. Run the **dd** command to write the ISO image to the USB flash drive. + +>[!NOTE] **Note:** +> According to the ISOLINUX documentation, the ISO 9660 file system created by the `mkisofs` command will boot via BIOS firmware, but only from optical media like CD, DVD, or BD. In this case, run `isohybrid -u your.iso` to process the ISO file before running `dd` to write the ISO file into the USB flash drive. (This problem affects only the x86 architecture.) + +```shell +dd if=/path/to/image.iso of=/dev/device bs=blocksize +``` + +Replace **/path/to/image.iso** with the complete path of the downloaded ISO image file, replace **device** with the device name provided by the **dmesg** command, and set a proper block size \(for example, 512 KB\) to replace **blocksize** to accelerate the write progress. + +For example, if the ISO image file name is **/home/testuser/Downloads/openEuler-21.09-aarch64-dvd.iso** and the detected device name is **sdb**, run the following command: + +```shell +dd if=/home/testuser/Downloads/openEuler-21.09-aarch64-dvd.iso of=/dev/sdb bs=512k +``` + +1. After the image is written, safely eject and remove the USB flash drive. + + No progress is displayed during the image write process. When the number sign (#) appears again, run the following command to write the data to the drive. Then exit the **root** account and remove the USB flash drive. In this case, you can use the USB drive as the installation source of the system. + + ```bash + sync + ``` + +### Starting the Installation + +Perform the following operations to start the installation: + +>[!NOTE] **NOTE** +>Set the system to preferentially boot from the USB flash drive. Take the BIOS as an example. You need to move the **USB** option under **Boot Type Order** to the top. + +1. Disconnect all drives that are not required. +2. Open your computer system. +3. Insert the USB flash drive into the computer. +4. Restart the computer system. + +After a short delay, a graphical wizard page is displayed, which contains different boot options. If you do not perform any operation within one minute, the installation program automatically starts the installation. + +## Installation Through the Network Using PXE + +To boot with PXE, you need to properly configure the server and your computer's network interface shall support PXE. + +If the target hardware is installed with a PXE-enabled NIC, configure it to boot the computer from network system files rather than local media \(such as DVD-ROMs\) and execute the Anaconda installation program. + +For installation through the network using PXE, the client uses a PXE-enabled NIC to send a broadcast request for DHCP information and IP address to the network. The DHCP server provides the client with an IP address and other network information, such as the IP address or host name of the DNS and FTP server \(which provides the files required for starting the installation program\), and the location of the files on the server. + +>[!NOTE] **NOTE** +>The TFTP, DHCP, and HTTP server configurations are not described here. For details, see [Full-automatic Installation Guide](./using_kickstart_for_automatic_installation.md#full-automatic-installation-guide). + +## Installation Through a QCOW2 Image + +This section describes how to create or use a QCOW2 image to install the openEuler. + +### Creating a QCOW2 Image + +1. Install the **qemu-img** software package. + + ```shell + dnf install -y qemu-img + ``` + +2. Run the **create** command of the qemu-img tool to create an image file. The command format is as follows: + + ```shell + qemu-img create -f -o + ``` + + The parameters are described as follows: + + - _imgFormat_: Image format. The value can be **raw** or **qcow2**. + - _fileOption_: File option, which is used to set features of an image file, such as specifying a backend image file, compressing, and encrypting. + - _fileName_: File name. + - _diskSize_: Disk size, which specifies the size of a block disk. The unit can be K, M, G, or T, indicating KiB, MiB, GiB, or TiB. + + For example, to create an image file **openEuler-image.qcow2** whose disk size is 32 GB and format is qcow2, the command and output are as follows: + + ```shell + $ qemu-img create -f qcow2 openEuler-image.qcow2 32G + Formatting 'openEuler-image.qcow2', fmt=qcow2 size=34359738368 cluster_size=65536 lazy_refcounts=off refcount_bits=16 + ``` + +### Starting the Installation + +Perform the following operations to start the installation: + +1. Prepare a QCOW2 image file. +2. Prepare the VM network. +3. Prepare the UEFI boot tool set EDK II. +4. Prepare the VM XML configuration file. +5. Create a VM. +6. Start the VM. + +For details, see the [_Virtualization User Guide_](../../../virtualization/virtualization_platform/virtualization/introduction_to_virtulization.md). + +## Installation Through a Private Image + +This section describes how to create or use a private image to install the openEuler. + +### Creating a Private Image + +For instructions about how to create a private image, see [_Image Management Service User Guide_](https://support.huaweicloud.com/intl/en-us/usermanual-ims/en-us_topic_0013901628.html). + +### Starting the Installation + +For details about how to start the x86 virtualization platform of Huawei public cloud, see [Elastic Cloud Server User Guide](https://support.huaweicloud.com/intl/en-us/wtsnew-ims/index.html). diff --git a/docs/en/server/installation_upgrade/installation/installation_modes_1.md b/docs/en/server/installation_upgrade/installation/installation_modes_1.md new file mode 100644 index 0000000000000000000000000000000000000000..c60e4e00286b84a48036aa334ca3eda7c2e9ff94 --- /dev/null +++ b/docs/en/server/installation_upgrade/installation/installation_modes_1.md @@ -0,0 +1,101 @@ +# Installation Modes + +> [!TIP] **NOTE** +> +> - The hardware supports only Raspberry Pi 3B/3B+/4B/400. +> - The installation is performed by writing images to the SD card. This section describes how to write images on Windows, Linux, and Mac. +> - The image used in this section is the Raspberry Pi image of openEuler. For details about how to obtain the image, see [Installation Preparations](./installation_preparations_1.md). + +## Writing Images on Windows + +This section uses Windows 10 as an example to describe how to write images to the SD card in the Windows environment. + +### Formatting the SD Card + +To format the SD card, perform the following procedures: + +1. Download and install a SD card formatting tool. The following operations use SD Card Formatter as an example. + +2. Start SD Card Formatter. In **Select card**, select the drive letter of the SD card to be formatted. + + If no image has been installed in the SD card, only one drive letter exists. In **Select card**, select the drive letter of the SD card to be formatted. + + If an image has been installed in the SD card, one or more drive letters exist. For example, the SD card corresponds to three drive letters: E, G, and H. In **Select card**, you can select the drive letter E of the boot partition. + +3. In **Formatting options**, select a formatting mode. The default mode is **Quick format**. + +4. Click **Format** to start formatting. A progress bar is displayed to show the formatting progress. + +5. After the formatting is completed, the message "Formatting was successfully completed" is displayed. Click **OK**. + +### Writing Images to the SD Card + +> [!TIP] **NOTE** +If the compressed image file **openEuler-22.03-LTS-SP4-raspi-aarch64.img.xz** is obtained, decompress the file to obtain the **openEuler-22.03-LTS-SP4-raspi-aarch64.img** image file. + +To write the **openEuler-22.03-LTS-SP4-raspi-aarch64.img** image file to the SD card, perform the following procedures: + +1. Download and install a tool for writing images. The following operations use Win32 Disk Imager as an example. +2. Start Win32 Disk Imager and right-click **Run as administrator**. +3. Select the path of the image file in IMG format from the **Image File** drop-down list box. +4. In **Device**, select the drive letter of the SD card to which the image is written. +5. Click **Write**. A progress bar is displayed to show the progress of writing the image to the SD card. +6. After the write operation is completed, a dialog box is displayed, indicating that the write operation is successfully completed. Click **OK**. + +## Writing Images on Linux + +This section describes how to write images to the SD card in the Linux environment. + +### Checking Drive Partition Information + +Run the `fdisk -l` command as the **root** user to obtain the drive information of the SD card. For example, the drive partition corresponding to the SD card can be **/dev/sdb**. + +### Unmounting the SD Card + +1. Run the `df -lh` command to check the mounted volumes. + +2. If the partitions corresponding to the SD card are not mounted, skip this step. If the partitions (for example, /dev/sdb1 and /dev/sdb3) are mounted, run the following commands as the **root** user to unmount them: + + `umount /dev/sdb1` + + `umount /dev/sdb3` + +### Writing Images to the SD Card + +1. If the image obtained is compressed, run the `xz -d openEuler-22.03-LTS-SP4-raspi-aarch64.img.xz` command to decompress the compressed file to obtain the **openEuler-22.03-LTS-SP4-raspi-aarch64.img** image file. Otherwise, skip this step. + +2. Run the following command as the **root** user to write the `openEuler-22.03-LTS-SP4-raspi-aarch64.img` image to the SD card: + + `dd bs=4M if=openEuler-22.03-LTS-SP4-raspi-aarch64.img of=/dev/sdb` + + > [!NOTE] **NOTE** Generally, the block size is set to 4 MB. If the write operation fails or the written image cannot be used, you can set the block size to 1 MB and try again. However, the write operation is time-consuming when the block size is set to 1 MB. + +## Writing Images on Mac + +This section describes how to flash images to the SD card in the Mac environment. + +### Checking Drive Partition Information + +Run the `diskutil list` command as the **root** user to obtain the drive information of the SD card. For example, the drive partition corresponding to the SD card can be **/dev/disk3**. + +### Unmounting the SD Card + +1. Run the `df -lh` command to check the mounted volumes. + +2. If the partitions corresponding to the SD card are not mounted, skip this step. If the partitions (for example, dev/disk3s1 and /dev/disk3s3) are mounted, run the following commands as the **root** user to unmount them: + + `diskutil umount /dev/disk3s1` + + `diskutil umount /dev/disk3s3` + +### Writing Images to the SD Card + +1. If the image obtained is compressed, run the `xz -d openEuler-22.03-LTS-SP4-raspi-aarch64.img.xz` command to decompress the compressed file to obtain the **openEuler-22.03-LTS-SP4-raspi-aarch64.img** image file. Otherwise, skip this step. + +2. Run the following command as the **root** user to write the image `openEuler-22.03-LTS-SP4-raspi-aarch64.img` to the SD card: + + `dd bs=4m if=openEuler-22.03-LTS-SP4-raspi-aarch64.img of=/dev/sdb` + + > [!NOTE] **NOTE** + > + > Generally, the block size is set to 4 MB. If the write operation fails or the written image cannot be used, you can set the block size to 1 MB and try again. However, the write operation is time-consuming when the block size is set to 1 MB. diff --git a/docs/en/server/installation_upgrade/installation/installation_on_servers.md b/docs/en/server/installation_upgrade/installation/installation_on_servers.md new file mode 100644 index 0000000000000000000000000000000000000000..0ae330674159aad8f17fe077e5543ae7ce1ec704 --- /dev/null +++ b/docs/en/server/installation_upgrade/installation/installation_on_servers.md @@ -0,0 +1,3 @@ +# Installing on a Server + +This guide describes how to install openEuler on a server and is intended for openEuler users with a basic understanding of Linux system management. diff --git a/docs/en/server/installation_upgrade/installation/installation_preparations.md b/docs/en/server/installation_upgrade/installation/installation_preparations.md new file mode 100644 index 0000000000000000000000000000000000000000..94dacbaa555b99f78ed356826bd4f235fae8f9cd --- /dev/null +++ b/docs/en/server/installation_upgrade/installation/installation_preparations.md @@ -0,0 +1,107 @@ +# Installation Preparations + +This section describes the compatibility of the hardware and software and the related configurations and preparations required for the installation. + +## Obtaining the Installation Source + +Obtain the openEuler release package and verification file before the installation. + +Please follow the steps below to obtain the openEuler release package and verification file: + +1. Visit the [openEuler](https://www.openeuler.org/en/) website. +2. Click **Downloads**. +3. Click **Community Editions**. The version list is displayed. +4. Click **Download** on the right of **openEuler 22.03 LTS SP4**. +5. Download the required openEuler release package and the corresponding verification file based on the architecture and scenario. + 1. If the architecture is AArch64: + 1. Click **AArch64**. + 2. For local installation, download the **Offline Standard ISO** or **Offline Everything ISO** release package **openEuler-22.03-LTS-SP4-(everything-)aarch64-dvd.iso** to the local host. + 3. For network installation, download the **Network Install ISO** release package **openEuler-22.03-LTS-SP4-netinst-aarch64-dvd.iso** to the local host. + 2. If the architecture is x86_64: + 1. Click **x86_64**. + 2. For local installation, download the **Offline Standard ISO** or **Offline Everything ISO** release package **openEuler-22.03-LTS-SP4-(everything-)x86_64-dvd.iso** to the local host. + 3. For network installation, download the **Network Install ISO** release package **openEuler-22.03-LTS-SP4-netinst-x86_64-dvd.iso** to the local host. + +>[!NOTE] **Note** +> When the network is available, install openEuler through the network because the ISO release package is small. +> The release package of AArch64 architecture supports UEFI mode, while the release package of x86_64 architecture supports UEFI mode and Legacy mode. + +## Release Package Integrity Check + +>[!NOTE] **NOTE** +>This section describes how to verify the integrity of the release package for the AArch64 architecture. The procedure for verifying the integrity of the release package for the x86_64 architecture is the same. + +### Introduction + +To check whether the software package is incompletely downloaded due to network or storage device faults during transmission, you need to verify the integrity of the software package after obtaining it. Only the software package that passes the verification can be installed. + +Compare the verification value recorded in the verification file with the calculated verification value of the ISO file to check whether the software package is complete. If the values are consistent, the ISO file is not damaged. Otherwise, the file is damaged and you need to obtain it again. + +### Prerequisites + +Before verifying the integrity of the release package, you need to prepare the following files: + +ISO file: **openEuler-22.03-LTS-SP4-aarch64-dvd.iso** + +Verification file: Copy and save the **Integrity Check** SHA256 value to a local file. + +### Procedures + +To verify the file integrity, perform the following operations: + +1. Calculate the SHA256 verification value of the file. Run the following command: + + ```sh + sha256sum openEuler-22.03-LTS-SP4-aarch64-dvd.iso + ``` + + After the command is run, the verification value is displayed. + +2. Check whether the calculated value is the same as that of the saved SHA256 value. + + If the values are consistent, the ISO file is not damaged. Otherwise, the file is damaged and you need to obtain it again. + +## Installation Requirements for PMs + +To install the openEuler OS on a PM, the PM must meet the following hardware compatibility and minimum hardware requirements. + +### Hardware Compatibility + +You need to take hardware compatibility into account before installing openEuler. The [Compatibility List](https://www.openeuler.org/en/compatibility/) describes supported servers. + +### Minimum Hardware Specifications + +[Table 1](#tff48b99c9bf24b84bb602c53229e2541) lists the minimum hardware specifications supported by openEuler. + +**Table 1** Minimum hardware specifications + +| Component | Minimum Hardware Specifications | +| :---- | :---- | +| Architecture | AArch64 or x86_64 | +| CPU | Two single-core CPUs| +| Memory | ≥ 4 GB (8 GB or higher recommended for better user experience) | +| Hard drive | ≥ 32 GB (120 GB or higher recommended for better user experience) | + +## Installation Requirements for VMs + +To install the openEuler OS on a VM, the VM must meet the following hardware compatibility and minimum hardware requirements. + +### Virtualization Platform Compatibility + +You need to take the compatibility of the virtualization platform into account before installing openEuler. Currently, the following virtualization platforms are supported: + +- A virtualization platform created by the virtualization components of openEuler (QEMU and KVM provided in the release package) with openEuler as the host OS +- An x86 virtualization platform of Huawei public cloud + +### Minimum Virtualization Platform Specifications + +[Table 2](#tff48b99c9bf24b84bb602c53229e2541) lists the minimum virtualization platform specifications supported by openEuler. + +**Table 2** Virtualization platform specifications + +| Component | Virtualization Platform Specifications | +| :---- | :---- | +| Architecture | AArch64 or x86_64 | +| CPU | Two CPUs| +| Memory | ≥ 4 GB (8 GB or higher recommended for better user experience) | +| Hard drive | ≥ 32 GB (120 GB or higher recommended for better user experience) | diff --git a/docs/en/server/installation_upgrade/installation/installation_preparations_1.md b/docs/en/server/installation_upgrade/installation/installation_preparations_1.md new file mode 100644 index 0000000000000000000000000000000000000000..64bdec2b7b51574b4f6654797cf69aae563c6a6c --- /dev/null +++ b/docs/en/server/installation_upgrade/installation/installation_preparations_1.md @@ -0,0 +1,100 @@ +# Installation Preparations + +This section describes the compatibility of the hardware and software and the related configurations and preparations required for the installation. + +## Obtaining the Installation Source + +Before installation, obtain the openEuler Raspberry Pi image and its verification file. + +1. Visit [openEuler Repo](https://repo.openeuler.org/). +2. Choose **openEuler 22.03 LTS SP4**. +3. Click **raspi_img**. The download list of Raspberry Pi images is displayed. +4. Click **openEuler-22.03-LTS-SP4-raspi-aarch64.img.xz** to download the openEuler Raspberry Pi image to the local PC. +5. Click **openEuler-22.03-LTS-SP4-raspi-aarch64.img.xz.sha256sum** to download the verification file of the openEuler Raspberry Pi image to the local PC. + +## Verifying the Image Integrity + +### Overview + +During package transmission, to prevent software packages from being incompletely downloaded due to network or storage device problems, you need to verify the integrity of the software packages after obtaining them. Only the software packages that pass the verification can be deployed. + +Compare the verification value recorded in the verification file with the verification value that is manually calculated to determine whether the software package is complete. If the two values are the same, the downloaded file is complete. Otherwise, the downloaded file is incomplete and you need to obtain the software package again. + +### Prerequisites + +Before verifying the integrity of the image file, ensure that the following files are available: + +Image file: **openEuler-22.03-LTS-SP4-raspi-aarch64.img.xz** + +Verification file: **openEuler-22.03-LTS-SP4-raspi-aarch64.img.xz.sha256sum** + +### Procedures + +To verify the file integrity, perform the following procedures: + +1. Obtain the verification value from the verification file. Run the following command: + + ```shell + cat openEuler-22.03-LTS-SP4-raspi-aarch64.img.xz.sha256sum + ``` + +2. Calculate the SHA256 verification value of the file. Run the following command: + + ```shell + sha256sum openEuler-22.03-LTS-SP4-raspi-aarch64.img.xz + ``` + + After the command is executed, the verification value is displayed. + +3. Check whether the verification values obtained from the step 1 and step 2 are consistent. + + If they are consistent, the downloaded file is not damaged. Otherwise, the downloaded file is incomplete and you need to obtain the file again. + +## Installation Requirements + +If the openEuler OS is installed in the Raspberry Pi environment, the Raspberry Pi environment must meet the following requirements. + +### Hardware Compatibility + +Currently, the openEuler Raspberry Pi image supports the 3B, 3B+, 4B, and 400 versions. + +### Minimum Hardware Specifications + +[Table 1](#tff48b99c9bf24b84bb602c53229e2542) lists the minimum hardware specifications for the openEuler Raspberry Pi image. + +**Table 1** Minimum hardware specifications + + + + + + + + + + + + + + + + + + + + + + +

Component Name

+

Minimum Hardware Specifications

+

Description

+

Raspberry Pi version

+
  • Raspberry Pi 3B
  • Raspberry Pi 3B+
  • Raspberry Pi 4B
  • Raspberry Pi 400
+

-

+

Memory

+

≥ 2 GB (4 GB or higher recommended for better user experience)

+

-

+

Drive

+

8 GB or higher recommended for better user experience

+

-

+
diff --git a/docs/en/server/installation_upgrade/installation/more_resources.md b/docs/en/server/installation_upgrade/installation/more_resources.md new file mode 100644 index 0000000000000000000000000000000000000000..1985e886f5f35a27483b1f5db678c2e489e92c3e --- /dev/null +++ b/docs/en/server/installation_upgrade/installation/more_resources.md @@ -0,0 +1,4 @@ +# References + +- How to Create a Raspberry Pi Image File +- How to Use Raspberry Pi diff --git a/docs/en/server/installation_upgrade/installation/public_sys-resources/icon-caution.gif b/docs/en/server/installation_upgrade/installation/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/public_sys-resources/icon-caution.gif differ diff --git a/docs/en/server/installation_upgrade/installation/public_sys-resources/icon-danger.gif b/docs/en/server/installation_upgrade/installation/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/public_sys-resources/icon-danger.gif differ diff --git a/docs/en/server/installation_upgrade/installation/public_sys-resources/icon-note.gif b/docs/en/server/installation_upgrade/installation/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/public_sys-resources/icon-note.gif differ diff --git a/docs/en/server/installation_upgrade/installation/public_sys-resources/icon-notice.gif b/docs/en/server/installation_upgrade/installation/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/public_sys-resources/icon-notice.gif differ diff --git a/docs/en/server/installation_upgrade/installation/public_sys-resources/icon-tip.gif b/docs/en/server/installation_upgrade/installation/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/public_sys-resources/icon-tip.gif differ diff --git a/docs/en/server/installation_upgrade/installation/public_sys-resources/icon-warning.gif b/docs/en/server/installation_upgrade/installation/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/installation_upgrade/installation/public_sys-resources/icon-warning.gif differ diff --git a/docs/en/server/installation_upgrade/installation/using_kickstart_for_automatic_installation.md b/docs/en/server/installation_upgrade/installation/using_kickstart_for_automatic_installation.md new file mode 100644 index 0000000000000000000000000000000000000000..deedfc4c7fdd537e3e797ba814d77da4e92a9cab --- /dev/null +++ b/docs/en/server/installation_upgrade/installation/using_kickstart_for_automatic_installation.md @@ -0,0 +1,343 @@ +# Using Kickstart for Automatic Installation + +## Introduction + +### Overview + +You can use the kickstart tool to automatically install the openEuler OS in either of the following ways: + +- Semi-automatic installation: You only need to specify the location of the kickstart file. Kickstart automatically configures OS attributes such as keyboard, language, and partitions. +- Automatic installation: The OS is automatically installed. + +### Advantages and Disadvantages + +[Table 1](#table1388812373315) lists the advantages and disadvantages of semi-automatic installation and full-automatic installation using kickstart. You can select an installation mode as required. + +**Table 1** Advantages and disadvantages + + + + + + + + + + + + + + + + +

Installation Mode

+

Advantage

+

Disadvantage

+

Semi-automatic installation

+

Services such as TFTP, PXE, and DHCP do not need to be prepared.

+

You need to manually specify the path of the kickstart file.

+

Full-automatic installation

+

The OS is installed automatically.

+

Services, such as TFTP, DHCP, and PXE, need to be configured.

+
+ +### Background + +#### Kickstart + +Kickstart is an unattended installation mode. The principle of kickstart is to record typical parameters that need to be manually entered during the installation and generate the configuration file **ks.cfg**. During the installation, the installation program searches the **ks.cfg** configuration file first for required parameters. If no matching parameters are found, you need to manually configure these parameters. If all required parameters are covered by the kickstart file, automatic installation can be achieved by only specifying the path of the kickstart file. + +Both full-automatic or semi-automatic installation can be achieved by kickstart. + +kickstart uses the open source software [Pykickstart](https://github.com/pykickstart/pykickstart) to parse **ks.cfg** files. + +#### PXE + +Pre-boot Execution Environment \(PXE\) works in client/server network mode. The PXE client can obtain an IP address from the DHCP server during the startup and implement client boot and installation through the network based on protocols such as trivial file transfer protocol \(TFTP\). + +#### TFTP + +TFTP is used to transfer simple and trivial files between clients and the server. + +## Semi-automatic Installation Guide + +### Environment Requirements + +The environment requirements for semi-automatic installation of openEuler OS using kickstart are as follows: + +- PM/VM \(For details about how to create VMs, see the documents from corresponding vendors\): includes the computer where kickstart is used for automatic installation and the computer where the kickstart tool is installed. +- httpd: deploys the kickstart file and system installation file. +- ISO: openEuler-_{version}-{architecture}_-dvd.iso. In this document, **openEuler-22.03-LTS-SP4-aarch64-dvd.iso** is used as an example. + +### Procedure + +To use kickstart to perform semi-automatic installation of openEuler, perform the following steps: + +#### Environment Preparation + +>[!NOTE] **NOTE:** +>Before the installation, ensure that the firewall of the HTTP server is disabled. Run the following command to disable the firewall: +> +>```shell +>iptables -F +>``` + +1. Install httpd and start the service. + + ```shell + dnf install httpd -y + systemctl start httpd + systemctl enable httpd + ``` + +2. Run the following commands to prepare the kickstart file: + + ```shell + $ mkdir /var/www/html/ks + $ vim /var/www/html/ks/openEuler-ks.cfg # The file can be obtained by modifying the **anaconda-ks.cfg** file automatically generated from openEuler OS. + ==================================== + ***Modify the following information as required.*** + #version=DEVEL + ignoredisk --only-use=sda + autopart --type=lvm + # Partition clearing information + clearpart --none --initlabel + # Use graphical install + graphical + # Use CDROM installation media + cdrom + # Keyboard layouts + keyboard --vckeymap=cn --xlayouts='cn' + # System language + lang zh_CN.UTF-8 + + # Network information + network --bootproto=dhcp --device=enp4s0 --ipv6=auto --activate + network --hostname=openeuler.com + # Root password + rootpw --iscrypted $6$fQE83lxEZ48Or4zc$j7/PlUMHn29yTjCD4Fi44WTZL/RzVGxJ/7MGsZMl6QfE3KjIVT7M4UrhFXbafvRq2lUddAFcyWHd5WRmXfEK20 + # Run the Setup Agent on first boot + firstboot --enable + # Do not configure the X Window System + skipx + # System services + services --disabled="chronyd" + # System timezone + timezone Asia/Shanghai --isUtc--nontp + + %packages + @^minimal-environment + @standard + + %end + + %post + #enable kdump + sed -i "s/ ro / ro crashkernel=1024M,high /" /boot/efi/EFI/openEuler/grub.cfg + %end + ===================================== + ``` + + >[!NOTE] **NOTE:** + >The method of generating the password ciphertext is as follows: + > + >```py + ># python3 + >Python 3.7.0 (default, Apr 1 2019, 00:00:00) + >[GCC 7.3.0] on linux + >Type "help", "copyright", "credits" or "license" for more information. + >>>> import crypt + >>>> passwd = crypt.crypt("myPasswd") + >>>> print (passwd) + >$6$63c4tDmQGn5SDayV$mZoZC4pa9Jdt6/ALgaaDq6mIExiOO2EjzomB.Rf6V1BkEMJDcMddZeGdp17cMyc9l9ML9ldthytBEPVcnboR/0 + >``` + +3. Mount the ISO image file to the CD-ROM drive of the computer where openEuler is to be installed. + + If you want to install openEuler through the NFS, specify the path \(which is **cdrom** by default\) of installation source in the kickstart file. + +#### Installing the System + +1. The installation selection dialog box is displayed. + 1. On the installation wizard page in [Starting the Installation](./../installation/installation_guide.md#starting-the-installation), select **Install openEuler 22.03-LTS-SP4** and press **e**. + 2. Add **inst.ks= to the startup parameters. + + ![startparam.gif](./figures/startparam.gif) + + 3. Press **Ctrl**+**x** to start the automatic installation. + +2. Verify that the installation is complete. + + After the installation is complete, the system automatically reboots. If the first boot option of the system is set to the CD_ROM, the installation page is displayed again. Shut down the computer and change startup option to start from the hard disk preferentially. + + ![](./figures/completing-the-automatic-installation.png) + +## Full-automatic Installation Guide + +### Environment Requirements + +The environment requirements for full-automatic installation of openEuler using kickstart are as follows: + +- PM/VM \(For details about how to create VMs, see the documents from corresponding vendors\): includes the computer where kickstart is used for automatic installation and the computer where the kickstart tool is installed. +- httpd: stores the kickstart file. +- TFTP: provides vmlinuz and initrd files. +- DHCPD/PXE: provides the DHCP service. +- ISO: openEuler-_{version}-{architecture}_-dvd.iso. In this document, **openEuler-22.03-LTS-SP4-aarch64-dvd.iso** is used as an example. + +### Procedure + +To use kickstart to perform full-automatic installation of openEuler, perform the following steps: + +#### Environment Preparation + +>[!NOTE] **NOTE:** +>Before the installation, ensure that the firewall of the HTTP server is disabled. Run the following command to disable the firewall: +> +>```shell +>iptables -F +>``` + +1. Install httpd and start the service. + + ```shell + dnf install httpd -y + systemctl start httpd + systemctl enable httpd + ``` + +2. Install and configure TFTP. + + ```shell + $ dnf install tftp-server xinetd -y + $ vim /etc/xinetd.d/tftp + service tftp + { + socket_type = dgram + protocol = udp + wait = yes + user = root + server = /usr/sbin/in.tftpd + server_args = -s /var/lib/tftpboot + disable = no + per_source = 11 + cps = 100 2 + flags = IPv4 + } + $ systemctl start tftp + $ systemctl enable tftp + $ systemctl start xinetd + $ systemctl status xinetd + $ systemctl enable xinetd + ``` + +3. Prepare the installation source. + + ```shell + mount openEuler-22.03-LTS-SP4-aarch64-dvd.iso /mnt + cp -r /mnt/* /var/www/html/openEuler/ + ``` + +4. Set and modify the kickstart configuration file **openEuler-ks.cfg**. Select the HTTP installation source by referring to [3](#en-us_topic_0229291289_l1692f6b9284e493683ffa2ef804bc7ca). + + ```shell + $ vim /var/www/html/ks/openEuler-ks.cfg + ==================================== + ***Modify the following information as required.*** + #version=DEVEL + ignoredisk --only-use=sda + autopart --type=lvm + # Partition clearing information + clearpart --none --initlabel + # Use graphical install + graphical + # Keyboard layouts + keyboard --vckeymap=cn --xlayouts='cn' + # System language + lang zh_CN.UTF-8 + #Use http installation source + url --url=//192.168.122.1/openEuler/ + %post + #enable kdump + sed -i "s/ ro / ro crashkernel=1024M,high /" /boot/efi/EFI/openEuler/grub.cfg + %end + ... + ``` + +5. Modify the PXE configuration file **grub.cfg** as follows. (Note: Currently, openEuler does not support the cfg file in bls format. If the x86_64 architecture is used, replace **grubaa64.efi** with **grubx64.efi**.) + + ```shell + $ cp -r /mnt/images/pxeboot/* /var/lib/tftpboot/ + $ cp /mnt/EFI/BOOT/grubaa64.efi /var/lib/tftpboot/ + $ cp /mnt/EFI/BOOT/grub.cfg /var/lib/tftpboot/ + $ ls /var/lib/tftpboot/ + grubaa64.efi grub.cfg initrd.img TRANS.TBL vmlinuz + $ vim /var/lib/tftpboot/grub.cfg + set default="1" + + function load_video { + if [ x$feature_all_video_module = xy ]; then + insmod all_video + else + insmod efi_gop + insmod efi_uga + insmod ieee1275_fb + insmod vbe + insmod vga + insmod video_bochs + insmod video_cirrus + fi + } + + load_video + set gfxpayload=keep + insmod gzio + insmod part_gpt + insmod ext2 + + set timeout=60 + + ### BEGIN /etc/grub.d/10_linux ### + menuentry 'Install openEuler 22.03-LTS-SP4' --class red --class gnu-linux --class gnu --class os { + set root=(tftp,192.168.122.1) + linux /vmlinuz ro inst.geoloc=0 console=ttyAMA0 console=tty0 rd.iscsi.waitnet=0 inst.ks=http://192.168.122.1/ks/openEuler-ks.cfg + initrd /initrd.img + } + ``` + +6. Configure DHCP, which can be replaced by DNSmasq. If the x86_64 architecture is used, replace **grubaa64.efi** with **grubx64.efi**. + + ```shell + $ dnf install dhcp -y + $ vim /etc/dhcp/dhcpd.conf + # DHCP Server Configuration file. + # see /usr/share/doc/dhcp-server/dhcpd.conf.example + # see dhcpd.conf(5) man page + ddns-update-style interim; + ignore client-updates; + filename "grubaa64.efi"; # location of the pxelinux startup file; + next-server 192.168.122.1; # (IMPORTANT) IP address of the TFTP server; + subnet 192.168.122.0 netmask 255.255.255.0 { + option routers 192.168.111.1; # Gateway address + option subnet-mask 255.255.255.0; # Subnet mask + range dynamic-bootp 192.168.122.50 192.168.122.200; # Dynamic IP address range + default-lease-time 21600; + max-lease-time 43200; + } + $ systemctl start dhcpd + $ systemctl enable dhcpd + ``` + +#### Installing the System + +1. On the **Start boot option** screen, press **F2** to boot from the PXE and start automatic installation. + + ![](./figures/en-us_image_0229291270.png) + + ![](./figures/en-us_image_0229291286.png) + + ![](./figures/en-us_image_0229291247.png) + +2. The automatic installation window is displayed. +3. Verify that the installation is complete. + + ![](./figures/completing-the-automatic-installation.png) diff --git a/docs/en/server/installation_upgrade/upgrade/_toc.yaml b/docs/en/server/installation_upgrade/upgrade/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5f59a07ea35f02b0befc90c4ee8c0a48f1e43f23 --- /dev/null +++ b/docs/en/server/installation_upgrade/upgrade/_toc.yaml @@ -0,0 +1,6 @@ +label: Upgrade Guide +isManual: true +description: Upgrade openEuler +sections: + - label: Upgrade and Downgrade Guide + href: ./openeuler_22.03_lts_upgrade_and_downgrade_guide.md diff --git a/docs/en/server/installation_upgrade/upgrade/images/SP1_version.jpg b/docs/en/server/installation_upgrade/upgrade/images/SP1_version.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7bbc2d779a2a359f4d2d343f78487d193af86dde Binary files /dev/null and b/docs/en/server/installation_upgrade/upgrade/images/SP1_version.jpg differ diff --git a/docs/en/server/installation_upgrade/upgrade/images/SP2_version.jpg b/docs/en/server/installation_upgrade/upgrade/images/SP2_version.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc0868af3122401efcda91be67ccf12f00034b78 Binary files /dev/null and b/docs/en/server/installation_upgrade/upgrade/images/SP2_version.jpg differ diff --git a/docs/en/server/installation_upgrade/upgrade/openEuler_22.03_lts_upgrade_and_downgrade_guide.md b/docs/en/server/installation_upgrade/upgrade/openEuler_22.03_lts_upgrade_and_downgrade_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..4f994b0b9baeaca3015baad616423f7f78e018f4 --- /dev/null +++ b/docs/en/server/installation_upgrade/upgrade/openEuler_22.03_lts_upgrade_and_downgrade_guide.md @@ -0,0 +1,138 @@ +# openEuler 22.03 LTS Upgrade and Downgrade Guide + +This document describes how to upgrade openEuler 22.03 LTS to openEuler 22.03 LTS SP4. The operations for other versions are similar. + +## 1. OS Installation + +Obtain an openEuler 22.03 LTS SP4 image and install the OS by referring to the installation guide. + +View the versions of openEuler and the kernel in the current environment. + +```sh +cat /etc/openEuler-latest +``` + +## 2. Compatibility Upgrade + +### 2.1 Adding the openEuler 22.03 LTS SP4 Repositories (openEuler-22.03-LTS-SP4.repo) + +```sh +vi /etc/yum.repos.d/openEuler-22.03-LTS-SP4.repo +``` + +Add information about the following openEuler 22.03 LTS SP4 repositories and save and exit. + +```conf +[SP4_OS] +name=SP4_OS +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/$basearch/ +metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/OS&arch=$basearch +metadata_expire=1h +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/$basearch/RPM-GPG-KEY-openEuler + +[SP4_everything] +name=SP4_everything +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/$basearch/ +metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/everything&arch=$basearch +metadata_expire=1h +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/$basearch/RPM-GPG-KEY-openEuler + +[SP4_EPOL] +name=EPOL +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/main/$basearch/ +metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/EPOL/main&arch=$basearch +metadata_expire=1h +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/$basearch/RPM-GPG-KEY-openEuler + +[SP4_debuginfo] +name=debuginfo +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/debuginfo/$basearch/ +metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/debuginfo&arch=$basearch +metadata_expire=1h +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/debuginfo/$basearch/RPM-GPG-KEY-openEuler + +[SP4_source] +name=source +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/source/ +metalink=https://mirrors.openeuler.org/metalink?repo=$releasever&arch=source +metadata_expire=1h +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/source/RPM-GPG-KEY-openEuler + +[SP4_update] +name=SP4_update +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/update/$basearch/ +metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/update&arch=$basearch +metadata_expire=1h +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/OS/$basearch/RPM-GPG-KEY-openEuler + +[SP4_update-source] +name=SP4_update-source +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/update/source/ +metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/update&arch=source +metadata_expire=1h +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/source/RPM-GPG-KEY-openEuler +``` + +### 2.2 Performing the Upgrade + +```sh +dnf update | tee update_log +``` + +Note: + +1. If an error is reported during the upgrade, run `dnf update --skip-broken -x conflict_pkg1 |tee update_log` to avoid the problem. If multiple packages conflict, use the `-x conflict_pkg1 -x conflict_pkg2 -x conflict_pkg3` options to skip the packages and analyze, validate, and update the conflicted packages after the upgrade. +2. Options: +`--allowerasing`: Allow erasing of installed packages to resolve dependencies. +`--skip-broken`: Resolve dependency problems by skipping packages. +`-x`: Used with `--skip-broken` to specify the packages to be skipped. + +### 2.3 Rebooting the OS + +```sh +reboot +``` + +## 3. Upgrade Verification + +View the versions of openEuler and the kernel in the current environment. + +```sh +cat /etc/openEuler-latest +``` + +## 4. Compatibility Downgrade + +### 4.1 Performing the Downgrade + +```sh +dnf downgrade | tee downgrade_log +``` + +### 4.2 Rebooting the OS + +```sh +reboot +``` + +## 5. Downgrade Verification + +View the versions of openEuler and the kernel in the current environment. + +```sh +cat /etc/openEuler-latest +``` diff --git a/docs/en/server/maintenance/aops/_toc.yaml b/docs/en/server/maintenance/aops/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..07865d78e8ae326251d6fe28a599b01917a57cbe --- /dev/null +++ b/docs/en/server/maintenance/aops/_toc.yaml @@ -0,0 +1,20 @@ +label: A-Ops User Guide +isManual: true +description: A-Ops enables quick fault identification and centralized configuration management +sections: + - label: A-Ops Deployment + href: ./deploying_aops.md + - label: A-Ops Intelligent Location Framework User Guide + href: ./aops_intelligent_positioning_framework_user_manual.md + - label: A-Ops Vulnerability Management Module User Guide + href: ./aops_vulnerability_management_module_user_manual.md + - label: Hot Patch DNF Plugin Command Usage + href: ./dnf_command_usage.md + - label: Configuration Tracing User Guide + href: ./configuration_tracing_service_user_manual.md + - label: Community Hot Patch Creation and Release Process + href: ./community_hotpatch_creation_and_release_process.md + - label: A-Ops Asset Management User Guide + href: ./aops_asset_management_user_manual.md + - label: Quick Deployment of A-Ops + href: ./quick_deployment_of_aops.md \ No newline at end of file diff --git a/docs/en/server/maintenance/aops/aops_asset_management_user_manual.md b/docs/en/server/maintenance/aops/aops_asset_management_user_manual.md new file mode 100644 index 0000000000000000000000000000000000000000..304c6db2dc064b73a960d38b7fb5193f3a31dd73 --- /dev/null +++ b/docs/en/server/maintenance/aops/aops_asset_management_user_manual.md @@ -0,0 +1,3 @@ +# A-Ops Asset Management User Guide + +This document is currently not available in English. diff --git a/docs/en/server/maintenance/aops/aops_intelligent_positioning_framework_user_manual.md b/docs/en/server/maintenance/aops/aops_intelligent_positioning_framework_user_manual.md new file mode 100644 index 0000000000000000000000000000000000000000..0b3c1cf7e390a4a41955c7bb09f4df2891634005 --- /dev/null +++ b/docs/en/server/maintenance/aops/aops_intelligent_positioning_framework_user_manual.md @@ -0,0 +1,3 @@ +# A-Ops Intelligent Location Framework User Guide + +This document is currently not available in English. diff --git a/docs/en/server/maintenance/aops/aops_vulnerability_management_module_user_manual.md b/docs/en/server/maintenance/aops/aops_vulnerability_management_module_user_manual.md new file mode 100644 index 0000000000000000000000000000000000000000..8e1e596136dd1ccd6f542724c30db33311afe280 --- /dev/null +++ b/docs/en/server/maintenance/aops/aops_vulnerability_management_module_user_manual.md @@ -0,0 +1,3 @@ +# A-Ops Vulnerability Management Module User Guide + +This document is currently not available in English. diff --git a/docs/en/server/maintenance/aops/community_hotpatch_creation_and_release_process.md b/docs/en/server/maintenance/aops/community_hotpatch_creation_and_release_process.md new file mode 100644 index 0000000000000000000000000000000000000000..ac8d71798cd8a8251aec0275a7377753484aa4f6 --- /dev/null +++ b/docs/en/server/maintenance/aops/community_hotpatch_creation_and_release_process.md @@ -0,0 +1,3 @@ +# Community Hot Patch Creation and Release Process + +This document is currently not available in English. diff --git a/docs/en/server/maintenance/aops/configuration_tracing_service_user_manual.md b/docs/en/server/maintenance/aops/configuration_tracing_service_user_manual.md new file mode 100644 index 0000000000000000000000000000000000000000..a7e7d1c56a51dabffa7d8f9684197a1709590d9a --- /dev/null +++ b/docs/en/server/maintenance/aops/configuration_tracing_service_user_manual.md @@ -0,0 +1,3 @@ +# gala-ragdoll User Guide + +This document is currently not available in English. diff --git a/docs/en/server/maintenance/aops/deploying_aops.md b/docs/en/server/maintenance/aops/deploying_aops.md new file mode 100644 index 0000000000000000000000000000000000000000..f6b444bb4f0a5eb9f5fb8311cd7e251da2b27209 --- /dev/null +++ b/docs/en/server/maintenance/aops/deploying_aops.md @@ -0,0 +1,941 @@ +# Deploying A-Ops + +## 1 Introduction to A-Ops + +A-Ops is a service used to improve the overall security of hosts. It provides functions such as asset management, vulnerability management, and configuration source tracing to identify and manage information assets, monitor software vulnerabilities, and rectify system faults on hosts, ensuring stable and secure running of hosts. + +The following table describes the modules related to the A-Ops service. + +| Module | Description | +| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| aops-ceres | Client of the A-Ops service.
Collects host data and manages other data collectors (such as gala-gopher).
Responds to the commands delivered by the management center and processes the requirements and operations of the management center. | +| aops-zeus | A-Ops basic application management center, which interacts with other modules. The default port number is 11111.
Provides the basic host management service externally, such as adding and deleting hosts and host groups. | +| aops-hermes | Provides a visualized operation interface for A-Ops to display data information to users, improving service usability. | +| aops-apollo | Vulnerability management module of A-Ops. The default port number is 11116.
Identifies clients, and periodically obtains security notices released by the openEuler community and updates them to the vulnerability database.
Detects vulnerabilities in the system and software by comparing the vulnerabilities with those in the vulnerability database. | +| aops-vulcanus | Basic tool library of A-Ops. **Except aops-ceres and aops-hermes, modules must be installed and used together with this module.** | +| aops-tools | Provides the basic environment deployment script and database table initialization. The script is available in the **/opt/aops/scripts** directory after A-Ops is installed. | +| gala-ragdoll | Configuration source tracing module of A-Ops.
Uses Git to monitor and record configuration file changes. The default port number is 11114. | +| dnf-hotpatch-plugin | DNF plug-in, which allows DNF to recognize hot patch information and provides hot patch scanning and application. | + +## 2 Environment Requirements + +You are advised to use four hosts running openEuler 24.03 LTS for deployment. Use three as the server and one as the managed host managed by A-Ops. **Configure the update repository** ([Q6: update Repository Configuration](#q6-update-repository-configuration)). The deployment scheme is as follows: + +- Host A: For MySQL, Redis, and Elasticsearch deployment. It provides data service support. The recommended memory is more than 8 GB. +- Host B: For the A-Ops asset management service (zeus), frontend display, and complete service function support. The recommended memory is more than 6 GB. +- Host C: For the A-Ops configuration source tracing service (gala-ragdoll) and vulnerability management. The recommended memory is 4 GB or more. +- Host D: As an A-Ops client and is used as a host managed and monitored by A-Ops. (aops-ceres can be deployed on hosts that need to be managed.) + +| Host | IP Address | Module | +| ------ | ----------- | ------------------------------------- | +| Host A | 192.168.1.1 | MySQL, Elasticsearch, Redis | +| Host B | 192.168.1.2 | aops-zeus, aops-hermes, aops-diana | +| Host C | 192.168.1.3 | aops-apollo, gala-ragdoll, aops-diana | +| Host D | 192.168.1.4 | aops-ceres, dnf-hotpatch-plugin | + +>Before deployment, disable the **firewall and SELinux** on each host. + +- Disable the firewall. + +```shell +systemctl stop firewalld +systemctl disable firewalld +systemctl status firewalld +setenforce 0 + +``` + +- Disable SELinux. + +```shell +# Change the status of SELinux to disabled in /etc/selinux/config. + +vi /etc/selinux/config +SELINUX=disabled + +# After changing the value, press ESC and enter :wq to save the modification. +``` + +Note: SELinux will be disabled after a reboot. + +## 3. Server Deployment + +### 3.1 Asset Management + +To use the asset management function, you need to deploy the aops-zeus, aops-hermes, MySQL, and Redis services. + +#### 3.1.1 Node Information + +| Host | IP Address | Module | +| ------ | ----------- | ------------------------------------- | +| Host A | 192.168.1.1 | MySQL, Redis | +| Host B | 192.168.1.2 | aops-zeus, aops-hermes | + +#### 3.1.2 Deployment Procedure + +##### 3.1.2.1 Deploying MySQL + +- Install MySQL. + +```shell +yum install mysql-server +``` + +- Modify the MySQL configuration file. + +```bash +vim /etc/my.cnf +``` + +- Add **bind-address** and set it to the IP address of the local host in the **mysqld** section. + +```ini +[mysqld] +bind-address=192.168.1.1 +``` + +- Restart the MySQL service. + +```bash +systemctl restart mysqld +``` + +- Set the MySQL database access permission for the **root** user. + +```mysql +$ mysql + +mysql> show databases; +mysql> use mysql; +mysql> select user,host from user; -- If the value of host is localhost, only the local host can connect to the MySQL database. The external network and local software client cannot connect to the MySQL database. + ++---------------+-----------+ +| user | host | ++---------------+-----------+ +| root | localhost | +| mysql.session | localhost | +| mysql.sys | localhost | ++---------------+-----------+ +3 rows in set (0.00 sec) +``` + +```mysql +mysql> update user set host = '%' where user='root'; -- Allow the access of the root user using any IP address. +mysql> flush privileges; -- Refresh the permissions. +mysql> exit +``` + +##### 3.1.2.2 Deploying Redis + +- Install Redis. + +```shell +yum install redis -y +``` + +- Modify the Redis configuration file. + +```shell +vim /etc/redis.conf +``` + +Bind IP addresses. + +```ini +# It is possible to listen to just one or multiple selected interfaces using +# the "bind" configuration directive, followed by one or more IP addresses. +# +# Examples: +# +# bind 192.168.1.100 10.0.0.1 +# bind 127.0.0.1 ::1 +# +# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the +# internet, binding to all the interfaces is dangerous and will expose the +# instance to everybody on the internet. So by default we uncomment the +# following bind directive, that will force Redis to listen only into +# the IPv4 lookback interface address (this means Redis will be able to +# accept connections only from clients running into the same computer it +# is running). +# +# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES +# JUST COMMENT THE FOLLOWING LINE. +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +bind 127.0.0.1 192.168.1.1# Add the actual IP address of host A. +``` + +- Start the Redis service. + +```shell +systemctl start redis +``` + +##### 3.1.2.3 Deploying Prometheus + +- Install Prometheus. + +```shell +yum install prometheus2 -y +``` + +- Modify the Prometheus configuration file. + +```shell +vim /etc/prometheus/prometheus.yml +``` + +- Add the gala-gopher IP addresses of the managed client to the monitored targets of Prometheus. + +> In this document, host D is the client. Add the gala-gopher address of host D. + +- Modify the **targets** configuration item. + +```yaml +# A scrape configuration containing exactly one endpoint to scrape: +# Here it's Prometheus itself. +scrape_configs: + # The job name is added as a label `job=` to any timeseries scraped from this config. + - job_name: 'prometheus' + + # metrics_path defaults to '/metrics' + # scheme defaults to 'http'. + + static_configs: + - targets: ['localhost:9090', '192.168.1.4:8888'] +``` + +Start the Prometheus service. + +```shell +systemctl start prometheus +``` + +##### 3.1.2.4 Deploying aops-zeus + +- Install aops-zeus. + +```shell +yum install aops-zeus -y +``` + +- Modify the configuration file. + +```shell +vim /etc/aops/zeus.ini +``` + +- Change the IP address of each service in the configuration file to the actual IP address. In this document, aops-zeus is deployed on host B. Therefore, you need to set the IP address to the IP address of host B. + +```ini +[zeus] +ip=192.168.1.2 // Change the IP address to the actual IP address of host B. +port=11111 + +[uwsgi] +wsgi-file=manage.py +daemonize=/var/log/aops/uwsgi/zeus.log +http-timeout=600 +harakiri=600 +processes=2 // Generate a specified number of workers or processes. +gevent=100 // Number of gevent asynchronous cores + +[mysql] +ip=192.168.1.1 // Change the IP address to the actual IP address of host A. +port=3306 +database_name=aops +engine_format=mysql+pymysql://@%s:%s/%s +pool_size=100 +pool_recycle=7200 + +[agent] +default_instance_port=8888 + +[redis] +ip=192.168.1.1 // Change the IP address to the actual IP address of host A. +port=6379 + +[apollo] +ip=192.168.1.3 // Change the IP address to the actual IP address of the apollo service deployment. It is recommended that apollo and zeus be deployed separately. This section is not required if apollo is not used. +port=11116 +``` + +> **Set the MySQL database mode to password mode**. For details, see [Q5: MySQL Password Mode](#q5-mysql-password-mode) + +- Start the aops-zeus service. + +```shell +systemctl start aops-zeus +``` + +**Note: [Initialize the aops-zeus database](#3125-initializing-the-aops-zeus-database) before starting the service.** + +> If the zeus service fails to be started and the error message indicates that the MySQL database cannot be connected, check if a MySQL password is set. If yes, see [Q5: MySQL Password Mode](#q5-mysql-password-mode). + +#### 3.1.2.5 Initializing the aops-zeus Database + +- Initialize the database. + +```shell +cd /opt/aops/scripts/deploy +bash aops-basedatabase.sh init zeus +``` + +**Note: If aops-tools is not installed, run the SQL script to initialize. The script path is /opt/aops/database/zeus.sql** + +[Q5: MySQL Password Mode](#q5-mysql-password-mode) + +[Q7: Nonexisting /opt/aops/scripts/deploy](#q7-nonexisting-optaopsscriptsdeploy) + +##### 3.1.2.6 Deploying aops-hermes + +- Install aops-hermes. + +```shell +yum install aops-hermes -y +``` + +- Modify the configuration file. + +```shell +vim /etc/nginx/aops-nginx.conf +``` + +- Some service configurations: + + > As the services are deployed on host B, configure the Nginx proxy to set the services addresses to the actual IP address of host B. + +```ini + # Ensure that Nginx still uses index.html as the entry when the front-end route changes. + location / { + try_files $uri $uri/ /index.html; + if (!-e $request_filename){ + rewrite ^(.*)$ /index.html last; + } + } + # Change it to the actual IP address of the host where aops-zeus is deployed. + location /api/ { + proxy_pass http://192.168.1.2:11111/; + } + # Enter the IP address of gala-ragdoll. IP addresses that involve port 11114 need to be configured. + location /api/domain { + proxy_pass http://192.168.1.3:11114/; + rewrite ^/api/(.*) /$1 break; + } + # Enter the IP address of gala-apollo. + location /api/vulnerability { + proxy_pass http://192.168.1.3:11116/; + rewrite ^/api/(.*) /$1 break; + } +``` + +- Enable the aops-hermes service. + +```shell +systemctl start aops-hermes +``` + +### 3.2 Vulnerability Management + +The CVE management module is implemented based on the [asset management](#31-asset-management) module. Therefore, you need to [deploy the module](#312-deployment-procedure) before deploying aops-apollo. + +The running of the aops-apollo service requires the support of the **MySQL, Elasticsearch, and Redis** databases. + +#### 3.2.1 Node Information + +| Host | IP Address | Module | +| ------ | ----------- | ------------- | +| Host A | 192.168.1.1 | Elasticsearch | +| Host C | 192.168.1.3 | aops-apollo | + +#### 3.2.2 Deployment Procedure + +See [Asset Management](#312-deployment-procedure). + +##### 3.2.2.1 Deploying Elasticsearch + +- Configure the repository for Elasticsearch. + +```shell +echo "[aops_elasticsearch] +name=Elasticsearch repository for 7.x packages +baseurl=https://artifacts.elastic.co/packages/7.x/yum +gpgcheck=1 +gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch +enabled=1 +autorefresh=1 +type=rpm-md" > "/etc/yum.repos.d/aops_elasticsearch.repo" +``` + +- Install Elasticsearch. + +```shell +yum install elasticsearch-7.14.0-1 -y +``` + +- Modify the Elasticsearch configuration file. + +```shell +vim /etc/elasticsearch/elasticsearch.yml +``` + +```yml +# ------------------------------------ Node ------------------------------------ +# +# Use a descriptive name for the node: +# +node.name: node-1 +``` + +```yml +# ---------------------------------- Network ----------------------------------- +# +# By default Elasticsearch is only accessible on localhost. Set a different +# address here to expose this node on the network: +# +# Change the value to the actual IP address of host A. +network.host: 192.168.1.1 +# +# By default Elasticsearch listens for HTTP traffic on the first free port it +# finds starting at 9200. Set a specific HTTP port here: +# +http.port: 9200 +# +# For more information, consult the network module documentation. +# +``` + +```yml +# --------------------------------- Discovery ---------------------------------- +# +# Pass an initial list of hosts to perform discovery when this node is started: +# The default list of hosts is ["127.0.0.1", "[::1]"] +# +#discovery.seed_hosts: ["host1", "host2"] +# +# Bootstrap the cluster using an initial set of master-eligible nodes: +# +cluster.initial_master_nodes: ["node-1"] +# Cross-domain configurations +http.cors.enabled: true +http.cors.allow-origin: "*" +# +``` + +- Restart the Elasticsearch service. + +```shell +systemctl restart elasticsearch +``` + +##### 3.2.2.2 Deploying aops-apollo + +- Install aops-apollo. + +```shell +yum install aops-apollo +``` + +- Modify the configuration file. + +```shell +vim /etc/aops/apollo.ini +``` + +- Change the IP address of each service in the **apollo.ini** to the actual IP address. + +```ini +[apollo] +ip=192.168.1.3// Change it to the actual IP address of host C. +port=11116 +host_vault_dir=/opt/aops +host_vars=/opt/aops/host_vars + +[zeus] +ip=192.168.1.2 // Change it to the actual IP address of host B. +port=11111 + +# hermes info is used to send mail. +[hermes] +ip=192.168.1.2 // Change it to the actual IP address of aops-hermes, for example, the IP address of host B. +port=80 // Change it to the actual port of the hermes service. + +[cve] +cve_fix_function=yum +# value between 0-23, for example, 2 means 2:00 in a day. +cve_scan_time=2 + +[mysql] +ip=192.168.1.1 // Change it to the actual IP address of host A. +port=3306 +database_name=aops +engine_format=mysql+pymysql://@%s:%s/%s +pool_size=100 +pool_recycle=7200 + +[elasticsearch] +ip=192.168.1.1 // Change it to the actual IP address of host A. +port=9200 +max_es_query_num=10000000 + +[redis] +ip=192.168.1.1 // Change it to the actual IP address of host A. +port=6379 + +[uwsgi] +wsgi-file=manage.py +daemonize=/var/log/aops/uwsgi/apollo.log +http-timeout=600 +harakiri=600 +processes=2 +gevent=100 +``` + +> **Set the MySQL database to the password mode**. For details, see [Q5: MySQL Password Mode](#q5-mysql-password-mode). + +- Start the aops-apollo service. + +```shell +systemctl start aops-apollo +``` + +**Note: [Initialize the aops-apollo database](#3223-initializing-the-aops-apollo-database) before starting the service.** + +> If the apollo service fails to be started and the error message indicates that the MySQL database cannot be connected, check if a MySQL password is set. If yes, see [Q5: MySQL Password Mode](#q5-mysql-password-mode). + +#### 3.2.2.3 Initializing the aops-apollo Database + +- Initialize the apollo database. + +```shell +cd /opt/aops/scripts/deploy +bash aops-basedatabase.sh init apollo +``` + +**Note: If aops-tools is not installed, run the SQL script to initialize. The script path is /opt/aops/database/apollo.sql** + +[Q5: MySQL Password Mode](#q5-mysql-password-mode) + +[FAQs: Nonexisting /opt/aops/scripts/deploy](#q7-nonexisting-optaopsscriptsdeploy) + +### 3.3 Configuring Source Tracing + +A-Ops configuration source tracing depends on gala-ragdoll. Therefore, you need to complete the deployment of [Asset Management](#31-asset-management) and then deploy gala-ragdoll. + +#### 3.3.1 Node Information + +| Host | IP Address | Module | +| ------ | ----------- | ------------ | +| Host C | 192.168.1.3 | aops-ragdoll | + +#### 3.3.2 Deployment Procedure + +See [Asset Management](#31-asset-management). + +##### 3.3.2.1 Deploying gala-ragdoll + +- Install gala-ragdoll. + +```shell +yum install gala-ragdoll python3-gala-ragdoll -y +``` + +- Modify the configuration file. + +```shell +vim /etc/ragdoll/gala-ragdoll.conf +``` + +> **Change the IP address in collect_address of the collect section to the IP address of host B, and change the values of collect_api and collect_port to the actual API and port number.** + +```ini +[git] +git_dir = "/home/confTraceTest" +user_name = "user_name" +user_email = "user_email" + +[collect] +collect_address = "http://192.168.1.2" // Change it to the actual IP address of host B. +collect_api = "/manage/config/collect" // The value is an example. Change it to the actual value. +collect_port = 11111 // Change it to the actual port number of the aops-zeus service. + +[sync] +sync_address = "http://192.168.1.2" +sync_api = "/manage/config/sync" // The value is an example. Change it to the actual value. +sync_port = 11111 + +[objectFile] +object_file_address = "http://192.168.1.2" +object_file_api = "/manage/config/objectfile" // The value is an example. Change it to the actual value. +object_file_port = 11111 + +[ragdoll] +port = 11114 +``` + +- Start the gala-ragdoll service. + +```shell +systemctl start gala-ragdoll +``` + +## 3.4 Exception Detection + +The exception detection function is implemented based on the aops-zeus service. Therefore, you need to deploy aops-zeus and then aops-diana. + +Considering distributed deployment, the aops-diana service must be deployed on both host B and host C to act as the producer and consumer in the message queue, respectively. + +The running of the aops-diana service requires the support of MySQL, Elasticsearch, Kafka, and Prometheus. + +### 3.4.1 Node Information + +| Host | IP Address | Module | +| ------ | ----------- | ---------- | +| Host A | 192.168.1.1 | Kafka | +| Host B | 192.168.1.2 | aops-diana | +| Host C | 192.168.1.3 | aops-diana | + +### 3.4.2 Deployment Procedure + +[Asset Management](#312-deployment-procedure) + +[Deploying Elasticsearch](#3221-deploying-elasticsearch) + +#### 3.4.2.1 Deploying Kafka + +Kafka uses ZooKeeper to manage and coordinate agents. Therefore, you need to deploy ZooKeeper when deploying Kafka. + +- Install ZooKeeper. + +```shell +yum install zookeeper -y +``` + +- Start the ZooKeeper service. + +```shell +systemctl start zookeeper +``` + +- Install Kafka. + +```shell +yum install kafka -y +``` + +- Modify the Kafka configuration file. + +```shell +vim /opt/kafka/config/server.properties +``` + +Change the value of **listeners** to the IP address of the local host. + +```yaml +############################# Socket Server Settings ############################# + +# The address the socket server listens on. It will get the value returned from +# java.net.InetAddress.getCanonicalHostName() if not configured. +# FORMAT: +# listeners = listener_name://host_name:port +# EXAMPLE: +# listeners = PLAINTEXT://your.host.name:9092 +listeners=PLAINTEXT://192.168.1.1:9092 +``` + +- Start the Kafka service. + +```shell +cd /opt/kafka/bin +nohup ./kafka-server-start.sh ../config/server.properties & + +# Check all the outputs of nohup. If the IP address of host A and the Kafka startup success INFO are displayed, Kafka is started successfully. +tail -f ./nohup.out +``` + +#### 3.4.2.2 Deploying diana + +- Install aops-diana. + +```shell +yum install aops-diana +``` + +Modify the configuration file. +> The aops-dianas on host B and host C play different roles, which are **distinguished based on the differences in the configuration file**. + +```shell +vim /etc/aops/diana.ini +``` + +(1) Start aops-diana on host C in executor mode. It functions as the consumer in the Kafka message queue. The configuration file to be modified is as follows: + +```ini +[diana] +ip=192.168.1.3 // Change the IP address to the actual IP address of host C. +port=11112 +mode=executor // This mode is the executor mode. It is used as the executor in common diagnosis mode and functions as the consumer in Kafka. +timing_check=on + +[default_mode] +period=60 +step=60 + +[elasticsearch] +ip=192.168.1.1 // Change the IP address to the actual IP address of host A. +port=9200 +max_es_query_num=10000000 + +[mysql] +ip=192.168.1.1 // Change the IP address to the actual IP address of host A. +port=3306 +database_name=aops +engine_format=mysql+pymysql://@%s:%s/%s +pool_size=10000 +pool_recycle=7200 + +[redis] +ip=192.168.1.1 // Change the IP address to the actual IP address of host A. +port=6379 + +[prometheus] +ip=192.168.1.1 // Change the IP address to the actual IP address of host A. +port=9090 +query_range_step=15s + +[agent] +default_instance_port=8888 + +[zeus] +ip=192.168.1.2 // Change the IP address to the actual IP address of host B. +port=11111 + +[consumer] +kafka_server_list=192.168.1.1:9092 // Change the IP address to the actual IP address of host C. +enable_auto_commit=False +auto_offset_reset=earliest +timeout_ms=5 +max_records=3 +task_name=CHECK_TASK +task_group_id=CHECK_TASK_GROUP_ID +result_name=CHECK_RESULT + +[producer] +kafka_server_list = 192.168.1.1:9092 // Change the IP address to the actual IP address of host C. +api_version = 0.11.5 +acks = 1 +retries = 3 +retry_backoff_ms = 100 +task_name=CHECK_TASK +task_group_id=CHECK_TASK_GROUP_ID + +[uwsgi] +wsgi-file=manage.py +daemonize=/var/log/aops/uwsgi/diana.log +http-timeout=600 +harakiri=600 +processes=2 +threads=2 +``` + +> **Set the MySQL database to the password mode**. For details, see [Q5: MySQL Password Mode](#q5-mysql-password-mode). + +(2) Start aops-diana on host B in configurable mode. It functions as the producer in the Kafka message queue. The aops-diana port configuration in the aops-hermes file is subject to the IP address and port number of this host. The configuration file to be modified is as follows: + +```ini +[diana] +ip=192.168.1.2 // Change the IP address to the actual IP address of host B. +port=11112 +mode=configurable // This mode is the configurable mode. It is used as a scheduler in common diagnosis mode and functions as the producer. +timing_check=on + +[default_mode] +period=60 +step=60 + +[elasticsearch] +ip=192.168.1.1 // Change the IP address to the actual IP address of host A. +port=9200 +max_es_query_num=10000000 + +[mysql] +ip=192.168.1.1 // Change the IP address to the actual IP address of host A. +port=3306 +database_name=aops +engine_format=mysql+pymysql://@%s:%s/%s +pool_size=100 +pool_recycle=7200 + +[redis] +ip=192.168.1.1 // Change the IP address to the actual IP address of host A. +port=6379 + +[prometheus] +ip=192.168.1.1 // Change the IP address to the actual IP address of host A. +port=9090 +query_range_step=15s + +[agent] +default_instance_port=8888 + +[zeus] +ip=192.168.1.2 // Change the IP address to the actual IP address of host B. +port=11111 + +[consumer] +kafka_server_list=192.168.1.1:9092 // Change the IP address to the actual IP address of host A. +enable_auto_commit=False +auto_offset_reset=earliest +timeout_ms=5 +max_records=3 +task_name=CHECK_TASK +task_group_id=CHECK_TASK_GROUP_ID +result_name=CHECK_RESULT + +[producer] +kafka_server_list = 192.168.1.1:9092 // Change the IP address to the actual IP address of host A. +api_version = 0.11.5 +acks = 1 +retries = 3 +retry_backoff_ms = 100 +task_name=CHECK_TASK +task_group_id=CHECK_TASK_GROUP_ID + +[uwsgi] +wsgi-file=manage.py +daemonize=/var/log/aops/uwsgi/diana.log +http-timeout=600 +harakiri=600 +processes=2 +threads=2 +``` + +> **Set the MySQL database to the password mode**. For details, see [Q5: MySQL Password Mode](#q5-mysql-password-mode). + +Start the aops-diana service. + +```shell +systemctl start aops-diana +``` + +**Note: [Initialize the aops-diana database](#3423-initializing-the-aops-diana-database) before starting the service.** + +> If the diana service fails to be started and the error message indicates that the MySQL database cannot be connected, check if a MySQL password is set. If yes, see [Q5: MySQL Password Mode](#q5-mysql-password-mode). + +#### 3.4.2.3 Initializing the aops-diana Database + +- Initialize the diana database. + +```shell +cd /opt/aops/scripts/deploy +bash aops-basedatabase.sh init diana +``` + +**Note:If aops-tools is not installed, run the SQL script to initialize. The script path is /opt/aops/database/diana.sql** + +[Q5: MySQL Password Mode](#q5-mysql-password-mode) + +[FAQs: Nonexisting /opt/aops/scripts/deploy](#q7-nonexisting-optaopsscriptsdeploy) + +## 3.5 Client Installation + +aops-ceres functions as the client of A-Ops. It communicates with the A-Ops management center through SSH and provides functions such as host information collection and command response. + +### 3.5.1 Node Information + +| Host | IP Address | Module | +| ------ | ----------- | ---------- | +| Host D | 192.168.1.4 | aops-ceres | + +### 3.5.2 Client Deployment + +```shell +yum install aops-ceres dnf-hotpatch-plugin -y +``` + +## FAQs + +### Q1: Max Number of Connections + +When host interfaces are added in batches, due to the max number of SSH connections (**MaxStartups**) of the host where aops-zeus is installed, some hosts may fail to be connected. You can temporarily increase **MaxStartups** as required. For details, see the [SSH documentation](https://www.man7.org/linux/man-pages/man5/sshd_config.5.html). + +### Q2: 504 Gateway Timeout + +Some HTTP interfaces may take a long time to execute, resulting in error 504 on the web client. You can reduce the probability of error 504 by adding **proxy_read_timeout** to the Nginx configuration or increase its value. + +### Q3: Firewall + +If firewall cannot be disabled, open the ports involved in service deployment on the firewall. Otherwise, services may be inaccessible and A-Ops cannot be used properly. + +### Q4: Elasticsearch Access Denied + +If Elasticsearch is deployed on multiple nodes in a distributed manner, set the cross-domain access configurations properly to enable the access of the nodes. + +### Q5: MySQL Password Mode + +- **Configure the mysql section in the service configuration.** + +To set the password mode for the MySQL database connection (for example, the user is **root**, and the password is **123456**), change the value of **engine_format** in the **\[mysql]** section in apollo and zeus configurations. + +```ini +[mysql] +engine_format=mysql+pymysql://root:123456@%s:%s/%s +``` + +- **Modify the aops-basedatabase.sh initialization script.** + +Modify the 145th line of **aops-basedatabase.sh**. + +> Before modification: + +```shell +database = pymysql.connect(host='$mysql_ip', port=$port, database='mysql', autocommit=True,client_flag=CLIENT.MULTI_STAT EMENTS) +``` + +> After modification: + +```shell +database = pymysql.connect(host='$mysql_ip', port=$port, database='mysql', password='password', user='user', autocommit=True, client_flag=CLIENT.MULTI_STATEMENTS) +``` + +- **Database connection error upon service startup** + +Modify the 178th line in **/usr/bin/aops-vulcanus**. + +> Before modification: + +```shell +connect = pymysql.connect(host='$mysql_ip', port=$port, database='$aops_database') +``` + +> After modification: + +```shell +connect = pymysql.connect(host='$mysql_ip', port=$port, database='$aops_database', password='password', user='user') +``` + +**Note: If a non-root user is used for logging in to the server, add user ="root" or a user allowed by MySQL.** + +### Q6: update Repository Configuration + +```shell +echo "[update] +name=update +baseurl=http://repo.openeuler.org/openEuler-24.03-LTS/update/$basearch/ +enabled=1 +gpgcheck=0 +[update-epol] +name=update-epol +baseurl=http://repo.openeuler.org/openEuler-24.03-LTS/EPOL/update/main/$basearch/ +enabled=1 +gpgcheck=0" > /etc/yum.repos.d/openEuler-update.repo +``` + +> Note: Change **openEuler-24.03-LTS** to the actual OS version. You can also refer to the repository description in the openEuler official documentation. + +### Q7: Nonexisting /opt/aops/scripts/deploy + +During database initialization, if **/opt/aops/scripts/deploy** does not exits, install the aops-tools package. + +```shell +yum install aops-tools -y +``` diff --git a/docs/en/server/maintenance/aops/dnf_command_usage.md b/docs/en/server/maintenance/aops/dnf_command_usage.md new file mode 100644 index 0000000000000000000000000000000000000000..236c5bd285d216b25ade2d4002e1a61154ea14eb --- /dev/null +++ b/docs/en/server/maintenance/aops/dnf_command_usage.md @@ -0,0 +1,756 @@ +# DNF Command Usage + +Af ter installing dnf-hotpatch-plugin, you can run `dnf` commands to use Ceres functions related to hot/cold patches, such as hot patch scanning (`dnf hot-updateinfo`), setting and querying (`dnf hotpatch`), applying (`dnf hotupgrade`), and kabi check before kernel upgrade (`dnf upgrade-en`). This document describes the usage of the commands. + +> Hot patches include ACC (accumulate) and SGL (single) types. +> +> - ACC: A hot patch of the higher version fixes all problems that can be fixed by lower-version hot patches. +> - SGL_xxx: A hot patch fixes the problems related to issue _xxx_. Multiple issue IDs are concatenated by underscores (\_). + +## Hot Patch Scanning + +`dnf hot-updateinfo` can scan hot patches and query hot patches for specified CVEs. + +```shell +$ dnf hot-updateinfo list cves [--available(default) | --installed] [--cve [cve_id]] +General DNF options: + -h, --help, --help-cmd + show command help + --cve CVES, --cves CVES + Include packages needed to fix the given CVE, in updates +Hot-updateinfo command-specific options: + --available + cves about newer versions of installed packages + (default) + --installed + cves about equal and older versions of installed packages +``` + +- `list cves` + + 1. Query the CVEs on the host that can be fixed and their related cold and hot patches. + + ```shell + $ dnf hot-updateinfo list cves + # cve-id level cold-patch hot-patch + Last metadata expiration check: 2:39:04 ago on Fri 29 Dec 2023 07:45:02. + CVE-2022-30594 Important/Sec. kernel-4.19.90-2206.1.0.0153.oe1.x86_64 patch-kernel-4.19.90-2112.8.0.0131.oe1-SGL_CVE_2022_30594-1-1.x86_64 + CVE-2023-1111 Important/Sec. redis-6.2.5-2.x86_64 patch-redis-6.2.5-1-ACC-1-1.x86_64 + CVE-2023-1112 Important/Sec. redis-6.2.5-2.x86_64 patch-redis-6.2.5-1-ACC-1-1.x86_64 + CVE-2023-1111 Important/Sec. redis-6.2.5-2.x86_64 patch-redis-6.2.5-1-SGL_CVE_2023_1111_CVE_2023_1112-1-1.x86_64 + ``` + + 2. Query hot and cold patches corresponding to fixed CVEs. + + ```shell + $ dnf hot-updateinfo list cves --installed + # cve-id level cold-patch hot-patch + Last metadata expiration check: 2:39:04 ago on Fri 29 Dec 2023 07:45:02. + CVE-2022-36298 Important/Sec. - patch-kernel-4.19.90-2112.8.0.0131.oe1-SGL_CVE_2022_36298-1-1.x86_64 + ``` + + 3. Query hot and cold patches for specified CVEs. + + ```shell + $ dnf hot-updateinfo list cves --cve CVE-2022-30594 + # cve-id level cold-patch hot-patch + Last metadata expiration check: 2:39:04 ago on Fri 29 Dec 2023 07:45:02. + CVE-2022-30594 Important/Sec. kernel-4.19.90-2206.1.0.0153.oe1.x86_64 patch-kernel-4.19.90-2112.8.0.0131.oe1-SGL_CVE_2022_30594-1-1.x86_64 + ``` + + 4. An empty list will be displayed if the CVE does not exist. + + ```shell + $ dnf hot-updateinfo list cves --cve CVE-2022-3089 + # cve-id level cold-patch hot-patch + Last metadata expiration check: 2:39:04 ago on Fri 29 Dec 2023 07:45:02. + ``` + +## Hot Patch Statuses + +- A hot patch can be in the following statuses: + + - NOT-APPLIED: The hot patch is not applied. + + - DEACTIVED: The hot patch is not activated. + + - ACTIVED: The hot patch is activated. + + - ACCEPT: The hot patch has been activated and will be applied after a reboot. + + ![Hot patch statuses](./figures/syscare_hot_patch_statuses.png) + +## Querying and Changing Hot Patch Statuses + +`dnf hotpatch` can be used to query and convert hot patch statuses. + +```shell +$ dnf hotpatch +General DNF options: + -h, --help, --help-cmd + show command help + --cve CVES, --cves CVES + Include packages needed to fix the given CVE, in updates + +Hotpatch command-specific options: + --list [{cve, cves}] show list of hotpatch + --apply APPLY_NAME apply hotpatch + --remove REMOVE_NAME remove hotpatch + --active ACTIVE_NAME active hotpatch + --deactive DEACTIVE_NAME + deactive hotpatch + --accept ACCEPT_NAME accept hotpatch +``` + +- Using `dnf hotpatch` to query hot patch statuses. + + - `dnf hotpatch --list` lists available hot patches in the system. + + ```shell + $ dnf hotpatch --list + Last metadata expiration check: 0:09:25 ago on Fri 29 Dec 2023 10:26:45. + base-pkg/hotpatch status + kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1/vmlinux NOT-APPLIED + ``` + + - `dnf hotpatch --list cves` queries hot patches related to CVEs. + + ```shell + $ dnf hotpatch --list cves + Last metadata expiration check: 0:09:25 ago on Fri 29 Dec 2023 10:26:45. + CVE-id base-pkg/hotpatch status + CVE-2022-30594 kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1/vmlinux NOT-APPLIED + ``` + + - `dnf hotpatch --list cves --cve ` queries hot patches for specified CVEs. + + ```shell + $ dnf hotpatch --list cves --cve CVE-2022-30594 + Last metadata expiration check: 0:09:25 ago on Fri 29 Dec 2023 10:26:45. + CVE-id base-pkg/hotpatch status + CVE-2022-30594 kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1/vmlinux NOT-APPLIED + ``` + + - An empty list will be displayed if the specified CVE does not exist when running `dnf hotpatch --list cves --cve `. + + ```shell + $ dnf hotpatch --list cves --cve CVE-2023-1 + Last metadata expiration check: 0:09:25 ago on Fri 29 Dec 2023 10:26:45. + ``` + +- `dnf hotpatch --apply ` applies a hot patch. You can run `dnf hotpatch --list` to query the hot patch status after applying the hot patch. For details about hot patch statuses, see the previous section. + + ```shell + $ dnf hotpatch --list + Last metadata expiration check: 0:13:55 ago on Fri 29 Dec 2023 10:26:45. + base-pkg/hotpatch status + kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1/vmlinux NOT-APPLIED + $ dnf hotpatch --apply kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1 + Last metadata expiration check: 0:15:37 ago on Fri 29 Dec 2023 10:26:45. + Gonna apply this hot patch: kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1 + apply hot patch 'kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1' succeed + $ dnf hotpatch --list + Last metadata expiration check: 0:16:20 ago on Fri 29 Dec 2023 10:26:45. + base-pkg/hotpatch status + kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1/vmlinux ACTIVED + ``` + +- `dnf hotpatch --deactive ` deactivates a hot patch. You can run `dnf hotpatch --` to query the hot patch status after deactivating the hot patch. For details about hot patch statuses, see the previous section. + + ```shell + $ dnf hotpatch --deactive kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1 + Last metadata expiration check: 0:19:00 ago on Fri 29 Dec 2023 10:26:45. + Gonna deactive this hot patch: kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1 + deactive hot patch 'kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1' succeed + $ dnf hotpatch --list + Last metadata expiration check: 0:19:12 ago on Fri 29 Dec 2023 10:26:45. + base-pkg/hotpatch status + kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1/vmlinux DEACTIVED + ``` + +- `dnf hotpatch --remove ` removes a hot patch. You can run `dnf hotpatch --list` to query the hot patch status after removing the hot patch. For details about hot patch statuses, see the previous section. + + ```shell + $ dnf hotpatch --remove kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1 + Last metadata expiration check: 0:20:12 ago on Fri 29 Dec 2023 10:26:45. + Gonna remove this hot patch: kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1 + remove hot patch 'kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1' succeed + $ dnf hotpatch --list + Last metadata expiration check: 0:20:23 ago on Fri 29 Dec 2023 10:26:45. + base-pkg/hotpatch status + kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1/vmlinux NOT-APPLIED + ``` + +- `dnf hotpatch --active ` activating a hot patch.You can run `dnf hotpatch --list` to query the hot patch status after activating the hot patch. For details about hot patch statuses, see the previous section. + + ```shell + $ dnf hotpatch --active kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1 + Last metadata expiration check: 0:15:37 ago on Fri 29 Dec 2023 10:26:45. + Gonna active this hot patch: kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1 + active hot patch 'kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1' succeed + $ dnf hotpatch --list + Last metadata expiration check: 0:16:20 ago on Fri 29 Dec 2023 10:26:45. + base-pkg/hotpatch status + kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1/vmlinux ACTIVED + ``` + +- `dnf hotpatch --accept ` accepts a hot patch. You can run `dnf hotpatch --list` to query the hot patch status after accepting the hot patch. For details about hot patch statuses, see the previous section. + + ```shell + $ dnf hotpatch --accept kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1 + Last metadata expiration check: 0:14:19 ago on Fri 29 Dec 2023 10:47:38. + Gonna accept this hot patch: kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1 + accept hot patch 'kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1' succeed + $ dnf hotpatch --list + Last metadata expiration check: 0:14:34 ago on Fri 29 Dec 2023 10:47:38. + base-pkg/hotpatch status + kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1/vmlinux ACCEPTED + ``` + +## Applying Hot Patches + +The `hotupgrade` command is used to apply hot patches to fix specified or all CVEs. + +```shell +$ dnf hotupgrade [--cve [cve_id]] [PACKAGE ...] [--takeover] [-f] + +General DNF options: + -h, --help, --help-cmd + show command help + --cve CVES, --cves CVES + Include packages needed to fix the given CVE, in updates + +command-specific options: + --takeover + kernel cold patch takeover operation + -f + force retain kernel rpm package if kernel kabi check fails + PACKAGE + Package to upgrade +``` + +- Using `dnf hotupgrade PACKAGE` to install target hot patches. + + - Using `dnf hotupgrade PACKAGE` to install target hot patches. + + ```shell + $ dnf hotupgrade patch-kernel-4.19.90-2112.8.0.0131.oe1-SGL_CVE_2022_30594-1-1.x86_64 + Last metadata expiration check: 0:26:25 ago on Fri 29 Dec 2023 10:47:38. + Dependencies resolved. + xxxx(Install messgaes) + Is this ok [y/N]: y + Downloading Packages: + xxxx(Install process) + Complete! + Apply hot patch succeed: kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1. + ``` + + - Using `dnf hotupgrade PACKAGE` to install target hot patches when target hot patches have been activated. + + ```shell + $ dnf hotupgrade patch-kernel-4.19.90-2112.8.0.0131.oe1-SGL_CVE_2022_30594-1-1.x86_64 + Last metadata expiration check: 0:28:35 ago on Fri 29 Dec 2023 10:47:38. + The hotpatch 'kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1' already has a 'ACTIVED' sub hotpatch of binary file 'vmlinux' + Package patch-kernel-4.19.90-2112.8.0.0131.oe1-SGL_CVE_2022_30594-1-1.x86_64 is already installed. + Dependencies resolved. + Nothing to do. + Complete! + ``` + + - Using `dnf hotupgrade PACKAGE` to install target hot patches and automatically uninstall hot patches that fail to be activated. + + ```shell + $ dnf hotupgrade patch-redis-6.2.5-1-ACC-1-1.x86_64 + Last metadata expiration check: 0:30:30 ago on Fri 29 Dec 2023 10:47:38. + Dependencies resolved. + xxxx(Install messgaes) + Is this ok [y/N]: y + Downloading Packages: + xxxx(Install process) + Complete! + Apply hot patch failed: redis-6.2.5-1/ACC-1-1. + Error: Operation failed + + Caused by: + 1. Transaction "Apply patch 'redis-6.2.5-1/ACC-1-1'" failed + + Caused by: + Cannot match any patch named "redis-6.2.5-1/ACC-1-1" + + Gonna remove unsuccessfully activated hotpatch rpm. + Remove package succeed: patch-redis-6.2.5-1-ACC-1-1.x86_64. + ``` + +- Using `--cve ` to install hot patches for a CVE. + + - Using `--cve ` to install hot patches for a CVE. + + ```shell + $ dnf hotupgrade --cve CVE-2022-30594 + Last metadata expiration check: 0:26:25 ago on Fri 29 Dec 2023 10:47:38. + Dependencies resolved. + xxxx(Install messgaes) + Is this ok [y/N]: y + Downloading Packages: + xxxx(Install process) + Complete! + Apply hot patch succeed: kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1. + ``` + + - Using `dnf hotupgrade --cve CVE-2022-2021` to install hot patches for the CVE, which does not exist. + + ```shell + $ dnf hotupgrade --cve CVE-2022-2021 + Last metadata expiration check: 1:37:44 ago on Fri 29 Dec 2023 13:49:39. + The cve doesn't exist or cannot be fixed by hotpatch: CVE-2022-2021 + No hot patches marked for install. + Dependencies resolved. + Nothing to do. + Complete! + ``` + + - Using `dnf hotupgrade --cve ` to install and apply a hot patch of a higher version for a CVE that has an ACC hot patch of a lower version. The hot patch of the lower version is uninstalled. + + ```shell + $ dnf hotupgrade --cve CVE-2023-1070 + Last metadata expiration check: 0:00:48 ago on Tue 02 Jan 2024 11:21:55. + Dependencies resolved. + xxxx(Install messgaes) + Is this ok [y/N]: y + Downloading Packages: + xxxx (Install messages and process upgrade) + Complete! + Apply hot patch succeed: kernel-5.10.0-153.12.0.92.oe2203sp2/ACC-1-3. + $ + ``` + + - Installing and applying a hot patch for a CVE that already has the latest hot patch. + + ```shell + $ dnf hotupgrade --cve CVE-2023-1070 + Last metadata expiration check: 1:37:44 ago on Fri 29 Dec 2023 13:49:39. + The cve doesn't exist or cannot be fixed by hotpatch: CVE-2023-1070 + No hot patches marked for install. + Dependencies resolved. + Nothing to do. + Complete! + ``` + +- Using `dnf hotupgrade` to install all hot patches. + - When no hot patch is installed, running `dnf hotupgrade` will install all available hot patches. + + - When some of the hot patches are installed, running `dnf hotupgrade` will install the remaining hot patches. + +- Using `--takeover` to take over kernel hot patches. + + - Using `dnf hotupgrade PACKAGE --takeover` to install hot patches and take over the related kernel hot patches. If a target kernel cold patch fails to pass the kabi check, it will be automatically uninstalled. The hot patches will be accepted and remain in effect after a reboot. The default kernel boot options will be restored. + + ```shell + $ dnf hotupgrade patch-kernel-4.19.90-2112.8.0.0131.oe1-SGL_CVE_2022_30594-1-1.x86_64 --takeover + Last metadata expiration check: 2:23:22 ago on Fri 29 Dec 2023 13:49:39. + Gonna takeover kernel cold patch: ['kernel-4.19.90-2206.1.0.0153.oe1.x86_64'] + Dependencies resolved. + xxxx(Install messgaes) + Is this ok [y/N]: y + xxxx(Install process) + Complete! + Apply hot patch succeed: kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1. + Kabi check for kernel-4.19.90-2206.1.0.0153.oe1.x86_64: + [Fail] Here are 81 loaded kernel modules in this system, 78 pass, 3 fail. + Failed modules are as follows: + No. Module Difference + 1 nf_nat_ipv6 secure_ipv6_port_ephemeral : 0xe1a4f16a != 0x0209f3a7 + 2 nf_nat_ipv4 secure_ipv4_port_ephemeral : 0x57f70547 != 0xe3840e18 + 3 kvm_intel kvm_lapic_hv_timer_in_use : 0x54981db4 != 0xf58e6f1f + Gonna remove kernel-4.19.90-2206.1.0.0153.oe1.x86_64 due to Kabi check failed. + Rebuild rpm database succeed. + Remove package succeed: kernel-4.19.90-2206.1.0.0153.oe1.x86_64. + Restore the default boot kernel succeed: kernel-4.19.90-2112.8.0.0131.oe1.x86_64. + No available kernel cold patch for takeover, gonna accept available kernel hot patch. + Accept hot patch succeed: kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1. + ``` + + - Using `dnf hotupgrade PACKAGE --takeover -f` to install hot patches. If a kernel cold patch fails to pass the kabi check, the `-f` option forcibly keeps the cold patch. + + ```shell + $ dnf hotupgrade patch-kernel-4.19.90-2112.8.0.0131.oe1-SGL_CVE_2022_30594-1-1.x86_64 --takeover + Last metadata expiration check: 2:23:22 ago on Fri 29 Dec 2023 13:49:39. + Gonna takeover kernel cold patch: ['kernel-4.19.90-2206.1.0.0153.oe1.x86_64'] + Dependencies resolved. + xxxx(Install messgaes) + Is this ok [y/N]: y + xxxx(Install process) + Complete! + Apply hot patch succeed: kernel-4.19.90-2112.8.0.0131.oe1/SGL_CVE_2022_30594-1-1. + Kabi check for kernel-4.19.90-2206.1.0.0153.oe1.x86_64: + [Fail] Here are 81 loaded kernel modules in this system, 78 pass, 3 fail. + Failed modules are as follows: + No. Module Difference + 1 nf_nat_ipv6 secure_ipv6_port_ephemeral : 0xe1a4f16a != 0x0209f3a7 + 2 nf_nat_ipv4 secure_ipv4_port_ephemeral : 0x57f70547 != 0xe3840e18 + 3 kvm_intel kvm_lapic_hv_timer_in_use : 0x54981db4 != 0xf58e6f1f + ``` + +## kabi Check before Kernel Upgrade + +`dnf upgrade-en` supports the kabi check before kernel cold patch upgrade. + +```shell +dnf upgrade-en [PACKAGE] [--cve [cve_id]] + +upgrade with KABI(Kernel Application Binary Interface) check. If the loaded +kernel modules have KABI compatibility with the new version kernel rpm, the +kernel modules can be installed and used in the new version kernel without +recompling. + +General DNF options: + -h, --help, --help-cmd + show command help + --cve CVES, --cves CVES + Include packages needed to fix the given CVE, in updates +Upgrade-en command-specific options: + PACKAGE + Package to upgrade +``` + +- Using `dnf upgrade-en PACKAGE` to install target cold patches. + + - Using `dnf upgrade-en` to install target cold patches. If the kabi check is not passed, the kabi difference report will be generated, and the target kernel upgrade package will be uninstalled. + + ```shell + $ dnf upgrade-en kernel-4.19.90-2206.1.0.0153.oe1.x86_64 + Last metadata expiration check: 1:51:54 ago on Fri 29 Dec 2023 13:49:39. + Dependencies resolved. + xxxx(Install messgaes) + Is this ok [y/N]: y + Downloading Packages: + xxxx(Install process) + Complete! + Kabi check for kernel-4.19.90-2206.1.0.0153.oe1.x86_64: + [Fail] Here are 81 loaded kernel modules in this system, 78 pass, 3 fail. + Failed modules are as follows: + No. Module Difference + 1 nf_nat_ipv6 secure_ipv6_port_ephemeral : 0xe1a4f16a != 0x0209f3a7 + 2 nf_nat_ipv4 secure_ipv4_port_ephemeral : 0x57f70547 != 0xe3840e18 + 3 kvm_intel kvm_lapic_hv_timer_in_use : 0x54981db4 != 0xf58e6f1f + kvm_apic_write_nodecode : 0x56c989a1 != 0x24c9db31 + kvm_complete_insn_gp : 0x99c2d256 != 0xcd8014bd + Gonna remove kernel-4.19.90-2206.1.0.0153.oe1.x86_64 due to kabi check failed. + Rebuild rpm database succeed. + Remove package succeed: kernel-4.19.90-2206.1.0.0153.oe1.x86_64. + Restore the default boot kernel succeed: kernel-4.19.90-2112.8.0.0131.oe1.x86_64. + ``` + + - Using `dnf upgrade-en` to install target cold patches and the kabi check is passed. + + ```shell + $ dnf upgrade-en kernel-4.19.90-2201.1.0.0132.oe1.x86_64 + Last metadata expiration check: 2:02:10 ago on Fri 29 Dec 2023 13:49:39. + Dependencies resolved. + xxxx(Install messgaes) + Is this ok [y/N]: y + Downloading Packages: + xxxx(Install process) + Complete! + Kabi check for kernel-4.19.90-2201.1.0.0132.oe1.x86_64: + [Success] Here are 81 loaded kernel modules in this system, 81 pass, 0 fail. + ``` + +- Using `dnf upgrade-en` to install all cold patches. + + If the target kernel upgrade is included in the cold patches, the output is the same as `dnf upgrade-en PACKAGE` according to the kabi check result. + +## Usage Example + +Assume that the repositories of hot and cold patches on this host have been enabled. + +- Hot patches + +Scan CVEs that can be fixed on the host. + +```shell +$ dnf hot-updateinfo list cves +Last metadata expiration check: 0:00:38 ago on Sat 25 Mar 2023 11:53:46. +CVE-2023-22995 Important/Sec. python3-perf-5.10.0-136.22.0.98.oe2203sp1.x86_64 - +CVE-2023-26545 Important/Sec. python3-perf-5.10.0-136.22.0.98.oe2203sp1.x86_64 - +CVE-2022-40897 Important/Sec. python3-setuptools-59.4.0-5.oe2203sp1.noarch - +CVE-2021-1 Important/Sec. redis-6.2.5-2.x86_64 patch-redis-6.2.5-1-ACC-1-1.x86_64 +CVE-2021-11 Important/Sec. redis-6.2.5-2.x86_64 patch-redis-6.2.5-1-ACC-1-1.x86_64 +CVE-2021-2 Important/Sec. redis-6.2.5-3.x86_64 patch-redis-6.2.5-1-ACC-1-2.x86_64 +CVE-2021-22 Important/Sec. redis-6.2.5-3.x86_64 patch-redis-6.2.5-1-ACC-1-2.x86_64 +CVE-2021-33 Important/Sec. redis-6.2.5-4.x86_64 - +CVE-2021-3 Important/Sec. redis-6.2.5-4.x86_64 - +CVE-2022-38023 Important/Sec. samba-client-4.17.2-5.oe2203sp1.x86_64 - +CVE-2022-37966 Important/Sec. samba-client-4.17.2-5.oe2203sp1.x86_64 - +``` + +CVE-2021-1, CVE-2021-11, CVE-2021-2, and CVE-2021-22 can be fixed by hot patches. + +Start the Redis service based on the **redis.conf** configuration file. + +```shell +$ sudo redis-server ./redis.conf & +[1] 285075 +$ 285076:C 25 Mar 2023 12:09:51.503 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo +285076:C 25 Mar 2023 12:09:51.503 # Redis version=255.255.255, bits=64, commit=00000000, modified=0, pid=285076, just started +285076:C 25 Mar 2023 12:09:51.503 # Configuration loaded +285076:M 25 Mar 2023 12:09:51.504 * Increased maximum number of open files to 10032 (it was originally set to 1024). +285076:M 25 Mar 2023 12:09:51.504 * monotonic clock: POSIX clock_gettime + _._ + _.-``__ ''-._ + _.-`` `. `_. ''-._ Redis 255.255.255 (00000000/0) 64 bit + .-`` .-```. ```\/ _.,_ ''-._ + ( ' , .-` | `, ) Running in standalone mode + |`-._`-...-` __...-.``-._|'` _.-'| Port: 6380 + | `-._ `._ / _.-' | PID: 285076 + `-._ `-._ `-./ _.-' _.-' + |`-._`-._ `-.__.-' _.-'_.-'| + | `-._`-._ _.-'_.-' | https://redis.io + `-._ `-._`-.__.-'_.-' _.-' + |`-._`-._ `-.__.-' _.-'_.-'| + | `-._`-._ _.-'_.-' | + `-._ `-._`-.__.-'_.-' _.-' + `-._ `-.__.-' _.-' + `-._ _.-' + `-.__.-' + +285076:M 25 Mar 2023 12:09:51.505 # Server initialized +285076:M 25 Mar 2023 12:09:51.505 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. +285076:M 25 Mar 2023 12:09:51.506 * Ready to accept connections + +``` + +Test the function before applying the hot patch. + +```shell +$ telnet 127.0.0.1 6380 +Trying 127.0.0.1... +Connected to 127.0.0.1. +Escape character is '^]'. + +*100 + +-ERR Protocol error: expected '$', got ' ' +Connection closed by foreign host. +``` + +Specify CVE-2021-1 and ensure that the related hot patch is associated and applied. + +```shell +$ dnf hotupgrade patch-redis-6.2.5-1-ACC-1-1.x86_64 +Last metadata expiration check: 0:01:39 ago on Tue 02 Jan 2024 20:16:45. +The hotpatch 'redis-6.2.5-1/ACC-1-1' already has a 'ACTIVED' sub hotpatch of binary file 'redis-benchmark' +The hotpatch 'redis-6.2.5-1/ACC-1-1' already has a 'ACTIVED' sub hotpatch of binary file 'redis-cli' +The hotpatch 'redis-6.2.5-1/ACC-1-1' already has a 'ACTIVED' sub hotpatch of binary file 'redis-server' +Package patch-redis-6.2.5-1-ACC-1-1.x86_64 is already installed. +Dependencies resolved. +Nothing to do. +Complete! +``` + +Run `dnf hotpatch --list` to check whether the hot patch has been applied (the status is **ACTIVED**). + +```shell +$ dnf hotpatch --list +Last metadata expiration check: 0:04:43 ago on Tue 02 Jan 2024 20:16:45. +base-pkg/hotpatch status +redis-6.2.5-1/ACC-1-1/redis-benchmark ACTIVED +redis-6.2.5-1/ACC-1-1/redis-cli ACTIVED +redis-6.2.5-1/ACC-1-1/redis-server ACTIVED +``` + +Check whether the CVE has been fixed. Because the **patch-redis-6.2.5-1-ACC-1-1.x86_64** hot patch also fixes CVE-2021-11, CVE-2021-1 and CVE-2021-11 no longer exists. + +```shell +$ dnf hot-updateinfo list cves +Last metadata expiration check: 0:08:48 ago on Sat 25 Mar 2023 11:53:46. +CVE-2023-22995 Important/Sec. python3-perf-5.10.0-136.22.0.98.oe2203sp1.x86_64 - +CVE-2023-1076 Important/Sec. python3-perf-5.10.0-136.22.0.98.oe2203sp1.x86_64 - +CVE-2023-26607 Important/Sec. python3-perf-5.10.0-136.22.0.98.oe2203sp1.x86_64 - +CVE-2022-40897 Important/Sec. python3-setuptools-59.4.0-5.oe2203sp1.noarch - +CVE-2021-22 Important/Sec. redis-6.2.5-3.x86_64 patch-redis-6.2.5-1-ACC-1-2.x86_64 +CVE-2021-2 Important/Sec. redis-6.2.5-3.x86_64 patch-redis-6.2.5-1-ACC-1-2.x86_64 +CVE-2021-33 Important/Sec. redis-6.2.5-4.x86_64 - +CVE-2021-3 Important/Sec. redis-6.2.5-4.x86_64 - +CVE-2022-38023 Important/Sec. samba-client-4.17.2-5.oe2203sp1.x86_64 - +CVE-2022-37966 Important/Sec. samba-client-4.17.2-5.oe2203sp1.x86_64 - +``` + +Test the function after applying the hot patch. + +```shell +$ telnet 127.0.0.1 6380 +Trying 127.0.0.1... +Connected to 127.0.0.1. +Escape character is '^]'. + +*100 + +-ERR Protocol error: unauthenticated multibulk length +Connection closed by foreign host. +``` + +Run `dnf hotpatch --remove` and specify the patch name to manually remove the hot patch. + +```shell +$ dnf hotpatch --remove redis-6.2.5-1 +Last metadata expiration check: 0:11:52 ago on Tue 02 Jan 2024 20:16:45. +Gonna remove this hot patch: redis-6.2.5-1 +remove hot patch 'redis-6.2.5-1' succeed +$ dnf hotpatch --list +Last metadata expiration check: 0:12:00 ago on Tue 02 Jan 2024 20:16:45. +base-pkg/hotpatch status +redis-6.2.5-1/ACC-1-1/redis-benchmark NOT-APPLIED +redis-6.2.5-1/ACC-1-1/redis-cli NOT-APPLIED +redis-6.2.5-1/ACC-1-1/redis-server NOT-APPLIED +``` + +Scan the CVEs to be fixed on the host. CVE-2021-1 and CVE-2021-11 are displayed. + +```shell +$ dnf hot-updateinfo list cves +Last metadata expiration check: 0:00:38 ago on Sat 25 Mar 2023 11:53:46. +CVE-2023-22995 Important/Sec. python3-perf-5.10.0-136.22.0.98.oe2203sp1.x86_64 - +CVE-2023-26545 Important/Sec. python3-perf-5.10.0-136.22.0.98.oe2203sp1.x86_64 - +CVE-2022-40897 Important/Sec. python3-setuptools-59.4.0-5.oe2203sp1.noarch - +CVE-2021-1 Important/Sec. redis-6.2.5-2.x86_64 patch-redis-6.2.5-1-ACC-1-1.x86_64 +CVE-2021-11 Important/Sec. redis-6.2.5-2.x86_64 patch-redis-6.2.5-1-ACC-1-1.x86_64 +CVE-2021-2 Important/Sec. redis-6.2.5-3.x86_64 patch-redis-6.2.5-1-ACC-1-2.x86_64 +CVE-2021-22 Important/Sec. redis-6.2.5-3.x86_64 patch-redis-6.2.5-1-ACC-1-2.x86_64 +CVE-2021-33 Important/Sec. redis-6.2.5-4.x86_64 - +CVE-2021-3 Important/Sec. redis-6.2.5-4.x86_64 - +CVE-2022-38023 Important/Sec. samba-client-4.17.2-5.oe2203sp1.x86_64 - +CVE-2022-37966 Important/Sec. samba-client-4.17.2-5.oe2203sp1.x86_64 - +``` + +- installing an ACC patch of a higher version. + +Apply hot patch **patch-redis-6.2.5-1-HP002-1-1.x86_64**. + +```shell +$ dnf hotupgrade patch-redis-6.2.5-1-ACC-1-2.x86_64 +Last metadata expiration check: 0:36:12 ago on Tue 02 Jan 2024 20:16:45. +The hotpatch 'redis-6.2.5-1/ACC-1-2' already has a 'ACTIVED' sub hotpatch of binary file 'redis-benchmark' +The hotpatch 'redis-6.2.5-1/ACC-1-2' already has a 'ACTIVED' sub hotpatch of binary file 'redis-cli' +The hotpatch 'redis-6.2.5-1/ACC-1-2' already has a 'ACTIVED' sub hotpatch of binary file 'redis-server' +Package patch-redis-6.2.5-1-ACC-1-2.x86_64 is already installed. +Dependencies resolved. +Nothing to do. +Complete! +``` + +Scan the CVEs to be fixed on the host. Because **patch-redis-6.2.5-1-ACC-1-2.x86_64** is of a higher version than **patch-redis-6.2.5-1-ACC-1-1.x86_64**, **patch-redis-6.2.5-1-ACC-1-2.x86_64** also fixes CVE-2021-1, CVE-2021-11, CVE-2021-2, and CVE-2021-22. + +```shell +$ dnf hot-updateinfo list cves +Last metadata expiration check: 0:00:38 ago on Sat Mar 25 11:53:46 2023. +CVE-2023-22995 Important/Sec. python3-perf-5.10.0-136.22.0.98.oe2203sp1.x86_64 - +CVE-2023-26545 Important/Sec. python3-perf-5.10.0-136.22.0.98.oe2203sp1.x86_64 - +CVE-2022-40897 Important/Sec. python3-setuptools-59.4.0-5.oe2203sp1.noarch - +CVE-2021-33 Important/Sec. redis-6.2.5-4.x86_64 - +CVE-2021-3 Important/Sec. redis-6.2.5-4.x86_64 - +CVE-2022-38023 Important/Sec. samba-client-4.17.2-5.oe2203sp1.x86_64 - +CVE-2022-37966 Important/Sec. samba-client-4.17.2-5.oe2203sp1.x86_64 - +``` + +- Version of the software package fixed by the hot patch higher than that of the installed one. + +Open the **xxx-updateinfo.xml.gz** file in the **repodata** directory of the hot patch repository. Check the information related to CVE-2021-33 and CVE-2021-3. + +```xml + + openEuler-HotPatchSA-2023-3 + An update for mariadb is now available for openEuler-{version} + Important + openEuler + + + + + + patch-redis-6.2.5-2-ACC.(CVE-2021-3, CVE-2021-33) + + + openEuler + + patch-redis-6.2.5-2-ACC-1-1.aarch64.rpm + + + patch-redis-6.2.5-2-ACC-1-1.x86_64.rpm + + + + +``` + +The format of the **name** field of **package** (**patch-redis-6.2.5-2-ACC**) is **patch-\-\-\-\**. In the example, **patch-redis-6.2.5-2-ACC** requires the source code version of redis-6.2.5-2 to be installed. Check the version of Redis on the host. + +```shell +$ rpm -qa | grep redis +redis-6.2.5-1.x86_64 +``` + +The installed Redis version is lower than 6.2.5-2. Therefore, the hot patch will not be displayed. + +```shell +$ dnf hot-updateinfo list cves +Last metadata expiration check: 0:00:38 ago on Sat 25 Mar 2023 11:53:46. +CVE-2023-22995 Important/Sec. python3-perf-5.10.0-136.22.0.98.oe2203sp1.x86_64 - +CVE-2023-26545 Important/Sec. python3-perf-5.10.0-136.22.0.98.oe2203sp1.x86_64 - +CVE-2022-40897 Important/Sec. python3-setuptools-59.4.0-5.oe2203sp1.noarch - +CVE-2021-33 Important/Sec. redis-6.2.5-4.x86_64 - +CVE-2021-3 Important/Sec. redis-6.2.5-4.x86_64 - +CVE-2022-38023 Important/Sec. samba-client-4.17.2-5.oe2203sp1.x86_64 - +CVE-2022-37966 Important/Sec. samba-client-4.17.2-5.oe2203sp1.x86_64 - +``` + +- Version of the software package fixed by the hot patch lower than that of the installed one. + +Open the **xxx-updateinfo.xml.gz** file in the **repodata** directory of the hot patch repository. Check the information related to CVE-2021-44 and CVE-2021-4. + +```xml + + openEuler-HotPatchSA-2023-4 + An update for mariadb is now available for openEuler-{version} + Important + openEuler + + + + + + patch-redis-6.2.4-1-ACC.(CVE-2021-44, CVE-2021-4) + + + openEuler + + patch-redis-6.2.4-1-ACC-1-1.aarch64.rpm + + + patch-redis-6.2.4-1-ACC-1-1.x86_64.rpm + + + + +``` + +The format of the **name** field of **package** (**patch-redis-6.2.4-1-ACC**) is **patch-\-\-\-\**. In the example, **patch-redis-6.2.4-1-ACC** requires the source code version of redis-6.2.4-1 to be installed. Check the version of Redis on the host. + +```shell +$ rpm -qa | grep redis +redis-6.2.5-1.x86_64 +``` + +The installed Redis version is higher than 6.2.4-1. Therefore, the CVE will not be displayed. + +```shell +$ dnf hot-updateinfo list cves +Last metadata expiration check: 0:00:38 ago on Sat 25 Mar 2023 11:53:46. +CVE-2023-22995 Important/Sec. python3-perf-5.10.0-136.22.0.98.oe2203sp1.x86_64 - +CVE-2023-26545 Important/Sec. python3-perf-5.10.0-136.22.0.98.oe2203sp1.x86_64 - +CVE-2022-40897 Important/Sec. python3-setuptools-59.4.0-5.oe2203sp1.noarch - +CVE-2021-33 Important/Sec. redis-6.2.5-4.x86_64 - +CVE-2021-3 Important/Sec. redis-6.2.5-4.x86_64 - +CVE-2022-38023 Important/Sec. samba-client-4.17.2-5.oe2203sp1.x86_64 - +CVE-2022-37966 Important/Sec. samba-client-4.17.2-5.oe2203sp1.x86_64 - +``` diff --git a/docs/en/server/maintenance/aops/figures/0BFA7C40-D404-4772-9C47-76EAD7D24E69.png b/docs/en/server/maintenance/aops/figures/0BFA7C40-D404-4772-9C47-76EAD7D24E69.png new file mode 100644 index 0000000000000000000000000000000000000000..910f58dbf8fb13d52826b7c74728f4c28599660f Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/0BFA7C40-D404-4772-9C47-76EAD7D24E69.png differ diff --git a/docs/en/server/maintenance/aops/figures/1631073636579.png b/docs/en/server/maintenance/aops/figures/1631073636579.png new file mode 100644 index 0000000000000000000000000000000000000000..5aacc487264ac63fbe5322b4f89fca3ebf9c7cd9 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/1631073636579.png differ diff --git a/docs/en/server/maintenance/aops/figures/1631073840656.png b/docs/en/server/maintenance/aops/figures/1631073840656.png new file mode 100644 index 0000000000000000000000000000000000000000..122e391eafe7c0d8d081030a240df90aea260150 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/1631073840656.png differ diff --git a/docs/en/server/maintenance/aops/figures/1631101736624.png b/docs/en/server/maintenance/aops/figures/1631101736624.png new file mode 100644 index 0000000000000000000000000000000000000000..74e2f2ded2ea254c66b221e8ac27a0d8bed9362a Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/1631101736624.png differ diff --git a/docs/en/server/maintenance/aops/figures/1631101865366.png b/docs/en/server/maintenance/aops/figures/1631101865366.png new file mode 100644 index 0000000000000000000000000000000000000000..abfbc280a368b93af1e1165385af3a9cac89391d Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/1631101865366.png differ diff --git a/docs/en/server/maintenance/aops/figures/1631101982829.png b/docs/en/server/maintenance/aops/figures/1631101982829.png new file mode 100644 index 0000000000000000000000000000000000000000..0b1c9c7c3676b804dbdf19afbe4f3ec9dbe0627f Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/1631101982829.png differ diff --git a/docs/en/server/maintenance/aops/figures/1631102019026.png b/docs/en/server/maintenance/aops/figures/1631102019026.png new file mode 100644 index 0000000000000000000000000000000000000000..54e8e7d1cffbb28711074e511b08c73f66c1fb75 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/1631102019026.png differ diff --git a/docs/en/server/maintenance/aops/figures/20210908212726.png b/docs/en/server/maintenance/aops/figures/20210908212726.png new file mode 100644 index 0000000000000000000000000000000000000000..f7d399aecd46605c09fe2d1f50a1a8670cd80432 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/20210908212726.png differ diff --git a/docs/en/server/maintenance/aops/figures/D466AC8C-2FAF-4797-9A48-F6C346A1EC77.png b/docs/en/server/maintenance/aops/figures/D466AC8C-2FAF-4797-9A48-F6C346A1EC77.png new file mode 100644 index 0000000000000000000000000000000000000000..4b937ab846017ead71ca8b5a75b8af1f0f28e1ef Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/D466AC8C-2FAF-4797-9A48-F6C346A1EC77.png differ diff --git a/docs/en/server/maintenance/aops/figures/a-ops_architecture.png b/docs/en/server/maintenance/aops/figures/a-ops_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..7a831b183e8cba5da16b9be9d965abe9811ada5b Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/a-ops_architecture.png differ diff --git "a/docs/en/server/maintenance/aops/figures/a-ops\350\275\257\344\273\266\346\236\266\346\236\204.png" "b/docs/en/server/maintenance/aops/figures/a-ops\350\275\257\344\273\266\346\236\266\346\236\204.png" new file mode 100644 index 0000000000000000000000000000000000000000..047c6f1bfe3e38c66d34285563d910f6f3bd07e1 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/a-ops\350\275\257\344\273\266\346\236\266\346\236\204.png" differ diff --git a/docs/en/server/maintenance/aops/figures/add_config.png b/docs/en/server/maintenance/aops/figures/add_config.png new file mode 100644 index 0000000000000000000000000000000000000000..18d71c2e099c19b5d28848eec6a8d11f29ccee27 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/add_config.png differ diff --git a/docs/en/server/maintenance/aops/figures/add_fault_tree.png b/docs/en/server/maintenance/aops/figures/add_fault_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..664efd5150fcb96f009ce0eddc3d9ac91b9e622f Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/add_fault_tree.png differ diff --git a/docs/en/server/maintenance/aops/figures/add_host_group.png b/docs/en/server/maintenance/aops/figures/add_host_group.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4ab3616d418ecf33a006fee3985b8b6d2d965d Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/add_host_group.png differ diff --git a/docs/en/server/maintenance/aops/figures/add_node.png b/docs/en/server/maintenance/aops/figures/add_node.png new file mode 100644 index 0000000000000000000000000000000000000000..d68f5e12a62548f2ec59374bda9ab07f43b8b5cb Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/add_node.png differ diff --git a/docs/en/server/maintenance/aops/figures/chakanyuqi.png b/docs/en/server/maintenance/aops/figures/chakanyuqi.png new file mode 100644 index 0000000000000000000000000000000000000000..bbead6a91468d5dee570cfdc66faf9a4ab155d7c Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/chakanyuqi.png differ diff --git a/docs/en/server/maintenance/aops/figures/chaxunshijipeizhi.png b/docs/en/server/maintenance/aops/figures/chaxunshijipeizhi.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f6e450fc0e1e246492ca71a6fcd8db572eb469 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/chaxunshijipeizhi.png differ diff --git a/docs/en/server/maintenance/aops/figures/check.PNG b/docs/en/server/maintenance/aops/figures/check.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2dce821dd43eec6f0d13cd6b2dc1e30653f35489 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/check.PNG differ diff --git a/docs/en/server/maintenance/aops/figures/chuangjianyewuyu.png b/docs/en/server/maintenance/aops/figures/chuangjianyewuyu.png new file mode 100644 index 0000000000000000000000000000000000000000..4f5b8de2d2c4ddb9bfdfba1ac17258a834561e2d Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/chuangjianyewuyu.png differ diff --git a/docs/en/server/maintenance/aops/figures/create_service_domain.png b/docs/en/server/maintenance/aops/figures/create_service_domain.png new file mode 100644 index 0000000000000000000000000000000000000000..4f5b8de2d2c4ddb9bfdfba1ac17258a834561e2d Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/create_service_domain.png differ diff --git a/docs/en/server/maintenance/aops/figures/dashboard.PNG b/docs/en/server/maintenance/aops/figures/dashboard.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2a4a827191367309aad28a8a6c1835df602bdf72 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/dashboard.PNG differ diff --git a/docs/en/server/maintenance/aops/figures/decryption.png b/docs/en/server/maintenance/aops/figures/decryption.png new file mode 100644 index 0000000000000000000000000000000000000000..da07cfdf9296e201a82cceb210e651261fe7ecee Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/decryption.png differ diff --git a/docs/en/server/maintenance/aops/figures/delete_config.png b/docs/en/server/maintenance/aops/figures/delete_config.png new file mode 100644 index 0000000000000000000000000000000000000000..cfea2eb44f7b8aa809404b8b49b4bd2e24172568 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/delete_config.png differ diff --git a/docs/en/server/maintenance/aops/figures/delete_host_group.png b/docs/en/server/maintenance/aops/figures/delete_host_group.png new file mode 100644 index 0000000000000000000000000000000000000000..e4d85f6e3f1a269a483943f5115f54daa3de51de Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/delete_host_group.png differ diff --git a/docs/en/server/maintenance/aops/figures/delete_hosts.png b/docs/en/server/maintenance/aops/figures/delete_hosts.png new file mode 100644 index 0000000000000000000000000000000000000000..b3da935739369dad1318fe135146755ede13c694 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/delete_hosts.png differ diff --git a/docs/en/server/maintenance/aops/figures/deploy.PNG b/docs/en/server/maintenance/aops/figures/deploy.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e30dcb0eb05eb4f41202c736863f3e0ff216398d Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/deploy.PNG differ diff --git a/docs/en/server/maintenance/aops/figures/diag.PNG b/docs/en/server/maintenance/aops/figures/diag.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a67e8515b8313a50b06cb985611ef9c166851811 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/diag.PNG differ diff --git a/docs/en/server/maintenance/aops/figures/diag_error1.png b/docs/en/server/maintenance/aops/figures/diag_error1.png new file mode 100644 index 0000000000000000000000000000000000000000..9e5b1139febe9f00156b37f3268269ac30a78737 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/diag_error1.png differ diff --git a/docs/en/server/maintenance/aops/figures/diag_main_page.png b/docs/en/server/maintenance/aops/figures/diag_main_page.png new file mode 100644 index 0000000000000000000000000000000000000000..b536af938250004bac3053b234bf20bcbf075c9b Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/diag_main_page.png differ diff --git a/docs/en/server/maintenance/aops/figures/diagnosis.png b/docs/en/server/maintenance/aops/figures/diagnosis.png new file mode 100644 index 0000000000000000000000000000000000000000..2c85102fe28deaac0a35fde85fd4497994d2c031 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/diagnosis.png differ diff --git a/docs/en/server/maintenance/aops/figures/diagnosis_error1.png b/docs/en/server/maintenance/aops/figures/diagnosis_error1.png new file mode 100644 index 0000000000000000000000000000000000000000..9e5b1139febe9f00156b37f3268269ac30a78737 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/diagnosis_error1.png differ diff --git a/docs/en/server/maintenance/aops/figures/domain.PNG b/docs/en/server/maintenance/aops/figures/domain.PNG new file mode 100644 index 0000000000000000000000000000000000000000..bad499f96df5934565d36edf2308cec5e4147719 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/domain.PNG differ diff --git a/docs/en/server/maintenance/aops/figures/domain_config.PNG b/docs/en/server/maintenance/aops/figures/domain_config.PNG new file mode 100644 index 0000000000000000000000000000000000000000..8995424b35cda75f08881037446b7816a0ca09dc Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/domain_config.PNG differ diff --git a/docs/en/server/maintenance/aops/figures/elasticsearch3.png b/docs/en/server/maintenance/aops/figures/elasticsearch3.png new file mode 100644 index 0000000000000000000000000000000000000000..893aae242aa9117c64f323374d4728d230894973 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/elasticsearch3.png differ diff --git a/docs/en/server/maintenance/aops/figures/elasticsearch_config1.png b/docs/en/server/maintenance/aops/figures/elasticsearch_config1.png new file mode 100644 index 0000000000000000000000000000000000000000..1b7e0eab093b2f0455b8f3972884e5f757fbec3d Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/elasticsearch_config1.png differ diff --git a/docs/en/server/maintenance/aops/figures/elasticsearch_config2.png b/docs/en/server/maintenance/aops/figures/elasticsearch_config2.png new file mode 100644 index 0000000000000000000000000000000000000000..620dbbda71259e3b6ee6a2efb646a9692adf2456 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/elasticsearch_config2.png differ diff --git a/docs/en/server/maintenance/aops/figures/execute_diag.png b/docs/en/server/maintenance/aops/figures/execute_diag.png new file mode 100644 index 0000000000000000000000000000000000000000..afb5f7e9fbfb1d1ce46d096a61729766b4940cd3 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/execute_diag.png differ diff --git a/docs/en/server/maintenance/aops/figures/gala-gopher-start-success.png b/docs/en/server/maintenance/aops/figures/gala-gopher-start-success.png new file mode 100644 index 0000000000000000000000000000000000000000..ab16e9d3661db3fd4adc6c605b2d2d08e79fdc1c Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/gala-gopher-start-success.png differ diff --git "a/docs/en/server/maintenance/aops/figures/gala-gopher\346\210\220\345\212\237\345\220\257\345\212\250\347\212\266\346\200\201.png" "b/docs/en/server/maintenance/aops/figures/gala-gopher\346\210\220\345\212\237\345\220\257\345\212\250\347\212\266\346\200\201.png" new file mode 100644 index 0000000000000000000000000000000000000000..ab16e9d3661db3fd4adc6c605b2d2d08e79fdc1c Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/gala-gopher\346\210\220\345\212\237\345\220\257\345\212\250\347\212\266\346\200\201.png" differ diff --git a/docs/en/server/maintenance/aops/figures/gala-spider-arch.png b/docs/en/server/maintenance/aops/figures/gala-spider-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..c5a0768be63a98ef7ccc4a56996a8c715f7090af Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/gala-spider-arch.png differ diff --git "a/docs/en/server/maintenance/aops/figures/gala-spider\350\275\257\344\273\266\346\236\266\346\236\204\345\233\276.png" "b/docs/en/server/maintenance/aops/figures/gala-spider\350\275\257\344\273\266\346\236\266\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..c5a0768be63a98ef7ccc4a56996a8c715f7090af Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/gala-spider\350\275\257\344\273\266\346\236\266\346\236\204\345\233\276.png" differ diff --git a/docs/en/server/maintenance/aops/figures/gopher-arch.png b/docs/en/server/maintenance/aops/figures/gopher-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..f151965a21d11dd7a3e215cc4ef23d70d059f4b1 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/gopher-arch.png differ diff --git "a/docs/en/server/maintenance/aops/figures/gopher\350\275\257\344\273\266\346\236\266\346\236\204\345\233\276.png" "b/docs/en/server/maintenance/aops/figures/gopher\350\275\257\344\273\266\346\236\266\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..f151965a21d11dd7a3e215cc4ef23d70d059f4b1 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/gopher\350\275\257\344\273\266\346\236\266\346\236\204\345\233\276.png" differ diff --git a/docs/en/server/maintenance/aops/figures/group.PNG b/docs/en/server/maintenance/aops/figures/group.PNG new file mode 100644 index 0000000000000000000000000000000000000000..584fd1f7195694a3419482cace2a71fa1cd9a3ec Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/group.PNG differ diff --git a/docs/en/server/maintenance/aops/figures/host.PNG b/docs/en/server/maintenance/aops/figures/host.PNG new file mode 100644 index 0000000000000000000000000000000000000000..3c00681a567cf8f1e1baddfb6fdb7b6cf7df43de Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/host.PNG differ diff --git a/docs/en/server/maintenance/aops/figures/hosts.png b/docs/en/server/maintenance/aops/figures/hosts.png new file mode 100644 index 0000000000000000000000000000000000000000..f4c7b9103baab7748c83392f6120c8f00880860f Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/hosts.png differ diff --git a/docs/en/server/maintenance/aops/figures/hosts_in_group.png b/docs/en/server/maintenance/aops/figures/hosts_in_group.png new file mode 100644 index 0000000000000000000000000000000000000000..9f188d207162fa1418a61a10f83ef9c51a512e65 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/hosts_in_group.png differ diff --git a/docs/en/server/maintenance/aops/figures/hot_patch_statuses.png b/docs/en/server/maintenance/aops/figures/hot_patch_statuses.png new file mode 100644 index 0000000000000000000000000000000000000000..f5f8a3a95705145787e7aaf9c8d1fff404892240 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/hot_patch_statuses.png differ diff --git a/docs/en/server/maintenance/aops/figures/icon-note.gif b/docs/en/server/maintenance/aops/figures/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/icon-note.gif differ diff --git a/docs/en/server/maintenance/aops/figures/kafka_config.png b/docs/en/server/maintenance/aops/figures/kafka_config.png new file mode 100644 index 0000000000000000000000000000000000000000..57eb17ccbd2fa63d97f700c29847fac7f08042ff Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/kafka_config.png differ diff --git a/docs/en/server/maintenance/aops/figures/prometheus_config.png b/docs/en/server/maintenance/aops/figures/prometheus_config.png new file mode 100644 index 0000000000000000000000000000000000000000..7c8d0328967e8eb9bc4aa7465a273b9ef5a30b58 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/prometheus_config.png differ diff --git a/docs/en/server/maintenance/aops/figures/query_actual_config.png b/docs/en/server/maintenance/aops/figures/query_actual_config.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f6e450fc0e1e246492ca71a6fcd8db572eb469 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/query_actual_config.png differ diff --git a/docs/en/server/maintenance/aops/figures/query_status.png b/docs/en/server/maintenance/aops/figures/query_status.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d0b3294bf6e0eeec50a2c2f8c5059bdc256376 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/query_status.png differ diff --git a/docs/en/server/maintenance/aops/figures/shanchupeizhi.png b/docs/en/server/maintenance/aops/figures/shanchupeizhi.png new file mode 100644 index 0000000000000000000000000000000000000000..cfea2eb44f7b8aa809404b8b49b4bd2e24172568 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/shanchupeizhi.png differ diff --git a/docs/en/server/maintenance/aops/figures/spider.PNG b/docs/en/server/maintenance/aops/figures/spider.PNG new file mode 100644 index 0000000000000000000000000000000000000000..53bad6dd38e36db9cadfdbeda21cbc3ef59eddf7 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/spider.PNG differ diff --git a/docs/en/server/maintenance/aops/figures/spider_detail.jpg b/docs/en/server/maintenance/aops/figures/spider_detail.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b69636fe2161380be56f37caf7fd904d2e63e302 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/spider_detail.jpg differ diff --git a/docs/en/server/maintenance/aops/figures/spider_topology.png b/docs/en/server/maintenance/aops/figures/spider_topology.png new file mode 100644 index 0000000000000000000000000000000000000000..5823a116f384801e1197350f151b4d04ef519ac4 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/spider_topology.png differ diff --git "a/docs/en/server/maintenance/aops/figures/spider\346\213\223\346\211\221\345\205\263\347\263\273\345\233\276.png" "b/docs/en/server/maintenance/aops/figures/spider\346\213\223\346\211\221\345\205\263\347\263\273\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..5823a116f384801e1197350f151b4d04ef519ac4 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/spider\346\213\223\346\211\221\345\205\263\347\263\273\345\233\276.png" differ diff --git a/docs/en/server/maintenance/aops/figures/syscare_hot_patch_statuses.png b/docs/en/server/maintenance/aops/figures/syscare_hot_patch_statuses.png new file mode 100644 index 0000000000000000000000000000000000000000..bbd0600fc5c913198dfe1e1bf2aba9c652576a98 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/syscare_hot_patch_statuses.png differ diff --git "a/docs/en/server/maintenance/aops/figures/syscare\347\203\255\350\241\245\344\270\201\347\212\266\346\200\201\345\233\276.png" "b/docs/en/server/maintenance/aops/figures/syscare\347\203\255\350\241\245\344\270\201\347\212\266\346\200\201\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..bbd0600fc5c913198dfe1e1bf2aba9c652576a98 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/syscare\347\203\255\350\241\245\344\270\201\347\212\266\346\200\201\345\233\276.png" differ diff --git a/docs/en/server/maintenance/aops/figures/tianjianode.png b/docs/en/server/maintenance/aops/figures/tianjianode.png new file mode 100644 index 0000000000000000000000000000000000000000..d68f5e12a62548f2ec59374bda9ab07f43b8b5cb Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/tianjianode.png differ diff --git a/docs/en/server/maintenance/aops/figures/view_expected_config.png b/docs/en/server/maintenance/aops/figures/view_expected_config.png new file mode 100644 index 0000000000000000000000000000000000000000..bbead6a91468d5dee570cfdc66faf9a4ab155d7c Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/view_expected_config.png differ diff --git a/docs/en/server/maintenance/aops/figures/view_fault_tree.png b/docs/en/server/maintenance/aops/figures/view_fault_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..a566417b18e8bcf19153730904893fc8d827d885 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/view_fault_tree.png differ diff --git a/docs/en/server/maintenance/aops/figures/view_report.png b/docs/en/server/maintenance/aops/figures/view_report.png new file mode 100644 index 0000000000000000000000000000000000000000..2029141179302ecef45d34cb0c9dc916b9142e7b Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/view_report.png differ diff --git a/docs/en/server/maintenance/aops/figures/view_report_list.png b/docs/en/server/maintenance/aops/figures/view_report_list.png new file mode 100644 index 0000000000000000000000000000000000000000..58307ec6ef4c73b6b0f039b1052e5870629ac2e8 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/view_report_list.png differ diff --git a/docs/en/server/maintenance/aops/figures/web_config.png b/docs/en/server/maintenance/aops/figures/web_config.png new file mode 100644 index 0000000000000000000000000000000000000000..138f7fa07988b6f0475da85577eb4d0cee5a1be5 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/web_config.png differ diff --git a/docs/en/server/maintenance/aops/figures/xinzengpeizhi.png b/docs/en/server/maintenance/aops/figures/xinzengpeizhi.png new file mode 100644 index 0000000000000000000000000000000000000000..18d71c2e099c19b5d28848eec6a8d11f29ccee27 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/xinzengpeizhi.png differ diff --git a/docs/en/server/maintenance/aops/figures/zhuangtaichaxun.png b/docs/en/server/maintenance/aops/figures/zhuangtaichaxun.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d0b3294bf6e0eeec50a2c2f8c5059bdc256376 Binary files /dev/null and b/docs/en/server/maintenance/aops/figures/zhuangtaichaxun.png differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/.DS_Store" "b/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/.DS_Store" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/app\350\257\246\346\203\205.jpg" "b/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/app\350\257\246\346\203\205.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..bd179be46c9e711d7148ee44dc56f4a7a02f56bf Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/app\350\257\246\346\203\205.jpg" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\344\277\256\346\224\271\346\250\241\345\236\213.png" "b/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\344\277\256\346\224\271\346\250\241\345\236\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..23ff4e5fddb87ac157b1002a70c47d9b4c76b873 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\344\277\256\346\224\271\346\250\241\345\236\213.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\210\233\345\273\272\345\267\245\344\275\234\346\265\201.jpg" "b/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\210\233\345\273\272\345\267\245\344\275\234\346\265\201.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..1a2b45e860914a1ac0cfb6908b02fb5cad4cbd60 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\210\233\345\273\272\345\267\245\344\275\234\346\265\201.jpg" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\221\212\350\255\246.jpg" "b/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\221\212\350\255\246.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..89ac88e154275d4be8179d773e7093f2357f425f Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\221\212\350\255\246.jpg" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\221\212\350\255\246\347\241\256\350\256\244.jpg" "b/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\221\212\350\255\246\347\241\256\350\256\244.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..57844f772853c541f7a1328b007a9b6ae4d5caf0 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\221\212\350\255\246\347\241\256\350\256\244.jpg" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\221\212\350\255\246\350\257\246\346\203\205.jpg" "b/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\221\212\350\255\246\350\257\246\346\203\205.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..5b4830b47897a0d51be28238a879a70b1de9ca3b Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\221\212\350\255\246\350\257\246\346\203\205.jpg" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\267\245\344\275\234\346\265\201.jpg" "b/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\267\245\344\275\234\346\265\201.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..17fb5b13034e1fc5276c68583fed1952415b0b5f Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\267\245\344\275\234\346\265\201.jpg" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\267\245\344\275\234\346\265\201\350\257\246\346\203\205.jpg" "b/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\267\245\344\275\234\346\265\201\350\257\246\346\203\205.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..458e023847bb2ad1f198f5a2dd1691748038137e Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\267\245\344\275\234\346\265\201\350\257\246\346\203\205.jpg" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\272\224\347\224\250.png" "b/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\272\224\347\224\250.png" new file mode 100644 index 0000000000000000000000000000000000000000..aa34bb909ee7c86a95126c13fa532ce93410a931 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\225\205\351\232\234\350\257\212\346\226\255/\345\272\224\347\224\250.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/.DS_Store" "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/.DS_Store" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/CVE\350\257\246\346\203\205\347\225\214\351\235\242.png" "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/CVE\350\257\246\346\203\205\347\225\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..05859540cb88e11bd8dedaeb8e03253254574c40 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/CVE\350\257\246\346\203\205\347\225\214\351\235\242.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/cve\345\210\227\350\241\250.png" "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/cve\345\210\227\350\241\250.png" new file mode 100644 index 0000000000000000000000000000000000000000..f556e0e7e3c4096a89597cb08ba29133375aab07 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/cve\345\210\227\350\241\250.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\270\212\344\274\240\345\256\211\345\205\250\345\205\254\345\221\212.png" "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\270\212\344\274\240\345\256\211\345\205\250\345\205\254\345\221\212.png" new file mode 100644 index 0000000000000000000000000000000000000000..801c7f917d717499c86708b419101be3773348ac Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\270\212\344\274\240\345\256\211\345\205\250\345\205\254\345\221\212.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\270\273\346\234\272\345\210\227\350\241\250\347\225\214\351\235\242.png" "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\270\273\346\234\272\345\210\227\350\241\250\347\225\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..0719bb8c0b71d0503d5d3a7d8e9e83da71169c64 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\270\273\346\234\272\345\210\227\350\241\250\347\225\214\351\235\242.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\270\273\346\234\272\350\257\246\346\203\205.png" "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\270\273\346\234\272\350\257\246\346\203\205.png" new file mode 100644 index 0000000000000000000000000000000000000000..21c9468ce4378bcadf537e543c756cf7a1347499 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\270\273\346\234\272\350\257\246\346\203\205.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\273\273\345\212\241\345\210\227\350\241\250.png" "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\273\273\345\212\241\345\210\227\350\241\250.png" new file mode 100644 index 0000000000000000000000000000000000000000..9cfd080d1a658544c559e83429a14b35dc931fc6 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\273\273\345\212\241\345\210\227\350\241\250.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\273\273\345\212\241\350\257\246\346\203\205.png" "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\273\273\345\212\241\350\257\246\346\203\205.png" new file mode 100644 index 0000000000000000000000000000000000000000..7ca43b0a82b7c4dd3e43a5e46cf3b4a79d55d033 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\273\273\345\212\241\350\257\246\346\203\205.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\277\256\345\244\215\344\273\273\345\212\241\346\212\245\345\221\212.png" "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\277\256\345\244\215\344\273\273\345\212\241\346\212\245\345\221\212.png" new file mode 100644 index 0000000000000000000000000000000000000000..b9acfbcd7d8e3b2b551c8bb9700142dfba681afe Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\344\277\256\345\244\215\344\273\273\345\212\241\346\212\245\345\221\212.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\345\233\236\346\273\232\344\273\273\345\212\241\350\257\246\346\203\205.png" "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\345\233\236\346\273\232\344\273\273\345\212\241\350\257\246\346\203\205.png" new file mode 100644 index 0000000000000000000000000000000000000000..6bc8cc31e05d06dbd5ee4c0f62f281683db048da Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\345\233\236\346\273\232\344\273\273\345\212\241\350\257\246\346\203\205.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\346\267\273\345\212\240repo\346\272\220.png" "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\346\267\273\345\212\240repo\346\272\220.png" new file mode 100644 index 0000000000000000000000000000000000000000..3bf992f586f7fb4d87bc01cc29f961755a315c9d Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\346\267\273\345\212\240repo\346\272\220.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\346\274\217\346\264\236\346\211\253\346\217\217.png" "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\346\274\217\346\264\236\346\211\253\346\217\217.png" new file mode 100644 index 0000000000000000000000000000000000000000..f73ccaf984e8ab55f8b78f7da5a570ce43685221 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\346\274\217\346\264\236\346\211\253\346\217\217.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\347\224\237\346\210\220\344\277\256\345\244\215\344\273\273\345\212\241.png" "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\347\224\237\346\210\220\344\277\256\345\244\215\344\273\273\345\212\241.png" new file mode 100644 index 0000000000000000000000000000000000000000..b183298d96b8ced8954852540c891310aeda05be Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\347\224\237\346\210\220\344\277\256\345\244\215\344\273\273\345\212\241.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\347\224\237\346\210\220\345\233\236\346\273\232\344\273\273\345\212\241.png" "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\347\224\237\346\210\220\345\233\236\346\273\232\344\273\273\345\212\241.png" new file mode 100644 index 0000000000000000000000000000000000000000..c8aa813bc228326b3e8db19e303e03507873a893 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\347\224\237\346\210\220\345\233\236\346\273\232\344\273\273\345\212\241.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\347\224\237\346\210\220\347\203\255\350\241\245\344\270\201\347\247\273\351\231\244\344\273\273\345\212\241.png" "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\347\224\237\346\210\220\347\203\255\350\241\245\344\270\201\347\247\273\351\231\244\344\273\273\345\212\241.png" new file mode 100644 index 0000000000000000000000000000000000000000..8ccebe84f60b21737414b2cb3f972472114a40c5 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\347\224\237\346\210\220\347\203\255\350\241\245\344\270\201\347\247\273\351\231\244\344\273\273\345\212\241.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\350\256\276\347\275\256repo\346\272\220.png" "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\350\256\276\347\275\256repo\346\272\220.png" new file mode 100644 index 0000000000000000000000000000000000000000..619cc6d42b646df3d9c4e601f40a6ec452712668 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\350\256\276\347\275\256repo\346\272\220.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\351\202\256\344\273\266\351\200\232\347\237\245.png" "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\351\202\256\344\273\266\351\200\232\347\237\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..34b1d4095b8c017f3c66ebfb3c44d114bc8d6ca7 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\346\274\217\346\264\236\347\256\241\347\220\206/\351\202\256\344\273\266\351\200\232\347\237\245.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\347\203\255\350\241\245\344\270\201\347\212\266\346\200\201\345\233\276.png" "b/docs/en/server/maintenance/aops/figures/\347\203\255\350\241\245\344\270\201\347\212\266\346\200\201\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..f5f8a3a95705145787e7aaf9c8d1fff404892240 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\347\203\255\350\241\245\344\270\201\347\212\266\346\200\201\345\233\276.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/.DS_Store" "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/.DS_Store" differ diff --git "a/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\345\210\227\350\241\250.png" "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\345\210\227\350\241\250.png" new file mode 100644 index 0000000000000000000000000000000000000000..b8f0a87e00d73961907167fcbe43d82b60caf445 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\345\210\227\350\241\250.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\256\241\347\220\206-\346\267\273\345\212\240.png" "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\256\241\347\220\206-\346\267\273\345\212\240.png" new file mode 100644 index 0000000000000000000000000000000000000000..ce25657a0627e9dfc3dc9ebf323e086103c2ecdf Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\256\241\347\220\206-\346\267\273\345\212\240.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\273\204\345\206\205\344\270\273\346\234\272\346\237\245\347\234\213.png" "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\273\204\345\206\205\344\270\273\346\234\272\346\237\245\347\234\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..2f2e2e67a98a16e1ad464c794a8ef45ebb229d7f Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\273\204\345\206\205\344\270\273\346\234\272\346\237\245\347\234\213.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\273\204\347\256\241\347\220\206\345\210\227\350\241\250.png" "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\273\204\347\256\241\347\220\206\345\210\227\350\241\250.png" new file mode 100644 index 0000000000000000000000000000000000000000..94c9b65719050b79d2cdb9d1e8f67c459925cda7 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\273\204\347\256\241\347\220\206\345\210\227\350\241\250.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\274\226\350\276\221\347\225\214\351\235\242.png" "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\274\226\350\276\221\347\225\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..7e4f0da4e88da6f18495a4fb23bd400d0da0a8da Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\347\274\226\350\276\221\347\225\214\351\235\242.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\350\257\246\346\203\205.png" "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\350\257\246\346\203\205.png" new file mode 100644 index 0000000000000000000000000000000000000000..1ee8f7bb2456efe6318074f46f5008da355a2cb1 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\344\270\273\346\234\272\350\257\246\346\203\205.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\345\267\245\344\275\234\345\217\260.png" "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\345\267\245\344\275\234\345\217\260.png" new file mode 100644 index 0000000000000000000000000000000000000000..a916eebf306cca9ffa54f733143a0ac2c44313a4 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\345\267\245\344\275\234\345\217\260.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\211\271\351\207\217\346\267\273\345\212\240-\346\226\207\344\273\266\350\247\243\346\236\220.png" "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\211\271\351\207\217\346\267\273\345\212\240-\346\226\207\344\273\266\350\247\243\346\236\220.png" new file mode 100644 index 0000000000000000000000000000000000000000..31684136510cfe6248adf9b8cd086140ab5b26ef Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\211\271\351\207\217\346\267\273\345\212\240-\346\226\207\344\273\266\350\247\243\346\236\220.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\211\271\351\207\217\346\267\273\345\212\240-\346\267\273\345\212\240\347\273\223\346\236\234.png" "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\211\271\351\207\217\346\267\273\345\212\240-\346\267\273\345\212\240\347\273\223\346\236\234.png" new file mode 100644 index 0000000000000000000000000000000000000000..df3991eb16d32d9f2296fbb36873ff26bc82fa18 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\211\271\351\207\217\346\267\273\345\212\240-\346\267\273\345\212\240\347\273\223\346\236\234.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\211\271\351\207\217\346\267\273\345\212\240\344\270\273\346\234\272.png" "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\211\271\351\207\217\346\267\273\345\212\240\344\270\273\346\234\272.png" new file mode 100644 index 0000000000000000000000000000000000000000..c83daeeb5f8a4d9ab4f40e3debbe7a96f427ce74 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\211\271\351\207\217\346\267\273\345\212\240\344\270\273\346\234\272.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\214\207\346\240\207\346\263\242\345\275\242.png" "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\214\207\346\240\207\346\263\242\345\275\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..5ab697c8f9c292097356a26140750f7f615c5d81 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\214\207\346\240\207\346\263\242\345\275\242.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\217\222\344\273\266\345\274\200\345\205\263.png" "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\217\222\344\273\266\345\274\200\345\205\263.png" new file mode 100644 index 0000000000000000000000000000000000000000..4bde1fd7330491fda6f4ed73a2be2e8c0bfabc8d Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\217\222\344\273\266\345\274\200\345\205\263.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\267\273\345\212\240\344\270\273\346\234\272\347\273\204.png" "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\267\273\345\212\240\344\270\273\346\234\272\347\273\204.png" new file mode 100644 index 0000000000000000000000000000000000000000..2890e4934ba903324ea134d3ebee85307665270e Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\346\267\273\345\212\240\344\270\273\346\234\272\347\273\204.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\347\231\273\351\231\206\347\225\214\351\235\242.png" "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\347\231\273\351\231\206\347\225\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..24f94c0a9ff05897b01786aa4bc8adfe4bc8db09 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\350\265\204\344\272\247\347\256\241\347\220\206/\347\231\273\351\231\206\347\225\214\351\235\242.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/chakanyuqi.png" "b/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/chakanyuqi.png" new file mode 100644 index 0000000000000000000000000000000000000000..bbead6a91468d5dee570cfdc66faf9a4ab155d7c Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/chakanyuqi.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/chaxunshijipeizhi.png" "b/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/chaxunshijipeizhi.png" new file mode 100644 index 0000000000000000000000000000000000000000..d5f6e450fc0e1e246492ca71a6fcd8db572eb469 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/chaxunshijipeizhi.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/chuangjianyewuyu.png" "b/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/chuangjianyewuyu.png" new file mode 100644 index 0000000000000000000000000000000000000000..8849a2fc81dbd14328c6c66c53033164a0b67b52 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/chuangjianyewuyu.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/conf_file_trace.png" "b/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/conf_file_trace.png" new file mode 100644 index 0000000000000000000000000000000000000000..e1e518157f8def332adfa5516b37fdb89768499c Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/conf_file_trace.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/peizhitongbu.png" "b/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/peizhitongbu.png" new file mode 100644 index 0000000000000000000000000000000000000000..c8c229bf41b27f1fe6629106957fd5e47851096d Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/peizhitongbu.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/shanchupeizhi.png" "b/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/shanchupeizhi.png" new file mode 100644 index 0000000000000000000000000000000000000000..cfea2eb44f7b8aa809404b8b49b4bd2e24172568 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/shanchupeizhi.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/tianjianode.png" "b/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/tianjianode.png" new file mode 100644 index 0000000000000000000000000000000000000000..d68f5e12a62548f2ec59374bda9ab07f43b8b5cb Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/tianjianode.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/xinzengpeizhi.png" "b/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/xinzengpeizhi.png" new file mode 100644 index 0000000000000000000000000000000000000000..18d71c2e099c19b5d28848eec6a8d11f29ccee27 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/xinzengpeizhi.png" differ diff --git "a/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/zhuangtaichaxun.png" "b/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/zhuangtaichaxun.png" new file mode 100644 index 0000000000000000000000000000000000000000..a3d0b3294bf6e0eeec50a2c2f8c5059bdc256376 Binary files /dev/null and "b/docs/en/server/maintenance/aops/figures/\351\205\215\347\275\256\346\272\257\346\272\220/zhuangtaichaxun.png" differ diff --git a/docs/en/server/maintenance/aops/image/45515A7F-0EC2-45AA-9B58-AB92DE9B0979.png b/docs/en/server/maintenance/aops/image/45515A7F-0EC2-45AA-9B58-AB92DE9B0979.png new file mode 100644 index 0000000000000000000000000000000000000000..c810b26ad0c052960dfdf4bfd78e9224ce465318 Binary files /dev/null and b/docs/en/server/maintenance/aops/image/45515A7F-0EC2-45AA-9B58-AB92DE9B0979.png differ diff --git "a/docs/en/server/maintenance/aops/image/ACC\347\232\204hotpatchmetadata\346\226\207\344\273\266\347\244\272\344\276\213.png" "b/docs/en/server/maintenance/aops/image/ACC\347\232\204hotpatchmetadata\346\226\207\344\273\266\347\244\272\344\276\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..790df6fd5781ca008124cff14635165a71abf126 Binary files /dev/null and "b/docs/en/server/maintenance/aops/image/ACC\347\232\204hotpatchmetadata\346\226\207\344\273\266\347\244\272\344\276\213.png" differ diff --git a/docs/en/server/maintenance/aops/image/E574E637-0BF3-4F3B-BAE6-04ECBD09D151.png b/docs/en/server/maintenance/aops/image/E574E637-0BF3-4F3B-BAE6-04ECBD09D151.png new file mode 100644 index 0000000000000000000000000000000000000000..6ef6ef9bd126e6c2007389065bbecc1cfdd97f5b Binary files /dev/null and b/docs/en/server/maintenance/aops/image/E574E637-0BF3-4F3B-BAE6-04ECBD09D151.png differ diff --git a/docs/en/server/maintenance/aops/image/EF5E0132-6E5C-4DD1-8CB5-73035278E233.png b/docs/en/server/maintenance/aops/image/EF5E0132-6E5C-4DD1-8CB5-73035278E233.png new file mode 100644 index 0000000000000000000000000000000000000000..a2a29d2e1b62f7df409e87d03f2525ba8355f77e Binary files /dev/null and b/docs/en/server/maintenance/aops/image/EF5E0132-6E5C-4DD1-8CB5-73035278E233.png differ diff --git a/docs/en/server/maintenance/aops/image/hotpatch-fix-pr.png b/docs/en/server/maintenance/aops/image/hotpatch-fix-pr.png new file mode 100644 index 0000000000000000000000000000000000000000..d10fd1ec44416f6b59cfd21cca8721d001f7ed19 Binary files /dev/null and b/docs/en/server/maintenance/aops/image/hotpatch-fix-pr.png differ diff --git a/docs/en/server/maintenance/aops/image/hotpatch-pr-1.png b/docs/en/server/maintenance/aops/image/hotpatch-pr-1.png new file mode 100644 index 0000000000000000000000000000000000000000..1dc5269655c51b355d3cd89b71c6688fbb0d8d5d Binary files /dev/null and b/docs/en/server/maintenance/aops/image/hotpatch-pr-1.png differ diff --git a/docs/en/server/maintenance/aops/image/hotpatch-pr-success.png b/docs/en/server/maintenance/aops/image/hotpatch-pr-success.png new file mode 100644 index 0000000000000000000000000000000000000000..48ea807e03c0f8e6efbceacbbc583c6ac3b3c865 Binary files /dev/null and b/docs/en/server/maintenance/aops/image/hotpatch-pr-success.png differ diff --git a/docs/en/server/maintenance/aops/image/hotpatch-pr.png b/docs/en/server/maintenance/aops/image/hotpatch-pr.png new file mode 100644 index 0000000000000000000000000000000000000000..159fd2b7bc76e002554722d1f0f12070a2bd2e19 Binary files /dev/null and b/docs/en/server/maintenance/aops/image/hotpatch-pr.png differ diff --git a/docs/en/server/maintenance/aops/image/hotpatch-xml.PNG b/docs/en/server/maintenance/aops/image/hotpatch-xml.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f1916620d3cc7b1c29059bcc5513fdc7ee94127b Binary files /dev/null and b/docs/en/server/maintenance/aops/image/hotpatch-xml.PNG differ diff --git a/docs/en/server/maintenance/aops/image/image-20230525193235084.png b/docs/en/server/maintenance/aops/image/image-20230525193235084.png new file mode 100644 index 0000000000000000000000000000000000000000..9850a11a0dcfeed69099635f3147a2230fe6faa5 Binary files /dev/null and b/docs/en/server/maintenance/aops/image/image-20230525193235084.png differ diff --git a/docs/en/server/maintenance/aops/image/image-20230525193254541.png b/docs/en/server/maintenance/aops/image/image-20230525193254541.png new file mode 100644 index 0000000000000000000000000000000000000000..73bfbaa15a2584611ac06839965eca2869b89991 Binary files /dev/null and b/docs/en/server/maintenance/aops/image/image-20230525193254541.png differ diff --git a/docs/en/server/maintenance/aops/image/image-20230527165206707.png b/docs/en/server/maintenance/aops/image/image-20230527165206707.png new file mode 100644 index 0000000000000000000000000000000000000000..7d7f0992fc048777340678974d38b3c193269385 Binary files /dev/null and b/docs/en/server/maintenance/aops/image/image-20230527165206707.png differ diff --git a/docs/en/server/maintenance/aops/image/image-20230527165700642.png b/docs/en/server/maintenance/aops/image/image-20230527165700642.png new file mode 100644 index 0000000000000000000000000000000000000000..2c4500cb54ba0225704020160d72b4aaf265d3f7 Binary files /dev/null and b/docs/en/server/maintenance/aops/image/image-20230527165700642.png differ diff --git a/docs/en/server/maintenance/aops/image/image-20230527165823568.png b/docs/en/server/maintenance/aops/image/image-20230527165823568.png new file mode 100644 index 0000000000000000000000000000000000000000..7b26b545bc7d37f09eca7736f30d2eb3a6062890 Binary files /dev/null and b/docs/en/server/maintenance/aops/image/image-20230527165823568.png differ diff --git a/docs/en/server/maintenance/aops/image/image-20230527165845170.png b/docs/en/server/maintenance/aops/image/image-20230527165845170.png new file mode 100644 index 0000000000000000000000000000000000000000..9719210a961a18b639d56cbf88b8586370930b4c Binary files /dev/null and b/docs/en/server/maintenance/aops/image/image-20230527165845170.png differ diff --git a/docs/en/server/maintenance/aops/image/image-20230527165922876.png b/docs/en/server/maintenance/aops/image/image-20230527165922876.png new file mode 100644 index 0000000000000000000000000000000000000000..56ff3380d12b9c1002881eca98e32a49cc292b9a Binary files /dev/null and b/docs/en/server/maintenance/aops/image/image-20230527165922876.png differ diff --git a/docs/en/server/maintenance/aops/image/image-20230527170343909.png b/docs/en/server/maintenance/aops/image/image-20230527170343909.png new file mode 100644 index 0000000000000000000000000000000000000000..57c343360f278b2f67b77d37114a1f567a3ce63a Binary files /dev/null and b/docs/en/server/maintenance/aops/image/image-20230527170343909.png differ diff --git a/docs/en/server/maintenance/aops/image/image-20230607161425282.png b/docs/en/server/maintenance/aops/image/image-20230607161425282.png new file mode 100644 index 0000000000000000000000000000000000000000..d2fbca2a23e80edff661d05065987ede1cc7e8af Binary files /dev/null and b/docs/en/server/maintenance/aops/image/image-20230607161425282.png differ diff --git a/docs/en/server/maintenance/aops/image/image-20230607163358749.png b/docs/en/server/maintenance/aops/image/image-20230607163358749.png new file mode 100644 index 0000000000000000000000000000000000000000..191c36b65058ce8dea6bb2f1fe10a85b0177f2cf Binary files /dev/null and b/docs/en/server/maintenance/aops/image/image-20230607163358749.png differ diff --git a/docs/en/server/maintenance/aops/image/image-20230607172021782.png b/docs/en/server/maintenance/aops/image/image-20230607172021782.png new file mode 100644 index 0000000000000000000000000000000000000000..d25c3ebfb1aefe5d8f36b0b153afa64efd88dd63 Binary files /dev/null and b/docs/en/server/maintenance/aops/image/image-20230607172021782.png differ diff --git a/docs/en/server/maintenance/aops/image/image-20230612113428096.png b/docs/en/server/maintenance/aops/image/image-20230612113428096.png new file mode 100644 index 0000000000000000000000000000000000000000..48b59b5e6cb4043703de96066c8d67e85eed4f16 Binary files /dev/null and b/docs/en/server/maintenance/aops/image/image-20230612113428096.png differ diff --git a/docs/en/server/maintenance/aops/image/image-20230612113626330.png b/docs/en/server/maintenance/aops/image/image-20230612113626330.png new file mode 100644 index 0000000000000000000000000000000000000000..9d3621022deb02b267c3eb29315a7fe33c1f095e Binary files /dev/null and b/docs/en/server/maintenance/aops/image/image-20230612113626330.png differ diff --git a/docs/en/server/maintenance/aops/image/image-20230908163402743.png b/docs/en/server/maintenance/aops/image/image-20230908163402743.png new file mode 100644 index 0000000000000000000000000000000000000000..c17667178689c6384a039bf0f8025ea7eb360236 Binary files /dev/null and b/docs/en/server/maintenance/aops/image/image-20230908163402743.png differ diff --git a/docs/en/server/maintenance/aops/image/image-20230908163914778.png b/docs/en/server/maintenance/aops/image/image-20230908163914778.png new file mode 100644 index 0000000000000000000000000000000000000000..a06c7e49b32286ceec9ff0e9a08f73a76c179daf Binary files /dev/null and b/docs/en/server/maintenance/aops/image/image-20230908163914778.png differ diff --git a/docs/en/server/maintenance/aops/image/image-20230908164216528.png b/docs/en/server/maintenance/aops/image/image-20230908164216528.png new file mode 100644 index 0000000000000000000000000000000000000000..15fbc694603837095244451d4f5d7e7af70789be Binary files /dev/null and b/docs/en/server/maintenance/aops/image/image-20230908164216528.png differ diff --git "a/docs/en/server/maintenance/aops/image/openEuler\344\273\223\350\257\204\350\256\272.png" "b/docs/en/server/maintenance/aops/image/openEuler\344\273\223\350\257\204\350\256\272.png" new file mode 100644 index 0000000000000000000000000000000000000000..29223cbddc39f8fcc0b725a3ed83495709e05f78 Binary files /dev/null and "b/docs/en/server/maintenance/aops/image/openEuler\344\273\223\350\257\204\350\256\272.png" differ diff --git a/docs/en/server/maintenance/aops/image/patch-file.PNG b/docs/en/server/maintenance/aops/image/patch-file.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f587a48c2be945beaadecf44a6d711da14be50c6 Binary files /dev/null and b/docs/en/server/maintenance/aops/image/patch-file.PNG differ diff --git "a/docs/en/server/maintenance/aops/image/src-openEuler\344\273\223\350\257\204\350\256\272.png" "b/docs/en/server/maintenance/aops/image/src-openEuler\344\273\223\350\257\204\350\256\272.png" new file mode 100644 index 0000000000000000000000000000000000000000..ba3a44433117f0a23fc6048cd3b093fe6af7250c Binary files /dev/null and "b/docs/en/server/maintenance/aops/image/src-openEuler\344\273\223\350\257\204\350\256\272.png" differ diff --git "a/docs/en/server/maintenance/aops/image/\345\220\214\346\204\217\345\220\210\345\205\245pr.png" "b/docs/en/server/maintenance/aops/image/\345\220\214\346\204\217\345\220\210\345\205\245pr.png" new file mode 100644 index 0000000000000000000000000000000000000000..2c2e2dd78242f538c21809614e917bef769256ba Binary files /dev/null and "b/docs/en/server/maintenance/aops/image/\345\220\214\346\204\217\345\220\210\345\205\245pr.png" differ diff --git "a/docs/en/server/maintenance/aops/image/\345\220\257\345\212\250\347\203\255\350\241\245\344\270\201\345\267\245\347\250\213\346\265\201\347\250\213.png" "b/docs/en/server/maintenance/aops/image/\345\220\257\345\212\250\347\203\255\350\241\245\344\270\201\345\267\245\347\250\213\346\265\201\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..2914c3eef44bb3d3528686b44157a5f9276da9c6 Binary files /dev/null and "b/docs/en/server/maintenance/aops/image/\345\220\257\345\212\250\347\203\255\350\241\245\344\270\201\345\267\245\347\250\213\346\265\201\347\250\213.png" differ diff --git "a/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201issue\345\210\235\345\247\213\345\206\205\345\256\271.png" "b/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201issue\345\210\235\345\247\213\345\206\205\345\256\271.png" new file mode 100644 index 0000000000000000000000000000000000000000..044be7ccd001ddc2bb69ba53b34f3c2a72511f39 Binary files /dev/null and "b/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201issue\345\210\235\345\247\213\345\206\205\345\256\271.png" differ diff --git "a/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201issue\345\233\236\345\241\253.png" "b/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201issue\345\233\236\345\241\253.png" new file mode 100644 index 0000000000000000000000000000000000000000..779c2fddcb02968358492e70f6aa9261be26fe48 Binary files /dev/null and "b/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201issue\345\233\236\345\241\253.png" differ diff --git "a/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201issue\351\223\276\346\216\245\345\222\214pr\351\223\276\346\216\245.png" "b/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201issue\351\223\276\346\216\245\345\222\214pr\351\223\276\346\216\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..d97fbd1fbb5a20b97ec88989f3c7a0776bb9cdc0 Binary files /dev/null and "b/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201issue\351\223\276\346\216\245\345\222\214pr\351\223\276\346\216\245.png" differ diff --git "a/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201pr\345\210\266\344\275\234\345\244\261\350\264\245.png" "b/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201pr\345\210\266\344\275\234\345\244\261\350\264\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..3acf2e93550e4962d0a5f927fd6fd0460a64b889 Binary files /dev/null and "b/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201pr\345\210\266\344\275\234\345\244\261\350\264\245.png" differ diff --git "a/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201pr\345\210\266\344\275\234\347\273\223\346\236\234.png" "b/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201pr\345\210\266\344\275\234\347\273\223\346\236\234.png" new file mode 100644 index 0000000000000000000000000000000000000000..5b167be8a40762823223ccdd700d5b62f7e1aa38 Binary files /dev/null and "b/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201pr\345\210\266\344\275\234\347\273\223\346\236\234.png" differ diff --git "a/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201pr\347\232\204chroot\347\216\257\345\242\203.png" "b/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201pr\347\232\204chroot\347\216\257\345\242\203.png" new file mode 100644 index 0000000000000000000000000000000000000000..a96a4d229b54b301bbf4e7f7a2c41ea1e9faf43d Binary files /dev/null and "b/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201pr\347\232\204chroot\347\216\257\345\242\203.png" differ diff --git "a/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201pr\350\247\246\345\217\221\346\265\201\347\250\213.png" "b/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201pr\350\247\246\345\217\221\346\265\201\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..d77335d0097f7504f0c37dd8aca1691d9f1f0a23 Binary files /dev/null and "b/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201pr\350\247\246\345\217\221\346\265\201\347\250\213.png" differ diff --git "a/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201\344\273\223\346\217\220pr\350\257\264\346\230\216.png" "b/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201\344\273\223\346\217\220pr\350\257\264\346\230\216.png" new file mode 100644 index 0000000000000000000000000000000000000000..aa74c2859588ff2a49d6341dd2a2ac6fe2049eac Binary files /dev/null and "b/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201\344\273\223\346\217\220pr\350\257\264\346\230\216.png" differ diff --git "a/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201\350\207\252\351\252\214\344\270\213\350\275\275\351\223\276\346\216\245.png" "b/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201\350\207\252\351\252\214\344\270\213\350\275\275\351\223\276\346\216\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..404ac733fae66bda9ceac2d6c2fa18897c58dc70 Binary files /dev/null and "b/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201\350\207\252\351\252\214\344\270\213\350\275\275\351\223\276\346\216\245.png" differ diff --git "a/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201\350\207\252\351\252\214\345\214\205\344\270\213\350\275\275\351\223\276\346\216\245.png" "b/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201\350\207\252\351\252\214\345\214\205\344\270\213\350\275\275\351\223\276\346\216\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..6d32e8874e8e5e7f7fb5c350fca0063da9a77176 Binary files /dev/null and "b/docs/en/server/maintenance/aops/image/\347\203\255\350\241\245\344\270\201\350\207\252\351\252\214\345\214\205\344\270\213\350\275\275\351\223\276\346\216\245.png" differ diff --git a/docs/en/server/maintenance/aops/quick_deployment_of_aops.md b/docs/en/server/maintenance/aops/quick_deployment_of_aops.md new file mode 100644 index 0000000000000000000000000000000000000000..0c87a366b2fa87fe91bab6e86e450ee1a4a4efd1 --- /dev/null +++ b/docs/en/server/maintenance/aops/quick_deployment_of_aops.md @@ -0,0 +1,102 @@ +# One-Click Deployment of A-Ops + +One-click deployment of A-Ops is based on Docker and docker-compose to simply deployment and implement one-click start and stop. + +## Environment Requirements + +You are advised to use two or more machines with 8 GB or more memory running openEuler 22.03 LTS SP1 or later. Assume that the machines are host A and B. + +- MySQL, Elasticsearch, Kafka, Redis, and Prometheus are deployed on host A, which provides data services. +- The A-Ops server and A-Ops frontend are deployed on host B to provide service functions as well as display and operations. + +| Host | IP Address | Services | +| -------- | ----------- | -------------------------------------------- | +| Host A | 192.168.1.1 | MySQL, Elasticsearch, Redis, Kafka, Prometheus | +| Host B | 192.168.1.2 | aops-zeus, aops-diana, aops-apollo, aops-hermes | + +## Environment Configuration + +### Disabling the Firewall on Host A + +```shell +systemctl stop firewalld +systemctl disable firewalld +systemctl status firewalld +``` + +### Installing Docker and docker-compose + +```shell +dnf install docker docker-compose +# Set Docker to start upon system startup. +systemctl enable docker +``` + +### Installing aops-vulcanus and aops-tools + +```shell +dnf install aops-vulcanus aops-tools +``` + +### Perform One-Click Deployment + +- Execute the deployment script. + +```shell +cd /opt/aops/scripts/deploy/container +# Execute run.sh. +bash run.sh +``` + +> Enter the interactive CLI. +> +> ```console +> 1. Build the docker container (build). +> 2. Start the container orchestration service (start-service/start-env). +> 3. Stop all container services (stop-service/stop-env). +> run.sh: line 74: read: `Enter to exit the operation (Q/q).': not a valid identifier +> Select an operation procedure to continue: +> +> ``` +> +> **build**: Deployment of basic services (such as MySQL and Kafka) does not need the build operation. +> +> **start-service**: Start the service and frontend of A-Ops. +> +> **start-env**: Start basic service including MySQL, Redis, and Kafka. +> +> **stop-service**: Stop the service and frontend of A-Ops. +> +> **stop-env**: Stop basic services. The data is retained. +> +> **Q/q**: Exit the interactive CLI. + +- Deploy the A-Ops server. + +```shell +# Execute the deployment script on host B. +cd /opt/aops/scripts/deploy/container +bash run.sh +# Run start-service in the interactive CLI. +``` + +- Modify service configuration files. + +> **Note: If the A-Ops service and basic services are deployed on the same host, you do not need to modify the configuration files. In this example, set the IP addresses for connecting to basic services to the IP address of host A in all configuration files.** +> +> **Password-free mode is used in the default MySQL connection string. The MySQL basic service is configured with the default password "123456". Change the configurations as required.** + +```shell +# Modify the IP addresses for connecting to mysql, elasticsearch, kafka, and redis in apollo.ini, diana.ini, and zeus.ini. +cd /etc/aops/ +``` + +- **FAQ** + +**1. The Elasticsearch basic service cannot be started normally.** + +Check whether the permission on the **/opt/es** directory is **777**. You can run `chmod -R 777 /opt/es` to modify the permission. + +**2. The Prometheus basic service cannot be started normally.** + +Check whether the configuration file **prometheus.yml** exists in **/etc/prometheus**. If not, create it. diff --git a/docs/en/server/maintenance/aops/translation_note.txt b/docs/en/server/maintenance/aops/translation_note.txt new file mode 100644 index 0000000000000000000000000000000000000000..e506ef2624422e63fcd081d6021b85b403953d73 --- /dev/null +++ b/docs/en/server/maintenance/aops/translation_note.txt @@ -0,0 +1 @@ +As of Jan 2024, A-Ops does not provide English UI. The documents are not scheduled for translation. \ No newline at end of file diff --git a/docs/en/server/maintenance/common_skills/_toc.yaml b/docs/en/server/maintenance/common_skills/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3abd8afdd0e4ebd79edc0799cd41371c5acb1d7c --- /dev/null +++ b/docs/en/server/maintenance/common_skills/_toc.yaml @@ -0,0 +1,8 @@ +label: Common Skills +isManual: true +description: Common configurations and commands for O&M +sections: + - label: Information Collection + href: ./information_collection.md + - label: Common Configurations + href: ./common_configurations.md diff --git a/docs/en/server/maintenance/common_skills/common_configurations.md b/docs/en/server/maintenance/common_skills/common_configurations.md new file mode 100644 index 0000000000000000000000000000000000000000..9422d96aa445b3051444c24022fd294094d813a4 --- /dev/null +++ b/docs/en/server/maintenance/common_skills/common_configurations.md @@ -0,0 +1,562 @@ +# Common Skills + +## Configuring the Network + +1. Configure the IP address. + + Run the **ip** command to configure an address for the interface. **interface-name** indicates the name of the NIC. + + ```shell + ip addr [ add | del ] address dev interface-name + ``` + +2. Configure a static IP address. + + ```shell + $ Configure the static IP address. + ip address add 192.168.0.10/24 dev enp3s0 + + # Run the following command as the root user to query the configuration result: + ip addr show dev enp3s0 + + # The result is as follows: + 2: enp3s0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 + link/ether 52:54:00:aa:ad:4a brd ff:ff:ff:ff:ff:ff + inet 192.168.202.248/16 brd 192.168.255.255 scope global dynamic noprefixroute enp3s0 + valid_lft 9547sec preferred_lft 9547sec + inet 192.168.0.10/24 scope global enp3s0 + valid_lft forever preferred_lft forever + inet6 fe80::32e8:cc22:9db2:f4d4/64 scope link noprefixroute + valid_lft forever preferred_lft forever + ``` + +3. Configure a static route. + + Run the **ip route add** command to add a static route to the routing table and run the **ip route del** command to delete a static route. The common format of the **ip route** command is as follows: + + ```shell + ip route [ add | del | change | append | replace ] destination-address + ``` + + - To add a static route to the host address, run the following command as the **root** user: + + ```shell + ip route add 192.168.2.1 via 10.0.0.1 [dev interface-name] + ``` + + - To add a static route to the network, run the following command as the **root** user: + + ```shell + ip route add 192.168.2.0/24 via 10.0.0.1 [dev interface-name] + ``` + +4. Configure the network using the ifcfg file. + + Modify the **ifcfg-enp4s0** file generated in the **/etc/sysconfig/network-scripts/ directory** as the **root** user. The following is an example: + + ```text + TYPE=Ethernet + PROXY_METHOD=none + BROWSER_ONLY=no + BOOTPROTO=none + IPADDR=192.168.0.10 + PREFIX=24 + DEFROUTE=yes + IPV4_FAILURE_FATAL=no + IPV6INIT=yes + IPV6_AUTOCONF=yes + IPV6_DEFROUTE=yes + IPV6_FAILURE_FATAL=no + IPV6_ADDR_GEN_MODE=stable-privacy + NAME=enp4s0static + UUID=xx + DEVICE=enp4s0 + ONBOOT=yes + ``` + +## Managing RPM Packages + +The full name of RPM is RPM Package Manager, which is intended to manage Red Hat software packages. It is used in mainstream distributions such as openEuler, Fedora, Red Hat, Mandriva, SUSE and YellowDog, and distributions developed based on these distributions. + +RPM installs the required software to a set of management programs on the Linux host in database record mode. The software to be installed is compiled and packaged, and the default database record in the packaged software records the dependencies required for the software installation. When a user installs the software on a Linux host, RPM checks whether the dependencies on the Linux host meets the requirements based on the data recorded in it. + +- If yes, install the software. +- If no, do not install the software. + +During the installation, all software information is written into the RPM database for subsequent query, verification, and uninstallation. + +![en-us_other_0000001337581224](./images/en-us_other_0000001337581224.jpeg) + +1. Default installation path of the RPM packages + + Generally, RPM uses the default installation path. (The default installation path can be queried by running a command and will be described in detail in subsequent sections.) All installation files are distributed to the directories listed in the following table by type. + + Table 1 RPM installation paths and their meanings + + |Installation Path|Description| + |--|--| + |/etc/|Configuration file installation directory| + |/usr/bin/|Installation directory of the executable commands| + |/usr/lib/|Path for storing the function library used by the program| + |/usr/share/doc|Location where the basic software user manual is saved| + |/usr/share/man/|Path for saving the help file| + + Note: You can manually specify the installation path of RPM, but this method is not recommended. After the installation path is manually specified, all installation files are installed in the specified path, and the command for querying the installation path in the system cannot be used. The command can be identified by the system only after being manually configured. + +2. rpm command options + + - **Checking the RPM Signature of the Software Package** + + Before installing the RPM package on a Linux host, check the GPG signature. After ensuring that the signature integrity and source are correct, run the **rpm --checksig** command to verify the validity: + + ```shell + rpm --checksig nano-2.3.1-10.el7.x86_64.rpm + ``` + + - **Installing RPM Packages** + + To install RPM packages in Linux, use the **-i** option in the **rpm** command. + + ```shell + rpm -ivh nano-2.3.1-10.el7.x86_64.rpm + ``` + + - **-i**: installs the software package. + - **-v**: displays detailed information. + - **-h**: lists flags during suite installation. + + - **Querying an Installed RPM Package** + + To query an RPM package (dnf) installed in the Linux system, use the **-q** option in the **rpm** command. + + ```shell + rpm -q dnf + ``` + + - **-q**: query operation + + If the specified package is not installed, the following error message is displayed: + + ```text + package dnf is not installed + ``` + + - **Querying All Installed RPM Packages** + + To query all RPM packages installed in Linux, use the **-qa** option in the **rpm** command. + + ```shell + $ rpm -qa + dracut-config-rescue-055-7.oe2203SP3.x86_64 + parted-3.5-1.oe2203SP3.x86_64 + irqbalance-1.8.0-9.oe2203SP3.x86_64 + ...... + ``` + + Note: When using the **-qa** option, use the pipe character (|) together to improve the search accuracy. + + - **Querying Details About an Installed RPM Package** + + Use the **-qi** option in the **rpm** command to query the details of an RPM package installed in the system. + + ```shell + $ rpm -qi python3 + Name : python3 + Version : 3.9.9 + Release : 24.oe2203SP3 + Architecture: x86_64 + Install Date: Wed 05 Jul 2023 08:30:23 PM CST + Group : Unspecified + Size : 35916839 + License : Python-2.0 + Signature : RSA/SHA1, Wed 28 Jun 2023 01:11:59 PM CST, Key ID d557065eb25e7f66 + Source RPM : python3-3.9.9-24.oe2203SP3.x86_64.rpm + Build Date : Wed 28 Jun 2023 01:11:59 PM CST + Build Host : obs-worker1639015616-x86-0001 + Packager : http://openeuler.org + Vendor : http://openeuler.org + URL : https://www.python.org/ + Summary : Interpreter of the Python3 programming language + Description : + Python combines remarkable power with very clear syntax. It has modules, + classes, exceptions, very high level dynamic data types, and dynamic + typing. There are interfaces to many system calls and libraries, as well + as to various windowing systems. New built-in modules are easily written + in C or C++ (or other languages, depending on the chosen implementation). + Python is also usable as an extension language for applications written + in other languages that need easy-to-use scripting or automation interfaces. + + This package Provides python version 3. + ``` + + - **Querying All Files in an RPM Package** + + To query the file list of an RPM package that is not installed, use the **-qlp** option in the **rpm** command. + + ```shell + $ rpm -qlp pkgship-2.2.0-10.oe2203SP3.noarch.rpm + /etc/ima/digest_lists.tlv/0-metadata_list-compact_tlv-pkgship-2.2.0-10.oe2203SP3.noarch + /etc/ima/digest_lists/0-metadata_list-compact-pkgship-2.2.0-10.oe2203SP3.noarch + /etc/pkgship/auto_install_pkgship_requires.sh + /etc/pkgship/conf.yaml + /etc/pkgship/package.ini + ...... + ``` + + - **Querying RPM Package Dependencies** + + To query the list of dependency packages compiled by a specified RPM package that is not installed, use the **-qRp** option in the **rpm** command. + + ```shell + $ rpm -qRp pkgship-2.2.0-10.oe2203SP3.noarch.rpm + /bin/bash + /bin/sh + /usr/bin/python3 + config(pkgship) = 2.2.0-10.oe2203SP3 + python3 + python3-Flask-Limiter + ...... + ``` + + - **Verifying All Installed RPM Packages** + + To verify an installed RPM package, use the **-Va** option in the **rpm** command to compare the information about the files installed in the package with the information about the files obtained from the package metadata stored in the RPM database. + + ```shell + $ rpm -Va + S.5....T. c /root/.bashrc + .......T. c /etc/yum.repos.d/openEuler.repo + S.5....T. c /etc/issue + S.5....T. c /etc/issue.net + S.5....T. c /etc/csh.login + S.5....T. c /etc/profile + .M....G.. g /var/log/lastlog + .M....... c /boot/grub2/grubenv + ...... + ``` + + Table 2 Output fields of the **rpm -Va** command and their meanings + + |Field|Description| + |--|--| + |S|The file length changes.| + |M|The access permission or type of a file changes.| + |5|The MD5 checksum changes.| + |D|The attributes of a device node change.| + |L|The symbolic link of a file changes.| + |U|The owner of a file, subdirectory, or device node changes.| + |G|The group of a file, subdirectory, or device node changes.| + |T|The last modification time of a file changes.| + + - **Querying the RPM Package of a Specific File** + + To query an RPM package that provides a specific binary file on Linux, use the **-qf** option in the **rpm** command. + + ```shell + $ rpm -qf /usr/share/doc/pkgship + pkgship-2.2.0-10.oe2203SP3.noarch.rpm + ``` + + - **Querying Files in an Installed RPM Package** + + To query the list of installation files of an RPM package, use the **-ql** option in the **rpm** command. + + ```shell + $ rpm -ql dnf + /etc/bash_completion.d/dnf + /etc/ima/digest_lists.tlv/0-metadata_list-compact_tlv-dnf-4.14.0-14.oe2203SP3.noarch + /etc/ima/digest_lists/0-metadata_list-compact-dnf-dnf-4.14.0-14.oe2203SP3.noarch + /usr/bin/dnf + /usr/lib/systemd/system/dnf-makecache.service + /usr/lib/systemd/system/dnf-makecache.timer + /usr/share/doc/dnf + /usr/share/doc/dnf/AUTHORS + /usr/share/doc/dnf/README.rst + /usr/share/licenses/dnf + /usr/share/licenses/dnf/COPYING + /usr/share/licenses/dnf/PACKAGE-LICENSING + /var/cache/dnf + ``` + + - **Querying the Recently Installed RPM Packages** + + Linux is a multi-user OS. During the use of Linux, other users may have installed some software packages. To query the recently installed packages in the system, use the **-qa --last** options in the **rpm** command. + + ```shell + $ rpm -qa --last + ntp-4.2.8p15-11.oe2203SP3.x86_64 + ntpstat-0.6-4.oe2203SP3.noarch + ntp-help-4.2.8p15-11.oe2203SP3.noarch + ``` + + - **Querying Only the Documents of the Installed RPM Packages** + + You can obtain the help information of any command from the **Linux Man** page (path for storing **/usr/share/doc/Package\_Name-Version\_Number/docs\*** documents). To query the list of documents associated with the installed RPM packages, use the **-qdf** option in the **rpm** command and enter the binary file path. + + ```shell + $ rpm -qdf /usr/bin/grep + /usr/share/doc/grep/NEWS + /usr/share/doc/grep/README + /usr/share/doc/grep/THANKS + /usr/share/doc/grep/TODO + /usr/share/info/grep.info.gz + /usr/share/man/man1/egrep.1.gz + /usr/share/man/man1/fgrep.1.gz + /usr/share/man/man1/grep.1.gz + ``` + + - **Upgrading an Installed RPM Package** + + You can easily upgrade the installed RPM package to the latest version by using the **-Uvh** option and the **rpm** command. + + ```shell + $ rpm -Uvh pkgship-2.2.0-10.oe2203SP3.noarch.rpm + Preparing... ################################# [100%] + ``` + + Note: When the installed RPM package is upgraded, the old RPM package is deleted and the new RPM package is installed. + + - **Removing an Installed RPM Package** + + To remove an RPM package installed on the system, use the **-ev** or **-e** option in the **rpm** command. + + ```shell + rpm -ev pkgship + ``` + + - **Rebuilding the Damaged RPM Database** + + When you try to update the system using the **yum update** command, you may receive an error message indicating that the RPM database is damaged. If you receive this message, use the **--rebuilddb** option in the **rmp** command to rebuild the database. + + ```shell + rm /var/lib/rpm/__db* + rpm --rebuilddb + ``` + + - **Checking Whether Vulnerabilities in Specific Packages Have Been Fixed** + + You can use the **--changelog** option in the **rpm** command and enter the corresponding CVE ID. + + ```shell + rpm -q --changelog python-2.6.6 | grep -i "CVE-2019-9636" + ``` + + - **Importing the RPM GPG Key** + + By default, when a new repository is added to the Linux system, the GPG key is automatically imported. You can also use **--import** in the **rpm** command to manually import the RPM GPG key to check the integrity of a package when downloading it from the repository. + + ```shell + rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-OpenEuler-22.03-LTS-SP4 + ``` + +3. DNF commands + + Table 3 DNF commands + + |Command|Description| + |--|--| + |repolist|Displays the configured software repository source.| + |install|Installs one or more software packages on Linux.| + |upgrade|Upgrades one or more software packages on Linux.| + |list|Lists a software package or a group of software packages.| + |info|Displays detailed information about a package or package group.| + |updateinfo|Displays the bulletin information about a package.| + |search|Searches for the specified character string in the software package details.| + |check-update|Checks for software package update.| + |remove|Removes one or more software packages from the system.| + |reinstall|Reinstalls a package.| + |downgrade|Downgrades a software package.| + |autoremove|Removes all unnecessary software packages that are installed due to dependency relationships.| + |distro-sync|Synchronizes the installed software package to the latest available version.| + |makecache|Creates a metadata cache.| + |repository-package|Runs commands on all software packages in a specified repository.| + |provides|Searches for the software package that provides the specified content.| + |group|Displays or uses group information.| + |history|Displays or uses transaction history.| + |clean|Deletes cached data.| + + - **Displaying Configured Software Repositories** + + By default, the **--enabled** option is added to display the enabled software repositories. + + ```shell + $ dnf repolist --enabled + repo id repo name + EPOL EPOL + OS OS + debuginfo debuginfo + everything everything + pkgship_elasticsearch Elasticsearch repository + source source + update update + ``` + + - **--all**: displays all software repositories. + - **--disabled**: displays disabled software repositories. + - **--enabled**: displays enabled repositories (default). + + Installing One or More Software Packages + + You can run the **install** command to install RPM packages. + + ```shell + dnf install software_package + ``` + + Conflicting packages or packages that cannot be installed may exist during software package installation. You can add **--allowerasing** to the command to replace the conflicting packages or **--skip-broken** to skip the packages that cannot be installed. + + ```shell + dnf install software_package [software_package ...] --allowerasing --skip-broken + ``` + + When dnf is used to install a software package, add **--installroot** to set the root directory for installing the software package. + + ```shell + dnf install software_package --installroot software_package_root_directory + ``` + + If you need to temporarily specify a repository source for installation, you can add the **--setopt=reposdir=** option to specify the loading directory of the repository source. + + ```shell + dnf install software_package --setopt=reposdir=repo_source_directory + ``` + + If interactive confirmation is not required during installation, you can add **-y** or **--assumeyes** to enable all software packages to be installed to automatically answer **Yes**. + + ```shell + dnf install software_package -y + ``` + + To install an RPM package by specifying a specific repository source, you can specify the **--repo** or **--enablerepo** option. To achieve the same effect, you can also use the **--disablerepo** option to disable the matched repository source. You are advised to use the **--repo** option to install the RPM package. + + ```shell + dnf install software_package --repo=repo_source_ + ``` + + - **Reinstalling a Software Package** + + You can run the **reinstall** command to reinstall a software package in the system. + + ```shell + dnf reinstall software_package + ``` + + - **Upgrading One or More Software Packages** + + - You can use the **upgrade** command to upgrade one or more software packages on Linux. + + ```shell + dnf upgrade software_package [software_package ...] + ``` + + - You can also run the **update** command to upgrade one or more software packages. + + ```shell + dnf update software_package [software_package ...] + ``` + + - **Downgrading a Software Package** + + If a compatibility problem occurs because the version of a software package is too late, you can downgrade the software package. + + ```shell + dnf downgrade software_package + ``` + + - **Listing a Package or a Group of Packages** + + You can run the **list** command to list the software packages installed in the system and the software packages in the configured repository. + + ```shell + dnf list + ``` + + You can add options to filter the displayed package list. + + - **--all**: displays all software packages (default). + - **--available**: displays only available software packages. + - **-- installed**: displays only installed software packages. + - **--extras**: displays only additional software packages. + - **--updates**: displays only the software packages to be upgraded. + - -**-upgrades**: displays only the software packages to be upgraded. + - **--autoremove**: displays only the software packages to be removed. + - **--recent**: displays the software packages that have been changed recently. + + - **Querying Details About a Software Package** + + You can run the **info** command to query details about a software package. + + ```shell + dnf info software_package + ``` + + - **Searching for a Software Package** + + If you need to install a software package in the system but you are not sure about the full name of the software package, you can run the **search** command to search for the matched package. + + ```shell + dnf search software_package + ``` + + - **Uninstalling One or More Software Packages** + + You can run the **remove** command to remove an expired or duplicate software package. + + ```shell + dnf remove software_package + ``` + + - **--duplicates**: removes installed (duplicate) software packages. + - **--oldinstallonly**: removes expired installation-only software packages. + + - **Automatically Removing Software Packages Installed Due to Dependency Relationships** + + You can run the **autoremove** command to remove unnecessary software packages that are installed due to dependency relationships. + + ```shell + dnf autoremove software_package + ``` + +## Configuring SSH + +1. Introduction to the SSH service + + Secure Shell (SSH) is a reliable protocol that ensures the security of remote login sessions and other network services. The SSH protocol can effectively prevent information leakage during remote management. SSH encrypts transferred data to prevent domain name server (DNS) spoofing and IP spoofing. OpenSSH was created as an open source alternative to the proprietary SSH protocol. + +2. Configuring the SSH Service + + ```shell + # Open and modify the /etc/ssh/sshd_config file. + vi /etc/ssh/sshd_config + + # Restart the SSH service. + systemctl restart sshd + + # Check the SSH service status. + systemctl status sshd + ``` + +3. Main options in the SSH service configuration file + + ```text + $ Specify the SSH protocol version. + Protocol 2 + + # Allowed users + AllowUsers xxx + + # Denied users + DenyUser root + + # Configure session timeout. + ClientAliveInterval 120 + + # Disable SSH root login. + PermitRootLogin no + + # Configure or change the SSH port number. + Port 1234 + + # Disable SSH password authentication. + PasswordAuthentication no + ``` diff --git a/docs/en/server/maintenance/common_skills/images/c50cb9df64f4659787c810167c89feb4_1884x257.png b/docs/en/server/maintenance/common_skills/images/c50cb9df64f4659787c810167c89feb4_1884x257.png new file mode 100644 index 0000000000000000000000000000000000000000..01081f25627731c56764c196e3fae32d55bc7023 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/c50cb9df64f4659787c810167c89feb4_1884x257.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001321685172.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001321685172.png new file mode 100644 index 0000000000000000000000000000000000000000..acbe1f90720a7cc56dd20d03f00918264680a7db Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001321685172.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001322112990.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001322112990.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4b32bf2b36595abe10f2550cda5714bc355553 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001322112990.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001322219840.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001322219840.png new file mode 100644 index 0000000000000000000000000000000000000000..48b28664df46ddf9aa38c7570bb9e9edb8080ac9 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001322219840.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001322372918.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001322372918.png new file mode 100644 index 0000000000000000000000000000000000000000..5424367c9bc564e713220ba87f963096881833b8 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001322372918.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001322379488.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001322379488.png new file mode 100644 index 0000000000000000000000000000000000000000..8b18cdca066be43b74443498edc5500ea9e1e608 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001322379488.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001335457246.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001335457246.png new file mode 100644 index 0000000000000000000000000000000000000000..325d6a8ce097db0b92b1a883bc4b3d4ad0bc6a49 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001335457246.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337000118.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337000118.png new file mode 100644 index 0000000000000000000000000000000000000000..37131647778506f24be4ff401392a9cc209a36eb Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337000118.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337039920.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337039920.png new file mode 100644 index 0000000000000000000000000000000000000000..40c07e9b6ec27cdbe47d39788736b892f1174cc8 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337039920.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337053248.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337053248.png new file mode 100644 index 0000000000000000000000000000000000000000..8859f37749a4f8a4394e24ddfb54fc473e8c10c2 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337053248.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337172594.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337172594.png new file mode 100644 index 0000000000000000000000000000000000000000..4e806f83c57880543a777807778f14eeb0105aba Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337172594.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337260780.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337260780.png new file mode 100644 index 0000000000000000000000000000000000000000..09d521d933f5fa0caacc592ea92acee959786051 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337260780.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337420372.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337420372.png new file mode 100644 index 0000000000000000000000000000000000000000..2300bcd7426748236fd48b85688bd3d1fa3315df Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337420372.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337533690.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337533690.png new file mode 100644 index 0000000000000000000000000000000000000000..1f02d9b155754a113347a54a7d35ba9b060175a8 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337533690.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337536842.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337536842.png new file mode 100644 index 0000000000000000000000000000000000000000..5a9ee2c989638c9a6aad3fcfb35bb9b9f2d4683c Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337536842.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337580216.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337580216.png new file mode 100644 index 0000000000000000000000000000000000000000..5516b8d261b769287c74cf860a6708fcde6bbb8a Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337580216.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337696078.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337696078.png new file mode 100644 index 0000000000000000000000000000000000000000..3864852e345eaf01794042feaa85b012b8af71de Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337696078.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337740252.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337740252.png new file mode 100644 index 0000000000000000000000000000000000000000..fd83fb600a54ab8bc39ee2ae54210be8b6c48973 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337740252.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337740540.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337740540.png new file mode 100644 index 0000000000000000000000000000000000000000..b8e25128a47dccaed733fc192f52f2ca7828e516 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001337740540.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001372249333.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001372249333.png new file mode 100644 index 0000000000000000000000000000000000000000..48cd37225954e212cb3e159acc137866d8edc362 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001372249333.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001372748125.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001372748125.png new file mode 100644 index 0000000000000000000000000000000000000000..5f6326b9415cf766dd8379dbadd5aa1a0dc6861f Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001372748125.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001372821865.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001372821865.png new file mode 100644 index 0000000000000000000000000000000000000000..21e8dad1cd90755440cf858523b12c036a91e1ad Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001372821865.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001372824637.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001372824637.png new file mode 100644 index 0000000000000000000000000000000000000000..aefb5d83c079e6718ef88fd934b4b496cdc29565 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001372824637.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001373373585.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001373373585.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e5e47c9beca2c7c7630d78916f80eda652b52a Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001373373585.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001373379529.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001373379529.png new file mode 100644 index 0000000000000000000000000000000000000000..daa40b49e679668905632f25ff42bf8599ba0ead Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001373379529.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001384808269.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001384808269.png new file mode 100644 index 0000000000000000000000000000000000000000..be18ecef3a149d5742f18535552f66f26ab34832 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001384808269.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001385585749.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001385585749.png new file mode 100644 index 0000000000000000000000000000000000000000..c13604ab7095c2a7717bde1384f0aea3d53f69e3 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001385585749.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001385611905.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001385611905.png new file mode 100644 index 0000000000000000000000000000000000000000..8c233e40a21e678ddf4115c2e2e80c96e25a60ce Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001385611905.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001386699925.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001386699925.png new file mode 100644 index 0000000000000000000000000000000000000000..cf5b13b35e65ed0143a01a5bcad1e11eaddaded7 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001386699925.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387293085.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387293085.png new file mode 100644 index 0000000000000000000000000000000000000000..7f56b020949c53d018eba016952c2409f0d7dca9 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387293085.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387413509.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387413509.png new file mode 100644 index 0000000000000000000000000000000000000000..2245427058fc31f3e5d7f40062c0551936a67199 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387413509.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387413793.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387413793.png new file mode 100644 index 0000000000000000000000000000000000000000..aa649bf7215662819766d897513fb711d9d1e7f8 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387413793.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387415629.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387415629.png new file mode 100644 index 0000000000000000000000000000000000000000..01189358354090591de6580f8ef88ef78ddba3a1 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387415629.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387692269.jpg b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387692269.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b79e3ddf78520277046b933c4662c6b72f45ab85 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387692269.jpg differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387692893.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387692893.png new file mode 100644 index 0000000000000000000000000000000000000000..49ea515d834b58d4ded14c55a6a2b07034d76137 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387692893.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387755969.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387755969.png new file mode 100644 index 0000000000000000000000000000000000000000..b2daa95d6b757e7bd443d8fd961922f248dd6853 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387755969.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387780357.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387780357.png new file mode 100644 index 0000000000000000000000000000000000000000..1aab3b8be2cd0c906253d70036a9fee3050a1055 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387780357.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387855149.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387855149.png new file mode 100644 index 0000000000000000000000000000000000000000..731e957c367cb05e4229f53cf97dcee2cde69dff Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387855149.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387857005.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387857005.png new file mode 100644 index 0000000000000000000000000000000000000000..872f5c9eb05169831df4ba49d017629e8a943c64 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001387857005.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001388020197.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001388020197.png new file mode 100644 index 0000000000000000000000000000000000000000..1816e1e068ee0294677ebb357ffd158a14bb86cf Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001388020197.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001388972645.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001388972645.png new file mode 100644 index 0000000000000000000000000000000000000000..e32606925f4bb4380b262d9f946d4cd106202b87 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001388972645.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_image_0000001389098425.png b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001389098425.png new file mode 100644 index 0000000000000000000000000000000000000000..c63903009ab9ba454f169250632dbec1b3c94467 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_image_0000001389098425.png differ diff --git a/docs/en/server/maintenance/common_skills/images/en-us_other_0000001337581224.jpeg b/docs/en/server/maintenance/common_skills/images/en-us_other_0000001337581224.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2c019b828bdf9c699f203f09ba3542968ff21262 Binary files /dev/null and b/docs/en/server/maintenance/common_skills/images/en-us_other_0000001337581224.jpeg differ diff --git a/docs/en/server/maintenance/common_skills/information_collection.md b/docs/en/server/maintenance/common_skills/information_collection.md new file mode 100644 index 0000000000000000000000000000000000000000..99400bc41529f6d6393aeee339e16b0ddb8afad4 --- /dev/null +++ b/docs/en/server/maintenance/common_skills/information_collection.md @@ -0,0 +1,248 @@ +# Information Collection + +## Querying OS Information + +1. Query the OS version by running either of the following commands. + 1. `cat /etc/openEuler-latest` + Output: + + ```text + openeulerversion=openEuler-22.03-LTS-SP4 + compiletime=2022-12-27-22-15-04 + gccversion=10.3.1-20 + kernelversion=5.10.0-136.12.0.86.oe2203SP3 + openjdkversion=1.8.0.352.b08-3.oe2203SP3 + ``` + + 2. `cat /etc/os-release` + Output: + + ```text + NAME="openEuler" + VERSION="22.03 (LTS-SP4)" + ID="openEuler" + VERSION_ID="22.03" + PRETTY_NAME="openEuler 22.03 (LTS-SP4)" + ANSI_COLOR="0;31" + ``` + + 3. `cat /etc/openEuler-release` + Output: + + ```text + openEuler release 22.03 (LTS-SP4) + ``` + +2. Query the kernel version. + + ```shell + uname -a + ``` + + Output: + + ```text + Linux localhost 5.10.0-136.12.0.86.oe2203SP3.x86_64 #1 SMP Tue Dec 27 17:50:15 CST 2022 x86_64 x86_64 x86_64 GNU/Linux + ``` + +## Querying Hardware Information + +1. Query CPU statistics. + + ```shell + lscpu + ``` + + ![en-us_image_0000001387692269](./images/en-us_image_0000001387692269.jpg) + +2. View CPU parameters. + + ```shell + cat /proc/cpuinfo + ``` + + ![en-us_image_0000001387293085](./images/en-us_image_0000001387293085.png) + +3. View system memory information. + + ```shell + cat /proc/meminfo + ``` + + ![en-us_image_0000001387692893](./images/en-us_image_0000001387692893.png) + +4. View memory information. + + ```shell + dmidecode -t memory + ``` + + ![en-us_image_0000001337053248](./images/en-us_image_0000001337053248.png) + +5. View hard drive and partition distribution. + + ```shell + lsblk + ``` + + ![en-us_image_0000001387413509](./images/en-us_image_0000001387413509.png) + +6. View details about hard drives and partitions. + + ```shell + fdisk -l + ``` + + ![en-us_image_0000001337533690](./images/en-us_image_0000001337533690.png) + +7. View NIC information. + + ```shell + lspci | grep -i 'eth' + ``` + + ![en-us_image_0000001387413793](./images/en-us_image_0000001387413793.png) + +8. View all network interfaces. + + ```shell + ip a or ifconfig -a + ``` + + ![en-us_image_0000001387855149](./images/en-us_image_0000001387855149.png) + +9. View details about a network interface. + + ```shell + ethtool enp7s0 (enp7s0 is used as an example.) + ``` + + ![en-us_image_0000001387415629](./images/en-us_image_0000001387415629.png) + +10. View PCI information. + + ```shell + lspci + ``` + + ![en-us_image_0000001337696078](./images/en-us_image_0000001337696078.png) + +11. View the device tree. + + ```shell + lspci -t + ``` + + ![en-us_image_0000001337536842](./images/en-us_image_0000001337536842.png) + +12. View BIOS information. + + ```shell + dmidecode -t bios + ``` + + ![en-us_image_0000001387857005](./images/en-us_image_0000001387857005.png) + +## Querying Software Information + +1. Query details about a software package. + + ```shell + rpm -qi (systemd is used as an example.) + ``` + + ![en-us_image_0000001387755969](./images/en-us_image_0000001387755969.png) + +2. View the modules provided by a software package. + + ```shell + rpm -q --provides # (systemd is used as an example.) + ``` + + ```text + /bin/systemctl + /sbin/shutdown + config(systemd) = 249-43.oe2203SP3 + libsystemd-shared-249.so()(64bit) + libsystemd-shared-249.so(SD_SHARED)(64bit) + pkgconfig(systemd) = 249 + pkgconfig(udev) = 249 + syslog + system-setup-keyboard = 0.9 + systemd = 249-43.oe2203SP3 + systemd(x86-64) = 249-43.oe2203SP3 + systemd-rpm-config + systemd-sysv = 206 + systemd-units = 249-43.oe2203SP3 + ``` + +3. View all installed software packages. + + ```shell + rpm -qa # (systemd is used as an example.) + ``` + + ```text + systemd-help-249-43.oe2203SP3.noarch + systemd-libs-249-43.oe2203SP3.x86_64 + systemd-249-43.oe2203SP3.x86_64 + systemd-udev-249-43.oe2203SP3.x86_64 + ``` + +4. View the list of software packages. + + ```shell + rpm -ql # (python3-rpm is used as an example.) + ``` + + ![en-us_image_0000001387780357](./images/en-us_image_0000001387780357.png) + +## Viewing OS Logs + +1. View the information and error logs after the system is started. + + ```shell + cat /var/log/messages + ``` + + ![en-us_image_0000001388020197](./images/en-us_image_0000001388020197.png) + +2. View the security-related logs. + + ```shell + cat /var/log/secure + ``` + + ![en-us_image_0000001337580216](./images/en-us_image_0000001337580216.png) + +3. View the email-related logs. + + ```shell + cat /var/log/maillog + ``` + + ![en-us_image_0000001337740252](./images/en-us_image_0000001337740252.png) + +4. View the logs related to scheduled tasks. + + ```shell + cat /var/log/cron + ``` + + ![en-us_image_0000001337420372](./images/en-us_image_0000001337420372.png) + +5. View the logs related to UUCP and news devices. + + ```shell + cat /var/log/spooler + ``` + + ![en-us_image_0000001337260780](./images/en-us_image_0000001337260780.png) + +6. View system startup logs. + + ```shell + cat /var/log/boot.log + ``` + + ![en-us_image_0000001337740540](./images/en-us_image_0000001337740540.png) diff --git a/docs/en/server/maintenance/common_tools/_toc.yaml b/docs/en/server/maintenance/common_tools/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f48edbf0cd1b52b11213535f0d8ef935b8926fb6 --- /dev/null +++ b/docs/en/server/maintenance/common_tools/_toc.yaml @@ -0,0 +1,6 @@ +label: Commonly Used Tools for Location and Demarcation +isManual: true +description: Commonly used tools for location and demarcation, including ftrace, strace, and kdump +sections: + - label: Commonly Used Tools for Location and Demarcation + href: ./commonly_used_tools.md diff --git a/docs/en/server/maintenance/common_tools/commonly_used_tools.md b/docs/en/server/maintenance/common_tools/commonly_used_tools.md new file mode 100644 index 0000000000000000000000000000000000000000..0cb189b9977004fc56d2b4ed0bed2880f0f6c645 --- /dev/null +++ b/docs/en/server/maintenance/common_tools/commonly_used_tools.md @@ -0,0 +1,200 @@ +# Commonly Used Tools + +- [Commonly Used Tools](#commonly-used-tools) + - [ftrace](#ftrace) + - [strace](#strace) + - [kdump](#kdump) + +## ftrace + +1. ftrace: a debug tool for the Linux kernel space. The kernel provides trace events for you to trace . ftrace can capture events so that you can intuitively view these events and trace kernel functions. +2. Configuration and usage of ftrace: To use ftrace, you need to compile its dependencies into the kernel. By default, openEuler compiles the ftrace option. If the ftrace option is not enabled, you can enable it by choosing **Kernel hacking** > **Tracers** > **Trace syscalls** in **menuconfig**. In addition, you need to compile the debugfs by choosing **Kernel hacking** > **Generic Kernel Debugging Instruments** > **Debug Filesystem**. + +- **Configuring the ftrace function** + +ftrace provides access interfaces for user space through the debugfs. After the debugfs is configured in the kernel, the **/sys/kernel/debug** directory is created. The debugfs is mounted to this directory. If the kernel supports ftrace-related configuration items, a **tracing** directory is created in the debugfs. The debugfs is mounted to this directory. The following figure shows the content of this directory. + +![](./images/en-us_image_0000001322372918.png) + +- **Introduction to the ftrace debugfs interface** + + You can view some control and output files provided by ftrace through the debugfs. The common files are described as follows: + + available_tracers: available tracers + + current_tracer: running tracer + + available_events: lists all available trace events in the OS + + events: This directory differentiates events by module. + + set_event: lists the events to be traced. + + tracing_on: enables or disables tracing. echo 0 > tracing_on indicates that tracing is disabled, and 1 indicates that tracing is enabled. + + trace: queries trace data. + +- **Available tracers** + +![en-us_image_0000001373373585](./images/en-us_image_0000001373373585.png) + + function: a function call tracing program that does not require parameters + function_graph: a function call tracer that uses subcalls + +- **Trace events** + +```shell +# Specify the arm_event of the RAS to be traced. +echo ras:arm_event > /sys/kernel/debug/tracing/set_event + +# This file contains the event format and fields to be printed. +cat /sys/kernel/debug/tracing/events/ras/arm_event/format + +# Start tracing. +echo 1 > /sys/kernel/debug/tracing/tracing_on + +# Observe the trace output. +tail -f /sys/kernel/debug/tracing/trace +``` + +![c50cb9df64f4659787c810167c89feb4_1884x257](./images/c50cb9df64f4659787c810167c89feb4_1884x257.png) + +- **Tracing input parameters of kernel functions** + +Trace mmap, which corresponds to the system call **do_mmap**. Output the **addr** input parameter. + +![en-us_image_0000001373379529](./images/en-us_image_0000001373379529.png) + +```shell +# Trace through the kprobe. +echo 'p:probe1 do_mmap addr=%x1' > kprobe_events + +# Enable kprobe. +echo 1 > events/kprobes/probe1/enable + +# Start tracing. +echo 1 > tracing_on + +# View trace data. +``` + +![en-us_image_0000001322379488](./images/en-us_image_0000001322379488.png) + +- **Tracing function calls** + +```shell +# Select a tracing type. +echo function_graph > current_tracer + +# Set the PID of the process to be filtered. +echo set_ftrace_pid + +# Start tracing. +echo 1 > tracing_on + +# View trace data. +``` + +![en-us_image_0000001322219840](./images/en-us_image_0000001322219840.png) + +## strace + +The `strace` command is a diagnosis and debugging tool. You can use the `strace` command to analyze system calls and signal transmission of applications to solve problems or understand the application execution process. + +You can run the `strace -h` command to view the functions provided by strace. + +![en-us_image_0000001322112990](./images/en-us_image_0000001322112990.png) + +The most common usage is to trace the *xx* command, trace the forks, print the time, and output the result to the **output** file. + +```shell +strace -f -tt -o output xx +``` + +## kdump + +1. crash/kdump Principles + + kdump is a snapshot of the memory status of the OS running at a certain time point. It helps O&M personnel debug and analyze the cause of system breakdown. kdump is usually used when system breakdown and panic happen. + + The process is as follows. + + ![en-us_image_0000001321685172](./images/en-us_image_0000001321685172.png) + +2. Installing and configuring related tools + + ```shell + # Use Yum to install the corresponding software package. + yum install kernel-debuginfo-$(uname -r) kexec-tools crash -y + + # Set the reserved memory size for crashkernel. + vim /etc/default/grub + ``` + + ![en-us_image_0000001372821865](./images/en-us_image_0000001372821865.png) + + ```shell + # Regenerate the grub configuration file. + grub2-mkconfig -o /boot/efi/EFI/openEuler/grub.cfg + reboot + + # Start the kdump service. + systemctl start kdump #Start kdump. + systemctl enable kdump #Set the kdump to start upon system startup. + ``` + +3. Triggering a crash + + Operation 1 Retain the default settings of the kernel. When a hard lock or oops occurs, a panic is triggered. + + ![en-us_image_0000001372824637](./images/en-us_image_0000001372824637.png) + + Operation 2 Modify the settings. The following commands cam make the settings take effect only once and become invalid after the system is restarted. + + ```shell + # Set a soft lock to trigger a panic. + echo 1 > /proc/sys/kernel/softlockup_panic + + # Trigger a kernel panic when an out of memory (OOM) error occurs. + echo 1 > /proc/sys/vm/panic_on_oom + + # A panic occurs when a process is hung. + echo 1 > /proc/sys/kernel/hung_task_panic + + # Set the timeout interval of the hung task mechanism. + echo 60 > /proc/sys/kernel/kernel.hung_task_timeout_secs + ``` + + Operation 3 To make the configuration take effect permanently, write the following parameters to the **/etc/sysctl.conf** file and run the `sysctl -p` command: + + ```shell + kernel.hung_task_panic=1 + kernel.hung_task_timeout_secs=60 + kernel.softlockup_panic=1 + vm.panic_on_oom=1 + ``` + +4. Analyzing the crash + + Operation 1 Enable crash debugging. + + Operation 2 Find the generated **vmcore** file generated in the **/var/crash/*IP\_address*-*time*** directory. + + Operation 3 Run the following command to start crash debugging: + + ```shell + crash {vmcore file} {debug kernel vmlinux} + ``` + + ![en-us_image_0000001372748125](./images/en-us_image_0000001372748125.png) + + The format of the **crash** debugging command is *command args*. *command* indicates the command to be executed, and *args* indicates the parameters required by some debugging commands. + + |Command|Description| + |--|--| + |help|Prints the help information of a command. You can view the supported commands or the help information of a specific command. For example, run `help bt`.| + |bt|Prints the function call stack information.| + |log|Prints the system message buffer. Parameters can be appended, for example, **log**.| + |ps|Displays the process status. **>** indicates that the process is active.| + |dis|Disassembles a specified function or address. Example: `dis -l \[func\]`| + |mount|Displays information about the current file system.| diff --git a/docs/en/server/maintenance/common_tools/images/c50cb9df64f4659787c810167c89feb4_1884x257.png b/docs/en/server/maintenance/common_tools/images/c50cb9df64f4659787c810167c89feb4_1884x257.png new file mode 100644 index 0000000000000000000000000000000000000000..01081f25627731c56764c196e3fae32d55bc7023 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/c50cb9df64f4659787c810167c89feb4_1884x257.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001321685172.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001321685172.png new file mode 100644 index 0000000000000000000000000000000000000000..acbe1f90720a7cc56dd20d03f00918264680a7db Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001321685172.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001322112990.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001322112990.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4b32bf2b36595abe10f2550cda5714bc355553 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001322112990.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001322219840.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001322219840.png new file mode 100644 index 0000000000000000000000000000000000000000..48b28664df46ddf9aa38c7570bb9e9edb8080ac9 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001322219840.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001322372918.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001322372918.png new file mode 100644 index 0000000000000000000000000000000000000000..5424367c9bc564e713220ba87f963096881833b8 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001322372918.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001322379488.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001322379488.png new file mode 100644 index 0000000000000000000000000000000000000000..8b18cdca066be43b74443498edc5500ea9e1e608 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001322379488.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001335457246.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001335457246.png new file mode 100644 index 0000000000000000000000000000000000000000..325d6a8ce097db0b92b1a883bc4b3d4ad0bc6a49 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001335457246.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337000118.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337000118.png new file mode 100644 index 0000000000000000000000000000000000000000..37131647778506f24be4ff401392a9cc209a36eb Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337000118.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337039920.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337039920.png new file mode 100644 index 0000000000000000000000000000000000000000..40c07e9b6ec27cdbe47d39788736b892f1174cc8 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337039920.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337053248.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337053248.png new file mode 100644 index 0000000000000000000000000000000000000000..8859f37749a4f8a4394e24ddfb54fc473e8c10c2 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337053248.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337172594.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337172594.png new file mode 100644 index 0000000000000000000000000000000000000000..4e806f83c57880543a777807778f14eeb0105aba Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337172594.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337260780.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337260780.png new file mode 100644 index 0000000000000000000000000000000000000000..09d521d933f5fa0caacc592ea92acee959786051 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337260780.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337420372.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337420372.png new file mode 100644 index 0000000000000000000000000000000000000000..2300bcd7426748236fd48b85688bd3d1fa3315df Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337420372.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337533690.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337533690.png new file mode 100644 index 0000000000000000000000000000000000000000..1f02d9b155754a113347a54a7d35ba9b060175a8 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337533690.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337536842.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337536842.png new file mode 100644 index 0000000000000000000000000000000000000000..5a9ee2c989638c9a6aad3fcfb35bb9b9f2d4683c Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337536842.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337580216.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337580216.png new file mode 100644 index 0000000000000000000000000000000000000000..5516b8d261b769287c74cf860a6708fcde6bbb8a Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337580216.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337696078.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337696078.png new file mode 100644 index 0000000000000000000000000000000000000000..3864852e345eaf01794042feaa85b012b8af71de Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337696078.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337740252.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337740252.png new file mode 100644 index 0000000000000000000000000000000000000000..fd83fb600a54ab8bc39ee2ae54210be8b6c48973 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337740252.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337740540.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337740540.png new file mode 100644 index 0000000000000000000000000000000000000000..b8e25128a47dccaed733fc192f52f2ca7828e516 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001337740540.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001372249333.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001372249333.png new file mode 100644 index 0000000000000000000000000000000000000000..48cd37225954e212cb3e159acc137866d8edc362 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001372249333.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001372748125.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001372748125.png new file mode 100644 index 0000000000000000000000000000000000000000..5f6326b9415cf766dd8379dbadd5aa1a0dc6861f Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001372748125.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001372821865.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001372821865.png new file mode 100644 index 0000000000000000000000000000000000000000..21e8dad1cd90755440cf858523b12c036a91e1ad Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001372821865.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001372824637.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001372824637.png new file mode 100644 index 0000000000000000000000000000000000000000..aefb5d83c079e6718ef88fd934b4b496cdc29565 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001372824637.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001373373585.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001373373585.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e5e47c9beca2c7c7630d78916f80eda652b52a Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001373373585.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001373379529.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001373379529.png new file mode 100644 index 0000000000000000000000000000000000000000..daa40b49e679668905632f25ff42bf8599ba0ead Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001373379529.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001384808269.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001384808269.png new file mode 100644 index 0000000000000000000000000000000000000000..be18ecef3a149d5742f18535552f66f26ab34832 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001384808269.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001385585749.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001385585749.png new file mode 100644 index 0000000000000000000000000000000000000000..c13604ab7095c2a7717bde1384f0aea3d53f69e3 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001385585749.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001385611905.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001385611905.png new file mode 100644 index 0000000000000000000000000000000000000000..8c233e40a21e678ddf4115c2e2e80c96e25a60ce Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001385611905.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001386699925.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001386699925.png new file mode 100644 index 0000000000000000000000000000000000000000..cf5b13b35e65ed0143a01a5bcad1e11eaddaded7 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001386699925.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387293085.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387293085.png new file mode 100644 index 0000000000000000000000000000000000000000..7f56b020949c53d018eba016952c2409f0d7dca9 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387293085.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387413509.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387413509.png new file mode 100644 index 0000000000000000000000000000000000000000..2245427058fc31f3e5d7f40062c0551936a67199 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387413509.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387413793.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387413793.png new file mode 100644 index 0000000000000000000000000000000000000000..aa649bf7215662819766d897513fb711d9d1e7f8 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387413793.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387415629.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387415629.png new file mode 100644 index 0000000000000000000000000000000000000000..01189358354090591de6580f8ef88ef78ddba3a1 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387415629.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387692269.jpg b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387692269.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b79e3ddf78520277046b933c4662c6b72f45ab85 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387692269.jpg differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387692893.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387692893.png new file mode 100644 index 0000000000000000000000000000000000000000..49ea515d834b58d4ded14c55a6a2b07034d76137 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387692893.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387755969.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387755969.png new file mode 100644 index 0000000000000000000000000000000000000000..b2daa95d6b757e7bd443d8fd961922f248dd6853 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387755969.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387780357.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387780357.png new file mode 100644 index 0000000000000000000000000000000000000000..1aab3b8be2cd0c906253d70036a9fee3050a1055 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387780357.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387855149.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387855149.png new file mode 100644 index 0000000000000000000000000000000000000000..731e957c367cb05e4229f53cf97dcee2cde69dff Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387855149.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387857005.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387857005.png new file mode 100644 index 0000000000000000000000000000000000000000..872f5c9eb05169831df4ba49d017629e8a943c64 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001387857005.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001388020197.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001388020197.png new file mode 100644 index 0000000000000000000000000000000000000000..1816e1e068ee0294677ebb357ffd158a14bb86cf Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001388020197.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001388972645.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001388972645.png new file mode 100644 index 0000000000000000000000000000000000000000..e32606925f4bb4380b262d9f946d4cd106202b87 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001388972645.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_image_0000001389098425.png b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001389098425.png new file mode 100644 index 0000000000000000000000000000000000000000..c63903009ab9ba454f169250632dbec1b3c94467 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_image_0000001389098425.png differ diff --git a/docs/en/server/maintenance/common_tools/images/en-us_other_0000001337581224.jpeg b/docs/en/server/maintenance/common_tools/images/en-us_other_0000001337581224.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2c019b828bdf9c699f203f09ba3542968ff21262 Binary files /dev/null and b/docs/en/server/maintenance/common_tools/images/en-us_other_0000001337581224.jpeg differ diff --git a/docs/en/server/maintenance/gala/_toc.yaml b/docs/en/server/maintenance/gala/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ec9a03c983e812b57896b360bf940e461b8d9431 --- /dev/null +++ b/docs/en/server/maintenance/gala/_toc.yaml @@ -0,0 +1,10 @@ +label: gala User Guide +isManual: true +description: Intelligent fault detection, performance profiling, and resource monitoring and management +sections: + - label: gala-anteater User Guide + href: ./using_gala_anteater.md + - label: gala-gopher User Guide + href: ./using_gala_gopher.md + - label: gala-spider User Guide + href: ./using_gala_spider.md diff --git a/docs/en/server/maintenance/gala/figures/0BFA7C40-D404-4772-9C47-76EAD7D24E69.png b/docs/en/server/maintenance/gala/figures/0BFA7C40-D404-4772-9C47-76EAD7D24E69.png new file mode 100644 index 0000000000000000000000000000000000000000..910f58dbf8fb13d52826b7c74728f4c28599660f Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/0BFA7C40-D404-4772-9C47-76EAD7D24E69.png differ diff --git a/docs/en/server/maintenance/gala/figures/1631073636579.png b/docs/en/server/maintenance/gala/figures/1631073636579.png new file mode 100644 index 0000000000000000000000000000000000000000..5aacc487264ac63fbe5322b4f89fca3ebf9c7cd9 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/1631073636579.png differ diff --git a/docs/en/server/maintenance/gala/figures/1631073840656.png b/docs/en/server/maintenance/gala/figures/1631073840656.png new file mode 100644 index 0000000000000000000000000000000000000000..122e391eafe7c0d8d081030a240df90aea260150 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/1631073840656.png differ diff --git a/docs/en/server/maintenance/gala/figures/1631101736624.png b/docs/en/server/maintenance/gala/figures/1631101736624.png new file mode 100644 index 0000000000000000000000000000000000000000..74e2f2ded2ea254c66b221e8ac27a0d8bed9362a Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/1631101736624.png differ diff --git a/docs/en/server/maintenance/gala/figures/1631101865366.png b/docs/en/server/maintenance/gala/figures/1631101865366.png new file mode 100644 index 0000000000000000000000000000000000000000..abfbc280a368b93af1e1165385af3a9cac89391d Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/1631101865366.png differ diff --git a/docs/en/server/maintenance/gala/figures/1631101982829.png b/docs/en/server/maintenance/gala/figures/1631101982829.png new file mode 100644 index 0000000000000000000000000000000000000000..0b1c9c7c3676b804dbdf19afbe4f3ec9dbe0627f Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/1631101982829.png differ diff --git a/docs/en/server/maintenance/gala/figures/1631102019026.png b/docs/en/server/maintenance/gala/figures/1631102019026.png new file mode 100644 index 0000000000000000000000000000000000000000..54e8e7d1cffbb28711074e511b08c73f66c1fb75 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/1631102019026.png differ diff --git a/docs/en/server/maintenance/gala/figures/20210908212726.png b/docs/en/server/maintenance/gala/figures/20210908212726.png new file mode 100644 index 0000000000000000000000000000000000000000..f7d399aecd46605c09fe2d1f50a1a8670cd80432 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/20210908212726.png differ diff --git a/docs/en/server/maintenance/gala/figures/D466AC8C-2FAF-4797-9A48-F6C346A1EC77.png b/docs/en/server/maintenance/gala/figures/D466AC8C-2FAF-4797-9A48-F6C346A1EC77.png new file mode 100644 index 0000000000000000000000000000000000000000..4b937ab846017ead71ca8b5a75b8af1f0f28e1ef Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/D466AC8C-2FAF-4797-9A48-F6C346A1EC77.png differ diff --git a/docs/en/server/maintenance/gala/figures/a-ops_architecture.png b/docs/en/server/maintenance/gala/figures/a-ops_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..7a831b183e8cba5da16b9be9d965abe9811ada5b Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/a-ops_architecture.png differ diff --git a/docs/en/server/maintenance/gala/figures/add_config.png b/docs/en/server/maintenance/gala/figures/add_config.png new file mode 100644 index 0000000000000000000000000000000000000000..18d71c2e099c19b5d28848eec6a8d11f29ccee27 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/add_config.png differ diff --git a/docs/en/server/maintenance/gala/figures/add_fault_tree.png b/docs/en/server/maintenance/gala/figures/add_fault_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..664efd5150fcb96f009ce0eddc3d9ac91b9e622f Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/add_fault_tree.png differ diff --git a/docs/en/server/maintenance/gala/figures/add_host_group.png b/docs/en/server/maintenance/gala/figures/add_host_group.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4ab3616d418ecf33a006fee3985b8b6d2d965d Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/add_host_group.png differ diff --git a/docs/en/server/maintenance/gala/figures/add_node.png b/docs/en/server/maintenance/gala/figures/add_node.png new file mode 100644 index 0000000000000000000000000000000000000000..d68f5e12a62548f2ec59374bda9ab07f43b8b5cb Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/add_node.png differ diff --git a/docs/en/server/maintenance/gala/figures/check.PNG b/docs/en/server/maintenance/gala/figures/check.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2dce821dd43eec6f0d13cd6b2dc1e30653f35489 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/check.PNG differ diff --git a/docs/en/server/maintenance/gala/figures/create_service_domain.png b/docs/en/server/maintenance/gala/figures/create_service_domain.png new file mode 100644 index 0000000000000000000000000000000000000000..4f5b8de2d2c4ddb9bfdfba1ac17258a834561e2d Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/create_service_domain.png differ diff --git a/docs/en/server/maintenance/gala/figures/dashboard.PNG b/docs/en/server/maintenance/gala/figures/dashboard.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2a4a827191367309aad28a8a6c1835df602bdf72 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/dashboard.PNG differ diff --git a/docs/en/server/maintenance/gala/figures/decryption.png b/docs/en/server/maintenance/gala/figures/decryption.png new file mode 100644 index 0000000000000000000000000000000000000000..da07cfdf9296e201a82cceb210e651261fe7ecee Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/decryption.png differ diff --git a/docs/en/server/maintenance/gala/figures/delete_config.png b/docs/en/server/maintenance/gala/figures/delete_config.png new file mode 100644 index 0000000000000000000000000000000000000000..cfea2eb44f7b8aa809404b8b49b4bd2e24172568 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/delete_config.png differ diff --git a/docs/en/server/maintenance/gala/figures/delete_host_group.png b/docs/en/server/maintenance/gala/figures/delete_host_group.png new file mode 100644 index 0000000000000000000000000000000000000000..e4d85f6e3f1a269a483943f5115f54daa3de51de Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/delete_host_group.png differ diff --git a/docs/en/server/maintenance/gala/figures/delete_hosts.png b/docs/en/server/maintenance/gala/figures/delete_hosts.png new file mode 100644 index 0000000000000000000000000000000000000000..b3da935739369dad1318fe135146755ede13c694 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/delete_hosts.png differ diff --git a/docs/en/server/maintenance/gala/figures/deploy.PNG b/docs/en/server/maintenance/gala/figures/deploy.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e30dcb0eb05eb4f41202c736863f3e0ff216398d Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/deploy.PNG differ diff --git a/docs/en/server/maintenance/gala/figures/diag.PNG b/docs/en/server/maintenance/gala/figures/diag.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a67e8515b8313a50b06cb985611ef9c166851811 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/diag.PNG differ diff --git a/docs/en/server/maintenance/gala/figures/diag_error1.png b/docs/en/server/maintenance/gala/figures/diag_error1.png new file mode 100644 index 0000000000000000000000000000000000000000..9e5b1139febe9f00156b37f3268269ac30a78737 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/diag_error1.png differ diff --git a/docs/en/server/maintenance/gala/figures/diag_main_page.png b/docs/en/server/maintenance/gala/figures/diag_main_page.png new file mode 100644 index 0000000000000000000000000000000000000000..b536af938250004bac3053b234bf20bcbf075c9b Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/diag_main_page.png differ diff --git a/docs/en/server/maintenance/gala/figures/diagnosis.png b/docs/en/server/maintenance/gala/figures/diagnosis.png new file mode 100644 index 0000000000000000000000000000000000000000..2c85102fe28deaac0a35fde85fd4497994d2c031 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/diagnosis.png differ diff --git a/docs/en/server/maintenance/gala/figures/diagnosis_error1.png b/docs/en/server/maintenance/gala/figures/diagnosis_error1.png new file mode 100644 index 0000000000000000000000000000000000000000..9e5b1139febe9f00156b37f3268269ac30a78737 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/diagnosis_error1.png differ diff --git a/docs/en/server/maintenance/gala/figures/domain.PNG b/docs/en/server/maintenance/gala/figures/domain.PNG new file mode 100644 index 0000000000000000000000000000000000000000..bad499f96df5934565d36edf2308cec5e4147719 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/domain.PNG differ diff --git a/docs/en/server/maintenance/gala/figures/domain_config.PNG b/docs/en/server/maintenance/gala/figures/domain_config.PNG new file mode 100644 index 0000000000000000000000000000000000000000..8995424b35cda75f08881037446b7816a0ca09dc Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/domain_config.PNG differ diff --git a/docs/en/server/maintenance/gala/figures/elasticsearch3.png b/docs/en/server/maintenance/gala/figures/elasticsearch3.png new file mode 100644 index 0000000000000000000000000000000000000000..893aae242aa9117c64f323374d4728d230894973 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/elasticsearch3.png differ diff --git a/docs/en/server/maintenance/gala/figures/elasticsearch_config1.png b/docs/en/server/maintenance/gala/figures/elasticsearch_config1.png new file mode 100644 index 0000000000000000000000000000000000000000..1b7e0eab093b2f0455b8f3972884e5f757fbec3d Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/elasticsearch_config1.png differ diff --git a/docs/en/server/maintenance/gala/figures/elasticsearch_config2.png b/docs/en/server/maintenance/gala/figures/elasticsearch_config2.png new file mode 100644 index 0000000000000000000000000000000000000000..620dbbda71259e3b6ee6a2efb646a9692adf2456 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/elasticsearch_config2.png differ diff --git a/docs/en/server/maintenance/gala/figures/execute_diag.png b/docs/en/server/maintenance/gala/figures/execute_diag.png new file mode 100644 index 0000000000000000000000000000000000000000..afb5f7e9fbfb1d1ce46d096a61729766b4940cd3 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/execute_diag.png differ diff --git a/docs/en/server/maintenance/gala/figures/gala-gopher-start-success.png b/docs/en/server/maintenance/gala/figures/gala-gopher-start-success.png new file mode 100644 index 0000000000000000000000000000000000000000..ab16e9d3661db3fd4adc6c605b2d2d08e79fdc1c Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/gala-gopher-start-success.png differ diff --git a/docs/en/server/maintenance/gala/figures/gala-spider-arch.png b/docs/en/server/maintenance/gala/figures/gala-spider-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..c5a0768be63a98ef7ccc4a56996a8c715f7090af Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/gala-spider-arch.png differ diff --git a/docs/en/server/maintenance/gala/figures/gopher-arch.png b/docs/en/server/maintenance/gala/figures/gopher-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..f151965a21d11dd7a3e215cc4ef23d70d059f4b1 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/gopher-arch.png differ diff --git a/docs/en/server/maintenance/gala/figures/group.PNG b/docs/en/server/maintenance/gala/figures/group.PNG new file mode 100644 index 0000000000000000000000000000000000000000..584fd1f7195694a3419482cace2a71fa1cd9a3ec Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/group.PNG differ diff --git a/docs/en/server/maintenance/gala/figures/host.PNG b/docs/en/server/maintenance/gala/figures/host.PNG new file mode 100644 index 0000000000000000000000000000000000000000..3c00681a567cf8f1e1baddfb6fdb7b6cf7df43de Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/host.PNG differ diff --git a/docs/en/server/maintenance/gala/figures/hosts.png b/docs/en/server/maintenance/gala/figures/hosts.png new file mode 100644 index 0000000000000000000000000000000000000000..f4c7b9103baab7748c83392f6120c8f00880860f Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/hosts.png differ diff --git a/docs/en/server/maintenance/gala/figures/hosts_in_group.png b/docs/en/server/maintenance/gala/figures/hosts_in_group.png new file mode 100644 index 0000000000000000000000000000000000000000..9f188d207162fa1418a61a10f83ef9c51a512e65 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/hosts_in_group.png differ diff --git a/docs/en/server/maintenance/gala/figures/hot_patch_statuses.png b/docs/en/server/maintenance/gala/figures/hot_patch_statuses.png new file mode 100644 index 0000000000000000000000000000000000000000..f5f8a3a95705145787e7aaf9c8d1fff404892240 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/hot_patch_statuses.png differ diff --git a/docs/en/server/maintenance/gala/figures/kafka_config.png b/docs/en/server/maintenance/gala/figures/kafka_config.png new file mode 100644 index 0000000000000000000000000000000000000000..57eb17ccbd2fa63d97f700c29847fac7f08042ff Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/kafka_config.png differ diff --git a/docs/en/server/maintenance/gala/figures/prometheus_config.png b/docs/en/server/maintenance/gala/figures/prometheus_config.png new file mode 100644 index 0000000000000000000000000000000000000000..7c8d0328967e8eb9bc4aa7465a273b9ef5a30b58 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/prometheus_config.png differ diff --git a/docs/en/server/maintenance/gala/figures/query_actual_config.png b/docs/en/server/maintenance/gala/figures/query_actual_config.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f6e450fc0e1e246492ca71a6fcd8db572eb469 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/query_actual_config.png differ diff --git a/docs/en/server/maintenance/gala/figures/query_status.png b/docs/en/server/maintenance/gala/figures/query_status.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d0b3294bf6e0eeec50a2c2f8c5059bdc256376 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/query_status.png differ diff --git a/docs/en/server/maintenance/gala/figures/spider.PNG b/docs/en/server/maintenance/gala/figures/spider.PNG new file mode 100644 index 0000000000000000000000000000000000000000..53bad6dd38e36db9cadfdbeda21cbc3ef59eddf7 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/spider.PNG differ diff --git a/docs/en/server/maintenance/gala/figures/spider_detail.jpg b/docs/en/server/maintenance/gala/figures/spider_detail.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b69636fe2161380be56f37caf7fd904d2e63e302 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/spider_detail.jpg differ diff --git a/docs/en/server/maintenance/gala/figures/spider_topology.png b/docs/en/server/maintenance/gala/figures/spider_topology.png new file mode 100644 index 0000000000000000000000000000000000000000..5823a116f384801e1197350f151b4d04ef519ac4 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/spider_topology.png differ diff --git a/docs/en/server/maintenance/gala/figures/syscare_hot_patch_statuses.png b/docs/en/server/maintenance/gala/figures/syscare_hot_patch_statuses.png new file mode 100644 index 0000000000000000000000000000000000000000..bbd0600fc5c913198dfe1e1bf2aba9c652576a98 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/syscare_hot_patch_statuses.png differ diff --git a/docs/en/server/maintenance/gala/figures/view_expected_config.png b/docs/en/server/maintenance/gala/figures/view_expected_config.png new file mode 100644 index 0000000000000000000000000000000000000000..bbead6a91468d5dee570cfdc66faf9a4ab155d7c Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/view_expected_config.png differ diff --git a/docs/en/server/maintenance/gala/figures/view_fault_tree.png b/docs/en/server/maintenance/gala/figures/view_fault_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..a566417b18e8bcf19153730904893fc8d827d885 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/view_fault_tree.png differ diff --git a/docs/en/server/maintenance/gala/figures/view_report.png b/docs/en/server/maintenance/gala/figures/view_report.png new file mode 100644 index 0000000000000000000000000000000000000000..2029141179302ecef45d34cb0c9dc916b9142e7b Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/view_report.png differ diff --git a/docs/en/server/maintenance/gala/figures/view_report_list.png b/docs/en/server/maintenance/gala/figures/view_report_list.png new file mode 100644 index 0000000000000000000000000000000000000000..58307ec6ef4c73b6b0f039b1052e5870629ac2e8 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/view_report_list.png differ diff --git a/docs/en/server/maintenance/gala/figures/web_config.png b/docs/en/server/maintenance/gala/figures/web_config.png new file mode 100644 index 0000000000000000000000000000000000000000..138f7fa07988b6f0475da85577eb4d0cee5a1be5 Binary files /dev/null and b/docs/en/server/maintenance/gala/figures/web_config.png differ diff --git a/docs/en/server/maintenance/gala/image/45515A7F-0EC2-45AA-9B58-AB92DE9B0979.png b/docs/en/server/maintenance/gala/image/45515A7F-0EC2-45AA-9B58-AB92DE9B0979.png new file mode 100644 index 0000000000000000000000000000000000000000..c810b26ad0c052960dfdf4bfd78e9224ce465318 Binary files /dev/null and b/docs/en/server/maintenance/gala/image/45515A7F-0EC2-45AA-9B58-AB92DE9B0979.png differ diff --git "a/docs/en/server/maintenance/gala/image/ACC\347\232\204hotpatchmetadata\346\226\207\344\273\266\347\244\272\344\276\213.png" "b/docs/en/server/maintenance/gala/image/ACC\347\232\204hotpatchmetadata\346\226\207\344\273\266\347\244\272\344\276\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..790df6fd5781ca008124cff14635165a71abf126 Binary files /dev/null and "b/docs/en/server/maintenance/gala/image/ACC\347\232\204hotpatchmetadata\346\226\207\344\273\266\347\244\272\344\276\213.png" differ diff --git a/docs/en/server/maintenance/gala/image/E574E637-0BF3-4F3B-BAE6-04ECBD09D151.png b/docs/en/server/maintenance/gala/image/E574E637-0BF3-4F3B-BAE6-04ECBD09D151.png new file mode 100644 index 0000000000000000000000000000000000000000..6ef6ef9bd126e6c2007389065bbecc1cfdd97f5b Binary files /dev/null and b/docs/en/server/maintenance/gala/image/E574E637-0BF3-4F3B-BAE6-04ECBD09D151.png differ diff --git a/docs/en/server/maintenance/gala/image/EF5E0132-6E5C-4DD1-8CB5-73035278E233.png b/docs/en/server/maintenance/gala/image/EF5E0132-6E5C-4DD1-8CB5-73035278E233.png new file mode 100644 index 0000000000000000000000000000000000000000..a2a29d2e1b62f7df409e87d03f2525ba8355f77e Binary files /dev/null and b/docs/en/server/maintenance/gala/image/EF5E0132-6E5C-4DD1-8CB5-73035278E233.png differ diff --git a/docs/en/server/maintenance/gala/image/hotpatch-fix-pr.png b/docs/en/server/maintenance/gala/image/hotpatch-fix-pr.png new file mode 100644 index 0000000000000000000000000000000000000000..d10fd1ec44416f6b59cfd21cca8721d001f7ed19 Binary files /dev/null and b/docs/en/server/maintenance/gala/image/hotpatch-fix-pr.png differ diff --git a/docs/en/server/maintenance/gala/image/hotpatch-pr-1.png b/docs/en/server/maintenance/gala/image/hotpatch-pr-1.png new file mode 100644 index 0000000000000000000000000000000000000000..1dc5269655c51b355d3cd89b71c6688fbb0d8d5d Binary files /dev/null and b/docs/en/server/maintenance/gala/image/hotpatch-pr-1.png differ diff --git a/docs/en/server/maintenance/gala/image/hotpatch-pr-success.png b/docs/en/server/maintenance/gala/image/hotpatch-pr-success.png new file mode 100644 index 0000000000000000000000000000000000000000..48ea807e03c0f8e6efbceacbbc583c6ac3b3c865 Binary files /dev/null and b/docs/en/server/maintenance/gala/image/hotpatch-pr-success.png differ diff --git a/docs/en/server/maintenance/gala/image/hotpatch-pr.png b/docs/en/server/maintenance/gala/image/hotpatch-pr.png new file mode 100644 index 0000000000000000000000000000000000000000..159fd2b7bc76e002554722d1f0f12070a2bd2e19 Binary files /dev/null and b/docs/en/server/maintenance/gala/image/hotpatch-pr.png differ diff --git a/docs/en/server/maintenance/gala/image/hotpatch-xml.PNG b/docs/en/server/maintenance/gala/image/hotpatch-xml.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f1916620d3cc7b1c29059bcc5513fdc7ee94127b Binary files /dev/null and b/docs/en/server/maintenance/gala/image/hotpatch-xml.PNG differ diff --git a/docs/en/server/maintenance/gala/image/image-20230525193235084.png b/docs/en/server/maintenance/gala/image/image-20230525193235084.png new file mode 100644 index 0000000000000000000000000000000000000000..9850a11a0dcfeed69099635f3147a2230fe6faa5 Binary files /dev/null and b/docs/en/server/maintenance/gala/image/image-20230525193235084.png differ diff --git a/docs/en/server/maintenance/gala/image/image-20230525193254541.png b/docs/en/server/maintenance/gala/image/image-20230525193254541.png new file mode 100644 index 0000000000000000000000000000000000000000..73bfbaa15a2584611ac06839965eca2869b89991 Binary files /dev/null and b/docs/en/server/maintenance/gala/image/image-20230525193254541.png differ diff --git a/docs/en/server/maintenance/gala/image/image-20230527165206707.png b/docs/en/server/maintenance/gala/image/image-20230527165206707.png new file mode 100644 index 0000000000000000000000000000000000000000..7d7f0992fc048777340678974d38b3c193269385 Binary files /dev/null and b/docs/en/server/maintenance/gala/image/image-20230527165206707.png differ diff --git a/docs/en/server/maintenance/gala/image/image-20230527165700642.png b/docs/en/server/maintenance/gala/image/image-20230527165700642.png new file mode 100644 index 0000000000000000000000000000000000000000..2c4500cb54ba0225704020160d72b4aaf265d3f7 Binary files /dev/null and b/docs/en/server/maintenance/gala/image/image-20230527165700642.png differ diff --git a/docs/en/server/maintenance/gala/image/image-20230527165823568.png b/docs/en/server/maintenance/gala/image/image-20230527165823568.png new file mode 100644 index 0000000000000000000000000000000000000000..7b26b545bc7d37f09eca7736f30d2eb3a6062890 Binary files /dev/null and b/docs/en/server/maintenance/gala/image/image-20230527165823568.png differ diff --git a/docs/en/server/maintenance/gala/image/image-20230527165845170.png b/docs/en/server/maintenance/gala/image/image-20230527165845170.png new file mode 100644 index 0000000000000000000000000000000000000000..9719210a961a18b639d56cbf88b8586370930b4c Binary files /dev/null and b/docs/en/server/maintenance/gala/image/image-20230527165845170.png differ diff --git a/docs/en/server/maintenance/gala/image/image-20230527165922876.png b/docs/en/server/maintenance/gala/image/image-20230527165922876.png new file mode 100644 index 0000000000000000000000000000000000000000..56ff3380d12b9c1002881eca98e32a49cc292b9a Binary files /dev/null and b/docs/en/server/maintenance/gala/image/image-20230527165922876.png differ diff --git a/docs/en/server/maintenance/gala/image/image-20230527170343909.png b/docs/en/server/maintenance/gala/image/image-20230527170343909.png new file mode 100644 index 0000000000000000000000000000000000000000..57c343360f278b2f67b77d37114a1f567a3ce63a Binary files /dev/null and b/docs/en/server/maintenance/gala/image/image-20230527170343909.png differ diff --git a/docs/en/server/maintenance/gala/image/image-20230607161425282.png b/docs/en/server/maintenance/gala/image/image-20230607161425282.png new file mode 100644 index 0000000000000000000000000000000000000000..d2fbca2a23e80edff661d05065987ede1cc7e8af Binary files /dev/null and b/docs/en/server/maintenance/gala/image/image-20230607161425282.png differ diff --git a/docs/en/server/maintenance/gala/image/image-20230607163358749.png b/docs/en/server/maintenance/gala/image/image-20230607163358749.png new file mode 100644 index 0000000000000000000000000000000000000000..191c36b65058ce8dea6bb2f1fe10a85b0177f2cf Binary files /dev/null and b/docs/en/server/maintenance/gala/image/image-20230607163358749.png differ diff --git a/docs/en/server/maintenance/gala/image/image-20230607172021782.png b/docs/en/server/maintenance/gala/image/image-20230607172021782.png new file mode 100644 index 0000000000000000000000000000000000000000..d25c3ebfb1aefe5d8f36b0b153afa64efd88dd63 Binary files /dev/null and b/docs/en/server/maintenance/gala/image/image-20230607172021782.png differ diff --git a/docs/en/server/maintenance/gala/image/image-20230612113428096.png b/docs/en/server/maintenance/gala/image/image-20230612113428096.png new file mode 100644 index 0000000000000000000000000000000000000000..48b59b5e6cb4043703de96066c8d67e85eed4f16 Binary files /dev/null and b/docs/en/server/maintenance/gala/image/image-20230612113428096.png differ diff --git a/docs/en/server/maintenance/gala/image/image-20230612113626330.png b/docs/en/server/maintenance/gala/image/image-20230612113626330.png new file mode 100644 index 0000000000000000000000000000000000000000..9d3621022deb02b267c3eb29315a7fe33c1f095e Binary files /dev/null and b/docs/en/server/maintenance/gala/image/image-20230612113626330.png differ diff --git a/docs/en/server/maintenance/gala/image/image-20230908163402743.png b/docs/en/server/maintenance/gala/image/image-20230908163402743.png new file mode 100644 index 0000000000000000000000000000000000000000..c17667178689c6384a039bf0f8025ea7eb360236 Binary files /dev/null and b/docs/en/server/maintenance/gala/image/image-20230908163402743.png differ diff --git a/docs/en/server/maintenance/gala/image/image-20230908163914778.png b/docs/en/server/maintenance/gala/image/image-20230908163914778.png new file mode 100644 index 0000000000000000000000000000000000000000..a06c7e49b32286ceec9ff0e9a08f73a76c179daf Binary files /dev/null and b/docs/en/server/maintenance/gala/image/image-20230908163914778.png differ diff --git a/docs/en/server/maintenance/gala/image/image-20230908164216528.png b/docs/en/server/maintenance/gala/image/image-20230908164216528.png new file mode 100644 index 0000000000000000000000000000000000000000..15fbc694603837095244451d4f5d7e7af70789be Binary files /dev/null and b/docs/en/server/maintenance/gala/image/image-20230908164216528.png differ diff --git "a/docs/en/server/maintenance/gala/image/openEuler\344\273\223\350\257\204\350\256\272.png" "b/docs/en/server/maintenance/gala/image/openEuler\344\273\223\350\257\204\350\256\272.png" new file mode 100644 index 0000000000000000000000000000000000000000..29223cbddc39f8fcc0b725a3ed83495709e05f78 Binary files /dev/null and "b/docs/en/server/maintenance/gala/image/openEuler\344\273\223\350\257\204\350\256\272.png" differ diff --git a/docs/en/server/maintenance/gala/image/patch-file.PNG b/docs/en/server/maintenance/gala/image/patch-file.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f587a48c2be945beaadecf44a6d711da14be50c6 Binary files /dev/null and b/docs/en/server/maintenance/gala/image/patch-file.PNG differ diff --git "a/docs/en/server/maintenance/gala/image/src-openEuler\344\273\223\350\257\204\350\256\272.png" "b/docs/en/server/maintenance/gala/image/src-openEuler\344\273\223\350\257\204\350\256\272.png" new file mode 100644 index 0000000000000000000000000000000000000000..ba3a44433117f0a23fc6048cd3b093fe6af7250c Binary files /dev/null and "b/docs/en/server/maintenance/gala/image/src-openEuler\344\273\223\350\257\204\350\256\272.png" differ diff --git "a/docs/en/server/maintenance/gala/image/\345\220\214\346\204\217\345\220\210\345\205\245pr.png" "b/docs/en/server/maintenance/gala/image/\345\220\214\346\204\217\345\220\210\345\205\245pr.png" new file mode 100644 index 0000000000000000000000000000000000000000..2c2e2dd78242f538c21809614e917bef769256ba Binary files /dev/null and "b/docs/en/server/maintenance/gala/image/\345\220\214\346\204\217\345\220\210\345\205\245pr.png" differ diff --git "a/docs/en/server/maintenance/gala/image/\345\220\257\345\212\250\347\203\255\350\241\245\344\270\201\345\267\245\347\250\213\346\265\201\347\250\213.png" "b/docs/en/server/maintenance/gala/image/\345\220\257\345\212\250\347\203\255\350\241\245\344\270\201\345\267\245\347\250\213\346\265\201\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..2914c3eef44bb3d3528686b44157a5f9276da9c6 Binary files /dev/null and "b/docs/en/server/maintenance/gala/image/\345\220\257\345\212\250\347\203\255\350\241\245\344\270\201\345\267\245\347\250\213\346\265\201\347\250\213.png" differ diff --git "a/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201issue\345\210\235\345\247\213\345\206\205\345\256\271.png" "b/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201issue\345\210\235\345\247\213\345\206\205\345\256\271.png" new file mode 100644 index 0000000000000000000000000000000000000000..044be7ccd001ddc2bb69ba53b34f3c2a72511f39 Binary files /dev/null and "b/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201issue\345\210\235\345\247\213\345\206\205\345\256\271.png" differ diff --git "a/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201issue\345\233\236\345\241\253.png" "b/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201issue\345\233\236\345\241\253.png" new file mode 100644 index 0000000000000000000000000000000000000000..779c2fddcb02968358492e70f6aa9261be26fe48 Binary files /dev/null and "b/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201issue\345\233\236\345\241\253.png" differ diff --git "a/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201issue\351\223\276\346\216\245\345\222\214pr\351\223\276\346\216\245.png" "b/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201issue\351\223\276\346\216\245\345\222\214pr\351\223\276\346\216\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..d97fbd1fbb5a20b97ec88989f3c7a0776bb9cdc0 Binary files /dev/null and "b/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201issue\351\223\276\346\216\245\345\222\214pr\351\223\276\346\216\245.png" differ diff --git "a/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\345\210\266\344\275\234\345\244\261\350\264\245.png" "b/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\345\210\266\344\275\234\345\244\261\350\264\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..3acf2e93550e4962d0a5f927fd6fd0460a64b889 Binary files /dev/null and "b/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\345\210\266\344\275\234\345\244\261\350\264\245.png" differ diff --git "a/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\345\210\266\344\275\234\347\273\223\346\236\234.png" "b/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\345\210\266\344\275\234\347\273\223\346\236\234.png" new file mode 100644 index 0000000000000000000000000000000000000000..5b167be8a40762823223ccdd700d5b62f7e1aa38 Binary files /dev/null and "b/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\345\210\266\344\275\234\347\273\223\346\236\234.png" differ diff --git "a/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\347\232\204chroot\347\216\257\345\242\203.png" "b/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\347\232\204chroot\347\216\257\345\242\203.png" new file mode 100644 index 0000000000000000000000000000000000000000..a96a4d229b54b301bbf4e7f7a2c41ea1e9faf43d Binary files /dev/null and "b/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\347\232\204chroot\347\216\257\345\242\203.png" differ diff --git "a/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\350\247\246\345\217\221\346\265\201\347\250\213.png" "b/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\350\247\246\345\217\221\346\265\201\347\250\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..d77335d0097f7504f0c37dd8aca1691d9f1f0a23 Binary files /dev/null and "b/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201pr\350\247\246\345\217\221\346\265\201\347\250\213.png" differ diff --git "a/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201\344\273\223\346\217\220pr\350\257\264\346\230\216.png" "b/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201\344\273\223\346\217\220pr\350\257\264\346\230\216.png" new file mode 100644 index 0000000000000000000000000000000000000000..aa74c2859588ff2a49d6341dd2a2ac6fe2049eac Binary files /dev/null and "b/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201\344\273\223\346\217\220pr\350\257\264\346\230\216.png" differ diff --git "a/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201\350\207\252\351\252\214\344\270\213\350\275\275\351\223\276\346\216\245.png" "b/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201\350\207\252\351\252\214\344\270\213\350\275\275\351\223\276\346\216\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..404ac733fae66bda9ceac2d6c2fa18897c58dc70 Binary files /dev/null and "b/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201\350\207\252\351\252\214\344\270\213\350\275\275\351\223\276\346\216\245.png" differ diff --git "a/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201\350\207\252\351\252\214\345\214\205\344\270\213\350\275\275\351\223\276\346\216\245.png" "b/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201\350\207\252\351\252\214\345\214\205\344\270\213\350\275\275\351\223\276\346\216\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..6d32e8874e8e5e7f7fb5c350fca0063da9a77176 Binary files /dev/null and "b/docs/en/server/maintenance/gala/image/\347\203\255\350\241\245\344\270\201\350\207\252\351\252\214\345\214\205\344\270\213\350\275\275\351\223\276\346\216\245.png" differ diff --git a/docs/en/server/maintenance/gala/translation_note.txt b/docs/en/server/maintenance/gala/translation_note.txt new file mode 100644 index 0000000000000000000000000000000000000000..e506ef2624422e63fcd081d6021b85b403953d73 --- /dev/null +++ b/docs/en/server/maintenance/gala/translation_note.txt @@ -0,0 +1 @@ +As of Jan 2024, A-Ops does not provide English UI. The documents are not scheduled for translation. \ No newline at end of file diff --git a/docs/en/server/maintenance/gala/using_gala_anteater.md b/docs/en/server/maintenance/gala/using_gala_anteater.md new file mode 100644 index 0000000000000000000000000000000000000000..aed5fc8fa4fef11dd3fba251642f41ad93dc8b6c --- /dev/null +++ b/docs/en/server/maintenance/gala/using_gala_anteater.md @@ -0,0 +1,154 @@ +# Using gala-anteater + +gala-anteater is an AI-based operating system exception detection platform. It provides functions such as time series data preprocessing, exception detection, and exception reporting. Based on offline pre-training, online model incremental learning and model update, it can be well adapted to multi-dimensional and multi-modal data fault diagnosis. + +This chapter describes how to deploy and use the gala-anteater service. + +## Installation + +Mount the repositories. + +```basic +[everything] +name=everything +baseurl=http://121.36.84.172/dailybuild/EBS-openEuler-22.03-LTS-SP4/EBS-openEuler-22.03-LTS-SP4/everything/$basearch/ +enabled=1 +gpgcheck=0 +priority=1 + +[EPOL] +name=EPOL +baseurl=http://repo.openeuler.org/EBS-openEuler-22.03-LTS-SP4/EPOL/main/$basearch/ +enabled=1 +gpgcheck=0 +priority=1 + +``` + +Install gala-anteater. + +```bash +# yum install gala-anteater +``` + +## Configuration + +> Note: Some gala-anteater parameters can be configured in **/etc/gala-anteater/config/gala-anteater.yaml**. + +### Startup Parameters + +| Parameter| Parameter Full Name| Type| Mandatory (Yes/No)| Default Value| Name| Description| +|---|---|---|---|---|---|---| +| -ks | --kafka_server | string | True | | KAFKA_SERVER | IP address of the Kafka server, for example, **localhost / xxx.xxx.xxx.xxx**.| +| -kp | --kafka_port | string | True | | KAFKA_PORT | Port number of the Kafka server, for example, **9092**.| +| -ps | --prometheus_server | string | True | | PROMETHEUS_SERVER | IP address of the Prometheus server, for example, **localhost / xxx.xxx.xxx.xxx**.| +| -pp | --prometheus_port | string | True | | PROMETHEUS_PORT | Port number of the Prometheus server, for example, **9090**.| +| -m | --model | string | False | vae | MODEL | Exception detection model. Currently, two exception detection models are supported: **random_forest** and **vae**.
**random_forest**: random forest model, which does not support online learning
**vae**: Variational Atuoencoder (VAE), which is an unsupervised model and supports model update based on historical data during the first startup.| +| -d | --duration | int | False | 1 | DURATION | Frequency of executing the exception detection model. The unit is minute, which means that the detection is performed every *x* minutes.| +| -r | --retrain | bool | False | False | RETRAIN | Whether to use historical data to update and iterate the model during startup. Currently, only the VAE model is supported.| +| -l | --look_back | int | False | 4 | LOOK_BACK | Whether to update the model based on the historical data of the last *x* days.| +| -t | --threshold | float | False | 0.8 | THRESHOLD | Threshold of the exception detection model, ranging from 0 to 1. A larger value can reduce the false positive rate of the model. It is recommended that the value be greater than or equal to 0.5.| +| -sli | --sli_time | int | False | 400 | SLI_TIME | Application performance metric. The unit is ms. A larger value can reduce the false positive rate of the model. It is recommended that the value be greater than or equal to 200.
For scenarios with a high false positive rate, it is recommended that the value be greater than 1000.| + +## Start + +Start gala-anteater. + +> Note: gala-anteater can be started and run in command line mode, but cannot be started and run in systemd mode. + +- Running in online training mode (recommended) + +```bash +gala-anteater -ks {ip} -kp {port} -ps {ip} -pp {port} -m vae -r True -l 7 -t 0.6 -sli 400 +``` + +- Running in common mode + +```bash +gala-anteater -ks {ip} -kp {port} -ps {ip} -pp {port} -m vae -t 0.6 -sli 400 +``` + +Query the gala-anteater service status. + +If the following information is displayed, the service is started successfully. The startup log is saved to the **logs/anteater.log** file in the current running directory. + +```log +2022-09-01 17:52:54,435 - root - INFO - Run gala_anteater main function... +2022-09-01 17:52:54,436 - root - INFO - Start to try updating global configurations by querying data from Kafka! +2022-09-01 17:52:54,994 - root - INFO - Loads metric and operators from file: xxx\metrics.csv +2022-09-01 17:52:54,997 - root - INFO - Loads metric and operators from file: xxx\metrics.csv +2022-09-01 17:52:54,998 - root - INFO - Start to re-train the model based on last day metrics dataset! +2022-09-01 17:52:54,998 - root - INFO - Get training data during 2022-08-31 17:52:00+08:00 to 2022-09-01 17:52:00+08:00! +2022-09-01 17:53:06,994 - root - INFO - Spends: 11.995422840118408 seconds to get unique machine_ids! +2022-09-01 17:53:06,995 - root - INFO - The number of unique machine ids is: 1! +2022-09-01 17:53:06,996 - root - INFO - Fetch metric values from machine: xxxx. +2022-09-01 17:53:38,385 - root - INFO - Spends: 31.3896164894104 seconds to get get all metric values! +2022-09-01 17:53:38,392 - root - INFO - The shape of training data: (17281, 136) +2022-09-01 17:53:38,444 - root - INFO - Start to execute vae model training... +2022-09-01 17:53:38,456 - root - INFO - Using cpu device +2022-09-01 17:53:38,658 - root - INFO - Epoch(s): 0 train Loss: 136.68 validate Loss: 117.00 +2022-09-01 17:53:38,852 - root - INFO - Epoch(s): 1 train Loss: 113.73 validate Loss: 110.05 +2022-09-01 17:53:39,044 - root - INFO - Epoch(s): 2 train Loss: 110.60 validate Loss: 108.76 +2022-09-01 17:53:39,235 - root - INFO - Epoch(s): 3 train Loss: 109.39 validate Loss: 106.93 +2022-09-01 17:53:39,419 - root - INFO - Epoch(s): 4 train Loss: 106.48 validate Loss: 103.37 +... +2022-09-01 17:53:57,744 - root - INFO - Epoch(s): 98 train Loss: 97.63 validate Loss: 96.76 +2022-09-01 17:53:57,945 - root - INFO - Epoch(s): 99 train Loss: 97.75 validate Loss: 96.58 +2022-09-01 17:53:57,969 - root - INFO - Schedule recurrent job with time interval 1 minute(s). +2022-09-01 17:53:57,973 - apscheduler.scheduler - INFO - Adding job tentatively -- it will be properly scheduled when the scheduler starts +2022-09-01 17:53:57,974 - apscheduler.scheduler - INFO - Added job "partial" to job store "default" +2022-09-01 17:53:57,974 - apscheduler.scheduler - INFO - Scheduler started +2022-09-01 17:53:57,975 - apscheduler.scheduler - DEBUG - Looking for jobs to run +2022-09-01 17:53:57,975 - apscheduler.scheduler - DEBUG - Next wakeup is due at 2022-09-01 17:54:57.973533+08:00 (in 59.998006 seconds) +``` + +## Output Data + +If gala-anteater detects an exception, it sends the result to Kafka. The output data format is as follows: + +```json +{ + "Timestamp":1659075600000, + "Attributes":{ + "entity_id":"xxxxxx_sli_1513_18", + "event_id":"1659075600000_1fd37742xxxx_sli_1513_18", + "event_type":"app" + }, + "Resource":{ + "anomaly_score":1.0, + "anomaly_count":13, + "total_count":13, + "duration":60, + "anomaly_ratio":1.0, + "metric_label":{ + "machine_id":"1fd37742xxxx", + "tgid":"1513", + "conn_fd":"18" + }, + "recommend_metrics":{ + "gala_gopher_tcp_link_notack_bytes":{ + "label":{ + "__name__":"gala_gopher_tcp_link_notack_bytes", + "client_ip":"x.x.x.165", + "client_port":"51352", + "hostname":"localhost.localdomain", + "instance":"x.x.x.172:8888", + "job":"prometheus-x.x.x.172", + "machine_id":"xxxxxx", + "protocol":"2", + "role":"0", + "server_ip":"x.x.x.172", + "server_port":"8888", + "tgid":"3381701" + }, + "score":0.24421279500639545 + }, + ... + }, + "metrics":"gala_gopher_ksliprobe_recent_rtt_nsec" + }, + "SeverityText":"WARN", + "SeverityNumber":14, + "Body":"TimeStamp, WARN, APP may be impacting sli performance issues." +} +``` diff --git a/docs/en/server/maintenance/gala/using_gala_gopher.md b/docs/en/server/maintenance/gala/using_gala_gopher.md new file mode 100644 index 0000000000000000000000000000000000000000..7cfe3e572061019021c736e59dd68cd907a9fa77 --- /dev/null +++ b/docs/en/server/maintenance/gala/using_gala_gopher.md @@ -0,0 +1,228 @@ +# Using gala-gopher + +As a data collection module, gala-gopher provides OS-level monitoring capabilities, supports dynamic probe installation and uninstallation, and integrates third-party probes in a non-intrusive manner to quickly expand the monitoring scope. + +This chapter describes how to deploy and use the gala-gopher service. + +## Installation + +Mount the repositories. + +```basic +[oe-22.03-lts-SP4-everything] # openEuler 22.03-LTS-SP4 官方发布源 +name=oe-2203-lts-SP4-everything +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/x86_64/ +enabled=1 +gpgcheck=0 +priority=1 + +[oe-22.03-lts-SP4-epol-update] # openEuler 22.03-LTS-SP4 Update 官方发布源 +name=oe-22.03-lts-SP4-epol-update +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/update/main/x86_64/ +enabled=1 +gpgcheck=0 +priority=1 + +[oe-22.03-lts-SP4-epol-main] # openEuler 22.03-LTS-SP4 EPOL 官方发布源 +name=oe-22.03-lts-SP4-epol-main +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/main/x86_64/ +enabled=1 +gpgcheck=0 +priority=1 +``` + +Install gala-gopher. + +```bash +yum install gala-gopher +``` + +## Configuration + +### Configuration Description + +The configuration file of gala-gopher is **/opt/gala-gopher/gala-gopher.conf**. The configuration items in the file are described as follows (the parts that do not need to be manually configured are not described): + +The following configurations can be modified as required: + +- `global`: gala-gopher global configuration information. + - `log_file_name`: gala-gopher log file name. + - `log_level`: gala-gopher log level. This configuration is not available currently. + - `pin_path`: path for storing the map shared by the eBPF probe. You are advised to retain the default value. +- `metric`: metric output mode. + - `out_channel`: metric output channel. The value can be `web_server` or `kafka`. If this parameter is left empty, the output channel is disabled. + - `kafka_topic`: topic configuration information if the output channel is Kafka. +- `event`: output mode of abnormal events. + - `out_channel`: event output channel. The value can be `logs` or `kafka`. If this parameter is left empty, the output channel is disabled. + - `kafka_topic`: topic configuration information if the output channel is Kafka. +- `meta`: metadata output mode. + - `out_channel`: metadata output channel. The value can be `logs` or `kafka`. If this parameter is left empty, the output channel is disabled. + - `kafka_topic`: topic configuration information if the output channel is Kafka. +- `imdb`: cache specification configuration. + - `max_tables_num`: maximum number of cache tables. In the **/opt/gala-gopher/meta** directory, each meta corresponds to a table. + - `max_records_num`: maximum number of records in each cache table. Generally, each probe generates at least one observation record in an observation period. + - `max_metrics_num`: maximum number of metrics contained in each observation record. + - `record_timeout`: aging time of the cache table. If a record in the cache table is not updated within the aging time, the record is deleted. The unit is second. +- `web_server`: configuration of the web_server output channel. + - `port`: listening port. +- `kafka`: configuration of the Kafka output channel. + - `kafka_broker`: IP address and port number of the Kafka server. +- `logs`: configuration of the logs output channel. + - `metric_dir`: path for storing metric data logs. + - `event_dir`: path for storing abnormal event data logs. + - `meta_dir`: metadata log path. + - `debug_dir`: path of gala-gopher run logs. +- `probes`: native probe configuration. + - `name`: probe name, which must be the same as the native probe name. For example, the name of the **example.probe** probe is **example**. + - `param`: probe startup parameters. For details about the supported parameters, see [Startup Parameters](#startup-parameters). + - `switch`: whether to start a probe. The value can be `on` or `off`. +- `extend_probes`: third-party probe configuration. + - `name`: probe name. + - `command`: command for starting a probe. + - `param`: probe startup parameters. For details about the supported parameters, see [Startup Parameters](#startup-parameters). + - `start_check`: If `switch` is set to `auto`, the system determines whether to start the probe based on the execution result of `start_check`. + - `switch`: whether to start a probe. The value can be `on`, `off`, or `auto`. The value `auto` determines whether to start the probe based on the result of `start_check`. + +### Startup Parameters + +| Parameter| Description | +| ------ | ------------------------------------------------------------ | +| -l | Whether to enable the function of reporting abnormal events. | +| -t | Sampling period, in seconds. By default, the probe reports data every 5 seconds. | +| -T | Delay threshold, in ms. The default value is **0**. | +| -J | Jitter threshold, in ms. The default value is **0**. | +| -O | Offline time threshold, in ms. The default value is **0**. | +| -D | Packet loss threshold. The default value is **0**. | +| -F | If this parameter is set to `task`, data is filtered by **task_whitelist.conf**. If this parameter is set to the PID of a process, only the process is monitored.| +| -P | Range of probe programs loaded to each probe. Currently, the tcpprobe and taskprobe probes are involved.| +| -U | Resource usage threshold (upper limit). The default value is **0** (%). | +| -L | Resource usage threshold (lower limit). The default value is **0** (%). | +| -c | Whether the probe (TCP) identifies `client_port`. The default value is **0** (no). | +| -N | Name of the observation process of the specified probe (ksliprobe). The default value is **NULL**. | +| -p | Binary file path of the process to be observed, for example, `nginx_probe`. You can run `-p /user/local/sbin/nginx` to specify the Nginx file path. The default value is **NULL**.| +| -w | Filtering scope of monitored applications, for example, `-w /opt/gala-gopher/task_whitelist.conf`. You can write the names of the applications to be monitored to the **task_whitelist.conf** file. The default value is **NULL**, indicating that the applications are not filtered.| +| -n | NIC to mount tc eBPF. The default value is **NULL**, indicating that all NICs are mounted. Example: `-n eth0`| + +### Configuration File Example + +- Select the data output channels. + + ```yaml + metric = + { + out_channel = "web_server"; + kafka_topic = "gala_gopher"; + }; + + event = + { + out_channel = "kafka"; + kafka_topic = "gala_gopher_event"; + }; + + meta = + { + out_channel = "kafka"; + kafka_topic = "gala_gopher_metadata"; + }; + ``` + +- Configure Kafka and Web Server. + + ```yaml + web_server = + { + port = 8888; + }; + + kafka = + { + kafka_broker = ":9092"; + }; + ``` + +- Select the probe to be enabled. The following is an example. + + ```yaml + probes = + ( + { + name = "system_infos"; + param = "-t 5 -w /opt/gala-gopher/task_whitelist.conf -l warn -U 80"; + switch = "on"; + }, + ); + extend_probes = + ( + { + name = "tcp"; + command = "/opt/gala-gopher/extend_probes/tcpprobe"; + param = "-l warn -c 1 -P 7"; + switch = "on"; + } + ); + ``` + +## Start + +After the configuration is complete, start gala-gopher. + +```bash +systemctl start gala-gopher.service +``` + +Query the status of the gala-gopher service. + +```bash +systemctl status gala-gopher.service +``` + +If the following information is displayed, the service is started successfully: Check whether the enabled probe is started. If the probe thread does not exist, check the configuration file and gala-gopher run log file. + +![gala-gopher-start-success](./figures/gala-gopher-start-success.png) + +> Note: The root permission is required for deploying and running gala-gopher. + +## How to Use + +### Deployment of External Dependent Software + +![gopher-arch](./figures/gopher-arch.png) + +As shown in the preceding figure, the green parts are external dependent components of gala-gopher. gala-gopher outputs metric data to Prometheus, metadata and abnormal events to Kafka. gala-anteater and gala-spider in gray rectangles obtain data from Prometheus and Kafka. + +> Note: Obtain the installation packages of Kafka and Prometheus from the official websites. + +### Output Data + +- **Metric** + + Prometheus Server has a built-in Express Browser UI. You can use PromQL statements to query metric data. For details, see [Using the expression browser](https://prometheus.io/docs/prometheus/latest/getting_started/#using-the-expression-browser) in the official document. The following is an example. + + If the specified metric is `gala_gopher_tcp_link_rcv_rtt`, the metric data displayed on the UI is as follows: + + ```text + gala_gopher_tcp_link_rcv_rtt{client_ip="x.x.x.165",client_port="1234",hostname="openEuler",instance="x.x.x.172:8888",job="prometheus",machine_id="1fd3774xx",protocol="2",role="0",server_ip="x.x.x.172",server_port="3742",tgid="1516"} 1 + ``` + +- **Metadata** + + You can directly consume data from the Kafka topic `gala_gopher_metadata`. The following is an example. + + ```bash + # Input request + ./bin/kafka-console-consumer.sh --bootstrap-server x.x.x.165:9092 --topic gala_gopher_metadata + # Output data + {"timestamp": 1655888408000, "meta_name": "thread", "entity_name": "thread", "version": "1.0.0", "keys": ["machine_id", "pid"], "labels": ["hostname", "tgid", "comm", "major", "minor"], "metrics": ["fork_count", "task_io_wait_time_us", "task_io_count", "task_io_time_us", "task_hang_count"]} + ``` + +- **Abnormal events** + + You can directly consume data from the Kafka topic `gala_gopher_event`. The following is an example. + + ```bash + # Input request + ./bin/kafka-console-consumer.sh --bootstrap-server x.x.x.165:9092 --topic gala_gopher_event + # Output data + {"timestamp": 1655888408000, "meta_name": "thread", "entity_name": "thread", "version": "1.0.0", "keys": ["machine_id", "pid"], "labels": ["hostname", "tgid", "comm", "major", "minor"], "metrics": ["fork_count", "task_io_wait_time_us", "task_io_count", "task_io_time_us", "task_hang_count"]} + ``` diff --git a/docs/en/server/maintenance/gala/using_gala_spider.md b/docs/en/server/maintenance/gala/using_gala_spider.md new file mode 100644 index 0000000000000000000000000000000000000000..6230d63105ffe7c69bffcd26774fe23cb249065b --- /dev/null +++ b/docs/en/server/maintenance/gala/using_gala_spider.md @@ -0,0 +1,541 @@ +# Using gala-spider + +This chapter describes how to deploy and use gala-spider and gala-inference. + +## gala-spider + +gala-spider provides the OS-level topology drawing function. It periodically obtains the data of all observed objects collected by gala-gopher (an OS-level data collection software) at a certain time point and calculates the topology relationship between them. The generated topology is saved to the graph database ArangoDB. + +### Installation + +Mount the Yum repositories. + +```basic +[oe-22.03-lts-SP4-everything] # openEuler 22.03-LTS-SP4 官方发布源 +name=oe-2203-lts-SP4-everything +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/x86_64/ +enabled=1 +gpgcheck=0 +priority=1 + +[oe-22.03-lts-SP4-epol-update] # openEuler 22.03-LTS-SP4 Update 官方发布源 +name=oe-22.03-lts-SP4-epol-update +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/update/main/x86_64/ +enabled=1 +gpgcheck=0 +priority=1 + +[oe-22.03-lts-SP4-epol-main] # openEuler 22.03-LTS-SP4 EPOL 官方发布源 +name=oe-22.03-lts-SP4-epol-main +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/main/x86_64/ +enabled=1 +gpgcheck=0 +priority=1 +``` + +Install gala-spider. + +```sh +yum install gala-spider +``` + +### Configuration + +#### Configuration File Description + +The configuration file of gala-spider is **/etc/gala-spider/gala-spider.yaml**. The configuration items in this file are described as follows: + +- `global`: global configuration information. + - `data_source`: database for collecting observation metrics. Currently, only `prometheus` is supported. + - `data_agent`: agent for collecting observation metrics. Currently, only `gala_gopher` is supported. +- `spider`: spider configuration information. + - `log_conf`: log configuration information. + - `log_path`: log file path. + - `log_level`: level of the logs to be printed. The value can be `DEBUG`, `INFO`, `WARNING`, `ERROR`, or `CRITICAL`. + - `max_size`: log file size, in MB. + - `backup_count`: number of backup log files. +- `storage`: configuration information about the topology storage service. + - `period`: storage period, in seconds, indicating the interval for storing the topology. + - `database`: graph database for storage. Currently, only `arangodb` is supported. + - `db_conf`: configuration information of the graph database. + - `url`: IP address of the graph database server. + - `db_name`: name of the database where the topology is stored. +- `kafka`: Kafka configuration information. + - `server`: Kafka server address. + - `metadata_topic`: topic name of the observed metadata messages. + - `metadata_group_id`: consumer group ID of the observed metadata messages. +- `prometheus`: Prometheus database configuration information. + - `base_url`: IP address of the Prometheus server. + - `instant_api`: API for collecting data at a single time point. + - `range_api`: API for collecting data in a time range. + - `step`: collection time step, which is configured for `range_api`. + +#### Configuration File Example + +```yaml +global: + data_source: "prometheus" + data_agent: "gala_gopher" + +prometheus: + base_url: "http://localhost:9090/" + instant_api: "/api/v1/query" + range_api: "/api/v1/query_range" + step: 1 + +spider: + log_conf: + log_path: "/var/log/gala-spider/spider.log" + # log level: DEBUG/INFO/WARNING/ERROR/CRITICAL + log_level: INFO + # unit: MB + max_size: 10 + backup_count: 10 + +storage: + # unit: second + period: 60 + database: arangodb + db_conf: + url: "http://localhost:8529" + db_name: "spider" + +kafka: + server: "localhost:9092" + metadata_topic: "gala_gopher_metadata" + metadata_group_id: "metadata-spider" +``` + +### Start + +- Run the following command to start gala-spider. + + ```sh + spider-storage + ``` + +- Use the systemd service to start gala-spider. + + ```sh + systemctl start gala-spider + ``` + +### How to Use + +#### Deployment of External Dependent Software + +The running of gala-spider depends on multiple external software for interaction. Therefore, before starting gala-spider, you need to deploy the software on which gala-spider depends. The following figure shows the software dependency of gala-spider. + +![gala-spider-arch](./figures/gala-spider-arch.png) + +The dotted box on the right indicates the two functional components of gala-spider. The green parts indicate the external components that gala-spider directly depends on, and the gray rectangles indicate the external components that gala-spider indirectly depends on. + +- **spider-storage**: core component of gala-spider, which provides the topology storage function. + 1. Obtains the metadata of the observation object from Kafka. + 2. Obtains information about all observation object instances from Prometheus. + 3. Saves the generated topology to the graph database ArangoDB. +- **gala-inference**: core component of gala-spider, which provides the root cause locating function. It subscribes to abnormal KPI events from Kafka to trigger the root cause locating process of abnormal KPIs, constructs a fault propagation graph based on the topology obtained from the ArangoDB, and outputs the root cause locating result to Kafka. +- **prometheus**: time series database. The observation metric data collected by the gala-gopher component is reported to Prometheus for further processing. +- **kafka**: messaging middleware, which is used to store the observation object metadata reported by gala-gopher, exception events reported by the exception detection component gala-anteater, and root cause locating results reported by the cause-inference component. +- **arangodb**: graph database, which is used to store the topology generated by spider-storage. +- **gala-gopher**: data collection component. It must be deployed in advance. +- **arangodb-ui**: UI provided by ArangoDB, which can be used to query topologies. + +The two functional components in gala-spider are released as independent software packages. + +**spider-storage**: corresponds to the gala-spider software package in this section. + +**gala-inference**: corresponds to the gala-inference software package. + +For details about how to deploy the gala-gopher software, see [Using gala-gopher](./using_gala_gopher.md). This section only describes how to deploy ArangoDB. + +The current ArangoDB version is 3.8.7, which has the following requirements on the operating environment: + +- Only the x86 system is supported. +- GCC 10 or later + +For details about ArangoDB deployment, see [Deployment](https://www.arangodb.com/docs/3.9/deployment.html) in the ArangoDB official document. + +The RPM-based ArangoDB deployment process is as follows: + +1. Configure the Yum repositories. + + ```basic + [oe-22.03-lts-SP4-everything] # openEuler 22.03-LTS-SP4 官方发布源 + name=oe-2203-lts-SP4-everything + baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/x86_64/ + enabled=1 + gpgcheck=0 + priority=1 + + [oe-22.03-lts-SP4-epol-main] # openEuler 22.03-LTS-SP4 EPOL 官方发布源 + name=oe-22.03-lts-SP4-epol-main + baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/main/x86_64/ + enabled=1 + gpgcheck=0 + priority=1 + ``` + +2. Install arangodb3. + + ```sh + yum install arangodb3 + ``` + +3. Modify the configurations. + + The configuration file of the arangodb3 server is **/etc/arangodb3/arangod.conf**. You need to modify the following configurations: + + - `endpoint`: IP address of the arangodb3 server. + - `authentication`: whether identity authentication is required for accessing the arangodb3 server. Currently, gala-spider does not support identity authentication. Therefore, set `authentication` to `false`. + + The following is an example. + + ```yaml + [server] + endpoint = tcp://0.0.0.0:8529 + authentication = false + ``` + +4. Start arangodb3. + + ```sh + systemctl start arangodb3 + ``` + +#### Modifying gala-spider Configuration Items + +After the dependent software is started, you need to modify some configuration items in the gala-spider configuration file. The following is an example. + +Configure the Kafka server address. + +```yaml +kafka: + server: "localhost:9092" +``` + +Configure the Prometheus server address. + +```yaml +prometheus: + base_url: "http://localhost:9090/" +``` + +Configure the IP address of the ArangoDB server. + +```yaml +storage: + db_conf: + url: "http://localhost:8529" +``` + +#### Starting the Service + +Run `systemctl start gala-spider` to start the service. Run `systemctl status gala-spider` to check the startup status. If the following information is displayed, the startup is successful: + +```sh +$ systemctl status gala-spider +● gala-spider.service - a-ops gala spider service + Loaded: loaded (/usr/lib/systemd/system/gala-spider.service; enabled; vendor preset: disabled) + Active: active (running) since Tue 2022-08-30 17:28:38 CST; 1 day 22h ago + Main PID: 2263793 (spider-storage) + Tasks: 3 (limit: 98900) + Memory: 44.2M + CGroup: /system.slice/gala-spider.service + └─2263793 /usr/bin/python3 /usr/bin/spider-storage +``` + +#### Output Example + +You can query the topology generated by gala-spider on the UI provided by ArangoDB. The procedure is as follows: + +1. Enter the IP address of the ArangoDB server in the address box of the browser, for example, ****. The ArangoDB UI is displayed. + +2. Click **DB** in the upper right corner of the page to switch to the spider database. + +3. On the **COLLECTIONS** page, you can view the collections of observation object instances and topology relationships stored in different time segments, as shown in the following figure. + + ![spider topology](./figures/spider_topology.png) + +4. You can query the stored topology using the AQL statements provided by ArangoDB. For details, see the [AQL Documentation](https://www.arangodb.com/docs/3.8/aql/). + +## gala-inference + +gala-inference provides the capability of locating root causes of abnormal KPIs. It uses the exception detection result and topology as the input and outputs the root cause locating result to Kafka. The gala-inference component is archived in the gala-spider project. + +### Installation + +Mount the Yum repositories. + +```basic +[oe-22.03-lts-SP4-everything] # openEuler 22.03-LTS-SP4 官方发布源 +name=oe-2203-lts-SP4-everything +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/x86_64/ +enabled=1 +gpgcheck=0 +priority=1 + +[oe-22.03-lts-SP4-epol-update] # openEuler 22.03-LTS-SP4 Update 官方发布源 +name=oe-22.03-lts-SP4-epol-update +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/update/main/x86_64/ +enabled=1 +gpgcheck=0 +priority=1 + +[oe-22.03-lts-SP4-epol-main] # openEuler 22.03-LTS-SP4 EPOL 官方发布源 +name=oe-22.03-lts-SP4-epol-main +baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/main/x86_64/ +enabled=1 +gpgcheck=0 +priority=1 +``` + +Install gala-inference. + +```sh +yum install gala-inference +``` + +### Configuration + +#### Configuration File Description + +The configuration items in the gala-inference configuration file **/etc/gala-inference/gala-inference.yaml** are described as follows: + +- `inference`: configuration information about the root cause locating algorithm. + - `tolerated_bias`: tolerable time offset for querying the topology at the exception time point, in seconds. + - `topo_depth`: maximum depth for topology query. + - `root_topk`: yop *K* root cause metrics generated in the root cause locating result. + - `infer_policy`: root cause derivation policy, which can be `dfs` or `rw`. + - `sample_duration`: sampling period of historical metric data, in seconds. + - `evt_valid_duration`: valid period of abnormal system metric events during root cause locating, in seconds. + - `evt_aging_duration`: aging period of abnormal metric events during root cause locating, in seconds. +- `kafka`: Kafka configuration information. + - `server`: IP address of the Kafka server. + - `metadata_topic`: configuration information about the observed metadata messages. + - `topic_id`: topic name of the observed metadata messages. + - `group_id`: consumer group ID of the observed metadata messages. + - `abnormal_kpi_topic`: configuration information about abnormal KPI event messages. + - `topic_id`: topic name of the abnormal KPI event messages. + - `group_id`: consumer group ID of the abnormal KPI event messages. + - `abnormal_metric_topic`: configuration information about abnormal metric event messages. + - `topic_id`: topic name of the abnormal metric event messages. + - `group_id`: consumer group ID of the abnormal system metric event messages. + - `consumer_to`: timeout interval for consuming abnormal system metric event messages, in seconds. + - `inference_topic`: configuration information about the output event messages of the root cause locating result. + - `topic_id`: topic name of the output event messages of the root cause locating result. +- `arangodb`: configuration information about the ArangoDB graph database, which is used to query sub-topologies required for root cause locating. + - `url`: IP address of the graph database server. + - `db_name`: name of the database where the topology is stored. +- `log_conf`: log configuration information. + - `log_path`: log file path. + - `log_level`: level of the logs to be printed. The value can be `DEBUG`, `INFO`, `WARNING`, `ERROR`, or `CRITICAL`. + - `max_size`: log file size, in MB. + - `backup_count`: number of backup log files. +- `prometheus`: Prometheus database configuration information, which is used to obtain historical time series data of metrics. + - `base_url`: IP address of the Prometheus server. + - `range_api`: API for collecting data in a time range. + - `step`: collection time step, which is configured for `range_api`. + +#### Configuration File Example + +```yaml +inference: + # Tolerable time offset for querying the topology at the exception time point, in seconds. + tolerated_bias: 120 + topo_depth: 10 + root_topk: 3 + infer_policy: "dfs" + # Unit: second + sample_duration: 600 + # Valid period of abnormal metric events during root cause locating, in seconds. + evt_valid_duration: 120 + # Aging period of abnormal metric events, in seconds. + evt_aging_duration: 600 + +kafka: + server: "localhost:9092" + metadata_topic: + topic_id: "gala_gopher_metadata" + group_id: "metadata-inference" + abnormal_kpi_topic: + topic_id: "gala_anteater_hybrid_model" + group_id: "abn-kpi-inference" + abnormal_metric_topic: + topic_id: "gala_anteater_metric" + group_id: "abn-metric-inference" + consumer_to: 1 + inference_topic: + topic_id: "gala_cause_inference" + +arangodb: + url: "http://localhost:8529" + db_name: "spider" + +log: + log_path: "/var/log/gala-inference/inference.log" + # log level: DEBUG/INFO/WARNING/ERROR/CRITICAL + log_level: INFO + # unit: MB + max_size: 10 + backup_count: 10 + +prometheus: + base_url: "http://localhost:9090/" + range_api: "/api/v1/query_range" + step: 5 +``` + +### Start + +- Run the following command to start gala-inference. + + ```sh + gala-inference + ``` + +- Use the systemd service to start gala-inference. + + ```sh + systemctl start gala-inference + ``` + +### How to Use + +#### Dependent Software Deployment + +The running dependency of gala-inference is the same as that of gala-spider. For details, see [Deployment of External Dependent Software](#deployment-of-external-dependent-software). In addition, gala-inference indirectly depends on the running of [gala-spider](#gala-spider) and [gala-anteater](./using_gala_anteater.md). Deploy gala-spider and gala-anteater in advance. + +#### Modify configuration items + +Modify some configuration items in the gala-inference configuration file. The following is an example. + +Configure the Kafka server address. + +```yaml +kafka: + server: "localhost:9092" +``` + +Configure the Prometheus server address. + +```yaml +prometheus: + base_url: "http://localhost:9090/" +``` + +Configure the IP address of the ArangoDB server. + +```yaml +arangodb: + url: "http://localhost:8529" +``` + +#### Starting the Service + +Run `systemctl start gala-inference` to start the service. Run `systemctl status gala-inference` to check the startup status. If the following information is displayed, the startup is successful: + +```sh +[root@openEuler ~]# systemctl status gala-inference +● gala-inference.service - a-ops gala inference service + Loaded: loaded (/usr/lib/systemd/system/gala-inference.service; enabled; vendor preset: disabled) + Active: active (running) since Tue 2022-08-30 17:55:33 CST; 1 day 22h ago + Main PID: 2445875 (gala-inference) + Tasks: 10 (limit: 98900) + Memory: 48.7M + CGroup: /system.slice/gala-inference.service + └─2445875 /usr/bin/python3 /usr/bin/gala-inference +``` + +#### Output Example + +When the exception detection module gala-anteater detects a KPI exception, it exports the corresponding abnormal KPI event to Kafka. The gala-inference keeps monitoring the message of the abnormal KPI event. If gala-inference receives the message of the abnormal KPI event, root cause locating is triggered. The root cause locating result is exported to Kafka. You can view the root cause locating result on the Kafka server. The basic procedure is as follows: + +1. If Kafka is installed using the source code, go to the Kafka installation directory. + + ```sh + cd /root/kafka_2.13-2.8.0 + ``` + +2. Run the command for consuming the topic to obtain the output of root cause locating. + + ```sh + ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic gala_cause_inference + ``` + + Output example: + + ```json + { + "Timestamp": 1661853360000, + "event_id": "1661853360000_1fd37742xxxx_sli_12154_19", + "Attributes": { + "event_id": "1661853360000_1fd37742xxxx_sli_12154_19" + }, + "Resource": { + "abnormal_kpi": { + "metric_id": "gala_gopher_sli_rtt_nsec", + "entity_id": "1fd37742xxxx_sli_12154_19", + "timestamp": 1661853360000, + "metric_labels": { + "machine_id": "1fd37742xxxx", + "tgid": "12154", + "conn_fd": "19" + } + }, + "cause_metrics": [ + { + "metric_id": "gala_gopher_proc_write_bytes", + "entity_id": "1fd37742xxxx_proc_12154", + "metric_labels": { + "__name__": "gala_gopher_proc_write_bytes", + "cmdline": "/opt/redis/redis-server x.x.x.172:3742", + "comm": "redis-server", + "container_id": "5a10635e2c43", + "hostname": "openEuler", + "instance": "x.x.x.172:8888", + "job": "prometheus", + "machine_id": "1fd37742xxxx", + "pgid": "12154", + "ppid": "12126", + "tgid": "12154" + }, + "timestamp": 1661853360000, + "path": [ + { + "metric_id": "gala_gopher_proc_write_bytes", + "entity_id": "1fd37742xxxx_proc_12154", + "metric_labels": { + "__name__": "gala_gopher_proc_write_bytes", + "cmdline": "/opt/redis/redis-server x.x.x.172:3742", + "comm": "redis-server", + "container_id": "5a10635e2c43", + "hostname": "openEuler", + "instance": "x.x.x.172:8888", + "job": "prometheus", + "machine_id": "1fd37742xxxx", + "pgid": "12154", + "ppid": "12126", + "tgid": "12154" + }, + "timestamp": 1661853360000 + }, + { + "metric_id": "gala_gopher_sli_rtt_nsec", + "entity_id": "1fd37742xxxx_sli_12154_19", + "metric_labels": { + "machine_id": "1fd37742xxxx", + "tgid": "12154", + "conn_fd": "19" + }, + "timestamp": 1661853360000 + } + ] + } + ] + }, + "SeverityText": "WARN", + "SeverityNumber": 13, + "Body": "A cause inferring event for an abnormal event" + } + ``` diff --git a/docs/en/server/maintenance/images/c50cb9df64f4659787c810167c89feb4_1884x257.png b/docs/en/server/maintenance/images/c50cb9df64f4659787c810167c89feb4_1884x257.png new file mode 100644 index 0000000000000000000000000000000000000000..01081f25627731c56764c196e3fae32d55bc7023 Binary files /dev/null and b/docs/en/server/maintenance/images/c50cb9df64f4659787c810167c89feb4_1884x257.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001321685172.png b/docs/en/server/maintenance/images/zh-cn_image_0000001321685172.png new file mode 100644 index 0000000000000000000000000000000000000000..a98265bdf251608c0ff394fefe545cd3192bdb28 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001321685172.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001322112990.png b/docs/en/server/maintenance/images/zh-cn_image_0000001322112990.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4b32bf2b36595abe10f2550cda5714bc355553 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001322112990.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001322219840.png b/docs/en/server/maintenance/images/zh-cn_image_0000001322219840.png new file mode 100644 index 0000000000000000000000000000000000000000..48b28664df46ddf9aa38c7570bb9e9edb8080ac9 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001322219840.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001322372918.png b/docs/en/server/maintenance/images/zh-cn_image_0000001322372918.png new file mode 100644 index 0000000000000000000000000000000000000000..5424367c9bc564e713220ba87f963096881833b8 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001322372918.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001322379488.png b/docs/en/server/maintenance/images/zh-cn_image_0000001322379488.png new file mode 100644 index 0000000000000000000000000000000000000000..8b18cdca066be43b74443498edc5500ea9e1e608 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001322379488.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001335457246.png b/docs/en/server/maintenance/images/zh-cn_image_0000001335457246.png new file mode 100644 index 0000000000000000000000000000000000000000..325d6a8ce097db0b92b1a883bc4b3d4ad0bc6a49 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001335457246.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001335816300.png b/docs/en/server/maintenance/images/zh-cn_image_0000001335816300.png new file mode 100644 index 0000000000000000000000000000000000000000..619f0c33503cd27d92f227216c722d554b9132f2 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001335816300.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001336448570.png b/docs/en/server/maintenance/images/zh-cn_image_0000001336448570.png new file mode 100644 index 0000000000000000000000000000000000000000..4bd494d78d83fef2e8a89c80e17c9b6db892a2e9 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001336448570.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001336729664.png b/docs/en/server/maintenance/images/zh-cn_image_0000001336729664.png new file mode 100644 index 0000000000000000000000000000000000000000..4d73507cceab2e0b123d6864d9f86c86eb1eee2f Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001336729664.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337000118.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337000118.png new file mode 100644 index 0000000000000000000000000000000000000000..37131647778506f24be4ff401392a9cc209a36eb Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337000118.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337039920.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337039920.png new file mode 100644 index 0000000000000000000000000000000000000000..40c07e9b6ec27cdbe47d39788736b892f1174cc8 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337039920.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337051916.jpg b/docs/en/server/maintenance/images/zh-cn_image_0000001337051916.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a2083b7783041884394f796222352d8772ada6cc Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337051916.jpg differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337053248.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337053248.png new file mode 100644 index 0000000000000000000000000000000000000000..8859f37749a4f8a4394e24ddfb54fc473e8c10c2 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337053248.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337172594.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337172594.png new file mode 100644 index 0000000000000000000000000000000000000000..4e806f83c57880543a777807778f14eeb0105aba Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337172594.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337212144.jpg b/docs/en/server/maintenance/images/zh-cn_image_0000001337212144.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6f0874250475f598efa7375516109b540918fb8 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337212144.jpg differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337260780.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337260780.png new file mode 100644 index 0000000000000000000000000000000000000000..09d521d933f5fa0caacc592ea92acee959786051 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337260780.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337268560.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337268560.png new file mode 100644 index 0000000000000000000000000000000000000000..663f67428487d88e23aa9c3291c31399fec2f2c3 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337268560.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337268820.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337268820.png new file mode 100644 index 0000000000000000000000000000000000000000..cd1732ee870a6dde0acc54642f34793933ce3356 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337268820.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337419960.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337419960.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b493bf1e57f130e122b59e99ff45cd44539dad Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337419960.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337420372.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337420372.png new file mode 100644 index 0000000000000000000000000000000000000000..2300bcd7426748236fd48b85688bd3d1fa3315df Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337420372.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337422904.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337422904.png new file mode 100644 index 0000000000000000000000000000000000000000..01e250c6f7cbb64abe0b136cd80fda7ae68b629d Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337422904.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337424024.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337424024.png new file mode 100644 index 0000000000000000000000000000000000000000..6532d98885f756c6704bc4bacc0f9133d78405a7 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337424024.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337424304.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337424304.png new file mode 100644 index 0000000000000000000000000000000000000000..9ecb384ed58458c24d8e3ae729c4de197b982b86 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337424304.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337427216.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337427216.png new file mode 100644 index 0000000000000000000000000000000000000000..8633dbdd658f98501dfc91a704395260f2d4df3c Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337427216.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337427392.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337427392.png new file mode 100644 index 0000000000000000000000000000000000000000..74f5cb24520c94de8628b2e64e6916c563f9f5a2 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337427392.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337533690.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337533690.png new file mode 100644 index 0000000000000000000000000000000000000000..1f02d9b155754a113347a54a7d35ba9b060175a8 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337533690.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337536842.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337536842.png new file mode 100644 index 0000000000000000000000000000000000000000..5a9ee2c989638c9a6aad3fcfb35bb9b9f2d4683c Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337536842.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337579708.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337579708.png new file mode 100644 index 0000000000000000000000000000000000000000..5cd8ed939434e6447dd55679eeaa3756d861751f Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337579708.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337580216.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337580216.png new file mode 100644 index 0000000000000000000000000000000000000000..5516b8d261b769287c74cf860a6708fcde6bbb8a Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337580216.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337584296.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337584296.png new file mode 100644 index 0000000000000000000000000000000000000000..fa76ecb59018fb154ffe1d9f6da1484d652f3ac1 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337584296.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337696078.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337696078.png new file mode 100644 index 0000000000000000000000000000000000000000..3864852e345eaf01794042feaa85b012b8af71de Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337696078.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337740252.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337740252.png new file mode 100644 index 0000000000000000000000000000000000000000..fd83fb600a54ab8bc39ee2ae54210be8b6c48973 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337740252.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337740540.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337740540.png new file mode 100644 index 0000000000000000000000000000000000000000..b8e25128a47dccaed733fc192f52f2ca7828e516 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337740540.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337747132.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337747132.png new file mode 100644 index 0000000000000000000000000000000000000000..41ea7d47f5fe5fca46816d93cb08b5da00abc0ad Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337747132.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337748300.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337748300.png new file mode 100644 index 0000000000000000000000000000000000000000..32488dc1740408834954cf8d57a2843d98f09c2e Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337748300.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001337748528.png b/docs/en/server/maintenance/images/zh-cn_image_0000001337748528.png new file mode 100644 index 0000000000000000000000000000000000000000..f2d62c85c844c2756f4d27a48711560dfb9615ea Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001337748528.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001372249333.png b/docs/en/server/maintenance/images/zh-cn_image_0000001372249333.png new file mode 100644 index 0000000000000000000000000000000000000000..48cd37225954e212cb3e159acc137866d8edc362 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001372249333.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001372748125.png b/docs/en/server/maintenance/images/zh-cn_image_0000001372748125.png new file mode 100644 index 0000000000000000000000000000000000000000..5f6326b9415cf766dd8379dbadd5aa1a0dc6861f Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001372748125.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001372821865.png b/docs/en/server/maintenance/images/zh-cn_image_0000001372821865.png new file mode 100644 index 0000000000000000000000000000000000000000..21e8dad1cd90755440cf858523b12c036a91e1ad Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001372821865.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001372824637.png b/docs/en/server/maintenance/images/zh-cn_image_0000001372824637.png new file mode 100644 index 0000000000000000000000000000000000000000..aefb5d83c079e6718ef88fd934b4b496cdc29565 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001372824637.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001373373585.png b/docs/en/server/maintenance/images/zh-cn_image_0000001373373585.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e5e47c9beca2c7c7630d78916f80eda652b52a Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001373373585.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001373379529.png b/docs/en/server/maintenance/images/zh-cn_image_0000001373379529.png new file mode 100644 index 0000000000000000000000000000000000000000..daa40b49e679668905632f25ff42bf8599ba0ead Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001373379529.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001384808269.png b/docs/en/server/maintenance/images/zh-cn_image_0000001384808269.png new file mode 100644 index 0000000000000000000000000000000000000000..be18ecef3a149d5742f18535552f66f26ab34832 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001384808269.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001385585749.png b/docs/en/server/maintenance/images/zh-cn_image_0000001385585749.png new file mode 100644 index 0000000000000000000000000000000000000000..c13604ab7095c2a7717bde1384f0aea3d53f69e3 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001385585749.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001385611905.png b/docs/en/server/maintenance/images/zh-cn_image_0000001385611905.png new file mode 100644 index 0000000000000000000000000000000000000000..8c233e40a21e678ddf4115c2e2e80c96e25a60ce Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001385611905.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001385905845.png b/docs/en/server/maintenance/images/zh-cn_image_0000001385905845.png new file mode 100644 index 0000000000000000000000000000000000000000..a6cb8bc4a188ef444919d71f7f16baa06422788b Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001385905845.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001386149037.png b/docs/en/server/maintenance/images/zh-cn_image_0000001386149037.png new file mode 100644 index 0000000000000000000000000000000000000000..da73fead24d8805bb43287f53c757e80ff0d597f Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001386149037.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001386699925.png b/docs/en/server/maintenance/images/zh-cn_image_0000001386699925.png new file mode 100644 index 0000000000000000000000000000000000000000..cf5b13b35e65ed0143a01a5bcad1e11eaddaded7 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001386699925.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001387293085.png b/docs/en/server/maintenance/images/zh-cn_image_0000001387293085.png new file mode 100644 index 0000000000000000000000000000000000000000..7f56b020949c53d018eba016952c2409f0d7dca9 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001387293085.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001387413509.png b/docs/en/server/maintenance/images/zh-cn_image_0000001387413509.png new file mode 100644 index 0000000000000000000000000000000000000000..2245427058fc31f3e5d7f40062c0551936a67199 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001387413509.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001387413793.png b/docs/en/server/maintenance/images/zh-cn_image_0000001387413793.png new file mode 100644 index 0000000000000000000000000000000000000000..aa649bf7215662819766d897513fb711d9d1e7f8 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001387413793.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001387415629.png b/docs/en/server/maintenance/images/zh-cn_image_0000001387415629.png new file mode 100644 index 0000000000000000000000000000000000000000..01189358354090591de6580f8ef88ef78ddba3a1 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001387415629.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001387691985.png b/docs/en/server/maintenance/images/zh-cn_image_0000001387691985.png new file mode 100644 index 0000000000000000000000000000000000000000..31c3096fa837c1b397ab2fe27acdd87e2cec36de Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001387691985.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001387692269.jpg b/docs/en/server/maintenance/images/zh-cn_image_0000001387692269.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b79e3ddf78520277046b933c4662c6b72f45ab85 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001387692269.jpg differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001387692893.png b/docs/en/server/maintenance/images/zh-cn_image_0000001387692893.png new file mode 100644 index 0000000000000000000000000000000000000000..49ea515d834b58d4ded14c55a6a2b07034d76137 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001387692893.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001387755969.png b/docs/en/server/maintenance/images/zh-cn_image_0000001387755969.png new file mode 100644 index 0000000000000000000000000000000000000000..b2daa95d6b757e7bd443d8fd961922f248dd6853 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001387755969.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001387780357.png b/docs/en/server/maintenance/images/zh-cn_image_0000001387780357.png new file mode 100644 index 0000000000000000000000000000000000000000..1aab3b8be2cd0c906253d70036a9fee3050a1055 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001387780357.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001387784693.png b/docs/en/server/maintenance/images/zh-cn_image_0000001387784693.png new file mode 100644 index 0000000000000000000000000000000000000000..62a40117a892ba6c163be81bce1d198c2920f0e9 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001387784693.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001387787605.png b/docs/en/server/maintenance/images/zh-cn_image_0000001387787605.png new file mode 100644 index 0000000000000000000000000000000000000000..8c1893e16fb929f77bb6b9a70cb25d3479dd684c Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001387787605.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001387855149.png b/docs/en/server/maintenance/images/zh-cn_image_0000001387855149.png new file mode 100644 index 0000000000000000000000000000000000000000..731e957c367cb05e4229f53cf97dcee2cde69dff Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001387855149.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001387857005.png b/docs/en/server/maintenance/images/zh-cn_image_0000001387857005.png new file mode 100644 index 0000000000000000000000000000000000000000..872f5c9eb05169831df4ba49d017629e8a943c64 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001387857005.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001387902849.png b/docs/en/server/maintenance/images/zh-cn_image_0000001387902849.png new file mode 100644 index 0000000000000000000000000000000000000000..ffe2043c199308ed2033e3eb02a0662a65141ece Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001387902849.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001387907229.png b/docs/en/server/maintenance/images/zh-cn_image_0000001387907229.png new file mode 100644 index 0000000000000000000000000000000000000000..084fbea1aee4d09b1e623c66b4f07641c7a0208d Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001387907229.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001387908045.png b/docs/en/server/maintenance/images/zh-cn_image_0000001387908045.png new file mode 100644 index 0000000000000000000000000000000000000000..1fca645598e7a67da6e75b98c44f3c9a740be374 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001387908045.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001387908453.png b/docs/en/server/maintenance/images/zh-cn_image_0000001387908453.png new file mode 100644 index 0000000000000000000000000000000000000000..b97804a0a575fd18235e7a0c7e4f2d0183e3b460 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001387908453.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001387961737.png b/docs/en/server/maintenance/images/zh-cn_image_0000001387961737.png new file mode 100644 index 0000000000000000000000000000000000000000..ae4ddce8cf2629b811e9711c61186b3efa4dfe3c Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001387961737.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001388020197.png b/docs/en/server/maintenance/images/zh-cn_image_0000001388020197.png new file mode 100644 index 0000000000000000000000000000000000000000..1816e1e068ee0294677ebb357ffd158a14bb86cf Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001388020197.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001388024321.png b/docs/en/server/maintenance/images/zh-cn_image_0000001388024321.png new file mode 100644 index 0000000000000000000000000000000000000000..da3ba54203ded0093b7c2b5308de0e2afd85a146 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001388024321.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001388024397.png b/docs/en/server/maintenance/images/zh-cn_image_0000001388024397.png new file mode 100644 index 0000000000000000000000000000000000000000..4e4531dd19dc703399c9d4dd0e95236fa9a064c8 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001388024397.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001388028161.png b/docs/en/server/maintenance/images/zh-cn_image_0000001388028161.png new file mode 100644 index 0000000000000000000000000000000000000000..b3beb92520c34ba771d096a8a146fb2c5b5edbb7 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001388028161.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001388028537.png b/docs/en/server/maintenance/images/zh-cn_image_0000001388028537.png new file mode 100644 index 0000000000000000000000000000000000000000..ffb244306787c397ef4a9f4d9c3eb504172d3777 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001388028537.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001388184025.png b/docs/en/server/maintenance/images/zh-cn_image_0000001388184025.png new file mode 100644 index 0000000000000000000000000000000000000000..cbce6fe1e32c547426319923c0fdb13e95554b99 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001388184025.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001388187249.png b/docs/en/server/maintenance/images/zh-cn_image_0000001388187249.png new file mode 100644 index 0000000000000000000000000000000000000000..0ac83f21e269d909e550b68cb0bdc6347c05dcac Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001388187249.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001388187325.png b/docs/en/server/maintenance/images/zh-cn_image_0000001388187325.png new file mode 100644 index 0000000000000000000000000000000000000000..02dbdf218da2cb1c844dfc13a463875df5124d48 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001388187325.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001388188365.png b/docs/en/server/maintenance/images/zh-cn_image_0000001388188365.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe3bfb48446bab88e3e622b9f8066383f269590 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001388188365.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001388241577.png b/docs/en/server/maintenance/images/zh-cn_image_0000001388241577.png new file mode 100644 index 0000000000000000000000000000000000000000..8dacb6e343ea4c750904fa090bb99213e012379d Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001388241577.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001388972645.png b/docs/en/server/maintenance/images/zh-cn_image_0000001388972645.png new file mode 100644 index 0000000000000000000000000000000000000000..e32606925f4bb4380b262d9f946d4cd106202b87 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001388972645.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_image_0000001389098425.png b/docs/en/server/maintenance/images/zh-cn_image_0000001389098425.png new file mode 100644 index 0000000000000000000000000000000000000000..c63903009ab9ba454f169250632dbec1b3c94467 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_image_0000001389098425.png differ diff --git a/docs/en/server/maintenance/images/zh-cn_other_0000001337581224.jpeg b/docs/en/server/maintenance/images/zh-cn_other_0000001337581224.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2c019b828bdf9c699f203f09ba3542968ff21262 Binary files /dev/null and b/docs/en/server/maintenance/images/zh-cn_other_0000001337581224.jpeg differ diff --git a/docs/en/server/maintenance/kernel_live_upgrade/_toc.yaml b/docs/en/server/maintenance/kernel_live_upgrade/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1e274ea1d962aeb7dd4bd3a6d55fc1835cb2c30d --- /dev/null +++ b/docs/en/server/maintenance/kernel_live_upgrade/_toc.yaml @@ -0,0 +1,8 @@ +label: Kernel Live Upgrade Guide +isManual: true +description: User-space automation tool that facilitates rapid kernel restarts and program live migration, enabling kernel hot-swapping functionality +sections: + - label: Installation and Deployment + href: ./installation_and_deployment.md + - label: Usage Guide + href: ./usage_guide.md diff --git a/docs/en/server/maintenance/kernel_live_upgrade/installation_and_deployment.md b/docs/en/server/maintenance/kernel_live_upgrade/installation_and_deployment.md new file mode 100644 index 0000000000000000000000000000000000000000..0f5297f406a72164917572b4bf151d5441a25a9d --- /dev/null +++ b/docs/en/server/maintenance/kernel_live_upgrade/installation_and_deployment.md @@ -0,0 +1,172 @@ +# Installation and Deployment + +This document describes how to install and deploy the kernel live upgrade tool. + +## Hardware and Software Requirements + +### Hardware Requirements + +- Currently, only the ARM64 architecture is supported. + +### Software Requirements + +- Operating system: openEuler 22.03 LTS SP4 + +## Environment Preparation + +- Install the openEuler system. For details, see the [_openEuler 22.03 LTS SP4 Installation Guide_](./../../installation_upgrade/installation/installation_guide.md). + +- The root permission is required for installing the kernel live upgrade tool. + +## Installing the Kernel Live Upgrade Tool + +This section describes how to install the kernel live upgrade tool. + +Perform the following steps: + +1. Mount the ISO file of openEuler. + + ```shell + mount openEuler-22.03-LTS-SP4-aarch64-dvd.iso /mnt + ``` + +2. Configure the local yum repository. + + ```shell + vi /etc/yum.repos.d/local.repo + ``` + + The configurations are as follows: + + ```text + [local] + name=local + baseurl=file:///mnt + gpgcheck=1 + enabled=1 + ``` + +3. Import the GPG public key of the RPM digital signature to the system. + + ```shell + rpm --import /mnt/RPM-GPG-KEY-openEuler + ``` + +4. Install the kernel live upgrade tool. + + ```shell + yum install nvwa -y + ``` + +5. Check whether the installation is successful. If the command output is as follows, the installation is successful. + + ```shell + $ rpm -qa | grep nvwa + nvwa-xxx + ``` + +## Deploying the Kernel Live Upgrade Tool + +This section describes how to configure and deploy the kernel live upgrade tool. + +### Configurations + +The configuration files of the kernel live upgrade tool are stored in /etc/nvwa. The configuration files are as follows: + +- nvwa-restore.yaml + + This configuration file is used to instruct the kernel live upgrade tool to save and recover the process during the kernel live upgrade. The configuration is as follows: + + - pids + + Specifies the processes that need to be retained and recovered during the NVWA live upgrade. The processes are identified by process ID (PID). Note that the processes managed by NVWA are automatically recovered after the NVWA service is started. + + - services + + Specifies the services that need to be retained and recovered during NVWA live upgrade. Compared to PIDs, the kernel live upgrade tool can directly save and recover the process. For services, the kernel live upgrade tool depends on the systemd to perform related operations. The service name must be the same as the service name used in systemd. Note that whether the service managed by NVWA needs to be automatically recovered when the NVWA is started depends on whether the service is enabled in the systemd. Currently, only the notify and oneshot service types are supported. + + - restore_net + + Specifies whether the kernel live upgrade tool is required to save and recover the network configuration. If the network configuration is incorrect, the network may be unavailable after the recovery. This function is disabled by default. + + - enable_quick_kexec + + Used to specify whether to enable the quick kexec feature. quick kexec is a feature launched by the NVWA community to accelerate the kernel restart process. To use this feature, add "quickkexec=128M" to cmdline. 128 indicates the size of the memory allocated to the quick kexec feature. The memory is used to load the kernel and initramfs during the upgrade. Therefore, the size must be greater than the total size of the kernel and initramfs involved in the upgrade. This feature is disabled by default. + + - enable_pin_memory + + Used to specify whether to enable the pin memory feature. pin memory is a feature launched by the NVWA community to accelerate the process storage and recovery process. The pin_memory feature is not supported for multi-process recovery. To use this feature, you need to add "max_pin_pid_num=10 redirect_space_size=2M pinmemory=200M@0x640000000" to cmdline. + + max_pin_pid_num indicates the maximum number of processes that support pin memory recovery. redirect_space_size indicates the reserved memory space required for redirecting physical pages during pin memory recovery. You are advised to set redirect_space_size to 1/100 of the total reserved pin memory. pinmemory indicates the start point and size of the memory segment. The 200 MB space starting from 0x640000000 is the total memory space used by the pin memory. This space should not be used by other programs. + +- Configuration example of **nvwa-restore.yaml** + +```yaml +pids: + - 14109 +services: + - redis +restore_net: false +enable_quick_kexec: true +enable_pin_memory: true +``` + +- **nvwa-server.yaml** + + This file contains the configuration information required during the running of the kernel live upgrade tool. The details are as follows: + + - criu_dir + + This parameter specifies the directory for storing the information generated when the kernel live upgrade tool saves the running information. Note that the information may occupy a large amount of disk space. + + - criu_exe + + This parameter specifies the path of the CRIU executable file used by the kernel live upgrade tool. You are advised not to change the path unless you need to debug the CRIU. + + - kexec_exe + + This parameter specifies the path of the kexec executable file used by the kernel live upgrade tool. You are advised not to change the path unless you need to debug kexec. + + - systemd_etc + + This parameter specifies the path of the folder used to overwrite the systemd configuration file. The path is determined by the systemd. Generally, you do not need to change the path. + + - log_dir + + This parameter stores the log information generated by the kernel live upgrade tool. The log module is not enabled currently. For details about how to view logs of the kernel live upgrade tool, see [_How to Run_](./usage_guide.md#generated-log-information). + +- Configuration example of **nvwa-server.yaml** + +```yaml +criu_dir: /var/nvwa/running/ +criu_exe: /usr/sbin/criu +kexec_exe: /usr/sbin/kexec +systemd_etc: /etc/systemd/system/ +log_dir: /etc/nvwa/log/ +``` + +## Enabling the Kernel Live Upgrade Tool + +The running of the kernel live upgrade tool depends on the configuration file. After the configuration file is modified, you need to run the kernel live upgrade tool again. + +After the installation is successful, you can run the systemd commands to operate the kernel live upgrade tool. + +- Enable NVWA. + + ```sh + systemctl enable nvwa + ``` + +- Start nvwa. + + ```sh + systemctl start nvwa + ``` + +- View the nvwa service status and other information. + + ```sh + systemctl status nvwa + ``` + +- For more usage, see the usage of systemd. diff --git a/docs/en/server/maintenance/kernel_live_upgrade/kernel_live_upgrade.md b/docs/en/server/maintenance/kernel_live_upgrade/kernel_live_upgrade.md new file mode 100644 index 0000000000000000000000000000000000000000..522b4cd6188caa9c452ed9b1ac8276240d718718 --- /dev/null +++ b/docs/en/server/maintenance/kernel_live_upgrade/kernel_live_upgrade.md @@ -0,0 +1,14 @@ +# Kernel Live Upgrade Guide + +This document describes how to install, deploy, and use the kernel live upgrade feature on openEuler. This kernel live upgrade feature on openEuler is implemented through quick kernel restart and live program migration. A user-mode tool is provided to automate this process. + +This document is intended for community developers, open-source enthusiasts, and partners who want to learn about and use the openEuler system and kernel live upgrade. The users are expected to know basics about the Linux operating system. + +## Application Scenario + +The kernel live upgrade is to save and restore the process running data with the second-level end-to-end latency. + +The following two conditions must be met: + +1. The kernel needs to be restarted due to vulnerability fixing or version update. +2. Services running on the kernel can be quickly recovered after the kernel is restarted. diff --git a/docs/en/server/maintenance/kernel_live_upgrade/usage_guide.md b/docs/en/server/maintenance/kernel_live_upgrade/usage_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..158cd5ae58bc1b0deafb08d7a31f169a85e518a2 --- /dev/null +++ b/docs/en/server/maintenance/kernel_live_upgrade/usage_guide.md @@ -0,0 +1,98 @@ +# How to Run + +## Command + +- `nvwa help` + + Prints the help information. The printed information is as follows: + + ```text + NAME: + nvwa - a tool used for openEuler kernel update. + + USAGE: + nvwa [global options] command [command options] [arguments...] + + VERSION: + 0.1 + + COMMANDS: + update specify kernel version for nvwa to update + init init nvwa running environment + help, h Shows a list of commands or help for one command + + GLOBAL OPTIONS: + --help, -h show help (default: false) + --version, -v print the version (default: false) + ``` + +- `nvwa update ` + + When the kernel is live upgraded to a version, the NVWA searches for the kernel image and ramfs in the /boot directory. The kernel must be named in the **vmlinuz-\** format, and rootfs in the **initramfs-\.img** format. + + Note that the upgrade may fail. If the upgrade fails, some processes or services that are dumped will stop running. + +- `nvwa init` + + Clears the running information generated by NVWA and modifies the systemd configuration. This command is used to clear the running information before the NVWA is executed or after the execution fails. + +## Restrictions + +1. For services that need to be saved using NVWA, you need to set StandardOutput and StandardError in the configuration. The following uses Redis as an example: + + ```text + [Unit] + Description=Redis persistent key-value database + After=network.target + [Service] + ExecStart=/usr/bin/redis-server /etc/redis.conf --supervised systemd + Type=notify + User=redis + Group=redis + RuntimeDirectory=redis + RuntimeDirectoryMode=0755 + StandardOutput=file:/root/log1.log + StandardError=file:/root/log2.log + [Install] + WantedBy=multi-user.target + ``` + +2. To use the acceleration feature, you need to modify the cmdline and allocate proper memory. For details, see [NVWA Acceleration Feature Description and Usage](#nvwa-acceleration-feature-description-and-usage). + +3. SELINUX needs to be disabled during the running process. + + Theoretically, you need to disable the NVWA service only after you run the NVWA update command and before you restart the system to restore the process. It is recommended that SELinux be disabled during the entire process. + +## NVWA Acceleration Feature Description and Usage + +1. cpu park + + The cpu park command uses the kexec process to make the CPU stay busy waiting, so as to respond to the interrupt request sent by the primary core more quickly, and reduce the status changes. + + To use cpu park, you need to add "cpuparkmem=0x200000000" to cmdline. 0x200000000 is the start address of the memory that is not used by other programs. cpuparkmem occupies the memory space whose size is about 1 MB from this address. + + Note that if the memory is sufficient, it is recommended that the address range be after 4G(0x100000000). The first 4 GB is usually reserved by each system component, which is prone to conflict. + +2. quick kexec + + quick kexec accelerates image loading using kexec. + + To use quick kexec, you need to enable related options in the configuration file. For more information, see "Configuration" in Installation and Deployment. + +3. pin_memory + + pin memory accelerates the storage and recovery of the CRIU. + + To use pin memory, you need to enable related options in the configuration file. For more information, see "Configuration" in Installation and Deployment. + +## Generated Log Information + +The logs generated by the kernel live upgrade tool consist of two parts: + +- Logs generated during running + + Run the service `nvwa status` command to view logs. + +- Logs generated while retaining the running information + + The logs are stored in the process/service folder in the path specified by **criu_dir**. diff --git a/docs/en/server/maintenance/syscare/_toc.yaml b/docs/en/server/maintenance/syscare/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1e023f8d0515ea33ba8255d6365e171fa1b9c0ee --- /dev/null +++ b/docs/en/server/maintenance/syscare/_toc.yaml @@ -0,0 +1,14 @@ +label: SysCare User Guide +isManual: true +description: Online hot patching +sections: + - label: SysCare User Guide + href: ./syscare_user_guide.md + - label: SysCare Introduction + href: ./syscare_introduction.md + - label: SysCare Installation + href: ./installing_syscare.md + - label: SysCare Usage + href: ./using_syscare.md + - label: Constraints + href: ./constraints.md diff --git a/docs/en/server/maintenance/syscare/constraints.md b/docs/en/server/maintenance/syscare/constraints.md new file mode 100644 index 0000000000000000000000000000000000000000..7e4e68b3d1382b861e69cbb984f41a6680def8c0 --- /dev/null +++ b/docs/en/server/maintenance/syscare/constraints.md @@ -0,0 +1,37 @@ +# Constraints + +## Version Constraints + +OS version: openEuler 22.03 LTS SP4 +Architecture: x86 or AArch64 + +## Application Constraints + +Currently, user-mode patches support only Redis and Nginx. + +Note: + +1. Currently, each software needs to be adapted to process the LINE macro. Currently, only Redis and Nginx are adapted. Other software that is not adapted may cause the patch size to be too large. (Parameters will be introduced in the future to support user adaptation.) +2. Each user-mode live patch can contain only one ELF file. To fix multiple bugs, you can pass the patch files of multiple bug fixes to the patch making parameters to make a live patch for multiple bugs. + +## Language Constraints + +Theoretically, patches are compared at the object file level, which is irrelevant to the programming language. Currently, only the C and C++ languages are tested. + +## Others + +- Only 64-bit OSs are supported. +- Only the ELF format can be hot-patched. Interpreted languages are not supported. +- Only GCC and G++ compilers are supported. +- The compiler must support the `-gdwarf`, `-ffunction-sections`, and `-fdata-sections` parameters. +- The debug information must be in the DWARF format. +- Cross compilation is not supported. +- Source files that are in different paths but have the same file name, same global variables, and same functions cannot be recognized. +- Assembly code, including **.S** files and inline assembly code, cannot be modified. +- External symbols (dynamic library dependencies) cannot be added. +- Multiple patches cannot be applied to the same binary file. +- Mixed compilation of C and C++ is not supported. +- C++ exceptions cannot be modified. +- The `-g3` group section compilation option, specific compilation optimization options, and specific GCC plugins are not supported. +- ifunc cannot be added by using `__attribute__((ifunc("foo")))`. +- TLS variables cannot be added by using `__thread int foo`. diff --git a/docs/en/server/maintenance/syscare/figures/syscare_arch.png b/docs/en/server/maintenance/syscare/figures/syscare_arch.png new file mode 100644 index 0000000000000000000000000000000000000000..e8c931ad3ba6743224ffa133808f8b66239ce486 Binary files /dev/null and b/docs/en/server/maintenance/syscare/figures/syscare_arch.png differ diff --git a/docs/en/server/maintenance/syscare/installing_syscare.md b/docs/en/server/maintenance/syscare/installing_syscare.md new file mode 100644 index 0000000000000000000000000000000000000000..e38379fb275e8b2cdd4290f8eaa3b6ae61ca650d --- /dev/null +++ b/docs/en/server/maintenance/syscare/installing_syscare.md @@ -0,0 +1,47 @@ +# Installing SysCare + +This chapter describes how to install SysCare on openEuler. + +## Installing SysCare Core Components + +### Minimum Hardware Requirements + +* 2 CPUs (x86_64 or AArch64) +* 4 GB memory +* 100 GB drive + +### Prerequisites + +1. openEuler 22.03 LTS SP4 has been installed. +2. **root** permissions are required for patch making. + +### Installing from Source + +Clone the SysCare source code and then compile and install SysCare as follows: + +```shell +dnf install -y kernel-source-`uname -r` kernel-debuginfo-`uname -r` kernel-devel-`uname -r` +dnf install -y elfutils-libelf-devel openssl-devel dwarves flex python3-devel rpm-build bison cmake make gcc g++ rust cargo bpftool clang libbpf libbpf-devel llvm libbpf-static + +git clone https://gitee.com/openeuler/syscare.git +cd syscare +mkdir build_tmp +cd build_tmp +cmake -DCMAKE_INSTALL_PREFIX=/usr .. +make +make install +``` + +### Installing SysCare from a Repository + +The repository of openEuler 22.03 LTS SP4 contains SysCare packages. You can use the `dnf` or `yum` command to download and install them. + +```shell +dnf install syscare syscare-build +``` + +### Uninstalling SysCare + +```shell +dnf remove syscare* +``` diff --git a/docs/en/server/maintenance/syscare/syscare_introduction.md b/docs/en/server/maintenance/syscare/syscare_introduction.md new file mode 100644 index 0000000000000000000000000000000000000000..f723604e694bac520f69f0ff5c0b949846bd5a07 --- /dev/null +++ b/docs/en/server/maintenance/syscare/syscare_introduction.md @@ -0,0 +1,22 @@ +# Introduction to SysCare + +## Overview + + SysCare is an online live patching tool for both kernel and user modes. It automatically fixes bugs and vulnerabilities in OS components, such as kernels, user-mode services, and dynamic libraries. + +![img](./figures/syscare_arch.png) + +## SysCare Functions + + SysCare supports live patching for kernels and user-mode services: + + 1. One-click creation + SysCare is a unified environment for both kernel- and user-mode live patches that ignores differences between patches, ensuring they can be created with just one click. + 2. Patch lifecycle operations + SysCare provides a unified patch management interface for users to install, activate, uninstall, and query patches. + +## SysCare Technologies + + 1. Unified patches: SysCare masks differences in detail when creating patches, providing a unified management tool to improve O&M efficiency. + 2. User-mode live patching: SysCare supports live patching of multi-process and multi-thread services in user mode, which takes effect when a process or thread is started or restarted. + 3. Lazy mechanism: SysCare fixes the ptrace defect (all kernel calls are ended) and improves the fix success rate. diff --git a/docs/en/server/maintenance/syscare/syscare_user_guide.md b/docs/en/server/maintenance/syscare/syscare_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..ee022874c6c1a67fa3557df60ca150dcf1d9f69f --- /dev/null +++ b/docs/en/server/maintenance/syscare/syscare_user_guide.md @@ -0,0 +1,3 @@ +# SysCare User Guide + +This document describes how to install and use SysCare on openEuler. diff --git a/docs/en/server/maintenance/syscare/using_syscare.md b/docs/en/server/maintenance/syscare/using_syscare.md new file mode 100644 index 0000000000000000000000000000000000000000..9589cdb672d76433c3c0462a5d3b91956f49a28c --- /dev/null +++ b/docs/en/server/maintenance/syscare/using_syscare.md @@ -0,0 +1,495 @@ +# Using SysCare + +This chapter describes how to use SysCare on openEuler, including patch creation, application, activation, deactivation, acceptation, uninstallation, save and restore, conflict detection, overwriting, and query. + +## Prerequisites + +openEuler 22.03 LTS SP4 has been installed. + +## Live Patch Creation + +Run `syscare build` to create kernel- and user-mode live patches from RPM packages. Patches are encapsulated into RPM packages. + +### Command Parameters + +```shell +USAGE: + syscare build [OPTIONS] --patch-name --source ... --debuginfo ... --patch ... + +OPTIONS: + -n, --patch-name Patch name + --patch-arch Patch architecture [default: aarch64] + --patch-version Patch version [default: 1] + --patch-release Patch release [default: 1] + --patch-description Patch description [default: (none)] + --patch-requires ... Patch requirements + -s, --source ... Source package(s) + -d, --debuginfo ... Debuginfo package(s) + -p, --patch ... Patch file(s) + --work-dir Working directory [default: /var/run/syscare] + --build-root Build temporary directory [default: .] + -o, --output Output directory [default: .] + -j, --jobs Parallel build jobs [default: 64] + --skip-compiler-check Skip compiler version check (not recommended) + --skip-cleanup Skip post-build cleanup + -v, --verbose Provide more detailed info + -h, --help Print help information + -V, --version Print version information +``` + +### Command Options + +|Name|Description|Type|Note| +| ---- | ---- | ---- | ---- | +|-n, --patch-name *\*|Patch name|String|Mandatory. The value must comply with the RPM package naming convention.| +|--patch-arch *\*|Patch architecture|String|The default value is the current architectures. The value must comply with the RPM package naming convention.| +|--patch-version *\*|Patch version|String|The default value is **1**. The value must comply with the RPM package naming convention.| +|--patch-release *\*|Patch release|Integer|The default value is **1**. The value must comply with the RPM package naming convention.| +|--patch-description *\*|Patch description|String|The default value is **none**.| +|--patch-requires *\*|Additional patch dependencies|String|The default value is empty. The name must meed RPM specifications.| +|-s, --source *\*|Target software **src.rpm** package path|String|Mandatory. The value must be a valid path.| +|-d, --debuginfo *\*|Target software **debuginfo** package path|String|Mandatory. The value must be a valid path.| +|-p, --patch *\*|Patch file|String|This option is mandatory. The value must be a valid path.| +|--workdir *\*|Temporary directory|String|The default value is **/var/run/syscare**. The value must be a valid path.| +|--build-root *\*|Temporary build path|String|The default value is the current directory. The value must be a valid path.| +|-o, --output *\*|Patch output directory|String|The default value is the current directory. The value must be a valid path.| +|-j, --jobs *\*|Number of parallel compilation jobs|Integer|The default value is the number of CPU threads| +|--skip-compiler-check|Skip compiler check|Flag|-| +|--skip-cleanup|Skip temporary file cleanup|Flag|-| +|-v, --verbose|Print detail information|Flag|-| +|-h, --help|Print help information|Flag|-| +|-V, --version|Print version information|Flag|-| + +An example command is as follows: + +```shell +syscare build \ + --patch-name "HP001" \ + --patch-description "CVE-2021-32675 - When parsing an incoming Redis Standard Protocol (RESP) request, Redis allocates memory according to user-specified values which determine the number of elements (in the multi-bulk header) and size of each element (in the bulk header). An attacker delivering specially crafted requests over multiple connections can cause the server to allocate significant amount of memory. Because the same parsing mechanism is used to handle authentication requests, this vulnerability can also be exploited by unauthenticated users." \ + --source ./redis-6.2.5-1.src.rpm \ + --debuginfo ./redis-debuginfo-6.2.5-1.x86_64.rpm \ + --output ./output \ +``` + +### Live Patch Making Process + +1. Prepare the source package (source RPM) and debugging information package (debuginfo RPM) of the target software. + + Example: + + ```shell + + yumdownloader kernel --source + + yumdownloader kernel --debuginfo + ``` + +2. Ensure that the related software build dependencies are installed. + + Example: + + ```shell + dnf install make gcc bison flex openssl-devel dwarves python3-devel elfutils-libelf-devel + ``` + +3. Run the `syscare-build` command. + + Example: + + ```shell + syscare build \ + --patch-name HP001 \ + --source kernel-5.10.0-60.66.0.91.oe2203.src.rpm \ + --debuginfo kernel-debuginfo-5.10.0-60.66.0.91.oe2203.x86_64.rpm \ + --output output \ + --patch 001-kernel-patch-test.patch + ``` + + During patch making, a temporary folder whose name starts with **syscare-build** is created in the directory specified by `--workdir` (the current directory by default) to store temporary files and build logs. + + Example: + + ```shell + $ ls -l syscare-build.111602/ + total 100 + -rw-r--r--. 1 dev dev 92303 Nov 12 00:00 build.log + drwxr-xr-x. 6 dev dev 4096 Nov 12 00:00 package + drwxr-xr-x. 4 dev dev 4096 Nov 12 00:00 patch + ``` + + Build logs (**build.log**) are generated in the temporary folder. + + ```shell + $ cat syscare-build.111602/build.log | less + ... + ``` + + If the patch is created successfully and `--skip-compiler-check` is not specified, the temporary folder will be deleted after patch making. + +4. Check the build result. + + Example: + + ```shell + $ ls -l + total 189680 + -rw-r--r--. 1 dev dev 194218767 Nov 12 00:00 kernel-5.10.0-60.91.0.115.oe2203-HP001-1-1.x86_64.src.rpm + -rw-r--r--. 1 dev dev 10937 Nov 12 00:00 patch-kernel-5.10.0-60.91.0.115.oe2203-HP001-1-1.x86_64.rpm + ``` + + In the output: + + **patch-kernel-5.10.0-60.91.0.115.oe2203-HP001-1-1.x86_64.rpm** is the live patch package. + + **kernel-5.10.0-60.91.0.115.oe2203-HP001-1-1.x86_64.src.rpm** is the live patch source package. + +5. Install the patch. + + ```shell + dnf install patch-xxx.rpm + ``` + + After the patch is installed, files in the patch are stored in the **/usr/lib/syscare/patches/target_software_package_name/patch_name** directory + +6. Uninstall the patch. + + ```shell + dnf remove patch-xxx + ``` + + The patch package will be uninstalled when the patch is in the **ACTIVED** or **ACCEPTED** state. + +### Patch Output + +Two RPM packages are generated: + +- A live patch package that contains the binary file of the live patch and meta information. This package is used to install the live patch. + +- A live patch source package that contains the target software source code and the new patch. This package is used to create live patches for new versions. + +Naming rules: + +- Live patch package: patch-*TARGET_SOFTWARE_FULL_NAME*-*PATCH_NAME*-*PATCH_VERSION*-*PATCH_RELEASE*.*ARCHITECTURE*.rpm +- Live patch source code package: *TARGET_SOFTWARE_FULL_NAME*-*PATCH_NAME*-*PATCH_VERSION*-*PATCH_RELEASE*.*ARCHITECTURE*.src.rpm + +### Error Handling + +If an error occurs, see the build logs: + +Error output example: + +```text +... +Building patch, this may take a while +ERROR: Process '/usr/libexec/syscare/upatch-build' exited unsuccessfully, exit_code=255 +``` + +## Live Patch Management + +Run the `syscare` command to manage patches. SysCare searches for the patch that matches the input description and performs operations as instructed. +The search pattern is **package_name/patch_name**, where **package_name** can be omitted if **patch_name** is unique. UUID can also be used. + +### Querying Live Patches + +Run `syscare list` to query all installed live patches. + +Example: + +```shell +root@dev:[~]$ syscare list +Uuid Name Status +d81bce18-04bd-499f-91e9-8b9d7b94a76b glibc-2.34-112.oe2203/HP001-1-1/libc.so.6 NOT-APPLIED +3e7cb90d-9a4c-4fdf-a389-29d5e863f4b0 kernel-5.10.0-153.12.0.92.oe2203sp2/ACC-1-1/vmlinux NOT-APPLIED +64fa88bd-def5-4994-85de-a7903c526109 kernel-5.10.0-60.91.0.115.oe2203/HP-50801-1-1/vmlinux NOT-APPLIED +78268c3b-39a2-4d5c-ae96-206d8c62977a kernel-5.10.0-60.91.0.115.oe2203/HP-50802-1-1/vmlinux NOT-APPLIED +c568f31d-acfb-4fdb-8d2c-bde3facab5a2 kernel-5.10.0-60.91.0.115.oe2203/HP001-1-1/vmlinux NOT-APPLIED +35b5ece6-8b67-407e-93fe-d576a78ab499 nginx-1.21.5-4/HP001-1-1/nginx NOT-APPLIED +074734fc-034f-4e40-b943-6a76d766939b openssl-libs-1.1.1m-22.oe2203/HP001-1-1/libcrypto.so.1.1.1m NOT-APPLIED +ae124f00-206a-4385-a341-c7b2f7e19482 qemu-7.0.0-2/HP001-1-1/qemu-system-aarch64 NOT-APPLIED +11316483-dc62-4caf-bd5d-c51801dcb032 qemu-7.0.0-2/HP001-1-1/qemu-system-arm NOT-APPLIED +b382ea35-6713-4cfc-bb72-038feefb8173 qemu-7.0.0-2/HP001-1-1/qemu-system-i386 NOT-APPLIED +6aaec566-a220-4b60-8020-8077b6adc6a6 qemu-7.0.0-2/HP001-1-1/qemu-system-mips NOT-APPLIED +2bc0158e-fc42-4ea1-8f5c-e6891d10098b qemu-7.0.0-2/HP001-1-1/qemu-system-mips64 NOT-APPLIED +17e00bf0-b389-46d3-a036-933aeb41e0cb qemu-7.0.0-2/HP001-1-1/qemu-system-mips64el NOT-APPLIED +8481a911-d80b-4099-b9a2-a4d3c63de06d qemu-7.0.0-2/HP001-1-1/qemu-system-mipsel NOT-APPLIED +d8305d00-6f45-4c38-b7a4-844b4a667d89 qemu-7.0.0-2/HP001-1-1/qemu-system-ppc NOT-APPLIED +d10dc5f8-1692-4da4-8908-d2075c47d62b qemu-7.0.0-2/HP001-1-1/qemu-system-ppc64 NOT-APPLIED +77dbfd01-dee4-405b-930f-9711a0ad43c4 qemu-7.0.0-2/HP001-1-1/qemu-system-x86_64 NOT-APPLIED +777f15fe-cfc8-4b7a-96af-808a4518859f redis-6.2.5-1/HP001-1-1/redis-benchmark NOT-APPLIED +0e776e26-58cd-42ce-85e4-046481acad09 redis-6.2.5-1/HP001-1-1/redis-cli NOT-APPLIED +d9432f08-65cf-4849-a9af-ba20e9b6c7dc redis-6.2.5-1/HP001-1-1/redis-server NOT-APPLIED +789f0052-b932-4d9d-961d-7003bece1a3a redis-6.2.5-1/HP002-1-1/redis-benchmark NOT-APPLIED +e4aee980-1596-43d9-be9a-07fc6f668970 redis-6.2.5-1/HP002-1-1/redis-cli NOT-APPLIED +feb13c9a-02b3-4109-a2f3-c3e9fe41e9ad redis-6.2.5-1/HP002-1-1/redis-server NOT-APPLIED +``` + +### Querying Live Patch Metadata + +Run `syscare info` to query the metadata of one or more live patches. + +The following information is included in the live patch metadata: + +| Field | Description | +| ----------- | ---------------------- | +| name | Live patch name | +| version | Live patch version | +| release | Live patch release | +| arch | Live patch architecture | +| type | Live patch type | +| target | Target software | +| license | Target software license | +| description | Live patch description | +| entities | Target binary file of the live patch | +| patch| Live patch file list | + +Example: + +```shell +root@dev:[~]$ syscare info redis-6.2.5-1/HP001-1-1 +------------------------------------------- +Patch: redis-6.2.5-1/HP001-1-1 +------------------------------------------- +name: HP001 +version: 1 +release: 1 +arch: x86_64 +type: UserPatch +target: redis-6.2.5-1 +license: BSD and MIT +description: CVE-2021-32675 - When parsing an incoming Redis Standard Protocol (RESP) request, Redis allocates memory according to user-specified values which determine the number of elements (in the multi-bulk header) and size of each element (in the bulk header). An attacker delivering specially crafted requests over multiple connections can cause the server to allocate significant amount of memory. Because the same parsing mechanism is used to handle authentication requests, this vulnerability can also be exploited by unauthenticated users. +entities: +* redis-server +* redis-benchmark +* redis-cli +patches: +* 0001-Prevent-unauthenticated-client-from-easily-consuming.patch +------------------------------------------- +``` + +### Querying Live Patch Status + +Run `syscare status` to query the status of one or more live patches. + +Example: + +```shell +root@dev:[~]$ syscare status status redis-6.2.5-1/HP001-1-1 +redis-6.2.5-1/HP001-1-1/redis-server: NOT-APPLIED +redis-6.2.5-1/HP001-1-1/redis-benchmark: NOT-APPLIED +redis-6.2.5-1/HP001-1-1/redis-cli: NOT-APPLIED +``` + +### Loading and Activating Live Patches + +Run `syscare apply` to load and activate one or more live patches in the **NOT-APPLIED** state. + +Example: + +```shell +root@dev:[~]$ syscare list +Uuid Name Status +777f15fe-cfc8-4b7a-96af-808a4518859f redis-6.2.5-1/HP001-1-1/redis-benchmark NOT-APPLIED +0e776e26-58cd-42ce-85e4-046481acad09 redis-6.2.5-1/HP001-1-1/redis-cli NOT-APPLIED +d9432f08-65cf-4849-a9af-ba20e9b6c7dc redis-6.2.5-1/HP001-1-1/redis-server NOT-APPLIED + +root@dev:[~]$ syscare apply redis-6.2.5-1/HP001-1-1 +redis-6.2.5-1/HP001-1-1/redis-cli: ACTIVED +redis-6.2.5-1/HP001-1-1/redis-benchmark: ACTIVED +redis-6.2.5-1/HP001-1-1/redis-server: ACTIVED +``` + +### Activating Live Patches + +Run `syscare active` to activate one or more live patches in the **DEACTIVED** state. + +Example: + +```shell +root@dev:[~]$ syscare list +Uuid Name Status +777f15fe-cfc8-4b7a-96af-808a4518859f redis-6.2.5-1/HP001-1-1/redis-benchmark DEACTIVED +0e776e26-58cd-42ce-85e4-046481acad09 redis-6.2.5-1/HP001-1-1/redis-cli DEACTIVED +d9432f08-65cf-4849-a9af-ba20e9b6c7dc redis-6.2.5-1/HP001-1-1/redis-server DEACTIVED + +root@dev:[~]$ syscare active redis-6.2.5-1/HP001-1-1 +redis-6.2.5-1/HP001-1-1/redis-cli: ACTIVED +redis-6.2.5-1/HP001-1-1/redis-benchmark: ACTIVED +redis-6.2.5-1/HP001-1-1/redis-server: ACTIVED +``` + +### Deactivating Live Patches + +Run `syscare deactive` to deactivate one or more live patches in the **ACTIVED** state. + +Example: + +```shell +root@dev:[~]$ syscare list +Uuid Name Status +777f15fe-cfc8-4b7a-96af-808a4518859f redis-6.2.5-1/HP001-1-1/redis-benchmark ACTIVED +0e776e26-58cd-42ce-85e4-046481acad09 redis-6.2.5-1/HP001-1-1/redis-cli ACTIVED +d9432f08-65cf-4849-a9af-ba20e9b6c7dc redis-6.2.5-1/HP001-1-1/redis-server ACTIVED + +root@dev:[~]$ syscare deactive redis-6.2.5-1/HP001-1-1 +redis-6.2.5-1/HP001-1-1/redis-cli: DEACTIVED +redis-6.2.5-1/HP001-1-1/redis-benchmark: DEACTIVED +redis-6.2.5-1/HP001-1-1/redis-server: DEACTIVED +``` + +### Accepting Live Patches + +Run `syscare accept` to accept one or more live patches in the **ACTIVED** state. + +Accepted live patches are activated automatically after the system is restarted. + +Example: + +```shell +root@dev:[~]$ syscare list +Uuid Name Status +777f15fe-cfc8-4b7a-96af-808a4518859f redis-6.2.5-1/HP001-1-1/redis-benchmark ACTIVED +0e776e26-58cd-42ce-85e4-046481acad09 redis-6.2.5-1/HP001-1-1/redis-cli ACTIVED +d9432f08-65cf-4849-a9af-ba20e9b6c7dc redis-6.2.5-1/HP001-1-1/redis-server ACTIVED + +root@dev:[~]$ syscare accept redis-6.2.5-1/HP001-1-1 +redis-6.2.5-1/HP001-1-1/redis-cli: ACCEPTED +redis-6.2.5-1/HP001-1-1/redis-benchmark: ACCEPTED +redis-6.2.5-1/HP001-1-1/redis-server: ACCEPTED +``` + +### Uninstalling Live Patches + +Run `syscare remove` to uninstall one or more live patches in any state. + +Example: + +```shell +root@dev:[~]$ syscare list +Uuid Name Status +777f15fe-cfc8-4b7a-96af-808a4518859f redis-6.2.5-1/HP001-1-1/redis-benchmark DEACTIVED +0e776e26-58cd-42ce-85e4-046481acad09 redis-6.2.5-1/HP001-1-1/redis-cli ACTIVED +d9432f08-65cf-4849-a9af-ba20e9b6c7dc redis-6.2.5-1/HP001-1-1/redis-server ACCEPTED + +root@dev:[~]$ syscare remove redis-6.2.5-1/HP001-1-1 +redis-6.2.5-1/HP001-1-1/redis-cli: NOT-APPLIED +redis-6.2.5-1/HP001-1-1/redis-benchmark: NOT-APPLIED +redis-6.2.5-1/HP001-1-1/redis-server: NOT-APPLIED +``` + +### Supporting Multiple Live Patches + +SysCare allows multiple live patches to be applied to one user-mode binary file. + +Example: + +```shell +root@dev:[~]$ syscare list +Uuid Name Status +777f15fe-cfc8-4b7a-96af-808a4518859f redis-6.2.5-1/HP001-1-1/redis-benchmark ACTIVED +0e776e26-58cd-42ce-85e4-046481acad09 redis-6.2.5-1/HP001-1-1/redis-cli ACTIVED +d9432f08-65cf-4849-a9af-ba20e9b6c7dc redis-6.2.5-1/HP001-1-1/redis-server ACTIVED +789f0052-b932-4d9d-961d-7003bece1a3a redis-6.2.5-1/HP002-1-1/redis-benchmark ACTIVED +e4aee980-1596-43d9-be9a-07fc6f668970 redis-6.2.5-1/HP002-1-1/redis-cli ACTIVED +feb13c9a-02b3-4109-a2f3-c3e9fe41e9ad redis-6.2.5-1/HP002-1-1/redis-server ACTIVED +``` + +#### Detecting Live Patch Conflicts + +If one or more live patches to be applied have functions that conflict with existing patches, a message indicating the patch conflict is displayed. + +Example: + +```shell +root@dev:[~]$ syscare apply redis-6.2.5-1/HP002-1-1 +Error: Operation failed + +Caused by: + 1. Transaction "Apply patch 'redis-6.2.5-1/HP002-1-1'" failed + + Caused by: + 0: Driver: Patch "redis-6.2.5-1/HP002-1-1/redis-cli" check failed + 1: Upatch: Patch is conflicted with "0e776e26-58cd-42ce-85e4-046481acad09" +``` + +Run `syscare check` to determine the live patch to be applied conflict with existing live patches. + +Example: + +```shell +root@dev:[~]$ syscare check redis-6.2.5-1/HP002-1-1 +Error: Operation failed + +Caused by: + 1. Driver: Patch "redis-6.2.5-1/HP002-1-1/redis-server" check failed + + Caused by: + Upatch: Patch is conflicted with "d9432f08-65cf-4849-a9af-ba20e9b6c7dc" +``` + +#### Overwriting Live Patches + +Use the `--force` option to overwrite existing live patches with the current one in case of a live patch conflict. + +Example: + +```shell +root@dev:[~]$ syscare list +Uuid Name Status +777f15fe-cfc8-4b7a-96af-808a4518859f redis-6.2.5-1/HP001-1-1/redis-benchmark ACTIVED +0e776e26-58cd-42ce-85e4-046481acad09 redis-6.2.5-1/HP001-1-1/redis-cli ACTIVED +d9432f08-65cf-4849-a9af-ba20e9b6c7dc redis-6.2.5-1/HP001-1-1/redis-server ACTIVED +789f0052-b932-4d9d-961d-7003bece1a3a redis-6.2.5-1/HP002-1-1/redis-benchmark NOT-APPLIED +e4aee980-1596-43d9-be9a-07fc6f668970 redis-6.2.5-1/HP002-1-1/redis-cli NOT-APPLIED +feb13c9a-02b3-4109-a2f3-c3e9fe41e9ad redis-6.2.5-1/HP002-1-1/redis-server NOT-APPLIED + +root@dev:[~]$ syscare apply redis-6.2.5-1/HP002-1-1 +Error: Operation failed + +Caused by: + 1. Transaction "Apply patch 'redis-6.2.5-1/HP002-1-1'" failed + + Caused by: + 0: Driver: Patch "redis-6.2.5-1/HP002-1-1/redis-cli" check failed + 1: Upatch: Patch is conflicted with "0e776e26-58cd-42ce-85e4-046481acad09" + +root@dev:[~]$ syscare apply redis-6.2.5-1/HP002-1-1 --force +redis-6.2.5-1/HP002-1-1/redis-cli: ACTIVED +redis-6.2.5-1/HP002-1-1/redis-benchmark: ACTIVED +redis-6.2.5-1/HP002-1-1/redis-server: ACTIVED +``` + +### Saving and Restoring Live Patches + +SysCare supports saving and restoring of live patch status. + +Example: + +```shell +[root@2203sp2-85 syscare]# syscare list +Uuid Name Status +eebc3155-9a5b-4a09-9561-6a94080de2ce redis-6.2.5-1/HP001-1-1/redis-benchmark ACTIVED +96666521-4606-4aa0-b663-1b455fe586da redis-6.2.5-1/HP001-1-1/redis-cli ACTIVED +1e98d692-cc51-4f83-9176-c547ed1db20b redis-6.2.5-1/HP001-1-1/redis-server ACTIVED +beffae33-1e1a-4bd5-8758-ab6a5f2f1a7c redis-6.2.5-1/HP002-1-1/redis-benchmark NOT-APPLIED +24b01b18-5132-4cae-a379-71d2b0e6d832 redis-6.2.5-1/HP002-1-1/redis-cli NOT-APPLIED +a84934de-4a89-4e77-b646-125d1e2c98b4 redis-6.2.5-1/HP002-1-1/redis-server ACTIVED +[root@2203sp2-85 syscare]# syscare save +[root@2203sp2-85 syscare]# systemctl restart syscare +[root@2203sp2-85 syscare]# syscare list +Uuid Name Status +eebc3155-9a5b-4a09-9561-6a94080de2ce redis-6.2.5-1/HP001-1-1/redis-benchmark NOT-APPLIED +96666521-4606-4aa0-b663-1b455fe586da redis-6.2.5-1/HP001-1-1/redis-cli NOT-APPLIED +1e98d692-cc51-4f83-9176-c547ed1db20b redis-6.2.5-1/HP001-1-1/redis-server NOT-APPLIED +beffae33-1e1a-4bd5-8758-ab6a5f2f1a7c redis-6.2.5-1/HP002-1-1/redis-benchmark NOT-APPLIED +24b01b18-5132-4cae-a379-71d2b0e6d832 redis-6.2.5-1/HP002-1-1/redis-cli NOT-APPLIED +a84934de-4a89-4e77-b646-125d1e2c98b4 redis-6.2.5-1/HP002-1-1/redis-server NOT-APPLIED +[root@2203sp2-85 syscare]# syscare restore +[root@2203sp2-85 syscare]# syscare list +Uuid Name Status +eebc3155-9a5b-4a09-9561-6a94080de2ce redis-6.2.5-1/HP001-1-1/redis-benchmark ACTIVED +96666521-4606-4aa0-b663-1b455fe586da redis-6.2.5-1/HP001-1-1/redis-cli ACTIVED +1e98d692-cc51-4f83-9176-c547ed1db20b redis-6.2.5-1/HP001-1-1/redis-server ACTIVED +beffae33-1e1a-4bd5-8758-ab6a5f2f1a7c redis-6.2.5-1/HP002-1-1/redis-benchmark NOT-APPLIED +24b01b18-5132-4cae-a379-71d2b0e6d832 redis-6.2.5-1/HP002-1-1/redis-cli NOT-APPLIED +a84934de-4a89-4e77-b646-125d1e2c98b4 redis-6.2.5-1/HP002-1-1/redis-server ACTIVED +``` diff --git a/docs/en/server/maintenance/sysmonitor/_toc.yaml b/docs/en/server/maintenance/sysmonitor/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5b7219dffa4c048cdf9f3a3823fe17e45c070669 --- /dev/null +++ b/docs/en/server/maintenance/sysmonitor/_toc.yaml @@ -0,0 +1,6 @@ +label: sysmonitor User Guide +isManual: true +description: sysmonitor tracks exceptions in the OS during runtime +sections: + - label: sysmonitor User Guide + href: ./sysmonitor_user_guide.md diff --git a/docs/en/server/maintenance/sysmonitor/figures/sysmonitor_functions.png b/docs/en/server/maintenance/sysmonitor/figures/sysmonitor_functions.png new file mode 100644 index 0000000000000000000000000000000000000000..e9655456ebce192d196e5f55c5fc09c03fa440d8 Binary files /dev/null and b/docs/en/server/maintenance/sysmonitor/figures/sysmonitor_functions.png differ diff --git a/docs/en/server/maintenance/sysmonitor/sysmonitor_user_guide.md b/docs/en/server/maintenance/sysmonitor/sysmonitor_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..e38e7def198e582f840bed78d42fddec93885931 --- /dev/null +++ b/docs/en/server/maintenance/sysmonitor/sysmonitor_user_guide.md @@ -0,0 +1,798 @@ +# sysmonitor + +## Introduction + +The system monitor (sysmonitor) daemon monitors exceptions that occur during OS running and records the exceptions in the system log file **/var/log/sysmonitor.log**. sysmonitor runs as a service. You can run the `systemctl start|stop|restart|reload sysmonitor` command to start, stop, restart, and reload the service. You are advised to deploy sysmonitor to locate system exceptions. + +![](./figures/sysmonitor_functions.png) + +### Precautions + +- sysmonitor cannot run concurrently. +- Ensure that all configuration files are valid. Otherwise, the monitoring service may be abnormal. +- The root privilege is required for sysmonitor service operations, configuration file modification, and log query. The **root** user has the highest permission in the system. When performing operations as the **root** user, follow the operation guide to avoid system management and security risks caused by improper operations. + +### Configuration Overview + +Configuration file **/etc/sysconfig/sysmonitor** of sysmonitor defines the monitoring period of each monitoring item and specifies whether to enable monitoring. Spaces are not allowed between the configuration item, equal sign (=), and configuration value, for example, **PROCESS_MONITOR="on"**. + +Configuration description + +| Item | Description | Mandatory| Default Value | +| ------------------------- | ------------------------------------------------------------ | -------- | -------------------------------------- | +| PROCESS_MONITOR | Whether to enable key process monitoring. The value can be **on** or **off**. | No | on | +| PROCESS_MONITOR_PERIOD | Monitoring period on key processes, in seconds. | No | 3 | +| PROCESS_RECALL_PERIOD | Interval for attempting to restart a key process after the process fails to be recovered, in minutes. The value can be an integer ranging from 1 to 1440.| No | 1 | +| PROCESS_RESTART_TIMEOUT | Timeout interval for recovering a key process service from an exception, in seconds. The value can be an integer ranging from 30 to 300.| No | 90 | +| PROCESS_ALARM_SUPPRESS_NUM | Number of alarm suppression times when the key process monitoring configuration uses the alarm command to report alarms. The value is a positive integer.| No | 5 | +| FILESYSTEM_MONITOR | Whether to enable ext3 and ext4 file system monitoring. The value can be **on** or **off**. | No | on | +| DISK_MONITOR | Whether to enable drive partition monitoring. The value can be **on** or **off**. | No | on | +| DISK_MONITOR_PERIOD | Drive monitoring period, in seconds. | No | 60 | +| INODE_MONITOR | Whether to enable drive inode monitoring. The value can be **on** or **off**. | No | on | +| INODE_MONITOR_PERIOD | Drive inode monitoring period, in seconds. | No | 60 | +| NETCARD_MONITOR | Whether to enable NIC monitoring. The value can be **on** or **off**. | No | on | +| FILE_MONITOR | Whether to enable file monitoring. The value can be **on** or **off**. | No | on | +| CPU_MONITOR | Whether to enable CPU monitoring. The value can be **on** or **off**. | No | on | +| MEM_MONITOR | Whether to enable memory monitoring. The value can be **on** or **off**. | No | on | +| PSCNT_MONITOR | Whether to enable process count monitoring. The value can be **on** or **off**. | No | on | +| FDCNT_MONITOR | Whether to enable file descriptor (FD) count monitoring. The value can be **on** or **off**. | No | on | +| CUSTOM_DAEMON_MONITOR | Whether to enable custom daemon item monitoring. The value can be **on** or **off**. | No | on | +| CUSTOM_PERIODIC_MONITOR | Whether to enable custom periodic item monitoring. The value can be **on** or **off**. | No | on | +| IO_DELAY_MONITOR | Whether to enable local drive I/O latency monitoring. The value can be **on** or **off**. | No | off | +| PROCESS_FD_NUM_MONITOR | Whether to enable process FD count monitoring. The value can be **on** or **off**. | No | on | +| PROCESS_MONITOR_DELAY | Whether to wait until all monitoring items are normal when sysmonitor is started. The value can be **on** (wait) or **off** (do not wait).| No | on | +| NET_RATE_LIMIT_BURST | NIC route information printing rate, that is, the number of logs printed per second. | No | 5
Valid range: 0 to 100 | +| FD_MONITOR_LOG_PATH | FD monitoring log file | No | /var/log/sysmonitor.log| +| ZOMBIE_MONITOR | Whether to monitor zombie processes | No | off | +| CHECK_THREAD_MONITOR | Whether to enable internal thread self-healing. The value can be **on** or **off**. | No | on
| +| CHECK_THREAD_FAILURE_NUM | Number of internal thread self-healing checks in a period. | No | 3
Valid range: 2 to 10 | + +- After modifying the **/etc/sysconfig/sysmonitor** configuration file, restart the sysmonitor service for the configurations to take effect. +- If an item is not configured in the configuration file, it is enabled by default. +- After the internal thread self-healing function is enabled, if a sub-thread of the monitoring item is suspended and the number of checks in a period exceeds the configured value, the sysmonitor service is restarted for restoration. The configuration is reloaded. The configured key process monitoring and customized monitoring are restarted. If this function affects user experience, you can disable it. + +### Command Reference + +- Start sysmonitor. + +```shell +systemctl start sysmonitor +``` + +- Stop sysmonitor. + +```shell +systemctl stop sysmonitor +``` + +- Restart sysmonitor. + +```shell +systemctl restart sysmonitor +``` + +- Reload sysmonitor for the modified configurations to take effect. + +```shell +systemctl reload sysmonitor +``` + +### Monitoring Logs + +By default, logs is split and dumped to prevent the **sysmonitor.log** file from getting to large. Logs are dumped to a drive directory. In this way, a certain number of logs can be retained. + +The configuration file is **/etc/rsyslog.d/sysmonitor.conf**. Because this rsyslog configuration file is added, after sysmonitor is installed for the first time, you need to restart the rsyslog service to make the sysmonitor log configuration take effect. + +```sh +$template sysmonitorformat,"%TIMESTAMP:::date-rfc3339%|%syslogseverity-text%|%msg%\n" + +$outchannel sysmonitor, /var/log/sysmonitor.log, 2097152, /usr/libexec/sysmonitor/sysmonitor_log_dump.sh +if ($programname == 'sysmonitor' and $syslogseverity <= 6) then { +:omfile:$sysmonitor;sysmonitorformat +stop +} + +if ($msg contains 'Time has been changed') then { +:omfile:$sysmonitor;sysmonitorformat +stop +} + +if ($programname == 'sysmonitor' and $syslogseverity > 6) then { +/dev/null +stop +} +``` + +## ext3/ext4 Filesystem Monitoring + +### Introduction + +A fault in the filesystem may trigger I/O operation errors, which further cause OS faults. File system fault detection can detect the faults in real time so that system administrators or users can rectify them in a timely manner. + +### Configuration File Description + +None + +### Exception Logs + +For a file system to which the errors=remount-ro mounting option is added, if the ext3 or ext4 file system is faulty, the following exception information is recorded in the **sysmonitor.log** file: + +```sh +info|sysmonitor[127]: loop0 filesystem error. Remount filesystem read-only. +``` + +In other exception scenarios, if the ext3 or ext4 file system is faulty, the following exception information is recorded in the **sysmonitor.log** file: + +```sh +info|sysmonitor[127]: fs_monitor_ext3_4: loop0 filesystem error. flag is 1879113728. +``` + +## Key Processing Monitoring + +### Introduction + +Key processes in the system are periodically monitored. When a key process exits abnormally, sysmonitor automatically attempts to recover the key process. If the recovery fails, alarms can be reported. The system administrator can be promptly notified of the abnormal process exit event and whether the process is restarted. Fault locating personnel can locate the time when the process exits abnormally from logs. + +### Configuration File Description + +The configuration file directory is **/etc/sysmonitor/process**. Each process or module corresponds to a configuration file. + +```sh +USER=root +NAME=irqbalance +RECOVER_COMMAND=systemctl restart irqbalance +MONITOR_COMMAND=systemctl status irqbalance +STOP_COMMAND=systemctl stop irqbalance +``` + +The configuration items are as follows: + +| Item | Description | Mandatory| Default Value | +| ---------------------- | ------------------------------------------------------------ | -------- | --------------------------------------------------- | +| NAME | Process or module name | Yes | None | +| RECOVER_COMMAND | Recovery command | No | None | +| MONITOR_COMMAND | Monitoring command
If the command output is 0, the process is normal. If the command output is greater than 0, the process is abnormal.| No | pgrep -f $(which xxx)
*xxx* is the process name configured in the **NAME** field.| +| STOP_COMMAND | Stopping command | No | None | +| USER | User name
User for executing the monitoring, recovery, and stopping commands or scripts | No | If this item is left blank, the **root** user is used by default. | +| CHECK_AS_PARAM | Parameter passing switch
If this item is on, the return value of **MONITOR_COMMAND** is transferred to the **RECOVER_COMMAND** command or script as an input parameter. If this item is set to off or other values, the function is disabled.| No | None | +| MONITOR_MODE | Monitoring mode
- **parallel** or **serial**
| No | serial | +| MONITOR_PERIOD | Monitoring period
- Parallel monitoring period
- This item does not take effect when the monitoring mode is **serial**.| No | 3 | +| USE_CMD_ALARM | Alarm mode
If this parameter is set to **on** or **ON**, alarms are reported using the alarm reporting command. | No | None | +| ALARM_COMMAND | Alarm reporting command | No | None | +| ALARM_RECOVER_COMMAND | Alarm recovery command | No | No | + +- After modifying the configuration file for monitoring key processes, run `systemctl reload sysmonitor`. The new configuration takes effect after a monitoring period. +- The recovery command and monitoring command must not block. Otherwise, the monitoring thread of the key process becomes abnormal. +- When the recovery command is executed for more than 90 seconds, the stopping command is executed to stop the process. +- If the recovery command is empty or not configured, the monitoring command does not attempt to recover the key process when detecting that the key process is abnormal. +- If a key process is abnormal and fails to be started for three consecutive times, the process is started based on the period specified by **PROCESS_RECALL_PERIOD** in the global configuration file. +- If the monitored process is not a daemon process, **MONITOR_COMMAND** is mandatory. +- If the configured key service does not exist in the current system, the monitoring does not take effect and the corresponding information is printed in the log. If a fatal error occurs in other configuration items, the default configuration is used and no error is reported. +- The permission on the configuration file is 600. You are advised to set the monitoring item to the **service** type of systemd (for example, **MONITOR_COMMAND=systemctl status irqbalance**). If a process is monitored, ensure that the **NAME** field is an absolute path. +- The restart, reload, and stop of sysmonitor do not affect the monitored processes or services. +- If **USE_CMD_ALARM** is set to **on**, you must ensure the validiy of **ALARM_COMMAND** and **ALARM_RECOVER_COMMAND**. If **ALARM_COMMAND** or **ALARM_RECOVER_COMMAND** is empty or not configured, no alarm is reported. +- The security of user-defined commands, such as the monitoring, recovery, stopping, alarm reporting, and alarm recovery commands, is ensured by users. Commands are executed by the user **root**. You are advised to set the script command permission to be used only by the user **root** to prevent privilege escalation for common users. +- If the length of the monitoring command cannot be greater than 200 characters. Otherwise, the process monitoring fails to be added. +- When the recovery command is set to a systemd service restart command (for example, **RECOVER_COMMAND=systemctl restart irqbalance**), check whether the recovery command conflicts with the open source systemd service recovery mechanism. Otherwise, the behavior of key processes may be affected after exceptions occur. +- The processes started by the sysmonitor service are in the same cgroup as the sysmonitor service, and resources cannot be restricted separately. Therefore, you are advised to use the open source systemd mechanism to recover the processes. + +### Exception Logs + +- **RECOVER_COMMAND** configured + + If a process or module exception is detected, the following exception information is recorded in the **/var/log/sysmonitor.log** file: + + ```sh + info|sysmonitor[127]: irqbalance is abnormal, check cmd return 1, use "systemctl restart irqbalance" to recover + ``` + + If the process or module recovers, the following information is recorded in the **/var/log/sysmonitor.log** file: + + ```sh + info|sysmonitor[127]: irqbalance is recovered + ``` + +- **RECOVER_COMMAND** not configured + + If a process or module exception is detected, the following exception information is recorded in the **/var/log/sysmonitor.log** file: + + ```sh + info|sysmonitor[127]: irqbalance is abnormal, check cmd return 1, recover cmd is null, will not recover + ``` + + If the process or module recovers, the following information is recorded in the **/var/log/sysmonitor.log** file: + + ```sh + info|sysmonitor[127]: irqbalance is recovered + ``` + +## File Monitoring + +### Introduction + +If key system files are deleted accidentally, the system may run abnormally or even break down. Through file monitoring, you can learn about the deletion of key files or the addition of malicious files in the system in a timely manner, so that administrators and users can learn and rectify faults in a timely manner. + +### Configuration File Description + +The configuration file is **/etc/sysmonitor/file**. Each monitoring configuration item occupies a line. A monitoring configuration item contains the file (directory) and event to be monitored. The file (directory) to be monitored is an absolute path. The file (directory) to be monitored and the event to be monitored are separated by one or more spaces. + +The file monitoring configuration items can be added to the **/etc/sysmonitor/file.d** directory. The configuration method is the same as that of the **/etc/sysmonitor/file** directory. + +- Due to the log length limit, it is recommended that the absolute path of a file or directory be less than 223 characters. Otherwise, the printed logs may be incomplete. + +- Ensure that the path of the monitored file is correct. If the configured file does not exist or the path is incorrect, the file cannot be monitored. + +- Due to the path length limit of the system, the absolute path of the monitored file or directory must be less than 4096 characters. + +- Directories and regular files can be monitored. **/proc**, **/proc/\***, **/dev**, **/dev/\***, **/sys**, **/sys/\***, pipe files, or socket files cannot be monitored. + +- Only deletion events can be monitored in **/var/log** and **/var/log/\***. + +- If multiple identical paths exist in the configuration file, the first valid configuration takes effect. In the log file, you can see messages indicating that the identical paths are ignored. + +- Soft links cannot be monitored. When a hard link file deletion event is configured, the event is printed only after the file and all its hard links are deleted. + +- When a monitored event occurs after the file monitoring is successfully added, the monitoring log records the absolute path of the configured file. + +- Currently, directories cannot be monitored recursively. The configured directory is monitored but not its subdirectories. + +- The events to be monitored are configured using bitmaps as follows. + +```sh + ------------------------------- + | 11~32 | 10 | 9 | 1~8 | + ------------------------------- +``` + +Each bit in the event bitmap represents an event. If bit _n_ is set to 1, the event corresponding to bit _n_ is monitored. The hexadecimal number corresponding to the monitoring bitmap is the event monitoring item written to the configuration file. + +| Item| Description | Mandatory| +| ------ | ------------------ | -------- | +| 1~8 | Reserved | No | +| 9 | File or directory addition event| Yes | +| 10 | File or directory deletion event| Yes | +| 11~32 | Reserved | No | + +- After modifying the file monitoring configuration file, run `systemctl reload sysmonitor`. The new configuration takes effect within 60 seconds. +- Strictly follow the preceding rules to configure events to be monitored. If the configuration is incorrect, the events cannot be monitored. If an event to be monitored in the configuration item is empty, only the deletion event is monitored by default, that is, **0x200**. +- After a file or directory is deleted, the deletion event is reported only when all processes that open the file stop. +- If a monitored a is modified by `vi` or `sed`, "File XXX may have been changed" is recorded in the monitoring log. +- Currently, file addition and deletion events can be monitored, that is, the ninth and tenth bits take effect. Other bits are reserved and do not take effect. If a reserved bit is configured, the monitoring log displays a message indicating that the event monitoring is incorrectly configured. + +**Example** + +Monitor the subdirectory addition and deletion events in **/home**. The lower 12-bit bitmap is 001100000000. The configuration is as follows: + +```sh +/home 0x300 +``` + +Monitor the file deletion events of **/etc/ssh/sshd_config**. The lower 12-bit bitmap is 001000000000. The configuration is as follows: + +```sh +/etc/sshd/sshd_config 0x200 +``` + +### Exception Logs + +If a configured event occurs to the monitored file, the following information is displayed in the **/var/log/sysmonitor.log** file: + +```sh +info|sysmonitor[127]: 1 events queued +info|sysmonitor[127]: 1th events handled +info|sysmonitor[127]: Subfile "111" under "/home" was added. +``` + +## Drive Partition Monitoring + +### Introduction + +The system periodically monitors the drive partitions mounted to the system. When the drive partition usage is greater than or equal to the configured alarm threshold, the system records a drive space alarm. When the drive partition usage falls below the configured alarm recovery threshold, a drive space recovery alarm is recorded. + +### Configuration File Description + +The configuration file is **/etc/sysmonitor/disk**. + +```sh +DISK="/var/log" ALARM="90" RESUME="80" +DISK="/" ALARM="95" RESUME="85" +``` + +| Item| Description | Mandatory| Default Value| +| ------ | ---------------------- | -------- | ------ | +| DISK | Mount directory | Yes | None | +| ALARM | Integer indicating the drive space alarm threshold| No | 90 | +| RESUME | Integer indicating the drive space alarm recovery threshold| No | 80 | + +- After modifying the configuration file for drive space monitoring, run `systemctl reload sysmonitor`. The new configuration takes effect after a monitoring period. +- If a mount directory is configured repeatedly, the last configuration item takes effect. +- The value of **ALARM** must be greater than that of **RESUME**. +- Only the mount point or the drive partition of the mount point can be monitored. +- When the CPU usage and I/O usage are high, the `df` command execution may time out. As a result, the drive usage cannot be obtained. +- If a drive partition is mounted to multiple mount points, an alarm is reported for each mount point. + +### Exception Logs + +If a drive space alarm is detected, the following information is displayed in the **/var/log/sysmonitor.log** file: + +```sh +warning|sysmonitor[127]: report disk alarm, /var/log used:90% alarm:90% +info|sysmonitor[127]: report disk recovered, /var/log used:4% resume:10% +``` + +## NIC Status Monitoring + +### Introduction + +During system running, the NIC status or IP address may change due to human factors or exceptions. You can monitor the NIC status and IP address changes to detect exceptions in a timely manner and locate exception causes. + +### Configuration File Description + +The configuration file is **/etc/sysmonitor/network**. + +```sh +#dev event +eth1 UP +``` + +The following table describes the configuration items. + +| Item| Description | Mandatory| Default Value | +| ------ | ------------------------------------------------------------ | -------- | ------------------------------------------------- | +| dev | NIC name | Yes | None | +| event | Event to be monitored. The value can be **UP**, **DOWN**, **NEWADDR**, or **DELADDR**.
- UP: The NIC is up.
- DOWN: The NIC is down.
- NEWADDR: An IP address is added.
- DELADDR: An IP address is deleted.| No | If this item is empty, **UP**, **DOWN**, **NEWADDR**, and **DELADDR** are monitored.| + +- After modifying the configuration file for NIC monitoring, run `systemctl reload sysmonitor` for the new configuration to take effect. +- The **UP** and **DOWN** status of virtual NICs cannot be monitored. +- Ensure that each line in the NIC monitoring configuration file contains less than 4096 characters. Otherwise, a configuration error message will be recorded in the monitoring log. +- By default, all events of all NICs are monitored. That is, if no NIC monitoring is configured, the **UP**, **DOWN**, **NEWADDR**, and **DELADDR** events of all NICs are monitored. +- If a NIC is configured but no event is configured, all events of the NIC are monitored by default. +- The events of route addition can be recorded five times per second. You can change the number of times by setting **NET_RATE_LIMIT_BURST** in **/etc/sysconfig/sysmonitor**. + +### Exception Logs + +If a NIC event is detected, the following information is displayed in the **/var/log/sysmonitor.log** file: + +```sh +info|sysmonitor[127]: lo: ip[::1] prefixlen[128] is added, comm: (ostnamed)[1046], parent comm: syst emd[1] +info|sysmonitor[127]: lo: device is up, comm: (ostnamed)[1046], parent comm: systemd[1] +``` + +If a route event is detected, the following information is displayed in the **/var/log/sysmonitor.log** file: + +```sh +info|sysmonitor[881]: Fib4 replace table=255 192.168.122.255/32, comm: daemon-init[1724], parent com m: systemd[1] +info|sysmonitor[881]: Fib4 replace table=254 192.168.122.0/24, comm: daemon-init[1724], parent comm: systemd[1] +info|sysmonitor[881]: Fib4 replace table=255 192.168.122.0/32, comm: daemon-init[1724], parent comm: systemd[1] +info|sysmonitor[881]: Fib6 replace fe80::5054:ff:fef6:b73e/128, comm: kworker/1:3[209], parent comm: kthreadd[2] +``` + +## CPU Monitoring + +### Introduction + +The system monitors the global CPU usage or the CPU usage in a specified domain. When the CPU usage exceeds the configured alarm threshold, the system runs the configured log collection command. + +### Configuration File Description + +The configuration file is **/etc/sysmonitor/cpu**. + +When the global CPU usage of the system is monitored, an example of the configuration file is as follows: + +```sh +# cpu usage alarm percent +ALARM="90" + +# cpu usage alarm resume percent +RESUME="80" + +# monitor period (second) +MONITOR_PERIOD="60" + +# stat period (second) +STAT_PERIOD="300" + +# command executed when cpu usage exceeds alarm percent +REPORT_COMMAND="" +``` + +When the CPU usage of a specific domain is monitored, an example of the configuration file is as follows: + +```sh +# monitor period (second) +MONITOR_PERIOD="60" + +# stat period (second) +STAT_PERIOD="300" + +DOMAIN="0,1" ALARM="90" RESUME="80" +DOMAIN="2,3" ALARM="50" RESUME="40" + +# command executed when cpu usage exceeds alarm percent +REPORT_COMMAND="" +``` + +| Item | Description | Mandatory| Default Value| +| -------------- | ------------------------------------------------------------ | -------- | ------ | +| ALARM | Number greater than 0, indicating the CPU usage alarm threshold | No | 90 | +| RESUME | Number greater than or equal to 0, indicating the CPU usage alarm recovery threshold | No | 80 | +| MONITOR_PERIOD | Monitoring period, in seconds. The value is greater than 0. | No | 60 | +| STAT_PERIOD | Statistical period, in seconds. The value is greater than 0. | No | 300 | +| DOMAIN | CPU IDs in the domain, represented by decimal numbers
- CPU IDs can be enumerated and separated by commas, for example, **1,2,3**. CPU IDs can be specified as a range in the formate of _X_-_Y_, for example, **0-2**. The two representations can be used together, for example, **0, 1, 2-3** or **0-1, 2-3**. Spaces or other characters are not allowed.
- Each monitoring domain has an independent configuration item. Each configuration item supports a maximum of 256 CPUs. A CPU ID must be unique in a domain and across domains.| No | None | +| REPORT_COMMAND | Command for collecting logs after the CPU usage exceeds the alarm threshold | No | None | + +- After modifying the configuration file for CPU monitoring, run `systemctl reload sysmonitor`. The new configuration takes effect after a monitoring period. +- The value of **ALARM** must be greater than that of **RESUME**. +- After the CPU domain monitoring is configured, the global average CPU usage of the system is not monitored, and the separately configured **ALARM** and **RESUME** values do not take effect. +- If the configuration of a monitoring domain is invalid, CPU monitoring is not performed at all. +- All CPUs configured in **DOMAIN** must be online. Otherwise, the domain cannot be monitored. +- The command of **REPORT_COMMAND** cannot contain insecure characters such as **&**, **;**, and **>**, and the total length cannot exceed 159 characters. Otherwise, the command cannot be executed. +- Ensure the security and validity of **REPORT_COMMAND**. sysmonitor is responsible only for running the command as the **root** user. +- **REPORT_COMMAND** must not block. When the execution time of the command exceeds 60s, the sysmonitor forcibly stops the execution. +- Even if the CPU usage of multiple domains exceeds the threshold in a monitoring period, **REPORT_COMMAND** is executed only once. + +### Exception Logs + +If a global CPU usage alarm is detected or cleared and the log collection command is configured, the following information is displayed in the **/var/log/sysmonitor.log** file: + +```sh +info|sysmonitor[127]: CPU usage alarm: 91.3% +info|sysmonitor[127]: cpu monitor: execute REPORT_COMMAND[sysmoniotrcpu] successfully +info|sysmonitor[127]: CPU usage resume 70.1% +``` + +If a domain average CPU usage alarm is detected or cleared and the log collection command is configured, the following information is displayed in the **/var/log/sysmonitor.log** file: + +```sh +info|sysmonitor[127]: CPU 1,2,3 usage alarm: 91.3% +info|sysmonitor[127]: cpu monitor: execute REPORT_COMMAND[sysmoniotrcpu] successfully +info|sysmonitor[127]: CPU 1,2,3 usage resume 70.1% +``` + +## Memory Monitoring + +### Introduction + +Monitors the system memory usage and records logs when the memory usage exceeds or falls below the threshold. + +### Configuration File Description + +The configuration file is **/etc/sysmonitor/memory**. + +```sh +# memory usage alarm percent +ALARM="90" + +# memory usage alarm resume percent +RESUME="80" + +# monitor period(second) +PERIOD="60" +``` + +### Configuration Item Description + +| Item| Description | Mandatory| Default Value| +| ------ | ----------------------------- | -------- | ------ | +| ALARM | Number greater than 0, indicating the memory usage alarm threshold | No | 90 | +| RESUME | Number greater than or equal to 0, indicating the memory usage alarm recovery threshold| No | 80 | +| PERIOD | Monitoring period, in seconds. The value is greater than 0. | No | 60 | + +- After modifying the configuration file for memory monitoring, run `systemctl reload sysmonitor`. The new configuration takes effect after a monitoring period. +- The value of **ALARM** must be greater than that of **RESUME**. +- The average memory usage in three monitoring periods is used to determine whether an alarm is reported or cleared. + +### Exception Logs + +If a memory alarm is detected, sysmonitor obtains the **/proc/meminfo** information and prints the information in the **/var/log/sysmonitor.log** file. The information is as follows: + +```sh +info|sysmonitor[127]: memory usage alarm: 90% +info|sysmonitor[127]:---------------show /proc/meminfo: --------------- +info|sysmonitor[127]:MemTotal: 3496388 kB +info|sysmonitor[127]:MemFree: 2738100 kB +info|sysmonitor[127]:MemAvailable: 2901888 kB +info|sysmonitor[127]:Buffers: 165064 kB +info|sysmonitor[127]:Cached: 282360 kB +info|sysmonitor[127]:SwapCached: 4492 kB +...... +info|sysmonitor[127]:---------------show_memory_info end. --------------- +``` + +If the following information is printed, sysmonitor runs `echo m > /proc/sysrq-trigger` to export memory allocation information. You can view the information in **/var/log/messages**. + +```sh +info|sysmonitor[127]: sysrq show memory ifno in message. +``` + +When the alarm is recovered, the following information is displayed: + +```sh +info|sysmonitor[127]: memory usage resume: 4.6% +``` + +## Process and Thread Monitoring + +### Introduction + +Monitors the number of processes and threads. When the total number of processes or threads exceeds or falls below the threshold, a log is recorded or an alarm is reported. + +### Configuration File Description + +The configuration file is **/etc/sysmonitor/pscnt**. + +```sh +# number of processes(include threads) when alarm occur +ALARM="1600" + +# number of processes(include threads) when alarm resume +RESUME="1500" + +# monitor period(second) +PERIOD="60" + +# process count usage alarm percent +ALARM_RATIO="90" + +# process count usage resume percent +RESUME_RATIO="80" + +# print top process info with largest num of threads when threads alarm +# (range: 0-1024, default: 10, monitor for thread off:0) +SHOW_TOP_PROC_NUM="10" +``` + +| Item | Description | Mandatory| Default Value| +| ----------------- | ------------------------------------------------------------ | -------- | ------ | +| ALARM | Integer greater than 0, indicating the process count alarm threshold | No | 1600 | +| RESUME | Integer greater than or equal to 0, indicating the process count alarm recovery threshold | No | 1500 | +| PERIOD | Monitoring period, in seconds. The value is greater than 0. | No | 60 | +| ALARM_RATIO | Number greater than 0 and less than or equal to 100. Process count alarm threshold. | No | 90 | +| RESUME_RATIO | Number greater than 0 and less than or equal to 100. Process count alarm recovery threshold, which must be less than **ALARM_RATIO**.| No | 80 | +| SHOW_TOP_PROC_NUM | Whether to use the latest `top` information about threads | No | 10 | + +- After modifying the configuration file for process count monitoring, run `systemctl reload sysmonitor`. The new configuration takes effect after a monitoring period. +- The value of **ALARM** must be greater than that of **RESUME**. +- The process count alarm threshold is the larger between **ALARM** and **ALARM_RATIO** in **/proc/sys/kernel/pid_max**. The alarm recovery threshold is the larger of **RESUME** and **RESUME_RATIO** in **/proc/sys/kernel/pid_max**. +- The thread count alarm threshold is the larger between **ALARM** and **ALARM_RATIO** in **/proc/sys/kernel/threads-max**. The alarm recovery threshold is the larger of **RESUME** and **RESUME_RATIO** in **/proc/sys/kernel/threads-max**. +- The value of **SHOW_TOP_PROC_NUM** ranges from 0 to 1024. 0 indicates that thread monitoring is disabled. A larger value, for example, 1024, indicates that thread alarms will be generated in the environment. If the alarm threshold is high, the performance is affected. You are advised to set this parameter to the default value 10 or a smaller value. If the impact is huge, you are advised to set this parameter to 0 to disable thread monitoring. +- The value of **PSCNT_MONITOR** in **/etc/sysconfig/sysmonitor** and the value of **SHOW_TOP_PROC_NUM** in **/etc/sysmonitor/pscnt** determine whether thread monitoring is enabled. + - If **PSCNT_MONITOR** is on and **SHOW_TOP_PROC_NUM** is set to a valid value, thread monitoring is enabled. + - If **PSCNT_MONITOR** is on and **SHOW_TOP_PROC_NUM** is 0, thread monitoring is disabled. + - If **PSCNT_MONITOR** is off, thread monitoring is disabled. +- When a process count alarm is generated, the system FD usage information and memory information (**/proc/meminfo**) are printed. +- When a thread count alarm is generated, the total number of threads, `top` process information, number of processes in the current environment, number of system FDs, and memory information (**/proc/meminfo**) are printed. +- If system resources are insufficient before a monitoring period ends, for example, the thread count exceeds the maximum number allowed, the monitoring cannot run properly due to resource limitation. As a result, the alarm cannot be generated. + +### Exception Logs + +If a process count alarm is detected, the following information is displayed in the **/var/log/sysmonitor.log** file: + +```sh +info|sysmonitor[127]:---------------process count alarm start: --------------- +info|sysmonitor[127]: process count alarm:1657 +info|sysmonitor[127]: process count alarm, show sys fd count: 2592 +info|sysmonitor[127]: process count alarm, show mem info +info|sysmonitor[127]:---------------show /proc/meminfo: --------------- +info|sysmonitor[127]:MemTotal: 3496388 kB +info|sysmonitor[127]:MemFree: 2738100 kB +info|sysmonitor[127]:MemAvailable: 2901888 kB +info|sysmonitor[127]:Buffers: 165064 kB +info|sysmonitor[127]:Cached: 282360 kB +info|sysmonitor[127]:SwapCached: 4492 kB +...... +info|sysmonitor[127]:---------------show_memory_info end. --------------- +info|sysmonitor[127]:---------------process count alarm end: --------------- +``` + +If a process count recovery alarm is detected, the following information is displayed in the **/var/log/sysmonitor.log** file: + +```sh +info|sysmonitor[127]: process count resume: 1200 +``` + +If a thread count alarm is detected, the following information is displayed in the **/var/log/sysmonitor.log** file: + +```sh +info|sysmonitor[127]:---------------threads count alarm start: --------------- +info|sysmonitor[127]:threads count alarm: 273 +info|sysmonitor[127]:open threads most 10 processes is [top1:pid=1756900,openthreadsnum=13,cmd=/usr/bin/sysmonitor --daemon] +info|sysmonitor[127]:open threads most 10 processes is [top2:pid=3130,openthreadsnum=13,cmd=/usr/lib/gassproxy -D] +..... +info|sysmonitor[127]:---------------threads count alarm end. --------------- +``` + +## System FD Count Monitoring + +### Introduction + +Monitors the number of system FDs. When the total number of system FDs exceeds or is less than the threshold, a log is recorded. + +### Configuration File Description + +The configuration file is **/etc/sysmonitor/sys_fd_conf**. + +```sh +# system fd usage alarm percent +SYS_FD_ALARM="80" +# system fd usage alarm resume percent +SYS_FD_RESUME="70" +# monitor period (second) +SYS_FD_PERIOD="600" +``` + +Configuration items: + +| Item | Description | Mandatory| Default Value| +| ------------- | --------------------------------------------------------- | -------- | ------ | +| SYS_FD_ALARM | Integer greater than 0 and less than 100, indicating the alarm threshold of the percentage of the total number of FDs and the maximum number of FDs allowed.| No | 80 | +| SYS_FD_RESUME | Integer greater than 0 and less than 100, indicating the alarm recovery threshold of the percentage of the total number of FDs and the maximum number of FDs allowed.| No | 70 | +| SYS_FD_PERIOD | Integer between 100 and 86400, indicating the monitor period in seconds | No | 600 | + +- After modifying the configuration file for FD count monitoring, run `systemctl reload sysmonitor`. The new configuration takes effect after a monitoring period. +- The value of **SYS_FD_ALARM** must be greater than that of **SYS_FD_RESUME**. If the value is invalid, the default value is used and a log is recorded. + +### Exception Logs + +An FD count alarm is recorded in the monitoring logs when detected. The following information is displayed in the **/var/log/sysmonitor.log** file: + +```sh +info|sysmonitor[127]: sys fd count alarm: 259296 +``` + +When a system FD usage alarm is generated, the top three processes that use the most FDs are printed. + +```sh +info|sysmonitor[127]:open fd most three processes is:[top1:pid=23233,openfdnum=5000,cmd=/home/openfile] +info|sysmonitor[127]:open fd most three processes is:[top2:pid=23267,openfdnum=5000,cmd=/home/openfile] +info|sysmonitor[127]:open fd most three processes is:[top3:pid=30144,openfdnum=5000,cmd=/home/openfile] +``` + +## Drive Inode Monitoring + +### Introduction + +Periodically monitors the inodes of mounted drive partitions. When the drive partition inode usage is greater than or equal to the configured alarm threshold, the system records a drive inode alarm. When the drive inode usage falls below the configured alarm recovery threshold, a drive inode recovery alarm is recorded. + +### Configuration File Description + +The configuration file is **/etc/sysmonitor/inode**. + +```sh +DISK="/" +DISK="/var/log" +``` + +| Item| Description | Mandatory| Default Value| +| ------ | ------------------------- | -------- | ------ | +| DISK | Mount directory | Yes | None | +| ALARM | Integer indicating the drive inode alarm threshold| No | 90 | +| RESUME | Integer indicating the drive inode alarm recovery threshold| No | 80 | + +- After modifying the configuration file for drive inode monitoring, run `systemctl reload sysmonitor`. The new configuration takes effect after a monitoring period. +- If a mount directory is configured repeatedly, the last configuration item takes effect. +- The value of **ALARM** must be greater than that of **RESUME**. +- Only the mount point or the drive partition of the mount point can be monitored. +- When the CPU usage and I/O usage are high, the `df` command execution may time out. As a result, the drive inode usage cannot be obtained. +- If a drive partition is mounted to multiple mount points, an alarm is reported for each mount point. + +### Exception Logs + +If a drive inode alarm is detected, the following information is displayed in the **/var/log/sysmonitor.log** file: + +```sh +info|sysmonitor[4570]:report disk inode alarm, /var/log used:90% alarm:90% +info|sysmonitor[4570]:report disk inode recovered, /var/log used:79% alarm:80% +``` + +## Local Drive I/O Latency Monitoring + +### Introduction + +Reads the local drive I/O latency data every 5 seconds and collects statistics on 60 groups of data every 5 minutes. If more than 30 groups of data are greater than the configured maximum I/O latency, the system records a log indicating excessive drive I/O latency. + +### Configuration File Description + +The configuration file is **/etc/sysmonitor/iodelay**. + +```sh +DELAY_VALUE="500" +``` + +| Item | Description | Mandatory| Default Value| +| ----------- | -------------------- | -------- | ------ | +| DELAY_VALUE | Maximum drive I/O latency| Yes | 500 | + +### Exception Logs + +If a drive I/O latency alarm is detected, the following information is displayed in the **/var/log/sysmonitor.log** file: + +```sh +info|sysmonitor[127]:local disk sda IO delay is too large, I/O delay threshold is 70. +info|sysmonitor[127]:disk is sda, io delay data: 71 72 75 87 99 29 78 ...... +``` + +If a drive I/O latency recovery alarm is detected, the following information is displayed in the **/var/log/sysmonitor.log** file: + +```sh +info|sysmonitor[127]:local disk sda IO delay is normal, I/O delay threshold is 70. +info|sysmonitor[127]:disk is sda, io delay data: 11 22 35 8 9 29 38 ...... +``` + +## Zombie Process Monitoring + +### Introduction + +Monitors the number of zombie processes in the system. If the number is greater than the alarm threshold, an alarm log is recorded. When the number drops lower than the recovery threshold, a recovery alarm is reported. + +### Configuration File Description + +The configuration file is **/etc/sysmonitor/zombie**. + +```sh +# Ceiling zombie process counts of alarm +ALARM="500" + +# Floor zombie process counts of resume +RESUME="400" + +# Periodic (second) +PERIOD="600" +``` + +| Item| Description | Mandatory| Default Value| +| ------ | ------------------------------- | -------- | ------ | +| ALARM | Number greater than 0, indicating the zombie process count alarm threshold | No | 500 | +| RESUME | Number greater than or equal to 0, indicating the zombie process count recovery threshold| No | 400 | +| PERIOD | Monitoring period, in seconds. The value is greater than 0. | No | 60 | + +### Exception Logs + +If a zombie process count alarm is detected, the following information is displayed in the **/var/log/sysmonitor.log** file: + +```sh +info|sysmonitor[127]: zombie process count alarm: 600 +info|sysmonitor[127]: zombie process count resume: 100 +``` + +## Custom Monitoring + +### Introduction + +You can customize monitoring items. The monitoring framework reads the content of the configuration file, parses the monitoring attributes, and calls the monitoring actions to be performed. The monitoring module provides only the monitoring framework. It is not aware of what users are monitoring or how to monitor, and does not report alarms. + +### Configuration File Description + +The configuration files are stored in **/etc/sysmonitor.d/**. Each process or module corresponds to a configuration file. + +```sh +MONITOR_SWITCH="on" +TYPE="periodic" +EXECSTART="/usr/sbin/iomonitor_daemon" +PERIOD="1800" +``` + +| Item | Description | Mandatory | Default Value| +| -------------- | ------------------------------------------------------------ | --------------------- | ------ | +| MONITOR_SWITCH | Monitoring switch | No | off | +| TYPE | Custom monitoring item type
**daemon**: background execution
**periodic**: periodic execution| Yes | None | +| EXECSTART | Monitoring command | Yes | None | +| ENVIROMENTFILE | Environment variable file | No | None | +| PERIOD | If the type is **periodic**, this parameter is mandatory and sets the monitoring period. The value is an integer greater than 0.| Yes when the type is **periodic**| None | + +- The absolute path of the configuration file or environment variable file cannot contain more than 127 characters. The environment variable file path cannot be a soft link path. +- The length of the **EXECSTART** command cannot exceed 159 characters. No space is allowed in the key field. +- The execution of the periodic monitoring command cannot time out. Otherwise, the custom monitoring framework will be affected. +- Currently, a maximum of 256 environment variables can be configured. +- The custom monitoring of the daemon type checks whether the `reload` command is delivered or whether the daemon process exits abnormally every 10 seconds. If the `reload` command is delivered, the new configuration is loaded 10 seconds later. If a daemon process exits abnormally, the daemon process is restarted 10 seconds later. +- If the content of the **ENVIROMENTFILE** file changes, for example, an environment variable is added or the environment variable value changes, you need to restart the sysmonitor service for the new environment variable to take effect. +- You are advised to set the permission on the configuration files in the **/etc/sysmonitor.d/** directory to 600. If **EXECSTART** is only an executable file, you are advised to set the permission on the executable file to 550. +- After a daemon process exits abnormally, sysmonitor reloads the configuration file of the daemon process. + +### Exception Logs + +If a monitoring item of the daemon type exits abnormally, the **/var/log/sysmonitor.log** file records the following information: + +```sh +info|sysmonitor[127]: custom daemon monitor: child process[11609] name unetwork_alarm exit code[127],[1] times. +``` diff --git a/docs/en/server/maintenance/troubleshooting/_toc.yaml b/docs/en/server/maintenance/troubleshooting/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6de6fa3cf5a6c31eaf17d3890e9ddfeef2db4e92 --- /dev/null +++ b/docs/en/server/maintenance/troubleshooting/_toc.yaml @@ -0,0 +1,6 @@ +label: Troubleshooting +isManual: true +description: Common troubleshooting methods +sections: + - label: Troubleshooting + href: ./troubleshooting.md diff --git a/docs/en/server/maintenance/troubleshooting/images/c50cb9df64f4659787c810167c89feb4_1884x257.png b/docs/en/server/maintenance/troubleshooting/images/c50cb9df64f4659787c810167c89feb4_1884x257.png new file mode 100644 index 0000000000000000000000000000000000000000..01081f25627731c56764c196e3fae32d55bc7023 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/c50cb9df64f4659787c810167c89feb4_1884x257.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001321685172.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001321685172.png new file mode 100644 index 0000000000000000000000000000000000000000..acbe1f90720a7cc56dd20d03f00918264680a7db Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001321685172.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001322112990.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001322112990.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4b32bf2b36595abe10f2550cda5714bc355553 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001322112990.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001322219840.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001322219840.png new file mode 100644 index 0000000000000000000000000000000000000000..48b28664df46ddf9aa38c7570bb9e9edb8080ac9 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001322219840.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001322372918.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001322372918.png new file mode 100644 index 0000000000000000000000000000000000000000..5424367c9bc564e713220ba87f963096881833b8 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001322372918.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001322379488.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001322379488.png new file mode 100644 index 0000000000000000000000000000000000000000..8b18cdca066be43b74443498edc5500ea9e1e608 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001322379488.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001335457246.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001335457246.png new file mode 100644 index 0000000000000000000000000000000000000000..325d6a8ce097db0b92b1a883bc4b3d4ad0bc6a49 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001335457246.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337000118.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337000118.png new file mode 100644 index 0000000000000000000000000000000000000000..37131647778506f24be4ff401392a9cc209a36eb Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337000118.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337039920.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337039920.png new file mode 100644 index 0000000000000000000000000000000000000000..40c07e9b6ec27cdbe47d39788736b892f1174cc8 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337039920.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337053248.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337053248.png new file mode 100644 index 0000000000000000000000000000000000000000..8859f37749a4f8a4394e24ddfb54fc473e8c10c2 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337053248.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337172594.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337172594.png new file mode 100644 index 0000000000000000000000000000000000000000..4e806f83c57880543a777807778f14eeb0105aba Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337172594.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337260780.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337260780.png new file mode 100644 index 0000000000000000000000000000000000000000..09d521d933f5fa0caacc592ea92acee959786051 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337260780.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337420372.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337420372.png new file mode 100644 index 0000000000000000000000000000000000000000..2300bcd7426748236fd48b85688bd3d1fa3315df Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337420372.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337533690.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337533690.png new file mode 100644 index 0000000000000000000000000000000000000000..1f02d9b155754a113347a54a7d35ba9b060175a8 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337533690.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337536842.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337536842.png new file mode 100644 index 0000000000000000000000000000000000000000..5a9ee2c989638c9a6aad3fcfb35bb9b9f2d4683c Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337536842.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337580216.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337580216.png new file mode 100644 index 0000000000000000000000000000000000000000..5516b8d261b769287c74cf860a6708fcde6bbb8a Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337580216.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337696078.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337696078.png new file mode 100644 index 0000000000000000000000000000000000000000..3864852e345eaf01794042feaa85b012b8af71de Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337696078.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337740252.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337740252.png new file mode 100644 index 0000000000000000000000000000000000000000..fd83fb600a54ab8bc39ee2ae54210be8b6c48973 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337740252.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337740540.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337740540.png new file mode 100644 index 0000000000000000000000000000000000000000..b8e25128a47dccaed733fc192f52f2ca7828e516 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001337740540.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001372249333.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001372249333.png new file mode 100644 index 0000000000000000000000000000000000000000..48cd37225954e212cb3e159acc137866d8edc362 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001372249333.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001372748125.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001372748125.png new file mode 100644 index 0000000000000000000000000000000000000000..5f6326b9415cf766dd8379dbadd5aa1a0dc6861f Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001372748125.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001372821865.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001372821865.png new file mode 100644 index 0000000000000000000000000000000000000000..21e8dad1cd90755440cf858523b12c036a91e1ad Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001372821865.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001372824637.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001372824637.png new file mode 100644 index 0000000000000000000000000000000000000000..aefb5d83c079e6718ef88fd934b4b496cdc29565 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001372824637.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001373373585.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001373373585.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e5e47c9beca2c7c7630d78916f80eda652b52a Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001373373585.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001373379529.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001373379529.png new file mode 100644 index 0000000000000000000000000000000000000000..daa40b49e679668905632f25ff42bf8599ba0ead Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001373379529.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001384808269.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001384808269.png new file mode 100644 index 0000000000000000000000000000000000000000..be18ecef3a149d5742f18535552f66f26ab34832 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001384808269.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001385585749.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001385585749.png new file mode 100644 index 0000000000000000000000000000000000000000..c13604ab7095c2a7717bde1384f0aea3d53f69e3 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001385585749.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001385611905.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001385611905.png new file mode 100644 index 0000000000000000000000000000000000000000..8c233e40a21e678ddf4115c2e2e80c96e25a60ce Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001385611905.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001386699925.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001386699925.png new file mode 100644 index 0000000000000000000000000000000000000000..cf5b13b35e65ed0143a01a5bcad1e11eaddaded7 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001386699925.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387293085.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387293085.png new file mode 100644 index 0000000000000000000000000000000000000000..7f56b020949c53d018eba016952c2409f0d7dca9 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387293085.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387413509.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387413509.png new file mode 100644 index 0000000000000000000000000000000000000000..2245427058fc31f3e5d7f40062c0551936a67199 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387413509.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387413793.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387413793.png new file mode 100644 index 0000000000000000000000000000000000000000..aa649bf7215662819766d897513fb711d9d1e7f8 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387413793.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387415629.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387415629.png new file mode 100644 index 0000000000000000000000000000000000000000..01189358354090591de6580f8ef88ef78ddba3a1 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387415629.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387692269.jpg b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387692269.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b79e3ddf78520277046b933c4662c6b72f45ab85 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387692269.jpg differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387692893.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387692893.png new file mode 100644 index 0000000000000000000000000000000000000000..49ea515d834b58d4ded14c55a6a2b07034d76137 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387692893.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387755969.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387755969.png new file mode 100644 index 0000000000000000000000000000000000000000..b2daa95d6b757e7bd443d8fd961922f248dd6853 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387755969.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387780357.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387780357.png new file mode 100644 index 0000000000000000000000000000000000000000..1aab3b8be2cd0c906253d70036a9fee3050a1055 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387780357.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387855149.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387855149.png new file mode 100644 index 0000000000000000000000000000000000000000..731e957c367cb05e4229f53cf97dcee2cde69dff Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387855149.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387857005.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387857005.png new file mode 100644 index 0000000000000000000000000000000000000000..872f5c9eb05169831df4ba49d017629e8a943c64 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001387857005.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001388020197.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001388020197.png new file mode 100644 index 0000000000000000000000000000000000000000..1816e1e068ee0294677ebb357ffd158a14bb86cf Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001388020197.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001388972645.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001388972645.png new file mode 100644 index 0000000000000000000000000000000000000000..e32606925f4bb4380b262d9f946d4cd106202b87 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001388972645.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001389098425.png b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001389098425.png new file mode 100644 index 0000000000000000000000000000000000000000..c63903009ab9ba454f169250632dbec1b3c94467 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_image_0000001389098425.png differ diff --git a/docs/en/server/maintenance/troubleshooting/images/en-us_other_0000001337581224.jpeg b/docs/en/server/maintenance/troubleshooting/images/en-us_other_0000001337581224.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2c019b828bdf9c699f203f09ba3542968ff21262 Binary files /dev/null and b/docs/en/server/maintenance/troubleshooting/images/en-us_other_0000001337581224.jpeg differ diff --git a/docs/en/server/maintenance/troubleshooting/troubleshooting.md b/docs/en/server/maintenance/troubleshooting/troubleshooting.md new file mode 100644 index 0000000000000000000000000000000000000000..3b2adbad53ef627dabf603ab6386e652f01fe901 --- /dev/null +++ b/docs/en/server/maintenance/troubleshooting/troubleshooting.md @@ -0,0 +1,95 @@ +# Troubleshooting + +## Triggering kdump Restart + +```shell +# Write 1 to the sysrq file to enable the SysRq function. After this function is enabled, the kernel will respond to any operation. +echo 1 > /proc/sys/kernel/sysrq + +# Make the system crash. +echo c > /proc/sysrq-trigger +``` + +## Performing Forcible Restart + +You can use either of the following methods to forcibly restart the OS: + +- Manually restart the OS. + +```shell +reboot -f +``` + +- Forcibly power on and off the OS through iBMC. + +![en-us_image_0000001372249333](./images/en-us_image_0000001372249333.png) + +## Restarting the Network + +openEuler uses NetworkManager to manage the network. Run the following command to restart the network: + +```shell +systemctl restart NetworkManager +``` + +## Repairing the File System + +After the OS is forcibly powered off and then powered on, the file system may be damaged. When the OS is started, it automatically checks and repairs the file system. If the file system fails to be repaired, you need to run the **fsck** command to scan for and repair the file system. + +```shell +# In this case, the system enters the rescue mode. Check which file system is damaged in the log. +journalctl -xb +# Check whether the partition has been mounted before the repair. +cat /proc/mounts +# Uninstall the directory. +umount xx +# If the directory cannot be uninstalled, kill the process that occupies the directory. +lsof | grep xxx +kill xxx +# Run the fsck command to rectify the fault. Enter yes or no when prompted. +fsck -y /dev/xxx +``` + +## Manually Dropping Cache + +```shell +# Different values of N can achieve different clearance purposes. According to the Linux kernel document, run the sync command before clearing data. (The drop operation does not release any dirty objects. The sync command writes all unwritten system buffers to drives, including modified inodes, delayed block I/Os, and read/write mapping files. In this way, dirty objects can be reduced so that more objects can be released.) +echo N > /proc/sys/vm/drop_caches + +# Release the page caches. +echo 1 > /proc/sys/vm/drop_caches + +# Release dentries and inodes. +echo 2 > /proc/sys/vm/drop_caches + +# Release the page caches, dentries, and inodes. +echo 3 > /proc/sys/vm/drop_caches +``` + +## Rescue Mode and Single-User Mode + +- Rescue mode + + Mount the openEuler 22.03 LTS SP4 ISO image and enter the rescue mode. + + 1. Select **Troubleshooting**. + 2. Select **Rescue a openEuler system**. + 3. Proceed as prompted. + + ```text + 1)Continue + + 2)Read-only mount + + 3)Skip to shell + + 4)Quit(Reboot) + ``` + +- Single-user mode + + On the login page, enter **e** to go to the grub page, add **init=/bin/sh** to the **linux** line, and press **Ctrl**+**X**. + + 1. Run the `mount -o remount,rw /` command. + 2. Perform operations such as changing the password. + 3. Enter **exit** to exit. diff --git a/docs/en/server/memory_storage/etmem/_toc.yaml b/docs/en/server/memory_storage/etmem/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..20f8bdc9cbf4bbac30d97df107a4e0407517637c --- /dev/null +++ b/docs/en/server/memory_storage/etmem/_toc.yaml @@ -0,0 +1,6 @@ +label: etmem User Guide +isManual: true +description: Expand memory capacity with etmem +sections: + - label: Using etmem + href: ./etmem_user_guide.md diff --git a/docs/en/server/memory_storage/etmem/etmem_user_guide.md b/docs/en/server/memory_storage/etmem/etmem_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..5490e7171f1b0620127b3d97e6c639dbce8fa0d5 --- /dev/null +++ b/docs/en/server/memory_storage/etmem/etmem_user_guide.md @@ -0,0 +1,773 @@ +# etmem User Guide + +## Introduction + +The development of CPU computing power, particularly lower costs of ARM cores, makes memory cost and capacity become the core frustration that restricts business costs and performance. Therefore, the most pressing issue is how to save memory cost and how to expand memory capacity. + +etmem is a tiered memory expansion technology that uses DRAM+memory compression/high-performance storage media to form tiered memory storage. Memory data is tiered, and cold data is migrated from memory media to high-performance storage media to release memory space and reduce memory costs. + +The tools provided by the etmem software package include the etmem client and the etmemd server. etmemd runs continuously after being launched and implements functions such as recognition and elimination of cold and hot memory of target processes. etmem runs once when called and controls etmemd to respond with different operations based on different command parameters. + +## Compilation + +1. Download the etmem source code. + + ```shell + git clone https://gitee.com/openeuler/etmem.git + ``` + +2. Install the compilation and running dependency. The compilation and running of etmem depend on the libboundscheck component. + + Install the dependency: + + ```bash + yum install libboundscheck + ``` + + Use the `rpm` command to check if the package is installed: + + ```bash + rpm -qi libboundscheck + ``` + +3. Build source code. + + ```bash + cd etmem + mkdir build + cd build + cmake .. + make + ``` + +## Precautions + +### Dependencies + +As a memory expansion tool, etmem needs to rely on kernel features. To identify memory access conditions and support the active writing of memory into the swap partition to achieve the requirement of vertical memory expansion, etmem needs to insert the **etmem_scan** and **etmem_swap** modules at runtime: + +```bash +modprobe etmem_scan +modprobe etmem_swap +``` + +### Restrictions + +The etmem process requires root privileges. The root user has the highest system privileges. When using the root user to perform operations, strictly follow the operation instructions to avoid system management and security risks. + +### Constraints + +- The client and server of etmem must be deployed on the same server. Cross-server communication is not supported. +- etmem can scan target processes whose process name is less than or equal to 15 characters. Supported characters in process names are letters, numbers, periods (.), slashes (/), hyphens (-), and underscores (\_). +- When AEP media is used for memory expansion, it relies on the system being able to correctly recognize the AEP device and initialize the device as a NUMA node. Additionally, the **vm_flags** field in the configuration file can only be configured as **ht**. +- The private commands of the engine are only valid for the corresponding engine and tasks under the engine, such as `showhostpages` and `showtaskpages` supported by cslide. +- In a third-party policy implementations, **fd** in the `eng_mgt_func` interface cannot be written with the **0xff** and **0xfe** characters. +- Multiple different third-party policy dynamic libraries, distinguished by **eng_name** in the configuration file, can be added within a project. +- Concurrent scanning of the same process is prohibited. +- Using the **/proc/xxx/idle_pages** and **/proc/xxx/swap_pages** files is prohibited when **etmem_scan** and **etmem_swap** modules are not loaded. +- The etmem configuration file requires the owner to be the root user, with permissions of 600 or 400. The size of the configuration file cannot exceed 10 MB. +- When etmem injects a third-party policy, the **so** of the third-party policy requires the owner to be the root user, with permissions of 500 or 700. + +## Instructions + +### etmem Configuration Files + +Before running the etmem process, the administrator needs to decide the memory of which processes needs to be expanded, configure the process information in the etmem configuration files, and configure information such as the memory scanning cycle, scanning times, and memory hot and cold thresholds. + +The configuration file examples are included in the source package and stored in the **/etc/etmem** directory. There are three example files: + +```text +/etc/etmem/cslide_conf.yaml +/etc/etmem/slide_conf.yaml +/etc/etmem/thirdparty_conf.yaml +``` + +Contents of the files are as follows: + +```sh +#slide engine example +#slide_conf.yaml +[project] +name=test +loop=1 +interval=1 +sleep=1 +sysmem_threshold=50 +swapcache_high_vmark=10 +swapcache_low_vmark=6 + +[engine] +name=slide +project=test + +[task] +project=test +engine=slide +name=background_slide +type=name +value=mysql +T=1 +max_threads=1 +swap_threshold=10g +swap_flag=yes + +#cslide engine example +#cslide_conf.yaml +[engine] +name=cslide +project=test +node_pair=2,0;3,1 +hot_threshold=1 +node_mig_quota=1024 +node_hot_reserve=1024 + +[task] +project=test +engine=cslide +name=background_cslide +type=pid +name=23456 +vm_flags=ht +anon_only=no +ign_host=no + +#Third-party engine example +#thirdparty_conf.yaml +[engine] +name=thirdparty +project=test +eng_name=my_engine +libname=/usr/lib/etmem_fetch/my_engine.so +ops_name=my_engine_ops +engine_private_key=engine_private_value + +[task] +project=test +engine=my_engine +name=background_third +type=pid +value=12345 +task_private_key=task_private_value +``` + +Fields in the configuration files are described as follows: + +| Item | Description | Mandatory | Contains Parameters | Parameter Range | Example | +| -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| \[project\] | Beginning identifier of the project public configuration section | No | No | N/A | Beginning identifier of the project parameters, indicating that the parameters below are within the range of the project section until another \[xxx\] or the end of the file | +| name | Name of the project | Yes | Yes | String of up to 64 characters | Specifies that the project, engine and task need to be mounted to the specified project during configuration. | +| loop | Number of loops for memory scan | Yes | Yes | 1~120 | loop=3 // Memory is scanned 3 times. | +| interval | Time interval for each memory scan | Yes | Yes | 1~1200 | interval=5 // The interval is 5s. | +| sleep | Time interval for each memory scan+operation | Yes | Yes | 1~1200 | sleep=10 //The interval is 10s | +| sysmem_threshold | Memory swapping threshold. This is a slide engine configuration item. | No | Yes | 0~100 | sysmem_threshold=50 // When available memory is less than 50%, etmem swaps out memory. | +| swapcache_high_wmark | High watermark of swapcache. This is a slide engine configuration item. | No | Yes | 1~100 | swapcache_high_wmark=5 // swapcache can be up to 5% of the system memory. If this ratio is reached, etmem triggers swapcache recycling.
Note: swapcache_high_wmark must be greater than swapcache_low_wmark. | +| swapcache_low_wmark | Low watermark of swapcache. This is a slide engine configuration item. | No | Yes | \[1~swapcache_high_wmark\) | swapcache_low_wmark=3 //When swapcache recycling is triggered, the system recycles the swapcache memory occupancy to less than 3%. | +| \[engine\] | Beginning identifier of the engine public configuration section | No | No | N/A | Beginning identifier of the engine parameters, indicating that the parameters below are within the range of the engine section until another \[xxx\] or the end of the file | +| project | project to which the engine belongs | Yes | Yes | String of up to 64 characters | If a project named test exists, the item can be **project=test**. | +| engine | engine to which the engine belongs | Yes | Yes | slide/cslide/thirdparty | Specifies the policy to use (**slide**, **cslide**, or **thirdparty**) | +| node_pair | Node pair of AEP and DRAM. This is a cslide engine configuration item. | Yes when **engine** is **cslide** | Yes | Pair the node numbers of AEP and DRAM. Separate AEP and DRAM using a comma, and separate each pair using semicolons. | node_pair=2,0;3,1 | +| hot_threshold | Threshold of hot memory watermark. This is a cslide engine configuration item. | Yes when **engine** is **cslide** | Yes | An integer greater than or equal to 0 and less than or equal to INT_MAX | hot_threshold=3 // Memory with less than 3 accesses will be recognized as cold memory. | +| node_mig_quota | Maximum one-way flow when DRAM and AEP migrate mutually. This is a cslide engine configuration item. | Yes when **engine** is **cslide** | Yes | An integer greater than or equal to 0 and less than or equal to INT_MAX | node_mig_quota=1024 // The unit is MB. A maximum of 1024 MB can be migrated from AEP to DRAM or from DRAM to AEP each time. | +| node_hot_reserve | Size of the reserved space for hot memory in DRAM. This is a cslide engine configuration item. | Yes when **engine** is **cslide** | Yes | An integer greater than or equal to 0 and less than or equal to INT_MAX | node_hot_reserve=1024 //The unit is MB. When the hot memory of all VMs is greater than this configuration value, the hot memory will also be migrated to AEP. | +| eng_name | Name of the engine for mounting by task. This is a third-party engine configuration item. | Yes when **engine** is **thirdparty** | Yes | String of up to 64 characters | eng_name=my_engine // When mounting a task to the third-party policy engine, specify **engine=my_engine** in the task. | +| libname | Absolute path to the dynamic library of the third-party policy. This is a third-party engine configuration item. | Yes when **engine** is **thirdparty** | Yes | String of up to 256 characters | libname=/user/lib/etmem_fetch/code_test/my_engine.so | +| ops_name | Name of the operator in the dynamic library of the third-party policy. This is a third-party engine configuration item. | Yes when **engine** is **thirdparty** | Yes | String of up to 256 characters | ops_name=my_engine_ops // Name of the struct for the third-party policy implementation interface | +| engine_private_key | Reserved item for third-party policies to parse private parameters by themselves. This is a third-party engine configuration item. | No | No | Restrict according to the third-party policy's private parameters. | Configure the private engine parameters according to the third-party policy. | +| \[task\] | Beginning identifier of the task public configuration section | No | No | N/A | Beginning identifier of the task parameters, indicating that the parameters below are within the range of the project section until another \[xxx\] or the end of the file | +| project | project to which the task belongs | Yes | Yes | String of up to 64 characters | If a project named test exists, the item can be **project=test**. | +| engine | engine to which the task belongs | Yes | Yes | String of up to 64 characters | Name of the engine to which the task belongs | +| name | Name of the task | Yes | Yes | String of up to 64 characters | name=background1 // The name of the task is background1. | +| type | How the target process is identified | Yes | Yes | pid/name | **pid** specifies to identify by PID. **name** specifies to identify by name. | +| value | Value to be identified for the target process | Yes | Yes | Actual PID/name | Used with **type** to specify the PID or name of the target process. Ensure the configuration is correct and unique. | +| T | Threshold of hot memory watermark. This is a slide engine configuration item. | Yes when **engine** is **slide** | Yes | 0~loop * 3 | T=3 // Memory with less than 3 accesses will be recognized as cold memory. | +| max_threads | Maximum number of threads in the etmem internal thread pool, with each thread handling a process/subprocess memory scan+operation task. This is a slide engine configuration item. | No | Yes | 1~2 * number of cores + 1, the default value is 1. | Controls the number of internal processing threads for the etmemd server without external representation. When the target process has multiple child processes, the larger the item value, the more concurrent executions, but the more resources consumed. | +| vm_flags | Flag of the VMA to be scanned. This is a cslide engine configuration item. | No | Yes | String of up to 256 characters, with different flags separated by spaces. | vm_flags=ht // Scans memory of the VMA whose flag is ht. | +| anon_only | Scans anonymous pages only. This is a cslide engine configuration item. | No | Yes | yes/no | anon_only=no | +| ign_host | Ignores page table scan information on the host. This is a cslide engine configuration item. | No | Yes | yes/no | ign_host=no | +| task_private_key | Reserved for a task of a third-party policy to parse private parameters. This is a third-party engine configuration item. | No | No | Restrict according to the third-party policy's private parameters. | Configure the private task parameters according to the third-party policy. | +| swap_threshold | Process memory swapping threshold. This is a slide engine configuration item. | No | Yes | Absolute value of memory available to the process | swap_threshold=10g // Memory swapping will not be triggered when the process memory is less than 10 GB.
Currently, the unit can only be **g** or **G**. This item is used with **sysmem_threshold**. When system memory is lower than **sysmem_threshold**, memory of processes in the allowlist is checked. | +| swap_flag | Enables process memory swapping. This is a slide engine configuration item. | No | Yes | yes/no | swap_flag=yes | + +### Starting etmemd + +Modify related configuration files before using etmem services. After being started, etmemd stays in the system to operate the memory of the target processes.To start etmemd, you can either run the `etmemd` command or configure a service file for `systemctl` to start etmemd. The latter requires the `mode-systemctl` option. + +#### How to Use + +Run the following command to start etmemd: + +```bash +etmemd -l 0 -s etmemd_socket +``` + +or + +```bash +etmemd --log-level 0 --socket etmemd_socket +``` + +The `0` parameter of option `-l` and the `etmemd_socket` parameter of option `-s` are user-defined parameters and are described as follows. + +#### Command Parameters + +| Option | Description | Mandatory | Contains Parameters | Parameter Range | Example | +| --------------- | ---------------------------------- | -------- | ---------- | --------------------- | ------------------------------------------------------------ | +| -l or \-\-log-level | etmemd log level | No | Yes | 0~3 | 0: debug level
1: info level
2: warning level
3: error level
Logs whose levels are higher than the specified value are printed to **/var/log/message**. | +| -s or \-\-socket | Socket listened by etmemd to interact with the client | Yes | Yes | String of up to 107 characters | Socket listened by etmemd | +| -m or \-\-mode-systemctl| Starts the etmemd service through systemctl | No| No| N/A| The `-m` option needs to be specified in the service file.| +| -h or \-\-help | Prints help information | No | No | N/A | This option prints help information and exit. | + +### Adding and Deleting Projects, Engines, and Tasks Using the etmem Client + +#### Scenario + +1. The administrator adds a project, engine, or task to etmem (a project can contain multiple etmem engines, an engine can contain multiple tasks). + +2. The administrator deletes an existing etmem project, engine, or task (all tasks in a project is stopped before the project is deleted). + +#### Usage + +When etmemd is running normally, run `etmem` with the `obj` option to perform addition and deletion. etmem automatically identifies projects, engines, or tasks according to the content of the configuration file. + +- Add an object. + + ```bash + etmem obj add -f /etc/etmem/slide_conf.yaml -s etmemd_socket + ``` + + or + + ```bash + etmem obj add --file /etc/etmem/slide_conf.yaml --socket etmemd_socket + ``` + +- Delete an object. + + ```bash + etmem obj del -f /etc/etmem/slide_conf.yaml -s etmemd_socket + ``` + + or + + ```bash + etmem obj del --file /etc/etmem/slide_conf.yaml --socket etmemd_socket + ``` + +#### Command Parameters + +| Option | Description | Mandatory | Contains Parameters | Parameter Range | Example | +| ---------------- | -------------------------------------------------------------------------------------------------------------- | --------- | ------------------- | ----------------------------------------------------------------------------------------------------- | ------- | +| -f or \-\-file | Specifies the configuration file of the object. | Yes | Yes | Specify the path. | | +| -s or \-\-socket | Socket used for communication with etmemd, which must be the same as the one specified when etmemd is started. | Yes | Yes | The administrator can use this option to specify an etmemd server when multiple etmemd servers exist. | | + +### Querying, Starting, and Stopping Projects Using the etmem Client + +#### Scenario + +A project is added by using `etmem obj add` and is not deleted by using `etmem obj del`. In this case, the project can be started and stopped. + +1. The administrator starts an added project. + +2. The administrator stops a started project. + +A started project will be stopped if the administrator run `obj del` to delete the project. + +#### Usage + +Added projects can be started and stopped by using `etmem project` commands. + +- Query a project. + + ```bash + etmem project show -n test -s etmemd_socket + ``` + + or + + ```bash + etmem project show --name test --socket etmemd_socket + ``` + +- Start a project. + + ```bash + etmem project start -n test -s etmemd_socket + ``` + + or + + ```bash + etmem project start --name test --socket etmemd_socket + ``` + +- Stop a project. + + ```bash + etmem project stop -n test -s etmemd_socket + ``` + + or + + ```bash + etmem project stop --name test --socket etmemd_socket + ``` + +- Print help information. + + ```bash + etmem project help + ``` + +#### Command Parameters + +| Option | Description | Mandatory | Contains Parameters | Parameter Range | Example | +| ---------------- | -------------------------------------------------------------------------------------------------------------- | --------- | ------------------- | ----------------------------------------------------------------------------------------------------- | ------- | +| -n or \-\-name | Name of the project | Yes | Yes | The project name corresponds to the configuration file. | | +| -s or \-\-socket | Socket used for communication with etmemd, which must be the same as the one specified when etmemd is started. | Yes | Yes | The administrator can use this option to specify an etmemd server when multiple etmemd servers exist. | | + +### Specifying System Memory Swapping Threshold and Process Memory Swapping Using the etmem Client + +Only slide policies support private features. + +- Process or system memory swapping threshold + +It is necessary to consider the timing of etmem memory swapping for optimal performance. Memory swapping is not performed when the system has enough available memory or a process occupies a low amount of memory. Memory swapping threshold can be specified for the system and processes. + +- Process memory swapping + +The memory of I/O latency-sensitive service processes should not be swapped in the storage scenario. In this case, you can disable memory swapping for certain services. + +Process and system memory swapping thresholds and process memory swapping are controlled by the **sysmem_threshold**, **swap_threshold**, and **swap_flag** parameters in the configuration file. For details, see [etmem Configuration Files](#etmem-configuration-files). + +```sh +#slide_conf.yaml +[project] +name=test +loop=1 +interval=1 +sleep=1 +sysmem_threshold=50 + +[engine] +name=slide +project=test + +[task] +project=test +engine=slide +name=background_slide +type=name +value=mysql +T=1 +max_threads=1 +swap_threshold=10g +swap_flag=yes +``` + +#### System Memory Swapping Threshold + +The **sysmem_threshold** parameter is used to set system memory swapping threshold. The value range for **sysmem_threshold** is 0 to 100. If **sysmem_threshold** is set in the configuration file, etmem will swap memory when system memory is lower than **sysmem_threshold**. + +For example: + +1. Compose the configuration according to the example. Set **sysmem_threshold** to **20**. +2. Start the server, add a project to the server, and start the project. + + ```bash + etmemd -l 0 -s monitor_app & + etmem obj add -f etmem_config -s monitor_app + etmem project start -n test -s monitor_app + etmem project show -s monitor_app + ``` + +3. Observe the memory swapping results. etmem swaps memory only when the system available memory is less than 20%. + +#### Process Memory Swapping Threshold + +The **swap_threshold** parameter is used to set process memory swapping threshold. **swap_threshold** is the absolute memory usage of a process in the format of \**g/G**. If **swap_threshold** is set in the configuration file, etmem will not swap memory of the process when the process memory usage is lower then **swap_threshold**. + +For example: + +1. Compose the configuration according to the example. Set **swap_threshold** to **5g**. +2. Start the server, add a project to the server, and start the project. + + ```bash + etmemd -l 0 -s monitor_app & + etmem obj add -f etmem_config -s monitor_app + etmem project start -n test -s monitor_app + etmem project show -s monitor_app + ``` + +3. Observe the memory swapping results. etmem swaps memory only when the process memory usage reaches 5 GB. + +#### Process Memory Swapping + +The **swap_flag** parameter is used to enable the process memory swapping feature. The value of **swap_flag** can be **yes** or **no**. If **swap_flag** is **no** or not configured, etmem swaps memory normally. If **swap_flag** is **yes**, etmem swaps memory of the specified processes only. + +For example: + +1. Compose the configuration according to the example. Set **swap_flag** to **yes**. +2. Flag the memory to be swapped for the service process. + + ```bash + madvise(addr_start, addr_len, MADV_SWAPFLAG) + ``` + +3. Start the server, add a project to the server, and start the project. + + ```bash + etmemd -l 0 -s monitor_app & + etmem obj add -f etmem_config -s monitor_app + etmem project start -n test -s monitor_app + etmem project show -s monitor_app + ``` + +4. Observe the memory swapping results. Only the flagged memory is swapped. Other memory is retained in the DRAM. + +In the process memory page swapping scenario, `ioctl` is added to the original scan interface file **idle_pages** to ensure that VMAs that are not flagged do not participate in memory scanning and swapping. + +Scan management interface: + +- Function prototype + + ```c + ioctl(fd, cmd, void *arg); + ``` + +- Input parameters + 1. fd: file descriptor, which is obtained by opening a file under /proc/pid/idle_pages using the open system call + 2. cmd: controls the scan actions. The following values are supported: + VMA_SCAN_ADD_FLAGS: adds VMA memory swapping flags to scan only flagged VMAs + VMA_SCAN_REMOVE_FLAGS: removes added VMA memory swapping flags + 3. args: integer pointer parameter used to pass a specific mask. The following value is supported: + VMA_SCAN_FLAG: Before the etmem_scan.ko module starts scanning, the walk_page_test interface is called to determine whether the VMA address meets the scanning requirements. If this flag is set, only the VMA addresses that contain specific swap flags are scanned. + +- Return values + 1. 0 if the command succeeds + 2. Other values if the command fails + +- Precautions + Unsupported flags are ignored and do not return errors. + +### Specifying swapcache Memory Recycling Instructions Using the etmem Client + +The user-mode etmem initiates a memory elimination and recycling operation and interacts with the kernel-mode memory recycling module through the **write procfs** interface. The memory recycling module parses the virtual address sent from the user space, obtains the page corresponding to the address, and calls the native kernel interface to swap and recycle the memory corresponding to the page. During memory swapping, swapcache will use some system memory. To further save memory, the swapcache memory recycling feature is added. + +Add **swapcache_high_wmark** and **swapcache_low_wmark** parameters to use the swapcache memory recycling feature. + +- **swapcache_high_wmark**: High system memory water of swapcache +- **swapcache_low_wmark**: Low system memory water of swapcache + +After etmem swaps memory, it checks the swapcache memory occupancy. When the occupancy exceeds the high watermark, an `ioctl` instruction will be issued through **swap_pages** to trigger the swapcache memory recycling and stop when swapcache memory occupancy reaches the low watermark. + +An example configuration file is as follows. For details, see [etmem Configuration Files](#etmem-configuration-files). + +```sh +#slide_conf.yaml +[project] +name=test +loop=1 +interval=1 +sleep=1 +swapcache_high_vmark=5 +swapcache_low_vmark=3 + +[engine] +name=slide +project=test + +[task] +project=test +engine=slide +name=background_slide +type=name +value=mysql +T=1 +max_threads=1 +``` + +During memory swapping, swapcache memory needs to be recycled to further save memory. An `ioctl` interface is added to the original memory swap interface to configure swapcache watermarks and swapcache memory recycling. + +- Function prototype + + ```c + ioctl(fd, cmd, void *arg); + ``` + +- Input parameters + 1. fd: file descriptor, which is obtained by opening a file under /proc/pid/idle_pages using the open system call + 2. cmd: controls the scan actions. The following values are supported: + RECLAIM_SWAPCACHE_ON: enables swapcache memory swapping + RECLAIM_SWAPCACHE_OFF: disables swapcache memory swapping + SET_SWAPCACHE_WMARK: configures swapcache memory watermarks + 3. args: integer pointer parameter used to pass a specific mask. The following value is supported: + Parameters that pass the values of swapcache watermarks + +- Return values + 1. 0 if the command succeeds + 2. Other values if the command fails + +- Precautions + Unsupported flags are ignored and do not return errors. + +### Executing Private Commands and Functions Using the etmem Client + +Only the cslide policy support private commands. + +- `showtaskpages` +- `showhostpages` + +For engines and tasks of engines that use the cslide policy, you can run the commands above to query the page access of tasks and the usage of system huge pages on the host of VMs. + +For example: + +```bash +etmem engine showtaskpages <-t task_name> -n proj_name -e cslide -s etmemd_socket + +etmem engine showhostpages -n proj_name -e cslide -s etmemd_socket +``` + +**Note**: `showtaskpages` and `showhostpages` are supported by the cslide policy only. + +#### Command Parameters + +| Option | Description | Mandatory | Contains Parameters | Parameter Range | Example | +| ------------------- | -------------------------------------------------------------------------------------------------------------- | --------- | ------------------- | ----------------------------------------------------------------------------------------------------- | ------- | +| -n or \-\-proj_name | Name of the project | Yes | Yes | Name of an existing project to run | | +| -s or \-\-socket | Socket used for communication with etmemd, which must be the same as the one specified when etmemd is started. | Yes | Yes | The administrator can use this option to specify an etmemd server when multiple etmemd servers exist. | | +| -e or \-\-engine | Name of the engine to run | Yes | Yes | Name of an existing engine to run | | +| -t or \-\-task_name | Name of the task to run | No | Yes | Name of an existing task to run | | + +### Enabling and Disabling Kernel Swap + +When etmem swaps memory to the drive to expand memory, you can choose to enable the kernel swap feature. You can disable the native kernel swap mechanism to void swapping memory undesirably, resulting in problems with user-mode processes. + +A sys interface is provided to implement such control. A **kobj** named **kernel_swap_enable** is created in **/sys/kernel/mm/swap** to enable and disable kerne swap. The default value of **kernel_swap_enable** is **true**. + +For example: + +```sh +# Enable kernel swap +echo true > /sys/kernel/mm/swap/kernel_swap_enable +or +echo 1 > /sys/kernel/mm/swap/kernel_swap_enable + +# Disable kernel swap +echo false > /sys/kernel/mm/swap/kernel_swap_enable +or +echo 0 > /sys/kernel/mm/swap/kernel_swap_enable + +``` + +### Starting etmem Upon System Startup + +#### Scenario + +You can configure the systemd configuration file to run etmemd as a forking service of systemd. + +#### Usage + +Compose a service configuration file to start etmemd with the `-m` option. For example: + +```bash +etmemd -l 0 -s etmemd_socket -m +``` + +#### Command Parameters + +| Option | Description | Mandatory | Contains Parameters | Parameter Range | Example | +| --------------- | ---------------------------------- | -------- | ---------- | --------------------- | ------------------------------------------------------------ | +| -l or \-\-log-level | etmemd log level | No | Yes | 0~3 | 0: debug level
1: info level
2: warning level
3: error level
Logs whose levels are higher than the specified value are printed to **/var/log/message**. | +| -s or \-\-socket | Socket listened by etmemd to interact with the client | Yes | Yes | String of up to 107 characters | Socket listened by etmemd | +| -m or \-\-mode-systemctl| Starts the etmemd service through systemctl | No| No| N/A| The `-m` option needs to be specified in the service file.| +| -h or \-\-help | Prints help information | No | No | N/A | This option prints help information and exit. | + +### Supporting Third-party Memory Expansion Policies With etmem + +#### Scenario + +etmem provides third-party memory expansion policy registration and module scanning dynamic library and can eliminate memory according to third-party policies. + +You can use the module scanning dynamic library to implement the interface of the struct required for connecting to etmem. + +#### Usage + +To use a third-party memory expansion elimination policy, perform the following steps: + +1. Invoke the scanning interface of the module as required. + +2. Implement the interfaces using the function template provided by the etmem header file and encapsulate them into a struct. + +3. Build a dynamic library of the third-party memory expansion elimination policy. + +4. Specify the **thirdparty** engine in the configuration file. + +5. Enter the names of the library and the interface struct to the corresponding **task** fields in the configuration file. + +Other steps are similar to those of using other engines. + +Interface struct template: + +```c +struct engine_ops { + +/* Parsing private parameters of the engine. Implement the interface if required, otherwise, set it to NULL. */ + +int (*fill_eng_params)(GKeyFile *config, struct engine *eng); + +/* Clearing private parameters of the engine. Implement the interface if required, otherwise, set it to NULL. */ + +void (*clear_eng_params)(struct engine *eng); + +/* Parsing private parameters of the task. Implement the interface if required, otherwise, set it to NULL. */ + +int (*fill_task_params)(GKeyFile *config, struct task *task); + +/* Clearing private parameters of the task. Implement the interface if required, otherwise, set it to NULL. */ + +void (*clear_task_params)(struct task *tk); + +/* Task starting interface */ + +int (*start_task)(struct engine *eng, struct task *tk); + +/* Task stopping interface */ + +void (*stop_task)(struct engine *eng, struct task *tk); + +/* Allocate PID-related private parameters */ + +int (*alloc_pid_params)(struct engine *eng, struct task_pid **tk_pid); + +/* Destroy PID-related private parameters */ + +void (*free_pid_params)(struct engine *eng, struct task_pid **tk_pid); + +/* Support for private commands required by the third-party policy. If this interface is not required, set it to NULL */ + +int (*eng_mgt_func)(struct engine *eng, struct task *tk, char *cmd, int fd); + +}; +``` + +External interfaces of the scanning module: + +| Interface |Description| +| ------------ | --------------------- | +| etmemd_scan_init | Initializes the scanning module| +| etmemd_scan_exit | Exits the scanning module| +| etmemd_get_vmas | Gets the VMAs to be scanned| +| etmemd_free_vmas | Releases VMAs scanned by `etmemd_get_vmas`| +| etmemd_get_page_refs | Scans pages in VMAs| +| etmemd_free_page_refs | Release the page access information list obtained by `etmemd_get_page_refs` | + +In the VM scanning scenario, `ioctl` is added to the original scan interface file **idle_pages** to distinguish the EPT scanning granularity and specify whether to ignore page access flags on the hosts. + +In the process memory page swapping scenario, `ioctl` is added to the original scan interface file **idle_pages** to ensure that VMAs that are not flagged do not participate in memory scanning and swapping. + +Scan management interface: + +- Function prototype + + ```c + ioctl(fd, cmd, void *arg); + ``` + +- Input parameters + 1. fd: file descriptor, which is obtained by opening a file under /proc/pid/idle_pages using the open system call + 2. cmd: controls the scan actions. The following values are supported: + IDLE_SCAN_ADD_FLAG: adds a scanning flag + IDLE_SCAM_REMOVE_FLAGS: removes a scanning flag + VMA_SCAN_ADD_FLAGS: adds VMA memory swapping flags to scan only flagged VMAs + VMA_SCAN_REMOVE_FLAGS: removes added VMA memory swapping flags + 3. args: integer pointer parameter used to pass a specific mask. The following value is supported: + SCAN_AS_HUGE: scans the pages according to the 2 MB granularity to see if the pages have been accessed when scanning the EPT page table. If this parameter is not set, the granularity will be the granularity of the EPT page table itself. + SCAN_IGN_HUGE: ignores page access flags on the hosts when scanning VMs. + VMA_SCAN_FLAG: Before the etmem_scan.ko module starts scanning, the walk_page_test interface is called to determine whether the VMA address meets the scanning requirements. If this flag is set, only the VMA addresses that contain specific swap flags are scanned. + +- Return values + 1. 0 if the command succeeds + 2. Other values if the command fails + +- Precautions + Unsupported flags are ignored and do not return errors. + +An example configuration file is as follows. For details, see [etmem Configuration Files](#etmem-configuration-files). + +```text +#thirdparty +[engine] + +name=thirdparty + +project=test + +eng_name=my_engine + +libname=/user/lib/etmem_fetch/code_test/my_engine.so + +ops_name=my_engine_ops + +engine_private_key=engine_private_value + +[task] + +project=test + +engine=my_engine + +name=background1 + +type=pid + +value=1798245 + +task_private_key=task_private_value +``` + + **Note**: + +You need to use the module scanning dynamic library to implement the interface of the struct required for connecting to etmem. + +**fd** in the `eng_mgt_func` interface cannot be written with the **0xff** and **0xfe** characters. + +Multiple different third-party policy dynamic libraries, distinguished by **eng_name** in the configuration file, can be added within a project. + +### Help Information of the etmem Client and Server + +Run the following command to print help information of the etmem server: + +```bash +etmemd -h +``` + +or: + +```bash +etmemd --help +``` + +Run the following command to print help information of the etmem client: + +```bash +etmem help +``` + +Run the following command to print help information of project, engine, and task operations: + +```bash +etmem obj help +``` + +Run the following command to print help information of projects: + +```bash +etmem project help +``` + +## How to Contribute + +1. Fork this repository. +2. Create a branch. +3. Commit your code. +4. Create a pull request (PR). diff --git a/docs/en/server/memory_storage/lvm/_toc.yaml b/docs/en/server/memory_storage/lvm/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a9ad341b1bb766d1e08e9c5b0933b7e198e93d84 --- /dev/null +++ b/docs/en/server/memory_storage/lvm/_toc.yaml @@ -0,0 +1,6 @@ +label: Logical Volume Configuration and Management +isManual: true +description: Use LVM to manage drives +sections: + - label: Managing Drives Through LVM + href: ./managing_drives_through_lvm.md diff --git a/docs/en/server/memory_storage/lvm/managing_drives_through_lvm.md b/docs/en/server/memory_storage/lvm/managing_drives_through_lvm.md new file mode 100644 index 0000000000000000000000000000000000000000..677303b811bc8737665643e9e9073a19a95896b7 --- /dev/null +++ b/docs/en/server/memory_storage/lvm/managing_drives_through_lvm.md @@ -0,0 +1,543 @@ +# Managing Drives Through LVM + +## LVM Overview + +Logical Volume Manager \(LVM\) is a mechanism used for managing drive partitions in Linux. By adding a logical layer between drives and file systems, LVM shields the drive partition layout for file systems, thereby improving flexibility in managing drive partitions. + +The procedure of managing a drive through LVM is as follows: + +1. Create physical volumes for a drive. +2. Combine several physical volumes into a volume group. +3. Create logical volumes in the volume group. +4. Create file systems on logical volumes. + +When drives are managed using LVM, file systems are distributed on multiple drives and can be easily resized as needed. Therefore, file system space will no longer be limited by drive capacities. + +### Basic Terms + +- Physical media: refers to physical storage devices in the system, such as drives \(**/dev/hda** and **/dev/sda**\). It is the storage unit at the lowest layer of the storage system. + +- Physical volume \(PV\): refers to a drive partition or device \(such as a RAID\) that has the same logical functions as a drive partition. PVs are basic logical storage blocks of LVM. A PV contains a special label that is stored in the second 512-byte sector by default. It can also be stored in one of the first four sectors. A label contains the universal unique identifier \(UUID\) of the PV, size of the block device, and the storage location of LVM metadata in the device. + +- Volume group \(VG\): consists of PVs and shields the details of underlying PVs. You can create one or more logical volumes within a VG without considering detailed PV information. + +- Logical volume \(LV\): A VG cannot be used directly. It can be used only after being partitioned into LVs. LVs can be formatted into different file systems and can be directly used after being mounted. + +- Physical extent \(PE\): A PE is a small storage unit in a PV. The PE size is the same as the size of the logical extent in the VG. + +- Logical extent \(LE\): An LE is a small storage unit in an LV. In one VG, the LEs of all the LVs have the same size. + +## Installing the LVM + +>[!NOTE] **NOTE:** +>The LVM has been installed on the openEuler OS by default. You can run the **rpm -qa | grep lvm2** command to check whether it is installed. If the command output contains "lvm2", the LVM has been installed. In this case, skip this section. If no information is output, the LVM is not installed. Install it by referring to this section. + +1. Configure the local yum source. For details, see [Configuring the Repo Server](./../../administration/administrator/configuring_the_repo_server.md). +2. Clear the cache. + + ```bash + dnf clean all + ``` + +3. Create a cache. + + ```bash + dnf makecache + ``` + +4. Install the LVM as the **root** user. + + ```bash + dnf install lvm2 + ``` + +5. Check the installed RPM package. + + ```bash + rpm -qa | grep lvm2 + ``` + +## Managing PVs + +### Creating a PV + +Run the **pvcreate** command as the **root** user to create a PV. + +```bash +pvcreate [option] devname ... +``` + +In the preceding information: + +- _option_: command parameter options. Common parameter options are as follows: + - **-f**: forcibly creates a PV without user confirmation. + - **-u**: specifies the UUID of the device. + - **-y**: answers yes to all questions. + +- _devname_: specifies the name of the device corresponding to the PV to be created. If multiple PVs need to be created in batches, set this option to multiple device names and separate the names with spaces. + +Example 1: Create PVs based on **/dev/sdb** and **/dev/sdc**. + +```bash +pvcreate /dev/sdb /dev/sdc +``` + +Example 2: Create PVs based on **/dev/sdb1** and **/dev/sdb2**. + +```bash +pvcreate /dev/sdb1 /dev/sdb2 +``` + +### Viewing a PV + +Run the **pvdisplay** command as the **root** user to view PV information, including PV name, VG to which the PV belongs, PV size, PE size, total number of PEs, number of available PEs, number of allocated PEs, and UUID. + +```bash +pvdisplay [option] devname +``` + +In the preceding information: + +- _option_: command parameter options. Common parameter options are as follows: + - **-s**: outputs information in short format. + - **-m**: displays the mapping from PEs to LEs. + +- _devname_: indicates the device corresponding to the PV to be viewed. If no PVs are specified, information about all PVs is displayed. + +Example: Run the following command to display the basic information about the PV **/dev/sdb**: + +```bash +pvdisplay /dev/sdb +``` + +### Modifying PV Attributes + +Run the **pvchange** command as the **root** user to modify the attributes of a PV. + +```bash +pvchange [option] pvname ... +``` + +In the preceding information: + +- _option_: command parameter options. Common parameter options are as follows: + - **-u**: generates a new UUID. + - **-x**: indicates whether PE allocation is allowed. + +- _pvname_: specifies the name of the device corresponding to the PV to be modified. If multiple PVs need to be modified in batches, set this option to multiple device names and separate the names with spaces. + +Example: Run the following command to prohibit PEs on the PV **/dev/sdb** from being allocated. Running `pvdisplay` for a PV that is not added to a VG will return the **Allocatable** attribute with the value **NO**. You need to add the PV to a VG before you can change the attribute. + +```bash +pvchange -x n /dev/sdb +``` + +### Deleting a PV + +Run the **pvremove** command as the **root** user to delete a PV. + +```bash +pvremove [option] pvname ... +``` + +In the preceding information: + +- _option_: command parameter options. Common parameter options are as follows: + - **-f**: forcibly deletes a PV without user confirmation. + - **-y**: answers yes to all questions. + +- _pvname_: specifies the name of the device corresponding to the PV to be deleted. If multiple PVs need to be deleted in batches, set this option to multiple device names and separate the names with spaces. + +Example: Run the following command to delete the PV **/dev/sdb**. If the PV has been added to a VG, you need to delete the VG or remove the PV from the VG in advance. + +```bash +pvremove /dev/sdb +``` + +## Managing VGs + +### Creating a VG + +Run the **vgcreate** command as the **root** user to create a VG. + +```bash +vgcreate [option] vgname pvname ... +``` + +In the preceding information: + +- _option_: command parameter options. Common parameter options are as follows: + - **-l**: specifies the maximum number of LVs that can be created on the VG. + - **-p**: specifies the maximum number of PVs that can be added to the VG. + - **-s**: specifies the PE size of a PV in the VG. + +- _vgname_: name of the VG to be created. +- _pvname_: name of the PV to be added to the VG. + +Example: Run the following command to create VG **vg1** and add the PVs **/dev/sdb** and **/dev/sdc** to the VG. + +```bash +vgcreate vg1 /dev/sdb /dev/sdc +``` + +### Viewing a VG + +Run the **vgdisplay** command as the **root** user to view VG information. + +```bash +vgdisplay [option] [vgname] +``` + +In the preceding information: + +- _option_: command parameter options. Common parameter options are as follows: + - **-s**: outputs information in short format. + - **-A**: displays only attributes of active VGs. + +- _vgname_: name of the VG to be viewed. If no VGs are specified, information about all VGs is displayed. + +Example: Run the following command to display the basic information about VG **vg1**: + +```bash +vgdisplay vg1 +``` + +### Modifying VG Attributes + +Run the **vgchange** command as the **root** user to modify the attributes of a VG. + +```bash +vgchange [option] vgname +``` + +In the preceding information: + +- _option_: command parameter options. Common parameter options are as follows: + - **-a**: sets the active status of the VG. + +- _vgname_: name of the VG whose attributes are to be modified. + +Example: Run the following command to change the status of **vg1** to active. + +```bash +vgchange -ay vg1 +``` + +### Extending a VG + +Run the **vgextend** command as the **root** user to dynamically extend a VG. In this way, the VG size is extended by adding PVs to the VG. + +```bash +vgextend [option] vgname pvname ... +``` + +In the preceding information: + +- _option_: command parameter options. Common parameter options are as follows: + - **dev**: debugging mode. + - **-t**: test only. + +- _vgname_: name of the VG whose size is to be extended. +- _pvname_: name of the PV to be added to the VG. + +Example: Run the following command to add PV **/dev/sdb** to VG **vg1**: + +```bash +vgextend vg1 /dev/sdb +``` + +### Shrinking a VG + +Run the **vgreduce** command as the **root** user to delete PVs from a VG to reduce the VG size. A VG must contain at least one PV. + +```bash +vgreduce [option] vgname pvname ... +``` + +In the preceding information: + +- _option_: command parameter options. Common parameter options are as follows: + - **-a**: If no PVs are specified in the command, all empty PVs are deleted. + - **\-\-removemissing**: deletes lost PVs in the VG to restore the VG to the normal state. + +- _vgname_: name of the VG to be shrunk. +- _pvname_: name of the PV to be deleted from the VG. + +Example: Run the following command to remove PV **/dev/sdb2** from VG **vg1**: + +```bash +vgreduce vg1 /dev/sdb2 +``` + +### Deleting a VG + +Run the **vgremove** command as the **root** user to delete a VG. + +```bash +vgremove [option] vgname +``` + +In the preceding information: + +- _option_: command parameter options. Common parameter options are as follows: + - **-f**: forcibly deletes a VG without user confirmation. + +- _vgname_: name of the VG to be deleted. + +Example: Run the following command to delete VG **vg1**. + +```bash +vgremove vg1 +``` + +## Managing LVs + +### Creating an LV + +Run the **lvcreate** command as the **root** user to create an LV. + +```bash +lvcreate [option] vgname +``` + +In the preceding information: + +- _option_: command parameter options. Common parameter options are as follows: + - **-L**: specifies the size of the LV in kKmMgGtT. + - **-l**: specifies the size of the LV \(number of LEs\). + - **-n**: specifies the name of the LV to be created. + - **-s**: creates a snapshot. + +- _vgname_: name of the VG to be created. + +Example 1: Run the following command to create a 10 GB LV in VG **vg1**. + +```bash +lvcreate -L 10G vg1 +``` + +Example 2: Run the following command to create a 200 MB LV in VG **vg1** and name the LV **lv1**. + +```bash +lvcreate -L 200M -n lv1 vg1 +``` + +### Viewing an LV + +Run the **lvdisplay** command as the **root** user to view the LV information, including the size of the LV, its read and write status, and snapshot information. + +```bash +lvdisplay [option] [lvname] +``` + +In the preceding information: + +- _option_: command parameter options. Common parameter options are as follows: + - **-v**: displays the mapping from LEs to PEs. + +- _lvname_: device file corresponding to the LV whose attributes are to be displayed. If this option is not set, attributes of all LVs are displayed. + + >[!NOTE] **NOTE:** + >Device files corresponding to LVs are stored in the VG directory. For example, if LV **lv1** is created in VG **vg1**, the device file corresponding to **lv1** is **/dev/vg1/lv1**. + +Example: Run the following command to display the basic information about LV **lv1**: + +```bash +lvdisplay /dev/vg1/lv1 +``` + +### Adjusting the LV Size + +Run the **lvresize** command as the **root** user to increase or reduce the size of an LVM LV. This may cause data loss. Therefore, exercise caution when running this command. + +```bash +lvresize [option] vgname +``` + +In the preceding information: + +- _option_: command parameter options. Common parameter options are as follows: + - **-L**: specifies the size of the LV in kKmMgGtT. + - **-l**: specifies the size of the LV \(number of LEs\). + - **-f**: forcibly adjusts the size of the LV without user confirmation. + +- _lvname_: name of the LV to be adjusted. + +Example 1: Run the following command to increase the size of LV **/dev/vg1/lv1** by 200 MB. + +```bash +lvresize -L +200 /dev/vg1/lv1 +``` + +Example 2: Run the following command to reduce the size of LV **/dev/vg1/lv1** by 200 MB. + +```bash +lvresize -L -200 /dev/vg1/lv1 +``` + +### Extending an LV + +Run the **lvextend** command as the **root** user to dynamically extend the size of an LV online without interrupting the access of applications to the LV. + +```bash +lvextend [option] lvname +``` + +In the preceding information: + +- _option_: command parameter options. Common parameter options are as follows: + - **-L**: specifies the size of the LV in kKmMgGtT. + - **-l**: specifies the size of the LV \(number of LEs\). + - **-f**: forcibly adjusts the size of the LV without user confirmation. + +- _lvname_: device file of the LV whose size is to be extended. + +Example: Run the following command to increase the size of LV **/dev/vg1/lv1** by 100 MB. + +```bash +lvextend -L +100M /dev/vg1/lv1 +``` + +### Shrinking an LV + +Run the **lvreduce** command as the **root** user to reduce the size of an LV. This may delete existing data on the LV. Therefore, confirm whether the data can be deleted before running the command. + +```bash +lvreduce [option] lvname +``` + +In the preceding information: + +- _option_: command parameter options. Common parameter options are as follows: + - **-L**: specifies the size of the LV in kKmMgGtT. + - **-l**: specifies the size of the LV \(number of LEs\). + - **-f**: forcibly adjusts the size of the LV without user confirmation. + +- _lvname_: device file of the LV whose size is to be extended. + +Example: Run the following command to reduce the space of LV **/dev/vg1/lvl** by 100 MB: + +```bash +lvreduce -L -100M /dev/vg1/lv1 +``` + +### Deleting an LV + +Run the **lvremove** command as the **root** user to delete an LV. If the LV has been mounted by running the **mount** command, you need to run the **umount** command to unmount the LV before running the **lvremove** command. + +```bash +lvremove [option] lvname +``` + +In the preceding information: + +- _option_: command parameter options. Common parameter options are as follows: + - **-f**: forcibly deletes an LV without user confirmation. + +- _lvname_: device name of the LV to be deleted. + +Example: Run the following command to delete LV **/dev/vg1/lv1**. + +```bash +lvremove /dev/vg1/lv1 +``` + +## Creating and Mounting a File System + +After creating an LV, you need to create a file system on the LV and mount the file system to the corresponding directory. + +### Creating a File System + +Run the **mkfs** command as the **root** user to create a file system. + +```bash +mkfs [option] lvname +``` + +In the preceding information: + +- _option_: command parameter options. Common parameter options are as follows: + - **-t**: specifies the type of the Linux file system to be created, such as **ext2**, **ext3**, and **ext4**. The default type is **ext2**. + +- _lvname_: name of the LV device file corresponding to the file system to be created. + +Example: Run the following command to create the **ext4** file system on LV **/dev/vg1/lv1**: + +```bash +mkfs -t ext4 /dev/vg1/lv1 +``` + +### Manually Mounting a File System + +The file system that is manually mounted is not valid permanently. It does not exist after the OS is restarted. + +Run the **mount** command as the **root** user to mount a file system. + +```bash +mount lvname mntpath +``` + +In the preceding information: + +- _lvname_: name of the LV device file corresponding to the file system to be mounted. +- _mntpath_: mount path. + +Example: Run the following command to mount LV **/dev/vg1/lv1** to the directory **/mnt/data**. + +```bash +mount /dev/vg1/lv1 /mnt/data +``` + +### Automatically Mounting a File System + +A file system that is automatically mounted does not exist after the OS is restarted. You need to manually mount the file system again. If you perform the following steps as the **root** user after manually mounting the file system, the file system can be automatically mounted after the OS is restarted. + +1. Run the **blkid** command to query the UUID of an LV. The following uses LV **/dev/vg1/lv1** as an example: + + ```bash + blkid /dev/vg1/lv1 + ``` + + Check the command output. It contains the following information in which _uuidnumber_ is a string of digits, indicating the UUID, and _fstype_ indicates the file system type. + + /dev/vg1/lv1: UUID=" _uuidnumber_ " TYPE=" _fstype_ " + +2. Run the **vi /etc/fstab** command to edit the **fstab** file and add the following content to the end of the file: + + ```vim + UUID=uuidnumber mntpath fstype defaults 0 0 + ``` + + In the preceding information: + + - Column 1: indicates the UUID. Enter _uuidnumber_ obtained in [1](#li65701520154311). + - Column 2: indicates the mount directory of the file system. Replace _mntpath_ with the actual value. + - Column 3: indicates the file system format. Enter _fstype_ obtained in [1](#li65701520154311). + - Column 4: indicates the mount option. In this example, **defaults** is used. + - Column 5: indicates the backup option. Enter either **1** \(the system automatically backs up the file system\) or **0** \(the system does not back up the file system\). In this example, **0** is used. + - Column 6: indicates the scanning option. Enter either **1** \(the system automatically scans the file system during startup\) or **0** \(the system does not scan the file system\). In this example, **0** is used. + +3. Verify the automatic mounting function. + 1. Run the **umount** command to unmount the file system. The following uses LV **/dev/vg1/lv1** as an example: + + ```bash + umount /dev/vg1/lv1 + ``` + + 2. Run the following command to reload all content in the **/etc/fstab** file: + + ```bash + mount -a + ``` + + 3. Run the following command to query the file system mounting information \(**/mnt/data** is used as an example\): + + ```bash + mount | grep /mnt/data + ``` + + Check the command output. If the command output contains the following information, the automatic mounting function takes effect: + + ```text + /dev/vg1/lv1 on /mnt/data + ``` diff --git a/docs/en/server/memory_storage/lvm/public_sys-resources/icon-caution.gif b/docs/en/server/memory_storage/lvm/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/memory_storage/lvm/public_sys-resources/icon-caution.gif differ diff --git a/docs/en/server/memory_storage/lvm/public_sys-resources/icon-danger.gif b/docs/en/server/memory_storage/lvm/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/memory_storage/lvm/public_sys-resources/icon-danger.gif differ diff --git a/docs/en/server/memory_storage/lvm/public_sys-resources/icon-note.gif b/docs/en/server/memory_storage/lvm/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/server/memory_storage/lvm/public_sys-resources/icon-note.gif differ diff --git a/docs/en/server/memory_storage/lvm/public_sys-resources/icon-notice.gif b/docs/en/server/memory_storage/lvm/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/en/server/memory_storage/lvm/public_sys-resources/icon-notice.gif differ diff --git a/docs/en/server/memory_storage/lvm/public_sys-resources/icon-tip.gif b/docs/en/server/memory_storage/lvm/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/en/server/memory_storage/lvm/public_sys-resources/icon-tip.gif differ diff --git a/docs/en/server/memory_storage/lvm/public_sys-resources/icon-warning.gif b/docs/en/server/memory_storage/lvm/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/memory_storage/lvm/public_sys-resources/icon-warning.gif differ diff --git a/docs/en/server/memory_storage/public_sys-resources/icon-caution.gif b/docs/en/server/memory_storage/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/memory_storage/public_sys-resources/icon-caution.gif differ diff --git a/docs/en/server/memory_storage/public_sys-resources/icon-danger.gif b/docs/en/server/memory_storage/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/memory_storage/public_sys-resources/icon-danger.gif differ diff --git a/docs/en/server/memory_storage/public_sys-resources/icon-note.gif b/docs/en/server/memory_storage/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/server/memory_storage/public_sys-resources/icon-note.gif differ diff --git a/docs/en/server/memory_storage/public_sys-resources/icon-notice.gif b/docs/en/server/memory_storage/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/en/server/memory_storage/public_sys-resources/icon-notice.gif differ diff --git a/docs/en/server/memory_storage/public_sys-resources/icon-tip.gif b/docs/en/server/memory_storage/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/en/server/memory_storage/public_sys-resources/icon-tip.gif differ diff --git a/docs/en/server/memory_storage/public_sys-resources/icon-warning.gif b/docs/en/server/memory_storage/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/memory_storage/public_sys-resources/icon-warning.gif differ diff --git a/docs/en/server/network/gazelle/_toc.yaml b/docs/en/server/network/gazelle/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f0c1cd5f3f4d7f981d52a1b3d3b414673d474dd3 --- /dev/null +++ b/docs/en/server/network/gazelle/_toc.yaml @@ -0,0 +1,6 @@ +label: Gazelle User Guide +isManual: true +description: Improved network I/O throughput for applications +sections: + - label: Gazelle User Guide + href: ./gazelle_user_guide.md diff --git a/docs/en/server/network/gazelle/gazelle_user_guide.md b/docs/en/server/network/gazelle/gazelle_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..5e43be71d18ebaa504b732df7317e146ee65a80b --- /dev/null +++ b/docs/en/server/network/gazelle/gazelle_user_guide.md @@ -0,0 +1,356 @@ +# Gazelle User Guide + +## Overview + +Gazelle is a high-performance user-mode protocol stack. It directly reads and writes NIC packets in user mode based on DPDK and transmit the packets through shared hugepage memory, and uses the LwIP protocol stack. Gazelle greatly improves the network I/O throughput of applications and accelerates the network for the databases, such as MySQL and Redis. + +- High Performance + +Zero-copy and lock-free packets that can be flexibly scaled out and scheduled adaptively. + +- Universality + +Compatible with POSIX without modification, and applicable to different types of applications. + +In the single-process scenario where the NIC supports multiple queues, use **liblstack.so** only to shorten the packet path. In other scenarios, use the ltran process to distribute packets to each thread. + +## Installation + +Configure the Yum source of openEuler and run the`yum` command to install Gazelle. + +```sh +yum install dpdk +yum install libconfig +yum install numactl +yum install libboundscheck +yum install libpcap +yum install gazelle +``` + +>NOTE: +The version of dpdk must be 21.11-2 or later. + +## How to Use + +To configure the operating environment and use Gazelle to accelerate applications, perform the following steps: + +### 1. Installing the .ko File as the root User + +Install the .ko files based on the site requirements to enable the virtual network ports and bind NICs to the user-mode driver. +To enable the virtual network port function, use **rte_kni.ko**. + +```sh +modprobe rte_kni carrier="on" +``` + +Configure NetworkManager not to manage the KNI NIC. + +```sh +[root@localhost ~]# cat /etc/NetworkManager/conf.d/99-unmanaged-devices.conf +[keyfile] +unmanaged-devices=interface-name:kni +[root@localhost ~]# systemctl reload NetworkManager +``` + +Bind the NIC from the kernel driver to the user-mode driver. Choose one of the following .ko files based on the site requirements. + +```sh +#If the IOMMU is available +modprobe vfio-pci + +#If the IOMMU is not available and the VFIO supports the no-IOMMU mode +modprobe vfio enable_unsafe_noiommu_mode=1 +modprobe vfio-pci + +#Other cases +modprobe igb_uio +``` + +>NOTE: +You can check whether the IOMMU is enabled based on the BIOS configuration. + +### 2. Binding the NIC Using DPDK + +Bind the NIC to the driver selected in Step 1 to provide an interface for the user-mode NIC driver to access the NIC resources. + +```sh +#Using vfio-pci +dpdk-devbind -b vfio-pci enp3s0 + +#Using igb_uio +dpdk-devbind -b igb_uio enp3s0 +``` + +### 3. Configuring Memory Huge Pages + +Gazelle uses hugepage memory to improve efficiency. You can configure any size for the memory huge pages reserved by the system using the **root** permissions. Each memory huge page requires a file descriptor. If the memory is large, you are advised to use 1 GB huge pages to avoid occupying too many file descriptors. +Select a page size based on the site requirements and configure sufficient memory huge pages. Run the following commands to configure huge pages: + +```sh +#Configuring 1024 2 MB huge pages on node0. The total memory is 2 GB. +echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages + +#Configuring 5 1 GB huge pages on node0. The total memory is 5 GB. +echo 5 > /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages +``` + +>NOTE: +Run the **cat** command to query the actual number of reserved pages. If the continuous memory is insufficient, the number may be less than expected. + +### 4. Mounting Memory Huge Pages + +Create two directories for the lstack and ltran processes to access the memory huge pages. Run the following commands: + +```sh +mkdir -p /mnt/hugepages-ltran +mkdir -p /mnt/hugepages-lstack +chmod -R 700 /mnt/hugepages-ltran +chmod -R 700 /mnt/hugepages-lstack + +mount -t hugetlbfs nodev /mnt/hugepages-ltran -o pagesize=2M +mount -t hugetlbfs nodev /mnt/hugepages-lstack -o pagesize=2M +``` + +>NOTE: +The huge pages mounted to **/mnt/hugepages-ltran** and **/mnt/hugepages-lstack** must be in the same page size. + +### 5. Enabling Gazelle for an Application + +Enable Gazelle for an application using either of the following methods as required. + +- Recompile the application and replace the sockets interface. + +```sh +#Add the Makefile of Gazelle to the application makefile. +-include /etc/gazelle/lstack.Makefile + +#Add the LSTACK_LIBS variable when compiling the source code. +gcc test.c -o test ${LSTACK_LIBS} +``` + +- Use the **LD_PRELOAD** environment variable to load the Gazelle library. + +Use the **GAZELLE_BIND_PROCNAME** environment variable to specify the process name, and **LD_PRELOAD** to specify the Gazelle library path. + +```sh +GAZELLE_BIND_PROCNAME=test LD_PRELOAD=/usr/lib64/liblstack.so ./test +``` + +### 6. Configuring Gazelle + +- The **lstack.conf** file is used to specify the startup parameters of lstack. The default path is **/etc/gazelle/lstack.conf**. The parameters in the configuration file are as follows: + +|Options|Value|Remarks| +|:---|:---|:---| +|dpdk_args|--socket-mem (mandatory)
--huge-dir (mandatory)
--proc-type (mandatory)
--legacy-mem
--map-perfect
-d|DPDK initialization parameter. For details, see the DPDK description.
**--map-perfect** is an extended feature. It is used to prevent the DPDK from occupying excessive address space and ensure that extra address space is available for lstack.
The **-d** option is used to load the specified .so library file.| +|listen_shadow| 0/1 | Whether to use the shadow file descriptor for listening. This function is enabled when there is a single listen thread and multiple protocol stack threads.| +|use_ltran| 0/1 | Whether to use ltran.| +|num_cpus|"0,2,4 ..."|IDs of the CPUs bound to the lstack threads. The number of IDs is the number of lstack threads (less than or equal to the number of NIC queues). You can select CPUs by NUMA nodes.| +|low_power_mode|0/1|Whether to enable the low-power mode. This parameter is not supported currently.| +|kni_switch|0/1|Whether to enable the rte_kni module. The default value is **0**. This module can be enabled only when ltran is not used.| +|flow_bifurcation|0/1 |flow bifurcation switch, transfer ports that Gazelle is not listening to the kernel for processing, default to 0 | +|unix_prefix|"string"|Prefix string of the Unix socket file used for communication between Gazelle processes. By default, this parameter is left blank. The value must be the same as the value of **unix_prefix** in **ltran.conf** of the ltran process that participates in communication, or the value of the **-u** option for `gazellectl`. The value cannot contain special characters and can contain a maximum of 128 characters.| +|host_addr|"192.168.xx.xx"|IP address of the protocol stack, which is also the IP address of the application.| +|mask_addr|"255.255.xx.xx"|Subnet mask.| +|gateway_addr|"192.168.xx.1"|Gateway address.| +|devices|"aa:bb:cc:dd:ee:ff"|MAC address for NIC communication. The value must be the same as that of **bond_macs** in the **ltran.conf** file.| +|app_bind_numa|0/1|Whether to bind the epoll and poll threads of an application to the NUMA node where the protocol stack is located. The default value is 1, indicating that the threads are bound.| +|send_connect_number|4|Number of connections for sending packets in each protocol stack loop. The value is a positive integer.| +|read_connect_number|4|Number of connections for receiving packets in each protocol stack loop. The value is a positive integer.| +|rpc_number|4|Number of RPC messages processed in each protocol stack loop. The value is a positive integer.| +|nic_read_num|128|Number of data packets read from the NIC in each protocol stack cycle. The value is a positive integer.| +|mbuf_pool_size|1024000|Size of the mbuf address pool applied for during initialization. Set this parameter based on the NIC configuration. The value must be a positive integer less than 5120000 and not too small, otherwise the startup fails.| + +lstack.conf example: + +```sh +dpdk_args=["--socket-mem", "2048,0,0,0", "--huge-dir", "/mnt/hugepages-lstack", "--proc-type", "primary", "--legacy-mem", "--map-perfect"] + +use_ltran=1 +kni_switch=0 +flow_bifurcation=0 +low_power_mode=0 + +num_cpus="2,22" + +host_addr="192.168.1.10" +mask_addr="255.255.255.0" +gateway_addr="192.168.1.1" +devices="aa:bb:cc:dd:ee:ff" + +send_connect_number=4 +read_connect_number=4 +rpc_number=4 +nic_read_num=128 +mbuf_pool_size=1024000 +``` + +- The **ltran.conf** file is used to specify ltran startup parameters. The default path is **/etc/gazelle/ltran.conf**. To enable ltran, set **use_ltran=1** in the **lstack.conf** file. The configuration parameters are as follows: + +|Options|Value|Remarks| +|:---|:---|:---| +|forward_kit|"dpdk"|Specified transceiver module of an NIC.
This field is reserved and is not used currently.| +|forward_kit_args|-l
--socket-mem (mandatory)
--huge-dir (mandatory)
--proc-TYPE (mandatory)
--legacy-mem (mandatory)
--map-perfect (mandatory)
-d|DPDK initialization parameter. For details, see the DPDK description.
**--map-perfect** is an extended feature. It is used to prevent the DPDK from occupying excessive address space and ensure that extra address space is available for lstack.
The **-d** option is used to load the specified .so library file.| +|kni_switch|0/1|Whether to enable the rte_kni module. The default value is **0**.| +|unix_prefix|"string"|Prefix string of the Unix socket file used for communication between Gazelle processes. By default, this parameter is left blank. The value must be the same as the value of **unix_prefix** in **lstack.conf** of the lstack process that participates in communication, or the value of the **-u** option for `gazellectl`.| +|dispatch_max_clients|n|Maximum number of clients supported by ltran.
The total number of lstack protocol stack threads cannot exceed 32.| +|dispatch_subnet|192.168.xx.xx|Subnet mask, which is the subnet segment of the IP addresses that can be identified by ltran. The value is an example. Set the subnet based on the site requirements.| +|dispatch_subnet_length|n|Length of the Subnet that can be identified by ltran. For example, if the value of length is 4, the value ranges from 192.168.1.1 to 192.168.1.16.| +|bond_mode|n|Bond mode. Currently, only Active Backup(Mode1) is supported. The value is 1.| +|bond_miimon|n|Bond link monitoring time. The unit is millisecond. The value ranges from 1 to 2^64 - 1 - (1000 x 1000).| +|bond_ports|"0x01"|DPDK NIC to be used. The value **0x01** indicates the first NIC.| +|bond_macs|"aa:bb:cc:dd:ee:ff"|MAC address of the bound NIC, which must be the same as the MAC address of the KNI.| +|bond_mtu|n|Maximum transmission unit. The default and maximum value is 1500. The minimum value is 68.| + +ltran.conf example: + +```sh +forward_kit_args="-l 0,1 --socket-mem 1024,0,0,0 --huge-dir /mnt/hugepages-ltran --proc-type primary --legacy-mem --map-perfect --syslog daemon" +forward_kit="dpdk" + +kni_switch=0 + +dispatch_max_clients=30 +dispatch_subnet="192.168.1.0" +dispatch_subnet_length=8 + +bond_mode=1 +bond_mtu=1500 +bond_miimon=100 +bond_macs="aa:bb:cc:dd:ee:ff" +bond_ports="0x1" + +tcp_conn_scan_interval=10 +``` + +### 7. Starting an Application + +- Start the ltran process. + +If there is only one process and the NIC supports multiple queues, the NIC multi-queue is used to distribute packets to each thread. You do not need to start the ltran process. Set the value of **use_ltran** in the **lstack.conf** file to **0**. +If you do not use `--config-file` to specify a configuration file when starting ltran, the default configuration file path **/etc/gazelle/ltran.conf** is used. + +```sh +ltran --config-file ./ltran.conf +``` + +- Start the application. + +If the environment variable **LSTACK_CONF_PATH** is not used to specify the configuration file before the application is started, the default configuration file path **/etc/gazelle/lstack.conf** is used. + +```sh +export LSTACK_CONF_PATH=./lstack.conf +LD_PRELOAD=/usr/lib64/liblstack.so GAZELLE_BIND_PROCNAME=redis-server redis-server redis.conf +``` + +### 8. APIs + +Gazelle wraps the POSIX interfaces of the application. The code of the application does not need to be modified. + +### 9. Commissioning Commands + +- If the ltran mode is not used, the **gazellectl ltran xxx** and **gazellectl lstack show {ip | pid} -r** commands are not supported. + +```sh +Usage: gazellectl [-h | help] + or: gazellectl ltran {quit | show | set} [LTRAN_OPTIONS] [time] [-u UNIX_PREFIX] + or: gazellectl lstack {show | set} {ip | pid} [LSTACK_OPTIONS] [time] [-u UNIX_PREFIX] + + quit ltran process exit + + where LTRAN_OPTIONS := + show ltran all statistics + -r, rate show ltran statistics per second + -i, instance show ltran instance register info + -b, burst show ltran NIC packet len per second + -l, latency show ltran latency + set: + loglevel {error | info | debug} set ltran loglevel + + where LSTACK_OPTIONS := + show lstack all statistics + -r, rate show lstack statistics per second + -s, snmp show lstack snmp + -c, connetct show lstack connect + -l, latency show lstack latency + set: + loglevel {error | info | debug} set lstack loglevel + lowpower {0 | 1} set lowpower enable + [time] measure latency time default 1S +``` + +The `-u` option specifies the prefix of the Unix socket for communication between Gazelle processes. The value of this parameter must be the same as that of **unix_prefix** in the **ltran.conf** or **lstack.conf** file. + +**Packet Capturing Tool** +The NIC used by Gazelle is managed by DPDK. Therefore, tcpdump cannot capture Gazelle packets. As a substitute, Gazelle uses gazelle-pdump provided in the dpdk-tools software package as the packet capturing tool. gazelle-pdump uses the multi-process mode of DPDK to share memory with the lstack or ltran process. In ltran mode, gazelle-pdump can capture only ltran packets that directly communicate with the NIC. By filtering tcpdump data packets, gazelle-pdump can filter packets of a specific lstack process. ([Usage](https://gitee.com/openeuler/gazelle/blob/master/doc/en/pdump_en.md)) + +### 10. Precautions + +#### Location of the DPDK Configuration File + +For the **root** user, the configuration file is stored in the **/var/run/dpdk** directory after the DPDK is started. +For a non-root user, the path of the DPDK configuration file is determined by the environment variable **XDG_RUNTIME_DIR**. + +- If **XDG_RUNTIME_DIR** is not set, the DPDK configuration file is stored in **/tmp/dpdk**. +- If **XDG_RUNTIME_DIR** is set, the DPDK configuration file is stored in the path specified by **XDG_RUNTIME_DIR**. +- Note that **XDG_RUNTIME_DIR** is set by default on some servers. + +#### Impact on Gazelle Performance by the Retbleed Vulnerability Patch + +- The patch to fix the Retbleed vulnerability is merged in kernel 5.10.0-60.57.0.85. This patch impacts the performance of Gazelle in x86 environments. You can add **retbleed=off mitigations=off** to the boot parameters to disable the patch and prevent the performance impact based on your security requirements. By default, the patch is enabled for security. +- In the test scenario, 1024 KB of data is sent from kernel space to user space through ltran. The performance decreases from 17,000 Mb/s to 5,000 Mb/s. +- openEuler 22.03 LTS and its SP versions (kernel version 5.10.0-60.57.0.85 or later) are affected. +- For details, see . + +## Restrictions + +Restrictions of Gazelle are as follows: + +### Function Restrictions + +- Blocking **accept()** or **connect()** is not supported. +- A maximum of 1500 TCP connections are supported. +- Currently, only TCP, UDP, IGMPv2, ICMP, ARP, and IPv4 are supported. +- When a peer end pings Gazelle, the specified packet length must be less than or equal to 14,000 bytes. +- Transparent huge pages are not supported. +- ltran does not support the hybrid bonding of multiple types of NICs. +- The active/standby mode (bond1 mode) of ltran supports active/standby switchover only when a fault occurs at the link layer (for example, the network cable is disconnected), but does not support active/standby switchover when a fault occurs at the physical layer (for example, the NIC is powered off or removed). +- VM NICs do not support multiple queues. +- KNI must be enabled with UDP unless the NIC driver (such as mlx5) supports user mode and kernel mode at the same time. + +### Operation Restrictions + +- By default, the command lines and configuration files provided by Gazelle requires **root** permissions. Privilege escalation and changing of file owner are required for non-root users. +- To bind the NIC from user-mode driver back to the kernel driver, you must exit Gazelle first. +- Memory huge pages cannot be remounted to subdirectories created in the mount point. +- The minimum huge page memory required by ltran is 1 GB. +- The minimum hugepage memory of each application instance protocol stack thread is 800 MB. +- Gazelle supports only 64-bit OSs. +- The `-march=native` option is used when building the x86 version of Gazelle to optimize Gazelle based on the CPU instruction set of the build environment (Intel® Xeon® Gold 5118 CPU @ 2.30GHz). Therefore, the CPU of the operating environment must support the SSE4.2, AVX, AVX2, and AVX-512 instruction set extensions. +- The maximum number of IP fragments is 10 (the maximum ping packet length is 14,790 bytes). TCP does not use IP fragments. +- You are advised to set the **rp_filter** parameter of the NIC to 1 using the `sysctl` command. Otherwise, the Gazelle protocol stack may not be used as expected. Instead, the kernel protocol stack is used. +- If ltran is not used, the KNI cannot be configured to be used only for local communication. In addition, you need to configure the NetworkManager not to manage the KNI network adapter before starting Gazelle. +- The IP address and MAC address of the virtual KNI must be the same as those in the **lstack.conf** file. + +## Precautions + +You need to evaluate the use of Gazelle based on application scenarios. + +### Shared Memory + +- Current situation: + The memory huge pages are mounted to the **/mnt/hugepages-lstack** directory. During process initialization, files are created in the **/mnt/hugepages-lstack** directory. Each file corresponds to a huge page, and the mmap function is performed on the files. After receiving the registration information of lstask, ltran configures the files in the **mmap** directory of the information page based on the huge page memory configurations, implementing shared huge page memory. + The procedure also applies to the files in the **/mnt/hugepages-ltran** directory. +- Current mitigation measures + The huge page file permission is **600**. Only the owner can access the files. The default owner is the **root** user. Other users can be configured. + Huge page files are locked by DPDK and cannot be directly written or mapped. +- Caution + Malicious processes belonging to the same user imitate the DPDK implementation logic to share huge page memory using huge page files and perform write operations to damage the huge page memory. As a result, the Gazelle program crashes. It is recommended that the processes of a user belong to the same trust domain. + +### Traffic Limit + +Gazelle does not limit the traffic. Users can send packets at the maximum NIC line rate to the network, which may congest the network. + +### Process Spoofing + +If two lstack processes A and B are legitimately registered with ltran, A can impersonate B to send spoofing messages to ltran and modify the ltran forwarding control information. As a result, the communication of B becomes abnormal, and information leakage occurs when packets for B are sent to A. Ensure that all lstack processes are trusted. diff --git a/docs/en/server/network/gazelle/public_sys-resources/icon-caution.gif b/docs/en/server/network/gazelle/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/network/gazelle/public_sys-resources/icon-caution.gif differ diff --git a/docs/en/server/network/gazelle/public_sys-resources/icon-danger.gif b/docs/en/server/network/gazelle/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/network/gazelle/public_sys-resources/icon-danger.gif differ diff --git a/docs/en/server/network/gazelle/public_sys-resources/icon-note.gif b/docs/en/server/network/gazelle/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/server/network/gazelle/public_sys-resources/icon-note.gif differ diff --git a/docs/en/server/network/gazelle/public_sys-resources/icon-notice.gif b/docs/en/server/network/gazelle/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/en/server/network/gazelle/public_sys-resources/icon-notice.gif differ diff --git a/docs/en/server/network/gazelle/public_sys-resources/icon-tip.gif b/docs/en/server/network/gazelle/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/en/server/network/gazelle/public_sys-resources/icon-tip.gif differ diff --git a/docs/en/server/network/gazelle/public_sys-resources/icon-warning.gif b/docs/en/server/network/gazelle/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/network/gazelle/public_sys-resources/icon-warning.gif differ diff --git a/docs/en/server/network/network_config/_toc.yaml b/docs/en/server/network/network_config/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9a09d0e6f9cf41cf95d68c28f9ea8c3869395bc4 --- /dev/null +++ b/docs/en/server/network/network_config/_toc.yaml @@ -0,0 +1,6 @@ +label: Network Configuration +isManual: true +description: Configure the IP address, host name, and network binding +sections: + - label: Network Configuration + href: ./network_configuration.md diff --git a/docs/en/server/network/network_config/network_configuration.md b/docs/en/server/network/network_config/network_configuration.md new file mode 100644 index 0000000000000000000000000000000000000000..e8c29a39375a6b6fd49a6490443cbe676a351dba --- /dev/null +++ b/docs/en/server/network/network_config/network_configuration.md @@ -0,0 +1,1330 @@ +# Configuring the Network + +## Configuring an IP Address + +### Using the nmcli Command + +> [!NOTE]NOTE +> The network configuration configured by running the **nmcli** command takes effect immediately and will not be lost after the system restarts. + +#### Introduction to nmcli + +**nmcli** \(NetworkManager Command Line Interface\) is the command-line utility to configure networking through NetworkManager. The basic format of using **nmcli** is as follows: + +```shell +nmcli [OPTIONS] OBJECT { COMMAND | help } +``` + +In the preceding command, **OBJECT** can be one of the following options: **general**, **networking**, **radio**, **connection**, and **device**. **OPTIONS** can be optional options, such as **-t**, **\-\-terse** \(for script processing\),**-p**, **\-\-pretty** \(for human-readable output\), **-h**, and **\-\-help**. For more information, run the **nmcli help** command. + +```shell +nmcli help +``` + +Common commands are listed as follows: + +- To display the general status of NetworkManager, run the following command: + + ```shell + nmcli general status + ``` + +- To display all connections, run the following command: + + ```shell + nmcli connection show + ``` + +- To display the current active connections only, add the **-a** or **\-\-active** option as follows: + + ```shell + nmcli connection show --active + ``` + +- To display the device identified by NetworkManager and its connection status, run the following command: + + ```shell + nmcli device status + ``` + +- To start or stop network interfaces, for example, run the nmcli commands as the **root** user: + + ```shell + nmcli connection up id enp3s0 + nmcli device disconnect enp3s0 + ``` + +#### Device Management + +##### Connecting to a Device + +Run the following command to connect NetworkManager to the corresponding network device. Try to find the proper connection configuration and activate it. + + ```shell + nmcli device connect "$IFNAME" + ``` + +> If the corresponding connection configuration does not exist, NetworkManager creates and activates a configuration file with default settings. + +##### Disconnecting to a Device + +Run the following command to disconnect NetworkManager with the network device and prevent the device from being automatically activated. + + ```shell + nmcli device disconnect "$IFNAME" + ``` + +#### Setting Network Connections + +Run the following command to display all the available network connections: + +```shell +$ nmcli con show + +NAME UUID TYPE DEVICE +enp4s0 5afce939-400e-42fd-91ee-55ff5b65deab ethernet enp4s0 +enp3s0 c88d7b69-f529-35ca-81ab-aa729ac542fd ethernet enp3s0 +virbr0 ba552da6-f014-49e3-91fa-ec9c388864fa bridge virbr0 +``` + +> [!NOTE]NOTE +> In the command output, **NAME** indicates the connection ID \(name\). + +After a network connection is added, the corresponding configuration file is generated and associated with the corresponding device. To check for available devices, run the following command: + +```shell +$ nmcli dev status + +DEVICE TYPE STATE CONNECTION +enp3s0 ethernet connected enp3s0 +enp4s0 ethernet connected enp4s0 +virbr0 bridge connected virbr0 +lo loopback unmanaged -- +virbr0-nic tun unmanaged -- +``` + +##### Configuring Dynamic IP Connections + +###### Configuring IP Addresses + +When DHCP is used to allocate a network, run the following command to add a network configuration file: + +```shell +nmcli connection add type ethernet con-name connection-name ifname interface-name +``` + +For example, to create a dynamic connection configuration file named **net-test**, run the following command as the **root** user: + +```shell +$ nmcli connection add type ethernet con-name net-test ifname enp3s0 +Connection 'net-test' (a771baa0-5064-4296-ac40-5dc8973967ab) successfully added. +``` + +The NetworkManager sets **connection.autoconnect** to **yes** and saves the setting to the **/etc/sysconfig/network-scripts/ifcfg-net-test** file. In the **/etc/sysconfig/network-scripts/ifcfg-net-test** file, **ONBOOT** is set to **yes**. + +###### Activating a Connection and Checking Device Connection Status + +Run the following command as the **root** user to activate a network connection: + +```shell +$ nmcli con up net-test +Connection successfully activated (D-Bus active path:/org/freedesktop/NetworkManager/ActiveConnection/5) +``` + +Run the following command to check the connection status of devices: + +```shell +$ nmcli device status + +DEVICE TYPE STATE CONNECTION +enp4s0 ethernet connected enp4s0 +enp3s0 ethernet connected net-test +virbr0 bridge connected virbr0 +lo loopback unmanaged -- +virbr0-nic tun unmanaged -- +``` + +##### Configuring Static IP Connections + +###### Configuring IP Addresses + +To add a static IPv4 network connection, run the following command: + +```shell +nmcli connection add type ethernet con-name connection-name ifname interface-name ip4 address gw4 address +``` + +> [!NOTE]NOTE +> To add an IPv6 address and related gateway information, use the **ip6** and **gw6** options. + +For example, to create a static connection configuration file named **net-static**, run the following command as the **root** user: + +```shell +nmcli con add type ethernet con-name net-static ifname enp3s0 ip4 192.168.0.10/24 gw4 192.168.0.254 +``` + +You can also specify the IPv6 address and gateway for the device. The following is an example: + +```shell +$ nmcli con add type ethernet con-name test-lab ifname enp3s0 ip4 192.168.0.10/24 gw4 192.168.0.254 ip6 abbe::**** gw6 2001:***::* +Connection 'net-static' (63aa2036-8665-f54d-9a92-c3035bad03f7) successfully added. +``` + +The NetworkManager sets the internal parameter **ipv4.method** to **manual**, **connection.autoconnect** to **yes**, and writes the setting to the **/etc/sysconfig/network-scripts/ifcfg-my-office** file. In the file, **BOOTPROTO** is set to **none**, and **ONBOOT** is set to **yes**. + +Run the following command as the **root** user to set IPv4 addresses of two DNS servers: + +```shell +nmcli con mod net-static ipv4.dns "*.*.*.* *.*.*.*" +``` + +Run the following command as the **root** user to set IPv6 addresses of two DNS servers: + +```shell +nmcli con mod net-static ipv6.dns "2001:4860:4860::**** 2001:4860:4860::****" +``` + +###### Activating a Connection and Checking Device Connection Status + +Run the following command as the **root** user to activate a network connection: + +```shell +$ nmcli con up net-static ifname enp3s0 +Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6) +``` + +Run the following command to check the connection status of devices: + +```shell +$ nmcli device status + +DEVICE TYPE STATE CONNECTION +enp4s0 ethernet connected enp4s0 +enp3s0 ethernet connected net-static +virbr0 bridge connected virbr0 +lo loopback unmanaged -- +virbr0-nic tun unmanaged -- +``` + +Run the following command to view the connection details \(with the **-p** and **\-\-pretty** options to add the title and segment to the output\): + +```shell +$ nmcli -p con show net-static +=============================================================================== +Connection profile details (net-static ) +=============================================================================== +connection.id: net-static +connection.uuid: b9f18801-6084-4aee-af28-c8f0598ff5e1 +connection.stable-id: -- +connection.type: 802-3-ethernet +connection.interface-name: enp3s0 +connection.autoconnect: yes +connection.autoconnect-priority: 0 +connection.autoconnect-retries: -1 (default) +connection.multi-connect: 0 (default) +connection.auth-retries: -1 +connection.timestamp: 1578988781 +connection.read-only: no +connection.permissions: -- +connection.zone: -- +connection.master: -- +connection.slave-type: -- +connection.autoconnect-slaves: -1 (default) +connection.secondaries: -- +connection.gateway-ping-timeout: 0 +connection.metered: unknown +connection.lldp: default +connection.mdns: -1 (default) +connection.llmnr: -1 (default) +``` + +##### Adding a Wi-Fi Connection + +You can add the Wi-Fi connection using either of the following methods: + +**Method 1: Connect to the Wi-Fi network using a network port.** + +Connect to the Wi-Fi network specified by the SSID or BSSID. Run the following command to find a matching connection or create a connection, and then activate the connection on the device. + +```shell +nmcli device wifi connect "$SSID" password "$PASSWORD" ifname "$IFNAME" +nmcli --ask device wifi connect "$SSID" +``` + +**Method 2: Connect to the Wi-Fi network using the configuration file.** + +1. Run the following command to check for available Wi-Fi access points: + + ```shell + nmcli dev wifi list + ``` + +2. Run the following command to generate a static IP address configuration that allows Wi-Fi connections automatically allocated by the DNS: + + ```shell + nmcli con add con-name Wifi ifname wlan0 type wifi ssid MyWifi ip4 192.168.100.101/24 gw4 192.168.100.1 + ``` + +3. Run the following command to set a WPA2 password, for example, **answer**: + + ```shell + nmcli con modify Wifi wifi-sec.key-mgmt wpa-psk + nmcli con modify Wifi wifi-sec.psk answer + ``` + +4. Run the following command to change the Wi-Fi status: + + ```shell + nmcli radio wifi [ on | off ] + ``` + +##### Modifying Attributes + +Run the following command to check a specific attribute, for example, mtu: + +```shell +$ nmcli connection show id 'Wifi ' | grep mtu +802-11-wireless.mtu: auto +``` + +Run the following command to modify the attribute: + +```shell +nmcli connection modify id 'Wifi ' 802-11-wireless.mtu 1350 +``` + +Run the following command to confirm the modification: + +```shell +$ nmcli connection show id 'Wifi ' | grep mtu +802-11-wireless.mtu: 1350 +``` + +#### Configuring a Static Route + +- Run the nmcli command to configure a static route for a network connection: + + ```shell + nmcli connection modify enp3s0 +ipv4.routes "192.168.122.0/24 10.10.10.1" + ``` + +- Run the following command to configure the static route using the editor: + + ```shell + $ nmcli con edit type ethernet con-name enp3s0 + ===| nmcli interactive connection editor |=== + Adding a new '802-3-ethernet' connection + Type 'help' or '?' for available commands. + Type 'describe [.]' for detailed property description. + You may edit the following settings: connection, 802-3-ethernet (ethernet), 802-1x, ipv4, ipv6, dcb + nmcli> set ipv4.routes 192.168.122.0/24 10.10.10.1 + nmcli> + nmcli> save persistent + Saving the connection with 'autoconnect=yes'. That might result in an immediate activation of the connection. + Do you still want to save? [yes] yes + Connection 'enp3s0' (1464ddb4-102a-4e79-874a-0a42e15cc3c0) successfully saved. + nmcli> quit + ``` + +### Using the ip Command + +> [!NOTE]NOTE +> The network configuration configured using the **ip** command takes effect immediately, but the configuration will be lost after the system restarts. + +#### Configuring IP Addresses + +Run the **ip** command to configure an IP address for the interface. The command format is as follows, where _interface-name_ indicates the NIC name. + +```shell +ip addr [ add | del ] address dev interface-name +``` + +##### Configuring a Static IP Address + +Run the following command as the **root** user to configure an IP address: + +```shell +ip address add 192.168.0.10/24 dev enp3s0 +``` + +Run the following command as the **root** user to view the configuration result: + +```shell +$ ip addr show dev enp3s0 +2: enp3s0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 + link/ether 52:54:00:aa:ad:4a brd ff:ff:ff:ff:ff:ff + inet 192.168.202.248/16 brd 192.168.255.255 scope global dynamic noprefixroute enp3s0 + valid_lft 9547sec preferred_lft 9547sec + inet 192.168.0.10/24 scope global enp3s0 + valid_lft forever preferred_lft forever + inet6 fe80::32e8:cc22:9db2:f4d4/64 scope link noprefixroute + valid_lft forever preferred_lft forever +``` + +##### Configuring Multiple IP Addresses + +The **ip** command can be used to assign multiple IP addresses to an interface. You can run the **ip** command multiple times as the **root** user to assign IP addresses to an interface. The following is an example: + +```shell +$ ip address add 192.168.2.223/24 dev enp4s0 +$ ip address add 192.168.4.223/24 dev enp4s0 +$ ip addr + +3: enp4s0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 + link/ether 52:54:00:aa:da:e2 brd ff:ff:ff:ff:ff:ff + inet 192.168.203.12/16 brd 192.168.255.255 scope global dynamic noprefixroute enp4s0 + valid_lft 8389sec preferred_lft 8389sec + inet 192.168.2.223/24 scope global enp4s0 + valid_lft forever preferred_lft forever + inet 192.168.4.223/24 scope global enp4s0 + valid_lft forever preferred_lft forever + inet6 fe80::1eef:5e24:4b67:f07f/64 scope link noprefixroute + valid_lft forever preferred_lft forever +``` + +#### Configuring a Static Route + +To add a static route to the routing table, run the **ip route add** command. To delete a route, run the **ip route del** command. The following shows the common format of the **ip route** command: + +```shell +ip route [ add | del | change | append | replace ] destination-address +``` + +To display the current IP routing table, run the **ip route** command as the **root** user. The following is an example: + +```shell +$ ip route + +default via 192.168.0.1 dev enp3s0 proto dhcp metric 100 +default via 192.168.0.1 dev enp4s0 proto dhcp metric 101 +192.168.0.0/16 dev enp3s0 proto kernel scope link src 192.168.202.248 metric 100 +192.168.0.0/16 dev enp4s0 proto kernel scope link src 192.168.203.12 metric 101 +192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown +``` + +To add a static route to the host address, run the following command as the **root** user: + +```shell +ip route add 192.168.2.1 via 10.0.0.1 [dev interface-name] +``` + +In the preceding command, **192.168.2.1** is the IP address in the dot-decimal notation, **10.0.0.1** is the next hop, and _interface-name_ is the exit interface for entering the next hop. + +To add a static route to the network, that is, an IP address that represents an IP address range, run the following command as the **root** user: + +```shell +ip route add 192.168.2.0/24 via 10.0.0.1 [dev interface-name] +``` + +In the preceding command, **192.168.2.1** is the IP address of the target network, _10.0.0.1_ is the network prefix, and _interface-name_ is the NIC name. + +### Configuring the Network Through the ifcfg File + +> [!NOTE]NOTE +> The network configured in the **ifcfg** file does not take effect immediately. After modifying the file (for example, **ifcfg-enp3s0**), you need to run the **nmcli con reload;nmcli con up enp3s0** command as the **root** user to reload the configuration file and activate the connection for the modification to take effect. + +#### Configuring a Static Network + +The following uses the **enp4s0** network interface as an example to describe how to configure a static network by modifying the **ifcfg** file as the **root** user. The **ifcfg-enp4s0** file is generated in the **/etc/sysconfig/network-scripts/** directory. Modify the following parameters in the file: + +```text +TYPE=Ethernet +PROXY_METHOD=none +BROWSER_ONLY=no +BOOTPROTO=none +IPADDR=192.168.0.10 +PREFIX=24 +DEFROUTE=yes +IPV4_FAILURE_FATAL=no +IPV6INIT=yes +IPV6_AUTOCONF=yes +IPV6_DEFROUTE=yes +IPV6_FAILURE_FATAL=no +IPV6_ADDR_GEN_MODE=stable-privacy +NAME=enp4s0static +UUID=08c3a30e-c5e2-4d7b-831f-26c3cdc29293 +DEVICE=enp4s0 +ONBOOT=yes +``` + +#### Configuring a Dynamic Network + +The following uses the **em1** network interface as an example to describe how to configure a dynamic network by modifying the **ifcfg** file. The **ifcfg-em1** file is generated in the **/etc/sysconfig/network-scripts/** directory. Modify the following parameters in the file: + +```text +DEVICE=em1 +BOOTPROTO=dhcp +ONBOOT=yes +``` + +To configure an interface to send different host names to the DHCP server, add the following content to the **ifcfg** file: + +```text +DHCP_HOSTNAME=hostname +``` + +To configure an interface to ignore the routes sent by the DHCP server to prevent network services from updating the /etc/resolv.conf file using the DNS server received from the DHCP server, add the following content to the **ifcfg** file: + +```text +PEERDNS=no +``` + +To configure an interface to use a specific DNS server, set the **PEERDNS** parameter to **no** and add the following content to the **ifcfg** file: + +```text +DNS1=ip-address +DNS2=ip-address +``` + +**ip-address** is the IP address of the DNS server. This allows the network service to update the **/etc/resolv.conf** file using the specified DNS server. + +#### Default Gateway Configuration + +When determining the default gateway, parse the **/etc/sysconfig/network** file and then the **ifcfg** file, and uses the value of **GATEWAY** that is read last as the default route in the routing table. + +In a dynamic network environment, when the NetworkManager is used to manage hosts, you are advised to set the default gateway to DHCP assignment. + +## Configuring a Host Name + +### Introduction + +There are three types of host names: **static**, **transient**, and **pretty**. + +- **static**: Static host name, which can be set by users and saved in the **/etc/hostname** file. +- **transient**: Dynamic host name, which is maintained by the kernel. The initial value is a static host name. The default value is **localhost**. The value can be changed when the DHCP or mDNS server is running. +- **pretty**: Flexible host name, which can be set in any form \(including special characters/blanks\). Static and transient host names are subject to the general domain name restrictions. + +> [!NOTE]NOTE +> Static and transient host names can contain only letters \(a to z and A to Z\), digits \(0 to 9\), hyphens \(-\), and periods \(.\). The host names cannot start or end with a period \(.\) or contain two consecutive periods \(.\). The host name can contain a maximum of 64 characters. + +### Configuring a Host Name by Running the hostnamectl Command + +#### Viewing All Host Names + +Run the following command to view the current host name: + +```shell +hostnamectl status +``` + +> [!NOTE]NOTE +> If no option is specified in the command, the **status** option is used by default. + +#### Setting All Host Names + +Run the following command as the **root** user to set all host names: + +```shell +hostnamectl set-hostname name +``` + +#### Setting a Specific Host Name + +Run the following command as the **root** user to set a specific host name: + +```shell +hostnamectl set-hostname name [option...] +``` + +The option may be one or more of **\-\-pretty**, **\-\-static**, and **\-\-transient**. + +If **\-\-static** or **\-\-transient** is used together with **\-\-pretty**, the host names of the **static** or **transient** type will be simplified to the host names of the **pretty** type with spaces replaced with hyphens \(-\) and special characters deleted. + +When setting a host name of the **pretty** type, use double quotation marks if the host name contains spaces or single quotation marks. An example is as follows: + +```shell +hostnamectl set-hostname "Stephen's notebook" --pretty +``` + +#### Clearing a Specific Host Name + +To clear a specific host name and restore it to the default format, run the following command as the **root** user: + +```shell +hostnamectl set-hostname "" [option...] +``` + +In the preceding command, **""** is a blank character string, and the _option_ may be one or more of **\-\-pretty**, **\-\-static**, and **\-\-transient**. + +#### Remotely Changing a Host Name + +To change the host name in a remote system, run the **hostnamectl** command as the **root** user with the **-H** or **\-\-host** option. + +```shell +hostnamectl set-hostname -H [username]@hostname new_hostname +``` + +In the preceding command, _hostname_ indicates the name of the remote host to be configured, _username_ indicates the user-defined name, and _new\_hostname_ indicates the new host name. **hostnamectl** is used to connect to the remote system through SSH. + +### Configuring a Host Name by Running the nmcli Command + +To query a static host name, run the following command: + +```shell +nmcli general hostname +``` + +To name a static host as **host-server**, run the following command as **root** user: + +```shell +nmcli general hostname host-server +``` + +To enable the system to detect the change of the static host name, run the following command as the **root** user to restart the hostnamed service: + +```shell +systemctl restart systemd-hostnamed +``` + +## Configuring Network Bonding + +### Running the nmcli Command + +- To create a bond named **mybond0**, run the following command: + + ```shell + nmcli con add type bond con-name mybond0 ifname mybond0 mode active-backup + ``` + +- To add a slave interface, run the following command: + + ```shell + nmcli con add type bond-slave ifname enp3s0 master mybond0 + ``` + + To add another slave interface, repeat the preceding command with the new interface name: + + ```shell + $ nmcli con add type bond-slave ifname enp4s0 master mybond0 + Connection 'bond-slave-enp4s0' (05e56afc-b953-41a9-b3f9-0791eb49f7d3) successfully added. + ``` + +- To enable a bond, run the following command to enable the slave interface first: + + ```shell + $ nmcli con up bond-slave-enp3s0 + Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/14) + ``` + + ```shell + $ nmcli con up bond-slave-enp4s0 + Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/15) + ``` + + Then, run the following command to enable the bond: + + ```shell + $ nmcli con up mybond0 + Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/16) + ``` + +### Configuring Network Bonding by Using a Command Line + +#### Checking Whether the Bonding Kernel Module Is Installed + +By default, the bonding kernel module is loaded. To load this module, run the following command as the **root** user: + +```shell +modprobe --first-time bonding +``` + +Run the following command as the **root** user to display the information about the module: + +```shell +modinfo bonding +``` + +For more commands, run the modprobe \-\-help command as the **root** user. + +#### Creating a Channel Bonding Interface + +To create a channel bonding interface, you can create a file named **ifcfg-bondN** in the **/etc/sysconfig/network-scripts/** directory as the **root** user \(replacing N with the actual interface number, for example, 0\). + +Write the corresponding content to the configuration file according to the type of the interface to be bonded, for example, network interface. An example of the interface configuration file is as follows: + +```text +DEVICE=bond0 +NAME=bond0 +TYPE=Bond +BONDING_MASTER=yes +IPADDR=192.168.1.1 +PREFIX=24 +ONBOOT=yes +BOOTPROTO=none +BONDING_OPTS="bonding parameters separated by spaces" +``` + +#### Creating a Slave Interface + +After creating a channel bonding interface, you must add the **MASTER** and **SLAVE** instructions to the configuration file of the slave interface. + +For example, to bind the two network interfaces enp3s0 and enp4s0 in channel mode, the configuration files are as follows: + +```text +TYPE=Ethernet +NAME=bond-slave-enp3s0 +UUID=3b7601d1-b373-4fdf-a996-9d267d1cac40 +DEVICE=enp3s0 +ONBOOT=yes +MASTER=bond0 +SLAVE=yes +``` + +```text +TYPE=Ethernet +NAME=bond-slave-enp4s0 +UUID=00f0482c-824f-478f-9479-abf947f01c4a +DEVICE=enp4s0 +ONBOOT=yes +MASTER=bond0 +SLAVE=yes +``` + +#### Activating Channel Bonding + +To activate channel bonding, you need to enable all the slave interfaces. Run the following command as the **root** user: + +```shell +$ ifup enp3s0 +Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7) +``` + +```shell +$ ifup enp4s0 +Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/8) +``` + +> [!NOTE]NOTE +> If an interface is in **up** state, run the **ifdown** _enp3s0_ command to change the state to **down**. In the command, _enp3s0_ indicates the actual NIC name. + +After that, enable all the slave interfaces to enable the bonding \(do not set them to **Down**\). + +To enable the NetworkManager to detect the modifications made by the system, run the following command as the **root** user after each modification: + +```shell +nmcli con load /etc/sysconfig/network-scripts/ifcfg-device +``` + +Run the following command as the **root** user to check the status of the bonded interface: + +```shell +$ ip link show + +1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 +2: enp3s0: mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 + link/ether 52:54:00:aa:ad:4a brd ff:ff:ff:ff:ff:ff +3: enp4s0: mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 + link/ether 52:54:00:aa:da:e2 brd ff:ff:ff:ff:ff:ff +4: virbr0: mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000 + link/ether 86:a1:10:fb:ef:07 brd ff:ff:ff:ff:ff:ff +5: virbr0-nic: mtu 1500 qdisc fq_codel master virbr0 state DOWN mode DEFAULT group default qlen 1000 + link/ether 52:54:00:29:35:4c brd ff:ff:ff:ff:ff:ff +``` + +#### Creating Multiple Bondings + +The system creates a channel bonding interface for each bonding, including the **BONDING\_OPTS** instruction. This configuration method allows multiple bonded devices to use different configurations. Perform the following operations to create multiple channel bonding interfaces: + +- Create multiple **ifcfg-bondN** files that contain the **BONDING\_OPTS** instruction so that network scripts can create bonding interfaces as required. +- Create or edit the existing interface configuration file to be bonded, and add the **SLAVE** instruction. +- Use the MASTER instruction to assign the interface to be bonded, that is, the slave interface, to the channel bonding interface. + +The following is an example of the configuration file of a channel bonding interface: + +```text +DEVICE=bondN +NAME=bondN +TYPE=Bond +BONDING_MASTER=yes +IPADDR=192.168.1.1 +PREFIX=24 +ONBOOT=yes +BOOTPROTO=none +BONDING_OPTS="bonding parameters separated by spaces" +``` + +In this example, replace N with the number of the bonded interface. For example, to create two interfaces, you need to create two configuration files **ifcfg-bond0** and **ifcfg-bond1** with correct IP addresses. + +## IPv6 Differences (vs IPv4) + +### Restrictions + +- chrony supports global addresses but not link-local addresses. +- Firefox supports the access to the global address through HTTP or HTTPS, but does not support the access to the link-local address. + +### Configuration Description + +#### Setting the MTU of an Interface Device + +##### Overview + +In an IPv6 scenario, the minimum MTU value of the entire routing path is used as the PMTU value of the current link. The source end determines whether to fragment packets based on the PMTU value. Other devices on the entire path do not need to fragment packets. This reduces the load of intermediate routing devices. The minimum value of IPv6 PMTU is 1280. + +##### Setting the MTU of the Interface Device + +If the MTU of an interface configured with an IPv6 address is set to a value smaller than **1280** \(the minimum value of the IPv6 PMTU\), the IPv6 address of the interface will be deleted and cannot be added again. Therefore, in IPv6 scenarios, the MTU of the interface device must be greater than or equal to 1280. Run the following commands as the **root** user to view the details: + +```shell +$ ip addr show enp3s0 +3: enp3s0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 + link/ether 52:54:00:62:xx:xx brd ff:ff:ff:ff:xx:xx + inet 10.41.125.236/16 brd 10.41.255.255 scope global noprefixroute dynamic enp3s0 + valid_lft 38663sec preferred_lft 38663sec + inet6 2001:222::2/64 scope global + valid_lft forever preferred_lft forever +``` + +```shell +$ ip link set dev enp3s0 mtu 1200 +$ ip addr show enp3s0 +3: enp3s0: mtu 1200 qdisc pfifo_fast state UP group default qlen 1000 + link/ether 52:54:00:62:xx:xx brd ff:ff:ff:ff:xx:xx + inet 10.41.125.236/16 brd 10.41.255.255 scope global noprefixroute dynamic enp3s0 + valid_lft 38642sec preferred_lft 38642sec +``` + +```shell +$ ip addr add 2001:222::2/64 dev enp3s0 +RTNETLINK answers: No buffer space available +``` + +```shell +$ ip link set dev enp3s0 mtu 1500 +$ ip addr show enp3s0 +3: enp3s0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 + link/ether 52:54:00:62:xx:xx brd ff:ff:ff:ff:xx:xx + inet 10.41.125.236/16 brd 10.41.255.255 scope global noprefixroute dynamic enp3s0 + valid_lft 38538sec preferred_lft 38538sec +``` + +```shell +$ ip addr add 2001:222::2/64 dev enp3s0 +$ ip addr show enp3s0 +3: enp3s0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 + link/ether 52:54:00:62:xx:xx brd ff:ff:ff:ff:xx:xx + inet 10.41.125.236/16 brd 10.41.255.255 scope global noprefixroute dynamic enp3s0 + valid_lft 38531sec preferred_lft 38531sec + inet6 2001:222::2/64 scope global + valid_lft forever preferred_lft forever +``` + +#### Stateful IPv6 Address Autoconfiguration + +##### Overview + +Both IPv6 and IPv4 addresses can be obtained through DHCP as the **root** user. There are configuration methods for IPv6 address: stateless autoconfiguration and stateful autoconfiguration. + +- Stateless autoconfiguration + + The DHCP server is not required for management. The device obtains the network prefix according to the router advertisement \(RA\), or the prefix of a link-local address is fixed to fe80::. The interface ID is automatically obtained based on the value of IPV6\_ADDR\_GEN\_MODE in the ifcfg file. + + 1. If the value of IPv6\_ADDR\_GEN\_MODE is stable-privacy, the device determines a random interface ID based on the device and network environment. + 2. If the value of IPv6\_ADDR\_GEN\_MODE is EUI64, the device determines the interface ID based on the device MAC address. + +- Stateful autoconfiguration: The DHCP server manages and leases IPv6 addresses from the DHCPv6 server base on the DHCPv6 protocol. + + In stateful autoconfiguration, the DHCPv6 server can classify clients based on the vendor class configured on the clients and assign IPv6 addresses in different address segments to different types of clients. In IPv4 scenarios, the client can use the -V option of the dhclient command to set the vendor-class-identifier field. The DHCP server classifies clients based on the vendor-class-identifier field in the configuration file. In IPv6 scenarios, if the same method is used to classify clients, the classification does not take effect. + + ```shell + dhclient -6 -V + ``` + + This is because DHCPv6 differs greatly from DHCP. The vendor-class-option in DHCPv6 replaces the vendor-class-identifier in DHCP. However, the -V option of dhclient cannot be set to vendor-class-option. + +##### Setting the vendor class for dhclient in Stateful IPv6 Address Autoconfiguration + +- On the client, add the setting of vendor class by using the configuration file. + + Client configuration file \(/etc/dhcp/dhclient6.conf\): The file location can be customized. You need to specify the configuration file using the dhclient -cf option. + + ```text + option dhcp6.vendor-class code 16 = {integer 32, integer 16, string}; + interface "enp3s0" { + send dhcp6.vendor-class ; + } + ``` + + > [!NOTE]NOTE + + - \: a 32-digit integer, indicating the enterprise ID. The enterprise is registered through the IANA. + - \: a 16-digit integer, indicating the length of the vendor class string. + - \: character string of the vendor class to be set, for example, HWHW. + + On the client: + + ```shell + dhclient -6 -cf /etc/dhcp/dhclient6.conf + ``` + +- The DHCPv6 server configuration file \(/etc/dhcp/dhcpd6.conf\) needs to be specified by the dhcpd -cf option. + + ```text + option dhcp6.vendor-class code 16 = {integer 32, integer 16, string}; + subnet6 fc00:4:12:ffff::/64 { + class "hw" { + match if substring ( option dhcp6.vendor-class, 6, 10 ) = "HWHW"; + } + pool6 { + allow members of "hw"; + range6 fc00:4:12:ffff::ff10 fc00:4:12:ffff::ff20; + } + pool6 { + allow unknown clients; + range6 fc00:4:12:ffff::100 fc00:4:12:ffff::120; + } + } + ``` + + > [!NOTE]NOTE + > In substring \(option dhcp6.vendor-class, 6, 10\), the start position of the substring is 6, because the substring contains four bytes of and two bytes of . The end position of the substring is 6+. In this example, the vendor class string is HWHW, and the length of the string is 4. Therefore, the end position of the substring is 6 + 4 = 10. You can specify and as required. + + On the server: + + ```shell + dhcpd -6 -cf /etc/dhcp/dhcpd6.conf + ``` + +#### Kernel Supporting Socket-Related System Calls + +##### Overview + +The length of an IPv6 address is extended to 128 bits, indicating that there are sufficient IPv6 addresses for allocation. Compared with the IPv4 header, the IPv6 header is simplified, and the IPv6 automatic configuration function is enhanced. IPv6 addresses are classified into unicast addresses, multicast addresses, and anycast addresses. Common unicast addresses include link-local addresses, unique local addresses, and global addresses. As there are sufficient global IPv6 addresses, unique local addresses are not used. \(formerly known as site-local addresses, which were discarded in 2004.\) Currently, the mainstream unicast addresses are link-local address and global address. The current kernel supports socket system invoking. The link-local address and global address using unicast addresses are different. + +##### Differences Between the link-local Address and global Address During Socket Invoking + +RFC 2553: Basic Socket Interface Extensions for IPv6 defines the sockaddr\_in6 data structure as follows: + +```c +struct sockaddr_in6 { + uint8_t sin6_len; /* length of this struct */ + sa_family_t sin6_family; /* AF_INET6 */ + in_port_t sin6_port; /* transport layer port # */ + uint32_t sin6_flowinfo; /* IPv6 flow information */ + struct in6_addr sin6_addr; /* IPv6 address */ + uint32_t sin6_scope_id; /* set of interfaces for a scope */ +}; +``` + +> [!NOTE]NOTE +> sin6\_scope\_id: a 32-bit integer. For the link-local address, it identifies the index of the specified interface. For the link-range sin6\_addr, it identifies the index of the specified interface. For the site-range sin6\_addr, it is used as the site identifier \(the site-local address has been discarded\). + +When the link-local address is used for socket communication, the interface index corresponding to the address needs to be specified when the destination address is constructed. Generally, you can use the if\_nametoindex function to convert an interface name into an interface index number. Details are as follows: + +```c +int port = 1234; +int sk_fd; +int iff_index = 0; +char iff_name[100] = "enp3s0"; +char * ll_addr[100] = "fe80::123:456:789"; +struct sockaddr_in6 server_addr; + +memset(&server_addr,0,sizeof(structsockaddr_in6)); +iff_index=if_nametoindex(iff_name); + +server_addr.sin6_family=AF_INET6; +server_addr.sin6_port=htons(port); +server_addr.sin6_scope_id=iff_index; +inet_pton(AF_INET6, ll_addr, &(server_addr.sin6_addr)); + +sk_fd=socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP); +connect(sk_fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr_in6)); +``` + +#### Persistency Configuration of the IPv4 dhclient Daemon Process + +##### Overview + +When the NetworkManager service is used to manage network services, if the ifcfg- configuration file of an interface is configured to obtain an IP address in DHCP mode, the NetworkManager service starts the dhclient daemon process to obtain an IP address from the DHCP server. + +The dhclient provides the -1 option to determine whether the dhclient process persistently attempts to request an IP address or exits after the request times out before receiving a response from the DHCP server. For the IPv4 dhclient daemon process, you can set PERSISTENT\_DHCLIENT in the ifcfg- configuration file to determine whether to set the persistence of the IPv4 dhclient process. + +##### Restrictions + +1. If the ongoing dhclient process is killed, the network service cannot automatically start it. Therefore, you need to ensure the reliability. +2. If PERSISTENT\_DHCLIENT is configured, ensure that the corresponding DHCP server exists. If no DHCP server is available when the network service is started and the dhclient process continuously attempts to send request packets but does not receive any response, the network service is suspended until the network service times out. The network service starts the IPv4 dhclient processes of multiple NICs in serial mode. If persistency is configured for a NIC but the DHCP server is not ready, the network service will be suspended when obtaining an IPv4 address for the NIC. As a result, the NIC cannot obtain an IPv4 or IPv6 address. + +The preceding restrictions apply to special scenarios. You need to ensure reliability. + +##### Configuration Differences Between IPv4 DHCP and IPv6 DHCPv6 + +You can configure the ifcfg- parameter on an interface to enable IPv4 and IPv6 to dynamically obtain IP addresses using DHCP or DHCPv6. The configuration is as follows: + +```text +BOOTPROTO=none|bootp|dhcp +DHCPV6C=yes|no +PERSISTENT_DHCLIENT=yes|no|1|0 +``` + +- BOOTPROTO: **none** indicates that an IPv4 address is statically configured. **bootp\|dhcp** enables DHCP dhclient to dynamically obtain an IPv4 address. +- DHCPV6C: **no** indicates that an IPv6 address is statically configured, and **yes** indicates that the DHCPv6 dhclient is enabled to dynamically obtain the IPv6 address. +- PERSISTENT\_DHCLIENT: **no\|0** indicates that the IPv4 dhclient process is configured as nonpersistent. If the dhclient sends a request packet to the DHCP server but does not receive any response, the dhclient exits after a period of time and the exit value is 2. **yes\|1** indicates that the IPv4 dhclient process is configured to be persistent. The dhclient process repeatedly sends request packets to the DHCP server. **If PERSISTENT\_DHCLIENT is not configured, dhclient of IPv4 is set to yes\|1 by default.** + + > [!NOTE]NOTE + > The PERSISTENT\_DHCLIENT configuration takes effect only for IPv4 and does not take effect for IPv6-related dhclient -6 processes. By default, the persistence configuration is not performed for IPv6. + +#### Differences Between IPv4 and IPv6 Configuration Using the iproute Command + +##### Overview + +IPv4 and IPv6 are two different protocol standards. Therefore, the iproute commands are different in usage. This section describes the differences between IPv4 and IPv6 commands in the iproute package. + +To run the iproute commands, you must have the root permission. + +##### Lifecycle of an IPv6 Address + + + + + + + + + + + + + + + + + + + +

IPv6 status

+

Description

+

tentative

+

Temporary state: The newly added address is still in the DAD process.

+

preferred

+

Preferred state: The DAD process is complete, but no NA packet is received, indicating that the address does not conflict.

+

deprecated

+

Deprecated state: An address has a validity period (valid_lft or preferred_lft). After preferred_lft expires, the address changes to the deprecated state.

+

The address in this state cannot be used to create a new connection, but the original connection can still be used.

+

invalid

+

Invalid state: If the lease renewal fails after the preferred_lft time expires, the address status is set to invalid after the valid_lft time expires, indicating that the address cannot be used again.

+
+ +Remarks: + +- preferred\_lft: preferred lifetime. The preferred\_lft address has not expired and can be used for normal communication. If there are multiple preferred addresses, the address is selected based on the kernel mechanism. +- valid\_lft: valid lifetime. The address cannot be used for creating new connections within the period of \[preferred\_lft, valid\_lft\]. The existing connections are still valid. + +##### Command ip link + +The commands are as follows: + +```shell +ip link set IFNAME mtu MTU +``` + +The minimum PMTU of IPv6 is 1280. If the MTU is set to a value smaller than 1280, IPv6 addresses will be lost. Other devices cannot ping the IPv6 address. + +##### Command ip addr + +1. The commands are as follows: + + ```shell + ip [-6] addr add IFADDR dev IFNAME + ``` + + You can choose to add the -6 option or not to add the IPv6 address. The ip addr command determines whether the address is an IPv4 address or an IPv6 address based on the address type. + + If the -6 option is specified but IFADDR is an IPv4 address, an error message is returned. + +2. The commands are as follows: + + ```shell + ip [-6] addr add IFADDR dev IFNAME [home|nodad] + ``` + + \[home\|nodad\] is valid only for IPv6 addresses. + + - home: specifies the home address defined in RFC 6275. \(This address is obtained by the mobile node from the home link, and is a permanent address of the mobile node. If the mobile node remains in the same home link, communication between various entities is performed normally.\) + - nodad: indicates that DAD is not performed when this IPv6 address is added. \(RFC 4862\) If multiple interfaces on a device are configured with the same IPv6 address through nodad, the IPv6 address is used in the interface sequence. An IPv6 address with both nodad and non-nodad cannot be added the same interface because the two IP addresses are the same. Otherwise, the message "RTNETLINK answers: File exists" is displayed. + +3. The commands are as follows: + + ```shell + ip [-6] addr del IFADDR dev IFNAME + ``` + + You can choose to add the -6 option or not to delete an IPv6 address. The ip addr del command determines whether an IPv4 address or an IPv6 address is used based on the address type. + +4. The commands are as follows: + + ```shell + ip [-6] addr show dev IFNAME [tentative|-tentative|deprecated|-deprecated|dadfailed|-dadfailed|temporary] + ``` + + - If the -6 option is not specified, both IPv4 and IPv6 addresses are displayed. If the -6 option is specified, only IPv6 addresses are displayed. + - \[tentative\|-tentative\|deprecated\|-deprecated\|dadfailed\|-dadfailed\|temporary\]. These options are only for IPv6. You can filter and view addresses based on the IPv6 address status. + 1. tentative: \(only for IPv6\) lists only the addresses that have not passed duplicate address detection \(DAD\). + 2. -tentative: \(only for IPv6\) lists only the addresses that are not in the DAD process. + 3. deprecated: \(only for IPv6\) lists only the deprecated addresses. + 4. -deprecated: \(only for IPv6\) lists only the addresses that are not deprecated. + 5. dadfailed: \(only for IPv6\) lists only the addresses that fail the DAD. + 6. -dadfailed: \(only for IPv6\) lists only the addresses that do not encounter DAD failures. + 7. temporary: \(only for IPv6\) lists only the temporary addresses. + +##### Command ip route + +1. The commands are as follows: + + ```shell + ip [-6] route add ROUTE [mtu lock MTU] + ``` + + - -6 option: You can add the -6 option or not when adding an IPv6 route. The ip route command determines whether an IPv4 or IPv6 address is used based on the address type. + + - mtu lock MTU: specifies the MTU of the locked route. If the MTU is not locked, the MTU value may be changed by the kernel during the PMTUD process. If the MTU is locked, PMTUD is not attempted. All IPv4 packets are not set with the DF bit and IPv6 packets are segmented based on the MTU. + +2. The commands are as follows: + + ```shell + ip [-6] route del ROUTE + ``` + + You can choose whether to add the -6 option when deleting an IPv6 route. The ip route command determines whether an IPv4 address or an IPv6 address is used based on the address type. + +##### Command ip rule + +1. The commands are as follows: + + ```shell + ip [-6] rule list + ``` + + -6 option: If the -6 option is set, IPv6 policy-based routes are printed. If the -6 option is not set, IPv4 policy-based routes are printed. Therefore, you need to configure the -6 option according to the specific protocol type. + +2. The commands are as follows: + + ```shell + ip [-6] rule [add|del] [from|to] ADDR table TABLE pref PREF + ``` + + -6 option: IPv6-related policy routing entries need to be configured with the -6 option. Otherwise, the error message "Error: Invalid source address." is displayed. Accordingly, the -6 option cannot be set for IPv4-related policy routing entries. Otherwise, the error message "Error: Invalid source address." is displayed. + +#### Configuration Differences of the NetworkManager Service + +##### Overview + +The NetworkManager service uses the ifup/ifdown logical interface definition to perform advanced network settings. Most of the parameters are set in the /etc/sysconfig/network and /etc/sysconfig/network-scripts/ifcfg- configuration files. The former is a global setting, and the latter is a setting of a specified NIC. When the two settings conflict, the latter takes effect. + +##### Configuration Differences + +The configuration differences in /etc/sysconfig/network are as follows: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

IPv4

+

IPv6

+

Description

+

N/A

+

IPV6FORWARDING=yes|no

+

IPv6 forwarding. By default, IPv6 packets are not forwarded.

+

N/A

+

IPV6_AUTOCONF=yes|no

+

If IPv6 forwarding is enabled, the value is no. Otherwise, the value is yes.

+

N/A

+

IPV6_ROUTER=yes|no

+

If IPv6 forwarding is enabled, the value is yes. Otherwise, the value is no.

+

N/A

+

IPV6_AUTOTUNNEL=yes|no

+

Indicates the automatic tunnel mode. The default value is no.

+

GATEWAY

+

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

+

Indicates the default gateway in IPv6.

+

N/A

+

IPV6_DEFAULTDEV=<interface> (optional)

+

Specifies the default forwarding NIC.

+

N/A

+

IPV6_RADVD_PIDFILE=<pid-file> (optional)

+

The default path of ipv6_radvd_pid is /var/run/radvd/radvd.pid.

+

N/A

+

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

+

Default radvd trigger action.

+
+ +The differences in /etc/sysconfig/network-scripts/ifcfg- are as follows: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

IPv4

+

IPv6

+

Description

+

IPADDR

+

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

+

indicates the IP address.

+

PREFIX

+

N/A

+

The network prefix, network alias, and PPP are invalid. The priority is higher than that of NETMASK.

+

NETMASK

+

N/A

+

Indicates the subnet mask. It is used only for the alias and PPP.

+

GATEWAY

+

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

+

Default gateway

+

MTU

+

IPV6_MTU=<MTU of link> (optional)

+

Default MTU

+

IPV4_FAILURE_FATAL=yes|no

+

IPV6_FAILURE_FATAL

+

The default value is no. If this parameter is set to yes, ifup-eth exits when dhclient fails.

+

N/A

+

IPV6_PRIVACY=rfc3041

+

Disabled by default.

+

N/A

+

IPV6INIT=yes|no

+

IPv6 is enabled by default.

+

N/A

+

IPV6FORWARDING=yes|no

+

This function is disabled by default and has been discarded.

+
+ +### FAQs + +#### The iscsi-initiator-utils Does Not Support the fe80 IPv6 Address + +##### Symptom + +When a client uses an IPv6 address to log in to the iSCSI server, run the iscsiadm -m node -p ipv6address -l command. If the global address is used, replace ipv6address in the command example with the global address. However, the link-local address \(IPv6 address starting with fe80\) cannot be used because the current mechanism of iscsi-initiator-utils does not support the link-local address to log in to the iSCSI server. + +##### Possible Cause + +If you log in to the system using the iscsiadm -m node -p fe80::xxxx -l format, a login timeout error is returned. This is because you must specify an interface when using the link-local address. Otherwise, the iscsi\_io\_tcp\_connect function fails to invoke the connect function, and the standard error code 22 is generated. + +If you use the iscsiadm -m node -p fe80::xxxx%enp3s0 -l format for login, the iscsi\_addr\_match function will compare the address fe80::xxxx%enp3s0 with the address fe80::xxxx in the node information returned by the server. The comparison result does not match, causing the login failure. + +Therefore, **the current mechanism of iscsi-initiator-utils does not support login to the iSCSI server using a link-local address.** + +#### The IPv6 Address Is Lost After the NIC Is Down + +##### Symptom + +Run the ip link down+up NIC or ifconfig down+up NIC command to disable the NIC and then enable it to go online. Check the IP address configured on the NIC. It is found that the IPv4 address is not lost but the configured IPv6 address is lost. + +##### Possible Cause + +According to the processing logic in the kernel, if the NIC is set to the down state, all IPv4 and IPv6 addresses will be cleared. After the NIC is set to the up state, the IPv4 address is automatically restored, and the automatically configured IPv6 link-local address on the NIC is also restored. However, other IPv6 addresses are lost by default. To retain these IPv6 addresses, run the **sysctl -w net.ipv6.conf.\< _NIC name_ \>.keep\_addr\_on\_down=1** command. + +#### Taking a Long Time to Add or Delete an IPv6 Address for a Bond Interface with Multiple IPv6 Addresses + +##### Symptom + +When users run the following command to add or delete \(including flush\) an IPv6 address, the waiting time increases linearly along with the number of IPv6 addresses configured on a bond interface. **X** is the least significant 16 bits that dynamically change. For example, it takes about five minutes to add 3000 IPv6 address to or delete them from a bond interface that already has four physical NICs using a single thread, while for a common physical NIC, it takes less than 10 seconds. + +```shell +ip a add/del 192:168::18:X/64 dev DEVICE +``` + +##### Possible Cause + +When an IPv6 address is added to a bond interface, the IPv6 multicast address is generated and synchronized to all physical NICs. The time required increases with the number of IPv6 addresses. As a result, it takes a too long time. + +##### Solution + +The IPv6 multicast address is generated by combining the least significant 24 bits of the IPv6 address and 33-33-ff. If there are too many multicast addresses, it takes a long time to add or delete the address. If there are a few multicast addresses, the time required is not affected. + +It is recommended that you set the least significant 24 bits of the IPv6 address to be the same as the most significant 24 bits of the IPv6 address. In this way, a single NIC can communicate with external devices using only one IP address in a network segment. + +#### Rsyslog Log Transmission Is Delayed in the Scenario Where Both IPv4 and IPv6 Are Used + +##### Symptom + +When both IPv4 and IPv6 addresses are configured in the configuration file of the rsyslog client and the port configurations are the same, there is a possibility that log output is delayed when the server collects logs. + +##### Possible Cause + +The delay is caused by the buffer queue mechanism of rsyslog. By default, rsyslog writes data to a file only when the number of buffer queues reaches a specified value. + +##### Solution + +You can disable the buffer queue mechanism by configuring the Direct mode as the **root** user. Add the following information at the beginning of the new remote transmission configuration file in the /etc/rsyslog.d directory on the rsyslog remote transmission server: + +```text +$ActionQueueType Direct +$MainMsgQueueType Direct +``` + +> [!NOTE]NOTE + +- In direct mode, the queue size is reduced by 1. Therefore, one log is reserved in the queue for the next log output. +- The direct mode degrades the rsyslog performance of the server. diff --git a/docs/en/server/network/network_config/public_sys-resources/icon-caution.gif b/docs/en/server/network/network_config/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/network/network_config/public_sys-resources/icon-caution.gif differ diff --git a/docs/en/server/network/network_config/public_sys-resources/icon-danger.gif b/docs/en/server/network/network_config/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/network/network_config/public_sys-resources/icon-danger.gif differ diff --git a/docs/en/server/network/network_config/public_sys-resources/icon-note.gif b/docs/en/server/network/network_config/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/server/network/network_config/public_sys-resources/icon-note.gif differ diff --git a/docs/en/server/network/network_config/public_sys-resources/icon-notice.gif b/docs/en/server/network/network_config/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/en/server/network/network_config/public_sys-resources/icon-notice.gif differ diff --git a/docs/en/server/network/network_config/public_sys-resources/icon-tip.gif b/docs/en/server/network/network_config/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/en/server/network/network_config/public_sys-resources/icon-tip.gif differ diff --git a/docs/en/server/network/network_config/public_sys-resources/icon-warning.gif b/docs/en/server/network/network_config/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/network/network_config/public_sys-resources/icon-warning.gif differ diff --git a/docs/en/server/performance/cpu_optimization/_toc.yaml b/docs/en/server/performance/cpu_optimization/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c6017c5811c3a2f48db302c25e07c20a11cff27f --- /dev/null +++ b/docs/en/server/performance/cpu_optimization/_toc.yaml @@ -0,0 +1,6 @@ +label: Using the Kunpeng Accelerator Engine (KAE) +isManual: true +description: The KAE acceleration engine minimizes processor usage while enhancing its efficiency +sections: + - label: Using the Kunpeng Accelerator Engine (KAE) + href: ./using_the_kae.md diff --git a/docs/en/server/performance/cpu_optimization/figures/RA-arch-1.png b/docs/en/server/performance/cpu_optimization/figures/RA-arch-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0ad1375a27cd61abf9f06518dbe1c01554623efd Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/RA-arch-1.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/RA-arch-2.png b/docs/en/server/performance/cpu_optimization/figures/RA-arch-2.png new file mode 100644 index 0000000000000000000000000000000000000000..19c7a1ee60422eb13d8a300514f78a63d1640394 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/RA-arch-2.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/TPCM.png b/docs/en/server/performance/cpu_optimization/figures/TPCM.png new file mode 100644 index 0000000000000000000000000000000000000000..50882fb08433ee3ce187b3846bd6ec4a9f6d6818 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/TPCM.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/creat_datadisk.png b/docs/en/server/performance/cpu_optimization/figures/creat_datadisk.png new file mode 100644 index 0000000000000000000000000000000000000000..0dfd6a2802184af6d809c485191ea52452cf28d5 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/creat_datadisk.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/creat_datadisk1.png b/docs/en/server/performance/cpu_optimization/figures/creat_datadisk1.png new file mode 100644 index 0000000000000000000000000000000000000000..0dfd6a2802184af6d809c485191ea52452cf28d5 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/creat_datadisk1.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/d1376b2a-d036-41c4-b852-e8368f363b5e-1.png b/docs/en/server/performance/cpu_optimization/figures/d1376b2a-d036-41c4-b852-e8368f363b5e-1.png new file mode 100644 index 0000000000000000000000000000000000000000..900cdc07c1f0e844bc48fe2342e83c91a23c24ec Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/d1376b2a-d036-41c4-b852-e8368f363b5e-1.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/d1376b2a-d036-41c4-b852-e8368f363b5e.png b/docs/en/server/performance/cpu_optimization/figures/d1376b2a-d036-41c4-b852-e8368f363b5e.png new file mode 100644 index 0000000000000000000000000000000000000000..900cdc07c1f0e844bc48fe2342e83c91a23c24ec Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/d1376b2a-d036-41c4-b852-e8368f363b5e.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/en-us_image_0229622729.png b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0229622729.png new file mode 100644 index 0000000000000000000000000000000000000000..47f2d1cac133379469ed88b2bcb7213d75cf881e Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0229622729.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/en-us_image_0229622789.png b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0229622789.png new file mode 100644 index 0000000000000000000000000000000000000000..102d523ea5c2a1fedf4975556bf8b26f7599daaf Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0229622789.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/en-us_image_0230050789.png b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0230050789.png new file mode 100644 index 0000000000000000000000000000000000000000..0b785be2a026fe059c6ee41700a971a11cfff7ae Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0230050789.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143189.png b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143189.png new file mode 100644 index 0000000000000000000000000000000000000000..7656f3aa5f5907f1e9f981c0cb5d44d4fcb84ef3 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143189.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143191.png b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143191.png new file mode 100644 index 0000000000000000000000000000000000000000..a82d1bcb2b719e3a372f63ae099cb5d52a93b536 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143191.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143193.png b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143193.png new file mode 100644 index 0000000000000000000000000000000000000000..94614045bddb0871b44d2f6603402f914871ad61 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143193.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143195.png b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143195.png new file mode 100644 index 0000000000000000000000000000000000000000..05011dbabe2d245c37ec68de646851bf955a2361 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143195.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143196.png b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143196.png new file mode 100644 index 0000000000000000000000000000000000000000..9bdbac969920af77721980804bd1c5433bea5bc9 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143196.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143197.png b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143197.png new file mode 100644 index 0000000000000000000000000000000000000000..5ea4eec4002374096d8ac18eb973ed3bf874b632 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143197.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143198.png b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143198.png new file mode 100644 index 0000000000000000000000000000000000000000..7d6360c150495d204da4b069e6dc62677580888f Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231143198.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231563132.png b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231563132.png new file mode 100644 index 0000000000000000000000000000000000000000..bb801a9471f3f3541ba96491654f25e2df9ce8bf Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231563132.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231563134.png b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231563134.png new file mode 100644 index 0000000000000000000000000000000000000000..398d15376d29d3aa406abb2e7e065d4625428c4d Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231563134.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231563135.png b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231563135.png new file mode 100644 index 0000000000000000000000000000000000000000..785977142a6bf0e1c1815b82dea73d75fa206a75 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231563135.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231563136.png b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231563136.png new file mode 100644 index 0000000000000000000000000000000000000000..c274db4d0ca9d8758267a916e19fdef4aa22d0ba Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/en-us_image_0231563136.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/etmem-system-architecture-en.png b/docs/en/server/performance/cpu_optimization/figures/etmem-system-architecture-en.png new file mode 100644 index 0000000000000000000000000000000000000000..146a3618135712cb66feb3fc399a7549c636bd92 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/etmem-system-architecture-en.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/example-command-output.png b/docs/en/server/performance/cpu_optimization/figures/example-command-output.png new file mode 100644 index 0000000000000000000000000000000000000000..2d77d3dc2934763b5da896a827b9805da34d1c09 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/example-command-output.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/ima_digest_list_update.png b/docs/en/server/performance/cpu_optimization/figures/ima_digest_list_update.png new file mode 100644 index 0000000000000000000000000000000000000000..771067e31cee84591fbb914d7be4e8c576d7f5d2 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/ima_digest_list_update.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/ima_performance.png b/docs/en/server/performance/cpu_optimization/figures/ima_performance.png new file mode 100644 index 0000000000000000000000000000000000000000..f5d641e8682ad2b9c0fbfad191add1819f5b2eef Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/ima_performance.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/ima_verification.png b/docs/en/server/performance/cpu_optimization/figures/ima_verification.png new file mode 100644 index 0000000000000000000000000000000000000000..fc879949db5387c61ccf6176f948b9a00f4fb053 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/ima_verification.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/login.png b/docs/en/server/performance/cpu_optimization/figures/login.png new file mode 100644 index 0000000000000000000000000000000000000000..d15c2cad98fba16320d587f3c7b0c80f435c5d3a Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/login.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/mariadb-logical-architecture.png b/docs/en/server/performance/cpu_optimization/figures/mariadb-logical-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e65e786d918c84bbb14c101b69bc4ad36ccb4b Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/mariadb-logical-architecture.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/nginx-deployment-succeeded.png b/docs/en/server/performance/cpu_optimization/figures/nginx-deployment-succeeded.png new file mode 100644 index 0000000000000000000000000000000000000000..9ffb2c142defbd690e5407659116bf8e5582ba73 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/nginx-deployment-succeeded.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/nginx-startup-failure.png b/docs/en/server/performance/cpu_optimization/figures/nginx-startup-failure.png new file mode 100644 index 0000000000000000000000000000000000000000..c8b855453433796265de42d7ffd0189c7ff9be2b Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/nginx-startup-failure.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/postgres.png b/docs/en/server/performance/cpu_optimization/figures/postgres.png new file mode 100644 index 0000000000000000000000000000000000000000..e7fc36882718587ec949133fe9892185cb4c2158 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/postgres.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/postgresql-architecture.png b/docs/en/server/performance/cpu_optimization/figures/postgresql-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..cc73eb31f746409efc1e997072bf3d18b013012e Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/postgresql-architecture.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/the-nginx-service-is-successfully-started.png b/docs/en/server/performance/cpu_optimization/figures/the-nginx-service-is-successfully-started.png new file mode 100644 index 0000000000000000000000000000000000000000..bc6929772fd98fac3494b4436f26910b09818cb7 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/the-nginx-service-is-successfully-started.png differ diff --git a/docs/en/server/performance/cpu_optimization/figures/trusted_chain.png b/docs/en/server/performance/cpu_optimization/figures/trusted_chain.png new file mode 100644 index 0000000000000000000000000000000000000000..034f0f092f41fb500ee4122339c447d10d4138ec Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/figures/trusted_chain.png differ diff --git a/docs/en/server/performance/cpu_optimization/public_sys-resources/icon-caution.gif b/docs/en/server/performance/cpu_optimization/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/public_sys-resources/icon-caution.gif differ diff --git a/docs/en/server/performance/cpu_optimization/public_sys-resources/icon-danger.gif b/docs/en/server/performance/cpu_optimization/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/public_sys-resources/icon-danger.gif differ diff --git a/docs/en/server/performance/cpu_optimization/public_sys-resources/icon-note.gif b/docs/en/server/performance/cpu_optimization/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/public_sys-resources/icon-note.gif differ diff --git a/docs/en/server/performance/cpu_optimization/public_sys-resources/icon-notice.gif b/docs/en/server/performance/cpu_optimization/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/public_sys-resources/icon-notice.gif differ diff --git a/docs/en/server/performance/cpu_optimization/public_sys-resources/icon-tip.gif b/docs/en/server/performance/cpu_optimization/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/public_sys-resources/icon-tip.gif differ diff --git a/docs/en/server/performance/cpu_optimization/public_sys-resources/icon-warning.gif b/docs/en/server/performance/cpu_optimization/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/performance/cpu_optimization/public_sys-resources/icon-warning.gif differ diff --git a/docs/en/server/performance/cpu_optimization/using_the_kae.md b/docs/en/server/performance/cpu_optimization/using_the_kae.md new file mode 100644 index 0000000000000000000000000000000000000000..35760fde7041a25da440095d506946e8e9d5a480 --- /dev/null +++ b/docs/en/server/performance/cpu_optimization/using_the_kae.md @@ -0,0 +1,725 @@ +# Using the Kunpeng Accelerator Engine (KAE) + +## Overview + +Kunpeng Accelerator Engine \(KAE\) is a software acceleration library of openEuler, which provides hardware acceleration engine function on the Kunpeng 920 processor. It supports symmetric encryption, asymmetric encryption, and digital signature. It is ideal for accelerating SSL/TLS applications, reducing processor consumption and improving processor efficiency. In addition, users can quickly migrate existing services through the standard OpenSSL interface. + +The KAE supports the following algorithms: + +- Digest algorithm SM3, which supports asynchronous mode. +- Symmetric encryption algorithm SM4, which supports asynchronous, CTR, XTS, and CBC modes. +- Symmetric encryption algorithm AES, which supports asynchronous, ECB, CTR, XTS, and CBC modes. +- Asymmetric algorithm RSA, which supports asynchronous mode and key sizes 1024, 2048, 3072, and 4096. +- Key negotiation algorithm DH, which supports asynchronous mode and key sizes 768, 1024, 1536, 2048, 3072, and 4096. + +## Application Scenarios + +The KAE applies to the following scenarios, as shown in [Table 1](#table11915824163418). + +**Table 1** Application scenarios + + + + + + + + + + + + + + + + + + + +

Scenario

+

Data

+

Big data

+

Stream data

+

Data encryption

+

Block data

+

Intelligent security protection

+

Video stream data

+

Web service

+

Handshake connections

+
+ +## Installing, Running, and Uninstalling the KAE + +### Installing the Accelerator Software Packages + +#### Preparing for Installation + +##### Environment Requirements + +- The accelerator engine is enabled on TaiShan 200 servers. + +>[!NOTE] **NOTE:** +> +>- You need to import the accelerator license. For details, see section "License Management" in the [TaiShan Rack Server iBMC \(V500 or Later\) User Guide](https://support.huawei.com/enterprise/en/doc/EDOC1100121685/426cffd9?idPath=7919749|9856522|21782478|8060757). +>- If the accelerator is used in the physical machine scenario, the SMMU must be disabled. For details, see the [TaiShan 200 Server BIOS Parameter Reference](https://support.huawei.com/enterprise/en/doc/EDOC1100088647). + +- CPU: Kunpeng 920 +- OS: openEuler-22.03_LTS_SP4-aarch64-dvd.iso + +##### KAE Software Description + +**Table 2** RPM software packages of the KAE + + + + + + + + + + + + + + + + +

Software Package

+

Description

+

kae_driver-version number-1.OS type.aarch64.rpm

+

Accelerator driver, including the uacce.ko, hisi_qm.ko, hisi_sec2.ko, and hisi_hpre.ko kernel modules.

+

Algorithms supported: SM3, SM4, AES, RSA, and DH.

+

libwd-version number-1.OS type.aarch64.rpm

+

Coverage: libwd.so dynamic link library.

+

It provides interfaces for the KAE.

+

libkae-version number-1.OS type.aarch64.rpm

+

Dependency: libwd RPM package.

+

Coverage: libkae.so dynamic library.

+

Algorithms supported: SM3, SM4, AES, RSA, and DH.

+
+ +#### Installing the Accelerator Software Package + +##### Prerequisites + +- The remote SSH login tool has been installed on the local PC. +- The openEuler OS has been installed. +- The RPM tool is running properly. +- OpenSSL 1.1.1a or a later version has been installed. + + You can run the following commands to query the version number of OpenSSL: + + - openssl version + +##### Procedure + +1. Log in to the openEuler OS CLI as user **root**. +2. Create a directory for storing accelerator engine software packages. +3. Use SSH to copy all accelerator engine software packages to the created directory. +4. In the directory, run the **rpm -ivh** command to install the accelerator engine software packages. + + >[!NOTE] **NOTE:** + >Install the **libwd** package first because the **libkae** package installation depends on the **libwd** package. + + ```shell + rpm -ivh uacce*.rpm hisi*.rpm libwd-*.rpm libkae*.rpm + ``` + + ```text + Verifying... ################################# [100%] + Preparing... ################################# [100%] + checking installed modules + uacce modules start to install + Updating / installing... + 1:uacce-1.2.10-4.oe1 ################################# [ 14%] + uacce modules installed + 2:libwd-1.2.10-3.oe1 ################################# [ 29%] + 3:libkae-1.2.10-3.oe1 ################################# [ 43%] + checking installed modules + hisi_hpre modules start to install + 4:hisi_hpre-1.2.10-4.oe1 ################################# [ 57%] + hisi_hpre modules installed + checking installed modules + hisi_rde modules start to install + 5:hisi_rde-1.2.10-4.oe1 ################################# [ 71%] + hisi_rde modules installed + checking installed modules + hisi_sec2 modules start to install + 6:hisi_sec2-1.2.10-4.oe1 ################################# [ 86%] + hisi_sec2 modules installed + checking installed modules + hisi_zip modules start to install + 7:hisi_zip-1.2.10-4.oe1 ################################# [100%] + hisi_zip modules installed + ``` + +5. Run the **rpm -qa** command to check whether the accelerator software packages have been installed successfully. Run the **rpm -ql** command to check whether files in the software packages are correct. The following is an example: + + ```shell + rpm -qa|grep -E "hisi|uacce|libwd|libkae" + ``` + + ```text + hisi_rde-1.2.10-4.oe1.aarch64 + hisi_sec2-1.2.10-4.oe1.aarch64 + libkae-1.2.10-3.oe1.aarch64 + hisi_hpre-1.2.10-4.oe1.aarch64 + uacce-1.2.10-4.oe1.aarch64 + libwd-1.2.10-3.oe1.aarch64 + hisi_zip-1.2.10-4.oe1.aarch64 + ``` + + ```shell + rpm -ql uacce hisi* libwd* libkae + ``` + + ```text + /lib/modules/4.19.90-2003.4.0.0036.oe1.aarch64/extra/hisi_qm.ko + /lib/modules/4.19.90-2003.4.0.0036.oe1.aarch64/extra/uacce.ko + /etc/modprobe.d/hisi_hpre.conf + /lib/modules/4.19.90-2003.4.0.0036.oe1.aarch64/extra/hisi_hpre.ko + /etc/modprobe.d/hisi_rde.conf + /lib/modules/4.19.90-2003.4.0.0036.oe1.aarch64/extra/hisi_rde.ko + /etc/modprobe.d/hisi_sec2.conf + /lib/modules/4.19.90-2003.4.0.0036.oe1.aarch64/extra/hisi_sec2.ko + /etc/modprobe.d/hisi_zip.conf + /lib/modules/4.19.90-2003.4.0.0036.oe1.aarch64/extra/hisi_zip.ko + /usr/include/warpdrive/config.h + /usr/include/warpdrive/include/uacce.h + /usr/include/warpdrive/smm.h + /usr/include/warpdrive/wd.h + /usr/include/warpdrive/wd_bmm.h + /usr/include/warpdrive/wd_cipher.h + /usr/include/warpdrive/wd_comp.h + /usr/include/warpdrive/wd_dh.h + /usr/include/warpdrive/wd_digest.h + /usr/include/warpdrive/wd_rsa.h + /usr/lib64/libwd.so.1.2.10 + /usr/local/lib/engines-1.1/libkae.so.1.2.10 + ``` + +6. Restart the system or run commands to manually load the accelerator engine drivers to the kernel in sequence, and check whether the drivers are successfully loaded. + + ```shell + modprobe uacce + lsmod | grep uacce + modprobe hisi_qm + lsmod | grep hisi_qm + modprobe hisi_qm + modprobe hisi_sec2 # Loads the hisi_sec2 driver to the kernel based on the configuration file in /etc/modprobe.d/hisi_sec2.conf. + modprobe hisi_hpre # Loads the hisi_hpre driver to the kernel based on the configuration file in /etc/modprobe.d/hisi_hpre.conf. + ``` + +##### Environment Variables Setup + +Run the following command to export the environment variables \(If you have specified the installation directory, set **/usr/local** to the actual one\): + +```shell +export OPENSSL_ENGINES=/usr/local/lib/engines-1.1 +``` + +##### Post-Installation Check + +Run the **rpm -qa** command to check whether the accelerator engine software packages are successfully installed. + +If the command output contains _software package name_**-**_version number_**-**, the software packages are successfully installed. The following is an example: + +```shell +rpm -qa|grep -E "hisi|uacce|libwd|libkae" +``` + +```text +hisi_rde-1.2.10-4.oe1.aarch64 +hisi_sec2-1.2.10-4.oe1.aarch64 +libkae-1.2.10-3.oe1.aarch64 +hisi_hpre-1.2.10-4.oe1.aarch64 +uacce-1.2.10-4.oe1.aarch64 +libwd-1.2.10-3.oe1.aarch64 +hisi_zip-1.2.10-4.oe1.aarch64 +``` + +#### Required Operations After Installation + +##### Testing the OpenSSL Accelerator Engine + +You can run the following commands to test some accelerator functions. + +- Use the OpenSSL software algorithm to test the RSA performance. + + ```shell + $ ./openssl speed -elapsed rsa2048 + ... + sign verify sign/s verify/s + rsa 2048 bits 0.001384s 0.000035s 724.1 28365.8. + ``` + +- Use the KAE to test the RSA performance. + + ```shell + $ ./openssl speed -elapsed -engine kae rsa2048 + .... + sign verify sign/s verify/s + rsa 2048 bits 0.000355s 0.000022s 2819.0 45478.4 + ``` + +>[!NOTE] **NOTE:** +>After the KAE is used, the signature performance is improved from 724.1 sign/s to 2819 sign/s. + +- Use the OpenSSL software algorithm to test the asynchronous RSA performance. + + ```shell + $ ./openssl speed -elapsed -async_jobs 36 rsa2048 + .... + sign verify sign/s verify/s + rsa 2048 bits 0.001318s 0.000032s 735.7 28555 + ``` + +- Use the KAE to test the asynchronous RSA performance. + + ```shell + $ ./openssl speed -engine kae -elapsed -async_jobs 36 rsa2048 + .... + sign verify sign/s verify/s + rsa 2048 bits 0.000018s 0.000009s 54384.1 105317.0 + ``` + +>[!NOTE] **NOTE:** +>After the KAE is used, the asynchronous RSA signature performance is improved from 735.7 sign/s to 54384.1 sign/s. + +- Use the OpenSSL software algorithm to test the performance of the SM4 CBC mode. + + ```shell + $ ./openssl speed -elapsed -evp sm4-cbc + You have chosen to measure elapsed time instead of user CPU time. + .... + Doing sm4-cbc for 3s on 10240 size blocks: 2196 sm4-cbc's in 3.00s .... + type 51200 bytes 102400 bytes1048576 bytes2097152 bytes4194304 bytes8388608 bytes + sm4-cbc 82312.53k 85196.80k 85284.18k 85000.85k 85284.18k 85261.26k + ``` + +- Use the KAE to test the SM4 CBC mode performance. + + ```shell + $ ./openssl speed -elapsed -engine kae -evp sm4-cbc + engine "kae" set. + You have chosen to measure elapsed time instead of user CPU time. + ... + Doing sm4-cbc for 3s on 1048576 size blocks: 11409 sm4-cbc's in 3.00s + ... + type 51200 bytes 102400 bytes1048576 bytes2097152 bytes4194304 bytes8388608 bytes + sm4-cbc 383317.33k 389427.20k 395313.15k 392954.73k 394264.58k 394264.58k + ``` + +>[!NOTE] **NOTE:** +>After the KAE is used, the SM4 CBC mode performance is improved from 82312.53 kbit/s to 383317.33 kbit/s when the input data block size is 8 MB. + +- Use the OpenSSL software algorithm to test the SM3 mode performance. + + ```shell + $ ./openssl speed -elapsed -evp sm3 + You have chosen to measure elapsed time instead of user CPU time. + Doing sm3 for 3s on 102400 size blocks: 1536 sm3's in 3.00s + .... + type 51200 bytes 102400 bytes1048576 bytes2097152 bytes4194304 bytes8388608 bytes + sm3 50568.53k 52428.80k 52428.80k 52428.80k 52428.80k 52428.80k + ``` + +- Use the KAE to test the SM3 mode performance. + + ```shell + $ ./openssl speed -elapsed -engine kae -evp sm3 + engine "kae" set. + You have chosen to measure elapsed time instead of user CPU time. + Doing sm3 for 3s on 102400 size blocks: 19540 sm3's in 3.00s + .... + type 51200 bytes 102400 bytes 1048576 bytes 2097152 bytes 4194304 bytes 8388608 bytes + sm3 648243.20k 666965.33k 677030.57k 678778.20k 676681.05k 668292.44k + ``` + +>[!NOTE] **NOTE:** +>After the KAE is used, the SM3 algorithm performance is improved from 52428.80 kbit/s to 668292.44 kbit/s when the input data block size is 8 MB. + +- Use the OpenSSL software algorithm to test the asynchronous performance of the AES algorithm in CBC mode. + + ```shell + $ ./openssl speed -elapsed -evp aes-128-cbc -async_jobs 4 + You have chosen to measure elapsed time instead of user CPU time. + Doing aes-128-cbc for 3s on 51200 size blocks: 65773 aes-128-cbc's in 3.00s + Doing aes-128-cbc for 3s on 102400 size blocks: 32910 aes-128-cbc's in 3.00s + .... + type 51200 bytes 102400 bytes1048576 bytes2097152 bytes4194304 bytes8388608 bytes + aes-128-cbc 1122525.87k 1123328.00k 1120578.22k 1121277.27k 1119879.17k 1115684.86k + ``` + +- Use the KEA engine to test the asynchronous performance of the AES algorithm in CBC mode. + + ```shell + $ ./openssl speed -elapsed -evp aes-128-cbc -async_jobs 4 -engine kae + engine "kae" set. + You have chosen to measure elapsed time instead of user CPU time. + Doing aes-128-cbc for 3s on 51200 size blocks: 219553 aes-128-cbc's in 3.00s + Doing aes-128-cbc for 3s on 102400 size blocks: 117093 aes-128-cbc's in 3.00s + .... + type 51200 bytes 102400 bytes1048576 bytes2097152 bytes4194304 bytes8388608 bytes + aes-128-cbc 3747037.87k 3996774.40k 1189085.18k 1196774.74k 1196979.11k 1199570.94k + ``` + +>[!NOTE] **NOTE:** +> +>- The AES algorithm supports only asynchronous mode when the data length is 256 KB or less. +>- After the KAE is used, the AES algorithm performance is improved from 1123328.00 kbit/s to 3996774.40 kbit/s when the input data block size is 100 KB. + +### Upgrading the Accelerator Software Packages + +#### Scenario + +You can run the **rpm -Uvh** command to upgrade the accelerator software. + +#### Procedure + +1. Download the latest accelerator engine software packages from the openEuler community. +2. Use SSH to log in to the Linux CLI as user **root**. +3. Save the downloaded software packages to a directory. +4. In the directory, run the **rpm -Uvh** command to upgrade the accelerator driver package and engine library package. The following is an example: + + The command and output are as follows: + + ![](./figures/en-us_image_0231143189.png) + + ![](./figures/en-us_image_0231143191.png) + +5. Run the **rpm -qa** command to check whether the upgrade is successful. Ensure that the queried version is the latest version. + + ![](./figures/en-us_image_0231143193.png) + + ![](./figures/en-us_image_0231143195.png) + +6. Restart the system or run the following commands to manually uninstall the drivers of the earlier version, load the drivers of the latest version, and check whether the new drivers are successfully loaded. + + ```shell + # Uninstall the existing drivers. + $ lsmod | grep uacce + uacce 262144 3 hisi_hpre,hisi_sec2,hisi_qm + $ + $ rmmod hisi_hpre + $ rmmod hisi_sec2 + $ rmmod hisi_qm + $ rmmod uacce + $ lsmod | grep uacce + $ + # Load the new drivers. + $ modprobe uacce + $ modprobe hisi_qm + $ modprobe hisi_sec2 # Loads the hisi_sec2 driver to the kernel based on the configuration file in /etc/modprobe.d/hisi_sec2.conf. + $ modprobe hisi_hpre # Loads the hisi_hpre driver to the kernel based on the configuration file in /etc/modprobe.d/hisi_hpre.conf. + $ lsmod | grep uacce + uacce 36864 3 hisi_sec2,hisi_qm,hisi_hpre + ``` + +### Uninstalling the Accelerator Software Packages + +#### Scenario + +You do not need the accelerator engine software or you want to install a new one. + +#### Procedure + +1. Use SSH to log in to the Linux CLI as user **root**. +2. Restart the system or run commands to manually uninstall the accelerator drivers loaded to the kernel, and check whether the drivers are successfully uninstalled. + + ```shell + # lsmod | grep uacce + uacce 36864 3 hisi_sec2,hisi_qm,hisi_hpre + # rmmod hisi_hpre + # rmmod hisi_sec2 + # rmmod hisi_qm + # rmmod uacce + # lsmod | grep uacce + # + ``` + +3. Run the **rpm -e** command to uninstall the accelerator engine software packages. The following is an example: + + >[!NOTE] **NOTE:** + >Due to the dependency relationships, the **libkae** package must be uninstalled before the **libwd** package. + + ![](./figures/en-us_image_0231143196.png) + + ![](./figures/en-us_image_0231143197.png) + +4. Run the **rpm -qa |grep** command to check whether the uninstallation is successful. + + ![](./figures/en-us_image_0231143198.png) + +## Querying Logs + +[Table 3](#table52821836) lists log information related to the accelerator engine. + +**Table 3** Log information + + + + + + + + + + + + + + + + +

Directory

+

File

+

Description

+

/var/log/

+

kae.log

+

By default, the log level of the OpenSSL engine log is error. To set the log level, perform the following procedure:

+
  1. Run export KAE_CONF_ENV=/var/log/.
  2. Create the kae.cnf file in /var/log/.
  3. In the kae.cnf file, configure the content as follows:

    [LogSection]

    +

    debug_level=error #Value: none, error, info, warning or debug

    +
+
NOTE:

In normal cases, you are advised not to enable the info or debug log level. Otherwise, the accelerator performance will deteriorate.

+
+

/var/log/

+

messages/syslog

+
  • Kernel logs are stored in the /var/log/messages directory.
+
NOTE:

Alternatively, you can run the dmesg > /var/log/dmesg.log command to collect driver and kernel logs.

+
+
+ +## Acceleration Engine Application + +>[!NOTE] **NOTE:** +>If you have not purchased the engine license, you are advised not to use the KAE to invoke the corresponding algorithms. Otherwise, the performance of the OpenSSL encryption algorithm may be affected. + +### Example Code for the KAE + +```c +#include + +#include + +/* OpenSSL headers */ + +#include + +#include + +#include + +#include + +int main(int argc, char **argv) + +{ + + /* Initializing OpenSSL */ + + SSL_load_error_strings(); + + ERR_load_BIO_strings(); + + OpenSSL_add_all_algorithms(); + + /*You can use ENGINE_by_id Function to get the handle of the Huawei Accelerator Engine*/ + + ENGINE *e = ENGINE_by_id("kae"); + + /* Enable the accelerator asynchronization function. This parameter is optional. The value 0 indicates disabled, and the value 1 indicates enabled. The asynchronous function is enabled by default. */ + + ENGINE_ctrl_cmd_string(e, "KAE_CMD_ENABLE_ASYNC", "1", 0) + + ENGINE_init(e); + + RSA*rsa=RSA_new_method(e);#Specify the engine for RSA encryption and decryption. + + /*The user code*/ + + ...... + +; + + ENGINE_free(e); + +; + +} +``` + +### Usage of the KAE in the OpenSSL Configuration File openssl.cnf + +Create the **openssl.cnf** file and add the following configuration information to the file: + +```text +openssl_conf=openssl_def +[openssl_def] +engines=engine_section +[engine_section] +kae=kae_section +[kae_section] +engine_id=kae +dynamic_path=/usr/local/lib/engines-1.1/kae.so +KAE_CMD_ENABLE_ASYNC=1 #The value 0 indicates that the asynchronous function is disabled. The value 1 indicates that the asynchronous function is enabled. The asynchronous function is enabled by default. +default_algorithms=ALL +init=1 +``` + +Export the environment variable **OPENSSL\_CONF**. + +```shell +export OPENSSL_CONF=/home/app/openssl.cnf #Path for storing the openssl.cnf file +``` + +The following is an example of the OpenSSL configuration file: + +```c +#include + +#include + +/* OpenSSL headers */ + +#include + +#include + +#include + +#include + +int main(int argc, char **argv) + +{ + + /* Initializing OpenSSL */ + + SSL_load_error_strings(); + + ERR_load_BIO_strings(); + +#Load openssl configure + +OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, NULL); OpenSSL_add_all_algorithms(); + + /*You can use ENGINE_by_id Function to get the handle of the Huawei Accelerator Engine*/ + + ENGINE *e = ENGINE_by_id("kae"); + + /*The user code*/ + + ...... + +; + + ENGINE_free(e); + +; +} +``` + +## Troubleshooting + +### Failed to Initialize the Accelerator Engine + +#### Symptom + +The accelerator engine is not completely loaded. + +#### Solution + +1. Check whether the accelerator drivers are loaded successfully. Specifically, run the **lsmod** command to check whether uacce.ko, qm.ko, sgl.ko, hisi\_sec2.ko, hisi\_hpre.ko, hisi\_zip.ko, and hisi\_rde.ko exist. + + ```shell + $ lsmod | grep uacce + uacce 262144 2 hisi_hpre,hisi_qm,hisi_sec2,hisi_zip,hisi_rde + ``` + +2. Check whether the accelerator engine library exists in **/usr/lib64** \(directory for RPM installation\) or **/usr/local/lib** \(directory for source code installation\) and the OpenSSL installation directory, and check whether the correct soft link is established. + + ```shell + $ ll /usr/local/lib/engines-1.1/ |grep kae + # Check whether the KAE has been correctly installed and whether a soft link has been established. If yes, the displayed information is as follows: + lrwxrwxrwx. 1 root root 22 Nov 12 02:33 kae.so -> kae.so.1.0.1 + lrwxrwxrwx. 1 root root 22 Nov 12 02:33 kae.so.0 -> kae.so.1.0.1 + -rwxr-xr-x. 1 root root 112632 May 25 2019 kae.so.1.0.1 + $ + $ ll /usr/lib64/ | grep libwd + # Check whether libwd has been correctly installed and whether a soft link has been established. If yes, the displayed information is as follows: + lrwxrwxrwx. 1 root root 14 Nov 12 02:33 libwd.so -> libwd.so.1.0.1 + lrwxrwxrwx. 1 root root 14 Nov 12 02:33 libwd.so.0 -> libwd.so.1.0.1 + -rwxr-xr-x. 1 root root 137120 May 25 2019 libwd.so.1.0.1 + $ + ``` + +3. Check whether the path of the OpenSSL engine library can be exported by running the **export** command. + + ```shell + $ echo $OPENSSL_ENGINES + $ export OPENSSL_ENGINES=/usr/local/lib/engines-1.1 + $ echo $OPENSSL_ENGINES + /usr/local/lib/engines-1.1 + ``` + +### Failed to Identify Accelerator Devices After the Acceleration Engine Is Installed + +#### Symptom + +After the acceleration engine is installed, the accelerator devices cannot be identified. + +#### Solution + +1. Check whether the device exists in the virtual file system. Normally, the following accelerator devices are displayed: + + ```shell + $ ls -al /sys/class/uacce/ + total 0 + lrwxrwxrwx. 1 root root 0 Nov 14 03:45 hisi_hpre-2 -> ../../devices/pci0000:78/0000:78:00.0/0000:79:00.0/uacce/hisi_hpre-2 + lrwxrwxrwx. 1 root root 0 Nov 14 03:45 hisi_hpre-3 -> ../../devices/pci0000:b8/0000:b8:00.0/0000:b9:00.0/uacce/hisi_hpre-3 + lrwxrwxrwx. 1 root root 0 Nov 17 22:09 hisi_rde-4 -> ../../devices/pci0000:78/0000:78:01.0/uacce/hisi_rde-4 + lrwxrwxrwx. 1 root root 0 Nov 17 22:09 hisi_rde-5 -> ../../devices/pci0000:b8/0000:b8:01.0/uacce/hisi_rde-5 + lrwxrwxrwx. 1 root root 0 Nov 14 08:39 hisi_sec-0 -> ../../devices/pci0000:74/0000:74:01.0/0000:76:00.0/uacce/hisi_sec-0 + lrwxrwxrwx. 1 root root 0 Nov 14 08:39 hisi_sec-1 -> ../../devices/pci0000:b4/0000:b4:01.0/0000:b6:00.0/uacce/hisi_sec-1 + lrwxrwxrwx. 1 root root 0 Nov 17 22:09 hisi_zip-6 -> ../../devices/pci0000:74/0000:74:00.0/0000:75:00.0/uacce/hisi_zip-6 + lrwxrwxrwx. 1 root root 0 Nov 17 22:09 hisi_zip-7 -> ../../devices/pci0000:b4/0000:b4:00.0/0000:b5:00.0/uacce/hisi_zip-7 + ``` + +2. If you want to use the HPRE device but the device is not found in [1](#li1760055514614), check whether the accelerator software is correctly installed by referring to [Failed to Upgrade the Accelerator Drivers](#failed-to-upgrade-the-accelerator-drivers). +3. If the accelerator software is correctly installed, run the **lspci** command to check whether the physical device exists. + + ```shell + $ lspci | grep HPRE + 79:00.0 Network and computing encryption device: Huawei Technologies Co., Ltd. HiSilicon HPRE Engine (rev 21) + b9:00.0 Network and computing encryption device: Huawei Technologies Co., Ltd. HiSilicon HPRE Engine (rev 21) + $ lspci | grep SEC + 76:00.0 Network and computing encryption device: Huawei Technologies Co., Ltd. HiSilicon SEC Engine (rev 21) + b6:00.0 Network and computing encryption device: Huawei Technologies Co., Ltd. HiSilicon SEC Engine (rev 21) + $ lspci | grep RDE + 78:01.0 RAID bus controller: Huawei Technologies Co., Ltd. HiSilicon RDE Engine (rev 21) + b8:01.0 RAID bus controller: Huawei Technologies Co., Ltd. HiSilicon RDE Engine (rev 21) + $ lspci | grep ZIP + 75:00.0 Processing accelerators: Huawei Technologies Co., Ltd. HiSilicon ZIP Engine (rev 21) + b5:00.0 Processing accelerators: Huawei Technologies Co., Ltd. HiSilicon ZIP Engine (rev 21) + $ + ``` + +4. If no physical device is found in [3](#li1560012551369), perform the following operations: + - Check whether the accelerator license has been imported. If no, import the accelerator license. For details, see "License Management" in the [TaiShan Rack Server iBMC \(V500 or Later\) User Guide](https://support.huawei.com/enterprise/en/doc/EDOC1100121685/426cffd9?idPath=7919749|9856522|21782478|8060757). After the accelerator license is imported, power off and restart the iBMC to enable the license. + - Check whether the iBMC and BIOS versions support the accelerator feature. + +### Failed to Upgrade the Accelerator Drivers + +#### Symptom + +After the accelerator drivers are upgraded, the driver version is not changed after the system is restarted. + +#### Possible Cause + +Before the accelerator drivers are upgraded, the system upgrades other driver packages. These driver packages may update the boot file system initramfs, and update the accelerator drivers to initramfs before upgrade. For example, if the NIC driver is updated or initramfs is manually updated, the system loads the accelerator drivers from initramfs first during restart. + +#### Solution + +After the accelerator drivers are upgraded, run the **dracut \-\-force** command to update initramfs again. diff --git a/docs/en/server/performance/overall/system_resource/_toc.yaml b/docs/en/server/performance/overall/system_resource/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9dd23f13c1072cf9e88e15f455e89f3e09a9194b --- /dev/null +++ b/docs/en/server/performance/overall/system_resource/_toc.yaml @@ -0,0 +1,6 @@ +label: System Resources and Performance +isManual: true +description: CPU, memory, I/O, and commonly used performance analysis tools +sections: + - label: System Resources and Performance + href: ./system_resources_and_performance.md diff --git a/docs/en/server/performance/overall/system_resource/images/c50cb9df64f4659787c810167c89feb4_1884x257.png b/docs/en/server/performance/overall/system_resource/images/c50cb9df64f4659787c810167c89feb4_1884x257.png new file mode 100644 index 0000000000000000000000000000000000000000..01081f25627731c56764c196e3fae32d55bc7023 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/c50cb9df64f4659787c810167c89feb4_1884x257.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001321685172.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001321685172.png new file mode 100644 index 0000000000000000000000000000000000000000..acbe1f90720a7cc56dd20d03f00918264680a7db Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001321685172.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001322112990.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001322112990.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4b32bf2b36595abe10f2550cda5714bc355553 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001322112990.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001322219840.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001322219840.png new file mode 100644 index 0000000000000000000000000000000000000000..48b28664df46ddf9aa38c7570bb9e9edb8080ac9 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001322219840.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001322372918.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001322372918.png new file mode 100644 index 0000000000000000000000000000000000000000..5424367c9bc564e713220ba87f963096881833b8 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001322372918.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001322379488.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001322379488.png new file mode 100644 index 0000000000000000000000000000000000000000..8b18cdca066be43b74443498edc5500ea9e1e608 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001322379488.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001335457246.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001335457246.png new file mode 100644 index 0000000000000000000000000000000000000000..325d6a8ce097db0b92b1a883bc4b3d4ad0bc6a49 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001335457246.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337000118.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337000118.png new file mode 100644 index 0000000000000000000000000000000000000000..37131647778506f24be4ff401392a9cc209a36eb Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337000118.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337039920.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337039920.png new file mode 100644 index 0000000000000000000000000000000000000000..40c07e9b6ec27cdbe47d39788736b892f1174cc8 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337039920.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337053248.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337053248.png new file mode 100644 index 0000000000000000000000000000000000000000..8859f37749a4f8a4394e24ddfb54fc473e8c10c2 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337053248.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337172594.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337172594.png new file mode 100644 index 0000000000000000000000000000000000000000..4e806f83c57880543a777807778f14eeb0105aba Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337172594.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337260780.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337260780.png new file mode 100644 index 0000000000000000000000000000000000000000..09d521d933f5fa0caacc592ea92acee959786051 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337260780.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337420372.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337420372.png new file mode 100644 index 0000000000000000000000000000000000000000..2300bcd7426748236fd48b85688bd3d1fa3315df Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337420372.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337533690.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337533690.png new file mode 100644 index 0000000000000000000000000000000000000000..1f02d9b155754a113347a54a7d35ba9b060175a8 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337533690.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337536842.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337536842.png new file mode 100644 index 0000000000000000000000000000000000000000..5a9ee2c989638c9a6aad3fcfb35bb9b9f2d4683c Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337536842.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337580216.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337580216.png new file mode 100644 index 0000000000000000000000000000000000000000..5516b8d261b769287c74cf860a6708fcde6bbb8a Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337580216.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337696078.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337696078.png new file mode 100644 index 0000000000000000000000000000000000000000..3864852e345eaf01794042feaa85b012b8af71de Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337696078.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337740252.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337740252.png new file mode 100644 index 0000000000000000000000000000000000000000..fd83fb600a54ab8bc39ee2ae54210be8b6c48973 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337740252.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337740540.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337740540.png new file mode 100644 index 0000000000000000000000000000000000000000..b8e25128a47dccaed733fc192f52f2ca7828e516 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001337740540.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001372249333.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001372249333.png new file mode 100644 index 0000000000000000000000000000000000000000..48cd37225954e212cb3e159acc137866d8edc362 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001372249333.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001372748125.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001372748125.png new file mode 100644 index 0000000000000000000000000000000000000000..5f6326b9415cf766dd8379dbadd5aa1a0dc6861f Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001372748125.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001372821865.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001372821865.png new file mode 100644 index 0000000000000000000000000000000000000000..21e8dad1cd90755440cf858523b12c036a91e1ad Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001372821865.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001372824637.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001372824637.png new file mode 100644 index 0000000000000000000000000000000000000000..aefb5d83c079e6718ef88fd934b4b496cdc29565 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001372824637.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001373373585.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001373373585.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e5e47c9beca2c7c7630d78916f80eda652b52a Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001373373585.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001373379529.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001373379529.png new file mode 100644 index 0000000000000000000000000000000000000000..daa40b49e679668905632f25ff42bf8599ba0ead Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001373379529.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001384808269.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001384808269.png new file mode 100644 index 0000000000000000000000000000000000000000..be18ecef3a149d5742f18535552f66f26ab34832 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001384808269.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001385585749.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001385585749.png new file mode 100644 index 0000000000000000000000000000000000000000..c13604ab7095c2a7717bde1384f0aea3d53f69e3 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001385585749.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001385611905.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001385611905.png new file mode 100644 index 0000000000000000000000000000000000000000..8c233e40a21e678ddf4115c2e2e80c96e25a60ce Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001385611905.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001386699925.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001386699925.png new file mode 100644 index 0000000000000000000000000000000000000000..cf5b13b35e65ed0143a01a5bcad1e11eaddaded7 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001386699925.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387293085.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387293085.png new file mode 100644 index 0000000000000000000000000000000000000000..7f56b020949c53d018eba016952c2409f0d7dca9 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387293085.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387413509.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387413509.png new file mode 100644 index 0000000000000000000000000000000000000000..2245427058fc31f3e5d7f40062c0551936a67199 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387413509.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387413793.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387413793.png new file mode 100644 index 0000000000000000000000000000000000000000..aa649bf7215662819766d897513fb711d9d1e7f8 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387413793.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387415629.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387415629.png new file mode 100644 index 0000000000000000000000000000000000000000..01189358354090591de6580f8ef88ef78ddba3a1 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387415629.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387692269.jpg b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387692269.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b79e3ddf78520277046b933c4662c6b72f45ab85 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387692269.jpg differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387692893.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387692893.png new file mode 100644 index 0000000000000000000000000000000000000000..49ea515d834b58d4ded14c55a6a2b07034d76137 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387692893.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387755969.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387755969.png new file mode 100644 index 0000000000000000000000000000000000000000..b2daa95d6b757e7bd443d8fd961922f248dd6853 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387755969.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387780357.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387780357.png new file mode 100644 index 0000000000000000000000000000000000000000..1aab3b8be2cd0c906253d70036a9fee3050a1055 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387780357.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387855149.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387855149.png new file mode 100644 index 0000000000000000000000000000000000000000..731e957c367cb05e4229f53cf97dcee2cde69dff Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387855149.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387857005.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387857005.png new file mode 100644 index 0000000000000000000000000000000000000000..872f5c9eb05169831df4ba49d017629e8a943c64 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001387857005.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001388020197.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001388020197.png new file mode 100644 index 0000000000000000000000000000000000000000..1816e1e068ee0294677ebb357ffd158a14bb86cf Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001388020197.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001388972645.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001388972645.png new file mode 100644 index 0000000000000000000000000000000000000000..e32606925f4bb4380b262d9f946d4cd106202b87 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001388972645.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001389098425.png b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001389098425.png new file mode 100644 index 0000000000000000000000000000000000000000..c63903009ab9ba454f169250632dbec1b3c94467 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_image_0000001389098425.png differ diff --git a/docs/en/server/performance/overall/system_resource/images/en-us_other_0000001337581224.jpeg b/docs/en/server/performance/overall/system_resource/images/en-us_other_0000001337581224.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2c019b828bdf9c699f203f09ba3542968ff21262 Binary files /dev/null and b/docs/en/server/performance/overall/system_resource/images/en-us_other_0000001337581224.jpeg differ diff --git a/docs/en/server/performance/overall/system_resource/system_resources_and_performance.md b/docs/en/server/performance/overall/system_resource/system_resources_and_performance.md new file mode 100644 index 0000000000000000000000000000000000000000..ba5a0d08f4bc14a3140f71fa8c2b6b6b99356e6a --- /dev/null +++ b/docs/en/server/performance/overall/system_resource/system_resources_and_performance.md @@ -0,0 +1,320 @@ +# System Resources and Performance + +## CPU + +### Basic Concepts + +A central processing unit (CPU) is one of main devices of a computer, and a function of the CPU is to interpret computer instructions and process data in computer software. + +1. Physical core: an actual CPU core that can be seen. It has independent circuit components and L1 and L2 caches and can independently execute instructions. A CPU can have multiple physical cores. +2. Logical core: a core that exists at the logical layer in the same physical core. Generally, a physical core corresponds to a thread. However, if hyper-threading is enabled and the number of hyper-threads is *n*, a physical core can be divided into *n* logical cores. + +You can run the **lscpu** command to check the number of CPUs on the server, the number of physical cores in each CPU, and the number of logical cores in each CPU. + +### Demarcation and Locating + +### Common CPU Performance Analysis Tools + +1. **uptime**: prints the average system load. The last three numbers indicate the average load within the last one, five, and fifteen minutes. + + If the average load is greater than the number of CPUs, the CPUs are insufficient to serve threads and some threads are waiting. If the average load is less than the number of CPUs, there are remaining CPUs. + + ![en-us_image_0000001384808269](./images/en-us_image_0000001384808269.png) + +2. **vmstat**: dynamically monitors the usage of system resources and checks which phase occupies the most system resources. + + You can run the **vmstat -h** command to view command parameters. + Example: + + ```shell + # Monitor the status and update the status every second. + vmstat 1 + ``` + + ![](./images/en-us_image_0000001385585749.png) + The fields in the command output are described as follows: + + |Field|Description| + |--|--| + |procs|Process information.| + |memory|Memory information.| + |swap|Swap partition information.| + |io|Drive read/write information.| + |system|System information.| + |cpu|CPU information.
**-us**: percentage of the CPU computing time consumed by non-kernel processes.
**-sy**: percentage of the CPU computing time consumed by kernel processes.
**-id**: idle.
**-wa**: percentage of CPU resources consumed by waiting for I/Os.
**-st**: percentage of CPUs stolen by VMs.| + +3. **sar**: analyzes system performance, observes current activities and configurations, and archives and reports historical statistics. + Example: + + ```shell + # Check the overall CPU load of the system. Collect the statistics every 3 seconds for five times. + sar -u 3 5 + ``` + + ```text + [root@openEuler ~]# sar -u 3 5 + Linux 5.10.0-153.12.0.92.oe2203SP3.aarch64 (openEuler) 05/20/2023 _aarch64_ (4 CPU) + + 04:38:27 PM CPU %user %nice %system %iowait %steal %idle + 04:38:30 PM all 0.00 0.00 0.00 0.00 0.00 100.00 + 04:38:33 PM all 0.00 0.00 0.33 0.00 0.00 99.67 + 04:38:36 PM all 0.00 0.00 0.00 0.00 0.00 100.00 + 04:38:39 PM all 0.08 0.00 0.00 0.00 0.00 99.92 + 04:38:42 PM all 0.00 0.00 0.08 0.00 0.00 99.92 + Average: all 0.02 0.00 0.08 0.00 0.00 99.90 + ``` + + The fields in the command output are described as follows: + + |Field|Description| + |--|--| + |%user|Percentage of the CPU time consumed in user mode.| + |%nice|Percentage of the CPU time consumed by a process whose scheduling priority is changed through **nice** in user mode.| + |%system|Percentage of the CPU time consumed in system mode.| + |%iowait|Percentage of the time consumed by the CPU to wait for drive I/Os in idle state.| + |%steal|Percentage of the time used for waiting for other virtual CPU computing by using virtualization technologies of the OS.| + |%idle|Percentage of CPU idle time.| + +4. **ps**: displays running processes. + + ```shell + # View all processes in the system, and view the PIDs and priorities of the their parent processes. + ps -le + ``` + + ![en-us_image_0000001337039920](./images/en-us_image_0000001337039920.png) + + ```shell + # View the processes generated by the current shell. + ps -l + ``` + + ![en-us_image_0000001385611905](./images/en-us_image_0000001385611905.png) + +5. **top**: dynamically and continuously monitors the running status of processes and displays the processes that consume the most CPU resources. + + ```shell + top + ``` + + ![en-us_image_0000001335457246](./images/en-us_image_0000001335457246.png) + +## Memory + +### Basic Concepts + +The memory is an important component of a computer, and is used to temporarily store operation data in the CPU and data exchanged with an external memory such as hardware. In particular, a non-uniform memory access architecture (NUMA) is a memory architecture designed for a multiprocessor computer. The memory access time depends on the location of the memory relative to the processor. In NUMA mode, a processor accesses the local memory faster than the non-local memory (the memory is located in another processor or shared between processors). + +### Demarcation and Locating + +### Common Memory Analysis Tools and Methods + +1. **free**: displays the system memory status. + Example: + + ```shell + # Display the system memory status in MB. + free -m + ``` + + ![en-us_image_0000001386699925](./images/en-us_image_0000001386699925.png) + + The fields in the command output are described as follows: + + |Field|Description| + |--|--| + |total|Total memory size.| + |used|Used memory.| + |free|Free memory.| + |shared|Total memory shared by multiple processes.| + |buff/cache|Total number of buffers and caches.| + |available|Estimated available memory to start a new application without swapping.| + +2. **vmstat**: dynamically monitors the system memory and views the system memory usage. + + Example: + + ```shell + # Monitor the system memory and display active and inactive memory. + vmstat -a + ``` + + ![en-us_image_0000001388972645](./images/en-us_image_0000001388972645.png) + + In the command output, the field related to the memory is described as follows: + + |Field|Description| + |--|--| + |memory|Memory information.
**-swpd**: usage of the virtual memory, in KB.
**-free**: free memory capacity, in KB.
**-inact**: inactive memory capacity, in KB.
**-active**: active memory capacity, in KB.| + +3. **sar**: monitors the memory usage of the system. + + Example: + + ```shell + # Monitor the memory usage in the sampling period in the system. Collect the statistics every two seconds for three times. + sar -r 2 3 + ``` + + ```text + [root@openEuler ~]# sar -r 2 3 + Linux 5.10.0-153.12.0.92.oe2203SP3.aarch64 (openEuler) 05/20/2023 _aarch64_ (4 CPU) + + 04:56:08 PM kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commint kbactive kbinact kbdirty + 04:56:10 PM 324264 2250588 188320 6.98 143160 1772412 787944 11.52 474668 1588704 0 + 04:56:12 PM 324264 2250588 188320 6.98 143160 1772412 787944 11.52 474668 1588704 0 + 04:56:14 PM 324296 2250620 188388 6.98 143160 1772412 787944 11.52 474668 1588772 0 + Average: 324275 2250599 188309 6.98 143160 1772412 787944 11.52 474668 1588727 0 + ``` + + The fields in the command output are described as follows: + + |Field|Description| + |--|--| + |kbmemfree|Unused memory space.| + |kbmemused|Used memory space.| + |%memused|Percentage of the used space.| + |kbbuffers|Amount of data stored in the buffer.| + |kbcached|Data access volume in all domains of the system.| + +4. **numactl**: displays the NUMA node configuration and status. + + Example: + + ```shell + # Check the current NUMA configuration. + numactl -H + ``` + + ![en-us_image_0000001337000118](./images/en-us_image_0000001337000118.png) + + The server contains one NUMA node. The NUMA node that contains four cores and 6 GB memory. + The command also displays the distance between NUMA nodes. The further the distance, the higher the latency of cross-node memory accesses, which should be avoided as much as possible. + + **numastat**: displays NUMA node status. + + ```shell + # Check the NUMA node status. + numastat + ``` + + ![en-us_image_0000001337172594](./images/en-us_image_0000001337172594.png) + + The fields in the **numastat** command output are described as follows: + + |Field|Description| + |--|--| + |numa_hit|Number of times that the CPU core accesses the local memory on a node.| + |numa_miss|Number of times that the core of a node accesses the memory of other nodes.| + |numa_foreign|Number of pages that were allocated to the local node but moved to other nodes. Each numa_foreign corresponds to a numa_miss event.| + |interleave_hit|Number of pages of the interleave policy that are allocated to this node.| + |local_node|Size of memory that was allocated to this node by processes on this node.| + |other_node|Size of memory that was allocated to other nodes by processes on this node.| + +## I/O + +### Basic Concepts + +I/O indicates input/output. Input refers to the operation of receiving signals or data by the system, and output refers to the operation of sending signals or data from the system. For a combination of CPU and main memory, any information incoming to or outgoing from the CPU/memory combination is considered as I/Os. + +### Demarcation and Locating + +### Common I/O Performance Analysis Tools + +1. **iostat**: reports statistics about all online drives. + + Example: + + ```shell + # Display the drive information in KB. Collect the statistics every 100 seconds until you press Ctrl+C. + iostat -d -k -x 100 + # Display the drive information in KB. Collect the statistics every second and for 100 seconds. + iostat -d -k -x 1 100 + ``` + + ```text + [root@openEuler ~]# iostat -d -k -x 1 100 + Linux 5.10.0-153.12.0.92.oe2203SP3.aarch64 (openEuler) 05/20/2023 _aarch64_ (4 CPU) + + Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wKB/s wrqm/s %wrqm w_await wareq-sz d/s dKB/s drqm/s %drqm d_await dareq-sz f/s f_await aqu-sz %util + dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + ``` + + The fields in the command output are described as follows: + + |Field|Description| + |--|--| + |Device|Name of the monitoring device.| + |r/s|Number of read requests completed by the device per second (after combination).| + |rKB/s|Number of KBs read from the drive per second.| + |rrqm/s|Number of read operations merged into the request queue per second.| + |%rrqm|Percentage of read requests merged before they are sent to the device.| + |r_await|Average time consumed by each read request.| + |rareq-sz|Average size of read requests sent to the device, in KB.| + |w/s|Number of write requests completed by the device per second (after combination).| + |wKB/s|Number of KBs written to the drive per second.| + |wrqm/s|Number of write operations merged into the request queue per second.| + |%wrqm|Percentage of write requests merged before they are sent to the device.| + |w_await|Average time consumed by each write request.| + |wareq-sz|Average size of write requests sent to the device, in KB.| + |d/s|Number of discard requests processed by the device per second.| + |dKB/s|Number of sectors (KB) discarded by the device per second.| + |drqm/s|Number of discard requests merged into the device queue per second.| + |%drqm|Percentage of discard requests merged before they are sent to the device.| + |d_await|Average time for sending discard requests to the device to be served.| + |dareq-sz|Average size of discard requests sent to the device, in KB.| + |f/s|Number of refresh requests completed by the device per second (after combination).| + |f_await|Average time for sending refresh requests to the device to be served.| + |aqu-sz|Average queue length of requests sent to the device.| + |%util|Percentage of the I/O operation time, that is, the usage.| + +2. **sar**: displays the read and write performance of the system drive. + + Example: + + ```shell + # Display the usage status of all hard drives in the system in the sampling period. Collect the statistics every 3 seconds for five times. + sar -d 3 5 + ``` + + ```text + [root@openEuler ~]# sar -d 3 5 + Linux 5.10.0-153.12.0.92.oe2203SP3.aarch64 (openEuler) 05/20/2023 _aarch64_ (4 CPU) + + 04:38:27 PM DVE tps rkB/s wkB/s dkB/s areq-sz aqu-sz await %util + 04:38:30 PM vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + 04:38:33 PM dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + 04:38:36 PM dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + ``` + + The fields in the command output are described as follows: + + |Field|Description| + |--|--| + |tps|Total number of transfers sent to the physical device per second.| + |rKB/s|Number of KBs read from the device per second.| + |wKB/s|Number of KBs written to the device per second.| + |dKB/s|Number of KBs discarded by the device per second.| + |areq-sz|Average size (KB) of I/O requests sent to the device.| + |aqu-sz|Average queue length of requests sent to the device.| + |await|Average time for sending I/O requests to the device to be served.| + |%util|Percentage of the time used to send I/O requests to the device (bandwidth usage of the device).| + +3. vmstat + + ```shell + # Run the vmstat command to monitor and report drive statistics. + vmstat -d + ``` + + ![en-us_image_0000001389098425](./images/en-us_image_0000001389098425.png) + + The fields in the command output are described as follows: + + |Field|Description| + |--|--| + |reads|**-total**: total number of reads that have been successfully completed.
**-merged**: number of merged reads (resulting in one I/O).
**-sectors**: sectors from which data is successfully read.
**-ms**: number of milliseconds spent on reading data.| + |writes|**-total**: total number of writes that have been successfully completed.
**-merged**: merged writes (resulting in one I/O).
**-sectors**: sectors to which data is successfully written.
**-ms**: number of milliseconds spent on writing data.| + |IO|Drive read/write information.
**-bi**: total amount of data read from the block device, in blocks.
**-bo**: total amount of data written to the block device, in blocks.| diff --git a/docs/en/server/performance/system_optimization/atune/_toc.yaml b/docs/en/server/performance/system_optimization/atune/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cb874e65fe917d3f547e16f8e28aa4a56ab79110 --- /dev/null +++ b/docs/en/server/performance/system_optimization/atune/_toc.yaml @@ -0,0 +1,12 @@ +label: A-Tune User Guide +isManual: true +description: Optimized openEuler performance through AI-powered, automated tuning +sections: + - label: Getting to Know A-Tune + href: ./getting_to_know_a_tune.md + - label: Installation and Deployment + href: ./installation_and_deployment.md + - label: Usage Instructions + href: ./usage_instructions.md + - label: Appendix + href: ./appendix.md diff --git a/docs/en/server/performance/system_optimization/atune/appendix.md b/docs/en/server/performance/system_optimization/atune/appendix.md new file mode 100644 index 0000000000000000000000000000000000000000..dc4809e0f5e8e235c1a29de536832261695dc427 --- /dev/null +++ b/docs/en/server/performance/system_optimization/atune/appendix.md @@ -0,0 +1,19 @@ +# Appendixes + +## Acronyms and Abbreviations + +**Table 1** Terminology + + + + + + + + + +

Term

+

Description

+

profile

+

Set of optimization items and optimal parameter configuration.

+
diff --git a/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0213178479.png b/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0213178479.png new file mode 100644 index 0000000000000000000000000000000000000000..62ef0decdf6f1e591059904001d712a54f727e68 Binary files /dev/null and b/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0213178479.png differ diff --git a/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0213178480.png b/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0213178480.png new file mode 100644 index 0000000000000000000000000000000000000000..ad5ed3f7beeb01e6a48707c4806606b41d687e22 Binary files /dev/null and b/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0213178480.png differ diff --git a/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0214540398.png b/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0214540398.png new file mode 100644 index 0000000000000000000000000000000000000000..cea2292307b57854aa629ec102a5bc1b16d244a0 Binary files /dev/null and b/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0214540398.png differ diff --git a/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0227497000.png b/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0227497000.png new file mode 100644 index 0000000000000000000000000000000000000000..3df66e5f25177cba7fe65cfb859fab860bfb7b46 Binary files /dev/null and b/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0227497000.png differ diff --git a/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0227497343.png b/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0227497343.png new file mode 100644 index 0000000000000000000000000000000000000000..a8654b170295b4b0be3c37187e4b227ca635fbc0 Binary files /dev/null and b/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0227497343.png differ diff --git a/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0231122163.png b/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0231122163.png new file mode 100644 index 0000000000000000000000000000000000000000..c61c39c5f5119d84c6799b1e17285a7fe313639f Binary files /dev/null and b/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0231122163.png differ diff --git a/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0245342444.png b/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0245342444.png new file mode 100644 index 0000000000000000000000000000000000000000..10f0fceb42c00c80ef49decdc0c480eb04c2ca6d Binary files /dev/null and b/docs/en/server/performance/system_optimization/atune/figures/en-us_image_0245342444.png differ diff --git a/docs/en/server/performance/system_optimization/atune/figures/picture1.png b/docs/en/server/performance/system_optimization/atune/figures/picture1.png new file mode 100644 index 0000000000000000000000000000000000000000..624d148b98bc9890befbecc53f29d6a4890d06af Binary files /dev/null and b/docs/en/server/performance/system_optimization/atune/figures/picture1.png differ diff --git a/docs/en/server/performance/system_optimization/atune/figures/picture4.png b/docs/en/server/performance/system_optimization/atune/figures/picture4.png new file mode 100644 index 0000000000000000000000000000000000000000..c576fd0369008e847e6943d6f99351caccf9f3e5 Binary files /dev/null and b/docs/en/server/performance/system_optimization/atune/figures/picture4.png differ diff --git a/docs/en/server/performance/system_optimization/atune/getting_to_know_a_tune.md b/docs/en/server/performance/system_optimization/atune/getting_to_know_a_tune.md new file mode 100644 index 0000000000000000000000000000000000000000..2169dc361cdd6da057acbb3bd7ab3c11bf29ea78 --- /dev/null +++ b/docs/en/server/performance/system_optimization/atune/getting_to_know_a_tune.md @@ -0,0 +1,185 @@ +# Getting to Know A-Tune + +## Introduction + +An operating system \(OS\) is basic software that connects applications and hardware. It is critical for users to adjust OS and application configurations and make full use of software and hardware capabilities to achieve optimal service performance. However, numerous workload types and varied applications run on the OS, and the requirements on resources are different. Currently, the application environment composed of hardware and software involves more than 7000 configuration objects. As the service complexity and optimization objects increase, the time cost for optimization increases exponentially. As a result, optimization efficiency decreases sharply. Optimization becomes complex and brings great challenges to users. + +Second, as infrastructure software, the OS provides a large number of software and hardware management capabilities. The capability required varies in different scenarios. Therefore, capabilities need to be enabled or disabled depending on scenarios, and a combination of capabilities will maximize the optimal performance of applications. + +In addition, the actual business embraces hundreds and thousands of scenarios, and each scenario involves a wide variety of hardware configurations for computing, network, and storage. The lab cannot list all applications, business scenarios, and hardware combinations. + +To address the preceding challenges, openEuler launches A-Tune. + +A-Tune is an AI-based engine that optimizes system performance. It uses AI technologies to precisely profile business scenarios, discover and infer business characteristics, so as to make intelligent decisions, match with the optimal system parameter configuration combination, and give recommendations, ensuring the optimal business running status. + +![](figures/en-us_image_0227497000.png) + +## Architecture + +The following figure shows the A-Tune core technical architecture, which consists of intelligent decision-making, system profile, and interaction system. + +- Intelligent decision-making layer: consists of the awareness and decision-making subsystems, which implements intelligent awareness of applications and system optimization decision-making, respectively. +- System profile layer: consists of the feature engineering and two-layer classification model. The feature engineering is used to automatically select service features, and the two-layer classification model is used to learn and classify service models. +- Interaction system layer: monitors and configures various system resources and executes optimization policies. + +![](figures/en-us_image_0227497343.png) + +## Supported Features and Service Models + +### Supported Features + +[Table 1](#table1919220557576) describes the main features supported by A-Tune, feature maturity, and usage suggestions. + +**Table 1** Feature maturity + + + + + + + + + + + + + + + + + + + + +

Feature

+

Maturity

+

Usage Suggestion

+

Auto optimization of 15 applications in 11 workload types

+

Tested

+

Pilot

+

User-defined profile and service models

+

Tested

+

Pilot

+

Automatic parameter optimization

+

Tested

+

Pilot

+
+ +### Supported Service Models + +Based on the workload characteristics of applications, A-Tune classifies services into 11 types. For details about the bottleneck of each type and the applications supported by A-Tune, see [Table 2](#table2819164611311). + +**Table 2** Supported workload types and applications + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Service category

+

Type

+

Bottleneck

+

Supported Application

+

default

+

Default type

+

Low resource usage in terms of CPU, memory, network, and I/O

+

N/A

+

webserver

+

Web application

+

Bottlenecks of CPU and network

+

Nginx, Apache Traffic Server

+

database

+

Database

+

Bottlenecks of CPU, memory, and I/O

+

MongoDB, MySQL, PostgreSQL, MariaDB

+

big_data

+

Big data

+

Bottlenecks of CPU and memory

+

HDFS, Spark

+

middleware

+

Middleware framework

+

Bottlenecks of CPU and network

+

Dubbo

+

in-memory_database

+

Memory database

+

Bottlenecks of memory and I/O

+

Redis

+

basic-test-suite

+

Basic test suite

+

Bottlenecks of CPU and memory

+

SPECCPU2006, SPECjbb2015

+

hpc

+

Human genome

+

Bottlenecks of CPU, memory, and I/O

+

Gatk4

+

storage

+

Storage

+

Bottlenecks of network, and I/O

+

Ceph

+

virtualization

+

Virtualization

+

Bottlenecks of CPU, memory, and I/O

+

Consumer-cloud, MariaDB

+

docker

+

Docker

+

Bottlenecks of CPU, memory, and I/O

+

MariaDB

+
diff --git a/docs/en/server/performance/system_optimization/atune/installation_and_deployment.md b/docs/en/server/performance/system_optimization/atune/installation_and_deployment.md new file mode 100644 index 0000000000000000000000000000000000000000..e54373cc1049181e1a35520b0f67b7f28a448919 --- /dev/null +++ b/docs/en/server/performance/system_optimization/atune/installation_and_deployment.md @@ -0,0 +1,332 @@ +# Installation and Deployment + +This chapter describes how to install and deploy A-Tune. + +## Software and Hardware Requirements + +### Hardware Requirement + +- Huawei Kunpeng 920 processor + +### Software Requirement + +- OS: openEuler 22.03 LTS SP4 + +## Environment Preparation + +- For details about installing an openEuler OS, see the _openEuler 22.03 LTS SP4 Installation Guide_. +- Root permissions are required for installing A-Tune. + +## A-Tune Installation + +This section describes the installation modes and methods of A-Tune. + +### Installation Modes + +A-Tune can be installed in single-node and distributed modes. + +- Single-node mode + + The client and server are installed on the same system. + +- Distributed mode + + The client and server are installed on different systems. + +The installation modes are as follows: + +![](./figures/en-us_image_0231122163.png) + +### Installation Procedure + +To install A-Tune, perform the following steps: + +1. Mount an openEuler ISO image. + + ```shell + mount openEuler-22.03-LTS-SP4-aarch64-dvd.iso /mnt + ``` + +2. Configure the local Yum source. + + ```shell + vim /etc/yum.repos.d/local.repo + ``` + + The configured contents are as follows: + + ```shell + [local] + name=local + baseurl=file:///mnt + gpgcheck=1 + enabled=1 + ``` + +3. Import the GPG public key of the RPM digital signature to the system. + + ```shell + rpm --import /mnt/RPM-GPG-KEY-openEuler + ``` + +4. Install an A-Tune server. + + >[!NOTE] **NOTE:** + >In this step, both the server and client software packages are installed. For the single-node deployment, skip **Step 5**. + + ```shell + yum install atune -y + yum install atune-engine -y + ``` + +5. For a distributed mode, install an A-Tune client on associated server. + + ```shell + yum install atune-client -y + ``` + +6. Check whether the installation is successful. + + ```shell + $ rpm -qa | grep atune + atune-client-xxx + atune-db-xxx + atune-xxx + atune-engine-xxx + ``` + + If the preceding information is displayed, the installation is successful. + +## A-Tune Deployment + +This section describes how to deploy A-Tune. + +### Overview + +The configuration items in the A-Tune configuration file **/etc/atuned/atuned.cnf** are described as follows: + +- A-Tune service startup configuration (modify the parameter values as required). + + - **protocol**: Protocol used by the gRPC service. The value can be **unix** or **tcp**. **unix** indicates the local socket communication mode, and **tcp** indicates the socket listening port mode. The default value is **unix**. + - **address**: Listening IP address of the gRPC service. The default value is **unix socket**. If the gRPC service is deployed in distributed mode, change the value to the listening IP address. + - **port**: Listening port of the gRPC server. The value ranges from 0 to 65535. If **protocol** is set to **unix**, you do not need to set this parameter. + - **connect**: IP address list of the nodes where the A-Tune is located when the A-Tune is deployed in a cluster. IP addresses are separated by commas (,). + - **rest_host**: Listening address of the REST service. The default value is localhost. + - **rest_port**: Listening port of the REST service. The value ranges from 0 to 65535. The default value is 8383. + - **engine_host**: IP address for connecting to the A-Tune engine service of the system. + - **engine_port**: Port for connecting to the A-Tune engine service of the system. + - **sample_num**: Number of samples collected when the system executes the analysis process. The default value is 20. + - **interval**: Interval for collecting samples when the system executes the analysis process. The default value is 5s. + - **grpc_tls**: Indicates whether to enable SSL/TLS certificate verification for the gRPC service. By default, this function is disabled. After grpc_tls is enabled, you need to set the following environment variables before running the **atune-adm** command to communicate with the server: + - export ATUNE_TLS=yes + - export ATUNED_CACERT=\ + - export ATUNED_CLIENTCERT=\ + - export ATUNED_CLIENTKEY=\ + - export ATUNED_SERVERCN=server + - **tlsservercafile**: Path of the gPRC server's CA certificate. + - **tlsservercertfile**: Path of the gPRC server certificate. + - **tlsserverkeyfile**: Path of the gPRC server key. + - **rest_tls**: Indicates whether to enable SSL/TLS certificate verification for the REST service. This function is enabled by default. + - **tlsrestcacertfile**: Path of the server's CA certificate of the REST service. + - **tlsrestservercertfile**: Path of the server certificate of the REST service. + - **tlsrestserverkeyfile**: Indicates the key path of the REST service. + - **engine_tls**: Indicates whether to enable SSL/TLS certificate verification for the A-Tune engine service. This function is enabled by default.. + - **tlsenginecacertfile**: Path of the client CA certificate of the A-Tune engine service. + - **tlsengineclientcertfile**: Client certificate path of the A-Tune engine service. + - **tlsengineclientkeyfile**: Client key path of the A-Tune engine service. + +- System information + + System is the parameter information required for system optimization. You must modify the parameter information according to the actual situation. + + - **disk**: Disk information to be collected during the analysis process or specified disk during disk optimization. + - **network**: NIC information to be collected during the analysis process or specified NIC during NIC optimization. + - **user**: User name used for ulimit optimization. Currently, only the user **root** is supported. + +- Log information + + Change the log level as required. The default log level is info. Log information is recorded in the **/var/log/messages** file. + +- Monitor information + + Hardware information that is collected by default when the system is started. + +- Tuning information + + Tuning is the parameter information required for offline tuning. + + - **noise**: Evaluation value of Gaussian noise. + - **sel_feature**: Indicates whether to enable the function of generating the importance ranking of offline tuning parameters. By default, this function is disabled. + +#### Example + +```text +#################################### server ############################### + # atuned config + [server] + # the protocol grpc server running on + # ranges: unix or tcp + protocol = unix + + # the address that the grpc server to bind to + # default is unix socket /var/run/atuned/atuned.sock + # ranges: /var/run/atuned/atuned.sock or ip address + address = /var/run/atuned/atuned.sock + + # the atune nodes in cluster mode, separated by commas + # it is valid when protocol is tcp + # connect = ip01,ip02,ip03 + + # the atuned grpc listening port + # the port can be set between 0 to 65535 which not be used + # port = 60001 + + # the rest service listening port, default is 8383 + # the port can be set between 0 to 65535 which not be used + rest_host = localhost + rest_port = 8383 + + # the tuning optimizer host and port, start by engine.service + # if engine_host is same as rest_host, two ports cannot be same + # the port can be set between 0 to 65535 which not be used + engine_host = localhost + engine_port = 3838 + + # when run analysis command, the numbers of collected data. + # default is 20 + sample_num = 20 + + # interval for collecting data, default is 5s + interval = 5 + + # enable gRPC authentication SSL/TLS + # default is false + # grpc_tls = false + # tlsservercafile = /etc/atuned/grpc_certs/ca.crt + # tlsservercertfile = /etc/atuned/grpc_certs/server.crt + # tlsserverkeyfile = /etc/atuned/grpc_certs/server.key + + # enable rest server authentication SSL/TLS + # default is true + rest_tls = true + tlsrestcacertfile = /etc/atuned/rest_certs/ca.crt + tlsrestservercertfile = /etc/atuned/rest_certs/server.crt + tlsrestserverkeyfile = /etc/atuned/rest_certs/server.key + + # enable engine server authentication SSL/TLS + # default is true + engine_tls = true + tlsenginecacertfile = /etc/atuned/engine_certs/ca.crt + tlsengineclientcertfile = /etc/atuned/engine_certs/client.crt + tlsengineclientkeyfile = /etc/atuned/engine_certs/client.key + + #################################### log ############################### + [log] + # either "debug", "info", "warn", "error", "critical", default is "info" + level = info + + #################################### monitor ############################### + [monitor] + # with the module and format of the MPI, the format is {module}_{purpose} + # the module is Either "mem", "net", "cpu", "storage" + # the purpose is "topo" + module = mem_topo, cpu_topo + + #################################### system ############################### + # you can add arbitrary key-value here, just like key = value + # you can use the key in the profile + [system] + # the disk to be analysis + disk = sda + + # the network to be analysis + network = enp189s0f0 + + user = root + + #################################### tuning ############################### + # tuning configs + [tuning] + noise = 0.000000001 + sel_feature = false +``` + +The configuration items in the configuration file **/etc/atuned/engine.cnf** of the A-Tune engine are described as follows: + +- Startup configuration of the A-Tune engine service (modify the parameter values as required). + + - **engine_host**: Listening address of the A-Tune engine service. The default value is localhost. + - **engine_port**: Listening port of the A-Tune engine service. The value ranges from 0 to 65535. The default value is 3838. + - **engine_tls**: Indicates whether to enable SSL/TLS certificate verification for the A-Tune engine service. This function is enabled by default. + - **tlsenginecacertfile**: Path of the server CA certificate of the A-Tune engine service. + - **tlsengineservercertfile**: Path of the server certificate of the A-Tune engine service. + - **tlsengineserverkeyfile**: Server key path of the A-Tune engine service. + +- Log information + + Change the log level as required. The default log level is info. Log information is recorded in the **/var/log/messages** file. + +#### Example + +```text +#################################### engine ############################### + [server] + # the tuning optimizer host and port, start by engine.service + # if engine_host is same as rest_host, two ports cannot be same + # the port can be set between 0 to 65535 which not be used + engine_host = localhost + engine_port = 3838 + + # enable engine server authentication SSL/TLS + # default is true + engine_tls = true + tlsenginecacertfile = /etc/atuned/engine_certs/ca.crt + tlsengineservercertfile = /etc/atuned/engine_certs/server.crt + tlsengineserverkeyfile = /etc/atuned/engine_certs/server.key + + #################################### log ############################### + [log] + # either "debug", "info", "warn", "error", "critical", default is "info" + level = info +``` + +## Starting A-Tune + +After A-Tune is installed, you need to configure the A-Tune service before starting it. + +- Start the atuned service. + + ```shell + systemctl start atuned + ``` + +- Query the atuned service status. + + ```shell + systemctl status atuned + ``` + + If the following command output is displayed, the service is started successfully: + + ![](./figures/en-us_image_0214540398.png) + +## Starting A-Tune Engine + +To use AI functions, you need to start the A-Tune engine service. + +- Start the atune-engine service. + + ```shell + systemctl start atune-engine + ``` + +- Query the atune-engine service status. + + ```shell + systemctl status atune-engine + ``` + + If the following command output is displayed, the service is started successfully: + + ![](./figures/en-us_image_0245342444.png) + \ No newline at end of file diff --git a/docs/en/server/performance/system_optimization/atune/public_sys-resources/icon-caution.gif b/docs/en/server/performance/system_optimization/atune/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/performance/system_optimization/atune/public_sys-resources/icon-caution.gif differ diff --git a/docs/en/server/performance/system_optimization/atune/public_sys-resources/icon-danger.gif b/docs/en/server/performance/system_optimization/atune/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/performance/system_optimization/atune/public_sys-resources/icon-danger.gif differ diff --git a/docs/en/server/performance/system_optimization/atune/public_sys-resources/icon-note.gif b/docs/en/server/performance/system_optimization/atune/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/server/performance/system_optimization/atune/public_sys-resources/icon-note.gif differ diff --git a/docs/en/server/performance/system_optimization/atune/public_sys-resources/icon-notice.gif b/docs/en/server/performance/system_optimization/atune/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/en/server/performance/system_optimization/atune/public_sys-resources/icon-notice.gif differ diff --git a/docs/en/server/performance/system_optimization/atune/public_sys-resources/icon-tip.gif b/docs/en/server/performance/system_optimization/atune/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/en/server/performance/system_optimization/atune/public_sys-resources/icon-tip.gif differ diff --git a/docs/en/server/performance/system_optimization/atune/public_sys-resources/icon-warning.gif b/docs/en/server/performance/system_optimization/atune/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/performance/system_optimization/atune/public_sys-resources/icon-warning.gif differ diff --git a/docs/en/server/performance/system_optimization/atune/usage_instructions.md b/docs/en/server/performance/system_optimization/atune/usage_instructions.md new file mode 100644 index 0000000000000000000000000000000000000000..8273708634299e9420eb5b1f63c82175edabd64d --- /dev/null +++ b/docs/en/server/performance/system_optimization/atune/usage_instructions.md @@ -0,0 +1,1054 @@ +# Application Scenarios + +You can use functions provided by A-Tune through the CLI client atune-adm. This chapter describes the functions and usage of the A-Tune client. + +## Overview + +- You can run the **atune-adm help/--help/-h** command to query commands supported by atune-adm. +- All example commands are used in single-node mode. For distributed mode, specify an IP address and port number. For example: + + ```sh + # atune-adm -a 192.168.3.196 -p 60001 list + ``` + +- The **define**, **update**, **undefine**, **collection**, **train**, and **upgrade**commands do not support remote execution. +- In the command format, brackets \(\[\]\) indicate that the parameter is optional, and angle brackets \(<\>\) indicate that the parameter is mandatory. The actual parameters prevail. + +## Querying Workload Types + +### list + +#### Function + +Query the supported profiles, and the values of Active. + +#### Format + +**atune-adm list** + +#### Example + +```sh +# atune-adm list + +Support profiles: ++------------------------------------------------+-----------+ +| ProfileName | Active | ++================================================+===========+ +| arm-native-android-container-robox | false | ++------------------------------------------------+-----------+ +| basic-test-suite-euleros-baseline-fio | false | ++------------------------------------------------+-----------+ +| basic-test-suite-euleros-baseline-lmbench | false | ++------------------------------------------------+-----------+ +| basic-test-suite-euleros-baseline-netperf | false | ++------------------------------------------------+-----------+ +| basic-test-suite-euleros-baseline-stream | false | ++------------------------------------------------+-----------+ +| basic-test-suite-euleros-baseline-unixbench | false | ++------------------------------------------------+-----------+ +| basic-test-suite-speccpu-speccpu2006 | false | ++------------------------------------------------+-----------+ +| basic-test-suite-specjbb-specjbb2015 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-hdfs-dfsio-hdd | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-hdfs-dfsio-ssd | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-bayesian | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-kmeans | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql1 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql10 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql2 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql3 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql4 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql5 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql6 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql7 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql8 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql9 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-tersort | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-wordcount | false | ++------------------------------------------------+-----------+ +| cloud-compute-kvm-host | false | ++------------------------------------------------+-----------+ +| database-mariadb-2p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| database-mariadb-4p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| database-mongodb-2p-sysbench | false | ++------------------------------------------------+-----------+ +| database-mysql-2p-sysbench-hdd | false | ++------------------------------------------------+-----------+ +| database-mysql-2p-sysbench-ssd | false | ++------------------------------------------------+-----------+ +| database-postgresql-2p-sysbench-hdd | false | ++------------------------------------------------+-----------+ +| database-postgresql-2p-sysbench-ssd | false | ++------------------------------------------------+-----------+ +| default-default | false | ++------------------------------------------------+-----------+ +| docker-mariadb-2p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| docker-mariadb-4p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| hpc-gatk4-human-genome | false | ++------------------------------------------------+-----------+ +| in-memory-database-redis-redis-benchmark | false | ++------------------------------------------------+-----------+ +| middleware-dubbo-dubbo-benchmark | false | ++------------------------------------------------+-----------+ +| storage-ceph-vdbench-hdd | false | ++------------------------------------------------+-----------+ +| storage-ceph-vdbench-ssd | false | ++------------------------------------------------+-----------+ +| virtualization-consumer-cloud-olc | false | ++------------------------------------------------+-----------+ +| virtualization-mariadb-2p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| virtualization-mariadb-4p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| web-apache-traffic-server-spirent-pingpo | false | ++------------------------------------------------+-----------+ +| web-nginx-http-long-connection | true | ++------------------------------------------------+-----------+ +| web-nginx-https-short-connection | false | ++------------------------------------------------+-----------+ + +``` + +>![](public_sys-resources/icon-note.gif) **NOTE:** +>If the value of Active is **true**, the profile is activated. In the example, the profile of web-nginx-http-long-connection is activated. + +## Workload Type Analysis and Auto Optimization + +### analysis + +#### Function + +Collect real-time statistics from the system to identify and automatically optimize workload types. + +#### Format + +**atune-adm analysis** \[OPTIONS\] + +#### Parameter Description + +- OPTIONS + + + + + + + + + + + + +

Parameter

+

Description

+

--model, -m

+

New model generated after user self-training

+

--characterization, -c

+

Use the default model for application identification and do not perform automatic optimization

+
+ +#### Example + +- Use the default model for application identification. + + ```sh + # atune-adm analysis --characterization + ``` + +- Use the default model to identify applications and perform automatic tuning. + + ```sh + # atune-adm analysis + ``` + +- Use the user-defined training model for recognition. + + ```sh + # atune-adm analysis --model /usr/libexec/atuned/analysis/models/new-model.m + ``` + +## User-defined Model + +A-Tune allows users to define and learn new models. To define a new model, perform the following steps: + +1. Run the **define** command to define a new profile. +2. Run the **collection** command to collect the system data corresponding to the application. +3. Run the **train** command to train the model. + +### define + +#### Function + +Add a user-defined application scenarios and the corresponding profile tuning items. + +#### Format + +**atune-adm define** \ \ \ \ + +#### Example + +Add a profile whose service_type is **test_service**, application_name is **test_app**, scenario_name is **test_scenario**, and tuning item configuration file is **example.conf**. + +```sh +# atune-adm define test_service test_app test_scenario ./example.conf +``` + +The **example.conf** file can be written as follows (the following optimization items are optional and are for reference only). You can also run the **atune-adm info** command to view how the existing profile is written. + +```sh + [main] + # list its parent profile + [kernel_config] + # to change the kernel config + [bios] + # to change the bios config + [bootloader.grub2] + # to change the grub2 config + [sysfs] + # to change the /sys/* config + [systemctl] + # to change the system service status + [sysctl] + # to change the /proc/sys/* config + [script] + # the script extension of cpi + [ulimit] + # to change the resources limit of user + [schedule_policy] + # to change the schedule policy + [check] + # check the environment + [tip] + # the recommended optimization, which should be performed manunaly +``` + +### collection + +#### Function + +Collect the global resource usage and OS status information during service running, and save the collected information to a CSV output file as the input dataset for model training. + +>![](public_sys-resources/icon-note.gif) **NOTE:** +> +>- This command depends on the sampling tools such as perf, mpstat, vmstat, iostat, and sar. +>- Currently, only the Kunpeng 920 CPU is supported. You can run the **dmidecode -t processor** command to check the CPU model. + +#### Format + +**atune-adm collection** + +#### Parameter Description + +- OPTIONS + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

--filename, -f

+

Name of the generated CSV file used for training: name-timestamp.csv

+

--output_path, -o

+

Path for storing the generated CSV file. The absolute path is required.

+

--disk, -b

+

Disk used during service running, for example, /dev/sda.

+

--network, -n

+

Network port used during service running, for example, eth0.

+

--app_type, -t

+

Mark the application type of the service as a label for training.

+

--duration, -d

+

Data collection time during service running, in seconds. The default collection time is 1200 seconds.

+

--interval, -i

+

Interval for collecting data, in seconds. The default interval is 5 seconds.

+
+ +#### Example + +```sh +# atune-adm collection --filename name --interval 5 --duration 1200 --output_path /home/data --disk sda --network eth0 --app_type test_type +``` + +### train + +#### Function + +Use the collected data to train the model. Collect data of at least two application types during training. Otherwise, an error is reported. + +#### Format + +**atune-adm train** + +#### Parameter Description + +- OPTIONS + + | Parameter | Description | + | ----------------- | ------------------------------------------------------ | + | --data_path, -d | Path for storing CSV files required for model training | + | --output_file, -o | Model generated through training | + +#### Example + +Use the CSV file in the **data** directory as the training input. The generated model **new-model.m** is stored in the **model** directory. + +```sh +# atune-adm train --data_path /home/data --output_file /usr/libexec/atuned/analysis/models/new-model.m +``` + +### undefine + +#### Function + +Delete a user-defined profile. + +#### Format + +**atune-adm undefine** + +#### Example + +Delete the user-defined profile. + +```sh +# atune-adm undefine test_service-test_app-test_scenario +``` + +## Querying Profiles + +### info + +#### Function + +View the profile content. + +#### Format + +**atune-adm info** + +#### Example + +View the profile content of web-nginx-http-long-connection. + +```sh +# atune-adm info web-nginx-http-long-connection + +*** web-nginx-http-long-connection: + +# +# nginx http long connection A-Tune configuration +# +[main] +include = default-default + +[kernel_config] +#TODO CONFIG + +[bios] +#TODO CONFIG + +[bootloader.grub2] +iommu.passthrough = 1 + +[sysfs] +#TODO CONFIG + +[systemctl] +sysmonitor = stop +irqbalance = stop + +[sysctl] +fs.file-max = 6553600 +fs.suid_dumpable = 1 +fs.aio-max-nr = 1048576 +kernel.shmmax = 68719476736 +kernel.shmall = 4294967296 +kernel.shmmni = 4096 +kernel.sem = 250 32000 100 128 +net.ipv4.tcp_tw_reuse = 1 +net.ipv4.tcp_syncookies = 1 +net.ipv4.ip_local_port_range = 1024 65500 +net.ipv4.tcp_max_tw_buckets = 5000 +net.core.somaxconn = 65535 +net.core.netdev_max_backlog = 262144 +net.ipv4.tcp_max_orphans = 262144 +net.ipv4.tcp_max_syn_backlog = 262144 +net.ipv4.tcp_timestamps = 0 +net.ipv4.tcp_synack_retries = 1 +net.ipv4.tcp_syn_retries = 1 +net.ipv4.tcp_fin_timeout = 1 +net.ipv4.tcp_keepalive_time = 60 +net.ipv4.tcp_mem = 362619 483495 725238 +net.ipv4.tcp_rmem = 4096 87380 6291456 +net.ipv4.tcp_wmem = 4096 16384 4194304 +net.core.wmem_default = 8388608 +net.core.rmem_default = 8388608 +net.core.rmem_max = 16777216 +net.core.wmem_max = 16777216 + +[script] +prefetch = off +ethtool = -X {network} hfunc toeplitz + +[ulimit] +{user}.hard.nofile = 102400 +{user}.soft.nofile = 102400 + +[schedule_policy] +#TODO CONFIG + +[check] +#TODO CONFIG + +[tip] +SELinux provides extra control and security features to linux kernel. Disabling SELinux will improve the performance but may cause security risks. = kernel +disable the nginx log = application +``` + +## Updating a Profile + +You can update the existing profile as required. + +### update + +#### Function + +Update the original tuning items in the existing profile to the content in the **new.conf** file. + +#### Format + +**atune-adm update** + +#### Example + +Change the tuning item of the profile named **test_service-test_app-test_scenario** to **new.conf**. + +```sh +# atune-adm update test_service-test_app-test_scenario ./new.conf +``` + +## Activating a Profile + +### profile + +#### Function + +Manually activate the profile to make it in the active state. + +#### Format + +**atune-adm profile** + +#### Parameter Description + +For details about the profile name, see the query result of the list command. + +#### Example + +Activate the profile corresponding to the web-nginx-http-long-connection. + +```sh +# atune-adm profile web-nginx-http-long-connection +``` + +## Rolling Back Profiles + +### rollback + +#### Functions + +Roll back the current configuration to the initial configuration of the system. + +#### Format + +**atune-adm rollback** + +#### Example + +```sh +# atune-adm rollback +``` + +## Updating Database + +### upgrade + +#### Function + +Update the system database. + +#### Format + +**atune-adm upgrade** + +#### Parameter Description + +- DB\_FILE + + New database file path. + +#### Example + +The database is updated to **new\_sqlite.db**. + +```sh +# atune-adm upgrade ./new_sqlite.db +``` + +## Querying System Information + +### check + +#### Function + +Check the CPU, BIOS, OS, and NIC information. + +#### Format + +**atune-adm check** + +#### Example + +```sh +# atune-adm check + cpu information: + cpu:0 version: Kunpeng 920-6426 speed: 2600000000 HZ cores: 64 + cpu:1 version: Kunpeng 920-6426 speed: 2600000000 HZ cores: 64 + system information: + DMIBIOSVersion: 0.59 + OSRelease: 4.19.36-vhulk1906.3.0.h356.eulerosv2r8.aarch64 + network information: + name: eth0 product: HNS GE/10GE/25GE RDMA Network Controller + name: eth1 product: HNS GE/10GE/25GE Network Controller + name: eth2 product: HNS GE/10GE/25GE RDMA Network Controller + name: eth3 product: HNS GE/10GE/25GE Network Controller + name: eth4 product: HNS GE/10GE/25GE RDMA Network Controller + name: eth5 product: HNS GE/10GE/25GE Network Controller + name: eth6 product: HNS GE/10GE/25GE RDMA Network Controller + name: eth7 product: HNS GE/10GE/25GE Network Controller + name: docker0 product: +``` + +## Automatic Parameter Optimization + +A-Tune provides the automatic search capability with the optimal configuration, saving the trouble of manually configuring parameters and performance evaluation. This greatly improves the search efficiency of optimal configurations. + +### Tuning + +#### Function + +Use the specified project file to search the dynamic space for parameters and find the optimal solution under the current environment configuration. + +#### Format + +**atune-adm tuning** \[OPTIONS\] + +>![](public_sys-resources/icon-note.gif) **NOTE:** +>Before running the command, ensure that the following conditions are met: +> +>1. The YAML configuration file on the server has been edited and stored in the **/etc/atuned/tuning/** directory of the atuned service. +>2. The YAML configuration file of the client has been edited and stored on the atuned client. + +#### Parameter Description + +- OPTIONS + + + + + + + + + + + + + + + + + + + +

Parameter

+

Description

+

--restore, -r

+

Restores the initial configuration before tuning.

+

--project, -p

+

Specifies the project name in the YAML file to be restored.

+

--restart, -c

+

Perform tuning based on historical tuning results.

+

--detail, -d

+

Print detailed information about the tuning process.

+
+ + >![](public_sys-resources/icon-note.gif) **NOTE:** + >If this parameter is used, the -p parameter must be followed by a specific project name and the YAML file of the project must be specified. + +- **PROJECT\_YAML**: YAML configuration file of the client. + +#### Configuration Description + +**Table 1** YAML file on the server + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

+

Description

+

Type

+

Value Range

+

project

+

Project name.

+

Character string

+

-

+

startworkload

+

Script for starting the service to be optimized.

+

Character string

+

-

+

stopworkload

+

Script for stopping the service to be optimized.

+

Character string

+

-

+

maxiterations

+

Maximum number of optimization iterations, which is used to limit the number of iterations on the client. Generally, the more optimization iterations, the better the optimization effect, but the longer the time required. Set this parameter based on the site requirements.

+

Integer

+

>10

+

object

+

Parameters to be optimized and related information.

+

For details about the object configuration items, see Table 2.

+

-

+

-

+
+ +**Table 2** Description of object configuration items + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

+

Description

+

Type

+

Value Range

+

name

+

Parameter to be optimized.

+

Character string

+

-

+

desc

+

Description of parameters to be optimized.

+

Character string

+

-

+

get

+

Script for querying parameter values.

+

-

+

-

+

set

+

Script for setting parameter values.

+

-

+

-

+

needrestart

+

Specifies whether to restart the service for the parameter to take effect.

+

Enumeration

+

true or false

+

type

+

Parameter type. Currently, the discrete and continuous types are supported.

+

Enumeration

+

discrete or continuous

+

dtype

+

This parameter is available only when type is set to discrete. Currently, int, float and string are supported.

+

Enumeration

+

int, float, string

+

scope

+

Parameter setting range. This parameter is valid only when type is set to discrete and dtype is set to int or float, or type is set to continuous.

+

Integer/Float

+

The value is user-defined and must be within the valid range of this parameter.

+

step

+

Parameter value step, which is used when dtype is set to int or float.

+

Integer/Float

+

This value is user-defined.

+

items

+

Enumerated value of which the parameter value is not within the scope. This is used when dtype is set to int or float.

+

Integer/Float

+

The value is user-defined and must be within the valid range of this parameter.

+

options

+

Enumerated value range of the parameter value, which is used when dtype is set to string.

+

Character string

+

The value is user-defined and must be within the valid range of this parameter.

+
+ +**Table 3** Description of configuration items of a YAML file on the client + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

+

Description

+

Type

+

Value Range

+

project

+

Project name, which must be the same as that in the configuration file on the server.

+

Character string

+

-

+

engine

+

Tuning algorithm.

+

Character string

+

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

+

iterations

+

Number of optimization iterations.

+

Integer

+

≥ 10

+

random_starts

+

Number of random iterations.

+

Integer

+

< iterations

+

feature_filter_engine

+

Parameter search algorithm, which is used to select important parameters. This parameter is optional.

+

Character string

+

"lhs"

+

feature_filter_cycle

+

Parameter search cycles, which is used to select important parameters. This parameter is used together with feature_filter_engine.

+

Integer

+

-

+

feature_filter_iters

+

Number of iterations for each cycle of parameter search, which is used to select important parameters. This parameter is used together with feature_filter_engine.

+

Integer

+

-

+

split_count

+

Number of evenly selected parameters in the value range of tuning parameters, which is used to select important parameters. This parameter is used together with feature_filter_engine.

+

Integer

+

-

+

benchmark

+

Performance test script.

+

-

+

-

+

evaluations

+

Performance test evaluation index.

+

For details about the evaluations configuration items, see Table 4.

+

-

+

-

+
+ +**Table 4** Description of evaluations configuration item + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

+

Description

+

Type

+

Value Range

+

name

+

Evaluation index name.

+

Character string

+

-

+

get

+

Script for obtaining performance evaluation results.

+

-

+

-

+

type

+

Specifies a positive or negative type of the evaluation result. The value positive indicates that the performance value is minimized, and the value negative indicates that the performance value is maximized.

+

Enumeration

+

positive or negative

+

weight

+

Weight of the index. The value ranges from 0 to 100.

+

Integer

+

0-100

+

threshold

+

Minimum performance requirement of the index.

+

Integer

+

User-defined

+
+ +#### Example + +The following is an example of the YAML file configuration on a server: + +```sh +project: "compress" +maxiterations: 500 +startworkload: "" +stopworkload: "" +object : + - + name : "compressLevel" + info : + desc : "The compresslevel parameter is an integer from 1 to 9 controlling the level of compression" + get : "cat /root/A-Tune/examples/tuning/compress/compress.py | grep 'compressLevel=' | awk -F '=' '{print $2}'" + set : "sed -i 's/compressLevel=\\s*[0-9]*/compressLevel=$value/g' /root/A-Tune/examples/tuning/compress/compress.py" + needrestart : "false" + type : "continuous" + scope : + - 1 + - 9 + dtype : "int" + - + name : "compressMethod" + info : + desc : "The compressMethod parameter is a string controlling the compression method" + get : "cat /root/A-Tune/examples/tuning/compress/compress.py | grep 'compressMethod=' | awk -F '=' '{print $2}' | sed 's/\"//g'" + set : "sed -i 's/compressMethod=\\s*[0-9,a-z,\"]*/compressMethod=\"$value\"/g' /root/A-Tune/examples/tuning/compress/compress.py" + needrestart : "false" + type : "discrete" + options : + - "bz2" + - "zlib" + - "gzip" + dtype : "string" +``` + +The following is an example of the YAML file configuration on a client: + +```sh +project: "compress" +engine : "gbrt" +iterations : 20 +random_starts : 10 + +benchmark : "python3 /root/A-Tune/examples/tuning/compress/compress.py" +evaluations : + - + name: "time" + info: + get: "echo '$out' | grep 'time' | awk '{print $3}'" + type: "positive" + weight: 20 + - + name: "compress_ratio" + info: + get: "echo '$out' | grep 'compress_ratio' | awk '{print $3}'" + type: "negative" + weight: 80 +``` + +#### Example + +- Perform tuning. + + ```sh + # atune-adm tuning --project compress --detail compress_client.yaml + ``` + +- Restore the initial configuration before tuning. The compress is the project name in the YAML file. + + ```sh + # atune-adm tuning --restore --project compress + ``` diff --git a/docs/en/server/performance/system_optimization/oeaware/_toc.yaml b/docs/en/server/performance/system_optimization/oeaware/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..20851b39eba289b6deefa462e916491a972a285e --- /dev/null +++ b/docs/en/server/performance/system_optimization/oeaware/_toc.yaml @@ -0,0 +1,6 @@ +label: oeAware User Guide +isManual: true +description: oeAware is a framework that provides low-load collection, sensing, and tuning on openEuler +sections: + - label: oeAware User Guide + href: ./oeaware_user_guide.md diff --git a/docs/en/server/performance/system_optimization/oeaware/figures/dep-failed.png b/docs/en/server/performance/system_optimization/oeaware/figures/dep-failed.png new file mode 100644 index 0000000000000000000000000000000000000000..afb4750135657876b455978bf9d8f5eff36be91e Binary files /dev/null and b/docs/en/server/performance/system_optimization/oeaware/figures/dep-failed.png differ diff --git a/docs/en/server/performance/system_optimization/oeaware/figures/dep.png b/docs/en/server/performance/system_optimization/oeaware/figures/dep.png new file mode 100644 index 0000000000000000000000000000000000000000..91388d6a860f032c86c0559b232f2d5ef55a40f8 Binary files /dev/null and b/docs/en/server/performance/system_optimization/oeaware/figures/dep.png differ diff --git a/docs/en/server/performance/system_optimization/oeaware/figures/dependency.png b/docs/en/server/performance/system_optimization/oeaware/figures/dependency.png new file mode 100644 index 0000000000000000000000000000000000000000..0cd087fb0c9095e63aa76e0d2464a92225af2399 Binary files /dev/null and b/docs/en/server/performance/system_optimization/oeaware/figures/dependency.png differ diff --git a/docs/en/server/performance/system_optimization/oeaware/oeaware_user_guide.md b/docs/en/server/performance/system_optimization/oeaware/oeaware_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..6064739c425608c6ceb51333fe016936b273f142 --- /dev/null +++ b/docs/en/server/performance/system_optimization/oeaware/oeaware_user_guide.md @@ -0,0 +1,521 @@ +# oeAware User Guide + +## Introduction + +oeAware is a framework for implementing low-load collection, sensing, and tuning on openEuler. It aims to intelligently enable optimization features after dynamically detecting system behaviors. Traditional optimization features run independently and are statically enabled or disabled. oeAware divides optimization into three layers: collection, sensing, and tuning. Each layer is associated through subscription and is developed as plugins. + +## Plugin Description + +**Plugin definition**: Each plugin corresponds to an .so file. Plugins are classified into collection plugins, sensing plugins, and tuning plugins. + +**Instance definition**: The scheduling unit in the service is instance. A plugin contains multiple instances. For example, a collection plugin includes multiple collection items, and each collection item is an instance. + +**Dependencies Between Instances** + +Before running an instance, ensure that the dependency between the instances is met. + +![img](./figures/dependency.png) + +- A collection instance does not depend on any other instance. + +- A sensing instance depends on a collection instance and other sensing instances. + +- A tuning instance depends on a collection instance, sensing instance, and other tuning instances. + +## Installation + +Configure the openEuler Yum repository and run the `yum` commands to install oeAware. on openEuler 22.03 LTS SP4, oeAware has been installed by default. + +```shell +yum install oeAware-manager +``` + +### Service Startup + +Run the `systemd` command to start the service. + +```shell +systemctl start oeaware +``` + +Skip this step + +Configuration file path: **/etc/oeAware/config.yaml** + +```yaml +log_path: /var/log/oeAware # Log storage path +log_level: 1 # Log level. 1: DEBUG; 2: INFO; 3: WARN; 4: ERROR. +enable_list: # Plugins are enabled by default. + - name: libtest.so # Configure the plugin and enable all instances of the plugin. + - name: libtest1.so # Configure the plugin and enable the specified plugin instances. + instances: + - instance1 + - instance2 + ... + ... +plugin_list: # Downloaded packages are supported. + - name: test #The name must be unique. If the name is repeated, the first occurrence is used. + description: hello world + url: https://gitee.com/openeuler/oeAware-manager/raw/master/README.md #url must not be empty. + ... +``` + +After modifying the configuration file, run the following commands to restart the service: + +```shell +systemctl daemon-reload +systemctl restart oeaware +``` + +## Usage + +Start the oeaware service. Then, manage plugins and instances using the `oeawarectl` command, which supports loading, unloading, and querying plugins, along with enabling, disabling, and querying instances. + +### Plugin Loading + +By default, the service loads the plugins in the plugin storage paths. + +Collection plugin path: /usr/lib64/oeAware-plugin/collector + +Sensing plugin path: /usr/lib64/oeAware-plugin/scenario + +Tuning plugin path: /usr/lib64/oeAware-plugin/tune + +You can also manually load the plugins. + +```shell +oeawarectl -l | --load -t | --type # plugin type can be collector, scenario, or tune +``` + +Example + +```shell +[root@localhost ~]# oeawarectl -l libthread_collect.so -t collector +Plugin loaded successfully. +``` + +If the operation fails, an error description is returned. + +### Plugin Unloading + +```shell +oeawarectl -r | --remove +``` + +Example + +```shell +[root@localhost ~]# oeawarectl -r libthread_collect.so +Plugin remove successfully. +``` + +If the operation fails, an error description is returned. + +### Plugin Query + +#### Querying Plugin Status + +```shell +oeawarectl -q # Query all loaded plugins. +oeawarectl --query # Query a specified plugin. +``` + +Example + +```shell +[root@localhost ~]# oeawarectl -q +Show plugins and instances status. +------------------------------------------------------------ +libthread_collector.so + thread_collector(available, close) # Plugin instance and status +libpmu.so + pmu_cycles_sampling(available, close) + pmu_cycles_counting(available, close) + pmu_uncore_counting(available, close) + pmu_spe_sampling(available, close) +libthread_tune.so + thread_tune(available, close) +libthread_scenario.so + thread_scenario(available, close) +------------------------------------------------------------ +format: +[plugin] + [instance]([dependency status], [running status]) +dependency status: available means satisfying dependency, otherwise unavailable. +running status: running means that instance is running, otherwise close. +``` + +If the operation fails, an error description is returned. + +#### Querying Plugin Dependencies + +```shell +oeawarectl -Q # Query the dependency graph of loaded instances. +oeawarectl --query-dep= # Query the dependency graph of a specified instance. +``` + +A **dep.png** file will be generated in the current directory to display the dependencies. + +Example + +Relationship diagram when dependencies are met + +![img](./figures/dep.png) + +Relationship diagram when dependencies are not met + +![img](./figures/dep-failed.png) + +If the operation fails, an error description is returned. + +### Enabling Plugins + +#### Enabling a Plugin Instance + +```shell +oeawarectl -e | --enable +``` + +If the operation fails, an error description is returned. + +#### Disabling a Plugin Instance + +```shell +oeawarectl -d | --disable +``` + +If the operation fails, an error description is returned. + +### Downloading and Installing Plugins + +Use the `--list` command to query the RPM packages that can be downloaded and installed plugins. + +```shell +oeawarectl --list +``` + +The query result is as follows: + +```shell +Supported Packages: # Downloadable packages +[name1] # plugin_list configured in config +[name2] +... +Installed Plugins: # Installed plugins +[name1] +[name2] +... +``` + +Use the `--install` command to download and install the RPM package. + +```shell +oeawarectl -i | --install # Name of a package queried using --list (package in Supported Packages) +``` + +If the operation fails, an error description is returned. + +### Help + +Use the `--help` command for help information. + +```shell +usage: oeawarectl [options]... + options + -l|--load [plugin] load plugin and need plugin type. + -t|--type [plugin_type] assign plugin type. there are three types: + collector: collection plugin. + scenario: awareness plugin. + tune: tune plugin. + -r|--remove [plugin] remove plugin from system. + -e|--enable [instance] enable the plugin instance. + -d|--disable [instance] disable the plugin instance. + -q query all plugins information. + --query [plugin] query the plugin information. + -Q query all instances dependencies. + --query-dep [instance] query the instance dependency. + --list the list of supported plugins. + -i|--install [plugin] install plugin from the list. + --help show this help message. +``` + +## Plugin Development + +### Common Data Structures of Plugins + +```c +struct DataBuf { + int len; + void *data; +}; +``` + +**struct DataBuf** is the data buffer. + +- **data**: specific data. **data** is an array. The data type can be defined as required. +- len: size of **data**. + +```c +struct DataRingBuf { + const char *instance_name; + int index; + uint64_t count; + struct DataBuf *buf; + int buf_len; +}; +``` + +**struct DataRingBuf** facilitates data transfer between plugins, primarily utilizing a circular buffer. + +- **instance_name**: instance of the incoming data. For instance, when data reaches a perception plugin, it distinguishes which collection item belongs to which collection plugin. + +- **index**: current data write position. For example, after each data collection, the index increments. + +- **count**: execution count of the instance, continuously accumulating. + +- **buf**: data buffer. Some collection items require multiple samplings before the perception plugin processes them, so the buf array stores these samples. + +- **buf_len**: size of the data buffer. Once the buffer is initialized, **buf_len** remains constant. + +```C +struct Param { + const struct DataRingBuf **ring_bufs; + int len; +}; +``` + +- **ring_bufs**: data required by the instance, sourced from other instances. +- **len**: length of the **ring_bufs** array. + +### Instance Interfaces + +```C +struct Interface { + const char* (*get_version)(); + /* The instance name is a unique identifier in the system. */ + const char* (*get_name)(); + const char* (*get_description)(); + /* Specifies the instance dependencies, which is used as the input information + * for instance execution. + */ + const char* (*get_dep)(); + /* Instance scheduling priority. In a uniform time period, a instance with a + * lower priority is scheduled first. + */ + int (*get_priority)(); + int (*get_type)(); + /* Instance execution period. */ + int (*get_period)(); + bool (*enable)(); + void (*disable)(); + const struct DataRingBuf* (*get_ring_buf)(); + void (*run)(const struct Param*); +}; +``` + +```c +int get_instance(Interface **interface); +``` + +Every plugin includes a **get_instance** function to provide instances to the framework. + +Obtaining the version number + +1. Interface definition + + ```c + char* (*get_version)(); + ``` + +2. Interface description + +3. Parameter description + +4. Return value description + + The specific version number is returned. This interface is reserved. + +Obtaining the instance name + +1. Interface definition + + ```c + char* (*get_name)(); + ``` + +2. Interface description + + Obtains the name of an instance. When you run the `-q` command on the client, the instance name is displayed. In addition, you can run the `--enable` command to enable the instance. + +3. Parameter description + +4. Return value description + + The name of the instance is returned. Ensure that the instance name is unique. + +Obtaining description information + +1. Interface definition + + ```c + char* (*get_description)(); + ``` + +2. Interface description + +3. Parameter description + +4. Return value description + + The detailed description is returned. This interface is reserved. + +Obtaining the type + +1. Interface definition + + ```c + char* (*get_type)(); + ``` + +2. Interface description + +3. Parameter description + +4. Return value description + + The specific type information is returned. This interface is reserved. + +Obtaining the sampling period + +1. Interface definition + + ```c + int (*get_cycle)(); + ``` + +2. Interface description + + Obtains the sampling period. Different collection items can use different collection periods. + +3. Parameter description + +4. Return value description + + The specific sampling period is returned. The unit is ms. + +Obtaining dependencies + +1. Interface definition + + ```c + char* (*get_dep)(); + ``` + +2. Interface description + +3. Parameter description + +4. Return value description + + Information about the dependent instances is returned. This interface is reserved. + +Enabling an instance + +1. Interface definition + + ```c + void (*enable)(); + ``` + +2. Interface description + + Enables an instance. + +3. Parameter description + +4. Return value description + +Disabling an instance + +1. Interface definition + + ```c + void (*disable)(); + ``` + +2. Interface description + + Disables an instance. + +3. Parameter description + +4. Return value description + +Obtaining the data buffer + +1. Interface definition + + ```c + const DataRingBuf* (*get_ring_buf)(); + ``` + +2. Interface description + + Obtains the buffer management pointer of the collection data (the memory is applied for by the plugin). The pointer is used by sensing plugins. + +3. Parameter description + +4. Return value description + + The **struct DataRingBuf** management pointer is returned. + +Executing an instance + +1. Interface definition + + ```c + void (*run)(const Param*); + ``` + +2. Interface description + + Runs at regular intervals according to the execution cycle. + +3. Parameter description + + Contains the data necessary for the instance to execute. + +4. Return value description + +## Supported Plugins + +- **libpmu.so**: collects PMU-related data. +- **libthread_collector.so**: gathers thread information within the system. +- **libthread_scenario.so**: monitors details of a specific thread. +- **libthread_tune.so**: enhances UnixBench performance. +- **libsmc_tune.so**: enables SMC acceleration for seamless TCP protocol performance improvements. +- **libtune_numa.so**: optimizes cross-NUMA node memory access to boost system performance. + +## Constraints + +### Function Constraints + +By default, oeAware integrates the libkperf module for collecting Arm microarchitecture information. This module can be called by only one process at a time. If this module is called by other processes or the perf command is used, conflicts may occur. + +### Operation Constraints + +Currently, only the **root** user can operate oeAware. + +## Notes + +The user group and permission of the oeAware configuration file and plugins are strictly verified. Do not modify the permissions and user group of oeAware-related files. + +Permissions: + +- Plugin files: 440 + +- Client executable file: 750 + +- Server executable file: 750 + +- Service configuration file: 640 diff --git a/docs/en/server/performance/system_optimization/powerapi/_toc.yaml b/docs/en/server/performance/system_optimization/powerapi/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..35ef0ba83d1983b891a0c314af093444f48fd4a3 --- /dev/null +++ b/docs/en/server/performance/system_optimization/powerapi/_toc.yaml @@ -0,0 +1,15 @@ +label: powerapi User Guide +isManual: true +description: powerapi User Guide +sections: + - label: powerapi User Guide + href: ./powerapi.md + - label: Getting to Know powerapi + href: ./getting_to_know_powerapi.md + - label: Installing and Using powerapi + href: ./installation_usage.md + - label: Using powerapi for Development + href: ./development_using_powerapi.md + + + diff --git a/docs/en/server/performance/system_optimization/powerapi/development_using_powerapi.md b/docs/en/server/performance/system_optimization/powerapi/development_using_powerapi.md new file mode 100644 index 0000000000000000000000000000000000000000..757691d1a680c7505f3df4281b9ce4835d4f85a9 --- /dev/null +++ b/docs/en/server/performance/system_optimization/powerapi/development_using_powerapi.md @@ -0,0 +1,798 @@ +# Development Using powerapi + +## (Optional) Source Code Download + +Source code download: [https://gitee.com/openeuler/powerapi](https://gitee.com/openeuler/powerapi) + +Some interfaces in the source code are experimental and have not been released. **RELEASE_MODE** in the code indicates whether the interfaces are officially released. + +For details about released APIs, see the API document in the source code repository. + +## Installation + +Run the following command to install the powerapi-devel software package and use the provided interfaces for development: + +```sh +yum install powerapi-devel +``` + +## Basic Procedure + +To use query interfaces, you only need to register with powerapi. To use setting interfaces, you need to register with powerapi and request control. Based on service scenarios, the service processes are as follows: +Discrete perception service scenario: log callback setting -> registration -> query interface calling -> deregistration +Configuration service scenario: log callback setting -> registration -> Control request -> Configuration interface calling -> Control release -> deregistration + +## powerapi APIs + +### General APIs + +#### Setting the Log Callback Function + +Definition: + +```c +PWR_API int PWR_SetLogCallback(void(LogCallback)(int level, const char *fmt, va_list vl)) +``` + +Description: +Sets the callback logs. After the logs are set, the powerapi library prints the **LogCallBack** function to the logs. If they are not set, the **LogCallBack** function is printed to the terminal by default. This API can be called before registration. + +Parameters: + +Parameter|Type|Description +--------|---------|-------- +LogCallBack|void(*)|Log callback function pointer + +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
4: Failed. The callback function pointer is empty. + +#### Setting Server Information + +Definition: + +```c +PWR_API int PWR_SetServerInfo(const char* socketPath) +``` + +Description: +Sets the address of the Unix domain socket communication server. + +Parameters: + +Parameter|Type|Description +--------|---------|-------- +socketPath|const char*|Path of the server. + +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
4: Failed. The callback function pointer is empty. + +Note: +The default path of the server socket file is **/etc/sysconfig/pwrapis/pwrserver.sock**. If you change the default path in the pwrapis configuration file, ensure that the directory permission is 755 and the file permission is 722. +After the path is changed, use this interface to specify the new path of the socket before registration. Otherwise, the connection fails. + +#### Registration + +Definition: + +```c +PWR_API int PWR_Register(void) +``` + +Description: +Registers with the powerapi service. + +Parameters: None +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
1: Failed to initialize the socket client. + +#### Deregistration + +Definition: + +```c +PWR_API int PWR_UnRegister(void) +``` + +Description: +Deregisters with the powerapi service. + +Parameters: None +Returns: + +Type|Description +--------|--------- +int|0: Succeeded. + +#### Requesting Energy Efficiency Control + +Definition: + +```c +PWR_API int PWR_RequestControlAuth(void) +``` + +Description: +Requests control of the system energy efficiency. After an upper-layer application takes over energy efficiency control, the system does not automatically adjust energy efficiency anymore. + +Parameters: None +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
Other value: Failed. See the error codes for details. + +#### Releasing Energy Efficiency Control + +Definition: + +```c +PWR_API int PWR_ReleaseControlAuth(void) +``` + +Description: +Releases control of the system energy efficiency. + +Parameters: None +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
Other value: Failed. See the error codes for details. + +### CPU + +#### Obtaining CPU Information + +Definition: + +```c +PWR_API int PWR_CPU_GetInfo(PWR_CPU_Info *cpuInfo) +``` + +Description: +Obtains CPU information, including basic CPU information and NUMA information. + +Parameters: + +Parameter|Type|Description +--------|---------|-------- +cpuinfo|PWR_CPU_Info*|CPU information. + +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
Other value: Failed. See the error codes for details. + +#### Obtaining the CPU Frequency Ability + +Definition: + +```c +PWR_API int PWR_CPU_GetFreqAbility(PWR_CPU_FreqAbility *freqAbi, uint32_t bufferSize) +``` + +Description: +Queries the information about the available CPU frequency domain, governor, and currently used CPU frequency driver. + +Parameters: + +Parameter|Type|Description +--------|---------|-------- +freqAbi|PWR_CPU_FreqAbility*|CPU frequency ability information +bufferSize|uint32_t|Size of the freqAbi memory block.
Recommended size:
**sizeof(PWR_CPU_FreqAbility) + _CPU core count_ x (sizeof(int) + 5)**
If the size is too small, only the frequency domain data that can be contained is returned. + +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
Other value: Failed. See the error codes for details. + +#### Obtaining the CPU Frequency Governor + +Definition: + +```c +PWR_API int PWR_CPU_GetFreqGovernor(char gov[], uint32_t size) +``` + +Description: +Obtains the CPU frequency governor in use. By default, the governor of the first frequency domain is obtained. + +Parameters: + +Parameter|Type|Description +--------|---------|-------- +gov|char[]|Governor name. The value can contain a maximum of 31 characters. +size|uint32_t|Size of the **gov** array. The value must be greater than or equal to **PWR_MAX_ELEMENT_NAME_LEN(32)**. + +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
Other value: Failed. See the error codes for details. + +#### Setting the CPU Frequency Governor + +Definition: + +```c +PWR_API int PWR_CPU_SetFreqGovernor(const char gov[]) +``` + +Description: +Sets the CPU frequency governor in use. (The governor will be set for all frequency domains). + +Parameters: + +Parameter|Type|Description +--------|---------|-------- +gov|char[]|Governor name. The value can contain a maximum of 31 characters.
Examples:
**conservative**
**ondemand**
**userspace**
**powersave**
**performance**
**schedutil**
**seep** + +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
Other value: Failed. See the error codes for details. + +#### Obtaining All Attributes of the CPU Frequency Governor + +Definition: + +```c +PWR_API int PWR_CPU_GetFreqGovAttrs(PWR_CPU_FreqGovAttrs *govAttrs) +``` + +Description: +Obtains all attributes of the CPU frequency governor in use. + +Parameters: + +Parameter|Type|Description +--------|---------|-------- +govAttrs|PWR_CPU_FreqGovAttrs*|Attributes of the frequency governor. + +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
Other value: Failed. See the error codes for details. + +#### Obtaining an Attribute of the CPU Frequency Governor + +Definition: + +```c +PWR_API int PWR_CPU_GetFreqGovAttr(PWR_CPU_FreqGovAttr *govAttr) +``` + +Description: +Obtains the attribute of the current CPU frequency in use. The attribute corresponding to the governor used by the first frequency domain (**policy0**) is obtained. + +Parameters: + +Parameter|Type|Description +--------|---------|-------- +govAttrs|PWR_CPU_FreqGovAttrs*|Attributes of the frequency governor. + +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
Other value: Failed. See the error codes for details. + +#### Setting an Attribute of the CPU Frequency Governor + +Definition: + +```c +PWR_API int PWR_CPU_SetFreqGovAttr(const PWR_CPU_FreqGovAttr *govAttr) +``` + +Description: +Sets the attribute of the current CPU frequency in use. The attribute corresponding to the governor used by the first frequency domain (**policy0**) is set. + +Parameters: + +Parameter|Type|Description +--------|---------|-------- +govAttrs|PWR_CPU_FreqGovAttrs*|Attribute of the frequency governor.
You need to specify the name and value of the attribute to be set. + +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
Other value: Failed. See the error codes for details. + +Note: +Different governor support different attributes. The attributes supported by the governor are stored in **/sys/devices/system/cpu/cpufreq/{gov}/**, where **{gov}** indicates the name of the current governor. + +#### Obtaining the CPU Frequency Range + +Definition: + +```c +PWR_API int PWR_CPU_GetFreqRange(PWR_CPU_FreqRange *freqRange) +``` + +Description: +Obtains the CPU frequency range. By default, the frequency range of the first frequency domain is obtained. + +Parameters: + +Parameter|Type|Description +--------|---------|-------- +freqRange|PWR_CPU_FreqRange*|Frequency range to obtain. + +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
Other value: Failed. See the error codes for details. + +#### Setting the CPU Frequency Range + +Definition: + +```c +PWR_API int PWR_CPU_SetFreqRange(const PWR_CPU_FreqRange *freqRange) +``` + +Description: +Sets the CPU frequency range. The frequency range will be set for all frequency domains. + +Parameters: + +Parameter|Type|Description +--------|---------|-------- +freqRange|PWR_CPU_FreqRange*|Frequency range to set. + +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
Other value: Failed. See the error codes for details. + +#### Obtaining the Current CPU Frequency + +Definition: + +```c +PWR_API int PWR_CPU_GetFreq(PWR_CPU_CurFreq curFreq[], uint32_t *num, int spec) +``` + +Description: +Obtains the current frequency of the frequency domain. + +Parameters: + +Parameter|Type|Description +--------|---------|-------- +curFreq|PWR_CPU_CurFreq[]|Frequency information of the current frequency domain of the policy to be queried.
When **spec** is set to 1, **policyId** of the corresponding member needs to be set.
The current frequency of the frequency domain will be output. +num|uint32_t *|Length of the **curFreq** array, indicating the number of policies to be queried.
The output is the length of the valid data returned by the system (the smaller value between the actual number of policies and the input **num**). +spec|int|Whether to obtain the information about one or more specific frequency domains.
0: No.
1: Yes. In this case, you need to set the **policyId** corresponding to the specific frequency domain in the **curFreq** member, for example, 32 or 64. + +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
Other value: Failed. See the error codes for details. + +#### Setting the Current CPU Frequency + +Definition: + +```c +PWR_API int PWR_CPU_SetFreq(const PWR_CPU_CurFreq curFreq[], uint32_t num) +``` + +Description: +Sets the frequency of the frequency domain, which can be set only when the CPU frequency governor is set to **userspace**. + +Parameters: + +Parameter|Type|Description +--------|---------|-------- +curFreq|PWR_CPU_CurFreq[]|Frequency domain to be set and its frequency list. +num|uint32_t|Length of the **curFreq** array, indicating the number of policies to be set. + +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
Other value: Failed. See the error codes for details. + +#### Obtaining the CPU Idle Ability and Status Information + +Definition: + +```c +PWR_API int PWR_CPU_GetIdleInfo(PWR_CPU_IdleInfo *idleInfo) +``` + +Description: +Obtains the CPU idle ability and status information. + +Parameters: + +Parameter|Type|Description +--------|---------|-------- +idleInfo|PWR_CPU_IdleInfo*|CPU idle ability and status information. + +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
Other value: Failed. See the error codes for details. + +#### Obtaining the CPU Idle Governor + +Definition: + +```c +PWR_API int PWR_CPU_GetIdleGovernor(char idleGov[], uint32_t size) +``` + +Description: +Obtains the CPU idle mode. + +Parameters: + +Parameter|Type|Description +--------|---------|-------- +idleGov|char[]|Governor name. +size|uint32_t|Size of the **idleGov** buffer. The minimum value is **PWR_MAX_ELEMENT_NAME_LEN(32)**. + +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
Other value: Failed. See the error codes for details. + +#### Setting the CPU Idle Governor + +Definition: + +```c +PWR_API int PWR_CPU_SetIdleGovernor(const char idleGov[]) +``` + +Description: +Sets the CPU idle mode. + +Parameters: + +Parameter|Type|Description +--------|---------|-------- +idleGov|char[]|Governor name, for example:**
ladder
menu
teo
haltpoll** + +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
Other value: Failed. See the error codes for details. + +#### Obtaining the CPU and DMA Latency + +Definition: + +```c +PWR_API int PWR_CPU_DmaGetLatency(int *latency) +``` + +Description: +Obtains the acceptable latency of the CPU and DMA. + +Parameters: + +Parameter|Type|Description +--------|---------|-------- +latency|int*|Latency (us). + +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
Other value: Failed. See the error codes for details. + +#### Setting the CPU and DMA Latency + +Definition: + +```c +PWR_API int PWR_CPU_DmaSetLatency(int latency) +``` + +Description: +Sets the acceptable latency of the CPU and DMA. + +Parameters: + +Parameter|Type|Description +--------|---------|-------- +latency|int*|Latency (us). Value range: \[0, 2000000000] + +Returns: + +Type|Description +--------|--------- +int|0: Succeeded.
Other value: Failed. See the error codes for details. + +Note: +The CPU requires different wake-up time in different C-states. The wake-up latency increases as the C-states get deeper. Therefore, the system checks the CPU and DMA latency before entering a C-state. If the latency in the C-state is longer than the CPU and DMA latency, the CPU does not enter the C-state. +Reference Wake-up Latency of Each C-state (us) + +C-state|Latency +--------|--------- +C0 POLL|0 +C1|2 +C1E|10 +C3|40 +C6|133 +C7S|166 +C8|300 +C9|600 +C10|2600 + +## Usage + +Save the following code as **powerapi_test.c**. + +```c +#include +#include +#include +#include +#include +#include + +#define MAIN_LOOP_INTERVAL 5 +#define TEST_FREQ 2400 +#define TEST_CORE_NUM 128 +#define AVG_LEN_PER_CORE 5 +#define TEST_CPU_DMA_LATENCY 2000 +#define TASK_INTERVAL 1000 +#define TASK_RUN_TIME 10 +#define TEST_FREQ_RANGE_MIN 500 +#define TEST_FREQ_RANGE_MAX 2500 + +static int g_run = 1; + +static void PrintResult(char *function, int ret) +{ + int length = 24; + printf("[TEST ] "); + printf("%-*s", length, function); + printf(":"); + if (ret == PWR_SUCCESS) { + printf("SUCCESS ret: %d\n", ret); + } else { + printf("ERROR ret: %d\n", ret); + } +} + +enum { + DEBUG = 0, + INFO, + WARNING, + ERROR +}; + +static const char *GetLevelName(int level) +{ + static char debug[] = "DEBUG"; + static char info[] = "INFO"; + static char warning[] = "WARNING"; + static char error[] = "ERROR"; + switch (level) { + case DEBUG: + return debug; + case INFO: + return info; + case WARNING: + return warning; + case ERROR: + return error; + default: + return info; + } +} + +void LogCallback(int level, const char *fmt, va_list vl) +{ + char logLine[4096] = {0}; + char message[4000] = {0}; + int length = 5; + + if (vsnprintf(message, sizeof(message) - 1, fmt, vl) < 0) { + return; + } + + printf("["); + printf("%-*s", length, GetLevelName(level)); + printf("] %s\n", message); +} + +static void SignalHandler(int none) +{ + g_run = 0; +} + +static void SetupSignal(void) +{ + // regist signal handler + (void)signal(SIGINT, SignalHandler); + (void)signal(SIGUSR1, SignalHandler); + (void)signal(SIGUSR2, SignalHandler); + (void)signal(SIGTERM, SignalHandler); + (void)signal(SIGKILL, SignalHandler); +} +/************************** COMMON ************************/ +static void TEST_PWR_SetLogCallback(void) +{ + int ret = -1; + ret = PWR_SetLogCallback(LogCallback); + PrintResult("PWR_SetLogCallback", ret); +} + +static void TEST_PWR_SetServerInfo(void) +{ + int ret = -1; + char str[] = "/etc/sysconfig/pwrapis/pwrserver.sock"; + ret = PWR_SetServerInfo(str); + PrintResult("PWR_SetServerInfo", ret); +} + +static void TEST_PWR_Register(void) +{ + while (PWR_Register() != PWR_SUCCESS) { + sleep(MAIN_LOOP_INTERVAL); + PrintResult("PWR_Register", PWR_ERR_COMMON); + continue; + } + PrintResult("PWR_Register", PWR_SUCCESS); +} + +static void TEST_PWR_RequestControlAuth(void) +{ + int ret = -1; + ret = PWR_RequestControlAuth(); + PrintResult("PWR_RequestControlAuth", ret); +} +/************************** COMMON END************************/ + +/***************************** CPU ***************************/ +static void TEST_PWR_CPU_GetInfo(void) +{ + int ret = -1; + PWR_CPU_Info *info = (PWR_CPU_Info *)malloc(sizeof(PWR_CPU_Info)); + if (!info) { + return; + } + bzero(info, sizeof(PWR_CPU_Info)); + ret = PWR_CPU_GetInfo(info); + PrintResult("PWR_CPU_GetInfo", ret); + printf(" arch: %s\n coreNum: %d\n maxFreq: %f\n minFreq: %f\n " + "modelName: %s\n numaNum: %d\n threadsPerCore: %d\n", info->arch, + info->coreNum, info->maxFreq, info->minFreq, info->modelName, info->numaNum, + info->threadsPerCore); + for (int i = 0; i < info->numaNum; i++) { + printf(" numa node[%d] cpuList: %s\n", info->numa[i].nodeNo, info->numa[i].cpuList); + } + free(info); +} + +static void TEST_PWR_CPU_GetFreq(void) +{ + int ret = -1; + int num = 0; + int spec = 0; + int i = 0; + + /** + * Test 1: spec = 0, get all policy freq. + * Set the num to the number of CPU cores + * (it is possible that one kernel corresponds to one policy) + */ + num = TEST_CORE_NUM; + spec = 0; + PWR_CPU_CurFreq cpuCurFreq1[num]; + bzero(cpuCurFreq1, num * sizeof(PWR_CPU_CurFreq)); + ret = PWR_CPU_GetFreq(cpuCurFreq1, &num, spec); + PrintResult("1 PWR_CPU_GetFreq", ret); + for (i = 0; i < num; i++) { + printf(" policy[%d]: %lf\n", cpuCurFreq1[i].policyId, cpuCurFreq1[i].curFreq); + } + + /** + * Test 2: spec = 0 num = 2. get the previous 2 policies freq + */ + ret = -1; + // 2: previous 2 policies + num = 2; + spec = 0; + PWR_CPU_CurFreq cpuCurFreq2[num]; + bzero(cpuCurFreq2, num * sizeof(PWR_CPU_CurFreq)); + ret = PWR_CPU_GetFreq(cpuCurFreq2, &num, spec); + PrintResult("2 PWR_CPU_GetFreq", ret); + for (i = 0; i < num; i++) { + printf(" policy[%d]: %lf\n", cpuCurFreq2[i].policyId, cpuCurFreq2[i].curFreq); + } + + /** + * Test 3: spec = 1, get the two target policy freq + */ + ret = -1; + // 2: previous 2 policies + num = 2; + spec = 1; + PWR_CPU_CurFreq cpuCurFreq3[num]; + bzero(cpuCurFreq3, num * sizeof(PWR_CPU_CurFreq)); + cpuCurFreq3[0].policyId = 0; + // 32 : the Id of the second policy. + cpuCurFreq3[1].policyId = 32; + ret = PWR_CPU_GetFreq(cpuCurFreq3, &num, spec); + PrintResult("3 PWR_CPU_GetFreq", ret); + for (i = 0; i < num; i++) { + printf(" policy[%d]: %lf\n", cpuCurFreq3[i].policyId, cpuCurFreq3[i].curFreq); + } +} + +static void TEST_PWR_CPU_SetFreq(void) +{ + int ret = -1; + int num = 1; + PWR_CPU_CurFreq cpuCurFreq[num]; + bzero(cpuCurFreq, num * sizeof(PWR_CPU_CurFreq)); + cpuCurFreq[0].policyId = 0; + cpuCurFreq[0].curFreq = TEST_FREQ; + ret = PWR_CPU_SetFreq(cpuCurFreq, num); + PrintResult("PWR_CPU_SetFreq", ret); + + int spec = 1; + bzero(cpuCurFreq, num * sizeof(PWR_CPU_CurFreq)); + cpuCurFreq[0].policyId = 0; + ret = PWR_CPU_GetFreq(cpuCurFreq, &num, spec); + printf(" current policy[%d]: %lf\n", cpuCurFreq[0].policyId, cpuCurFreq[0].curFreq); +} +/*************************** CPU END *************************/ + +int main(int argc, const char *args[]) +{ + /********** Common **********/ + TEST_PWR_SetServerInfo(); + TEST_PWR_SetLogCallback(); + TEST_PWR_Register(); + TEST_PWR_RequestControlAuth(); + + /************ CPU ***********/ + TEST_PWR_CPU_GetInfo(); + TEST_PWR_CPU_GetFreq(); + TEST_PWR_CPU_SetFreq(); + + PWR_ReleaseControlAuth(); + PWR_UnRegister(); + return 0; +} +``` + +Run `gcc` to compile the program. + +```sh +gcc powerapi_test.c -o powerapi_test -lpwrapi +``` + +Run the program to view the result. + +```sh +./powerapi_test +``` diff --git a/docs/en/server/performance/system_optimization/powerapi/getting_to_know_powerapi.md b/docs/en/server/performance/system_optimization/powerapi/getting_to_know_powerapi.md new file mode 100644 index 0000000000000000000000000000000000000000..319bef4a88af22956d6aeaa93b882da1e540aa61 --- /dev/null +++ b/docs/en/server/performance/system_optimization/powerapi/getting_to_know_powerapi.md @@ -0,0 +1,26 @@ +# Getting to Know powerapi + +## Background + +The power consumption of computing centers is increasing, and the power cost of enterprise data centers accounts for an increasing proportion of enterprise operation costs. The industry has shifted from simply pursuing server performance metrics to pursuing energy efficiency. +With the continuous improvement of the scale of processor integration, both servers and ultra-large-scale integrated computing systems need to consider energy efficiency. In terms of energy saving, software plays an important role. With the development of hardware, more power consumption metrics and control functions are generated. These functions require software participation to utilize the advantages. +openEuler provides powerapi, a lightweight API collection for unified power consumption management of user-mode programs. powerapi shields the complex OS power consumption system calls, especially the differences between interfaces on different hardware platforms, and provides a set of unified measurement and control services. + +## Overview + +powerapi of openEuler is a collection of APIs for managing system power consumption. it provides a standardized method to manage system power usage, including monitoring, adjusting, and optimizing system power consumption. powerapi helps system administrators better manage system energy consumption, thereby improving system efficiency and reliability and reducing energy costs. +powerapi provides unified energy efficiency control of the applications, especially the cluster scheduler. It can control the energy efficiency of the entire system to save energy. For example, powerapi detects the CPU load and the IPC/memory access miss rate, and adjusts the CPU frequency. +powerapi interfaces are provided as **.so** library functions. Currently, the x86 and Arm platforms are supported. + +## Features + +- Detects the power consumption of each device and the system running status. +- Detects whether the system automatically adjusts the frequency. +- Automatically adjusts the system working status based on the configured policy. + +## Components + +powerapi is provided as an RPM package, which contains the following two components: + +- pwrapis: a service process that provides power consumption management services for eagle and third-party systems. +- **libpwrapi.so**: powerapi SDK, which contains header files and is used for secondary development of applications. diff --git a/docs/en/server/performance/system_optimization/powerapi/installation_usage.md b/docs/en/server/performance/system_optimization/powerapi/installation_usage.md new file mode 100644 index 0000000000000000000000000000000000000000..d911a955c014e5938c613f2cf5897167669cf5bb --- /dev/null +++ b/docs/en/server/performance/system_optimization/powerapi/installation_usage.md @@ -0,0 +1,14 @@ +# Installation and Usage + +## Installation + +powerapi has been incorporated into openEuler22.03 LTS SP4. You can run the `yum` command to install powerapi: + +```sh +yum install powerapi +``` + +## Usage + +After powerapi is installed, pwarapis automatically runs to provide power consumption management services for eagle and third-party systems. +Currently, powerapi cannot be used through the CLI. To use a powerapi function, you need to install powerapi-devel and call the functions after the header file is included in the source code. For details, see [Development Using powerapi](development_using_powerapi.md). diff --git a/docs/en/server/performance/system_optimization/powerapi/powerapi.md b/docs/en/server/performance/system_optimization/powerapi/powerapi.md new file mode 100644 index 0000000000000000000000000000000000000000..a7d4d7d9328b4c2716dd5d7da74f47d10ab31e70 --- /dev/null +++ b/docs/en/server/performance/system_optimization/powerapi/powerapi.md @@ -0,0 +1,5 @@ +# powerapi User Guide + +This document describes how to install and use powerapi, the interface for controlling the power consumption of openEuler. + +This article is intended for community developers, open source enthusiasts, and partners who use the openEuler OS and want to learn and use powerapi. Users must have basic knowledge of the Linux OS. diff --git a/docs/en/server/quickstart/_toc.yaml b/docs/en/server/quickstart/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..11feb50e865b55990f41aa914aee6d8fc1130db3 --- /dev/null +++ b/docs/en/server/quickstart/_toc.yaml @@ -0,0 +1,6 @@ +label: Quick Start +isManual: true +description: Quickly install and use openEuler +sections: + - label: Quick Start + href: ./quick_start.md diff --git a/docs/en/server/quickstart/figures/Installation_wizard.png b/docs/en/server/quickstart/figures/Installation_wizard.png new file mode 100644 index 0000000000000000000000000000000000000000..fb37d64a8044cb86e9aaedad8c9d7c3fdae98264 Binary files /dev/null and b/docs/en/server/quickstart/figures/Installation_wizard.png differ diff --git a/docs/en/server/quickstart/figures/advanced-user-configuration.png b/docs/en/server/quickstart/figures/advanced-user-configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..5f8ffd97ab2b18eb98bda88534b5ba03ce0f769a Binary files /dev/null and b/docs/en/server/quickstart/figures/advanced-user-configuration.png differ diff --git a/docs/en/server/quickstart/figures/creating-a-user.png b/docs/en/server/quickstart/figures/creating-a-user.png new file mode 100644 index 0000000000000000000000000000000000000000..9ccb1c98230108646a5f49cfafb1be399eec584c Binary files /dev/null and b/docs/en/server/quickstart/figures/creating-a-user.png differ diff --git a/docs/en/server/quickstart/figures/drive-icon.png b/docs/en/server/quickstart/figures/drive-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b41fcb09dfbf805da4863142855e7c2de4bf4c7b Binary files /dev/null and b/docs/en/server/quickstart/figures/drive-icon.png differ diff --git a/docs/en/server/quickstart/figures/en-us_image_0229420473.png b/docs/en/server/quickstart/figures/en-us_image_0229420473.png new file mode 100644 index 0000000000000000000000000000000000000000..86c61a4b8e2a5795baff2fc74629924d01d7b97b Binary files /dev/null and b/docs/en/server/quickstart/figures/en-us_image_0229420473.png differ diff --git a/docs/en/server/quickstart/figures/image-dialog-box.png b/docs/en/server/quickstart/figures/image-dialog-box.png new file mode 100644 index 0000000000000000000000000000000000000000..caeb56bb46f766dd39d66a65e308c591954d32cf Binary files /dev/null and b/docs/en/server/quickstart/figures/image-dialog-box.png differ diff --git a/docs/en/server/quickstart/figures/installation-process.png b/docs/en/server/quickstart/figures/installation-process.png new file mode 100644 index 0000000000000000000000000000000000000000..8b7d5361693eaa2eb9ecb457aa9b14fa6e08abb6 Binary files /dev/null and b/docs/en/server/quickstart/figures/installation-process.png differ diff --git a/docs/en/server/quickstart/figures/installation-summary.png b/docs/en/server/quickstart/figures/installation-summary.png new file mode 100644 index 0000000000000000000000000000000000000000..83dd0d2d68b446807c6a82f24409535c6e150541 Binary files /dev/null and b/docs/en/server/quickstart/figures/installation-summary.png differ diff --git a/docs/en/server/quickstart/figures/password-of-the-root-account.png b/docs/en/server/quickstart/figures/password-of-the-root-account.png new file mode 100644 index 0000000000000000000000000000000000000000..97c52081490f5fdaf733f7c45dd91e99a81eb1db Binary files /dev/null and b/docs/en/server/quickstart/figures/password-of-the-root-account.png differ diff --git a/docs/en/server/quickstart/figures/restart-icon.png b/docs/en/server/quickstart/figures/restart-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a1b02b2dff42c90845d2491192507ea6967352e3 Binary files /dev/null and b/docs/en/server/quickstart/figures/restart-icon.png differ diff --git a/docs/en/server/quickstart/figures/selecting-a-language.png b/docs/en/server/quickstart/figures/selecting-a-language.png new file mode 100644 index 0000000000000000000000000000000000000000..73a3a7ae52f88fd396b30971e39d96f5710a94d1 Binary files /dev/null and b/docs/en/server/quickstart/figures/selecting-a-language.png differ diff --git a/docs/en/server/quickstart/figures/selecting-installation-software.png b/docs/en/server/quickstart/figures/selecting-installation-software.png new file mode 100644 index 0000000000000000000000000000000000000000..6c51b6ec9a78aa5d411dbef05b4218953f90a893 Binary files /dev/null and b/docs/en/server/quickstart/figures/selecting-installation-software.png differ diff --git a/docs/en/server/quickstart/figures/setting-the-boot-device.png b/docs/en/server/quickstart/figures/setting-the-boot-device.png new file mode 100644 index 0000000000000000000000000000000000000000..42455bcd651b98a08b012b275d5f170daf07ac59 Binary files /dev/null and b/docs/en/server/quickstart/figures/setting-the-boot-device.png differ diff --git a/docs/en/server/quickstart/figures/setting-the-installation-destination.png b/docs/en/server/quickstart/figures/setting-the-installation-destination.png new file mode 100644 index 0000000000000000000000000000000000000000..05d2e071983324563991e919a61f4d0690d543f6 Binary files /dev/null and b/docs/en/server/quickstart/figures/setting-the-installation-destination.png differ diff --git a/docs/en/server/quickstart/public_sys-resources/icon-caution.gif b/docs/en/server/quickstart/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/quickstart/public_sys-resources/icon-caution.gif differ diff --git a/docs/en/server/quickstart/public_sys-resources/icon-danger.gif b/docs/en/server/quickstart/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/quickstart/public_sys-resources/icon-danger.gif differ diff --git a/docs/en/server/quickstart/public_sys-resources/icon-note.gif b/docs/en/server/quickstart/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/server/quickstart/public_sys-resources/icon-note.gif differ diff --git a/docs/en/server/quickstart/public_sys-resources/icon-notice.gif b/docs/en/server/quickstart/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/en/server/quickstart/public_sys-resources/icon-notice.gif differ diff --git a/docs/en/server/quickstart/public_sys-resources/icon-tip.gif b/docs/en/server/quickstart/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/en/server/quickstart/public_sys-resources/icon-tip.gif differ diff --git a/docs/en/server/quickstart/public_sys-resources/icon-warning.gif b/docs/en/server/quickstart/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/quickstart/public_sys-resources/icon-warning.gif differ diff --git a/docs/en/server/quickstart/quick_start.md b/docs/en/server/quickstart/quick_start.md new file mode 100644 index 0000000000000000000000000000000000000000..6729bd4b05791ea24da87850019f6a4a2736b465 --- /dev/null +++ b/docs/en/server/quickstart/quick_start.md @@ -0,0 +1,273 @@ +# Quick Start + +This document uses openEuler 22.03 LTS SP4 installed on the TaiShan 200 server as an example to describe how to quickly install and use openEuler OS. For details about the installation requirements and methods, see the [Installation Guide](./../installation_upgrade/installation/installation_guide.md). + +## Making Preparations + +- Hardware Compatibility + + [Table 1](#table14948632047) describes the types of supported servers. + + **Table 1** Supported servers + + + + | Server Type | Server Name | Server Model | + | :---- | :---- |:---- | + | Rack server| TaiShan 200 | 2280 balanced model | + | Rack server | FusionServer Pro | FusionServer Pro 2288H V5

NOTE:
The server must be configured with the Avago SAS3508 RAID controller card and the LOM-X722 NIC.| + +- Minimum Hardware Specifications + + [Table 2](#tff48b99c9bf24b84bb602c53229e2541) lists the minimum hardware specifications supported by openEuler. + + **Table 2** Minimum hardware requirements + + + + | Component | Minimum Hardware Specifications | Description | + | :----------- | :-------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | Architecture |
  • AArch64
  • x86_64
|
  • 64-bit Arm architecture
  • 64-bit Intel x86 architecture
| + | CPU |
  • Huawei Kunpeng 920 series
  • Intel ® Xeon® processor
| - | + | Memory | ≥ 4 GB (8 GB or higher recommended for better user experience) | - | + | Drive | ≥ 120 GB (for better user experience) |
  • IDE, SATA, and SAS drives are supported.
  • A driver software is required to use the NVMe drive with the DIF feature. Contact the drive manufacturer if the feature is not available.
| + +## Obtaining the Installation Source + +Perform the following operations to obtain the openEuler release package: + +1. Visit the [openEuler](https://www.openeuler.org/en/) website. +2. Click **Downloads**. +3. Click **Community Editions**. The version list is displayed. +4. Click **Download** on the right of **openEuler 22.03-LTS-SP4**. +5. Download the required openEuler release package and the corresponding verification file based on the architecture and scenario. + 1. If the architecture is AArch64: + 1. Click **AArch64**. + 2. For local installation, download the **Offline Standard ISO** or **Offline Everything ISO** release package **openEuler-22.03-LTS-SP4-(everything-)aarch64-dvd.iso** to the local host. + 3. For network installation, download the **Network Install ISO** release package **openEuler-22.03-LTS-SP4-netinst-aarch64-dvd.iso** to the local host. + 2. If the architecture is x86_64: + 1. Click **x86_64**. + 2. For local installation, download the **Offline Standard ISO** or **Offline Everything ISO** release package **openEuler-22.03-LTS-SP4-(everything-)x86_64-dvd.iso** to the local host. + 3. For network installation, download the **Network Install ISO** release package **openEuler-22.03-LTS-SP4-netinst-x86_64-dvd.iso** to the local host. + +## Checking the Release Package Integrity + +To prevent incomplete download of the software package due to network or storage device problems during the transmission, you need to check the integrity of the obtained openEuler software package. + +### Prerequisites + +The following files need to be prepared: + +ISO file: openEuler-22.03-LTS-SP4-aarch64-dvd.iso + +Verification file: Copy and save the SHA256 value corresponding to the ISO file. + +### Verification Procedure + +1. Calculate the SHA256 verification value of the file. Run the following command: + + ```shell + sha256sum openEuler-22.03-LTS-SP4-aarch64-dvd.iso + ``` + + After the command is run, the verification value is displayed. + +2. Check whether the verification value is the same as that in the local verification file. + + If the verification values are the same, the .iso file is not damaged. If they are not the same, the file is damaged and you need to obtain the file again. + +## Starting Installation + +1. Log in to the iBMC WebUI. + + For details, see [TaiShan 200 Server User Guide (Model 2280)](https://support.huawei.com/enterprise/en/doc/EDOC1100093459). + +2. Choose **Configuration** from the main menu, and select **Boot Device** from the navigation tree. The **Boot Device** page is displayed. + + Set **Effective** and **Boot Medium** to **One-time** and **DVD-ROM**, respectively, and click **Save**, as shown in [Figure 1](#fig1011938131018). + + **Figure 1** Setting the boot device
+![](./figures/setting-the-boot-device.png) + +3. Choose **Remote Console** from the main menu. The **Remote Console** page is displayed. + + Select an integrated remote console as required to access the remote virtual console, for example, **Java Integrated Remote Console (Shared)**. + +4. On the toolbar, click the icon shown in the following figure. + + **Figure 2** Drive icon +![](./figures/drive-icon.png) + + An image dialog box is displayed, as shown in the following figure. + + **Figure 3** Image dialog box +![](./figures/image-dialog-box.png) + +5. Select **Image File** and then click **Browse**. The **Open** dialog box is displayed. + +6. Select the image file and click **Open**. In the image dialog box, click **Connect**. If **Connect** changes to **Disconnect**, the virtual CD/DVD-ROM drive is connected to the server. + +7. On the toolbar, click the restart icon shown in the following figure to restart the device. + + **Figure 4** Restart icon +![](./figures/restart-icon.png) + +8. A boot menu is displayed after the system restarts, as shown in [Figure 5](#fig1648754873314). + + > [!NOTE] **NOTE:** + > + > - If you do not perform any operations within 1 minute, the system automatically selects the default option **Test this media \& install openEuler 22.03_LTS_SP4** and enters the installation page. + > - During physical machine installation, if you cannot use the arrow keys to select boot options and the system does not respond after you press **Enter**, click ![](./figures/en-us_image_0229420473.png) on the BMC page and configure **Key \& Mouse Reset**. + + **Figure 5** Installation wizard + ![](./figures/Installation_wizard.png) + +9. On the installation wizard page, press **Enter** to select the default option **Test this media \& install openEuler 22.03_LTS_SP4** to enter the GUI installation page. + +## Performing Installation + +After entering the GUI installation page, perform the following operations to install the system: + +1. Set an installation language. The default language is English. You can change the language based on the site requirements, as shown in [Figure 6](#fig874344811484). + + **Figure 6** Selecting a language + ![](./figures/selecting-a-language.png) + +2. On the **INSTALLATION SUMMARY** page, set configuration items based on the site requirements. + + - A configuration item with an alarm symbol must be configured. When the alarm symbol disappears, you can perform the next operation. + - A configuration item without an alarm symbol is configured by default. + - You can click **Begin Installation** to install the system only when all alarms are cleared. + + **Figure 7** Installation summary + ![](./figures/installation-summary.png) + + 1. Select **Software Selection** to set configuration items. + + Based on the site requirements, select **Minimal Install** on the left box and select an add-on in the **Add-Ons for Selected Environment** area on the right, as shown in [Figure 8](#fig1133717611109). + + **Figure 8** Selecting installation software + ![](./figures/selecting-installation-software.png) + + > [!NOTE] **NOTE:** + > + > - In **Minimal Install** mode, not all packages in the installation source are installed. If a required package is not installed, you can mount the installation source to the local host as a repo source, and use DNF to install the package. + > - If you select **Virtual Host**, the virtualization components QEMU, libvirt, and edk2 are installed by default. You can select whether to install components such as OVS in the add-on area. + + After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. + + 2. Select **Installation Destination** to set configuration items. + + On the **INSTALLATION DESTINATION** page, select a local storage device. + + > [!TIP] **NOTICE:** + > + >- The NVMe data protection feature is not supported because the NVMe drivers built in the BIOSs of many servers are of earlier versions. (Data protection: Format disk sectors to 512+N or 4096+N bytes.) Therefore, when selecting a proper storage medium, do not select an NVMe SSD with data protection enabled as the system disk. Otherwise, the OS may fail to boot. + >- You can consult the server vendor about whether the BIOS supports NVMe disks with data protection enabled as system disks. If you cannot confirm whether the BIOS supports NVMe disks with data protection enabled as system disks, you are not advised to use an NVMe disk to install the OS, or you can disable the data protection function of an NVMe disk to install the OS. + + You also need to configure the storage to partition the system. You can either manually configure partitions or select **Automatic** for automatic partitioning. Select **Automatic** if the system is installed in a new storage device or the data in the storage device is not required, as shown in [Figure 9](#fig153381468101). + + **Figure 9** Setting the installation destination + ![](./figures/setting-the-installation-destination.png) + + > [!NOTE] **NOTE:** + > + > - During partitioning, to ensure system security and performance, you are advised to configure the following partitions: **/boot**, **/var**, **/var/log**, **/var/log/audit**, **/home**, and **/tmp**. + > - If the system is configured with the **swap** partition, the **swap** partition is used when the physical memory of the system is insufficient. Although the **swap** partition can be used to expand the physical memory, when the **swap** partition is used due to insufficient memory, the system responds slowly and the system performance deteriorates. Therefore, you are advised not to configure the **swap** partition in a system with sufficient physical memory or a performance-sensitive system. + > - If you need to split a logical volume group, select **Custom** to manually partition the logical volume group. On the **MANUAL PARTITIONING** page, click **Modify** in the **Volume Group** area to reconfigure the logical volume group. + + After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. + + 3. Select **Root Password** and set the root password. + + On the **ROOT PASSWORD** page, enter a password that meets the **Password Complexity** requirements and confirm the password, as shown in [Figure 10](#fig_root_password). + + > [!NOTE] **NOTE:** + > + > - The **root** account is used to perform key system management tasks. You are not advised to use the **root** account for daily work or system access. + > + > - If you select **Lock root account** on the **Root Password** page, the **root** account will be disabled. + + **Password Complexity** + + The password of the **root** user or a new user must meet the password complexity requirements. Otherwise, the password setting or user creation will fail. The password must meet the following requirements: + + 1. Contains at least eight characters. + + 2. Contains at least three of the following: uppercase letters, lowercase letters, digits, and special characters. + + 3. Different from the user name. + + 4. Not allowed to contain words in the dictionary. + + > [!NOTE] **NOTE:** + > In the openEuler environment, you can run the `cracklib-unpacker /usr/share/cracklib/pw_dict > dictionary.txt` command to export the dictionary library file **dictionary.txt**. You can check whether the password is in this dictionary. + + **Figure 10** Root password + ![](./figures/password-of-the-root-account.png) + + After the settings are completed, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. + + 4. Select **Create a User** and set the parameters. + + [Figure 11](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1237715313319) shows the page for creating a user. Enter the user name and set the password. The password complexity requirements are the same as those of the root password. In addition, you can set the home directory and user group by clicking **Advanced**, as shown in [Figure 12](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1237715313319). + + **Figure 11** Creating a use + ![](./figures/creating-a-user.png) + + **Figure 12** Advanced user configuration + ![](./figures/advanced-user-configuration.png) + + After the settings are completed, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. + + 5. Set other configuration items. You can use the default values for other configuration items. + +3. Click **Start the Installation** to install the system, as shown in [Figure 13](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1237715313319). + + **Figure 13** Starting the installation + ![](./figures/installation-process.png) +4. After the installation is completed, restart the system. + + openEuler has been installed. Click **Reboot** to restart the system. + +## Viewing System Information + +After the system is installed and restarted, the system CLI login page is displayed. Enter the username and password set during the installation to log in to openEuler and view the following system information. For details about system management and configuration, see the [openEuler 22.03_LTS_SP4 Administrator Guide](https://openeuler.org/en/docs/22.03_LTS_SP4/docs/Administration/administration.html))). + +- View the system information: + + ```shell + $ cat /etc/os-release + NAME="openEuler" + VERSION="22.03 (LTS-SP4)" + ID="openEuler" + VERSION_ID="22.03" + PRETTY_NAME="openEuler 22.03 (LTS-SP4)" + ANSI_COLOR="0;31" + ``` + +- View system resource information. + + View the CPU information. + + ```shell + lscpu + ``` + + View the memory information. + + ```shell + free + ``` + + View the drive information. + + ```shell + fdisk -l + ``` + +- View the IP addresses. + + ```shell + ip addr + ``` diff --git a/docs/en/server/releasenotes/_toc.yaml b/docs/en/server/releasenotes/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3ca7ef2f201ce94efe3129000d9050de57735600 --- /dev/null +++ b/docs/en/server/releasenotes/_toc.yaml @@ -0,0 +1,28 @@ +label: Release Notes +isManual: true +description: Release notes for openEuler 24.03 LTS SP4 +sections: + - label: Introduction + href: ./introduction.md + - label: Terms of Use + href: ./terms_of_use.md + - label: User Notice + href: ./user_notice.md + - label: Account List + href: ./account_list.md + - label: OS Installation + href: ./os_installation.md + - label: Key Features + href: ./key_features.md + - label: Known Issues + href: ./known_issues.md + - label: Resolved Issues + href: ./resolved_issues.md + - label: Common Vulnerabilities and Exposures (CVEs) + href: ./cve.md + - label: Source Code + href: ./source_code.md + - label: Contribution + href: ./contribution.md + - label: Acknowledgment + href: ./acknowledgment.md diff --git a/docs/en/server/releasenotes/account_list.md b/docs/en/server/releasenotes/account_list.md new file mode 100644 index 0000000000000000000000000000000000000000..f31dceb5e3927466715cc79a2f425125d6858e0e --- /dev/null +++ b/docs/en/server/releasenotes/account_list.md @@ -0,0 +1,6 @@ +# Account List + +| User Name| Default Password | Function | User Status| Login Mode | Remarks | +| ------ | ------------- | ------------------ | -------- | ------------------ | ------------------------------------------------------------ | +| root | openEuler12#$ | Default user of the VM image| Enabled | Remote login | This account is used to log in to the VM installed using the openEuler VM image. | +| root | openEuler#12 | GRUB2 login | Enabled | Local login and remote login| GRand UnifiedBootloader (GRUB) is used to boot different systems, such as Windows and Linux.
GRUB2 is an upgraded version of GRUB. When the system is started, you can modify startup parameters on the GRUB2 GUI. To ensure that the system startup parameters are modified with authorization, you need to encrypt the GRUB2 GUI. The GRUB2 GUI can be modified only when you enter the correct GRUB2 password.| diff --git a/docs/en/server/releasenotes/acknowledgment.md b/docs/en/server/releasenotes/acknowledgment.md new file mode 100644 index 0000000000000000000000000000000000000000..b469785cbeda8f4b08b6f8c55988288913d45e56 --- /dev/null +++ b/docs/en/server/releasenotes/acknowledgment.md @@ -0,0 +1,3 @@ +# Acknowledgment + +We sincerely thank all the members who participated in and assisted in the openEuler project. It is your hard work to make the version released successfully and provide the possibility for the better development of openEuler. diff --git a/docs/en/server/releasenotes/contribution.md b/docs/en/server/releasenotes/contribution.md new file mode 100644 index 0000000000000000000000000000000000000000..b375fe45b434717bbb12b66ef3d1e9d6cba8333a --- /dev/null +++ b/docs/en/server/releasenotes/contribution.md @@ -0,0 +1,21 @@ +# Contribution + +As an openEuler user, you can contribute to the openEuler community in multiple ways. For details about how to contribute to the community, see [How to Contribute](https://www.openeuler.org/en/community/contribution/). Here, some methods are listed for reference. + +## Special Interest Groups \(SIGs\) + +openEuler brings together people of common interest to form different special interest groups \(SIGs\). For details about existing SIGs, see the [SIG list](https://www.openeuler.org/en/sig/sig-list/). + +You are welcome to join an existing SIG or create a SIG. For details about how to create a SIG, see the [SIG Management Procedure](https://gitee.com/openeuler/community/blob/master/en/technical-committee/governance/). + +## Mail List and Tasks + +You are welcome to actively help users solve problems raised in the [mail list](https://www.openeuler.org/en/community/mailing-list/) and issues \(including [code repository issues](https://gitee.com/organizations/openeuler/issues) and [software package repository issues](https://gitee.com/organizations/src-openeuler/issues)\). In addition, you can submit an issue. All these will help the openEuler community to develop better. + +## Documents + +You can contribute to the community by submitting code. We also welcome your feedback on problems and difficulties, or suggestions on improving the usability and integrity of documents. For example, problems in obtaining software or documents and difficulties in using the system. Welcome to pay attention to and improve the documentation module of the [openEuler community](https://openeuler.org/en/). + +## IRC + +openEuler has also opened a channel in IRC as an additional channel to provide community support and interaction. For details, see [openEuler IRC](https://gitee.com/openeuler/community/tree/master/en/communication). diff --git a/docs/en/server/releasenotes/cve.md b/docs/en/server/releasenotes/cve.md new file mode 100644 index 0000000000000000000000000000000000000000..482c72e54fb3d21b29bd010625c531ccc72efc4e --- /dev/null +++ b/docs/en/server/releasenotes/cve.md @@ -0,0 +1,3 @@ +# Common Vulnerabilities and Exposures (CVEs) + +For details about the CVEs involved in the version, see the [CVE list](https://www.openeuler.org/en/security/cve/). diff --git a/docs/en/server/releasenotes/introduction.md b/docs/en/server/releasenotes/introduction.md new file mode 100644 index 0000000000000000000000000000000000000000..057dceded11034e8241c78e02f88bba37cef7b54 --- /dev/null +++ b/docs/en/server/releasenotes/introduction.md @@ -0,0 +1,3 @@ +# Introduction + +openEuler is an open-source operating system. The current openEuler kernel is based on Linux and supports Kunpeng and other processors. It fully unleashes the potential of computing chips. As an efficient, stable, and secure open-source OS built by global open-source contributors, openEuler applies to database, big data, cloud computing, and artificial intelligence \(AI\) scenarios. In addition, openEuler community is an open-source community for global OSs. Through community cooperation, openEuler builds an innovative platform, builds a unified and open OS that supports multiple processor architectures, and promotes the prosperity of the software and hardware application ecosystem. diff --git a/docs/en/server/releasenotes/key_features.md b/docs/en/server/releasenotes/key_features.md new file mode 100644 index 0000000000000000000000000000000000000000..fe7b08f94c7fdc2129aac65f5eb8b17056bf3da7 --- /dev/null +++ b/docs/en/server/releasenotes/key_features.md @@ -0,0 +1,388 @@ +# Key Features + +## AI + +AI is redefining OSs by powering intelligent development, deployment, and O&M. openEuler supports general-purpose architectures like Arm, x86, and RISC-V, and next-gen AI processors like NVIDIA and Ascend. Further, openEuler is equipped with extensive AI capabilities that have made it a preferred choice for diversified computing power. + +- **openEuler for AI**: openEuler offers an efficient development and runtime environment that containerizes software stacks of AI platforms with out-of-the-box availability. + + - openEuler supports TensorFlow and PyTorch frameworks and software development kits (SDKs) of major computing architectures, such as Compute Architecture for Neural Networks (CANN) and Compute Unified Architecture (CUDA), to make it easy to develop and run AI applications. + + - Environment setup is further simplified by containerizing software stacks. openEuler provides three types of container images: + + 1. **SDK images**: Use openEuler as the base image and install the SDK of a computing architecture, for example, Ascend CANN and NVIDIA CUDA. + + 2. **AI framework images**: Use the SDK image as the base and install AI framework software, such as PyTorch and TensorFlow. + + 3. **Model application images**: Provide a complete set of toolchains and model applications. + +- **AI for openEuler**: AI makes openEuler more intelligent. EulerCopilot, an intelligent Q&A platform, is developed using foundation models and openEuler data. It assists in code generation, problem analysis, and system O&M. + + - **EulerCopilot**: EulerCopilot is accessible via web or shell. + + 1. **Web**: Provides basic OS knowledge, openEuler data, O&M methods, and project introduction and usage guidance. + + 2. **Shell**: Delivers user-friendly experience using natural languages. + +## Embedded + +openEuler 22.03 LTS SP4 Embedded is equipped with an embedded virtualization base that is available in the Jailhouse virtualization solution or the OpenAMP lightweight hybrid deployment solution. You can select the most appropriate solution to suite your services. openEuler 22.03 LTS SP4 Embedded supports the Robot Operating System (ROS) Humble version, which integrates core software packages such as ros-core, rosbase, and simultaneous localization and mapping (SLAM) to meet the ROS 2 runtime requirements. + +- **Southbound ecosystem**: Currently, openEuler Embedded supports AArch64 and x86-64 architectures. In 22.03 LTS SP4, RK3588 chips are supported. In the future, Loongson and Phytium processors will be supported. + +- **Embedded elastic virtualization base**: The elastic virtualization base of openEuler Embedded is a collection of technologies used to enable multiple OSs to run on a system-on-a-chip (SoC). These technologies include bare metal, embedded virtualization, lightweight containers, LibOS, trusted execution environment (TEE), and heterogeneous deployment. + +- **Mixed criticality deployment framework**: The mixed-criticality (MICA) deployment framework is built on the converged elastic base. The unified framework masks the differences between the technologies used in the underlying elastic virtualization base, enabling Linux to be deployed together with other OSs. + +- **Northbound ecosystem**: More than 350 common embedded software packages can be built using openEuler. The ROS 2 Humble version is supported, which contains core software packages such as ros-core, ros-base, and SLAM. The ROS SDK is provided to simplify embedded ROS development. The soft real-time capability allows for response to soft real-time interrupts within microseconds. DSoftBus and HiChain for point-to-point authentication of OpenHarmony have been integrated to implement interconnection between openEuler-based embedded devices and between openEuler-based embedded devices and OpenHarmony-based devices. iSulad containers are supported so that openEuler or other OS containers can be deployed on embedded devices to simplify application porting and deployment. + +- **UniProton**: This hard RTOS features ultra-low latency and flexible MICA deployments. It is suited for industrial control because it supports both microcontroller units and multi-core CPUs. + +## What's New in the openEuler Kernel + +openEuler 22.03 LTS SP4 runs on Linux kernel 5.10. It inherits the competitive advantages of community versions and innovative features released in the openEuler community. + +- **Dynamic memory isolation and release**: Memory pages are dynamically isolated and de-isolated. When isolated, the original memory is migrated safely. + +- **Online CPU inspection**: To avoid silent data corruption that is a common cause of data loss, faulty cores are detected and isolated to prevent faults before they are exacerbated. + +- **Adaptive provisioning of computing power**: To ensure consistency and reliability of certain applications (such as cloud desktop systems) running on multi-core servers, computing power is dynamically provisioned based on load changes. + +- **Power-aware scheduling**: At the service layer, memory access bandwidth, CPU load, and other information are collected to ensure sufficient resources for critical threads. A physical topology is introduced so that the P-state control mechanism extends to new dimensions, further reducing power consumption beyond the limits of single-die frequency and voltage regulation. This feature minimizes power consumption when the service load is low + +- **Enhanced core isolation**: CPUs are classified into housekeeping and non-housekeeping. The former executes background processes such as periodic system clock maintenance, while the latter executes service processes. Background processes and interrupts are all allocated to housekeeping CPUs to prevent noise from affecting service process. This enhanced core isolation improves service performance, especially needed for HPC workloads. + +- **Performance monitor unit (PMU) indicators**: When multiple services share node resources, indicators such as PSI are used to measure system contention, service throughput, and delay. These indicators are essential to locating system resource bottlenecks, understanding the resource demand of specific service processes, and dynamically adjusting resource allocation. This improves the quality of online services and system health. + +- **KVM TDP MMU**: In Linux kernel 5.10 and later, KVM can scale to match demand for memory virtualization. This feature is contributed by Intel to the openEuler community. Compared with the traditional KVM memory management unit (MMU), the two dimensional paging MMU, or TDP MMU, offers more efficient handling of concurrent page faults and better support for large-scale VM deployments, such as those with multiple vCPUs and large memory. In addition, the new Extended Page Tables (EPT) and Nested Page Tables (NPT) traversal interface boosts host memory utilization by removing the dependency on the rmap data structure that is typical in traditional memory virtualization solutions. + +## NestOS + +NestOS is a cloud OS incubated in the openEuler community. It runs rpm-ostree and Ignition technologies over a dual rootfs and atomic update design, and uses nestos-assembler for quick integration and build. NestOS is compatible with Kubernetes and OpenStack, and reduces container overheads and provides extensive cluster components in large-scale containerized environments. + +- **Out-of-the-box availability**: integrates popular container engines such as iSulad, Docker, and Podman to provide lightweight and tailored OSs for the cloud. +- **Easy configuration**: uses the Ignition utility to install and configure a large number of cluster nodes with a single configuration. +- **Secure management**: runs rpm-ostree to manage software packages and works with the openEuler software package source to ensure secure and stable atomic updates. +- **Hitless node updating**: uses Zincati to provide automatic node updates and reboot without interrupting services. +- **Dual rootfs**: executes dual rootfs for active/standby switchovers, to ensure integrity and security during system running. + +## SysCare + +SysCare is a system-level hotfix software that provides security patches and hot fixing for OSs. It can fix system errors without restarting hosts. SysCare combines kernel-mode and user-mode hot patching to take over system repair, saving time for users to focus on other aspects of their business. It includes hot patch making, hot patch lifecycle management, and and integration of user-mode hot patches for ELF files, kernel hot patches, and user-mode hot patches. The following features are added in openEuler 22.03 LTS SP4: + +- Configures the dependencies of hot patches when they are created. +- Manages multiple user-mode patches. +- Detects conflicts between user-mode hot patches. +- Forcibly overwrites user-mode hot patches when conflicts occur. + +## GCC for openEuler + +GCC for openEuler is a high-performance compiler oriented to the openEuler ecosystem for various scenarios. It is developed on the open source GNU Compiler Collection (GCC) and inherits the capabilities of the open source GCC. GCC for openEuler optimizes C, C++, and Fortran deployments in terms of instructions, memory, and automatic vectorization, to adapt to and unleash the compute of hardware platforms, such as Kunpeng, Phytium, and LoongArch. New capabilities of GCC for openEuler include: + +- Multiple GCC versions now support OpenMP, including the gcc-toolset-12 package series that run on GCC 12.3.0. Fortran supports OpenMP 4.5, while C/C++ supports some OpenMP 5.0 specifications. +- Last-level cache (LLC) allocation is optimized. By analyzing memory multiplexing on the main execution paths in a program, GCC for openEuler determines and sorts hot data. Then, prefetch instructions are inserted to pre-allocate data to the LLC, reducing LLC misses. +- Optimizations of CPUBench help intelligently identify and reduce instructions while boosting performance. + +## A-Ops + +A-Ops is an intelligent O&M platform that covers data collection, health check, and fault diagnosis and rectification. Released with openEuler 22.03 LTS SP4, Apollo is an intelligent patch management framework that integrates core functions such as vulnerability scanning, CVE fixing (with cold/hot patches), and hot patching rollback. Apollo periodically downloads and synchronizes security advisories and sets scheduled tasks to scan for vulnerabilities. + +Apollo enables the intelligent management of kernel patches. + +- **Hot patch source management**: When openEuler vulnerabilities are released through a security advisory, the software package used for fixing the vulnerabilities is also released in the update repository. By default, after openEuler is installed, the cold patch update repository of the corresponding OS version is provided. Users can also configure the update repository of cold or hot patches. +- **Vulnerability scanning**: Manual or periodic cluster scans can be performed to check the impact of CVEs on a cluster and cold or hot patches are provided for repair. +- **Hybrid patch management**: Cold and hot patches can be applied independently or together to implement silent incorporation of hot patches on the live network and reduce hot patch maintenance costs. +- **Hot patch lifecycle management**: hot patch removal, rollback, and query + +## Gazelle + +Gazelle is a high-performance user-mode protocol stack. It directly reads and writes NIC packets in user mode based on the Data Plane Development Kit (DPDK), transmits the packets through shared hugepage memory, and uses the LwIP protocol stack, thereby greatly improving the network I/O throughput of applications and accelerating the network for databases. With Gazelle, high performance and universality can be achieved at the same time. In openEuler 22.03 LTS SP4, support for the UDP protocol and related interfaces is added for Gazelle to enrich the user-mode protocol stack. + +- Available in single VLAN, bond4, and bond6 modes, and supports NIC self-healing after network cables are reinstalled. +- A single-instance Redis application on Kunpeng 920 VMs supports over 5,000 connections, improving performance by more than 30%. +- The TCP_STREAM and TCP_RR tests of netperf (packet length less than 1,463 bytes) are supported. +- Logs of the LStack, lwIP, and gazellectl modules of Gazelle are refined for more accurate fault locating. + +## OCI Runtime for iSulad + +Open Container Initiative (OCI) is a lightweight and open governance project dedicated to creating an open industry standard for container formats and runtimes. Developed with the support of the Linux Foundation, it aims to let any container runtimes that support OCI Runtime use OCI images to run containers. iSulad is a lightweight container engine compatible with mainstream container ecosystems, and supports standard southbound OCI APIs and can connect to multiple OCI runtimes, such as runc and kata. + +As OCI has matured dramatically in the last few years, container runtimes that comply with OCI Runtime have been fitting into an expanding scope of application scenarios. runc is the first reference implementation of OCI Runtime. In the current openEuler version: + +- The interconnection between iSulad and OCI Runtime is optimized, known defects are rectified, and the `isula top` and `isula attach` interfaces are added. +- runc is set as the default runtime for iSulad. +- After the default runtime is switched to runc, the dependency library of isulad-shim connected to OCI Runtime is changed to an independent and tailored static tool library. +The switchover avoids existing process breakdowns caused by tool library upgrades, and reduces the memory overhead of containers. + +## Distributed Data Management + +The distributed data management system is a data management capability ported from the OpenHarmony community. This system encapsulates over 100 universal APIs that adopt DSoftBus dynamic networking to provide a range of data synchronization, such as strong and weak consistency, for each device node on the network. + +- **Feature Description** + + - **Relational database**: manages data based on a relational model. It uses SQLite as the underlying persistent storage engine and supports all SQLite features. + + - **KV Store**: a key–value (KV) database that runs on SQLite. It manages KV pairs and distributes data across multiple devices and applications. + + - **Distributed Data Object**: an object-oriented in-memory data management framework that implements data object collaboration for the same application among multiple devices. + + - **Distributed Data Service**: synchronizes data between trusted devices, delivering a consistent access experience on different devices. + + - **DSoftBus**: discovers and connects devices at the network link layer. + + - **SQLite**: an open source component that provides native SQLite capabilities + +- **Containerized DSoftBus** + + Migrating legacy service software to containers can remove the barriers to modernization. In openEuler 22.03 LTS SP4, DSoftBus can be deployed as a container with its dependencies and multi-client support is enabled, to greatly simplify service installation, deployment, and testing and improve compatibility with service software. + +## Memory Overcommitment + +Memory overcommitment is an efficient method to increase the available memory space for cloud native containers. + +- **Cgroup memory policies** + - **Proactive memory reclamation**: The type of reclaimed memory pages can be specified, for example, file pages and anonymous pages. + - **Watermark-based reclamation**: Minimum, low, and high watermarks can be configured for passive reclamation. Asynchronous reclamation can be performed in the background to avoid impact on existing services. + - **Memory deduplication**: All the memory space used by processes in a container can be included in KSM deduplication, without requiring applications to call the madvise API to mark memory areas beforehand. + - **Swap space**: For each independent container, you can configure the swap backend devices (such as zram and storage devices), maximum swap space, proactive swap-in, and enable or disable swap. + +- **Basic optimizations** + + - **Memory compression**: Secondary compression with zram leverages multiple compression algorithms to increase the compression ratio and compression/decompression speed. + + - **Memory reclamation**: TLB refresh is optimized in unmap and migration processes to accelerate memory reclamation and reduce lock conflicts. Transparent huge page swap is optimized as well. + +- **Optimal decision-making based on the PSI mechanism** + + - PSI is available in cgroup v1 and v2. + + - Memory is proactively reclaimed using the PSI negative feedback mechanism, to improve decisions that are based on service load and cluster information. This design maintains service performance and reliability during memory overcommitment. + +## DIM + +Dynamic Integrity Measurement (DIM) enables timely detection and troubleshooting measures to handle attacks. It measures key memory data like code segments during program running and compares the results with the reference values to determine data tampering in the memory. + +- **DIM provides the following features:** + + - Measures user-mode processes, kernel modules, and code segment in the kernel memory. + - Extends measurements to the PCR register of the TPM 2.0 chip for remote attestation. + - Configures measurements and verifies measurement signatures. + - Generates and imports measurement baseline data using tools, and verifies baseline data signatures. + - Supports SM3 algorithms. + +- **DIM consists of two software packages: dim_tools and dim.** + + - **dim_tools**: provides the `dim_gen_baseline` command-line tool, which generates code segment measurement baseline in a specified format by parsing the Executable and Linkable Format (ELF) binary file. + + - **dim**: provides the dim_core and dim_monitor kernel modules. The former is the core module that parses and imports measurements and baselines configured by users, obtains target measurement data from memory, and performs measurement. The latter protects code segments and key data in dim_core to prevent invalid measurement due to dim_core tampering. + +## Secure Boot + +Secure Boot relies on public and private key pairs to sign and verify components in the boot process. A typical boot process uses the previous component to verify the digital signature of the next component. If the verification is successful, the next component runs; if the verification fails, the boot stops. + +- **Feature Description** + + - The Signatrust platform generates and manages public and private key pairs and certificates, and provides the signing service for EulerMaker to build openEuler software packages. + + - The Signatrust platform signs code of the EFI components (shim, GRUB, vmlinux) for Secure Boot when the software packages are built by EulerMaker. + + - Signature verification is performed during system boot to ensure system components are safe and secure. + +- **Constraints** + + - The Signatrust platform can only sign components built in the openEuler community, but cannot sign files developed by external projects or custom user files. + + - The Signatrust platform supports only the RSA algorithm. + +## secDetector + +secDetector is an intrusion detection system designed for OSs. It provides intrusion detection and response for critical infrastructure and reduces development costs while enhancing detection and response for third-party security tools. + +secDetector consists of the detection feature cases, exception detection probes, and attack blocking module. The exception detection probes collect OS attack events that match the MITRE ATT&CK patterns. There are eight types of exception detection probes that can detect advanced persistent threats (APTs): file operation, process management, network access, program behavior, memory tampering, resource consumption, account management, and device operation. The technical implementation architecture of secDetector consists of the SDK, service, detection feature cases, and detection framework (core). + +- The secDetector SDK is provided as a user-mode dynamic link library (DLL) deployed in the security awareness services that require secDetector. The SDK communicates with the secDetector service to complete related operations (such as subscription, unsubscription, and message reading). + +- The secDetector service is a user-mode service application. It manages and maintains the subscriptions of the security awareness services and maintains the probe running statuses. + +- The detection feature cases correspond to a series of exception detection probes, which are in different forms. For example, each probe for detecting kernel exceptions is available in a kernel module (**.ko** file). + +- The detection framework (core) is the base framework for case management, and provides common functional units required by workflows. The kernel exception detection framework is carried by a kernel module (**.ko** file). + +## EulerMaker + +EulerMaker is a package build system that converts source code into binary packages. It enables developers to assemble and tailor scenario-specific OSs thanks to incremental/full build, gated build, layer tailoring, and image tailoring capabilities. + +- **Incremental/Full build**: Analyzes the impact of the changes to software and dependencies, obtains the list of packages to be built, and delivers parallel build tasks based on the dependency sequence. +- **Build dependency query**: Provides a software package build dependency table in a project, and collects statistics on software package dependencies. +- **Layered tailoring**: Overlays configuration layer models based on SPEC or YAML to tailor the software package version, patches, build and installation dependencies, compilation options, and build process to your project. +- **Image tailoring**: Developers can configure the repository source to generate ISO, QCOW2, and container OS images, and tailor the list of software packages for the images. +- **Local task reproduction**: Reproduces a build task locally using commands, facilitating build problem locating. +- **Easy project creation**: Creates projects based on YAML configurations, and packages can be added in batches, greatly simplifying user operations. + +## DPUDirect + +DPUDirect creates a collaborative operating environment for services, enabling them to be easily offloaded and ported between hosts and data processing units (DPUs). DPUDirect builds a cross-host collaboration framework at the OS layer of the host and DPU, providing a consistent runtime view for the management-plane processes offloaded to the DPU and the service processes on the host. In this way, applications are unaware of offload. Only a small amount of service code on the management plane needs to be adapted to ensure software compatibility and evolution, as well as reducing component maintenance costs. + +- File system collaboration supports cross-host file system access and provides a consistent file system view for host and DPU processes. It also supports special file systems such as proc, sys, and dev. +- IPC collaboration enables imperceptible communication between host and DPU processes. It supports FIFO and UNIX domain sockets for cross-host communication. +- Mounting collaboration performs the mount operation in a specific directory on the host, which can adapt to the container image overlay scenario. The offloaded management-plane process can construct a working directory for the service process on the host, providing a unified cross-node file system view. +- epoll collaboration supports epoll operations for cross-host access of remote common files and FIFO files, and supports read and write blocking operations. +- Process collaboration uses the rexec tool to remotely start executable files. The rexec tool takes over the input and output streams of the remotely started processes and monitor the status to ensure the lifecycle consistency of the processes at both ends. + +## Live VM Migration with vDPA NIC Passthrough + +The kernel-mode vHost Data Path Acceleration (vDPA) framework provides a device virtualization solution that performs equivalently to passthrough. The vDPA framework unifies the architecture for diverse hardware forms, such as intelligent NICs and DPUs, and supports live migration across different hardware vendors. + +Extended vDPA and vHost APIs are used for live migrating VMs across vDPA devices from the same vendor, addressing the basic live migration requirements of vDPA passthrough VMs. Further, cross-vendor live migration uses embedded code to meet future requirements. + +## Lustre Server Software Package + +Lustre is an open source parallel file system designed for high scalability, performance, and availability. Lustre runs on Linux and provides POSIX-compliant UNIX file system interfaces. + +- **High scalability and performance**: A Lustre system is scalable in terms of the number of client nodes, drive storage capacity, and bandwidth. The scalability and performance depend on the available drives, network bandwidth, and server throughput. The following lists the main features. + - **Client scalability**: Up to 100,000 clients are supported. A typical production environment usually has 10,000 to 20,000 clients. + - **Client performance**: The I/O performance of a single client is 90% of the network bandwidth. The aggregated I/O performance reaches 50 million IOPS, with an I/O bandwidth of up to 50 TB/s. + - **OSS scalability**: A single OSS can manage up to 32 OSTs, each capable of storing 500 million objects, or 1,024 TB. A maximum of 1,000 OSSs and 4,000 OSTs are supported in a Lustre system. + - **OSS performance**: A single OSS can deliver 1.5 million IOPS, with an I/O bandwidth of 15 GB/s. The aggregated I/O performance reaches 50 million IOPS, with an I/O bandwidth of up to 50 TB/s. + - **MDS scalability**: A single MDS can manage up to four MDTs. A single MDT supports 4 billion files of up to 16 TB when LDISKFS is used as the backend file system, or 64 billion files of up to 64 TB when ZFS is used as the backend file system. + - **MDS performance**: 1 million creation operations or 2 million metadata stat operations can be performed within a second. + - **File system scalability**: The maximum size of a single file in the LDISKFS backend is 32 PB. An aggregated Lustre system can contain up to 1 trillion files, or 512 PB + +## DDE + +Deepin Desktop Environment (DDE) was originally developed for Uniontech OS and has been used in the desktop, server, and dedicated device versions of Uniontech OS. + +DDE focuses on delivering high quality user interactions and visual design. DDE is powered by independently developed core technologies for desktop environments and provides login, screen locking, desktop, file manager, launcher, dock, window manager, control center, and additional functions. Due to its user-friendly interface, excellent interactivity, high reliability, and strong privacy protection, it is one of the most popular desktop environments among users. + +## FangTian Window Engine + +The FangTian window engine delivers fundamental display technologies to build a foundation for openEuler's desktop environments. FangTian hosts display services such as window management, graphic drawing and compositing, and screen delivery. + +- **Feature Description** + + - **Window management** creates, moves, zooms, arranges, and destroys windows. An independent window policy module is used to support various scenarios on multiple device types, such as mobile phones and PCs. + - **Window display** provides capabilities such as buffer allocation and swapping, vertical synchronization, rendering, compositing, and screen display. The data-driven interfaces and unified architecture realize high performance and low memory usage. + - **FT** is a display protocol that enables the ArkUI framework to interact with FangTian. It provides unified rendering and data-driven interfaces to lower rendering load, reduce data from cross-process interactions, and enhance application animation performance. + - **ArkUI** is a declarative UI development framework for OpenHarmony applications. It is derived from OpenHarmony and has been adapted to openEuler, allowing ArkUI-based OpenHarmony applications to run on openEuler as well. + +- **Highlights** + + - **Linux application support**: Native Wayland and OpenHarmony applications can run simultaneously. + + - **High-performance display of OpenHarmony applications**: 50 application windows can be displayed at 60 FPS. + +- **Constraints** + + - Only x86_64 applications are supported. The functions of some ArkUI controls are not enabled. + + - Wayland protocol compatibility does not apply to protocol extensions. + +## sysMaster + +sysMaster is a collection of ultra-lightweight and highly reliable service management programs. sysMaster manages processes, containers, and VMs centrally and provides fault monitoring and self-healing mechanisms to help deal with Linux initialization and service management challenges. All these features make sysMaster an excellent choice for server, cloud computing, and embedded scenarios. + +- **New features** + + - devMaster component to manage device hot swap. + + - Live updates and hot reboot operations. + + - VMs now support PID 1. + +- **Constraints** + + - Only available for 64-bit OSs. + + - sysMaster configuration files must be in TOML format. + + - sysMaster can run only in system containers and VMs. + +## migration-tools + +migration-tools, developed by UnionTech Software Technology Co., Ltd., is positioned to meet demand for smooth, stable, and secure migration to the openEuler OS. + +- **Server module**: the core of migration-tools. This module is developed on the Python Flask Web framework. It receives task requests, processes execution instructions, and distributes the instructions to each Agent. + +- **Agent module**: installed in the OS to be migrated to receive task requests from the Server module and perform migration. + +- **Configuration module**: reads configuration files for the Server and Agent modules. + +- **Log module**: records logs during migration. + +- **Migration assessment module**: provides assessment reports such as basic environment check, software package comparison and analysis, and pre-migration compatibility checks. + +- **Migration function module**: provides quick migration, displays the migration progress, and checks the migration result. + +## utshell + +utshell is a new shell that introduces new features and inherits the usability of Bash. It enables interaction through command lines, such as responding to user operations to execute commands and providing feedback, and can execute automated scripts to facilitate O&M. + +- **Command execution**: Runs and sends return values from commands executed on user machines. + +- **Job control**: Executes, manages, and controls multiple user commands as background jobs. + +- **Batch processing**: Automates task execution using scripts. + +- **Command aliases**: Allows users to create aliases for commands to customize their operations. + +- **Historical records**: Records the commands entered by users. + +## utsudo + +sudo is one of the commonly used utilities for Unix-like and Linux OSs. It enables users to run specific commands with the privileges of the super user. utsudo is developed to address issues of security and reliability common in sudo. utsudo uses Rust to deliver more efficient, secure, and flexible privilege escalation. The tool uses modules such as common utility, overall framework, and function plugins. + +- **Access control**: Limits the commands that can be executed by users, and specifies the required authentication method. +- **Audit log**: Records and traces all commands and tasks executed by each user. +- **Temporary privilege escalation**: Allows common users to temporarily escalate to a super user for executing privileged commands or tasks. +- **Flexible configuration**: Allows users to set arguments such as command aliases, environment variables, and execution parameters to meet system requirements. + +## i3 + +i3 is a tiling window manager that enables the keyboard to manage the window layouts in a session or across multiple monitors. For more details, see the [upstream document](https://i3wm.org/docs/). + +## Trusted Platform Control Module + +The trusted platform control module (TPCM) is a base and core module that can be integrated into a trusted computing platform to establish and ensure a trust source. As one of the innovations in Trusted Computing 3.0 and the core of active immunity, TPCM implements active control over the entire platform. The overall system design consists of the protection module, computing module, and trusted management center software. + +- **Overall system design** + + - **Trusted management center**: This centralized management platform, provided by a third-party vendor, formulates, delivers, maintains, and stores protection policies and reference values for trusted computing nodes. + + - **Protection module**: This module operates independently of the computing module and provides trusted computing protection functions that feature active measurement and active control to implement security protection during computing. The protection module consists of the TPCM main control firmware, TCB, and TCM. + + - **Computing module**: This module includes hardware, an OS, and application layer software. + +- **Constraints** + - Supported server: TaiShan 200 server (model 2280) + + - Supported BMC card: BC83SMMC + +## safeguard + +safeguard helps protect the Linux kernel and the OS based on eBPF by intercepting and auditing security operations. It uses the libbpfgo library and the Go language to implement top-level control. + +- **File safeguarding** + + - Traces file system activities, including file open, close, read, write, and delete. + + - Modifies the behavior of file systems through the interception of certain file operations and custom security policies. + + - **Security policies** + + - Operations on files can be intercepted or redirected through eBPF. For example, read and write operations on sensitive files can be intercepted, and access to certain files can be redirected. + + - Access control can be customized. eBPF checks the identity, permissions, and environment of a user who requests access to a file, and allows or denies the request based on custom rules. + + - Audit and monitoring can be customized. For example, eBPF records the information about operations on certain files, such as the operator, time, and action, and outputs the information to the logs + +- **Process safeguarding** + + - Traces process life cycles, such as process creation and termination. + + - Modifies the behavior of processes, such as injecting or modifying some system calls or implementing custom scheduling policies. + +- **Network safeguarding** + + - Traces network activities, such as sending, receiving, forwarding, and discarding network packets. + + - Modifies the behavior of networks through filtering and rewriting of network packets and custom routing policies. diff --git a/docs/en/server/releasenotes/known_issues.md b/docs/en/server/releasenotes/known_issues.md new file mode 100644 index 0000000000000000000000000000000000000000..c64c945d653881fd9c050e28b4d981bfb33cc454 --- /dev/null +++ b/docs/en/server/releasenotes/known_issues.md @@ -0,0 +1,3 @@ +# Known Issues + +There is no known issue in this version. diff --git a/docs/en/server/releasenotes/os_installation.md b/docs/en/server/releasenotes/os_installation.md new file mode 100644 index 0000000000000000000000000000000000000000..7e5baef84ae1c2127805d34a8f9dbeb4fc6f2a98 --- /dev/null +++ b/docs/en/server/releasenotes/os_installation.md @@ -0,0 +1,153 @@ +# OS Installation + +## Release Files + +The openEuler release files include [ISO release packages](http://repo.openeuler.org/openEuler-22.03-LTS-SP4/ISO/), [VM images](http://repo.openeuler.org/openEuler-22.03-LTS-SP4/virtual_machine_img/), [container images](http://repo.openeuler.org/openEuler-22.03-LTS-SP4/docker_img/), [embedded images](http://repo.openeuler.org/openEuler-22.03-LTS-SP4/embedded_img/), and [repo sources](http://repo.openeuler.org/openEuler-22.03-LTS-SP4/). + +Table 1 ISO release packages + +| Name | Description | +| ------------------------------------------ | ------------------------------------------------------------ | +| openEuler-22.03-LTS-SP4-aarch64-dvd.iso | Base installation ISO file for the AArch64 architecture, including the core components for running the minimum system. | +| openEuler-22.03-LTS-SP4-everything-aarch64-dvd.iso | Full installation ISO file for the AArch64 architecture, including all components for running the entire system. | +| openEuler-22.03-LTS-SP4-everything-debug-aarch64-dvd.iso | ISO file for openEuler debugging in the AArch64 architecture, including the symbol table information required for debugging. | +| openEuler-22.03-LTS-SP4-x86_64-dvd.iso | Base installation ISO file for the x86_64 architecture, including the core components for running the minimum system. | +| openEuler-22.03-LTS-SP4-everything-x86_64-dvd.iso | Full installation ISO file for the x86_64 architecture, including all components for running the entire system. | +| openEuler-22.03-LTS-SP4-everything-debuginfo-x86_64-dvd.iso | ISO file for openEuler debugging in the x86_64 architecture, including the symbol table information required for debugging. | +| openEuler-22.03-LTS-SP4-source-dvd.iso | ISO file of the openEuler source code. | +| openEuler-22.03-LTS-SP4-edge-aarch64-dvd.iso | Edge ISO file for the AArch64 architecture, including the core components for running the minimum system. | +| openEuler-22.03-LTS-SP4-edge-x86_64-dvd.iso | Edge ISO file for the x86_64 architecture, including the core components for running the minimum system. | +| openEuler-22.03-LTS-loongarch64-dvd-beta4.iso | Base installation ISO file for the LoongArch architecture, including the core components for running the minimum system. | +| openEuler-22-03-LTS-ppc64le-dvd-alpha.iso | Base installation ISO file for the ppc64le architecture, including the core components for running the minimum system. | +| openEuler-Server-OS-isoe-sw_64-20221227.iso | Base installation ISO file for the sw_64 architecture, including the core components for running the minimum system. | + +Table 2 VM images + +| Name | Description | +| -------------------------------- | -------------------------------------------------- | +| openEuler-22.03-LTS-SP4-aarch64.qcow2.xz | VM image of openEuler in the AArch64 architecture. | +| openEuler-22.03-LTS-SP4-x86_64.qcow2.xz | VM image of openEuler in the x86_64 architecture. | + +Note: The default password of **root** user of the VM image is **openEuler12#$**. Change the password upon the first login. + +Table 3 Container images + +| Name | Description | +| ------------------------------- | --------------------------------------------------------- | +| openEuler-docker.aarch64.tar.xz | Container image of openEuler in the AArch64 architecture. | +| openEuler-docker.x86_64.tar.xz | Container image of openEuler in the x86_64 architecture. | +| openEuler-22.03-LTS-SP4-stratovirt-aarch64.img.xz | StratoVirt container image of openEuler in the AArch64 architecture. | +| openEuler-22.03-LTS-SP4-stratovirt-x86_64.img.xz | StratoVirt container image of openEuler in the x86_64 architecture. | + +Table 4 Embedded images + +| Name | Description | +| -------------------------------------- | ------------------------------- | +| arm64/aarch64-std/zImage | Kernel image that supports QEMU in the AArch64 architecture. | +| arm64/aarch64-std/\*toolchain-22.03.sh | Development and compilation toolchain in the AArch64 architecture. | +| arm64/aarch64-std/\*rootfs.cpio.gz | File system that supports QEMU in the AArch64 architecture. | +| arm32/arm-std/zImage | Kernel image that supports QEMU in the ARM architecture. | +| arm32/arm-std/\*toolchain-22.03.sh | Development and compilation toolchain in the ARM architecture. | +| arm32/arm-std/\*rootfs.cpio.gz | File system that supports QEMU in the ARM architecture. | +| source-list/manifest.xml | Manifest of source code used for building. | + +Table 5 Repo sources + +| Name | Description | +| ------------------- | ------------------------------------------ | +| ISO | Stores ISO images. | +| OS | Stores basic software package sources. | +| debuginfo | Stores debugging package sources. | +| docker_img | Stores container images. | +| virtual_machine_img | Stores VM images. | +| embedded_img | Stores embedded images. | +| everything | Stores full software package sources. | +| extras | Stores extended software package sources. | +| source | Stores source code software package. | +| update | Stores update software package sources. | +| EPOL | Stores extended openEuler package sources. | + +## Minimum Hardware Specifications + +The following table lists the minimum hardware specifications for openEuler 22.03 LTS SP4. + +Table 6 Minimum hardware requirements + +| Component | Minimum Hardware Specification | +| ---------- | --------------------------------------------------- | +| CPU | Kunpeng 920 (AArch64) / x86_64 (later than Skylake) | +| Memory | ≥ 4 GB (8 GB or more for better experience) | +| Hard drive | ≥ 120 GB | + +## Hardware Compatibility + +The following table describes the servers and configurations supported by openEuler. openEuler will support more servers in the future. Partners and developers are welcome to participate in the contribution and verification. For details about the servers supported by openEuler, see the [Compatibility List](https://www.openeuler.org/en/compatibility/). + +Table 7 Supported servers and configurations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Vendor

+

Server Name

+

Server Model

+

Component

+

Configuration

+

Huawei

+

TaiShan 200

+

2280 (balanced model)

+

CPU

+

Kunpeng 920

+

Memory

+

4 x 32 GB 2933 MHz

+

RAID card

+

LSI SAS3508

+

Network

+

SF221Q

+

Huawei

+

FusionServer Pro

+

2288H V5 (rack server)

+

CPU

+

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

+

Memory

+

4 x 32 GB 2400 MHz

+

RAID card

+

LSI SAS3508

+

Network

+

X722

+
diff --git a/docs/en/server/releasenotes/public_sys-resources/icon-caution.gif b/docs/en/server/releasenotes/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/releasenotes/public_sys-resources/icon-caution.gif differ diff --git a/docs/en/server/releasenotes/public_sys-resources/icon-danger.gif b/docs/en/server/releasenotes/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/releasenotes/public_sys-resources/icon-danger.gif differ diff --git a/docs/en/server/releasenotes/public_sys-resources/icon-note.gif b/docs/en/server/releasenotes/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/server/releasenotes/public_sys-resources/icon-note.gif differ diff --git a/docs/en/server/releasenotes/public_sys-resources/icon-notice.gif b/docs/en/server/releasenotes/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/en/server/releasenotes/public_sys-resources/icon-notice.gif differ diff --git a/docs/en/server/releasenotes/public_sys-resources/icon-tip.gif b/docs/en/server/releasenotes/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/en/server/releasenotes/public_sys-resources/icon-tip.gif differ diff --git a/docs/en/server/releasenotes/public_sys-resources/icon-warning.gif b/docs/en/server/releasenotes/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/releasenotes/public_sys-resources/icon-warning.gif differ diff --git a/docs/en/server/releasenotes/resolved_issues.md b/docs/en/server/releasenotes/resolved_issues.md new file mode 100644 index 0000000000000000000000000000000000000000..3ae8ed4f99afebe4239c7d4d89fcaef2fd7bf4fc --- /dev/null +++ b/docs/en/server/releasenotes/resolved_issues.md @@ -0,0 +1,219 @@ +# Resolved Issues + +For the complete issue list, see [Issues](https://gitee.com/organizations/src-openeuler/issues). + +For the complete list of kernel related commits, see [Commits](https://gitee.com/openeuler/kernel/commits/openEuler-22.03-LTS-SP4). + +For details about resolved issues, see [Table 1](#table2204014971491143). + +**Table 1** Resolved issues + +|ISSUE ID|Issue|Description|Repository| +|-|-|-|-| +| I9RF7L | | [EulerMaker] octave fails to be built in the openEuler-22.03-LTS-SP4:epol project. | octave | +| I9S7JR | | [EulerMaker] dde-network-core fails to be built in the openEuler-22.03-LTS-SP4:epol project. | dde-network-core | +| I9S7JY | | [EulerMaker] glib2 build error in the openEuler-22.03-LTS-SP4:everything project. | glib2 | +| I9SJPV | | [22.03-LTS-SP4-rc1] The dpu-utilities package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dpu-utilities | +| I9SJPX | | [22.03-LTS-SP4-rc1] The oemaker package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | oemaker | +| I9SJPZ | | [22.03-LTS-SP4-rc1] The llvm-bolt package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | llvm-bolt | +| I9SJQ0 | | [22.03-LTS-SP4-rc1] The hadoop package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | hadoop | +| I9SJQ2 | | [22.03-LTS-SP4-rc1] The openEuler-release package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | openEuler-release | +| I9SJQ3 | | [22.03-LTS-SP4-rc1] The dde-session-shell package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dde-session-shell | +| I9SJQ4 | | [22.03-LTS-SP4-rc1] The dde package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dde | +| I9SJQ5 | | [22.03-LTS-SP4-rc1] The dtkgui package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dtkgui | +| I9SJQ6 | | [22.03-LTS-SP4-rc1] The dtkcore package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dtkcore | +| I9SJQ9 | | [22.03-LTS-SP4-rc1] The deepin-anything package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-anything | +| I9SJQB | | [22.03-LTS-SP4-rc1] The dde-kwin package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dde-kwin | +| I9SJQD | | [22.03-LTS-SP4-rc1] The libmetal package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | libmetal | +| I9SJQE | | [22.03-LTS-SP4-rc1] The dde-qt-dbus-factory package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dde-qt-dbus-factory | +| I9SJQF | | [22.03-LTS-SP4-rc1] The deepin-compressor package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-compressor | +| I9SJQH | | [22.03-LTS-SP4-rc1] The dde-clipboard package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dde-clipboard | +| I9SJQI | | [22.03-LTS-SP4-rc1] The deepin-image-editor package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-image-editor | +| I9SJQL | | [22.03-LTS-SP4-rc1] The dde-control-center package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dde-control-center | +| I9SJQN | | [22.03-LTS-SP4-rc1] The deepin-wallpapers package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-wallpapers | +| I9SJQO | | [22.03-LTS-SP4-rc1] The dde-session-ui package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dde-session-ui | +| I9SJQP | | [22.03-LTS-SP4-rc1] The deepin-gtk-theme package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-gtk-theme | +| I9SJQQ | | [22.03-LTS-SP4-rc1] The deepin-log-viewer package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-log-viewer | +| I9SJQS | | [22.03-LTS-SP4-rc1] The deepin-devicemanager package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-devicemanager | +| I9SJQU | | [22.03-LTS-SP4-rc1] The deepin-system-monitor package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-system-monitor | +| I9SJQW | | [22.03-LTS-SP4-rc1] The deepin-screen-recorder package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-screen-recorder | +| I9SJQY | | [22.03-LTS-SP4-rc1] The dtkcommon package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dtkcommon | +| I9SJQZ | | [22.03-LTS-SP4-rc1] The deepin-default-settings package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-default-settings | +| I9SJR1 | | [22.03-LTS-SP4-rc1] The dde-api package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dde-api | +| I9SJR2 | | [22.03-LTS-SP4-rc1] The deepin-gettext-tools package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-gettext-tools | +| I9SJR3 | | [22.03-LTS-SP4-rc1] The startdde package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | startdde | +| I9SJR5 | | [22.03-LTS-SP4-rc1] The deepin-icon-theme package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-icon-theme | +| I9SJR6 | | [22.03-LTS-SP4-rc1] The deepin-terminal package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-terminal | +| I9SJR8 | | [22.03-LTS-SP4-rc1] The dde-daemon package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dde-daemon | +| I9SJRA | | [22.03-LTS-SP4-rc1] The deepin-desktop-schemas package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-desktop-schemas | +| I9SJRB | | [22.03-LTS-SP4-rc1] The dde-file-manager package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dde-file-manager | +| I9SJRC | | [22.03-LTS-SP4-rc1] The deepin-editor package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-editor | +| I9SJRD | | [22.03-LTS-SP4-rc1] The dde-launcher package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dde-launcher | +| I9SJRF | | [22.03-LTS-SP4-rc1] The deepin-menu package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-menu | +| I9SJRG | | [22.03-LTS-SP4-rc1] The dde-polkit-agent package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dde-polkit-agent | +| I9SJRH | | [22.03-LTS-SP4-rc1] The dde-dock package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dde-dock | +| I9SJRJ | | [22.03-LTS-SP4-rc1] The deepin-pw-check package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-pw-check | +| I9SJRL | | [22.03-LTS-SP4-rc1] The dtkwidget package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dtkwidget | +| I9SJRM | | [22.03-LTS-SP4-rc1] The dde-calendar package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dde-calendar | +| I9SJZK | | [22.03-LTS-SP4-rc1] The ctags package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | ctags | +| I9SJZN | | [22.03-LTS-SP4-rc1] The protobuf2 package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | protobuf2 | +| I9SJZP | | [22.03-LTS-SP4-rc1] The exempi package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | exempi | +| I9SJZR | | [22.03-LTS-SP4-rc1] The virt-manager package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | virt-manager | +| I9SJZS | | [22.03-LTS-SP4-rc1] The python-mako package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | python-mako | +| I9SJZT | | [22.03-LTS-SP4-rc1] The gcc package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | gcc | +| I9SJZU | | [22.03-LTS-SP4-rc1] The python-bottle package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | python-bottle | +| I9SJZV | | [22.03-LTS-SP4-rc1] The dbus package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dbus | +| I9SJZW | | [22.03-LTS-SP4-rc1] The libcxxabi package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | libcxxabi | +| I9SJZX | | [22.03-LTS-SP4-rc1] The sqlite package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | sqlite | +| I9SJZY | | [22.03-LTS-SP4-rc1] The linuxdoc-tools package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | linuxdoc-tools | +| I9SK02 | | [22.03-LTS-SP4-rc1] The groovy package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | groovy | +| I9SK03 | | [22.03-LTS-SP4-rc1] The libwd package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | libwd | +| I9SK04 | | [22.03-LTS-SP4-rc1] The python-imagesize package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | python-imagesize | +| I9SK05 | | [22.03-LTS-SP4-rc1] The storm package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | storm | +| I9SK06 | | [22.03-LTS-SP4-rc1] The perl package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | perl | +| I9SK08 | | [22.03-LTS-SP4-rc1] The scap-security-guide package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | scap-security-guide | +| I9SK0A | | [22.03-LTS-SP4-rc1] The redis6 package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | redis6 | +| I9SK0B | | [22.03-LTS-SP4-rc1] The gradle package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | gradle | +| I9SK0D | | [22.03-LTS-SP4-rc1] The libkae package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | libkae | +| I9SK0E | | [22.03-LTS-SP4-rc1] The sysget package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | sysget | +| I9SK0G | | [22.03-LTS-SP4-rc1] The libsrtp package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | libsrtp | +| I9SK0I | | [22.03-LTS-SP4-rc1] The python-beaker package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | python-beaker | +| I9SK0J | | [22.03-LTS-SP4-rc1] The unixODBC package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | unixODBC | +| I9SK0K | | [22.03-LTS-SP4-rc1] The pytorch package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | pytorch | +| I9SK0O | | [22.03-LTS-SP4-rc1] The groovy18 package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | groovy18 | +| I9SK0Q | | [22.03-LTS-SP4-rc1] The llvm-libunwind package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | llvm-libunwind | +| I9SK0S | | [22.03-LTS-SP4-rc1] The criu package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | criu | +| I9SK0T | | [22.03-LTS-SP4-rc1] The sysmaster package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | sysmaster | +| I9SK0U | | [22.03-LTS-SP4-rc1] The python-flask-restful package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | python-flask-restful | +| I9SK0V | | [22.03-LTS-SP4-rc1] The man-db package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | man-db | +| I9SK0Y | | [22.03-LTS-SP4-rc1] The python-sphinx-theme-alabaster package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | python-sphinx-theme-alabaster | +| I9SK0Z | | [22.03-LTS-SP4-rc1] The osinfo-db package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | osinfo-db | +| I9SK11 | | [22.03-LTS-SP4-rc1] The python-configshell package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | python-configshell | +| I9SK13 | | [22.03-LTS-SP4-rc1] The libcxx package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | libcxx | +| I9SK14 | | [22.03-LTS-SP4-rc1] The secGear package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | secGear | +| I9SK15 | | [22.03-LTS-SP4-rc1] The redis5 package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | redis5 | +| I9SK17 | | [22.03-LTS-SP4-rc1] The openEuler -repos package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | openEuler-repos | +| I9SK18 | | [22.03-LTS-SP4-rc1] The ft_utils package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | ft_utils | +| I9SK1A | | [22.03-LTS-SP4-rc1] The dde-introduction package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dde-introduction | +| I9SK1C | | [22.03-LTS-SP4-rc1] The deepin-clone package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-clone | +| I9SK1D | | [22.03-LTS-SP4-rc1] The shotwell package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | shotwell | +| I9SK1E | | [22.03-LTS-SP4-rc1] The communication_ipc package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | communication_ipc | +| I9SK1F | | [22.03-LTS-SP4-rc1] The ft_wl_fwk package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | ft_wl_fwk | +| I9SK1I | | [22.03-LTS-SP4-rc1] The ft_mmi package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | ft_mmi | +| I9SK1J | | [22.03-LTS-SP4-rc1] The k3s-containerd package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | k3s-containerd | +| I9SK1K | | [22.03-LTS-SP4-rc1] The redshift package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | redshift | +| I9SK1M | | [22.03-LTS-SP4-rc1] The ft_multimedia package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | ft_multimedia | +| I9SK1N | | [22.03-LTS-SP4-rc1] The k3s package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | k3s | +| I9SK1O | | [22.03-LTS-SP4-rc1] The deepin-desktop-base package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-desktop-base | +| I9SK1P | | [22.03-LTS-SP4-rc1] The ukui-settings-daemon package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | ukui-settings-daemon | +| I9SK1S | | [22.03-LTS-SP4-rc1] The systemabilitymgr_safwk package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | systemabilitymgr_safwk | +| I9SK1U | | [22.03-LTS-SP4-rc1] The arkui-linux package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | arkui-linux | +| I9SK1V | | [22.03-LTS-SP4-rc1] The filemanagement_dfs_service package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | filemanagement_dfs_service | +| I9SK1W | | [22.03-LTS-SP4-rc1] The migration-tools package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | migration-tools | +| I9SKC6 | | [22.03-LTS-SP4-rc1] The pyflakes package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | pyflakes | +| I9SKC7 | | [22.03-LTS-SP4-rc1] The openjdk-latest package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | openjdk-latest | +| I9SKC9 | | [22.03-LTS-SP4-rc1] The qt5integration package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | qt5integration | +| I9SKCB | | [22.03-LTS-SP4-rc1] The aops-diana package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | aops-diana | +| I9SKCC | | [22.03-LTS-SP4-rc1] The qt5dxcb-plugin package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | qt5dxcb-plugin | +| I9SL18 | | [22.03-LTS-SP4-rc1] The oec-hardware package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | oec-hardware | +| I9SL90 | | [22.03-LTS-SP4-rc1] [Am/x86] The PWR_SYS_GetRtPowerInfo interface is not open. | powerapi | +| I9SMBB | | [22.03-LTS-SP4-rc1] The aops-ceres package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | aops-ceres | +| I9SMBC | | [22.03-LTS-SP4-rc1] The busybox package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | busybox | +| I9SMBD | | [22.03-LTS-SP4-rc1] The containers-common package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | containers-common | +| I9SMBF | | [22.03-LTS-SP4-rc1] The e2fsprogs package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | e2fsprogs | +| I9SMBH | | [22.03-LTS-SP4-rc1] The ebtables package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | ebtables | +| I9SMBI | | [22.03-LTS-SP4-rc1] The firewalld package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | firewalld | +| I9SMBJ | | [22.03-LTS-SP4-rc1] The gcc-cross package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | gcc-cross | +| I9SMBK | | [22.03-LTS-SP4-rc1] The gdk-pixbuf2 package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | gdk-pixbuf2 | +| I9SMBL | | [22.03-LTS-SP4-rc1] The imageTailor package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | imageTailor | +| I9SMBM | | [22.03-LTS-SP4-rc1] The iproute package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | iproute | +| I9SMBO | | [22.03-LTS-SP4-rc1] The iSulad package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | iSulad | +| I9SMBP | | [22.03-LTS-SP4-rc1] The KubeOS package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | KubeOS | +| I9SMBQ | | [22.03-LTS-SP4-rc1] The libsndfile package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | libsndfile | +| I9SMBR | | [22.03-LTS-SP4-rc1] The openstack-releases package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | openstack-releases | +| I9SQWH | | [22.03-LTS-SP4-rc1] [Am/x86] The PWR_CreateDcTask interface is called to create a task of an unsupported data type. | powerapi | +| I9SRCC | | [22.03_SP4_RC1_everything] [Arm\x86] An error message is displayed during the mandoc installation. | mandoc | +| I9STHL | | [EulerMaker] python-beaker fails to be built in the openEuler-22.03-LTS-SP4:everything project. | python-beaker | +| I9SURK | | [22.03_SP4_RC1_epol] [Arm\x86] An error message is displayed during the afterburn uninstallation. | afterburn | +| I9SUVR | | [openEuler-22.03-LTS-SP4] Failed to stop the storm-nimbus.service service. | storm | +| I9SUXW | | [22.03-LTS-SP4-rc1] The [Compilation alarm check] [Arm/x86] An alarm is generated during compilation. | powerapi | +| I9SV5C | | [22.03_SP4_RC1_everything] [Arm\x86] An error message is displayed during the devmaster installation. | sysmaster | +| I9SV9F | | [openEuler-22.03-LTS-SP4] Failed to stop the storm-supervisor.service service. | storm | +| I9T040 | | [22.03-LTS-SP4-rc1] [x86/Arm] The luarocks source package fails to be compiled locally because the openresty and openresty-openssl111-devel dependencies are missing. | luarocks | +| I9T0OH | | [22.03-LTS-SP4-rc1] [x86/Arm] The perl-Compress-Raw-Zlib source package fails to be compiled locally, and the check phase fails. | perl-Compress-Raw-Zlib | +| I9T5DF | | [22.03-LTS-SP4-rc1] [Arm/x86] Keyword-based search by invoking the PWR_PROC_QueryProcs interface does not meet the expectation. | powerapi | +| I9T5Q8 | | [22.03-LTS-SP4-rc1] [x86] netdata -D reports core dump. | netdata | +| I9T5TN | | [22.03_SP4_RC1_epol] [Arm/x86] An exception occurs during the migration-tools-server upgrade. | migration-tools | +| I9T6FB | | [22.03_SP4_RC1_everything] [Arm/x86] obs-server fails to be uninstalled after the OS upgrades to SP4. | obs-server | +| I9T7M8 | | [22.03-LTS-SP4-rc1] [Arm/x86] Fails to invoke the PWR_PROC_GetWattState interface for the first time, and error code 13 is returned. | powerapi | +| I9TNRP | | [22.03-LTS-SP4-rc1] [Address sanitizer test] [Arm/x86] The PWR_CreateDcTask interface is called to create a task whose data type is 2. The task callback function is triggered, causing the service to break down. | powerapi | +| I9U0YX | | [openEuler -22.03-LTS-SP4 rc1] An error is reported after the sysmonitor.service service is started. | sysmonitor | +| I9U163 | | [22.03-LTS-SP4-rc1] [x86/Arm] glassfish-jsp source package fails to be compiled locally. | glassfish-jsp | +| I9ULPM | | [22.03_SP4_RC2_everything] [Arm\x86] An exception message is displayed during obs-server downgrade. | obs-server | +| I9UPLT | | [22.03-LTS-SP4-rc2] [Address sanitizer test] [Arm/x86] When the TEST_PWR_PROC_QueryProcs interface is called, the keyword is an empty string and **num** is **100** (construct 5,000 processes for cyclic printing). The interface calling times out, and error code 1 is returned. | powerapi | +| I9UQHL | | [22.03-LTS-SP4 RC2] [deja] Some cases of aarch64-sve-acle.exp fail to be executed. | gcc | +| I9UVJP | | [22.03-LTS-SP4-rc2] The abseil-cpp package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | abseil-cpp | +| I9UVJQ | | [22.03-LTS-SP4-rc2] The shim package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | shim | +| I9UVJR | | [22.03-LTS-SP4-rc2] The spdk package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | spdk | +| I9UVJS | | [22.03-LTS-SP4-rc2] The syscare package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | syscare | +| I9UVJT | | [22.03-LTS-SP4-rc2] The libsepol package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | libsepol | +| I9UVJU | | [22.03-LTS-SP4-rc2] The libxml2 package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | libxml2 | +| I9UVJV | | [22.03-LTS-SP4-rc2] The kernel package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | kernel | +| I9UVJW | | [22.03-LTS-SP4-rc2] The openssh package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | openssh | +| I9UVJY | | [22.03-LTS-SP4-rc2] The ghostscript package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | ghostscript | +| I9UVJZ | | [22.03-LTS-SP4-rc2] The libvirt package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | libvirt | +| I9UVK0 | | [22.03-LTS-SP4-rc2] The skopeo package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | skopeo | +| I9UVK2 | | [22.03-LTS-SP4-rc2] The dwarves package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | dwarves | +| I9UVK3 | | [22.03-LTS-SP4-rc2] The openjdk-11 is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | openjdk-11 | +| I9UVK4 | | [22.03-LTS-SP4-rc2] The bind package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | bind | +| I9UVK5 | | [22.03-LTS-SP4-rc2] The pcs package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | pcs | +| I9UVK6 | | [22.03-LTS-SP4-rc2] The bash package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | bash | +| I9UVK8 | | [22.03-LTS-SP4-rc2] The lwip package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | lwip | +| I9UVK9 | | [22.03-LTS-SP4-rc2] The lsof package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | lsof | +| I9UVKA | | [22.03-LTS-SP4-rc2] The nautilus package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | nautilus | +| I9UVKB | | [22.03-LTS-SP4-rc2] The util-linux package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | util-linux | +| I9UVKC | | [22.03-LTS-SP4-rc2] The python-jinja2 package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | python-jinja2 | +| I9UVKD | | [22.03-LTS-SP4-rc2] The deepin-turbo package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-turbo | +| I9UVKE | | [22.03-LTS-SP4-rc2] The ovirt-engine package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | ovirt-engine | +| I9UVKF | | [22.03-LTS-SP4-rc2] The deepin-graphics-driver-manager package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | deepin-graphics-driver-manager | +| I9UVKG | | [22.03-LTS-SP4-rc2] The ignition package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | ignition | +| I9UVMX | | [22.03-LTS-SP4-rc2] The docker package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | docker | +| I9UVOU | | [22.03-LTS-SP4-rc2] The poissonsearch-oss package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | poissonsearch-oss | +| I9UVOV | | [22.03-LTS-SP4-rc2] The openjdk-17 package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | openjdk-17 | +| I9UWOZ | | [22.03-LTS-SP4-rc2] The gazelle package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | gazelle | +| I9UWPT | | [22.03-LTS-SP4-rc2] The openjdk-1.8.0 package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | openjdk-1.8.0 | +| I9UWQK | | [22.03-LTS-SP4-rc2] "ICE:during GIMPLE pass: unswitch: internal compiler error: Segmentation fault" is displayed during the application compilation using auto-bolt and NPB. | gcc | +| I9V325 | | [22.03-LTS-SP4-rc2] [Arm/x86] The PWR_PROC_SetWattAttrs interface is called with **domainMask** set to **1**. The query result is **10**. | powerapi | +| I9V34B | | [22.03-LTS-SP4-rc2] "internal compiler error: Aborted : during GIMPLE pass: llc_allocate" is reported during the postgresql-11.3 compilation using **[codedb]-O2 -fllc-allocate**. | gcc | +| I9V3TI | | [22.03-LTS-SP4-rc2] **-O3 -fwhole-program -fllc-allocate** reports "Segmentation fault: during GIMPLE pass: llc_allocate". | gcc | +| I9V738 | | [22.03_SP4_RC2_everything] [Arm\x86] The obs-api version conflict causes upgrade failures. | obs-server | +| I9V75L | | [22.03-LTS-SP4-rc2] The host registration template does not contain the **ssh_pkey** field. | aops-ceres | +| I9V7BM | | [22.03-LTS-SP4-rc2] [Arm/x86] The PWR_PROC_SetSmartGridState interface is called, and error code 502 is returned. | powerapi | +| I9VAXG | | [22.03-LTS-SP4-rc2] [Arm/x86] The PWR_PROC_AddWattProcs interface is called to add a non-existent process. The execution is successful, and the queried process is a random value. | powerapi | +| I9VPAX | | [22.03-LTS-SP4-rc2] [x86] Check whether the libomp-test binary package needs to be deleted. | libomp | +| I9VPPE | | [22.03-LTS-SP4-rc2] [Arm/x86] The repository lacks the arkui-linux binary package, and only the arkui-linux-devel binary package of the Arm architecture is available, which is inconsistent with that of EBS. | arkui-linux | +| I9VR7L | | [22.03-LTS-SP4-rc2] The message for creating a hot patch removal task is incorrect. | aops-hermes | +| I9VVTI | | [22.03-LTS-SP4-rc2] The message for creating a REPO setting task is incorrect. | aops-hermes | +| I9W0J1 | | [22.03-LTS-SP4-rc2] [Arm/x86] After the eagle service is started, the log contains the error message "/etc/eagle/plugin/libidle_service.so: No such file or directory". | eagle | +| IA4DBK | | [22.03-LTS-SP4-rc3] Whether to name the utshell software package in the same way as other packages in the openEuler community. | utshell | +| IA4MIA | | [22.03-LTS-SP4-rc3] [x86/Arm] Failed to execute the **luarocks** command. | luarocks | +| IA4MKD | | [22.03-LTS-SP4-rc3] [Arm/x86] Install the software package and run the **oeawarectl --help** command. Error message "error while loading shared libraries: libyaml-cpp.so.0.6: cannot open shared object file: No such file or directory" is displayed. | oeAware-manager | +| IA4QCT | | [22.03-LTS-SP4-rc3] [Arm/x86] Install the software package, enable plugin instances with dependencies, and disable one of the dependent instances. The command is executed successfully, but the instance fails to be disabled. | oeAware-manager | +| IA4R47 | | [22.03-LTS-SP4-rc3] [Arm/x86] Install the software package, set **enable_list**, set **name** to plugin that does not exist, set **instances** to an existing instance, and restart the service. The plugin is enabled successfully. | oeAware-manager | +| IA55IU | | [22.03-LTS-SP4-rc3] The docker-runc package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | runc | +| IA57HR | | [22.03-LTS-SP4-rc3] [Arm/x86] Service logs need to be optimized. | oeAware-manager | +| IA57S9 | | [22.03-LTS-SP4-rc3] [Arm/x86] **/etc/eagle/eagle_config.ini** does not contain the parameter configuration description. | eagle | +| IA58XV | | [22.03-LTS-SP4-rc3] [Arm/x86] yaml-cpp fails to parse the YAML configuration file. | yaml-cpp | +| IA5BWS | | [22.03-LTS-SP4-rc3] [Arm/x86] The oeAware series software packages are installed, **libthread_collector.so** is deleted, the service is started, and the dependencies become abnormal. | oeAware-manager | +| IA5EDP | | [EulermMaker] openEuler 22.03-LTS-SP4 stratovirt image build fails. | kernel | +| IA5MCM | | [22.03-LTS-SP4-rc3] [Arm/x86] The **eagle_policy.ini** file configuration does not take effect. | eagle | +| IA5NUJ | | [22.03-LTS-SP4-rc3] [Arm/x86] Change **watt_threshold** and **watt_domain_mask** to **0** in the policy configuration file and restart the service. The two parameters do not restore to the default values. | eagle | +| IA5Z8U | | [EulerMaker] k3s fails to be built in the openEuler-22.03-LTS-SP4:epol project. | k3s | +| IA60UN | | [22.03-LTS-SP4-rc4] The python-pip package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | python-pip | +| IA60UO | | [22.03-LTS-SP4-rc4] The ghostscript package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | ghostscript | +| IA60UP | | [22.03-LTS-SP4-rc4] The bash package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | bash | +| IA60UQ | | [22.03-LTS-SP4-rc4] The kbd package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | kbd | +| IA60UR | | [22.03-LTS-SP4-rc4] The ignition package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | ignition | +| IA613G | | [22.03-LTS-SP4-rc4] The xorg-x11-server package is downgraded in 22.03 LTS SP4 compared to 22.03 LTS SP3. | xorg-x11-server | +| IA6148 | | [22.03-LTS-SP4 RC4] **-O3 -march=armv8.2-a+sve -fllc-allocate --param branch-prob-threshold=50**, but the assembly file does not generate the prf(x) instruction. | gcc | +| IA68T7 | | [22.03-LTS-SP4-rc4] [Arm/x86] After the eagle service is started, an additional setting is added before eagle in the admin configuration of **/etc/sysconfig/pwrapis/pwrapis_config.ini**. | eagle | diff --git a/docs/en/server/releasenotes/source_code.md b/docs/en/server/releasenotes/source_code.md new file mode 100644 index 0000000000000000000000000000000000000000..5dd6fb88af454ca919a47c4660fa76dcbd3220f4 --- /dev/null +++ b/docs/en/server/releasenotes/source_code.md @@ -0,0 +1,8 @@ +# Source Code + +openEuler contains two code repositories: + +- Code repository: [https://gitee.com/openeuler](https://gitee.com/openeuler) +- Software package repository: [https://gitee.com/src-openeuler](https://gitee.com/src-openeuler) + +The openEuler release packages also provide the source ISO files. For details, see [Installing the OS](./os_installation.md). diff --git a/docs/en/server/releasenotes/terms_of_use.md b/docs/en/server/releasenotes/terms_of_use.md new file mode 100644 index 0000000000000000000000000000000000000000..16989178727286e97c4aa8ee484456478cd57620 --- /dev/null +++ b/docs/en/server/releasenotes/terms_of_use.md @@ -0,0 +1,13 @@ +# Terms of Use + +## Copyright © 2023 openEuler Community + +Your replication, use, modification, and distribution of this document are governed by the Creative Commons License Attribution-ShareAlike 4.0 International Public License \(CC BY-SA 4.0\). You can visit [https://creativecommons.org/licenses/by-sa/4.0/](https://creativecommons.org/licenses/by-sa/4.0/) to view a human-readable summary of \(and not a substitute for\) CC BY-SA 4.0. For the complete CC BY-SA 4.0, visit [https://creativecommons.org/licenses/by-sa/4.0/legalcode](https://creativecommons.org/licenses/by-sa/4.0/legalcode). + +## Trademarks and Permissions + +All trademarks and registered trademarks mentioned in the documents are the property of their respective holders. The use of the openEuler trademark must comply with the [Use Specifications of the openEuler Trademark](https://www.openeuler.org/en/other/brand/). + +## Disclaimer + +This document is used only as a guide. Unless otherwise specified by applicable laws or agreed by both parties in written form, all statements, information, and recommendations in this document are provided "AS IS" without warranties, guarantees or representations of any kind, including but not limited to non-infringement, timeliness, and specific purposes. diff --git a/docs/en/server/releasenotes/user_notice.md b/docs/en/server/releasenotes/user_notice.md new file mode 100644 index 0000000000000000000000000000000000000000..33e71dfadf26d015dc65ed2dc61226ebec59fb58 --- /dev/null +++ b/docs/en/server/releasenotes/user_notice.md @@ -0,0 +1,5 @@ +# User Notice + +- The version number counting rule of openEuler is changed from openEuler _x.x_ to openEuler _year_._month_. For example, openEuler 21.03 indicates that the version is released in March 2021. +- The [Python core team](https://www.python.org/dev/peps/pep-0373/#update) has stopped maintaining Python 2 in January 2020. Python 2 reached end of maintenance (EOM) on December 31, 2020. In 2021, openEuler 21.03 fixed only the critical CVEs related to Python 2. Please switch to Python 3 as soon as possible. +- From openEuler 22.03 LTS, only Python 3 is supported. diff --git a/docs/en/server/security/cert_signature/_toc.yaml b/docs/en/server/security/cert_signature/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..87ac805b46ac4c8c99bb6e27d02d02f76d9c1313 --- /dev/null +++ b/docs/en/server/security/cert_signature/_toc.yaml @@ -0,0 +1,8 @@ +label: Certificate Signatures +isManual: true +description: The openEuler signature platform provides signing services to ensure the integrity of system files +sections: + - label: Overview of Certificates and Signatures + href: ./overview_of_certificates_and_signatures.md + - label: Secure Boot + href: ./secure_boot.md diff --git a/docs/en/server/security/cert_signature/figures/.keep b/docs/en/server/security/cert_signature/figures/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/en/server/security/cert_signature/figures/mokutil-db.png b/docs/en/server/security/cert_signature/figures/mokutil-db.png new file mode 100644 index 0000000000000000000000000000000000000000..769d96ce38be9144e0ea6c25077a5d86a68c1bbf Binary files /dev/null and b/docs/en/server/security/cert_signature/figures/mokutil-db.png differ diff --git a/docs/en/server/security/cert_signature/figures/mokutil-sb-off.png b/docs/en/server/security/cert_signature/figures/mokutil-sb-off.png new file mode 100644 index 0000000000000000000000000000000000000000..f3018c9fd0236e9c2cf560f0da3827ed2a877f6d Binary files /dev/null and b/docs/en/server/security/cert_signature/figures/mokutil-sb-off.png differ diff --git a/docs/en/server/security/cert_signature/figures/mokutil-sb-on.png b/docs/en/server/security/cert_signature/figures/mokutil-sb-on.png new file mode 100644 index 0000000000000000000000000000000000000000..449b6774dc61a601cf884845fbd0be5d314108e1 Binary files /dev/null and b/docs/en/server/security/cert_signature/figures/mokutil-sb-on.png differ diff --git a/docs/en/server/security/cert_signature/figures/mokutil-sb-unsupport.png b/docs/en/server/security/cert_signature/figures/mokutil-sb-unsupport.png new file mode 100644 index 0000000000000000000000000000000000000000..525c72f78b897ffaba0d356406ab9d9e64024d91 Binary files /dev/null and b/docs/en/server/security/cert_signature/figures/mokutil-sb-unsupport.png differ diff --git a/docs/en/server/security/cert_signature/overview_of_certificates_and_signatures.md b/docs/en/server/security/cert_signature/overview_of_certificates_and_signatures.md new file mode 100644 index 0000000000000000000000000000000000000000..4624626a326f83e0901dae6fd699b1fd08e60f6c --- /dev/null +++ b/docs/en/server/security/cert_signature/overview_of_certificates_and_signatures.md @@ -0,0 +1,29 @@ +# Overview of Certificates and Signatures + +## Overview + +Digital signature is an important technology for protecting the integrity of OSs. By adding signatures to key system components and verifying the signatures in subsequent processes such as component loading and running, you can effectively check component integrity and prevent security problems caused by component tampering. Multiple system integrity protection mechanisms are supported in the industry to protect the integrity of different types of components in each phase of system running. Typical technical mechanisms include: + +- Secure boot +- Kernel module signing +- Integrity measurement architecture (IMA) +- RPM signature verification + +The preceding integrity protection security mechanisms depend on signatures (usually integrated in the component release phase). However, open source communities generally lack signature private keys and certificate management mechanisms. Therefore, Linux distributions released by open source communities generally do not provide default signatures or use only private keys temporarily generated in the build phase for signatures. Usually, these integrity protection security mechanisms can be enabled only after users or downstream OSVs perform secondary signing, which increases the cost of security functions and reduces usability. + +## Solution + +The openEuler community infrastructure supports the signature service. The signature platform manages signature private keys and certificates in a unified manner and works with the EulerMaker build platform to automatically sign key files during the software package build process of the community edition. Currently, the following file types are supported: + +- EFI files +- Kernel module files +- IMA digest lists +- RPM software packages + +## Constraints + +The signature service of the openEuler community has the following constraints: + +- Currently, only official releases of the openEuler community can be signed. Private builds cannot be signed. +- Currently, only EFI files related to OS secure boot can be signed, including shim, GRUB, and kernel files. +- Currently, only the kernel module files provided by the kernel software package can be signed. diff --git a/docs/en/server/security/cert_signature/secure_boot.md b/docs/en/server/security/cert_signature/secure_boot.md new file mode 100644 index 0000000000000000000000000000000000000000..645052eb431646c24e729fcc7be1c3c68818b5d3 --- /dev/null +++ b/docs/en/server/security/cert_signature/secure_boot.md @@ -0,0 +1,53 @@ +# Secure Boot + +## Overview + +Secure Boot relies on public and private key pairs to sign and verify components in the boot process. A typical boot process uses the previous component to verify the digital signature of the next component. If the verification is successful, the next component runs; if the verification fails, the boot stops. Secure Boot ensures the integrity of each component during system boot and prevents unverified components from being loaded and running, mitigating security threats to the system and user data. +In Secure Boot, the order of components to be verified are: BIOS, shim, GRUB, and vmlinuz (kernel image). +Related EFI boot components are signed by the openEuler signature platform in signcode mode. The public key certificate is integrated into the signature database by the BIOS. During the boot, the BIOS verifies shim. The shim and grub components obtain the public key certificate from the signature database of the BIOS to verify the next-level components. + +## Scenarios and Solutions + +In previous openEuler versions, secure boot components are not signed. Therefore, the secure boot function cannot be directly used to ensure the integrity of system components. +In openEuler 22.03 LTS SP4 and later versions, openEuler uses the community signature platform to sign OS components, including the grub and vmlinuz components, and integrates the community signature root certificate into the shim component. +For the shim component, to facilitate end-to-end secure boot, the signature platform of the openEuler community is used for signature. After external CAs officially operate the secure boot component signature service, their signatures will be integrated into the shim module of openEuler. + +## Usage + +### Obtaining the openEuler Certificate + +To obtain the openEuler root certificate, visit . +Download **openEuler Shim Default CA** (**default-x509ca.cert**). + +### Operations on the BIOS + +Import the openEuler root certificate to the BIOS certificate database and enable secure boot in the BIOS to implement secure boot. +For details about how to import the BIOS certificate and enable secure boot, see the documents provided by the BIOS vendor. + +### Operations on the OS + +Viewing database certificate information: `mokutil --db` + +![](./figures/mokutil-db.png) + +Note: The screenshot displays only some important information. + +Viewing the secure boot status: `mokutil --sb` + +- SecureBoot disabled + +![](./figures/mokutil-sb-off.png) + +- SecureBoot enabled + +![](./figures/mokutil-sb-on.png) + +- not supported + +![](./figures/mokutil-sb-unsupport.png) + +## Constraints + +- Software: The OS must be booted in UEFI mode. +- Architecture: Arm or x86 +- Hardware: The BIOS must support verification functions related to secure boot. diff --git a/docs/en/server/security/safeguard/_toc.yaml b/docs/en/server/security/safeguard/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..be38446417f112f686008617a90728d38b795fc5 --- /dev/null +++ b/docs/en/server/security/safeguard/_toc.yaml @@ -0,0 +1,10 @@ +label: safeguard User Guide +isManual: true +description: 录safeguard helps protect the Linux kernel and the OS based on eBPF by intercepting and auditing security operations +sections: + - label: About safeguard + href: ./about_safeguard.md + - label: safeguard Deployment Guide + href: ./install_safeguard.md + - label: safeguard User Guide + href: ./safeguard_user_guide.md diff --git a/docs/en/server/security/safeguard/about_safeguard.md b/docs/en/server/security/safeguard/about_safeguard.md new file mode 100644 index 0000000000000000000000000000000000000000..98e1f9a2fecccefef2af44de41acb98f702a9215 --- /dev/null +++ b/docs/en/server/security/safeguard/about_safeguard.md @@ -0,0 +1,104 @@ +# About safeguard + +safeguard helps protect the Linux kernel and the OS based on eBPF by intercepting and auditing security operations. It uses the libbpfgo library and the Go language to implement top-level control. Currently, the project has been open-sourced and is maintained by openEuler sig-ebpf at . + +## KRSI (eBPF+LSM) + +Extended Berkeley Packet Filter (eBPF) is a technology that can run sandboxed programs in kernel space. It is used to efficiently extend the capabilities of the kernel without requiring to change kernel source code or load kernel modules. This has led to a wave of eBPF-based projects covering a wide array of use cases, including networking, observability, and security functionality. + +The Linux Security Module (LSM) framework provides a mechanism for various security checks to be hooked by new kernel extensions. + +eBPF and LSM can be combined to form an eBPF-based LSM extension called kernel runtime security instrumentation (KRSI). It allows users to use eBPF programs to implement and enforce custom security policies and audit rules at runtime. The kernel does not need to be modified or recompiled, and existing LSM modules do not need to be configured. It attaches eBPF programs to LSM hooks and then executes those programs in the call path to check and control access to system resources. + +## Features + +- Audit: Records behavior within the scope of the configuration file and generates logs. +- Control: Secures access control for files, processes, and networks. +- Behavior analysis: Collects information and analyzes resources, hotspots, and exceptions. + +## Application Scenarios + +safeguard is a Linux security audit and control solution based on KRSI, which is a combination of eBPF and LSM. safeguard ensures OS-wide comprehensive protection and monitoring. While able to fit into a wide range of scenarios, it mainly streamlines the following areas: + +- Container security: Audits and controls behavior inside a container. For example, safeguard records the container process, file, and network activities, limits resources or ports available to the container, and detects abnormal container behavior. In this way, safeguard effectively protects the container against attacks or abuse, thereby improving the security and stability of the container. +- Cloud service security: Audits and controls the clients of cloud service providers. For example, safeguard records OSs, applications, and users of the clients, limits the commands and system calls available to the clients, and detects malicious behavior or exploitation of vulnerabilities. This helps cloud service providers protect resources and reputations and prevents the clients from being intruded upon or damaged. +- Security compliance: Audits and controls system security compliance. For example, safeguard records information about system configurations, permissions, and logs, prevents the system from modifying specific settings or files, and detects violations and abnormal events in the system. This ensures compliance with security standards and regulations and improves the credibility and legitimacy of the system. + +## Functions + +### Audit and Control + +File safeguarding: + +- Traces file system activities, including file open, close, reads/writes, and delete. +- Modifies the behavior of file systems through the interception of certain file operations and custom security policies. + Security policies: + 1. Operations on files can be intercepted or redirected through eBPF. For example, read and write operations on sensitive files can be intercepted, and access to certain files can be redirected. + 2. Access control can be customized. eBPF checks the identity, permissions, and environment of a user who requests access to a file, and allows or denies the request based on custom rules. + 3. Audit and monitoring can be customized. For example, eBPF records the information about operations on certain files, such as the operator, time, and action, and outputs the information to the logs. + +Process safeguarding: + +- Traces the process life cycles, such as process creation, termination, scheduling, and context switching. +- Modifies the behavior of processes, such as injecting or modifying some system calls or implementing custom scheduling policies. + +Network safeguarding: + +- Traces network activities, such as sending, receiving, forwarding, and discarding network packets. +- Modifies the behavior of networks through filtering and rewriting of network packets and custom routing policies. + +## Feature List + +### Audit and Control for Files, Networks, and Processes + +- Files + + **Functions:** + List of allowed files. + List of denied files and related operations to be blocked. + File open logs, including operation commands, host names, PIDs, and UIDs. + + **Affected operations:** + File or directory open operations, including the create, read, write, and execute modes. + File or directory permission or attribute modifications. + File or directory mapping to the memory. + +- Networks + + **Functions:** + Allowed and denied CIDRs. + Allowed and denied domains. + Allowed and denied operation commands. + Allowed and denied UIDs. + Allowed and denied GIDs. + Network connection logs, including cgroup IDS, PIDs, host names, and operation commands. + + **Affected operations:** + Operations related to network connections, for example, socket creation in the following scenarios: + - A socket invokes the `connect()` or `sendto()` function, and the destination address is not NULL. + - A socket invokes the `accept()` or `recvfrom()` function, and the source address is not NULL. + - A socket invokes the `getpeername()` function, and the return address is not NULL. + +- Processes + + **Functions:** + + Process creation logs, including PIDs, PPIDs, host names, and operation commands. + + **Affected operations:** + + Operations related to process creation, including fork, vfork, and clone. + +### Logs + +Set the log format to JSON or TXT. +Configure the log file output path. +Configure the maximum size to rotate a log file. If the size of a log file exceeds the maximum, a new log file is automatically created. The default size is 100 MB. +Configure the log file rotation time limit. After the time limit is exceeded, a new log file is automatically created. The default time limit is 365 days. +Configure log tags. +Configure log levels. The options are DEBUG (10), INFO (20), WARNING (30), ERROR (40), and CRITICAL (50). + +### Configurations + +Enable or disable the file, process, network, and log modules, and configure the corresponding sub-modules. +Configure the mode. Select **monitor** or **block**. Related operations (such as the list of denied files) are blocked only in **block** mode. diff --git a/docs/en/server/security/safeguard/install_safeguard.md b/docs/en/server/security/safeguard/install_safeguard.md new file mode 100644 index 0000000000000000000000000000000000000000..77ddc4aadd25111837cefc6538ba2fbe0f882b33 --- /dev/null +++ b/docs/en/server/security/safeguard/install_safeguard.md @@ -0,0 +1,49 @@ +# Installation + +## Requirements + +* Linux kernel 5.13.0 + * BTF (`CONFIG_DEBUG_INFO_BTF`) must be enabled. + * BPF LSM (`CONFIG_LSM` with `bpf`) must be enabled. This parameter can also be changed in the boot parameter. + +### Kernel Configuration + +The kernel must have been compiled with the following flags set: + +```shell +CONFIG_BPF=y +CONFIG_BPF_SYSCALL=y +CONFIG_BPF_LSM=y +CONFIF_BPF_JIT=y +CONFIG_HAVE_EBPF_JIT=y +CONFIG_BPF_EVENTS=y +CONFIG_DEBUG_INTO_BTF=y +``` + +Kernel compile flags can usually be checked in `/proc/config.gz` or `/boot/config-`. + +Also, the `CONFIG_LSM` flag must contain `bpf`. This can also be controlled by the following boot parameter: + +```shell +$ cat /etc/default/grub +... +GRUB_CMDLINE_LINUX="... lsm=lockdown,yama,apparmor,bpf" +... +``` + +Finally, run `update-grub2`. + +```shell +sudo update-grub2 +``` + +## Installation + +Download the latest binary. + +```shell +make libbpf-static +make build + +sudo ./build/safeguard --config config/safeguard.yml #|grep BLOCK +``` diff --git a/docs/en/server/security/safeguard/safeguard_user_guide.md b/docs/en/server/security/safeguard/safeguard_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..d92a41570ce0ad16945e4a3fb574693472f29c64 --- /dev/null +++ b/docs/en/server/security/safeguard/safeguard_user_guide.md @@ -0,0 +1,307 @@ +# User Guide + +## Configuration + +The safeguard configuration file is a YAML file that contains `key:value` or `key:[value list]` pairs. + +## Configuration Items + +| Configuration Item | Type | Description | +|:------:|:----|:-----------:| +| `network` | List | Rule for network restrictions. | +| `files` | List | Rule for file access restrictions. | +| `process` | List | Rule for process restrictions. | +| `mount` | List | Rule for mount restrictions. | +| `dns_proxy` | List | DNS proxy configurations. | +| `log` | List containing the following sub-keys:
  • `format: [json\|text]`
  • `output: `
  • `max_size`: Maximum size to rotate (MB). Default: 100MB
  • `max_age`: Period for which logs are kept. Default: 365
  • `labels`: Key/Value to be added to the log.
  • | Log configuration. | + +## Network + +| Configuration Item | Type | Description | +|:------:|:----|:-----------:| +| `enable` | Enum with the following possible values: `true`, `false` | Whether to enable restrictions or not. Default is `true`. | +| `mode` | Enum with the following possible values: `monitor`, `block` | If `monitor` is specified, events are only logged. If `block` is specified, network access is blocked. | +| `target` | Enum with the following possible values: `host`, `container` | Selecting `host` will apply the restriction to hosts. Selecting `container` will apply the restriction only to containers. | +| `cidr` | List containing the following sub-keys:
  • `allow: [cidr list]`
  • `deny: [cidr list]`
  • | Allow or deny CIDRs. | +| `domain` | List containing the following sub-keys:
  • `allow: [domain list]`
  • `deny: [domain list]`
  • | Allow or deny domains. | +| `command` | List containing the following sub-keys:
  • `allow: [command list]`
  • `deny: [command list]`
  • | Allow or deny commands. | +| `uid` | List containing the following sub-keys:
  • `allow: [uid list]`
  • `deny: [uid list]`
  • | Allow or deny UIDs. | +| `gid` | List containing the following sub-keys:
  • `allow: [gid list]`
  • `deny: [gid list]`
  • | Allow or deny GIDs. | + +### Examples + +#### Allowing All Network Connections + +Allow all network communications and monitor their connections. + +```yaml +network: + mode: monitor + target: host + cidr: + allow: ['0.0.0.0/0'] +``` + +#### Blocking Specified Private Networks + +Block access to `192.168.1.1/24` and `10.0.1.1/24`. + +```yaml +network: + mode: block + target: host + cidr: + allow: ['0.0.0.0/0'] + deny: + - 192.168.1.1/24 + - 10.0.1.1/24 +``` + +#### Blocking Metadata Service API + +Block access to the public cloud Metadata Service. This is a mitigation measure against SSRF, etc. + +```yaml +network: + mode: block + target: host + cidr: + allow: ['0.0.0.0/0'] + deny: + - 169.254.169.254/32 +``` + +#### Blocking Connections to a Specified Domain + +Block connections to `example.com`. safeguard periodically looks up IP addresses to keep up with IP address changes. + +```yaml +network: + mode: block + target: host + cidr: + allow: ['0.0.0.0/0'] + domain: + deny: + - example.com +``` + +#### Blocking Network Connections of Containers + +Allow communication from hosts, but block communication from containers. + +```yaml +network: + mode: block + target: container + cidr: + allow: ['0.0.0.0/0'] + domain: + deny: + - example.com +``` + +!!! example + + ```shell + vagrant@ubuntu-impish:~$ curl -I https://example.com + HTTP/2 200 + + vagrant@ubuntu-impish:~$ sudo docker run --rm -it curlimages/curl https://example.com + curl: (7) Couldn't connect to server + ``` + +#### Blocking All Connections from cURL + +```yaml +network: + mode: monitor + target: container + cidr: + allow: ['0.0.0.0/0'] + command: + deny: ['curl'] +``` + +!!! example + + ```shell + vagrant@ubuntu-impish:~$ curl -I https://example.com + curl: (6) Could not resolve host: example.com + + vagrant@ubuntu-impish:~$ wget https://example.com -O /dev/null + --2022-03-09 14:45:11-- http://example.com/ + Resolving example.com (example.com)... 93.184.216.34 + Connecting to example.com (example.com)|93.184.216.34|:80... connected. + HTTP request sent, awaiting response... 200 OK + Length: 1256 (1.2K) [text/html] + Saving to: '/dev/null' + + /dev/null 100%[============================>] 1.23K --.-KB/s in 0s + + 2022-03-09 14:45:12 (70.1 MB/s) - '/dev/null' saved [1256/1256] + ``` + +#### Blocking All Connections from the User Whose UID Is 1000 + +Block network access of the user whose UID is 1000, but allow network access of the user whose UID is 0. + +```yaml +network: + mode: monitor + target: container + cidr: + allow: ['0.0.0.0/0'] + uid: + allow: [0] + deny: [1000] +``` + +!!! example + + ```shell + vagrant@ubuntu-impish:~$ id + uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant) + + vagrant@ubuntu-impish:~$ curl -I https://example.com + curl: (6) Could not resolve host: example.com + + vagrant@ubuntu-impish:~$ sudo curl -I https://example.com + HTTP/2 200 + ``` + +## Files + +Linux kernel 5.13 is required to use these options. + +| Config | Type | Description | +|:------:|:----|:-----------:| +| `enable` | Enum with the following possible values: `true`, `false` | Whether to enable restrictions or not. The default value is `true`. | +| `mode` | Enum with the following possible values: `monitor`, `block` | If `monitor` is specified, events are only logged. If `block` is specified, network access is blocked. | +| `target` | Enum with the following possible values: `host`, `container` | Selecting `host` will apply the restriction to hosts. Selecting `container` will apply the restriction to containers. | +| `allow` | List of allowed file paths| | +| `deny` | List of denied file paths| | + +### Examples + +#### Allowing Access to All Files + +```yaml +file: + mode: monitor + target: host + allow: + - / +``` + +#### Blocking Access to `/etc/passwd` + +```yaml +file: + mode: block + target: host + allow: + - / + deny: + - /etc/passwd +``` + +#### Blocking All Accesses to `/root/.ssh` + +```yaml +file: + mode: block + target: host + allow: + - / + deny: + - /root/.ssh +``` + +#### Blocking Access to `/proc/sys` in Containers + +```yaml +file: + mode: block + target: container + allow: + - / + deny: + - /proc/sys +``` + +!!! example + + ```shell + root@ubuntu-impish:/# ls /proc/sys + abi debug dev fs kernel net user vm + + root@ubuntu-impish:/# docker run --privileged --rm -it ubuntu:latest bash + root@9cf961922b00:/# ls /proc/sys + ls: cannot open directory '/proc/sys': Operation not permitted + ``` + +#### Blocking Escapes from Privileged Containers + +```yaml +file: + mode: block + target: container + allow: + - / + deny: + - /proc/sysrq-trigger + - /sys/kernel + - /proc/sys/kernel +``` + +!!! example + + ```shell + root@ubuntu-impish:/# docker run --privileged --rm -it ubuntu:latest bash + root@e3b2ffe5b284:/# echo c > /proc/sysrq-trigger + bash: /proc/sysrq-trigger: Operation not permitted + + root@e3b2ffe5b284:/# echo '/path/to/evil' > /sys/kernel/uevent_helper + bash: /sys/kernel/uevent_helper: Operation not permitted + + root@e3b2ffe5b284:/# echo '|/path/to/evil' > /proc/sys/kernel/core_pattern + bash: /proc/sys/kernel/core_pattern: Operation not permitted + ``` + +## Processes + +| Configuration Item | Type | Description | +|:------:|:----|:-----------:| +| `enable` | Enum with the following possible values: `true`, `false` | Whether to enable restrictions or not. The default value is `true`. | +| `mode` | Enum with the following possible value: `monitor` | If `monitor` is specified, events are only logged. | +| `target` | Enum with the following possible values: `host`, `container` | Selecting `host` will apply the restriction to hosts. Selecting `container` will apply the restriction to containers. | + +### Examples + +```yaml +mount: + mode: monitor + target: host +``` + +## Mount + +| Configuration Item | Type | Description | +|:------:|:----|:-----------:| +| `enable` | Enum with the following possible values: `true`, `false` | Whether to enable restrictions or not. The default value is `true`. | +| `mode` | Enum with the following possible values: `monitor`, `block` | If `monitor` is specified, events are only logged. If `block` is specified, accesses are blocked. | +| `target` | Enum with the following possible values: `host`, `container` | Selecting `host` will apply the restriction to hosts. Selecting `container` will apply the restriction to containers. | +| `deny` | List of allowed mount paths | | + +### Examples + +#### Blocking the Mount of `/var/run/docker.sock` to Containers + +```yaml +mount: + mode: block + target: host + deny: + - /var/run/docker.sock +``` diff --git a/docs/en/server/security/sbom/.keep b/docs/en/server/security/sbom/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/en/server/security/sbom/_toc.yaml b/docs/en/server/security/sbom/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0e0aaa6553142ec07e237e57b6cc79c4fc18d454 --- /dev/null +++ b/docs/en/server/security/sbom/_toc.yaml @@ -0,0 +1,6 @@ +label: SBOM User Guide +isManual: true +description: SBOM uniquely identifies software components and their contents +sections: + - label: SBOM Overview + href: ./sbom.md diff --git a/docs/en/server/security/sbom/figures/image.png b/docs/en/server/security/sbom/figures/image.png new file mode 100644 index 0000000000000000000000000000000000000000..b4bfa78fee5662ed919d3f2fe76fa407f20f9ec9 Binary files /dev/null and b/docs/en/server/security/sbom/figures/image.png differ diff --git a/docs/en/server/security/sbom/sbom.md b/docs/en/server/security/sbom/sbom.md new file mode 100644 index 0000000000000000000000000000000000000000..61cf9ba6663be1a3e9f3eb705a00bb0448010bcc --- /dev/null +++ b/docs/en/server/security/sbom/sbom.md @@ -0,0 +1,50 @@ +# 1. Introduction to SBOM + +A Software Bill of Materials (SBOM) serves as a formal, machine-readable inventory that uniquely identifies software components and their contents. Beyond basic identification, it tracks copyright and licensing details. Organizations use SBOM to enhance supply chain transparency, and it is rapidly becoming a mandatory deliverable in software distribution. + +# 2. SBOM Core Requirements + +The National Telecommunications and Information Administration (NTIA) has established baseline requirements for SBOM implementation. These essential data elements enable component tracking throughout the software supply chain and serve as the foundation for extended features such as license tracking and vulnerability monitoring. + +| Core Field | Definition | +| ------------------------------- | ------------------------------------------------------------ | +| Supplier | Entity responsible for component creation and identification | +| Component | Official designation of the software unit | +| Version | Tracking identifier for component iterations | +| Other identifiers | Supplementary reference keys | +| Dependencies | Mapping of component relationships and inclusions | +| SBOM author | Entity generating the SBOM documentation | +| Timestamp | SBOM generation date and time | +| **Recommended Optional Fields** | | +| Component hash | Digital fingerprint for security verification | +| Lifecycle phase | Development stage at SBOM creation | + +# 3. openEuler SBOM Implementation + +openEuler's SBOM framework incorporates extensive metadata tracking through SPDX, including: + +| Base Field | SPDX Path | +| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Supplier | document->packages->supplier | +| Name | document->packages->name | +| Version | document->packages->versionInfo (epoch:version-release in openEuler) | +| Other identifiers | document->packages->externalRefs->purl | +| Dependencies | document->packages->externalRefs->purl | +| SBOM author | document->creationInfo->creators | +| Timestamp | document->creationInfo->created | +| Component hash | document->packages->checksums | +| Lifecycle phase | Not supported | +| Other relationships | Internal subcomponents: document->packages->externalRefs(category:PROVIDE_MANAGER)->purl
    Runtime dependencies: document->relationships(relationshipType:DEPENDS_ON) | +| License info | document->packages->licenseDeclared document->packages->licenseConcluded | +| Copyright info | document->packages->copyrightText | +| Upstream community | document->packages->externalRefs(category:SOURCE_MANAGER)->url | +| Patch information | Patch files: document->files(fileTypes:SOURCE)
    Patch relationships: document->relationships(relationshipType:PATCH_APPLIED) | +| Component source | document->packages->downloadLocation | +| Component details | document->packages->description document->packages->summary | +| Website/Blog | document->packages->homepage | + +# 4. SBOM Structure + +The system uses RPM packages as the fundamental unit for SBOM generation and analysis. + +![](./figures/image.png) diff --git a/docs/en/server/security/secdetector/_toc.yaml b/docs/en/server/security/secdetector/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8d368385a623ff61abe52a7eff56a01ade9aa55e --- /dev/null +++ b/docs/en/server/security/secdetector/_toc.yaml @@ -0,0 +1,12 @@ +label: secDetector User Guide +isManual: true +description: secDetector is an OS-native intrusion detection system that protects critical infrastructure through robust detection and response +sections: + - label: Introduction to secDetector + href: ./introduction_to_secdetector.md + - label: Installation and Deployment + href: ./install_secdetector.md + - label: API Reference + href: ./api_reference.md + - label: Using secDetector + href: ./using_secdetector.md \ No newline at end of file diff --git a/docs/en/server/security/secdetector/api_reference.md b/docs/en/server/security/secdetector/api_reference.md new file mode 100644 index 0000000000000000000000000000000000000000..bd67b3168f8cc925e3034f5c4a883656ff691584 --- /dev/null +++ b/docs/en/server/security/secdetector/api_reference.md @@ -0,0 +1,81 @@ +# API Reference + +secDetector provides an SDK for external systems. This section describes the APIs required for developing applications. There are only three APIs and two header files. + +Header files: + +- **secDetector/secDetector_sdk.h**: contains API definitions. + +- **secDetector/secDetector_topic.h**: contains predefined macros required for calling APIs, such as the ID of a topic that can be subscribed to. + +## secSub + +API for subscribing to topics. + +**Functions:** + +This API is used by applications to subscribe to different topics by specifying topic IDs, for example, file opening exception probes. You can view the definitions of topic IDs provided by secDetector in **secDetector_topic.h**. This API can be used to subscribe to multiple topics at a time. The topic IDs of multiple probes can be combined in bitmap format. + +>[!NOTE] **NOTE:** +>A subscription generates a message reader. An application needs to subscribe to all required topics in a subscription API call. In this way, a reader can be used to collect messages. To change the subscribed topics, you can unsubscribe from the topics and subscribe to them again. + +**Function declaration:** + +```c +void *secSub(const int topic); +``` + +**Parameters:** + +- **topic**: input parameter, which specifies a set of topics to be subscribed to. + +**Return values:** + +- **NULL**: The subscription fails. +- **NOT NULL**: gRPC reader of the subscribed topics. + +## secUnsub + +API for unsubscribing from topics. + +**Functions:** + +This API is used by applications to unsubscribe from topics by entering the reader obtained after the subscription is successful. After the unsubscription, applications will not receive messages from the unsubscribed topics. If a topic is not subscribed to by any application, it will not be executed. + +**Function declaration:** + +```c +void secUnsub(void *reader); +``` + +**Parameters:** + +- **reader**: input parameter, which specifies the message reader to be unsubscribed from. + +**Return values:** + +- None + +## secReadFrom + +API for reading messages from subscribed topics. + +**Functions:** + +After a topic is successfully subscribed to using the subscription API, you can use this API to receive messages of the subscribed topic from secDetector before unsubscribing from the topic. This API is in blocking mode. It is recommended that applications use an independent thread to call the API cyclically. This function can be resumed only when there are messages in the subscribed topic. + +**Function declaration:** + +```c +void secReadFrom(void *reader, char *data, int data_len); +``` + +**Parameters:** + +- **reader**: input parameter, which specifies the message reader obtained after the subscription is successful. +- **data**: output parameter, which specifies the message buffer, a segment of memory provided by an application. +- **data_len**: input parameter, which specifies the size of the message buffer. + +**Return values:** + +- None diff --git a/docs/en/server/security/secdetector/install_secdetector.md b/docs/en/server/security/secdetector/install_secdetector.md new file mode 100644 index 0000000000000000000000000000000000000000..ebda0aadadcfa6e653ef0281c6a5bc7f2698c72d --- /dev/null +++ b/docs/en/server/security/secdetector/install_secdetector.md @@ -0,0 +1,107 @@ +# secDetector Installation + +## Software and Hardware Requirements + +### Hardware Requirements + +* x86_64 or AArch64 processors +* Drive: 1 GB or more +* Memory: 100 MB or more + +### OS Requirements + +openEuler 22.03 LTS SP4 or later + +### Environment Setup + +Install the openEuler OS. For details, see the [openEuler Installation Guide](./../../installation_upgrade/installation/installation_guide.md). + +## secDetector Installation + +1. Configure the openEuler yum repository. Since openEuler 22.03 LTS has been configured with the yum repository by default, no additional operation is required. In special cases, configure the online yum repository by referring to the openEuler official document or configure the local yum repository by mounting an ISO file. + +2. Install secDetector. + + ```shell + #Install secDetector. + sudo yum install secDetector + ``` + +> [!NOTE]NOTE: +> +> After secDetector is installed, you can obtain the following files required for deploying secDetector: + +```shell +#Core framework of the kerneldriver of secDetector +/lib/modules/%{kernel_version}/extra/secDetector/secDetector_core.ko + +#Functional component of the kerneldriver of secDetector +/lib/modules/%{kernel_version}/extra/secDetector/secDetector_xxx.ko + +#Daemon process file of secDetector +/usr/bin/secDetectord + +#SDK library files of secDetector +/usr/lib64/secDetector/libsecDetectorsdk.so +/usr/include/secDetector/secDetector_sdk.h +/usr/include/secDetector/secDetector_topic.h +``` + +## secDetector Deployment + +secDetectord, the main body of secDetector, is deployed as a system service. The foreground service system can communicate with secDetectord by integrating the SDK. Because some of the capabilities of secDetector must be built in the kernel, the full set of functions of secDetectord also depends on its background driver. + +### Deploying the Kerneldriver + +1. Insert **secDetector_core.ko**, the basic framework of the kernel driver. It must be deployed prior to other kernel modules. Find the **secDetector_core.ko** directory after the installation and insert it into the kernel. The command is as follows: + + ```shell + sudo insmod secDetector_core.ko + ``` + + **secDetector_core** supports a command line parameter **ringbuf_size**. You can specify the value of this parameter to control the buffer size of the data channel between the kerneldriver and secDetectord in user space. This parameter can be set to an integer ranging from 4 to 1024, in MB. The default value is **4**. The value must be a power of 2. The command is as follows: + + ```shell + sudo insmod secDetector_core.ko ringbuf_size=128 + ``` + +2. Insert the functional modules of the kerneldriver, which are deployed in modular mode. You can deploy required functional modules based on the framework or deploy all modules. The command is as follows: + + ```shell + sudo insmod secDetector_kmodule_baseline.ko + + sudo insmod secDetector_memory_corruption.ko + + sudo insmod secDetector_program_action.ko + + sudo insmod secDetector_xxx.ko + ``` + + * **secDetector_kmodule_baseline.ko** detects the kernel module list and is a memory modification probe. + * **secDetector_memory_corruption.ko** detects memory modifications and is a memory modification probe. + * **secDetector_program_action.ko** detects program behavior and is a program behavior probe. + +### Deploying the usrdriver and observer_agent + +The usrdriver and the observer_agent service have been integrated into secDetectord. The following command is for reference: + +```shell +sudo ./secDetectord & +``` + +The usrdriver provides file operation probes and process management probes. + +secDetectord supports the following configuration options: + +```shell +Syntax: secDetectord [Option] +By default, secDetectord runs in the background, obtains data from probes, and forwards the data to subscribers. +Options: + -d Enter the debug mode in the foreground, and print the probe data on the console. + -s Size of the eBPF buffer, in Mb. The default value is 4. The value of size ranges from 4 to 1024 and must be a power of 2. There are two independent buffers. + -t Events to be subscribed to. By default, all events are subscribed to. A topic is in bitmap format. For example, -t 0x60 subscribes to process creation and exit events at the same time. For details, see include/secDetector_topic.h. +``` + +### SDK Deployment + +By default, the library files of the SDK are deployed in the system library directory. You only need to reference the header files of the SDK in your program. diff --git a/docs/en/server/security/secdetector/introduction_to_secdetector.md b/docs/en/server/security/secdetector/introduction_to_secdetector.md new file mode 100644 index 0000000000000000000000000000000000000000..84783d5af074b515024ebb72d9eaf9b9fe38688c --- /dev/null +++ b/docs/en/server/security/secdetector/introduction_to_secdetector.md @@ -0,0 +1,97 @@ +# About secDetector + +## Overview + +secDetector is an intrusion detection system designed for OSs. It provides intrusion detection and response for critical information infrastructure and reduces development costs while enhancing detection and response for third-party security tools. Based on ATT&CK attack patterns, secDetector provides real-time blocking and flexible responses in addition to a high volume of security primitives. + +secDetector can be used in three modes: + +1. Enabled by system users to generate alarms for and handle abnormal events. +2. Integrated with security awareness services to collect system information for analysis of complex security threats (such as APTs) and real-time blocking of critical events. +3. Used to build accurate, efficient, and timely intrusion detection and response capabilities based on the extensible framework under secondary development of security practitioners or security awareness service providers. + +## Software Architecture + +```text +||==APP===================================================================|| +|| || +|| ---------------------------- || +|| | SDK | || +|| ---------------------------- || +|| /^\ || +||==================================|=====================================|| + | + | + | +||==OBSERVER========================|=====================================|| +|| | || +|| ---------------------------- || +|| | service | || +|| ---------------------------- || +|| /^\ || +||==================================|=====================================|| + | +||==DRIVER================================================================|| +|| || +|| ---------------------------- || +|| | 8 types of cases | || +|| ---------------------------- || +|| || +||------------------------------------------------------------------------|| +|| core || +|| ------------- ---------------- ---------------- ----------------- || +|| | hook unit | | collect unit | | analyze unit | | response unit | || +|| ------------- ---------------- ---------------- ----------------- || +|| || +||========================================================================|| +``` + +secDetector consists of four parts: SDK, service, cases, and core. + +- SDK + + The SDK is provided as a user-mode dynamic link library (DLL) deployed in the security awareness services that requires secDetector. The SDK communicates with the service to complete related operations (such as subscription, unsubscription, and message reading). The exception information provided by secDetector is defined as different cases. The security awareness services can subscribe to the cases as required. + +- service + + The service is a user-mode service application. It manages and maintains the subscriptions of security awareness services and maintains the case running statuses. On a unified environment, it gathers and forwards the information collected by the core and cases to different security awareness services, and manages and forwards the configurations and management requirements of the security awareness services on the cases and core. Because multiple security awareness services may require the same case, the service finds and registers the intersection of cases of all security awareness services. + +- Cases + + The cases correspond to a series of exception detection probes, which are in different forms. For example, each probe for detecting kernel exceptions is available in a kernel module (**.ko** file). A case represents a probe, which usually covers a type of exceptions or exception events. For example, the process probes are for creation, exit, and property modification events of all processes, whereas the memory modification probes collect information such as the kernel module list and security switches. A probe may monitor multiple events, but the monitoring logic may not be deployed in the same execution flow. Workflows are introduced to represent the scope of a probe in the same execution flow, whereby a probe contains one or more workflows. For example, the process probe manages the creation and property modification in different workflows. + +- Core + + The core is the base framework for case management, and provides common functional units required by workflows. The kernel exception detection framework is carried by a kernel module (**.ko** file), in which a case can register itself with or deregister itself from the core. The core also provides specific interaction APIs to handle external dynamic requests. A workflow consists of four types of functional units: event generator, information collector, event analyzer, and response unit. + +The cases and core are combined to be drivers, which provide the bottom-layer system-level implementation of secDetector functions. + +The drivers are classified into kerneldriver and usrdriver. The kerneldriver is deployed in the kernel space as a kernel module. The usrdriver is deployed in the user space as a module in the service. Logically, the usrdriver is under the service. However, to reduce the communication cost, the usrdriver is directly integrated into the service program. + +## Capabilities and Features + +### Detection Capability + +| Feature | Status | Description | +| ------------------------------ | ------ | ------------------------------------------------------------ | +| Detection framework | Implemented | Unified, flexible, scalable, and efficient detection framework that supports different types of triggering, collection, analysis, and response units. | +| Process management probes | Implemented | Monitor process events such as creation, exit, and metadata modification. | +| File operation probes | Implemented | Monitor file events such as creation, deletion, read/write, and attribute modification. | +| Program behavior probes (API calls) | Implemented | Monitor critical program behavior such as anonymous pipe creation, command execution, and ptrace system invoking. | +| Memory modification probes (on critical kernel data) | Implemented | Monitor critical kernel data such as the kernel module list and hardware security function switches. | + +### Response Capability + +| Feature | Status | Description | +| -------- | ------ | -------------------------------------------------- | +| Response framework | Implemented | Unified, flexible, and scalable response framework that supports different types of response units. | +| Alarm reporting | Implemented | Response unit that reports exceptions. | + +### Service Capability + +| Feature | Status | Description | +| -------- | ------ | ------------------------------------------------------------ | +| Communication framework | Implemented | Applications use gRPC to communicate with the service. The functions are encapsulated in the dynamic library of the SDK. | +| Subscription management | Implemented | Applications can subscribe once and use secDetector for a long time to obtain information. secDetector manages the applications and distributes information about subscribed topics.| +| Configuration delivery | Implemented | The service can configure specific detection and blocking features in parameters to implement functions such as filtering and adjustment. Currently, it is not open to applications. | +| Instant detection | Implemented | secDetector provides real-time, accurate, and first-hand information. | diff --git a/docs/en/server/security/secdetector/public_sys-resources/icon-note.gif b/docs/en/server/security/secdetector/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/server/security/secdetector/public_sys-resources/icon-note.gif differ diff --git a/docs/en/server/security/secdetector/using_secdetector.md b/docs/en/server/security/secdetector/using_secdetector.md new file mode 100644 index 0000000000000000000000000000000000000000..0acd802310a50f7c555f60e499d9438f8e1349f6 --- /dev/null +++ b/docs/en/server/security/secdetector/using_secdetector.md @@ -0,0 +1,46 @@ +# secDetector Usage + +secDetector provides an SDK, that is, an **.so** library. Users can integrate the dynamic link library (DLL) into their applications to use secDetector through APIs. This chapter describes how to use the SDK. + +## How to Use + +After secDetector is installed by referring to [secDetector Installation](./install_secdetector.md), **libsecDetectorsdk.so**, **secDetector_sdk.h**, and **secDetector_topic.h** are deployed in the default path of the system user library. + +1. After ensuring that the **include** path is included in the application developed using C or C++, reference the two header files in the application. + + ```c + #include + #include + ``` + +2. Call APIs provided by the SDK to access secDetector by referring to [API Reference](./api_reference.md). + + 1. Call the subscription API secSub to subscribe to the required topics. + 2. Call the message reading API secReadFrom in an independent thread to read the messages from the subscribed topics in blocking mode. + 3. If secDetector is not required, call the secUnsub API for unsubscription. Use the return value of subscription during unsubscription. + +## Sample Code + +See the sample code compiled in Python in the secDetector code repository. + +1. View the sample code at the following link: + + [examples/python · openEuler/secDetector (gitee.com)](https://gitee.com/openeuler/secDetector/tree/master/examples/python) + +2. Alternatively, download sample code. + +```shell +git clone https://gitee.com/openeuler/secDetector.git +``` + +## Specifications and Constraints + +1. Some functions (such as the security switch in memory modification probes) depend on the hardware architecture. They perform differently on different instruction set architectures. +2. The buffer size for transferring data from the kernel to the user mode is shared by probes. If the buffer is full, newly collected event information is discarded. The buffer size ranges from 4 MB to 1,024 MB and must be a power of 2. +3. The service process secDetectord can be run by the **root** user and does not support multiple instances. The program that is not the first to run exits. +4. The maximum number of user subscription connections is 5. +5. After a user subscribes to specific topics, a buffer needs to be provided for the message reading API. Messages that exceed the buffer length will be truncated. It is recommended that the buffer length be greater than or equal to 4096. +6. The length of the description character strings such as the file name and node name is limited. If the length is too long, the description character strings may be truncated. +7. Parallel multi-connection secDetectord for receiving messages is not supported within a single process of an application. Once a subscription is successful, a single connection is used to receive messages. You can subscribe to different topics only after unsubscribing from the subscribed topics. +8. The secDetectord process can be closed and exited only after all applications are disconnected, that is, all topics are unsubscribed. +9. Some functions (such as the security switch in memory modification probes) are based on the CPU status. The basic detection function is to detect the status change of the current CPU. If the status change of other CPUs is not synchronized to the current CPU in time, the status change of other CPUs will not be detected. diff --git a/docs/en/server/security/secgear/_toc.yaml b/docs/en/server/security/secgear/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..96ffb68462cd468f1c85cc029a3c8e89a6693f35 --- /dev/null +++ b/docs/en/server/security/secgear/_toc.yaml @@ -0,0 +1,10 @@ +label: secGear Developer Guide +isManual: true +description: Build applications with secGear to safeguard data during cloud operations +sections: + - label: Introduction to secGear + href: ./introduction_to_secgear.md + - label: secGear Installation + href: ./secgear_installation.md + - label: API Reference + href: ./api_reference.md \ No newline at end of file diff --git a/docs/en/server/security/secgear/api_reference.md b/docs/en/server/security/secgear/api_reference.md new file mode 100644 index 0000000000000000000000000000000000000000..fd8729dc3a58f3882c83f3f994a322455b787c48 --- /dev/null +++ b/docs/en/server/security/secgear/api_reference.md @@ -0,0 +1,689 @@ +# API Reference + +The secGear unified programming framework for confidential computing provides basic APIs that shields the differences between TEE SDKs, as well as advanced features such as switchless, remote attestation, and secure channel. + +## Basic APIs + +### cc_enclave_create + +Creates an enclave. + +**Function:** + +Initialization API. The function calls different TEE creation functions based on the type to initialize the enclave context in different TEE solutions. This API is called by the REE. + +>[!NOTE] **Note:** +> Due to Intel SGX restrictions, memory mapping contention exists when multiple thread invoke cc_enclave_create concurrently. As a result, the creation of the enclave API may fail. Avoid concurrent invocations of cc_enclave_create in your code. + +**Function Declaration:** + +```c +cc_enclave_result_t cc_enclave_create(const char* path, enclave_type_t type, uint32_t version,uint32_t flags,const enclave_features_t* features,uint32_t features_count, + cc_enclave_t ** enclave); +``` + +**Parameters:** + +- **path**: input parameter, which specifies a path of the enclave to be loaded. +- **type**: input parameter, which specifies the TEE solution, for example, SGX_ENCLAVE_TYPE, GP_ENCLAVE_TYPE and AUTO_ENCLAVE_TYPE. +- **version**: input parameter, which specifies the enclave engine version. Currently, there is only one version, and the value is 0. +- **flags**: input parameter, which specifies the running status of the enclave. For example, SECGEAR_DEBUG_FLAG indicates the debugging status, and SECGEAR_SIMULATE_FLAG indicates the simulation status (not supported currently). +- **features**: input parameter, which specifies some features supported by the enclave, for example, PCL and switchless of the SGX. This parameter is not supported currently. Set it to NULL. +- **features_count**: input parameter, which specifies the number of features. This parameter is not supported currently. Set it to 0. +- **enclave**: output parameter, which specifies the created enclave context. + +**Return Values:** + +- CE_SUCCESS: The authentication information is verified successfully. +- CE_ERROR_INVALID_PARAMETER: The input parameter is incorrect. +- CE_ERROR_OUT_OF_MEMORY: No memory is available. +- CC_FAIL: Common failure. +- CC_ERROR_UNEXPECTED: Unexpected error. +- CC_ERROR_ENCLAVE_MAXIMUM: The number of enclaves created by a single app reaches the maximum. +- CC_ERROR_INVALID_PATH: The secure binary path is invalid. +- CC_ERROR_NO_FIND_REGFUNC: The enclave search fails. + +### cc_enclave_destroy + +Destroys an enclave. + +**Function:** + +This API is called by the REE to call the exit functions of different TEEs to release the created enclave entities. + +**Function Declaration:** + +```c +cc_enclave_result_t cc_enclave_destroy (cc_enclave_t ** enclave); +``` + +**Parameter:** + +- **enclave**: input parameter, which specifies the context of the created enclave. + +**Return Values:** + +- CE_SUCCESS: The authentication information is verified successfully. +- CE_ERROR_INVALID_PARAMETER: The input parameter is incorrect. +- CE_ERROR_OUT_OF_MEMORY: No memory is available. +- CC_ERROR_NO_FIND_UNREGFUNC: The enclave search fails. +- CC_FAIL: common failure. +- CC_ERROR_UNEXPECTED: unexpected error. + +### cc_malloc_shared_memory + +Creates the shared memory. + +**Functions** + +After the switchless feature is enabled, this API is called by the REE to create the shared memory that can be accessed by both the TEE and REE. + +**Function Declaration:** + +```c +void *cc_malloc_shared_memory(cc_enclave_t *enclave, size_t size); +``` + +**Parameters:** + +- **enclave**: input parameter, which indicates the context handle of the secure environment. Different platforms have different shared memory models. To ensure cross-platform interface consistency, this parameter is used only on the ARM platform and is ignored on the SGX platform. +- **size**: input parameter, which indicates the size of the shared memory. + +**Return Values:** + +- NULL: Failed to apply for the shared memory. +- Other values: start address of the created shared memory. + +### cc_free_shared_memory + +Releases the shared memory. + +**Functions** + +This API is called by the REE to release the shared memory after the switchless feature is enabled. + +**Function Declaration:** + +```c +cc_enclave_result_t cc_free_shared_memory(cc_enclave_t *enclave, void *ptr); +``` + +**Parameters:** + +- **enclave**: input parameter, which indicates the context handle of the secure environment. Different platforms have different shared memory models. To ensure cross-platform interface consistency, this parameter is used only on the ARM platform (the value of this parameter must be the same as the value of enclave passed when cc_malloc_shared_memory is invoked). It is ignored on the SGX platform. +- **ptr**: input parameter, which indicates the shared memory address returned by cc_malloc_shared_memory. + +**Return Values:** + +- CC_ERROR_BAD_PARAMETERS: invalid input parameter. +- CC_ERROR_INVALID_HANDLE: The enclave is invalid or the input enclave does not match the enclave corresponding to the ptr. (It takes effect only on the ARM platform. The SGX platform ignores the enclave and therefore does not check the enclave.) +- CC_ERROR_NOT_IMPLEMENTED: The API is not implemented. +- CC_ERROR_SHARED_MEMORY_START_ADDR_INVALID: ptr is not the shared memory address returned by cc_malloc_shared_memory (valid only on the ARM platform). +- CC_ERROR_OUT_OF_MEMORY: insufficient memory (valid only on the ARM platform). +- CC_FAIL: common failure. +- CC_SUCCESS: success + +### cc_enclave_generate_random + +Generates random numbers. + +**Function:** + +Generate a secure random number for the password on the TEE. + +**Function Declaration:** + +```c +cc_enclave_result_t cc_enclave_generate_random(void *buffer, size_t size) +``` + +**Parameters:** + +- **buffer**: input parameter, which specifies the buffer for generating random numbers. +- **size**: input parameter, which specifies the buffer length. + +**Return Values:** + +- CE_OK: Authentication information is verified successfully. +- CE_ERROR_INVALID_PARAMETER: incorrect input parameter. +- CE_ERROR_OUT_OF_MEMORY: no memory is available. + +### cc_enclave_seal_data + +Ensures data persistence. + +**Function:** + +This API is called by the TEE to encrypt the internal data of the enclave so that the data can be persistently stored outside the enclave. + +**Function Declaration:** + +```c +cc_enclave_result_t cc_enclave_seal_data(uint8_t *seal_data, uint32_t seal_data_len, + + cc_enclave_sealed_data_t *sealed_data, uint32_t sealed_data_len, + + uint8_t *additional_text, uint32_t additional_text_len) +``` + +**Parameters:** + +- **seal_data**: input parameter, which specifies the data to be encrypted. +- **seal_data_len**: input parameter, which specifies the length of the data to be encrypted. +- **sealed_data**: output parameter, which specifies the encrypted data processing handle. +- **sealed_data_len**: output parameter, which specifies the length of the encrypted ciphertext. +- **additional_text**: input parameter, which specifies the additional message required for encryption. +- **additional_text_len**: input parameter, which specifies the additional message length. + +**Return Values:** + +- CE_SUCCESS: Data encryption succeeds. +- CE_ERROR_INVALID_PARAMETER: incorrect input parameter. +- CE_ERROR_OUT_OF_MEMORY: no memory is available. +- CC_ERROR_SHORT_BUFFER: The input buffer is too small. +- CC_ERROR_GENERIC: Common bottom-layer hardware error. + +### cc_enclave_unseal_data + +Decrypts data. + +**Function:** + +This API is called by the TEE to decrypt the data sealed by the enclave and import the external persistent data back to the enclave. + +**Function Declaration:** + +```c +cc_enclave_result_t cc_enclave_unseal_data(cc_enclave_sealed_data_t *sealed_data, + + uint8_t *decrypted_data, uint32_t *decrypted_data_len, + + uint8_t *additional_text, uint32_t *additional_text_len) +``` + +**Parameters:** + +- **sealed_data**: input parameter, which specifies the handle of the encrypted data. +- **decrypted_data**: output parameter, which specifies the buffer of the decrypted ciphertext data. +- **decrypted_data_len**: output parameter, which specifies the length of the decrypted ciphertext. +- **additional_text**: output parameter, which specifies an additional message after decryption. +- **additional_text_len**: output parameter, which specifies the length of the additional message after decryption. + +**Return Values:** + +- CE_SUCCESS: Data decryption is successful. +- CE_ERROR_INVALID_PARAMETER: incorrect input parameter. +- CE_ERROR_OUT_OF_MEMORY: no memory is available. +- CC_ERROR_SHORT_BUFFER: The input buffer is too small. +- CC_ERROR_GENERIC: common bottom-layer hardware error. + +### cc_enclave_get_sealed_data_size + +Obtains the size of the encrypted data. + +**Function:** + +Obtain the size of the sealed_data data. This API can be called by the TEE and REE to allocate the decrypted data space. + +**Function Declaration:** + +```c +uint32_t cc_enclave_get_sealed_data_size(const uint32_t add_len, const uint32_t seal_data_len); +``` + +**Parameters:** + +- **add_len**: input parameter, which specifies the additional message length. +- **sealed_data_len**: input parameter, which specifies the length of the encrypted information. + +**Return Values:** + +- UINT32_MAX: Parameter error or function execution error. +- others: The function is successfully executed, and the return value is the size of the sealed_data structure. + +### cc_enclave_get_encrypted_text_size + +Obtains the length of an encrypted message. + +**Function:** + +This API is called by the TEE to obtain the length of the encrypted message in the encrypted data. + +**Function Declaration:** + +```c +uint32_t cc_enclave_get_encrypted_text_size(const cc_enclave_sealed_data_t *sealed_data); +``` + +**Parameter:** + +- **sealed_data**: input parameter, which specifies the handle of the encrypted data + +**Return Values:** + +- UINT32_MAX: Parameter error or function execution error. +- others: The function is executed successfully, and the return value is the length of the encrypted message in sealed_data. + +### cc_enclave_get_add_text_size + +Obtains the length of an additional message. + +**Function:** + +This API is called by the TEE to obtain the length of the additional message in the encrypted data. + +**Function Declaration:** + +```c +uint32_t cc_enclave_get_add_text_size(const cc_enclave_sealed_data_t *sealed_data); +``` + +**Parameter:** + +- **sealed_data**: input parameter, handle of the encrypted data. + +**Return Values:** + +- UINT32_MAX: Parameter error or function execution error. +- others: The function is successfully executed, and the return value is the length of the additional message in sealed_data. + +### cc_enclave_memory_in_enclave + +Performs security memory check. + +**Function:** + +This API is called by the TEE to check whether the memory addresses of the specified length belong to the TEE. + +**Function Declaration:** + +```c +bool cc_enclave_memory_in_enclave(const void *addr, size_t size) +``` + +**Parameters:** + +- **\*addr**: input parameter, which specifies the memory address to be verified. +- **size**: input parameter, which specifies the length to be verified starting from the memory address. + +**Return Values:** + +- true: The memory in the specified zone is in the secure zone. +- false: Some or all memory in the specified area is not within the secure range. + +### cc_enclave_memory_out_enclave + +Performs security memory check. + +**Function:** + +This API is called by the TEE to check whether the memory addresses of the specified length belong to the REE. + +**Function Declaration:** + +```c +bool cc_enclave_memory_out_enclave(const void *addr, size_t size) +``` + +**Parameters:** + +- **\*addr**: input parameter, which specifies the memory address to be verified. +- **size**: input parameter, length to be verified starting from the memory address. + +**Return Values:** + +- true: The memory of the specified area is in the non-secure area. +- false: Some or all of the memory in the specified zone is in the secure area. + +### PrintInfo + +Prints messages. + +**Function:** + +Print TEE logs. This API outputs the information that the TEE user wants to print. The input logs are stored in the REE /var/log/secgear/secgear.log. + +**Function Declaration:** + +```c +void PrintInfo(int level, const char *fmt, ...); +``` + +**Parameters:** + +- **level**: log print level, which is an input parameter. The value can be PRINT_ERROR, PRINT_WARNING, PRINT_STRACE, and PRINT_DEBUG. +- **fmt**: Input parameter, and a character to be output. + +**Return Value:** + +- None + +## Switchless + +Switchless optimizes the performance of regular ecalls (for the REE to call the TEE). You can enable switchless in two steps as follows. + +### Enabling Switchless + +Use the **enclave_features_t** parameter of **cc_enclave_create** to enable the switchless feature. For details, see the [switchless example](https://gitee.com/openeuler/secGear/tree/master/examples/switchless). +The configuration items are as follows: + +```c +typedef struct { +uint32_t num_uworkers; +uint32_t num_tworkers; +uint32_t switchless_calls_pool_size; +uint32_t retries_before_fallback; +uint32_t retries_before_sleep; +uint32_t parameter_num; +uint32_t workers_policy; +uint32_t rollback_to_common; +} cc_sl_config_t; +``` + +| Item| Description | +| ------------ | ---- | +| num_uworkers | Number of proxy worker threads in the REE, which are used to make switchless OCALLs. Currently, this field takes effect only on the SGX platform and can be configured on the ARM platform. However, because the ARM platform does not support OCALLs, the configuration does not take effect on the ARM platform.
    Specifications:
    ARM: maximum value: **512**; minimum value: **1**; and default value: **8** (used when **num_uworkers** is set to **0**).
    SGX: maximum value: **4294967295**; minimum value: **1**.| +| num_tworkers | Number of proxy worker threads in the TEE, which are used to make switchless ECALLs.
    Specifications:
    ARM: maximum value: **512**; minimum value: **1**; and default value: **8** (used when **num_tworkers** is set to **0**).
    SGX: maximum value: **4294967295**; minimum value: **1**.| +| switchless_calls_pool_size | Size of the switchless call pool. The pool can contain **switchless_calls_pool_size** x 64 switchless calls. For example, if **switchless_calls_pool_size=1**, 64 switchless calls are contained in the pool.
    Specifications:
    ARM: maximum value: **8**; minimum value: **1**; default value: **1** (used when **switchless_calls_pool_size** is set to **0**)
    SGX: maximum value: **8**; minimum value: **1**; and default value: **1** (used when **switchless_calls_pool_size** is set to **0**).| +| retries_before_fallback | After the **pause** assembly instruction is executed for **retries_before_fallback** times, if the switchless call is not made by the proxy worker thread on the other side, the system rolls back to the switch call mode. This field takes effect only on the SGX platform.
    Specifications:
    SGX: maximum value: **4294967295**; minimum value: **1**; and default value: **20000** (used when **retries_before_fallback** is set to **0**).| +| retries_before_sleep | After the **pause** assembly instruction is executed for **retries_before_sleep** times, if the proxy worker thread does not receive any task, the proxy worker thread enters the sleep state. This field takes effect only on the SGX platform.
    Specifications:
    SGX: maximum value: **4294967295**; minimum value: **1**; and default value: **20000** (used when **retries_before_sleep** is set to **0**).| +| parameter_num | Maximum number of parameters supported by the switchless function. This parameter takes effect only on the ARM platform. There is no such restriction on the SGX platform.
    Specifications:
    ARM: maximum value: **16**; minimum value: **0**.| +| workers_policy | Running mode of the switchless worker thread. This parameter takes effect only on the ARM platform.
    Specifications:
    ARM:
    WORKERS_POLICY_BUSY: The worker thread always occupies CPU resources regardless of whether there are tasks to be processed. This mode is suitable for scenarios that require high performance and have rich system software and hardware resources.
    WORKERS_POLICY_WAKEUP:The worker thread is woken up only when there is a task. After the task is processed, the worker thread enters the sleep state and waits to be woken up by a new task.| +| rollback_to_common | Whether to roll back to common invocation when the asynchronous invocation of switchless fails. This parameter takes effect only on the ARM platform.
    Specifications:
    ARM:0: No. An error code is returned upon failure. Other: Yes. Common invocation is used upon failure.| + +### Enabling ecall + +Use **transition_using_threads** to enable switchless for ecall. + +```ocaml +enclave { + include "secgear_urts.h" + from "secgear_tstdc.edl" import *; + from "secgear_tswitchless.edl" import *; + trusted { + public int get_string([out, size=32]char *buf); + public int get_string_switchless([out, size=32]char *buf) transition_using_threads; + }; +}; +``` + +## Remote Attestation + +The following remote attestation APIs are provided. For details, see the [remote attestation example](https://gitee.com/openeuler/secGear/tree/master/examples/remote_attest) and [local attestation example](https://gitee.com/openeuler/secGear/tree/master/examples/local_attest). + +| User | API | Function | Header File | Library File | +|------|-------------------|----------|-----------------------|----------------------| +| Remote attestation service | cc_prepare_ra_env | Attestation environment initialization | sg_ra_report.h | libsecgear_ra.so | +| Remote attestation service | cc_get_ra_report | Remote attestation report obtaining | sg_ra_report.h | libsecgear_ra.so | +| TA | cc_local_attest | Local attestation | sg_local_attest.h | libsecgear_la.a | +| Verifier | cc_verify_report | Remote attestation report verification | sg_ra_report_verify.h | libsecgear_verify.so | + +## Secure Channel + +The secure channel is provided as a library and consists of the client, host, and enclave, which are icalled by the client, server client application (CA), and server trusted application (TA) of the service program respectively. + +| Module | Header File | Library File | Dependency | +|------------|--------------------------|-----------------------|---------| +| Client | secure_channel_client.h | libcsecure_channel.so | OpenSSL | +| Host | secure_channel_host.h | libusecure_channel.so | OpenSSL | +| Enclave | secure_channel_enclave.h | libtsecure_channel.so | TEE and TEE software stack | + +### APIs + +| API | Header File and Library | Function | Remarks| +|----------------------------------------------------------------------------------------------------------------------------------------------|-----------------------|--------------|----| +| cc_sec_chl_client_init | secure_channel_client.h libcsecure_channel.so | Initializes the secure channel on the client. | Before calling this API, initialize the network connection and message sending hook function in the **ctx** parameter. | +| cc_sec_chl_client_fini | secure_channel_client.h libcsecure_channel.so | Destroys the secure channel on the client. | Instructs the server to destroy the local client information and local secure channel information. | +| cc_sec_chl_client_callback | secure_channel_client.h libcsecure_channel.so | Function for processing secure channel negotiation messages.| Processes messages sent from the server to the client during secure channel negotiation. This API is called when messages are received on the client. | +| cc_sec_chl_client_encrypt | secure_channel_client.h libcsecure_channel.so | Encryption API of the secure channel on the client. | None | +| cc_sec_chl_client_decrypt | secure_channel_client.h libcsecure_channel.so | Decryption API of the secure channel on the client. | None | +| int (*cc_conn_opt_funcptr_t)(void*conn, void *buf, size_t count); | secure_channel.h | Prototype of the message sending hook function. | Implemented by the client and server to specify the secure channel negotiation message type. It sends secure channel negotiation messages to the peer end. | +| cc_sec_chl_svr_init | secure_channel_host.h libusecure_channel.so | Initializes the secure channel on the server. | Before calling this API, initialize **enclave_ctx** in **ctx**. | +| cc_sec_chl_svr_fini | secure_channel_host.h libusecure_channel.so | Destroys the secure channel on the server. | Destroys information about the secure channel on the server and all clients. | +| cc_sec_chl_svr_callback | secure_channel_host.h libusecure_channel.so | Function for processing secure channel negotiation messages. | Processes messages sent from the client to the server during security channel negotiation. This API is called when messages are received on the server. Before calling this API, you need to initialize the network connection to the client and the message sending hook function. For details, see [examples](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 | Encryption API of the secure channel on the enclave. | None | +| cc_sec_chl_enclave_decrypt | secure_channel_enclave.h libtsecure_channel.so | Decryption API of the secure channel on the enclave. | None| + +### Precautions + +- A secure channel encapsulates only the key negotiation process and encryption and decryption APIs, but does not establish any network connection. The negotiation process reuses the network connection of the service. The network connection between the client and server is established and maintained by the service. The message sending hook function and network connection pointer are transferred during the initialization of the secure channel on the client and the server. +- The read buffer of the network message receiving function on the client and server must be big enough to contain the secure channel initialization message of 12,320 bytes. +For details, see [secure channel examples](https://gitee.com/openeuler/secGear/tree/master/examples/secure_channel). + +# Development Tools + +secGear provides a tool set to facilitate application development. This document describes the tools and how to use them. + +## Code Generation Tool + +### Overview + +secGear codegen is used to parse the EDL file to generate intermediate C code, that is, to assist in generating code that is called between the TEE and REE. + +The EDL file format defined by secGear codegen is the same as that defined by Intel SGX SDK edger8r, but the complete syntax definition of Intel is not supported: + +- The public can be used only in methods. Functions without public are declared as private by default. +- Switchless calls from the REE to the TEE and from the TEE to the REE are not supported. +- The Outside Call (OCALL) does not support some calling modes (such as cdecl, stdcall, and fastcall). + +The EDL file syntax is similar to the C language syntax. The following describes parts different from the C language syntax: + +| Member | Description | +| ----------------------- | ------------------------------------------------------------ | +| include "my_type.h" | Uses the type defined in the external inclusion file. After the type is added, you need to use **--search-path** to specify the search path when running the **codegen** command. | +| trusted | Declares that secure functions are available on the trusted application (TA) side. | +| untrusted | Declares that insecure functions are available on the TA side. | +| return_type | Defines the return value type. | +| parameter_type | Defines the parameter type. | +| \[in, size = len] | For the ECALL, this parameter indicates that data needs to be transferred from the REE to the TEE. For the OCALL, this parameter is required for the pointer type, and size indicates the buffer that is actually used. | +| \[out, size = len] | For the ECALL, this parameter indicates that data needs to be transferred from the TEE to the REE. For the OCALL, this parameter needs to be used for the pointer type, and size indicates the buffer that is actually used.| + +### Usage Instructions + +#### Command Format + +The format of the codegen command is as follows: + +**codegen** \< --trustzone | --sgx > [--trusted-dir \ | **--untrusted-dir** \| --trusted | --untrusted ] edlfile + +#### Parameter Description + +The parameters are described as follows: + +| **Parameter** | Mandatory/Optional | Description | +| ---------------------- | -------- | ------------------------------------------------------------ | +| --trustzone \| --sgx | Mandatory | Generates the API function corresponding to the confidential computing architecture only in the current command directory. If no parameter is specified, the SGX API function is generated by default. | +| --search-path \ | Optional | Specifies the search path of the file that the EDL file to be converted depends on. | +| --use-prefix | Optional | Adds a prefix to the proxy function name. The prefix is the name of the EDL file. | +| --header-only | Optional | Specifies that the code generation tool generates only header files. | +| --trusted-dir \ | Optional | Specifies the directory where the generated TEE auxiliary code is stored. If this parameter is not specified, the current path is used by default. | +| --untrusted-dir \ | Optional | Specifies the directory where the auxiliary code for generating insecure functions is located. | +| --trusted | Optional | Generates TEE auxiliary code. | +| --untrusted | Optional | Generates REE auxiliary code. | +| edlfile | Mandatory | EDL file to be converted, for example, hello.edl. | + +#### Examples + +- Convert *helloworld.edl* to generate TEE auxiliary code in *enclave-directory* and generate REE auxiliary code in *host-directory*. An example command is as follows: + +```shell +codegen_x86_64 --sgx --trusted-dir enclave-directory --untrusted-dir host-directory helloworld.edl +``` + +- Convert *helloworld.edl* to generate TEE auxiliary code in the current directory. The following is a command example for not generating REE auxiliary code: + +```shell +codegen_x86_64 --sgx --trusted helloworld.edl +``` + +- Convert *helloworld.edl* to generate REE auxiliary code in the current directory. The following is a command example that does not generate TEE auxiliary code: + +```shell +codegen_x86_64 --sgx --untrusted helloworld.edl +``` + +- Convert *helloworld.edl*. An example of the command for generating TEE and REE auxiliary code in the current directory is as follows: + +```shell +codegen_x86_64 --sgx helloworld.edl +``` + +## Signing Tool + +### Overview + +secGear sign_tool is a command line tool, including the compilation tool chain and signature tool, which are used for enclave signing. The sign_tool has two signature modes: + +- Single-step signature: applies only to the debugging mode. +- Two-step signature: applies to the commercial scenario. Obtain the signature private key from a third-party platform or an independent security device to sign the enclave. + +### Usage Instructions + +#### Command Format + +The sign_tool contains the `sign` command (for signing the enclave) and the `digest` command (for generating the digest value). + +**sign_tool.sh -d** [sign | digest] **-x** \ **-i** \ **-p** \ **-s** \ [OPTIONS] **–o** \ + +#### Parameter Description + +| sign Command Parameter | Description | Mandatory/Optional | +| -------------- | -------------------------------------------------------------| -------------------------------------------- | +| -a \ | api_level, which identifies the GP API version of the iTrustee TA. The default value is 1. | Optional | +| -c \ | Configuration file | Optional | +| -d \ | Specifies the operation (sign or digest) to be performed by the signature tool. | Only the sign operation is performed in single-step mode. In two-step mode, the digest operation must be performed before the sign operation. | +| -e \ | Public key certificate of the device, which is used to protect the AES key for encrypting rawdata (mandatory for iTrustee). | This parameter is mandatory only for the iTrustee type. | +| -f \ | OTRP_FLAG, which determines whether to support the OTRP standard protocol. The default value is 0. | Optional | +| -i \ | Library file to be signed. | Mandatory | +| -k \ | Private key (PEM file) required for one-step signature. | This parameter is mandatory only for the SGX type. | +| -m \ | Security configuration file mainfest.txt, which is configured by users. | Only the iTrustee type is mandatory. | +| -o \ | Output file. | Mandatory | +| -p \ | Public key certificate (PEM file) of the signature server required for two-step signing. | Mandatory | +| -s \ | Signed digest value required for two-step signing. | Mandatory | +| -t \ | TA_TYPA, which identifies TA binary format of the iTrustee. The default value is 1. | Optional | +| -x \ | enclave type (sgx or trustzone) | Mandatory | +| -h | Prints the help information. | Optional | + +#### Single-Step Signing + +Set the enclave type is SGX, sign the test.enclave, and generate the signature file signed.enclave. The following is an example: + +```shell +sign_tool.sh –d sign –x sgx –i test.enclave -k private_test.pem –o signed.enclave +``` + +#### Two-Step Signing + +The following uses SGX as an example to describe the two-step signature procedure: + +1. Generate digest value. + + Use the sign_tool to generate the digest value digest.data and the temporary intermediate file signdata. The file is used when the signature file is generated and is automatically deleted after being signed. Example: + + ```shell + sign_tool.sh –d digest –x sgx –i input –o digest.data + ``` + +2. Send digest.data to the signature authority or platform and obtain the corresponding signature. + +3. Use the obtained signature to generate the signed dynamic library signed.enclave. + + ```shell + sign_tool.sh –d sign –x sgx–i input –p pub.pem –s signature –o signed.enclave + ``` + +Note: To release an official version of applications supported by Intel SGX, you need to apply for an Intel whitelist. For details about the process, see the Intel document at . + +# Secure Application Development Guide + +The following example describes how to use secGear to develop a helloworld program using the C language. + +## Example Download + +```shell +git clone https://gitee.com/openeuler/secGear.git +``` + +## Directory Structure + +```shell +cd examples/helloworld + +#Directory structure: +├── helloworld +│ ├── CMakeLists.txt +│ ├── enclave +│ │ ├── CMakeLists.txt +│ │ ├── Enclave.config.xml +│ │ ├── Enclave.lds +│ │ ├── hello.c +│ │ ├── manifest.txt +│ │ └── config_cloud.ini +│ ├── helloworld.edl +│ └── host +│ ├── CMakeLists.txt +│ └── main.c +``` + +The code body consists of three parts: + +- **main.c**: REE program +- **helloworld.edl**: header file of the APIs called by the REE and TEE +- **hello.c**: TEE program + +## Preparations + +In addition to the preceding three parts, there are compilation project file (**CMakeLists.txt**) and developer licenses (**Enclave.config.xml**/**Enclave.lds** of Intel SGX and **manifest.txt**/**config_cloud.ini** of Kunpeng). + +> [!NOTE]NOTE: +> +> - The Kunpeng developer license needs to be [applied for from the Huawei service owner](https://www.hikunpeng.com/document/detail/en/kunpengcctrustzone/fg-tz/kunpengtrustzone_04_0009.html). +> - Because Intel SGX is debugged in debug mode, you do not need to apply for a developer license currently. If the remote attestation service of Intel is required for commercial use, you need to [apply for a license from Intel](https://www.intel.com/content/www/us/en/developer/tools/software-guard-extensions/request-license.html). + +After the application is successful, the developer license file is obtained and needs to be stored in the corresponding code directory. + +## Development Procedure + +Reconstructing a confidential computing application based on secGear is similar to independently extracting functional modules. The procedure is as follows: Identify sensitive data processing logic, extract it into an independent library, deploy it in the TEE, and define APIs provided by the REE in the EDL file. + +The following figure shows the development procedure. + +1. Develop the main function and APIs in the REE, manage the enclave, and call functions in the TEE. +2. Develop the EDL file (similar to the C language header file that defines the interaction APIs between the REE and TEE). +3. Develop TEE APIs. +4. Call the code generation tool codegener to automatically generate the interaction source code between the REE and TEE based on the EDL file and compile the source code to the binary files of the REE and TEE. The REE logic directly calls the corresponding API of the TEE without considering the automatically generated interaction code, reducing the development cost. +5. Call the signing tool to sign binary files in the TEE to implement trusted boot of the TEE program. + +![](./figures/develop_step.png) + +## Build and Run + +### Arm Environment + +```shell +# Clone secGear repository +git clone https://gitee.com/openeuler/secGear.git + +# Build secGear and examples +cd secGear +source environment +mkdir debug && cd debug && cmake -DENCLAVE=GP .. && make && sudo make install + +# Run helloworld +/vendor/bin/secgear_helloworld +``` + +### x86 Environment + +```shell +# Clone secGear repository +git clone https://gitee.com/openeuler/secGear.git + +# Build secGear and examples +cd secGear +source /opt/intel/sgxsdk/environment && source environment +mkdir debug && cd debug && cmake .. && make && sudo make install + +# Run helloworld +./examples/helloworld/host/secgear_helloworld +``` diff --git a/docs/en/server/security/secgear/figures/develop_step.png b/docs/en/server/security/secgear/figures/develop_step.png new file mode 100644 index 0000000000000000000000000000000000000000..4241739df0bcd015dc1589f023d5d1d44f839438 Binary files /dev/null and b/docs/en/server/security/secgear/figures/develop_step.png differ diff --git a/docs/en/server/security/secgear/figures/secGear_arch.png b/docs/en/server/security/secgear/figures/secGear_arch.png new file mode 100644 index 0000000000000000000000000000000000000000..7cdafb8e26b2606defe21596425715bc86700873 Binary files /dev/null and b/docs/en/server/security/secgear/figures/secGear_arch.png differ diff --git a/docs/en/server/security/secgear/introduction_to_secgear.md b/docs/en/server/security/secgear/introduction_to_secgear.md new file mode 100644 index 0000000000000000000000000000000000000000..0cde9a80fa0acfab756cd222b5ec05565fc463c1 --- /dev/null +++ b/docs/en/server/security/secgear/introduction_to_secgear.md @@ -0,0 +1,57 @@ +# Introduction to secGear + +## Overview + +With the rapid development of cloud computing, more and more enterprises deploy computing services on the cloud. The security of user data on the third-party cloud infrastructure is facing great challenges. Confidential computing is a technology that uses hardware-based trusted execution environments (TEEs) to protect confidentiality and integrity of data in use. It relies on the bottom-layer hardware to build the minimum trust dependency, which removes the OS, hypervisor, infrastructure, system administrator, and service provider from the trusted entity list as unauthorized entities to reduce potential risks. There are various confidential computing technologies (such as Intel SGX, Arm TrustZone, and RISC-V Keystone) and software development kits (SDKs) in the industry and the application ecosystem of different TEEs are isolated from each other, which brings high development and maintenance costs to confidential computing application developers. To help developers quickly build confidential computing solutions that protect data security on the cloud, openEuler launches the unified confidential computing programming framework secGear. + +## Architecture + +![](./figures/secGear_arch.png) + +secGear features the following benefits: + +- **Architecture compatibility**: It masks differences between different SDK APIs by sharing the same set of source code across multiple architectures. +- **Easy development**: The development tools and common security components allow users to focus on services, significantly improving development efficiency. +- **High performance**: The switchless feature improves the interaction performance between the rich execution environment (REE) and TEE by more than 10-fold in typical scenarios such as frequent interactions between the REE and TEE and big data interaction. + +## Key Features + +### Switchless + +#### Pain Points + +After a conventional application is reconstructed using confidential computing, the rich execution environment (REE) logic frequently invokes the TEE logic or the REE frequently exchanges large data blocks with the TEE. Each call between the REE and TEE requires context switching among the REE user mode, REE kernel mode, driver, TEE kernel mode, and TEE user mode. When large blocks of data are exchanged during the call, multiple memory copies are generated. In addition, the interaction performance between the REE and TEE deteriorates due to factors such as the size limit of underlying data blocks, which severely affects the implementation of confidential computing applications. + +#### Solution + +Switchless is a technology that uses shared memory to reduce the number of context switches and data copies between the REE and TEE to optimize the interaction performance. + +### Remote Attestation + +#### Pain Points + +Confidential computing is developed to ensure data security on the cloud. However, due to the damage of data leakage, tenants still have concerns about the theoretical security of confidential computing, which affects its promotion and application. + +#### Solution + +Confidential computing vendors have launched the remote attestation technology, which enables tenants to detect the trustworthiness status of the TEE and TAs on the cloud at any time. +Remote attestation is a real-time measurement technology that measures the TEE and applications running in the TEE, generates attestation reports, and uses the preset root key to sign the reports to prevent them from being tampered with or forged. +secGear encapsulates remote attestation APIs based on the remote attestation capability of each vendor's SDK. secGear must run on the Kunpeng platform. + +### Secure Channel + +#### Pain Points + +When requesting the confidential computing service on the cloud, the data owner needs to upload the data to be processed to the TEE on the cloud for processing. Because the TEE is not connected to the network, the data needs to be transferred to the REE over the network in plaintext and then transferred to the TEE from the REE. The data plaintext is exposed in the REE memory, which poses security risks. + +#### Solution + +A secure channel is a technology that combines confidential computing remote attestation to implement secure key negotiation between the data owner and the TEE on the cloud. It negotiates a sessionkey owned only by the data owner and the TEE on the cloud. Then the sessionkey is used to encrypt user data transferred over the network. After receiving the ciphertext data, the REE transfers the data to the TEE for decryption and processing. + +## Acronyms and Abbreviations + +| Acronym/Abbreviation| Full Name | +| ------ | ----------------------------- | +| REE | rich execution environment | +| TEE | trusted execution environment| +| EDL | enclave description language | diff --git a/docs/en/server/security/secgear/public_sys-resources/icon-note.gif b/docs/en/server/security/secgear/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/server/security/secgear/public_sys-resources/icon-note.gif differ diff --git a/docs/en/server/security/secgear/secgear_installation.md b/docs/en/server/security/secgear/secgear_installation.md new file mode 100644 index 0000000000000000000000000000000000000000..bd6527e0b46c814ac0a6f4b375c5aab26f595d9b --- /dev/null +++ b/docs/en/server/security/secgear/secgear_installation.md @@ -0,0 +1,126 @@ +# secGear Installation + +## Arm Environment + +### Environment Requirements + +#### Hardware + +| Item | Model | +| ------ | --------------------------------------------------- | +| Server| TaiShan 200 server (model 2280) | +| Mainboard | Kunpeng board | +| BMC | 1711 board (model BC82SMMAB); firmware version: 3.01.12.49 or later| +| CPU | Kunpeng 920 processor (model 7260, 5250, or 5220) | +| Chassis | No special requirements; an 8- or 12-drive chassis recommended | + +> ![img](./public_sys-resources/icon-note.gif)NOTE +> +> - Ensure that the TrustZone feature kit has been preconfigured on the server. That is, the TEE OS, TEE OS boot key, BMC, BIOS, and license have been preconfigured on the server. +> - For common servers, the TrustZone feature cannot be enabled only by upgrading the BMC, BIOS, and TEE OS firmware. +> - By default, the TrustZone feature is disabled on the server. For details about how to enable the TrustZone feature on the server, see BIOS settings. + +#### OS + +openEuler 20.03 LTS SP4 or later + +openEuler 22.09 + +openEuler 22.03 LTS or later + +### Environment Preparation + + For details, see [Environment Requirements](https://www.hikunpeng.com/document/detail/en/kunpengcctrustzone/fg-tz/kunpengtrustzone_04_0006.html) and [Procedure](https://www.hikunpeng.com/document/detail/en/kunpengcctrustzone/fg-tz/kunpengtrustzone_04_0007.html) on the Kunpeng official website. + +### Installation + +1. Configure the openEuler Yum source. You can configure an online Yum source or configure a local Yum source by mounting an ISO file. The following uses openEuler 22.03 LTS as an example. For other versions, use the Yum source of the corresponding version. + + ```shell + vi openEuler.repo + [osrepo] + name=osrepo + baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/aarch64/ + enabled=1 + gpgcheck=1 + gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/aarch64/RPM-GPG-KEY-openEuler + ``` + +2. Install secGear. + + ```shell + # Install the compiler. + yum install cmake ocaml-dune + + # Install secGear. + yum install secGear-devel + + # Check whether the installations are successful. If the command output is as follows, the installations are successful. + $ rpm -qa | grep -E 'secGear|itrustee|ocaml-dune' + itrustee_sdk-xxx + itrustee_sdk-devel-xxx + secGear-xxx + secGear-devel-xxx + ocaml-dune-xxx + ``` + +## x86 Environment + +### Environment Requirements + +#### Hardware + +Processor that supports the Intel SGX feature + +#### OS + +openEuler 22.03 LTS SP4 or later + +openEuler 22.09 + +openEuler 22.03 LTS or later + +### Environment Preparation + +Purchase a device that supports the Intel SGX feature and enable the SGX feature by referring to the BIOS setting manual of the device. + +### Installation + +1. Configure the openEuler Yum source. You can configure an online Yum source or configure a local Yum source by mounting an ISO file. The following uses openEuler 22.03 LTS as an example. For other versions, use the Yum source of the corresponding version. + + ```shell + $ vi openEuler.repo + [osrepo] + name=osrepo + baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/x86_64/ + enabled=1 + gpgcheck=1 + gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/x86_64/RPM-GPG-KEY-openEuler + ``` + +2. Install secGear. + + ```shell + # Install the compiler. + yum install cmake ocaml-dune + + # Install secGear. + yum install secGear-devel + + # Check whether the installations are successful. If the command output is as follows, the installations are successful. + $ rpm -qa | grep -E 'secGear|ocaml-dune|sgx' + secGear-xxx + secGear-devel-xxx + ocaml-dune-xxx + libsgx-epid-xxx + libsgx-enclave-common-xxx + libsgx-quote-ex-xxx + libsgx-aesm-launch-plugin-xxx + libsgx-uae-service-xxx + libsgx-ae-le-xxx + libsgx-urts-xxx + sgxsdk-xxx + sgx-aesm-service-xxx + linux-sgx-driver-xxx + libsgx-launch-xxx + ``` diff --git a/docs/en/server/security/secharden/_toc.yaml b/docs/en/server/security/secharden/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d3811481ae3e9f2760e48e8967f4c911e98975e5 --- /dev/null +++ b/docs/en/server/security/secharden/_toc.yaml @@ -0,0 +1,27 @@ +label: Security Hardening Guide +isManual: true +description: Security hardening techniques and tools +sections: + - label: OS Hardening Overview + href: ./os_hardening_overview.md + - label: Security Configuration Description + href: ./security_configuration_benchmark.md + - label: Security Hardening Guide + href: ./secharden.md + sections: + - label: Account Passwords + href: ./account_passwords.md + - label: Authentication and Authorization + href: ./authentication_and_authorization.md + - label: System Services + href: ./system_services.md + - label: File Permissions + href: ./file_permissions.md + - label: Kernel Parameters + href: ./kernel_parameters.md + - label: SELinux Configuration + href: ./selinux_configuration.md + - label: Security Hardening Tools + href: ./security_hardening_tool.md + - label: Appendix + href: ./appendix.md \ No newline at end of file diff --git a/docs/en/server/security/secharden/account_passwords.md b/docs/en/server/security/secharden/account_passwords.md new file mode 100644 index 0000000000000000000000000000000000000000..a563cab1daf8f4a883ebba14510bc0c72f602756 --- /dev/null +++ b/docs/en/server/security/secharden/account_passwords.md @@ -0,0 +1,320 @@ +# Account Passwords + +## Shielding System Accounts + +### Description + +Accounts excluding user accounts are system accounts. System accounts cannot be used for logins or performing other operations. Therefore, system accounts must be shielded. + +### Implementation + +Modify the shell of a system account to **/sbin/nologin**. + +```shell +usermod -L -s /sbin/nologin $systemaccount +``` + +>[!NOTE] **NOTE:** +>_$systemaccount_ indicates the system account. + +## Restricting Account Permissions on the su Command + +### Description + +The **su** command is used to switch user accounts. To improve system security, only the user **root** and users in the **wheel** group can use the **su** command. + +### Implementation + +Modify the **/etc/pam.d/su** file as follows: + +```text +auth required pam_wheel.so use_uid +``` + +**Table 1** Configuration item in pam\_wheel.so + + + + + + + + + + +

    Item

    +

    Description

    +

    use_uid

    +

    UID of the current account.

    +
    + +## Setting Password Complexity + +### Description + +You can set the password complexity requirements by modifying the corresponding configuration file. You are advised to set the password complexity based on the site requirements. + +### Implementation + +The password complexity is implemented by the **pam\_pwquality.so** and **pam\_pwhistory.so** modules in the **/etc/pam.d/password-auth** and **/etc/pam.d/system-auth** files. You can modify the configuration items of the two modules to change the password complexity requirements. + +### Example + +This section provides an example for configuring password complexity. + +**Password Complexity Requirements** + +1. Contains at least eight characters. +2. Contains at least three types of the following characters: + + - At least one lowercase letter + + - At least one uppercase letter + + - At least one digit + + - At least one space or one of the following special characters: \` \~ ! @ \# $ % ^ & \* \( \) - \_ = + \\ | \[ \{ \} \] ; : ' " , < . \> / ? + +3. Cannot be the same as an account name or the account name in reverse order. +4. Cannot be the last five passwords used. + +**Implementation** + +Add the following content to the first two lines of the **password** configuration item in the **/etc/pam.d/password-auth** and **/etc/pam.d/system-auth** files: + +```text +password requisite pam_pwquality.so minlen=8 minclass=3 enforce_for_root try_first_pass local_users_only retry=3 dcredit=0 ucredit=0 lcredit=0 ocredit=0 +password required pam_pwhistory.so use_authtok remember=5 enforce_for_root +``` + +**Configuration Item Description** + +For details about the configuration items of **pam\_pwquality.so** and **pam\_pwhistory.so**, see [Table 2](#table201221044172117) and [Table 3](#table1212544452120), respectively. + +**Table 2** Configuration items in pam\_pwquality.so + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Item

    +

    Description

    +

    minlen=8

    +

    A password must contain at least eight characters.

    +

    minclass=3

    +

    A password must contain at least three of the following types: uppercase letters, lowercase letters, digits, and special characters.

    +

    ucredit=0

    +

    A password contains any number of uppercase letters.

    +

    lcredit=0

    +

    A password contains any number of lowercase letters.

    +

    dcredit=0

    +

    A password contains any number of digits.

    +

    ocredit=0

    +

    A password contains any number of special characters.

    +

    retry=3

    +

    Each time a maximum of three password changes is allowed.

    +

    enforce_for_root

    +

    This configuration is also effective for user root.

    +
    + +**Table 3** Configuration items in pam\_pwhistory.so + + + + + + + + + + + + + +

    Item

    +

    Description

    +

    remember=5

    +

    A password must be different from the last five passwords used.

    +

    enforce_for_root

    +

    This configuration is also effective for user root.

    +
    + +## Setting the Password Validity Period + +### Description + +To ensure system security, you are advised to set the password validity period and notify users to change passwords before the passwords expire. + +### Implementation + +The password validity period is set by modifying the **/etc/login.defs** file. [Table 4](#en-us_topic_0152100281_t77b5d0753721450c81911c18b74e82eb) describes the hardening items. All hardening items in the table are in the **/etc/login.defs** file. You can directly modify the items in the configuration file. + +**Table 4** Configuration items in login.defs + + + + + + + + + + + + + + + + + + + + + + + + +

    Item

    +

    Description

    +

    Suggestion

    +

    Configured as Suggested

    +

    PASS_MAX_DAYS

    +

    Maximum validity period of a password.

    +

    90

    +

    No

    +

    PASS_MIN_DAYS

    +

    Minimum interval between password changes.

    +

    0

    +

    Yes

    +

    PASS_WARN_AGE

    +

    Number of days before the password expires.

    +

    7

    +

    Yes

    +
    + +>[!NOTE] **NOTE:** +>The **login.defs** file is used to set restrictions on user accounts, such as setting the maximum password validity period and maximum length. The configuration in this file is invalid for the user **root**. If the **/etc/shadow** file contains the same items, the **/etc/shadow** configuration takes precedence over the **/etc/login.defs** configuration. When a user attempts to log in after the password expires, the user will be informed of the password expiry and is required to change the password. If the user does not change the password, the user cannot access the system. + +## Setting Password Encryption Algorithms + +### Description + +For system security, passwords cannot be stored in plaintext in the system and must be encrypted. The passwords that do not need to be restored must be encrypted using irreversible algorithms. Set the password encryption algorithm to SHA-512. This item has been set by default in openEuler. The preceding settings can effectively prevent password disclosure and ensure password security. + +### Implementation + +To set the password encryption algorithm, add the following configuration to the **/etc/pam.d/password-auth** and **/etc/pam.d/system-auth** files: + +```text +password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok +``` + +**Table 5** Configuration items in pam\_unix.so + + + + + + + + + + +

    Item

    +

    Description

    +

    sha512

    +

    The SHA-512 algorithm is used for password encryption.

    +
    + +## Locking an Account After Three Login Failures + +### Description + +To ensure user system security, you are advised to set the maximum number of failed login attempts \(three attempts are recommended\) and the automatic unlocking time \(300 seconds are recommended\) for a locked account. + +If an account is locked, any input is invalid but does not reset the locking countdown timer. Records of the user's invalid inputs are cleared once unlocked. The preceding settings protect passwords from being forcibly cracked and improve system security. + +>[!NOTE] **NOTE:** +>By default, the maximum number of failed login attempts is 3 in openEuler. After an account is locked, the automatic unlock time is 60 seconds. + +### Implementation + +The password complexity is set by modifying the **/etc/pam.d/password-auth** and **/etc/pam.d/system-auth** files. The maximum number of failed login attempts is set to **3**, and the unlocking time after an account is locked is set to **300** seconds. The configuration is as follows: + +```text +auth required pam_faillock.so preauth audit deny=3 even_deny_root unlock_time=300 +auth [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=300 +auth sufficient pam_faillock.so authsucc audit deny=3 even_deny_root unlock_time=300 +``` + +**Table 6** Configuration items in pam\_faillock.so + + + + + + + + + + + + + + + + + + + +

    Item

    +

    Description

    +

    authfail

    +

    Captures account login failure events.

    +

    deny=3

    +

    A user account will be locked after three failed login attempts.

    +

    unlock_time=300

    +

    A locked common user account is automatically unlocked after 300 seconds.

    +

    even_deny_root

    +

    This configuration is also effective for user root.

    +
    + +## Hardening the su Command + +### Description + +To enhance system security and prevent the environment variables of the current user from being brought into other environments when you run the **su** command to switch to another user, this item has been configured by default in openEuler. The **PATH** variable is always initialized when the **su** command is used to switch users. + +### Implementation + +Modify the **/etc/login.defs** file. The configuration is as follows: + +```text +ALWAYS_SET_PATH=yes +``` diff --git a/docs/en/server/security/secharden/appendix.md b/docs/en/server/security/secharden/appendix.md new file mode 100644 index 0000000000000000000000000000000000000000..3a166ad1dbb108e86c53123005e6a93aff29079b --- /dev/null +++ b/docs/en/server/security/secharden/appendix.md @@ -0,0 +1,27 @@ +# Appendix + +This chapter describes the file permissions and **umask** values. + +## Permissions on Files and Directories + +Permission on files and directories in Linux specifies the users who can access and perform operations on files and directories and the access and operation modes. Permissions on files and directories include read only, write only, and execute. + +The following types of users can access files and directories: + +- File creator +- Users in the same group as a file creator +- Users not in the same group as a file creator + +An example of permission on files and directories is described as follows: + +If the permission on **/usr/src** is set to **755** which is 111101101 in binary mode, permissions for each type of users are described as follows: + +- The left-most **111** indicates that the file owner can read, write, and execute the file. +- The middle **101** indicates the group users can read and execute but cannot write the file. +- The right-most **101** indicates that other users can read and execute but cannot write the file. + +## umask Values + +When a user creates a file or directory, the file or directory has a default permission. The default permission is specified by the **umask** value. + +The **umask** value is the complement of the permission value. The actual permission value is obtained by subtracting the **umask** value from the default maximum permission value. The default maximum permission of a file is readable and writable. The default maximum permission of a directory is readable, writable, and executable. The default permission of a file is 666 minus the **umask** value. The default permission of a directory is 777 minus the **umask** value. diff --git a/docs/en/server/security/secharden/authentication_and_authorization.md b/docs/en/server/security/secharden/authentication_and_authorization.md new file mode 100644 index 0000000000000000000000000000000000000000..bf3d554854674e15bb2eca2adb728c730b183474 --- /dev/null +++ b/docs/en/server/security/secharden/authentication_and_authorization.md @@ -0,0 +1,145 @@ +# Authentication and Authorization + +## Setting a Warning for Remote Network Access + +### Description + +A warning for remote network access is configured and displayed for users who attempt to remotely log in to the system. The warning indicates the penalty for authorized access and is used to threaten potential attackers. When the warning is displayed, system architecture and other system information are hidden to protect the system from being attacked. + +### Implementation + +This setting can be implemented by modifying the **/etc/issue.net** file. Replace the original content in the **/etc/issue.net** file with the following information \(which has been set by default in openEuler\): + +```console +Authorized users only. All activities may be monitored and reported. +``` + +## Forestalling Unauthorized System Restart by Pressing Ctrl+Alt+Delete + +### Description + +By default, you can restart the system by pressing **Ctrl**+**Alt**+**Delete**. You are advised to disable this function to prevent data loss due to misoperations. + +### Implementation + +To disable the feature of restarting the system by pressing **Ctrl**+**Alt**+**Delete**, perform the following steps: + +1. Run the following commands to delete the two **ctrl-alt-del.target** files: + + ```shell + rm -f /etc/systemd/system/ctrl-alt-del.target + rm -f /usr/lib/systemd/system/ctrl-alt-del.target + ``` + +2. Change **\#CtrlAltDelBurstAction=reboot-force** to **CtrlAltDelBurstAction=none** in the **/etc/systemd/system.conf** file. +3. Run the following command to restart systemd for the modification to take effect. Note that running the command may cause system services to be unavailable or restarted temporarily. In addition, you must be the **root** user or a user with the sudo permission to perform this operation. + + ```shell + systemctl daemon-reexec + ``` + +## Setting an Automatic Exit Interval for Shell + +### Description + +An unattended shell is prone to listening or attacks. Therefore, it is advised that a mechanism be configured to ensure that a shell can automatically exit when it does not run for a period. + +### Implementation + +At the end of file **/etc/profile**, set the **TMOUT** field \(unit: second\) that specifies the interval for automatic exit as follows: + +```text +export TMOUT=300 +``` + +## Setting the Default umask Value for Users to 0077 + +### Description + +The **umask** value is used to set default permission on files and directories. A smaller **umask** value indicates that group users or other users have incorrect permission, which brings system security risks. Therefore, the default **umask** value must be set to **0077** for all users, that is, the default permission on user directories is **700** and the permission on user files is **600**. The **umask** value indicates the complement of a permission. For details about how to convert the **umask** value to a permission, see [umask Values](./appendix.md#umask-values). + +>[!NOTE] **NOTE:** +>By default, the **umask** value of the openEuler user is set to **0022**. + +### Implementation + +1. Add **umask 0077** to the **/etc/bashrc** file and all files in the **/etc/profile.d/** directory. + + ```text + echo "umask 0077" >> $FILE + ``` + + >[!NOTE] **NOTE:** + >_$FILE_ indicates the file name, for example, echo "umask 0077" \>\> /etc/bashrc. + +2. Set the ownership and group of the **/etc/bashrc** file and all files in the **/etc/profile.d/** directory to **root**. + + ```text + chown root.root $FILE + ``` + + >[!NOTE] **NOTE:** + >_$FILE_ indicates the file name, for example, **chown root.root /etc/bashrc**. + +## Setting the GRUB2 Encryption Password + +### Description + +GRand Unified Bootloader \(GRUB\) is an operating system boot manager used to boot different systems \(such as Windows and Linux\). GRUB2 is an upgraded version of GRUB. + +When starting the system, you can modify the startup parameters of the system on the GRUB2 screen. To ensure that the system startup parameters are not modified randomly, you need to encrypt the GRUB2 screen. The startup parameters can be modified only when the correct GRUB2 password is entered. + +>[!NOTE] **NOTE:** +>The default password of GRUB2 is **openEuler\#12**. You are advised to change the default password upon the first login and periodically update the password. If the password is leaked, startup item configurations may be modified, causing the system startup failure. + +### Implementation + +1. Run the **grub2-mkpasswd-pbkdf2** command to generate an encrypted password. + + >[!NOTE] **NOTE:** + >SHA-512 is used as the GRUB2 encryption algorithm. + + ```shell + $ grub2-mkpasswd-pbkdf2 + Enter password: + Reenter password: + PBKDF2 hash of your password is + grub.pbkdf2.sha512.10000.5A45748D892672FDA02DD3B6F7AE390AC6E6D532A600D4AC477D25C7D087644697D8A0894DFED9D86DC2A27F4E01D925C46417A225FC099C12DBD3D7D49A7425.2BD2F5BF4907DCC389CC5D165DB85CC3E2C94C8F9A30B01DACAA9CD552B731BA1DD3B7CC2C765704D55B8CD962D2AEF19A753CBE9B8464E2B1EB39A3BB4EAB08 + ``` + + >[!NOTE] **NOTE:** + >Enter the same password in the **Enter password** and **Reenter password** lines. + >After **openEuler\#12** is encrypted by **grub2-mkpasswd-pbkdf2**, the output is **grub.pbkdf2.sha512.10000.5A45748D892672FDA02DD3B6F7AE390AC6E6D532A600D4AC477D25C7D087644697D8A0894DFED9D86DC2A27F4E01D925C46417A225FC099C12DBD3D7D49A7425.2BD2F5BF4907DCC389CC5D165DB85CC3E2C94C8F9A30B01DACAA9CD552B731BA1DD3B7CC2C765704D55B8CD962D2AEF19A753CBE9B8464E2B1EB39A3BB4EAB08**. The ciphertext is different each time. + +2. Open **grub.cfg** in a vi editor. Append the following fields to the beginning of **grub.cfg**. + + ```text + set superusers="root" + password_pbkdf2 root grub.pbkdf2.sha512.10000.5A45748D892672FDA02DD3B6F7AE390AC6E6D532A600D4AC477D25C7D087644697D8A0894DFED9D86DC2A27F4E01D925C46417A225FC099C12DBD3D7D49A7425.2BD2F5BF4907DCC389CC5D165DB85CC3E2C94C8F9A30B01DACAA9CD552B731BA1DD3B7CC2C765704D55B8CD962D2AEF19A753CBE9B8464E2B1EB39A3BB4EAB08 + ``` + + >[!NOTE] **NOTE:** + > + >- In different modes, the paths of the **grub.cfg** file are different: In the UEFI mode of the x86 architecture, the path is **/boot/efi/EFI/openEuler/grub.cfg**. In the Legacy BIOS mode of the x86 architecture, the path is **/boot/grub2/grub.cfg**. In the aarch64 architecture, the path is **/boot/efi/EFI/openEuler/grub.cfg**. + >- The **superusers** field is used to set the account name of the super GRUB2 administrator. + >- The first parameter following the **password\_pbkdf2** field is the GRUB2 account name, and the second parameter is the encrypted password of the account. + +## Setting the Secure Single-user Mode + +### Description + +When you log in to the system as user **root** in single-user mode, if the **root** password is not set, high security risks exist. + +### Implementation + +This setting can be implemented by modifying the **/etc/sysconfig/init** file. Set **SINGLE** to **SINGLE=/sbin/sulogin**. + +## Disabling Interactive Startup + +### Description + +With interactive guidance, console users can disable audit, firewall, or other services, which compromises system security. Users can disable interactive startup to improve security. This item is disabled by default in openEuler. + +### Implementation + +This setting can be implemented by modifying the **/etc/sysconfig/init** file. Set **PROMPT** to **no**. diff --git a/docs/en/server/security/secharden/figures/en-us_image_0221925211.png b/docs/en/server/security/secharden/figures/en-us_image_0221925211.png new file mode 100644 index 0000000000000000000000000000000000000000..62ef0decdf6f1e591059904001d712a54f727e68 Binary files /dev/null and b/docs/en/server/security/secharden/figures/en-us_image_0221925211.png differ diff --git a/docs/en/server/security/secharden/figures/en-us_image_0221925212.png b/docs/en/server/security/secharden/figures/en-us_image_0221925212.png new file mode 100644 index 0000000000000000000000000000000000000000..ad5ed3f7beeb01e6a48707c4806606b41d687e22 Binary files /dev/null and b/docs/en/server/security/secharden/figures/en-us_image_0221925212.png differ diff --git a/docs/en/server/security/secharden/file_permissions.md b/docs/en/server/security/secharden/file_permissions.md new file mode 100644 index 0000000000000000000000000000000000000000..eb8e3bf20e29032b58c26654f69401583c0462ef --- /dev/null +++ b/docs/en/server/security/secharden/file_permissions.md @@ -0,0 +1,232 @@ +# File Permissions + +## Setting the Permissions on and Ownership of Files + +### Description + +In Linux, all objects are processed as files. Even a directory will be processed as a large file containing many files. Therefore, the most important thing in Linux is the security of files and directories. Their security is ensured by permissions and owners. + +By default, the permissions and ownership of common directories, executable files, and configuration files in the system are set in openEuler. + +### Implementation + +The following uses the **/bin** directory as an example to describe how to change the permission and ownership of a file: + +- Modify the file permission. For example, set the permission on the **/bin** directory to **755**. + + ```bash + chmod 755 /bin + ``` + +- Change the ownership of the file. For example, set the ownership and group of the **/bin** directory to **root:root**. + + ```bash + chown root:root /bin + ``` + +## Deleting Unowned Files + +### Description + +When deleting a user or group, the system administrator may forget to delete the files of the user or group. If the name of a new user or group is the same as that of the deleted user or group, the new user or group will own files on which it has no permission. You are advised to delete these files. + +### Implementation + +Delete the file whose user ID does not exist. + +1. Search for the file whose user ID does not exist. + + ```bash + find / -nouser + ``` + +2. Delete the found file. In the preceding command, _filename_ indicates the name of the file whose user ID does not exist. + + ```bash + rm -f filename + ``` + +Delete the file whose group ID does not exist. + +1. Search for the file whose group ID does not exist. + + ```bash + find / -nogroup + ``` + +2. Delete the found file. In the preceding command, _filename_ indicates the name of the file whose group ID does not exist. + + ```bash + rm -f filename + ``` + +## Removing a Symbolic Link to /dev/null + +### Description + +A symbolic link to **/dev/null** may be used by malicious users. This affects system security. You are advised to delete these symbolic links to improve system security. + +### Special Scenario + +After openEuler is installed, symbolic links to **/dev/null** may exist. These links may have corresponding functions. \(Some of them are preconfigured and may be depended by other components.\) Rectify the fault based on the site requirements. For details, see [Implementation](#en-us_topic_0152100319_l4dc74664c4fb400aaf91fb314c4f9da6). + +For example, openEuler supports UEFI and legacy BIOS installation modes. The GRUB packages supported in the two boot scenarios are installed by default. If you select the legacy BIOS installation mode, a symbolic link **/etc/grub2-efi.cfg** is generated. If you select the UEFI installation mode, a symbolic link **/etc/grub2.cfg** is generated. You need to process these symbolic links based on the site requirements. + +### Implementation + +1. Run the following command to search for symbolic links to **/dev/null**: + + ```bash + find dirname -type l -follow 2>/dev/null + ``` + + >[!NOTE] **NOTE:** + >_dir__name_ indicates the directory to be searched. Normally, key system directories, such as **/bin**, **/boot**, **/usr**, **/lib64**, **/lib**, and **/var**, need to be searched. + +2. If these symbolic links are useless, run the following command to delete them: + + ```bash + rm -f filename + ``` + + >[!NOTE] **NOTE:** + >_filename_ indicates the file name obtained in [Step 1](#en-us_topic_0152100319_l4dc74664c4fb400aaf91fb314c4f9da6). + +## Setting the umask Value for a Daemon + +### Description + +The **umask** value is used to set default permission on files and directories. If the **umask** value is not specified, the file has the globally writable permission. This brings risks. A daemon provides a service for the system to receive user requests or network customer requests. To improve the security of files and directories created by the daemon, you are advised to set **umask** to **0027**. The **umask** value indicates the complement of a permission. For details about how to convert the **umask** value to a permission, see [umask Values](./appendix.md#umask-values). + +>[!NOTE] **NOTE:** +>By default, the **umask** value of the daemon is set to **0022** in openEuler. + +### Implementation + +In configuration file **/etc/sysconfig/init**, add **umask 0022** as a new row. + +## Adding a Sticky Bit Attribute to Globally Writable Directories + +### Description + +Any user can delete or modify a file or directory in a globally writable directory, which leads to unauthorized file or directory deletion. Therefore, the sticky bit attribute is required for globally writable directories. + +### Implementation + +1. Search for globally writable directories. + + ```bash + find / -type d -perm -0002 ! -perm -1000 -ls | grep -v proc + ``` + +2. Add the sticky bit attribute to globally writable directories. _dirname_ indicates the name of the directory that is found. + + ```bash + chmod +t dirname + ``` + +## Disabling the Globally Writable Permission on Unauthorized Files + +### Description + +Any user can modify globally writable files, which affects system integrity. + +### Implementation + +1. Search for all globally writable files. + + ```bash + find / -type d -perm -o+w | grep -v proc + find / -type f -perm -o+w | grep -v proc + ``` + +2. View the settings of files \(excluding files and directories with sticky bits\) listed in step 1, and delete the files or disable the globally writable permission on them. Run the following command to remove the permission. In the command, _filename_ indicates the file name. + + ```bash + chmod o-w filename + ``` + + >[!NOTE] **NOTE:** + >You can run the following command to check whether the sticky bit is set for the file or directory. If the command output contains the **T** flag, the file or directory is with a sticky bit. In the command, _filename_ indicates the name of the file or directory to be queried. + > + >``` bash + >ls -l filename + >``` + +## Restricting Permissions on the at Command + +### Description + +The **at** command is used to create a scheduled task. Users who can run the **at** command must be specified to protect the system from being attacked. + +### Implementation + +1. Delete the **/etc/at.deny** file. + + ```bash + rm -f /etc/at.deny + ``` + +2. Create the **/etc/at.allow** file. + + ```bash + touch /etc/at.allow + ``` + +3. Run the following command to change the ownership of the **/etc/at.allow** file to **root:root**. + + ```bash + chown root:root /etc/at.allow + ``` + +4. Set that only user **root** can operate file **/etc/at.allow**. + + ```bash + chmod og-rwx /etc/at.allow + ``` + +## Restricting Permissions on the cron Command + +### Description + +The **cron** command is used to create a routine task. Users who can run the **cron** command must be specified to protect the system from being attacked. + +### Implementation + +1. Delete the **/etc/cron.deny** file. + + ```bash + rm -f /etc/at.deny + ``` + +2. Create the **/etc/cron.allow** file. + + ```bash + touch /etc/cron.allow + ``` + +3. Run the following command to change the ownership of the **/etc/cron.allow** file to **root:root**: + + ```bash + chown root:root /etc/cron.allow + ``` + +4. Set that only user **root** can operate file **/etc/cron.allow**. + + ```bash + chmod og-rwx /etc/cron.allow + ``` + +## Restricting Permissions on the sudo Command + +### Description + +A common user can use the **sudo** command to run commands as the user **root**. To harden system security, it is necessary to restrict permissions on the **sudo** command. Only user **root** can use the **sudo** command. By default, openEuler does not restrict the permission of non-root users to run the sudo command. + +### Implementation + +Modify the **/etc/sudoers** file to restrict permissions on the **sudo** command. Comment out the following configuration line: + +```text +#%wheel ALL=(ALL) ALL +``` diff --git a/docs/en/server/security/secharden/kernel_parameters.md b/docs/en/server/security/secharden/kernel_parameters.md new file mode 100644 index 0000000000000000000000000000000000000000..89d8fecc40a623405ccb2e0be538bd54018ba25b --- /dev/null +++ b/docs/en/server/security/secharden/kernel_parameters.md @@ -0,0 +1,225 @@ +# Kernel Parameters + +## Hardening the Security of Kernel Parameters + +### Description + +Kernel parameters specify the status of network configurations and application privileges. The kernel provides system control which can be fine-tuned or configured by users. This function can improve the security of the OS by controlling configurable kernel parameters. For example, you can fine-tune or configure network options to improve system security. + +### Implementation + +1. Write the hardening items in [Table 1](#en-us_topic_0152100187_t69b5423c26644b26abe94d88d38878eb) to the **/etc/sysctl.conf** file. + + >[!NOTE] **NOTE:** + >Writesecurity hardening items as follows: + > + >```text + >net.ipv4.icmp_echo_ignore_broadcasts = 1 + >net.ipv4.conf.all.rp_filter = 1 + >net.ipv4.conf.default.rp_filter = 1 + >``` + + **Table 1** Policies for hardening the security of kernel parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Item

    +

    Description

    +

    Suggestion

    +

    Configured as Suggested

    +

    net.ipv4.icmp_echo_ignore_broadcasts

    +

    Specifies whether ICMP broadcast packets are accepted. They are not accepted according to the hardening policy.

    +

    1

    +

    Yes

    +

    net.ipv4.conf.all.rp_filter

    +

    Specifies whether the actual source IP address used by a data packet is related to a routing table and whether the data packet receives responses through interfaces. The item is enabled according to the hardening policy.

    +

    1

    +

    Yes

    +

    net.ipv4.conf.default.rp_filter

    +

    1

    +

    Yes

    +

    net.ipv4.ip_forward

    +

    The IP forwarding function prevents unauthorized IP address packets from being transferred to a network. The item is disabled according to the hardening policy.

    +

    0

    +

    Yes

    +

    net.ipv4.conf.all.accept_source_route

    +

    accept_source_route indicates that a packet sender can specify a path for sending the packet and a path for receiving a response. The item is disabled according to the hardening policy.

    +

    0

    +

    Yes

    +

    net.ipv4.conf.default.accept_source_route

    +

    0

    +

    Yes

    +

    net.ipv4.conf.all.accept_redirects

    +

    Specifies whether a redirected ICMP packet is sent. The packet is not sent according to the hardening policy.

    +

    0

    +

    Yes

    +

    net.ipv4.conf.default.accept_redirects

    +

    0

    +

    Yes

    +

    net.ipv6.conf.all.accept_redirects

    +

    0

    +

    Yes

    +

    net.ipv6.conf.default.accept_redirects

    +

    0

    +

    Yes

    +

    net.ipv4.conf.all.send_redirects

    +

    Specifies whether a redirected ICMP packet is sent to another server. This item is enabled only when the host functions as a route. The item is disabled according to the hardening policy.

    +

    0

    +

    Yes

    +

    net.ipv4.conf.default.send_redirects

    +

    0

    +

    Yes

    +

    net.ipv4.icmp_ignore_bogus_error_responses

    +

    Fake ICMP packets are not recorded to logs, which saves disk space. The item is enabled according to the hardening policy.

    +

    1

    +

    Yes

    +

    net.ipv4.tcp_syncookies

    +

    SYN attack is a DoS attack that forces system restart by occupying system resources. TCP-SYN cookie protection is enabled according to the hardening policy.

    +

    1

    +

    Yes

    +

    kernel.dmesg_restrict

    +

    Hardens dmesg messages. Only the administrator is allowed to view the messages.

    +

    1

    +

    Yes

    +

    kernel.sched_autogroup_enabled

    +

    Determines whether the kernel automatically groups and schedules threads. After this item is enabled, scheduling groups compete for time slices, and threads in a scheduling group compete for the time slices allocated to the scheduling group. The item is disabled according to the hardening policy.

    +

    0

    +

    No

    +

    kernel.sysrq

    +

    Disables the magic key.

    +
    NOTE:

    You are advised to disable the magic key so that commands cannot be directly passed to the kernel.

    +
    +

    0

    +

    Yes

    +

    net.ipv4.conf.all.secure_redirects

    +

    Specifies whether redirected ICMP messages sent from any servers or from gateways listed in the default gateway list are accepted. Redirected ICMP messages are received from any servers according to the hardening policy.

    +

    0

    +

    Yes

    +

    net.ipv4.conf.default.secure_redirects

    +

    0

    +

    Yes

    +
    + +2. Run the following command to load the kernel parameters set in the **sysctl.conf** file: + + ```shell + sysctl -p /etc/sysctl.conf + ``` + +### Other Security Suggestions + +- **net.ipv4.icmp\_echo\_ignore\_all**: ignores ICMP requests. + + For security purposes, you are advised to enable this item. The default value is **0**. Set the value to **1** to enable this item. + + After this item is enabled, all incoming ICMP Echo request packets will be ignored, which will cause failure to ping the target host. Determine whether to enable this item based on your actual networking condition. + +- **net.ipv4.conf.all.log\_martians/net.ipv4.conf.default.log\_martians**: logs spoofed, source routed, and redirect packets. + + For security purposes, you are advised to enable this item. The default value is **0**. Set the value to **1** to enable this item. + + After this item is enabled, data from forbidden IP addresses will be logged. Too many new logs will overwrite old logs because the total number of logs allowed is fixed. Determine whether to enable this item based on your actual usage scenario. + +- **net.ipv4.tcp\_timestamps**: disables tcp\_timestamps. + + For security purposes, you are advised to disable tcp\_timestamps. The default value is **1**. Set the value to **0** to disable tcp\_timestamps. + + After this item is disabled, TCP retransmission timeout will be affected. Determine whether to disable this item based on the actual usage scenario. + +- **net.ipv4.tcp\_max\_syn\_backlog**: determines the number of queues that is in SYN\_RECV state. + + This parameter determines the number of queues that is in SYN\_RECV state. When this number is exceeded, new TCP connection requests will not be accepted. This to some extent prevents system resource exhaustion. Configure this parameter based on your actual usage scenario. diff --git a/docs/en/server/security/secharden/os_hardening_overview.md b/docs/en/server/security/secharden/os_hardening_overview.md new file mode 100644 index 0000000000000000000000000000000000000000..092a1cf8aa0f3ae1cd88677a5736a21f74ec7919 --- /dev/null +++ b/docs/en/server/security/secharden/os_hardening_overview.md @@ -0,0 +1,117 @@ +# OS Hardening Overview + +This chapter describes the purpose and solution of openEuler system hardening. + +## Notice + +Security hardening is crucial for system security. Therefore, only the **root** user is allowed to change and apply security hardening policies. + +## Security Hardening Purpose + +The OS, as the core of the information system, manages hardware and software resources and is the basis of information system security. Applications must depend on the OS to ensure the integrity, confidentiality, availability, and controllability of information. Without the OS security protection, protective methods against hackers and virus attacks at other layers cannot meet the security requirements. + +Therefore, security hardening is essential for an OS. Security hardening helps build a dynamic and complete security system, enhance product security, and improve product competitiveness. + +## Security Hardening Solution + +This section describes the openEuler security hardening solution, including the hardening methods and items. + +### Security Hardening Method + +You can manually modify security hardening configurations, run commands to harden the system, or use a security hardening tool to modify security hardening configurations in batches. security-tool runs as openEuler-security.service. When the system is started for the first time, the system automatically runs the service to execute the default hardening policy, and sets the service not to start as the system starts. + +You can modify the **/etc/openEuler_security/security.conf** file and use the security hardening tool to implement customized security hardening. + +## Security Hardening Impacts + +Security hardening on file permissions and account passwords may affect user habits and system usability. For details about common hardening items that affect system usability, see [Table 1](#en-us_topic_0152100325_ta4a48f54ff2849ada7845e2380209917). + +**Table 1** Security hardening impacts + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Item

    +

    Suggestion

    +

    Impact

    +

    Configured By Default

    +

    Timeout setting on the text-based user interface (TUI)

    +

    When the TUI is idle for a long period of time, it automatically exits.

    +
    NOTE:

    When a user logs in to the system using SSH, the timeout period is determined by the smaller value of the TMOUT field in the /etc/profile file and the ClientAliveInterval field in the /etc/ssh/sshd_config file. You are advised to set the timeout period to 300 seconds.

    +
    +

    If you do not perform any operation on the TUI for a long time, TUI automatically exits.

    +

    No

    +

    Password complexity

    +

    The password is a string containing at least eight characters chosen from three or four of the following types: uppercase letters, lowercase letters, digits, and special characters.

    +

    All passwords must comply with the complexity requirements.

    +

    No

    +

    Password retry limits

    +

    If a user fails to enter the correct password for three consecutive times when logging in to the OS, the user account will be locked for 60 seconds.

    +

    After the account is locked, the user can attempt to log in to the system only after 60 seconds.

    +

    Yes

    +

    Default umask value

    +

    The default umask value of all users is set to 077 so that the default permission on files created by users is 600 and the default permission on directories is 700.

    +

    The default permission on created files is 600 and the default permission on created directories is 700. You can modify the permissions after a file or directory is created.

    +

    No

    +

    Password validity period

    +

    The password validity period can be modified in the /etc/login.defs file and is set to 90 days by default. It can be modified in any time. An expiration notification will be displayed seven days before a password is to expire.

    +

    When a user attempts to log in after the password expires, the user will be informed of the password expiry and is required to change the password. If the user does not change the password, the user cannot log in to the system.

    +

    No

    +

    su permission control

    +

    The su command is used to switch user accounts. To improve system security, only the user root and users in the wheel group can use the su command.

    +

    Common users can successfully run the su command only after joining in the wheel group.

    +

    Yes

    +

    Prohibiting user root from logging in using SSH

    +

    Set the value of the PermitRootLogin field in the /etc/ssh/sshd_config file to no. In this way, user root cannot directly log in to the system using SSH.

    +

    The user needs to log in to the system using a common account in SSH mode, add the common user to the wheel group, and then switch to the root user.

    +

    No

    +

    Strong SSH encryption algorithm

    +

    The MACs and Ciphers configurations of SSH services support the CTR and SHA2 algorithms and do not support the CBC, MD5, and SHA1 algorithms.

    +

    Some early Xshell and PuTTY versions on Windows do not support aes128-ctr, aes192-ctr, aes256-ctr, hmac-sha2-256, and hmac-sha2-512 algorithms. Ensure that the latest PuTTY (0.63 or later) and Xshell (5.0 or later) are used.

    +

    Yes

    +
    diff --git a/docs/en/server/security/secharden/public_sys-resources/icon-caution.gif b/docs/en/server/security/secharden/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/security/secharden/public_sys-resources/icon-caution.gif differ diff --git a/docs/en/server/security/secharden/public_sys-resources/icon-danger.gif b/docs/en/server/security/secharden/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/security/secharden/public_sys-resources/icon-danger.gif differ diff --git a/docs/en/server/security/secharden/public_sys-resources/icon-note.gif b/docs/en/server/security/secharden/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/server/security/secharden/public_sys-resources/icon-note.gif differ diff --git a/docs/en/server/security/secharden/public_sys-resources/icon-notice.gif b/docs/en/server/security/secharden/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/en/server/security/secharden/public_sys-resources/icon-notice.gif differ diff --git a/docs/en/server/security/secharden/public_sys-resources/icon-tip.gif b/docs/en/server/security/secharden/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/en/server/security/secharden/public_sys-resources/icon-tip.gif differ diff --git a/docs/en/server/security/secharden/public_sys-resources/icon-warning.gif b/docs/en/server/security/secharden/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/security/secharden/public_sys-resources/icon-warning.gif differ diff --git a/docs/en/server/security/secharden/secharden.md b/docs/en/server/security/secharden/secharden.md new file mode 100644 index 0000000000000000000000000000000000000000..6539f6bd1eb52da6f2076345facd9c4759538a79 --- /dev/null +++ b/docs/en/server/security/secharden/secharden.md @@ -0,0 +1,5 @@ +# Security Hardening Guide + +This document describes how to perform security hardening for openEuler. + +This document is intended for administrators who need to perform security hardening for openEuler. You must be familiar with the OS security architecture and technologies. diff --git a/docs/en/server/security/secharden/security_configuration_benchmark.md b/docs/en/server/security/secharden/security_configuration_benchmark.md new file mode 100644 index 0000000000000000000000000000000000000000..0278e7ed99a6f0803cada871f754d046a00e7195 --- /dev/null +++ b/docs/en/server/security/secharden/security_configuration_benchmark.md @@ -0,0 +1,3 @@ +# openEuler Security Configuration Description + +For details, see the [openEuler security configuration description](https://gitee.com/openeuler/security-committee/tree/master/sub-projects/secure-configuration-benchmark). diff --git a/docs/en/server/security/secharden/security_hardening_tool.md b/docs/en/server/security/secharden/security_hardening_tool.md new file mode 100644 index 0000000000000000000000000000000000000000..d7dec75d9b399fa9ee9b011883bdff3a5a06d067 --- /dev/null +++ b/docs/en/server/security/secharden/security_hardening_tool.md @@ -0,0 +1,122 @@ +# Security Hardening Tools + +## Security Hardening Procedure + +### Overview + +You need to modify the **usr-security.conf** file so that the security hardening tool can set hardening policies based on the **usr-security.conf** file. This section describes rules for modifying the **usr-security.conf** file. For details about the configurable security hardening items, see [Security Hardening Guide](./secharden.md). + +### Precautions + +- After modifying the items, restart the security hardening service for the modification to take effect. For details about how to restart the service, see [Hardening Items Taking Effect](#hardening-items-taking-effect). +- When modifying security hardening items, you only need to modify the **/etc/openEuler\_security/usr-security.conf** file. You are not advised to modify the **/etc/openEuler\_security/security.conf** file. The **security.conf** file contains basic hardening items which are executed only once. +- After the security hardening service is restarted for the configuration to take effect, the previous configuration cannot be deleted by deleting the corresponding hardening items from the **usr-security.conf** file and restarting the security hardening service. +- Security hardening operations are recorded in the **/var/log/openEuler-security.log** file. + +### Configuration Format + +Each line in the **usr-security.conf** file indicates a configuration item. The configuration format varies according to the configuration content. The following describes the format of each configuration item. + +>[!NOTE] **NOTE:** +> +>- All configuration items start with an execution ID. The execution ID is a positive integer and can be customized. +>- Contents of a configuration item are separated by an at sign \(@\). +>- If the actual configuration content contains an at sign \(@\), use two at signs \(@@\) to distinguish the content from the separator. For example, if the actual content is **xxx@yyy**, set this item to **xxx@@yyy**. Currently, an at sign \(@\) cannot be placed at the beginning or end of the configuration content. + +- **d**: comment + + Format: _Execution ID_**@d@**_Object file_**@**_Match item_ + + Function: Comment out lines starting with the match item \(the line can start with a space\) in an object file by adding a number sign \(\#\) at the beginning of the line. + + Example: If the execution ID is **401**, comment out lines starting with **%wheel** in the **/etc/sudoers** file. + + ```text + 401@d@/etc/sudoers@%wheel + ``` + +- **m**: replacement + + Format: _Execution ID_**@m@**_Object file_**@**_Match item_**@**_Target value_ + + Function: Replace lines starting with the match item \(the line can start with a space\) in an object file with _match item_ and _target value_. If the match line starts with spaces, the spaces will be deleted after the replacement. + + Example: If the execution ID is **101**, replace lines starting with **Protocol** in the **/etc/ssh/sshd\_config** file with **Protocol 2**. The spaces after **Protocol** are matched and replaced. + + ```text + 101@m@/etc/ssh/sshd_config@Protocol @2 + ``` + +- **sm**: accurate modification + + Format: _Execution ID_**@sm@**_Object file_**@**_Match item_**@**_Target value_ + + Function: Replace lines starting with the match item \(the line can start with a space\) in an object file with _match item_ and _target value_. If the match line starts with spaces, the spaces are retained after the replacement. This is the difference between **sm** and **m**. + + Example: If the execution ID is **201**, replace lines starting with **size** in the **/etc/audit/hzqtest** file with **size 2048**. + + ```text + 201@sm@/etc/audit/hzqtest@size@ 2048 + ``` + +- **M**: subitem modification + + Format: _Execution ID_**@M@**_Object file_**@**_Match item_**@**_Match subitem__\[@Value of the match subitem\]_ + + Function: Match lines starting with the match item \(the line can start with a space\) in an object file and replace the content starting with the match subitem in these lines with the _match subitem_ and _value of the match subitem_. The value of the match subitem is optional. + + Example: If the execution ID is **101**, find lines starting with **key** in the file and replace the content starting with **key2** in these lines with **key2value2**. + + ```text + 101@M@file@key@key2@value2 + ``` + +- **systemctl**: service management + + Format: _Execution ID_**@systemctl@**_Object service_**@**_Operation_ + + Function: Use **systemctl** to manage object services. The value of **Operation** can be **start**, **stop**, **restart**, or **disable**. + + Example: If the execution ID is **218**, stop the **cups.service**. This provides the same function as running the **systemctl stop cups.service** command. + + ```text + 218@systemctl@cups.service@stop + ``` + +- Other commands + + Format: _Execution ID_**@**_Command_**@**_Object file_ + + Function: Run the corresponding command, that is, run the command line _Command_ _Object file_. + + Example 1: If the execution ID is **402**, run the **rm -f** command to delete the **/etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem** file. + + ```text + 402@rm -f @/etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem + ``` + + Example 2: If the execution ID is **215**, run the **touch** command to create the **/etc/cron.allow** file. + + ```text + 215@touch @/etc/cron.allow + ``` + + Example 3: If the execution ID is **214**, run the **chown** command to change the owner of the **/etc/at.allow** file to **root:root**. + + ```text + 214@chown root:root @/etc/at.allow + ``` + + Example 4: If the execution ID is **214**, run the **chmod** command to remove the **rwx** permission of the group to which the owner of the **/etc/at.allow** file belongs and other non-owner users. + + ```text + 214@chmod og-rwx @/etc/at.allow + ``` + +## Hardening Items Taking Effect + +After modifying the **usr-security.conf** file, run the following command for the new configuration items to take effect: + +```shell +systemctl restart openEuler-security.service +``` diff --git a/docs/en/server/security/secharden/selinux_configuration.md b/docs/en/server/security/secharden/selinux_configuration.md new file mode 100644 index 0000000000000000000000000000000000000000..3d2136e342118fd71647acf512324c028ccc1f5b --- /dev/null +++ b/docs/en/server/security/secharden/selinux_configuration.md @@ -0,0 +1,134 @@ +# SELinux Configuration + +## Overview + +Discretionary Access Control (DAC) is the most common access control method, where a subject who has the ownership of (or control on) an object can grant other subjects one or more access permissions to the object, and can revoke these permissions at any time. DAC is based on the permissions of the object owner, owner group, and other users. Whether a resource can be accessed depends on whether a user has the required permissions on the resource. As a result, DAC does not allow the system administrator to create comprehensive and fine-grained security policies. Security-Enhanced Linux (SELinux) is a module of the Linux kernel and a security subsystem of Linux. SELinux implements mandatory access control (MAC). Each process and system resource has a special security label. In addition to the principles specified by DAC, SELinux also determines whether each process type has the permission to access a resource type. In this way, the system administrator can create comprehensive and fine-grained security policies. + +By default, openEuler uses SELinux to improve system security. SELinux has three modes: + +- **permissive**: The SELinux outputs alarms but does not forcibly execute the security policies. +- **enforcing**: The SELinux security policies are forcibly executed. +- **disabled**: The SELinux security policies are not loaded. + +## Configuration Description + +- Query the SELinux status. + + ```sh + $ getenforce + Enforcing + ``` + +- Use the enforcing mode when SELinux is enabled. + + ```sh + $ setenforce 1 + $ getenforce + Enforcing + ``` + +- Use the permissive mode when SELinux is enabled. + + ```sh + $ setenforce 0 + $ getenforce + Permissive + ``` + +- Disable SELinux when it is enabled. (The system needs to be rebooted.) + 1. Set **SELINUX=disabled** in the SELinux configuration file **/etc/selinux/config**. + + ```sh + $ cat /etc/selinux/config | grep "SELINUX=" + SELINUX=disabled + ``` + + 2. Reboot the system. + + ```sh + reboot + ``` + + 3. Check if the SELinux status is changed. + + ```sh + $ getenforce + Disabled + ``` + +- Use the permissive mode when SELinux is disabled. + 1. Set **SELINUX=permissive** in the SELinux configuration file **/etc/selinux/config**. + + ```sh + $ cat /etc/selinux/config | grep "SELINUX=" + SELINUX=permissive + ``` + + 2. Create a **.autorelabel** file in the root directory. + + ```sh + touch /.autorelabel + ``` + + 3. Reboot the system. The system will reboot twice. + + ```sh + reboot + ``` + + 4. Check if the SELinux status is changed. + + ```sh + $ getenforce + Permissive + ``` + +- Use the enforcing mode when SELinux is disabled. + 1. Use the permissive mode by referring to the previous step. + 2. Set **SELINUX=enforcing** in the SELinux configuration file **/etc/selinux/config**. + + ```sh + $ cat /etc/selinux/config | grep "SELINUX=" + SELINUX=enforcing + ``` + + 3. Reboot the system. + + ```sh + reboot + ``` + + 4. Check if the SELinux status is changed. + + ```sh + $ getenforce + Enforcing + ``` + +## SELinux Commands + +- Query the SELinux status. **SELinux status** indicates the SELinux status. **enabled** indicates that SELinux is enabled, and **disabled** indicates that SELinux is disabled. **Current mode** indicates the current mode of the SELinux. + + ```sh + $ sestatus + SELinux status: enabled + SELinuxfs mount: /sys/fs/selinux + SELinux root directory: /etc/selinux + Loaded policy name: targeted + Current mode: enforcing + Mode from config file: enforcing + Policy MLS status: enabled + Policy deny_unknown status: allowed + Memory protection checking: actual (secure) + Max kernel policy version: 33 + ``` + +## Precautions + +- Before enabling SELinux, you are advised to upgrade selinux-policy to the latest version using DNF. Otherwise, applications may fail to run properly. For example: + +```sh +dnf update selinux-policy -y +``` + +- If the system cannot be started due to improper SELinux configuration (for example, a policy is deleted by mistake or no proper rule or security context is configured), you can add **selinux=0** to the startup parameters to disable SELinux. diff --git a/docs/en/server/security/secharden/system_services.md b/docs/en/server/security/secharden/system_services.md new file mode 100644 index 0000000000000000000000000000000000000000..dbcd51e3cfa7b063619abde2197ffc7b2f993f10 --- /dev/null +++ b/docs/en/server/security/secharden/system_services.md @@ -0,0 +1,463 @@ +# System Services + +## Hardening the SSH Service + +### Description + +The Secure Shell \(SSH\) is a reliable security protocol for remote logins and other network services. SSH prevents information disclosure during remote management. SSH encrypts transferred data to prevent domain name server \(DNS\) spoofing and IP spoofing. OpenSSH was created as an open source alternative to the proprietary SSH protocol. + +Hardening the SSH service is to modify configurations of the SSH service to set the algorithm and authentication parameters when the system uses the OpenSSH protocol, improving the system security. [Table 1](#en-us_topic_0152100390_ta2fdb8e4931b4c1a8f502b3c7d887b95) describes the hardening items, recommended hardening values, and default policies. + +### Implementation + +To harden a server, perform the following steps: + +1. Open the configuration file **/etc/ssh/sshd\_config** of the SSH service on the server, and modify or add hardening items and values in the file. +2. Save the **/etc/ssh/sshd\_config** file. +3. Run the following command to restart the SSH service: + + ```shell + systemctl restart sshd + ``` + +To harden a client, perform the following steps: + +1. Open the configuration file **/etc/ssh/ssh\_config** of the SSH service on the client, and modify or add hardening items and values in the file. +2. Save the **/etc/ssh/ssh\_config** file. + +### Hardening Items + +- Server hardening policies + + All SSH service hardening items are stored in the **/etc/ssh/sshd\_config** configuration file. For details about the server hardening items, hardening suggestions, and whether the hardening items are configured as suggested, see [Table 1](#en-us_topic_0152100390_ta2fdb8e4931b4c1a8f502b3c7d887b95). + + **Table 1** SSH hardening items on a server + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Item

    +

    Description

    +

    Suggestion

    +

    Configured as Suggested

    +

    Protocol

    +

    SSH protocol version.

    +

    2

    +

    Yes

    +

    SyslogFacility

    +

    Log type of the SSH service. The item is set to AUTH, indicating authentication logs.

    +

    AUTH

    +

    Yes

    +

    LogLevel

    +

    Level for recording SSHD logs.

    +

    VERBOSE

    +

    Yes

    +

    X11Forwarding

    +

    Specifies whether a GUI can be used after login using SSH.

    +

    no

    +

    Yes

    +

    MaxAuthTries

    +

    Maximum number of authentication attempts.

    +

    3

    +

    No

    +

    PubkeyAuthentication

    +

    Specifies whether public key authentication is allowed.

    +

    yes

    +

    Yes

    +

    RSAAuthentication

    +

    Specifies whether only RSA security authentication is allowed.

    +

    yes

    +

    Yes

    +

    IgnoreRhosts

    +

    Specifies whether the rhosts and shosts files are used for authentication. The rhosts and shosts files record the names of the servers that support remote access and related login names.

    +

    yes

    +

    Yes

    +

    RhostsRSAAuthentication

    +

    Specifies whether the RSA algorithm security authentication based on the rhosts file is used. The rhosts file records the names of the servers that support remote access and related login names.

    +

    no

    +

    Yes

    +

    HostbasedAuthentication

    +

    Specifies whether host-based authentication is used. Host-based authentication indicates that any user of a trusted client can use the SSH service.

    +

    no

    +

    Yes

    +

    PermitRootLogin

    +

    Specifies whether to allow user root to log in to the system using SSH.

    +
    NOTE:

    If you want to log in to the system using SSH as user root, set the value of the PermitRootLogin field in the /etc/ssh/sshd_config file to yes.

    +
    +

    no

    +

    No

    +

    PermitEmptyPasswords

    +

    Specifies whether accounts with empty passwords can log in.

    +

    no

    +

    Yes

    +

    PermitUserEnvironment

    +

    Specifies whether to resolve the environment variables set in ~/.ssh/environment and ~/.ssh/authorized_keys.

    +

    no

    +

    Yes

    +

    Ciphers

    +

    Encryption algorithm of SSH data transmission.

    +

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

    +

    Yes

    +

    ClientAliveCountMax

    +

    Timeout count. After the server sends a request, if the number of times that the client does not respond reaches a specified value, the server automatically disconnects from the client.

    +

    0

    +

    YES

    +

    Banner

    +

    File of the prompt information displayed before and after SSH login.

    +

    /etc/issue.net

    +

    Yes

    +

    MACs

    +

    Hash algorithm for SSH data verification.

    +

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

    +

    Yes

    +

    StrictModes

    +

    Specifies whether to check the permission on and ownership of the home directory and rhosts file before SSH receives login requests.

    +

    yes

    +

    Yes

    +

    UsePAM

    +

    Specifies whether to use PAM for login authentication.

    +

    yes

    +

    Yes

    +

    AllowTcpForwarding

    +

    Specifies whether to allow TCP forwarding.

    +

    no

    +

    Yes

    +

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

    +

    SFTP log record level, which records the INFO level and authentication logs.

    +

    -l INFO -f AUTH

    +

    Yes

    +

    AllowAgentForwarding

    +

    Specifies whether to allow SSH Agent forwarding.

    +

    no

    +

    Yes

    +

    GatewayPorts

    +

    Specifies whether SSH can connect to ports on the forwarding client.

    +

    no

    +

    Yes

    +

    PermitTunnel

    +

    Specifies whether Tunnel devices are allowed.

    +

    no

    +

    Yes

    +

    KexAlgorithms

    +

    SSH key exchange algorithms.

    +

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

    +

    Yes

    +

    LoginGraceTime

    +

    Time limit for users passing the authentication. 0 indicates no limit. The default value is 120 seconds.

    +

    60

    +

    No

    +
    + + >[!NOTE] **NOTE:** + >By default, the messages displayed before and after SSH login are saved in the **/etc/issue.net** file. The default information in the **/etc/issue.net** file is **Authorized users only.** **All activities may be monitored and reported.** + +- Client hardening policies + + All SSH service hardening items are stored in the **/etc/ssh/ssh\_config** configuration file. For details about the client hardening items, hardening suggestions, and whether the hardening items are configured as suggested, see [Table 2](#en-us_topic_0152100390_tb289c5a6f1c7420ab4339187f9018ea4). + + **Table 2** SSH hardening items on a client + + + + + + + + + + + + + + + + + + + +

    Item

    +

    Description

    +

    Suggestion

    +

    Configured as Suggested

    +

    KexAlgorithms

    +

    SSH key exchange algorithms.

    +

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

    +

    No

    +

    VerifyHostKeyDNS

    +

    Specifies whether to verify HostKey files by using DNS or SSHFP.

    +

    ask

    +

    No

    +
    + + >[!NOTE] **NOTE:** + >Third-party clients and servers that use the Diffie-Hellman algorithm are required to allow at least 2048-bit connection. + +### Other Security Suggestions + +- The SSH service only listens on specified IP addresses. + + For security purposes, you are advised to only listen on required IP addresses rather than listen on 0.0.0.0 when using the SSH service. You can specify the IP addresses that SSH needs to listen on in the ListenAddress configuration item in the **/etc/ssh/sshd\_config** file. + + 1. Open and modify the **/etc/ssh/sshd\_config** file. + + ```shell + vi /etc/ssh/sshd_config + ``` + + The following information indicates that the bound listening IP address is **192.168.1.100**. You can change the listening IP address based on the site requirements. + + ```shell + ... + ListenAddress 192.168.1.100 + ... + ``` + + 2. Restart the SSH service. + + ```shell + systemctl restart sshd.service + ``` + +- SFTP users are restricted from access to upper-level directories. + + SFTP is a secure FTP designed to provide secure file transfer over SSH. Users can only use dedicated accounts to access SFTP for file upload and download, instead of SSH login. In addition, directories that can be accessed over SFTP are limited to prevent directory traversal attacks. The configuration process is as follows: + + >[!NOTE] **NOTE:** + >In the following configurations, **sftpgroup** is an example user group name, and **sftpuser** is an example username. + + 1. Create an SFTP user group. + + ```shell + groupadd sftpgroup + ``` + + 2. Create an SFTP root directory. + + ```shell + mkdir /sftp + ``` + + 3. Modify the ownership of and permission on the SFTP root directory. + + ```shell + chown root:root /sftp + chmod 755 /sftp + ``` + + 4. Create an SFTP user. + + ```shell + useradd -g sftpgroup -s /sbin/nologin sftpuser + ``` + + 5. Set the password of the SFTP user. + + ```shell + passwd sftpuser + ``` + + 6. Create an SFTP user directory. + + ```shell + mkdir /sftp/sftpuser + ``` + + 7. Modify the ownership of and permission on the SFTP user directory. + + ```shell + chown root:root /sftp/sftpuser + chmod 777 /sftp/sftpuser + ``` + + 8. Create a directory used to store files uploaded by the SFTP user. + + ```shell + mkdir /sftp/sftpuser/sftpupload + ``` + + 9. Modify the ownership of the upload directory of the SFTP user. + + ```shell + chown sftpuser:sftpgroup /sftp/sftpuser/sftpupload + ``` + + 10. Modify the **/etc/ssh/sshd\_config** file. + + ```shell + vi /etc/ssh/sshd_config + ``` + + Modify the following information: + + ```text + #Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO -f AUTH + Subsystem sftp internal-sftp -l INFO -f AUTH + ... + + Match Group sftpgroup + ChrootDirectory /sftp/%u + ForceCommand internal-sftp + ``` + + >[!NOTE] **NOTE:** + > + > - **%u** is a wildcard character. Enter **%u** to represent the username of the current SFTP user. + > - The following content must be added to the end of the **/etc/ssh/sshd\_config** file: + > + > ```text + > Match Group sftpgroup + > ChrootDirectory /sftp/%u + > ForceCommand internal-sftp + > ``` + + 11. Restart the SSH service. + + ```shell + systemctl restart sshd.service + ``` + +- Remotely execute commands using SSH. + + When a command is executed remotely through OpenSSH, TTY is disabled by default. If a password is required during command execution, the password is displayed in plain text. To ensure password input security, you are advised to add the **-t** option to the command. Example: + + ```shell + ssh -t testuser@192.168.1.100 su + ``` + + >[!NOTE] **NOTE:** + >**192.168.1.100** is an example IP address, and **testuser** is an example username. diff --git a/docs/en/server/security/trusted_computing/_toc.yaml b/docs/en/server/security/trusted_computing/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..99d60b542088413a255cfdec8caaa565972cdced --- /dev/null +++ b/docs/en/server/security/trusted_computing/_toc.yaml @@ -0,0 +1,6 @@ +label: Trusted Computing +isManual: true +description: Definition and key concepts of trusted computing +sections: + - label: Trusted Computing Definition + href: ./trusted_computing.md diff --git a/docs/en/server/security/trusted_computing/figures/RA-arch-1.png b/docs/en/server/security/trusted_computing/figures/RA-arch-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0ad1375a27cd61abf9f06518dbe1c01554623efd Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/RA-arch-1.png differ diff --git a/docs/en/server/security/trusted_computing/figures/RA-arch-2.png b/docs/en/server/security/trusted_computing/figures/RA-arch-2.png new file mode 100644 index 0000000000000000000000000000000000000000..19c7a1ee60422eb13d8a300514f78a63d1640394 Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/RA-arch-2.png differ diff --git a/docs/en/server/security/trusted_computing/figures/TPCM.png b/docs/en/server/security/trusted_computing/figures/TPCM.png new file mode 100644 index 0000000000000000000000000000000000000000..50882fb08433ee3ce187b3846bd6ec4a9f6d6818 Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/TPCM.png differ diff --git a/docs/en/server/security/trusted_computing/figures/creat_datadisk.png b/docs/en/server/security/trusted_computing/figures/creat_datadisk.png new file mode 100644 index 0000000000000000000000000000000000000000..0dfd6a2802184af6d809c485191ea52452cf28d5 Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/creat_datadisk.png differ diff --git a/docs/en/server/security/trusted_computing/figures/creat_datadisk1.png b/docs/en/server/security/trusted_computing/figures/creat_datadisk1.png new file mode 100644 index 0000000000000000000000000000000000000000..0dfd6a2802184af6d809c485191ea52452cf28d5 Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/creat_datadisk1.png differ diff --git a/docs/en/server/security/trusted_computing/figures/d1376b2a-d036-41c4-b852-e8368f363b5e-1.png b/docs/en/server/security/trusted_computing/figures/d1376b2a-d036-41c4-b852-e8368f363b5e-1.png new file mode 100644 index 0000000000000000000000000000000000000000..900cdc07c1f0e844bc48fe2342e83c91a23c24ec Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/d1376b2a-d036-41c4-b852-e8368f363b5e-1.png differ diff --git a/docs/en/server/security/trusted_computing/figures/d1376b2a-d036-41c4-b852-e8368f363b5e.png b/docs/en/server/security/trusted_computing/figures/d1376b2a-d036-41c4-b852-e8368f363b5e.png new file mode 100644 index 0000000000000000000000000000000000000000..900cdc07c1f0e844bc48fe2342e83c91a23c24ec Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/d1376b2a-d036-41c4-b852-e8368f363b5e.png differ diff --git a/docs/en/server/security/trusted_computing/figures/en-us_image_0229622729.png b/docs/en/server/security/trusted_computing/figures/en-us_image_0229622729.png new file mode 100644 index 0000000000000000000000000000000000000000..47f2d1cac133379469ed88b2bcb7213d75cf881e Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/en-us_image_0229622729.png differ diff --git a/docs/en/server/security/trusted_computing/figures/en-us_image_0229622789.png b/docs/en/server/security/trusted_computing/figures/en-us_image_0229622789.png new file mode 100644 index 0000000000000000000000000000000000000000..102d523ea5c2a1fedf4975556bf8b26f7599daaf Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/en-us_image_0229622789.png differ diff --git a/docs/en/server/security/trusted_computing/figures/en-us_image_0230050789.png b/docs/en/server/security/trusted_computing/figures/en-us_image_0230050789.png new file mode 100644 index 0000000000000000000000000000000000000000..0b785be2a026fe059c6ee41700a971a11cfff7ae Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/en-us_image_0230050789.png differ diff --git a/docs/en/server/security/trusted_computing/figures/en-us_image_0231143189.png b/docs/en/server/security/trusted_computing/figures/en-us_image_0231143189.png new file mode 100644 index 0000000000000000000000000000000000000000..7656f3aa5f5907f1e9f981c0cb5d44d4fcb84ef3 Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/en-us_image_0231143189.png differ diff --git a/docs/en/server/security/trusted_computing/figures/en-us_image_0231143191.png b/docs/en/server/security/trusted_computing/figures/en-us_image_0231143191.png new file mode 100644 index 0000000000000000000000000000000000000000..a82d1bcb2b719e3a372f63ae099cb5d52a93b536 Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/en-us_image_0231143191.png differ diff --git a/docs/en/server/security/trusted_computing/figures/en-us_image_0231143193.png b/docs/en/server/security/trusted_computing/figures/en-us_image_0231143193.png new file mode 100644 index 0000000000000000000000000000000000000000..94614045bddb0871b44d2f6603402f914871ad61 Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/en-us_image_0231143193.png differ diff --git a/docs/en/server/security/trusted_computing/figures/en-us_image_0231143195.png b/docs/en/server/security/trusted_computing/figures/en-us_image_0231143195.png new file mode 100644 index 0000000000000000000000000000000000000000..05011dbabe2d245c37ec68de646851bf955a2361 Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/en-us_image_0231143195.png differ diff --git a/docs/en/server/security/trusted_computing/figures/en-us_image_0231143196.png b/docs/en/server/security/trusted_computing/figures/en-us_image_0231143196.png new file mode 100644 index 0000000000000000000000000000000000000000..9bdbac969920af77721980804bd1c5433bea5bc9 Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/en-us_image_0231143196.png differ diff --git a/docs/en/server/security/trusted_computing/figures/en-us_image_0231143197.png b/docs/en/server/security/trusted_computing/figures/en-us_image_0231143197.png new file mode 100644 index 0000000000000000000000000000000000000000..5ea4eec4002374096d8ac18eb973ed3bf874b632 Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/en-us_image_0231143197.png differ diff --git a/docs/en/server/security/trusted_computing/figures/en-us_image_0231143198.png b/docs/en/server/security/trusted_computing/figures/en-us_image_0231143198.png new file mode 100644 index 0000000000000000000000000000000000000000..7d6360c150495d204da4b069e6dc62677580888f Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/en-us_image_0231143198.png differ diff --git a/docs/en/server/security/trusted_computing/figures/en-us_image_0231563132.png b/docs/en/server/security/trusted_computing/figures/en-us_image_0231563132.png new file mode 100644 index 0000000000000000000000000000000000000000..bb801a9471f3f3541ba96491654f25e2df9ce8bf Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/en-us_image_0231563132.png differ diff --git a/docs/en/server/security/trusted_computing/figures/en-us_image_0231563134.png b/docs/en/server/security/trusted_computing/figures/en-us_image_0231563134.png new file mode 100644 index 0000000000000000000000000000000000000000..398d15376d29d3aa406abb2e7e065d4625428c4d Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/en-us_image_0231563134.png differ diff --git a/docs/en/server/security/trusted_computing/figures/en-us_image_0231563135.png b/docs/en/server/security/trusted_computing/figures/en-us_image_0231563135.png new file mode 100644 index 0000000000000000000000000000000000000000..785977142a6bf0e1c1815b82dea73d75fa206a75 Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/en-us_image_0231563135.png differ diff --git a/docs/en/server/security/trusted_computing/figures/en-us_image_0231563136.png b/docs/en/server/security/trusted_computing/figures/en-us_image_0231563136.png new file mode 100644 index 0000000000000000000000000000000000000000..c274db4d0ca9d8758267a916e19fdef4aa22d0ba Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/en-us_image_0231563136.png differ diff --git a/docs/en/server/security/trusted_computing/figures/etmem-system-architecture-en.png b/docs/en/server/security/trusted_computing/figures/etmem-system-architecture-en.png new file mode 100644 index 0000000000000000000000000000000000000000..146a3618135712cb66feb3fc399a7549c636bd92 Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/etmem-system-architecture-en.png differ diff --git a/docs/en/server/security/trusted_computing/figures/example-command-output.png b/docs/en/server/security/trusted_computing/figures/example-command-output.png new file mode 100644 index 0000000000000000000000000000000000000000..2d77d3dc2934763b5da896a827b9805da34d1c09 Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/example-command-output.png differ diff --git a/docs/en/server/security/trusted_computing/figures/ima_digest_list_update.png b/docs/en/server/security/trusted_computing/figures/ima_digest_list_update.png new file mode 100644 index 0000000000000000000000000000000000000000..771067e31cee84591fbb914d7be4e8c576d7f5d2 Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/ima_digest_list_update.png differ diff --git a/docs/en/server/security/trusted_computing/figures/ima_performance.png b/docs/en/server/security/trusted_computing/figures/ima_performance.png new file mode 100644 index 0000000000000000000000000000000000000000..f5d641e8682ad2b9c0fbfad191add1819f5b2eef Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/ima_performance.png differ diff --git a/docs/en/server/security/trusted_computing/figures/ima_verification.png b/docs/en/server/security/trusted_computing/figures/ima_verification.png new file mode 100644 index 0000000000000000000000000000000000000000..fc879949db5387c61ccf6176f948b9a00f4fb053 Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/ima_verification.png differ diff --git a/docs/en/server/security/trusted_computing/figures/login.png b/docs/en/server/security/trusted_computing/figures/login.png new file mode 100644 index 0000000000000000000000000000000000000000..d15c2cad98fba16320d587f3c7b0c80f435c5d3a Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/login.png differ diff --git a/docs/en/server/security/trusted_computing/figures/mariadb-logical-architecture.png b/docs/en/server/security/trusted_computing/figures/mariadb-logical-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e65e786d918c84bbb14c101b69bc4ad36ccb4b Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/mariadb-logical-architecture.png differ diff --git a/docs/en/server/security/trusted_computing/figures/nginx-deployment-succeeded.png b/docs/en/server/security/trusted_computing/figures/nginx-deployment-succeeded.png new file mode 100644 index 0000000000000000000000000000000000000000..9ffb2c142defbd690e5407659116bf8e5582ba73 Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/nginx-deployment-succeeded.png differ diff --git a/docs/en/server/security/trusted_computing/figures/nginx-startup-failure.png b/docs/en/server/security/trusted_computing/figures/nginx-startup-failure.png new file mode 100644 index 0000000000000000000000000000000000000000..c8b855453433796265de42d7ffd0189c7ff9be2b Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/nginx-startup-failure.png differ diff --git a/docs/en/server/security/trusted_computing/figures/postgres.png b/docs/en/server/security/trusted_computing/figures/postgres.png new file mode 100644 index 0000000000000000000000000000000000000000..e7fc36882718587ec949133fe9892185cb4c2158 Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/postgres.png differ diff --git a/docs/en/server/security/trusted_computing/figures/postgresql-architecture.png b/docs/en/server/security/trusted_computing/figures/postgresql-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..cc73eb31f746409efc1e997072bf3d18b013012e Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/postgresql-architecture.png differ diff --git a/docs/en/server/security/trusted_computing/figures/the-nginx-service-is-successfully-started.png b/docs/en/server/security/trusted_computing/figures/the-nginx-service-is-successfully-started.png new file mode 100644 index 0000000000000000000000000000000000000000..bc6929772fd98fac3494b4436f26910b09818cb7 Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/the-nginx-service-is-successfully-started.png differ diff --git a/docs/en/server/security/trusted_computing/figures/trusted_chain.png b/docs/en/server/security/trusted_computing/figures/trusted_chain.png new file mode 100644 index 0000000000000000000000000000000000000000..034f0f092f41fb500ee4122339c447d10d4138ec Binary files /dev/null and b/docs/en/server/security/trusted_computing/figures/trusted_chain.png differ diff --git a/docs/en/server/security/trusted_computing/public_sys-resources/icon-caution.gif b/docs/en/server/security/trusted_computing/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/security/trusted_computing/public_sys-resources/icon-caution.gif differ diff --git a/docs/en/server/security/trusted_computing/public_sys-resources/icon-danger.gif b/docs/en/server/security/trusted_computing/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/security/trusted_computing/public_sys-resources/icon-danger.gif differ diff --git a/docs/en/server/security/trusted_computing/public_sys-resources/icon-note.gif b/docs/en/server/security/trusted_computing/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/server/security/trusted_computing/public_sys-resources/icon-note.gif differ diff --git a/docs/en/server/security/trusted_computing/public_sys-resources/icon-notice.gif b/docs/en/server/security/trusted_computing/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/en/server/security/trusted_computing/public_sys-resources/icon-notice.gif differ diff --git a/docs/en/server/security/trusted_computing/public_sys-resources/icon-tip.gif b/docs/en/server/security/trusted_computing/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/en/server/security/trusted_computing/public_sys-resources/icon-tip.gif differ diff --git a/docs/en/server/security/trusted_computing/public_sys-resources/icon-warning.gif b/docs/en/server/security/trusted_computing/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/server/security/trusted_computing/public_sys-resources/icon-warning.gif differ diff --git a/docs/en/server/security/trusted_computing/trusted_computing.md b/docs/en/server/security/trusted_computing/trusted_computing.md new file mode 100644 index 0000000000000000000000000000000000000000..ff0b0028c83ee6e5d44993f4128f1da721a9e2a7 --- /dev/null +++ b/docs/en/server/security/trusted_computing/trusted_computing.md @@ -0,0 +1,1106 @@ +# Trusted Computing + +## Trusted Computing Basics + +### What Is Trusted Computing + +The definition of being trusted varies with international organizations. + +1. Trusted Computing Group (TCG): + + An entity that is trusted always achieves the desired goal in an expected way. + +2. International Organization for Standardization (ISO) and International Electrotechnical Commission (IEC) (1999): + + The components, operations, or processes involved in computing are predictable under any conditions and are resistant to viruses and a certain degree of physical interference. + +3. IEEE Computer Society Technical Committee on Dependable Computing: + + Being trusted means that the services provided by the computer system can be proved to be reliable, and mainly refers to the reliability and availability of the system. + +In short, being trusted means that the system operates according to a pre-determined design and policy. + +A trusted computing system consists of a root of trust, a trusted hardware platform, operating system (OS), and application. The basic idea of the system is to create a trusted computing base (TCB) first, and then establish a trust chain that covers the hardware platform, OS, and application. In the trust chain, authentication is performed from the root to the next level, extending trust level by level and building a secure and trusted computing environment. + +![](./figures/trusted_chain.png) + +Unlike the traditional security mechanism that eliminates viruses without solving the root of the problem, trusted computing adopts the whitelist mechanism to allow only authorized kernels, kernel modules, and applications to run on the system. The system will reject the execution of a program that is unknown or has been changed. + +## Kernel Integrity Measurement Architecture (IMA) + +### Overview + +#### IMA + +The integrity measurement architecture (IMA) is a subsystem in the kernel. The IMA can measure files accessed through **execve()**, **mmap()**, and **open()** systems based on user-defined policies. The measurement result can be used for **local or remote attestation**, or can be compared with an existing reference value to **control the access to files**. + +According to the Wiki definition, the function of the kernel integrity subsystem includes three parts: + +- Measure: Detects accidental or malicious modifications to files, either remotely or locally. +- Appraise: Measures a file and compares it with a reference value stored in the extended attribute to control the integrity of the local file. +- Audit: Writes the measurement result into system logs for auditing. + +Figuratively, IMA measurement is an observer that only records modification without interfering in it, and IMA appraisal is more like a strict security guard that rejects any unauthorized access to programs. + +#### EVM + +The extended verification module (EVM) is used to calculate a hash value based on the security extended attributes of a file in the system, including **security.ima** and **security.selinux**. Then this value is signed by the key stored in the TPM or other trusted environments. The signature value is stored in **security.evm** and cannot be tampered with. If the value is tampered with, the signature verification fails when the file is accessed again. + +In summary, the EVM is used to provide offline protection for security extended attributes by calculating the digest of the attributes and signing and storing them in **security.evm**. + +#### IMA Digest Lists + +IMA Digest Lists are an enhancement of the original kernel integrity protection mechanism provided by openEuler. It replaces the original IMA mechanism to protect file integrity. + +Digest lists are binary data files in a special format. Each digest list corresponds to an RPM package and records the hash values of protected files (executable files and dynamic library files) in the RPM package. + +After the startup parameters are correctly configured, the kernel maintains a hash table (invisible to the user space) and provides interfaces (**digest\_list\_data** and **digest\_list\_data\_del**) that update the hash table using **securityfs**. The digest lists are signed by the private key when they are built. When uploaded to the kernel through the interface, the digest lists need to be verified by the public key in the kernel. + +![](./figures/ima_digest_list_update.png) + +When IMA appraisal is enabled, each time an executable file or dynamic library file is accessed, the hook in the kernel is invoked to calculate the hash values of the file content and extended attributes and search in the kernel hash table. If the calculated hash values match the one in the table, the file is allowed to be executed. Otherwise, the access is denied. + +![1599719649188](./figures/ima_verification.png) + +The IMA Digest Lists extension provided by the openEuler kernel provides higher security, performance, and usability than the native IMA mechanism of the kernel community, facilitating the implementation of the integrity protection mechanism in the production environment. + +- **A complete trust chain for high security** + + The native IMA mechanism requires that the file extended attribute be generated and marked in advance on the live network. When the file is accessed, the file extended attribute is used as a reference value, resulting in an incomplete trust chain. + + The IMA Digest Lists extension saves the reference digest value of the file in the kernel space. During the construction, the reference digest value of the file is carried in the released RPM package in the form of a digest list. When the RPM package is installed, the digest list is imported and the signature is verified, ensuring that the reference value comes from the software publisher and implementing a complete trust chain. + +- **Superior performance** + + The trusted platform module (TPM) chip is a low-speed chip, making the PCR extension operation a performance bottleneck in the IMA measurement scenario. To shatter this bottleneck, the Digest Lists extension reduces unnecessary PCR extension operations while ensuring security, providing 65% higher performance than the native IMA mechanism. + + In the IMA appraisal scenario, the Digest Lists extension performs signature verification in the startup phase to prevent signature verification from being performed each time the file is accessed. This helps deliver a 20% higher file access performance in the operation phase than that in the native IMA appraisal scenario. + +- **Fast deployment and smooth upgrade** + + When the native IMA mechanism is deployed for the first time or the software package is updated, you need to switch to the fix mode, manually mark the extended attributes of the file, and then restart the system to enter the enforcing mode. In this way, the installed program can be accessed normally. + + The Digest Lists extension can be used immediately after the installation is completed. In addition, the RPM package can be directly installed or upgraded in the enforcing mode without restarting the system or manually marking the extended attributes of the file. This minimizes user perception during the operation, allowing for quick deployment and smooth upgrade on the live network. + +Note: The IMA Digest Lists extension advances the signature verification of the native IMA to the startup phase. This causes the assumption that the memory in the kernel space cannot be tampered with. As a result, the IMA depends on other security mechanisms (secure startup of kernel module and dynamic memory measurement) to protect the integrity of the kernel memory. + +However, either the native IMA mechanism of the community or the IMA Digest Lists extension is only a link in the trust chain of trusted computing, and cannot ensure the system security alone. Security construction is always a systematic project that builds in-depth defense. + +### Constraints + +1. The current IMA appraisal mode can only protect immutable files in the system, including executable files and dynamic library files. +2. The IMA provides integrity measurement at the application layer. The security of the IMA depends on the reliability of the previous links. +3. Currently, the IMA does not support the import of the third-party application digest lists. +4. The startup log may contain `Unable to open file: /etc/keys/x509_ima.der`. This error is reported from the open source community and does not affect the use of the IMA digest lists feature. +5. In the ARM version, audit errors may occur when the log mode is enabled for the IMA. This occurs because the modprobe loads the kernel module before the digest lists are imported, but does not affect the normal functions. + +### Application Scenario + +#### IMA Measurement + +The purpose of IMA measurement is to detect unexpected or malicious modifications to system files. The measurement result can be used for local or remote attestation. + +If a TPM chip exists in the system, the measurement result is extended to a specified PCR register of the TPM chip. Due to the unidirectional PCR extension and the hardware security of the TPM chip, a user cannot modify the extended measurement result, thereby ensuring authenticity of the measurement result. + +The file scope and triggering conditions of IMA measurement can be configured by the user using the IMA policy. + +By default, IMA is disabled. However, the system searches for the **ima-policy** policy file in the `/etc/ima/` path. If the file is found, the system measures the files in the system based on the policy during startup. If you do not want to manually compile the policy file, you can configure the `ima_policy=tcb` in the startup parameters using the default policy. For details about more policy parameters, see the section *IMA Startup Parameters* in *Appendix*. + +You can check the currently loaded IMA policy in the `/sys/kernel/security/ima/policy` file. The IMA measurement log is located in the `/sys/kernel/security/ima/ascii_runtime_measurements` file, as shown in the following figure: + +```shell +$ head /sys/kernel/security/ima/ascii_runtime_measurements +10 ddee6004dc3bd4ee300406cd93181c5a2187b59b ima-ng sha1:9797edf8d0eed36b1cf92547816051c8af4e45ee boot_aggregate +10 180ecafba6fadbece09b057bcd0d55d39f1a8a52 ima-ng sha1:db82919bf7d1849ae9aba01e28e9be012823cf3a /init +10 ac792e08a7cf8de7656003125c7276968d84ea65 ima-ng sha1:f778e2082b08d21bbc59898f4775a75e8f2af4db /bin/bash +10 0a0d9258c151356204aea2498bbca4be34d6bb05 ima-ng sha1:b0ab2e7ebd22c4d17d975de0d881f52dc14359a7 /lib64/ld-2.27.so +10 0d6b1d90350778d58f1302d00e59493e11bc0011 ima-ng sha1:ce8204c948b9fe3ae67b94625ad620420c1dc838 /etc/ld.so.cache +10 d69ac2c1d60d28b2da07c7f0cbd49e31e9cca277 ima-ng sha1:8526466068709356630490ff5196c95a186092b8 /lib64/libreadline.so.7.0 +10 ef3212c12d1fbb94de9534b0bbd9f0c8ea50a77b ima-ng sha1:f80ba92b8a6e390a80a7a3deef8eae921fc8ca4e /lib64/libc-2.27.so +10 f805861177a99c61eabebe21003b3c831ccf288b ima-ng sha1:261a3cd5863de3f2421662ba5b455df09d941168 /lib64/libncurses.so.6.1 +10 52f680881893b28e6f0ce2b132d723a885333500 ima-ng sha1:b953a3fa385e64dfe9927de94c33318d3de56260 /lib64/libnss_files-2.27.so +10 4da8ce3c51a7814d4e38be55a2a990a5ceec8b27 ima-ng sha1:99a9c095c7928ecca8c3a4bc44b06246fc5f49de /etc/passwd +``` + +From left to right, the content of each record indicates: + +1. PCR: PCR register for extending measurement results (The default value is 10. This register is valid only when the TPM chip is installed in the system.) +2. Template hash value: hash value that is finally used for extension, combining the file content hash and the length and value of the file path +3. Template: template of the extended measurement value, for example, **ima-ng** +4. File content hash value: hash value of the measured file content +5. File path: path of the measured file +6. The ko compression feature is enabled in this version. When loading a compressed ko file, if the **appraise func=MODULE_CHECK** policy needs to be enabled for IMA, set **module.sig_enforce=1** in the boot parameters. + +#### IMA Appraisal + +The purpose of IMA appraisal is to control access to local files by comparing the reference value with the standard reference value. + +IMA uses the security extension attributes **security.ima** and **security.evm** to store the reference values of file integrity measurement. + +- **security.ima**: stores the hash value of the file content +- **security.evm**: stores the hash value signature of a file extended attribute + +When a protected file is accessed, the hook in the kernel is triggered to verify the integrity of the extended attributes and content of the file. + +1. Use the public key in the kernel keyring to verify the signature value in the extended attribute of the **security.evm** file, and compare this signature value with the hash value of the extended attribute of the current file. If they match, the extended attribute of the file is complete (including **security.ima**). +2. When the extended attribute of the file is complete, the system compares the extended attribute of the file **security.ima** with the digest value of the current file content. If they match, the system allows for the access to the file. + +Likewise, the file scope and trigger conditions for IMA appraisal can be configured by users using IMA policies. + +#### IMA Digest Lists + +Currently, the IMA Digest Lists extension supports the following three combinations of startup parameters: + +- IMA measurement mode: + + ```shell + ima_policy=exec_tcb ima_digest_list_pcr=11 + ``` + +- IMA appraisal log mode + IMA measurement mode: + + ```shell + ima_template=ima-sig ima_policy="exec_tcb|appraise_exec_tcb|appraise_exec_immutable" initramtmpfs ima_hash=sha256 ima_appraise=log evm=allow_metadata_writes evm=x509 ima_digest_list_pcr=11 ima_appraise_digest_list=digest + ``` + +- IMA appraisal enforcing mode + IMA measurement mode: + + ```shell + ima_template=ima-sig ima_policy="exec_tcb|appraise_exec_tcb|appraise_exec_immutable" initramtmpfs ima_hash=sha256 ima_appraise=enforce-evm evm=allow_metadata_writes evm=x509 ima_digest_list_pcr=11 ima_appraise_digest_list=digest + ``` + +### Procedure + +#### Initial Deployment in the Native IMA Scenario + +When the system is started for the first time, you need to configure the following startup parameters: + +```shell +ima_appraise=fix ima_policy=appraise_tcb +``` + +In the `fix` mode, the system can be started when no reference value is available. `appraise_tcb` corresponds to an IMA policy. For details, see *IMA Startup Parameters* in the *Appendix*. + +Next, you need to access all the files that need to be verified to add IMA extended attributes to them: + +```shell +time find / -fstype ext4 -type f -uid 0 -exec dd if='{}' of=/dev/null count=0 status=none \; +``` + +This process takes some time. After the command is executed, you can see the marked reference value in the extended attributes of the protected file. + +```shell +$ getfattr -m - -d /sbin/init +# file: sbin/init +security.ima=0sAXr7Qmun5mkGDS286oZxCpdGEuKT +security.selinux="system_u:object_r:init_exec_t" +``` + +Configure the following startup parameters and restart the system: + +```shell +ima_appraise=enforce ima_policy=appraise_tcb +``` + +#### Initial Deployment in the Digest Lists Scenario + +1. Set kernel parameters to enter the log mode. + + Add the following parameters to the `/boot/efi/EFI/openEuler/grub.cfg` file: + + ```shell + ima_template=ima-sig ima_policy="exec_tcb|appraise_exec_tcb|appraise_exec_immutable" initramtmpfs ima_hash=sha256 ima_appraise=log evm=allow_metadata_writes evm=x509 ima_digest_list_pcr=11 ima_appraise_digest_list=digest + ``` + + Run the `reboot` command to restart the system and enter the log mode. In this mode, integrity check has been enabled, but the system can be started even if the check fails. + +2. Install the dependency package. + + Run the **yum** command to install **digest-list-tools** and **ima-evm-utils**. Ensure that the versions are not earlier than the following: + + ```shell + $ yum install digest-list-tools ima-evm-utils + $ rpm -qa | grep digest-list-tools + digest-list-tools-0.3.93-1.oe1.x86_64 + $ rpm -qa | grep ima-evm-utils + ima-evm-utils-1.2.1-9.oe1.x86_64 + ``` + +3. If the **plymouth** package is installed, you need to add `-a` to the end of the **cp** command in line 147 in the `/usr/libexec/plymouth/plymouth-populate-initrd` script file: + + ```shell + ... + ddebug "Installing $_src" + cp -a --sparse=always -pfL "$PLYMOUTH_SYSROOT$_src" "${initdir}/$target" + } + ``` + +4. Run `dracut` to generate **initrd** again: + + ```shell + dracut -f -e xattr + ``` + + Edit the `/boot/efi/EFI/openEuler/grub.cfg` file and change **ima\_appraise=log** to **ima\_appraise=enforce-evm**. + + ```shell + ima_template=ima-sig ima_policy="exec_tcb|appraise_exec_tcb|appraise_exec_immutable" initramtmpfs ima_hash=sha256 ima_appraise=enforce-evm evm=allow_metadata_writes evm=x509 ima_digest_list_pcr=11 ima_appraise_digest_list=digest + ``` + + Run the **reboot** command to complete the initial deployment. + +#### Building Digest Lists on OBS + +Open Build Service (OBS) is a compilation system that was first used for building software packages in openSUSE and supports distributed compilation of multiple architectures. + +Before building a digest list, ensure that your project contains the following RPM packages from openEuler: + +- digest-list-tools +- pesign-obs-integration +- selinux-policy +- rpm +- openEuler-rpm-config + +Add **Project Config** in the deliverable project: + +```shell +Preinstall: pesign-obs-integration digest-list-tools selinux-policy-targeted +Macros: +%__brp_digest_list /usr/lib/rpm/openEuler/brp-digest-list %{buildroot} +:Macros +``` + +- The following content is added to **Preinstall**: **digest-list-tools** for generating the digest list; **pesign-obs-integration** for generating the digest list signature; **selinux-policy-targeted**, ensuring that the SELinux label in the environment is correct when the digest list is generated. +- Define the macro **%\_\_brp\_digest\_list** in Macros. The RPM runs this macro to generate a digest list for the compiled binary file in the build phase. This macro can be used as a switch to control whether the digest list is generated in the project. + +After the configuration is completed, OBS automatically performs full build. In normal cases, the following two files are added to the software package: + +- **/etc/ima/digest\_lists/0-metadata\_list-compact-\[package name]-\[version number]** +- **/etc/ima/digest\_lists.tlv/0-metadata\_list-compact\_tlv-\[package name]-\[version number]** + +#### Building Digest Lists on Koji + +Koji is a compilation system of the Fedora community. The openEuler community will support Koji in the future. + +### FAQs + +1. Why does the system fail to be started, or commands fail to be executed, or services are abnormal after the system is started in enforcing mode? + + In enforcing mode, IMA controls file access. If the content or extended attributes of a file to be accessed are incomplete, the access will be denied. If key commands that affect system startup cannot be executed, the system cannot be started. + + Check whether the following problems exist: + + - **Check whether the digest list is added to initrd.** + + Check whether the **dracut** command is executed to add the digest list to the kernel during the initial deployment. If the digest list is not added to **initrd**, the digest list cannot be imported during startup. As a result, the startup fails. + + - **Check whether the official RPM package is used.** + + If a non-official openEuler RPM package is used, the RPM package may not carry the digest list, or the private key for signing the digest list does not match the public key for signature verification in the kernel. As a result, the digest list is not imported to the kernel. + + If the cause is not clear, enter the log mode and find the cause from the error log: + + ```shell + dmesg | grep appraise + ``` + +2. Why access control is not performed on system files in enforcing mode? + + When the system does not perform access control on the file as expected, check whether the IMA policy in the startup parameters is correctly configured: + + ```shell + $ cat /proc/cmdline + ...ima_policy=exec_tcb|appraise_exec_tcb|appraise_exec_immutable... + ``` + + Run the following command to check whether the IMA policy in the current kernel has taken effect: + + ```shell + cat /sys/kernel/security/ima/policy + ``` + + If the policy file is empty, it indicates that the policy fails to be set. In this case, the system does not perform access control. + +3. After the initial deployment is completed, do I need to manually run the **dracut** command to generate **initrd** after installing, upgrading, or uninstalling the software package? + + No. The **digest\_list.so** plug-in provided by the RPM package can automatically update the digest list at the RPM package granularity, allowing users to be unaware of the digest list. + +### Appendixes + +#### Description of the IMA securityfs Interface + +The native IMA provides the following **securityfs** interfaces: + +> Note: The following interface paths are in the `/sys/kernel/security/` directory. + +| Path | Permission | Description | +| ------------------------------ | ---------- | ------------------------------------------------------------ | +| ima/policy | 600 | IMA policy interface | +| ima/ascii_runtime_measurement | 440 | IMA measurement result in ASCII code format | +| ima/binary_runtime_measurement | 440 | IMA measurement result in binary format | +| ima/runtime_measurement_count | 440 | Measurement result statistics | +| ima/violations | 440 | Number of IMA measurement result conflicts | +| evm | 660 | EVM mode, that is, the mode for verifying the integrity of extended attributes of files | + +The values of **/sys/kernel/security/evm** are as follows: + +- 0: EVM uninitialized. + +- 1: Uses HMAC (symmetric encryption) to verify the integrity of extended attributes. +- 2: Uses the public key signature (asymmetric encryption) to verify the integrity of extended attributes. +- 6: Disables the integrity check of extended attributes (This mode is used for openEuler). + +The additional **securityfs** interfaces provided by the IMA Digest Lists extension are as follows: + +| Path | Permission | Description | +| ------------------------ | ---------- | ---------------------------------------------------------- | +| ima/digests_count | 440 | Total number of digests (IMA+EVM) in the system hash table | +| ima/digest_list_data | 200 | New interfaces in the digest list | +| ima/digest_list_data_del | 200 | Interfaces deleted from the digest list | + +#### IMA Policy Syntax + +Each IMA policy statement must start with an **action** represented by the keyword action and be followed by a **filtering condition**: + +- **action**: indicates the action of a policy. Only one **action** can be selected for a policy. + + > Note: You can **ignore the word action** and directly write **dont\_measure** instead of **action=dont\_measure**. + +- **func**: indicates the type of the file to be measured or authenticated. It is often used together with **mask**. Only one **func** can be selected for a policy. + + - **FILE\_CHECK** can be used only with **MAY\_EXEC**, **MAY\_WRITE**, and **MAY\_READ**. + - **MODULE\_CHECK**, **MMAP\_CHECK**, and **BPRM\_CHECK** can be used only with **MAY\_EXEC**. + - A combination without the preceding matching relationships does not take effect. + +- **mask**: indicates the operation upon which files will be measured or appraised. Only one **mask** can be selected for a policy. + +- **fsmagic**: indicates the hexadecimal magic number of the file system type, which is defined in the `/usr/include/linux/magic.h` file. + + > Note: By default, all file systems are measured unless you use the **dont\_measure/dont\_appraise** to mark a file system not to be measured. + +- **fsuid**: indicates the UUID of a system device. The value is a hexadecimal string of 16 characters. + +- **objtype**: indicates the file type. Only one file type can be selected for a policy. + + > Note: **objtype** has a finer granularity than **func**. For example, **obj\_type=nova\_log\_t** indicates the nova log file. + +- **uid**: indicates the user (represented by the user ID) who performs operations on the file. Only one **uid** can be selected for a policy. + +- **fowner**: indicates the owner (represented by the user ID) of the file. Only one **fowner** can be selected for a policy. + +The values and description of the keywords are as follows: + +| Keyword | Value | Description | +| ------------- | ------------------ | ------------------------------------------------------------ | +| action | measure | Enables IMA measurement | +| | dont_measure | Disables IMA measurement | +| | appraise | Enables IMA appraisal | +| | dont_appraise | Disables IMA appraisal | +| | audit | Enables audit | +| func | FILE_CHECK | File to be opened | +| | MODULE_CHECK | Kernel module file to be loaded | +| | MMAP_CHECK | Dynamic library file to be mapped to the memory space of the process | +| | BRPM_CHECK | File to be executed (excluding script files opened by programs such as `/bin/bash`) | +| | POLICY_CHECK | File to be loaded as a supplement to the IMA policy | +| | FIRMWARE_CHECK | Firmware to be loaded into memory | +| | DIGEST_LIST_CHECK | Digest list file to be loaded into the kernel | +| | KEXEC_KERNEL_CHECK | kexec kernel to be switched to | +| mask | MAY_EXEC | Executes a file | +| | MAY_WRITE | Writes data to a file This operation is not recommended because it is restricted by open source mechanisms such as echo and vim (the essence of modification is to create a temporary file and then rename it). The IMA measurement of **MAY\_WRITE** is not triggered each time the file is modified. | +| | MAY_READ | Reads a file | +| | MAY_APPEND | Extends file attributes | +| fsmagic | fsmagic=xxx | Hexadecimal magic number of the file system type | +| fsuuid | fsuuid=xxx | UUID of a system device. The value is a hexadecimal string of 16 characters. | +| fowner | fowner=xxx | User ID of the file owner | +| uid | uid=xxx | ID of the user who operates the file | +| obj_type | obj_type=xxx_t | File type (based on the SELinux tag) | +| pcr | pcr=\ | Selects the PCR used to extend the measurement values in the TPM. The default value is 10. | +| appraise_type | imasig | Signature-based IMA appraisal | +| | meta_immutable | Evaluates the extended attributes of the file based on signatures (supporting the digest list). | + +> Note: **PATH\_CHECK** is equivalent to **FILE\_CHECK**, and **FILE\_MMAP** is equivalent to **MMAP\_CHECK**. They are not mentioned in this table. + +#### IMA Native Startup Parameters + +The following table lists the kernel startup parameters of the native IMA. + +| Parameter | Value | Description | +| ---------------- | ------------ | ------------------------------------------------------------ | +| ima_appraise | off | Disables the IMA appraisal mode. The integrity check is not performed when the file is accessed and no new reference value is generated for the file. | +| | enforce | Enables the IMA appraisal enforcing mode to perform the integrity check when the file is accessed. That is, the file digest value is calculated and compared with the reference value. If the comparison fails, the file access is rejected. In this case, the IMA generates a new reference value for the new file. | +| | fix | Enables the IMA repair mode. In this mode, the reference value of a protected file can be updated. | +| | log | Enables the IMA appraisal log mode to perform the integrity check when the file is accessed. However, commands can be executed even if the check fails, and only logs are recorded. | +| ima_policy | tcb | Measures all file execution, dynamic library mapping, kernel module import, and device driver loading. The file read behavior of the root user is also measured. | +| | appraise_tcb | Evaluates all files whose owner is the root user. | +| | secure_boot | Evaluates the kernel module import, hardware driver loading, kexec kernel switchover, and IMA policies. The prerequisite is that these files have IMA signatures. | +| ima_tcb | None | Equivalent to **ima\_policy=tcb**. | +| ima_appraise_tcb | None | Equivalent to **ima\_policy=appraise\_tcb**. | +| ima_hash | sha1/md5/... | IMA digest algorithm. The default value is sha1. | +| ima_template | ima | IMA measurement extension template | +| | ima-ng | IMA measurement extension template | +| | ima-sig | IMA measurement extension template | +| integrity_audit | 0 | Basic integrity audit information (default) | +| | 1 | Additional integrity audit information | + +> Note: The **ima\_policy** parameter can specify multiple values at the same time, for example, **ima\_policy=tcb\|appraise\_tcb**. After the system is started, the IMA policy of the system is the sum of the policies for the two parameters. + +The IMA policy for the `ima_policy=tcb` startup parameter is as follows: + +```text +# PROC_SUPER_MAGIC = 0x9fa0 +dont_measure fsmagic=0x9fa0 +# SYSFS_MAGIC = 0x62656572 +dont_measure fsmagic=0x62656572 +# DEBUGFS_MAGIC = 0x64626720 +dont_measure fsmagic=0x64626720 +# TMPFS_MAGIC = 0x01021994 +dont_measure fsmagic=0x1021994 +# DEVPTS_SUPER_MAGIC=0x1cd1 +dont_measure fsmagic=0x1cd1 +# BINFMTFS_MAGIC=0x42494e4d +dont_measure fsmagic=0x42494e4d +# SECURITYFS_MAGIC=0x73636673 +dont_measure fsmagic=0x73636673 +# SELINUX_MAGIC=0xf97cff8c +dont_measure fsmagic=0xf97cff8c +# SMACK_MAGIC=0x43415d53 +dont_measure fsmagic=0x43415d53 +# CGROUP_SUPER_MAGIC=0x27e0eb +dont_measure fsmagic=0x27e0eb +# CGROUP2_SUPER_MAGIC=0x63677270 +dont_measure fsmagic=0x63677270 +# NSFS_MAGIC=0x6e736673 +dont_measure fsmagic=0x6e736673 +measure func=MMAP_CHECK mask=MAY_EXEC +measure func=BPRM_CHECK mask=MAY_EXEC +measure func=FILE_CHECK mask=MAY_READ uid=0 +measure func=MODULE_CHECK +measure func=FIRMWARE_CHECK +``` + +The IMA policy for the `ima_policy=tcb_appraise` startup parameter is as follows: + +```text +# PROC_SUPER_MAGIC = 0x9fa0 +dont_appraise fsmagic=0x9fa0 +# SYSFS_MAGIC = 0x62656572 +dont_appraise fsmagic=0x62656572 +# DEBUGFS_MAGIC = 0x64626720 +dont_appraise fsmagic=0x64626720 +# TMPFS_MAGIC = 0x01021994 +dont_appraise fsmagic=0x1021994 +# RAMFS_MAGIC +dont_appraise fsmagic=0x858458f6 +# DEVPTS_SUPER_MAGIC=0x1cd1 +dont_appraise fsmagic=0x1cd1 +# BINFMTFS_MAGIC=0x42494e4d +dont_appraise fsmagic=0x42494e4d +# SECURITYFS_MAGIC=0x73636673 +dont_appraise fsmagic=0x73636673 +# SELINUX_MAGIC=0xf97cff8c +dont_appraise fsmagic=0xf97cff8c +# SMACK_MAGIC=0x43415d53 +dont_appraise fsmagic=0x43415d53 +# NSFS_MAGIC=0x6e736673 +dont_appraise fsmagic=0x6e736673 +# CGROUP_SUPER_MAGIC=0x27e0eb +dont_appraise fsmagic=0x27e0eb +# CGROUP2_SUPER_MAGIC=0x63677270 +dont_appraise fsmagic=0x63677270 +appraise fowner=0 +``` + +The IMA policy for the `ima_policy=secure_boot` startup parameter is as follows: + +```text +appraise func=MODULE_CHECK appraise_type=imasig +appraise func=FIRMWARE_CHECK appraise_type=imasig +appraise func=KEXEC_KERNEL_CHECK appraise_type=imasig +appraise func=POLICY_CHECK appraise_type=imasig +``` + +#### IMA Digest List Startup Parameters + +The kernel startup parameters added to the IMA digest list feature are as follows: + +| Parameter | Value | Description | +| ------------------------ | ----------------------- | ------------------------------------------------------------ | +| integrity | 0 | Disables the IMA feature (by default) | +| | 1 | Enables the IMA feature | +| ima_appraise | off | Disables the IMA appraisal mode | +| | enforce-evm | Enables the IMA appraisal forced mode to perform the integrity check when the file is accessed and control the access. | +| ima_appraise_digest_list | digest | When the EVM is disabled, the abstract list is used for IMA appraise. The abstract list protects both the content and extended attributes of the file. | +| | digest-nometadata | If the EVM digest value does not exist, the integrity check is performed only based on the IMA digest value (the file extended attribute is not protected). | +| evm | fix | Allows for any modification to the extended attribute (even if the modification causes the failure to verify the integrity of the extended attribute). | +| | ignore | Allowed to modify the extended attribute only when it does not exist or is incorrect. | +| ima_policy | exec_tcb | IMA measurement policy. For details, see the following policy description. | +| | appraise_exec_tcb | IMA appraisal policy. For details, see the following policy description. | +| | appraise_exec_immutable | IMA appraisal policy. For details, see the following policy description. | +| ima_digest_list_pcr | 11 | Uses PCR 11 instead of PCR 10, and uses only the digest list for measurement. | +| | +11 | The PCR 10 measurement is reserved. When the TPM chip is available, the measurement result is written to the TPM chip. | +| initramtmpfs | None | Adds the support for **tmpfs**. | + +The IMA policy for the `ima_policy=exec_tcb` startup parameter is as follows: + +```text +dont_measure fsmagic=0x9fa0 +dont_measure fsmagic=0x62656572 +dont_measure fsmagic=0x64626720 +dont_measure fsmagic=0x1cd1 +dont_measure fsmagic=0x42494e4d +dont_measure fsmagic=0x73636673 +dont_measure fsmagic=0xf97cff8c +dont_measure fsmagic=0x43415d53 +dont_measure fsmagic=0x27e0eb +dont_measure fsmagic=0x63677270 +dont_measure fsmagic=0x6e736673 +measure func=MMAP_CHECK mask=MAY_EXEC +measure func=BPRM_CHECK mask=MAY_EXEC +measure func=MODULE_CHECK +measure func=FIRMWARE_CHECK +measure func=POLICY_CHECK +measure func=DIGEST_LIST_CHECK +measure parser +``` + +The IMA policy for the `ima_policy=appraise_exec_tcb` startup parameter is as follows: + +```text +appraise func=MODULE_CHECK appraise_type=imasig +appraise func=FIRMWARE_CHECK appraise_type=imasig +appraise func=KEXEC_KERNEL_CHECK appraise_type=imasig +appraise func=POLICY_CHECK appraise_type=imasig +appraise func=DIGEST_LIST_CHECK appraise_type=imasig +dont_appraise fsmagic=0x9fa0 +dont_appraise fsmagic=0x62656572 +dont_appraise fsmagic=0x64626720 +dont_appraise fsmagic=0x858458f6 +dont_appraise fsmagic=0x1cd1 +dont_appraise fsmagic=0x42494e4d +dont_appraise fsmagic=0x73636673 +dont_appraise fsmagic=0xf97cff8c +dont_appraise fsmagic=0x43415d53 +dont_appraise fsmagic=0x6e736673 +dont_appraise fsmagic=0x27e0eb +dont_appraise fsmagic=0x63677270 +``` + +The IMA policy for the `ima_policy=appraise_exec_immutable` startup parameter is as follows: + +```text +appraise func=BPRM_CHECK appraise_type=imasig appraise_type=meta_immutable +appraise func=MMAP_CHECK +appraise parser appraise_type=imasig +``` + +#### IMA Kernel Compilation Options + +The native IMA provides the following compilation options: + +| Compilation Option | Description | +| -------------------------------- | ------------------------------------------------------- | +| CONFIG_INTEGRITY | IMA/EVM compilation switch | +| CONFIG_INTEGRITY_SIGNATURE | Enables IMA signature verification | +| CONFIG_INTEGRITY_ASYMMETRIC_KEYS | Enables IMA asymmetric signature verification | +| CONFIG_INTEGRITY_TRUSTED_KEYRING | Enables IMA/EVM key ring | +| CONFIG_INTEGRITY_AUDIT | Compiles the IMA audit module | +| CONFIG_IMA | IMA compilation switch | +| CONFIG_IMA_WRITE_POLICY | Allows updating the IMA policy in the running phase | +| CONFIG_IMA_MEASURE_PCR_IDX | Allows specifying the PCR number of the IMA measurement | +| CONFIG_IMA_LSM_RULES | Allows configuring LSM rules | +| CONFIG_IMA_APPRAISE | IMA appraisal compilation switch | +| IMA_APPRAISE_BOOTPARAM | Enables IMA appraisal startup parameters | +| CONFIG_EVM | EVM compilation switch | + +The additional compilation options provided by the IMA Digest Lists extension are as follows: + +| Compilation Option | Description | +| ------------------ | ----------------------------------- | +| CONFIG_DIGEST_LIST | Enables the IMA Digest List feature | + +#### IMA Performance Reference Data + +The following figure compares the performance when IMA is disabled, native IMA is enabled, and IMA digest list is enabled. + +![img](./figures/ima_performance.png) + +#### IMA Root Certificate Configuration + +Currently, openEuler uses the RPM key to sign the IMA digest list. To ensure that the IMA function is available out of the box, openEuler imports the RPM root certificate (PGP certificate) to the kernel by default during kernel compilation. Currently, there are two PGP certificates, namely, the OBS certificate used in the earlier version and the openEuler certificate used in the switchover of openEuler 22.03 LTS SP4: + +```text +# cat /proc/keys | grep PGP +1909b4ad I------ 1 perm 1f030000 0 0 asymmetri private OBS b25e7f66: PGP.rsa b25e7f66 [] +2f10cd36 I------ 1 perm 1f030000 0 0 asymmetri openeuler fb37bc6f: PGP.rsa fb37bc6f [] +``` + +The current kernel does not support the import of the PGP sub-public key, and the switched openEuler certificate uses the sub-key signature. Therefore, the openEuler kernel preprocesses the certificate before compilation, extracts the sub-public key, and imports it to the kernel. For details, see the process_pgp_certs.sh script file in the code repository of the kernel software package: . + +If the user does not use the IMA digest list function or uses other keys to implement signature/verification, you can remove the related code and configure the kernel root certificate by yourself. + +## Remote Attestation (Kunpeng Security Library) + +### Introduction + +This project develops basic security software components running on Kunpeng processors. In the early stage, the project focuses on trusted computing fields such as remote attestation to empower security developers in the community. + +### Software Architecture + +On the platform without TEE enabled, this project can provide the platform remote attestation feature, and its software architecture is shown in the following figure: + +![img](./figures/RA-arch-1.png) + +On the platform that has enabled TEE, this project can provide TEE remote attestation feature, and its software architecture is shown in the following figure: + +![img](./figures/RA-arch-2.png) + +### Installation and Configuration + +1. Run the following command to use the RPM package of the Yum installation program: + + ```shell + yum install kunpengsecl-ras kunpengsecl-rac kunpengsecl-rahub kunpengsecl-qcaserver kunpengsecl-attester kunpengsecl-tas kunpengsecl-devel + ``` + +2. Prepare the database environment. Go to the **/usr/share/attestation/ras** directory and run the **prepare-database-env.sh** script to automatically configure the database environment. + +3. The configuration files required for program running are stored in three paths: current path **./config.yaml**, home path **${HOME}/.config/attestation/ras(rac)(rahub)(qcaserver)(attester)(tas)/config.yaml**, and system path **/etc/attestation/ras(rac)(rahub)(qcaserver)(attester)(tas)/config.yaml**. + +4. (Optional) To create a home directory configuration file, run the **prepare-ras(rac)(hub)(qca)(attester)(tas)conf-env.sh** script in **/usr/share/attestation/ras(rac)(rahub)(qcaserver)(attester)(tas)** after installing the RPM package. + +### Options + +#### RAS Boot Options + +Run the `ras` command to start the RAS program. Note that you need to provide the ECDSA public key in the current directory and name it **ecdsakey.pub**. Options are as follows: + +```console + -H --https HTTP/HTTPS mode switch. The default value is https(true), false=http. + -h --hport RESTful API port listened by RAS in HTTPS mode. + -p, --port string Client API port listened by RAS. + -r, --rest string RESTful API port listened by RAS in HTTP mode. + -T, --token Generates a verification code for test and exits. + -t, --test Starts in test mode. + -v, --verbose Prints more detailed RAS runtime log information. + -V, --version Prints the RAS version and exits. +``` + +**Note:** +>1.To use TEE remote attestation feature, you must pre-install the **libqca.so** and **libteec.so** library provided by the TEE team. +>2.To not use TEE remote attestation feature, you must copy the **libqca.so** and **libteec.so** library in **${DESTDIR}/usr/share/attestation/qcaserver** path to **/usr/lib** or **/usr/lib64** path. + +#### RAC Boot Options + +Run the `sudo raagent` command to start the RAC program. Note that the sudo permission is required to enable the physical TPM module. Options are as follows: + +```console + -s, --server string Specifies the RAS service port to be connected. + -t, --test Starts in test mode. + -v, --verbose Prints more detailed RAC runtime log information. + -V, --version Prints the RAC version and exits. + -i, --imalog Specifies the path of the IMA file. + -b, --bioslog Specifies the path of the BIOS file. + -T, --tatest Starts in TA test mode. +``` + +**Note:** +>1.To use TEE remote attestation feature, you must start RAC not in TA test mode. And place the uuid, whether to use TCB, mem_hash and img_hash of the TA to be attestated sequentially in the **talist** file under the RAC execution path. The format of the **talist** file is as follows: +> +>```text +>e08f7eca-e875-440e-9ab0-5f381136c600 false ccd5160c6461e19214c0d8787281a1e3c4048850352abe45ce86e12dd3df9fde 46d5019b0a7ffbb87ad71ea629ebd6f568140c95d7b452011acfa2f9daf61c7a +>``` +> +>2.To not use TEE remote attestation feature, you must start RAC in TA test mode. +>3.If the physical TPM module cannot be enabled, RAC needs to be started in test mode. We have provided a set of platform benchmark files for RAC to read in test mode. Before starting RAC, you must copy the files in **$(DESTDIR)/etc/attestation/default_test** directory to directory in which you run RAC. + +#### QCA Boot Options + +Run the `${DESTDIR}/usr/bin/qcaserver` command to start the QCA program. Note that to start QTA normally, the full path of qcaserver must be used, and the CA path parameter in QTA needs to be kept the same as the path. Options are as follows: + +```console + -C, --scenario int Sets the application scenario of the program, The default value is sce_no_as(0), 1=sce_as_no_daa, 2=sce_as_with_daa. + -S, --server string Specifies the open server address/port. +``` + +#### ATTESTER Boot Options + +Run the `attester` command to start the ATTESTER program. Options are as follows: + +```console + -B, --basevalue string Sets the base value file read path + -M, --mspolicy int Sets the measurement strategy, which defaults to -1 and needs to be specified manually. 1=compare only img-hash values, 2=compare only hash values, and 3=compare both img-hash and hash values at the same time. + -S, --server string Specifies the address of the server to connect to. + -U, --uuid int Specifies the trusted apps to verify. + -V, --version Prints the program version and exit. + -T, --test Reads fixed nonce values to match currently hard-coded trusted reports. +``` + +#### TAS Boot Options + +Run the `tas` command to start the TAS program. Options are as follows: + +```console + -T, --token Generates a verification code for test and exits. +``` + +**Note:** +>1.To enable the TAS, you must configure the private key for TAS. Run the following command to modify the configuration file in the home directory: +> +>```shell +>$ cd ${HOME}/.config/attestation/tas +>$ vim config.yaml +> # The values of the following DAA_GRP_KEY_SK_X and DAA_GRP_KEY_SK_Y are for testing purposes only. +> # Be sure to update their contents to ensure safety before normal use. +>tasconfig: +> port: 127.0.0.1:40008 +> rest: 127.0.0.1:40009 +> akskeycertfile: ./ascert.crt +> aksprivkeyfile: ./aspriv.key +> huaweiitcafile: ./Huawei IT Product CA.pem +> DAA_GRP_KEY_SK_X: 65a9bf91ac8832379ff04dd2c6def16d48a56be244f6e19274e97881a776543c65a9bf91ac8832379ff04dd2c6def16d48a56be244f6e19274e97881a776543c +> DAA_GRP_KEY_SK_Y: 126f74258bb0ceca2ae7522c51825f980549ec1ef24f81d189d17e38f1773b56126f74258bb0ceca2ae7522c51825f980549ec1ef24f81d189d17e38f1773b56 +>``` +> +>Then enter `tas` to start TAS program. +> +>2.In an environment with TAS, in order to improve the efficiency of QCA's certificate configuration process, not every boot needs to access the TAS to generate the certificate, but through the localized storage of the certificate. That is, read the certification path configured in `config.yaml` on QCA side, check if a TAS-issued certificate has been saved locally through the `func hasAKCert(s int) bool` function. If the certificate is successfully read, there is no need to access TAS. If the certificate cannot be read, you need to access TAS and save the certificate returned by TAS locally. + +### API Definition + +#### RAS APIs + +To facilitate the administrator to manage the target server, RAS and the user TA in the TEE deployed on the target server, the following APIs are designed for calling: + +| API | Method | +| --------------------------------- | --------------------------- | +| / | GET | +| /{id} | GET, POST, DELETE | +| /{from}/{to} | GET | +| /{id}/reports | GET | +| /{id}/reports/{reportid} | GET, DELETE | +| /{id}/basevalues | GET | +| /{id}/newbasevalue | POST | +| /{id}/basevalues/{basevalueid} | GET, POST, DELETE | +| /{id}/ta/{tauuid}/status | GET | +| /{id}/ta/{tauuid}/tabasevalues | GET | +| /{id}/ta/{tauuid}/tabasevalues/{tabasevalueid} | GET, POST, DELETE | +| /{id}/ta/{tauuid}/newtabasevalue | POST | +| /{id}/ta/{tauuid}/tareports | GET | +| /{id}/ta/{tauuid}/tareports/{tareportid} | GET, POST, DELETE | +| /{id}/basevalues/{basevalueid} | GET, DELETE | +| /version | GET | +| /config | GET, POST | +| /{id}/container/status | GET | +| /{id}/device/status | GET | + +The usage of the preceding APIs is described as follows: + +To query information about all servers, use `/`. + +```shell +curl -X GET -H "Content-Type: application/json" http://localhost:40002/ +``` + +*** +To query detailed information about a target server, use the GET method of `/{id}`. **{id}** is the unique ID allocated by RAS to the target server. + +```shell +curl -X GET -H "Content-Type: application/json" http://localhost:40002/1 +``` + +*** +To modify information about the target server, use the POST method of `/{id}`. `$AUTHTOKEN` is the identity verification code automatically generated by running the `ras -T` command. + +```go +type clientInfo struct { + Registered *bool `json:"registered"` // Registration status of the target server + IsAutoUpdate *bool `json:"isautoupdate"`// Target server base value update policy +} +``` + +```shell +curl -X POST -H "Authorization: $AUTHTOKEN" -H "Content-Type: application/json" http://localhost:40002/1 -d '{"registered":false, "isautoupdate":false}' +``` + +*** +To delete a target server, use the DELETE method of `/{id}`. + +>**Note:** +>This method does not delete all information about the target server. Instead, it sets the registration status of the target server to `false`. + +```shell +curl -X DELETE -H "Authorization: $AUTHTOKEN" -H "Content-Type: application/json" http://localhost:40002/1 +``` + +*** +To query information about all servers in a specified range, use the GET method of `/{from}/{to}`. + +```shell +curl -X GET -H "Content-Type: application/json" http://localhost:40002/1/9 +``` + +*** +To query all trust reports of the target server, use the GET method of `/{id}/reports`. + +```shell +curl -X GET -H "Content-Type: application/json" http://localhost:40002/1/reports +``` + +*** +To query details about a specified trust report of the target server, use the GET method of `/{id}/reports/{reportid}`. **{reportid}** indicates the unique ID assigned by RAS to the trust report of the target server. + +```shell +curl -X GET -H "Content-Type: application/json" http://localhost:40002/1/reports/1 +``` + +*** +To delete a specified trust report of the target server, use the DELETE method of `/{id}/reports/{reportid}`. + +**Note:** +>This method will delete all information about the specified trusted report, and the report cannot be queried through the API. + +```shell +curl -X DELETE -H "Authorization: $AUTHTOKEN" -H "Content-Type: application/json" http://localhost:40002/1/reports/1 +``` + +*** +To query all base values of the target server, use the GET method of `/{id}/reports/{reportid}`. + +```shell +curl -X GET -H "Content-Type: application/json" http://localhost:40002/1/basevalues +``` + +*** +To add a base value to the target server, use the POST method of `/{id}/newbasevalue`. + +```go +type baseValueJson struct { + BaseType string `json:"basetype"` // Base value type + Uuid string `json:"uuid"` // ID of a container or device + Name string `json:"name"` // Base value name + Enabled bool `json:"enabled"` // Whether the base value is available + Pcr string `json:"pcr"` // PCR value + Bios string `json:"bios"` // BIOS value + Ima string `json:"ima"` // IMA value + IsNewGroup bool `json:"isnewgroup"` // Whether this is a group of new reference values +} +``` + +```shell +curl -X POST -H "Authorization: $AUTHTOKEN" -H "Content-Type: application/json" http://localhost:40002/1/newbasevalue -d '{"name":"test", "basetype":"host", "enabled":true, "pcr":"testpcr", "bios":"testbios", "ima":"testima", "isnewgroup":true}' +``` + +*** +To query details about a specified base value of a target server, use the get method of `/{id}/basevalues/{basevalueid}`. **{basevalueid}** indicates the unique ID allocated by RAS to the specified base value of the target server. + +```shell +curl -X GET -H "Content-Type: application/json" http://localhost:40002/1/basevalues/1 +``` + +*** +To change the availability status of a specified base value of the target server, use the POST method of `/{id}/basevalues/{basevalueid}`. + +```shell +curl -X POST -H "Content-type: application/json" -H "Authorization: $AUTHTOKEN" http://localhost:40002/1/basevalues/1 -d '{"enabled":true}' +``` + +*** +To delete a specified base value of the target server, use the DELETE method of `/{id}/basevalues/{basevalueid}`. + +**Note:** +>This method will delete all the information about the specified base value, and the base value cannot be queried through the API. + +```shell +curl -X DELETE -H "Authorization: $AUTHTOKEN" -H "Content-Type: application/json" http://localhost:40002/1/basevalues/1 +``` + +To query the trusted status of a specific user TA on the target server, use the GET method of the `"/{id}/ta/{tauuid}/status"` interface. Where {id} is the unique identification number assigned by RAS to the target server, and {tauuid} is the identification number of the specific user TA. + +```shell +curl -X GET -H "Content-type: application/json" -H "Authorization: $AUTHTOKEN" http://localhost:40002/1/ta/test/status +``` + +*** +To query all the baseline value information of a specific user TA on the target server, use the GET method of the `"/{id}/ta/{tauuid}/tabasevalues"` interface. + +```shell +curl -X GET -H "Content-type: application/json" http://localhost:40002/1/ta/test/tabasevalues +``` + +*** +To query the details of a specified base value for a specific user TA on the target server, use the GET method of the `"/{id}/ta/{tauuid}/tabasevalues/{tabasevalueid}"` interface. where {tabasevalueid} is the unique identification number assigned by RAS to the specified base value of a specific user TA on the target server. + +```shell +curl -X GET -H "Content-type: application/json" http://localhost:40002/1/ta/test/tabasevalues/1 +``` + +*** +To modify the available status of a specified base value for a specific user TA on the target server, use the `POST` method of the `"/{id}/ta/{tauuid}/tabasevalues/{tabasevalueid}"` interface. + +```shell +curl -X POST -H "Content-type: application/json" -H "Authorization: $AUTHTOKEN" http://localhost:40002/1/ta/test/tabasevalues/1 --data '{"enabled":true}' +``` + +*** +To delete the specified base value of a specific user TA on the target server, use the `DELETE` method of the `"/{id}/ta/{tauuid}/tabasevalues/{tabasevalueid}"` interface. + +**Note:** +>This method will delete all information about the specified base value, and the base value cannot be queried through the API. + +```shell +curl -X DELETE -H "Content-type: application/json" -H "Authorization: $AUTHTOKEN" -k http://localhost:40002/1/ta/test/tabasevalues/1 +``` + +*** +To add a baseline value to a specific user TA on the target server, use the `POST` method of the `"/{id}/ta/{tauuid}/newtabasevalue"` interface. + +```go +type tabaseValueJson struct { + Uuid string `json:"uuid"` // the identification number of the user TA + Name string `json:"name"` // base value name + Enabled bool `json:"enabled"` // whether a baseline value is available + Valueinfo string `json:"valueinfo"` // mirror hash value and memory hash value +} +``` + +```shell +curl -X POST -H "Content-Type: application/json" -H "Authorization: $AUTHTOKEN" -k http://localhost:40002/1/ta/test/newtabasevalue -d '{"uuid":"test", "name":"testname", "enabled":true, "valueinfo":"test info"}' +``` + +*** +To query the target server for all trusted reports for a specific user TA, use the `GET` method of the `"/{id}/ta/{tauuid}/tareports"` interface. + +```shell +curl -X GET -H "Content-type: application/json" http://localhost:40002/1/ta/test/tareports +``` + +*** +To query the details of a specified trusted report for a specific user TA on the target server, use the `GET` method of the `"/{id}/ta/{tauuid}/tareports/{tareportid}"` interface. Where {tareportid} is the unique identification number assigned by RAS to the specified trusted report of a specific user TA on the target server. + +```shell +curl -X GET -H "Content-type: application/json" http://localhost:40002/1/ta/test/tareports/2 +``` + +*** +To delete the specified trusted report of a specific user TA on the target server, use the `DELETE` method of the `"/{id}/ta/{tauuid}/tareports/{tareportid}"` interface. + +**Note:** +>This method will delete all information of the specified trusted report, and the report cannot be queried through the API. + +```shell +curl -X DELETE -H "Content-type: application/json" http://localhost:40002/1/ta/test/tareports/2 +``` + +*** +To obtain the version information of the program, use the GET method of `/version`. + +```shell +curl -X GET -H "Content-Type: application/json" http://localhost:40002/version +``` + +*** +To query the configuration information about the target server, RAS, or database, use the GET method of `/config`. + +```shell +curl -X GET -H "Content-Type: application/json" http://localhost:40002/config +``` + +*** +To modify the configuration information about the target server, RAS, or database, use the POST method of /config. + +```go +type cfgRecord struct { + // Target server configuration + HBDuration string `json:"hbduration" form:"hbduration"` + TrustDuration string `json:"trustduration" form:"trustduration"` + DigestAlgorithm string `json:"digestalgorithm" form:"digestalgorithm"` + // RAS configuration + MgrStrategy string `json:"mgrstrategy" form:"mgrstrategy"` + ExtractRules string `json:"extractrules" form:"extractrules"` + IsAllupdate *bool `json:"isallupdate" form:"isallupdate"` + LogTestMode *bool `json:"logtestmode" form:"logtestmode"` +} +``` + +```shell +curl -X POST -H "Authorization: $AUTHTOKEN" -H "Content-Type: application/json" http://localhost:40002/config -d '{"hbduration":"5s","trustduration":"20s","DigestAlgorithm":"sha256"}' +``` + +#### TAS APIs + +To facilitate the administrator's management of TAS for remote control, the following API is designed for calling: + +| API | Method | +| --------------------| ------------------| +| /config | GET, POST | + +To query the configuration information, use the GET method of the `/config` interface. + +```shell +curl -X GET -H "Content-Type: application/json" http://localhost:40009/config +``` + +*** +To modify the configuration information, use the POST method of the `/config` interface. + +```shell +curl -X POST -H "Content-Type: application/json" -H "Authorization: $AUTHTOKEN" http://localhost:40009/config -d '{"basevalue":"testvalue"}' +``` + +**Note:** +>Currently, only the base value in the configuration information of TAS is supported for querying and modifying. + +### FAQs + +1. Why cannot RAS be started after it is installed? + + > In the current RAS design logic, after the program is started, it needs to search for the `ecdsakey.pub` file in the current directory and read the file as the identity verification code for accessing the program. If the file does not exist in the current directory, an error is reported during RAS boot. + >> Solution 1: Run the `ras -T` command to generate a test token. The `ecdsakey.pub` file is generated. + >> Solution 2: After deploying the oauth2 authentication service, save the verification public key of the JWT token generator as `ecdsakey.pub`. + +2. Why cannot RAS be accessed through REST APIs after it is started? + + > RAS is started in HTTPS mode by default. Therefore, you need to provide a valid certificate for RAS to access it. However, RAS started in HTTP mode does not require a certificate. + +3. Why does the issue of 'WARNING: failed to verify x509 cert' appear after RAS/ATTESTER is started? + + > Because the CA certificate is missing. + >> Solution: Copy the Huawei IT Product certificate named `Huawei IT Product CA.pem` under `$(DESTDIR)/usr/bin` directory to the running directory of RAS/ATTESTER. + +## Trusted Platform Control Module + +### Background + +Trusted computing has undergone continuous development and improvement in the past 40 years and has become an important branch of information security. Trusted computing technologies have developed rapidly in recent years and have solved the challenges in Trusted Computing 2.0—integration of trusted systems and existing systems, trusted management, and simplification of trusted application development. These technical breakthroughs form Trusted Computing 3.0, that is, trusted computing based on an active immune system. Compared with the passive plug-in architecture of the previous generation, Trusted Computing 3.0 proposes a new trusted system framework based on self-controlled cryptography algorithms, control chips, trusted software, trusted connections, policy management, and secure and trusted protection applications, implementing trust across the networks. + +The trusted platform control module (TPCM) is a base and core module that can be integrated into a trusted computing platform to establish and ensure a trust source. As one of the innovations in Trusted Computing 3.0 and the core of active immunity, TPCM implements active control over the entire platform. + +The TPCM-based Trusted Computing 3.0 architecture consists of the protection module and the computing module. On the one hand, based on the Trusted Cryptography Module (TPM), the TPCM main control firmware measures the reliability of the protection and computing modules, as well as their firmware. On the other hand, the Trusted Software Base (TSB) measures the reliability of system software and application software. In addition, the TPCM management platform verifies the reliability measurement and synchronizes and manages the trust policies. + +### Feature Description + +The overall system design consists of the protection module, computing module, and trusted management center software, as shown in the following figure. + +![](./figures/TPCM.png) + +- Trusted management center: This centralized management platform, provided by a third-party vendor, formulates, delivers, maintains, and stores protection policies and reference values for trusted computing nodes. +- Protection module: This module operates independently of the computing module and provides trusted computing protection functions that feature active measurement and active control to implement security protection during computing. The protection module consists of the TPCM main control firmware, TCB, and TCM. As a key module for implementing trust protection in a trusted computing node, the TPCM can be implemented in multiple forms, such as cards, chips, and IP cores. It contains a CPU and memory, firmware, and software such as an OS and trusted function components. The TPCM operates alongside the computing module and works according to the built-in protection policy to monitor the trust of protected resources, such as hardware, firmware, and software of the computing module. The TPCM is the Root of Trust in a trusted computing node. + +- Computing module: This module includes hardware, an OS, and application layer software. The running of the OS can be divided into the boot phase and the running phase. In the boot phase, GRUB2 and shim of openEuler support the reliability measurement capability, which protects boot files such as shim, GRUB2, kernel, and initramfs. In the running phase, openEuler supports the deployment of the trusted verification agent (provided by third-party vendor HTTC). The agent sends data to the TPCM for trusted measurement and protection in the running phase. + +The TPCM interacts with other components as follows: + +1. The TPCM hardware, firmware, and software provide an operating environment for the TSB. The trusted function components of the TPCM provide support for the TSB to implement measurement, control, support, and decision-making based on the policy library interpretation requirements. +2. The TPCM accesses the TCM for trusted cryptography functions to complete computing tasks such as trusted verification, measurement, and confidential storage, and provides services for TCM access. +3. The TPCM connects to the trusted management center through the management interface to implement protection policy management and trusted report processing. +4. The TPCM uses the built-in controller and I/O port to interact with the controller of the computing module through the bus to actively monitor the computing module. +5. The built-in protection agent in the OS of the computing module obtains the code and data related to the preset protection object and provides them to the TPCM. The TPCM forwards the monitoring information to the TSB, and the TSB analyzes and processes the information according to the policy library. + +### Constraints + +Supported server: TaiShan 200 Server (Model 2280) VF +Supported BMC card: BC83SMMC + +### Application Scenarios + +The TPCM enables a complete trust chain to ensure that the OS boots into a trusted computing environment. diff --git a/docs/en/tools/_toc.yaml b/docs/en/tools/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4413148795b564652b9247559c82d081ed3b4867 --- /dev/null +++ b/docs/en/tools/_toc.yaml @@ -0,0 +1,6 @@ +label: Tools +sections: + - href: ./community_tools/_toc.yaml + - href: ./devops/_toc.yaml + - href: ./desktop/_toc.yaml + diff --git a/docs/en/tools/community_tools/_toc.yaml b/docs/en/tools/community_tools/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2e23dfbeefb45afc043eea6ceb09e40f56470db9 --- /dev/null +++ b/docs/en/tools/community_tools/_toc.yaml @@ -0,0 +1,24 @@ +label: Community Tools +sections: + - label: Image Creation + sections: + - href: ./isocut/_toc.yaml + - href: ./image_tailor/_toc.yaml + - label: Compilation + sections: + - href: ./../../server/development/gcc/_toc.yaml + - label: Performance Optimization + sections: + - href: ./../../server/performance/system_optimization/atune/_toc.yaml + - label: oepkgs User Guide + sections: + - href: ./oepkgs/_toc.yaml + - label: oemaker User Guide + sections: + - href: ./oemaker_user_guide/_toc.yaml + - label: UADK Quick Start + sections: + - href: ./uadk/_toc.yaml + - label: PIN User Guide + sections: + - href: ./pin/_toc.yaml \ No newline at end of file diff --git a/docs/en/tools/community_tools/image_tailor/_toc.yaml b/docs/en/tools/community_tools/image_tailor/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..28992d35e1f4dc90fe53ffb3ec6f6820d459d578 --- /dev/null +++ b/docs/en/tools/community_tools/image_tailor/_toc.yaml @@ -0,0 +1,6 @@ +label: imageTailor User Guide +isManual: true +description: OS image tailoring by removing unneeded packages or files +sections: + - label: imageTailor User Guide + href: ./imagetailor_user_guide.md diff --git a/docs/en/tools/community_tools/image_tailor/figures/flowchart.png b/docs/en/tools/community_tools/image_tailor/figures/flowchart.png new file mode 100644 index 0000000000000000000000000000000000000000..d3a71e8bfdb886222151cea3b2a3c0e8d8eae64a Binary files /dev/null and b/docs/en/tools/community_tools/image_tailor/figures/flowchart.png differ diff --git a/docs/en/tools/community_tools/image_tailor/figures/lack_pack.png b/docs/en/tools/community_tools/image_tailor/figures/lack_pack.png new file mode 100644 index 0000000000000000000000000000000000000000..a4b7f1da15da70f63a86aae360e89017c2b98f2d Binary files /dev/null and b/docs/en/tools/community_tools/image_tailor/figures/lack_pack.png differ diff --git a/docs/en/tools/community_tools/image_tailor/imagetailor_user_guide.md b/docs/en/tools/community_tools/image_tailor/imagetailor_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..9481fd446eb0792b5a99e42955f8802c8ebee169 --- /dev/null +++ b/docs/en/tools/community_tools/image_tailor/imagetailor_user_guide.md @@ -0,0 +1,1032 @@ +# ImageTailor User Guide + +## Introduction + +In addition to the kernel, an operating system contains various peripheral packages. These peripheral packages provide functions of a general-purpose operating system but also cause the following problems: + +- A large number of resources (such as memory, disks, and CPUs) are occupied, resulting in low system performance. +- Unnecessary functions increase the development and maintenance costs. + +To address these problems, openEuler provides the imageTailor tool for tailoring and customization images. You can tailor unnecessary peripheral packages in the OS image or add service packages or files as required. This tool includes the following functions: + +- System package tailoring: Tailors system commands, libraries, and drivers based on the list of RPM packages to be installed. +- System configuration modification: Configures the host name, startup services, time zone, network, partitions, drivers to be loaded, and kernel version. +- Software package addition: Adds custom RPM packages or files to the system. + +## Installation + +This section uses openEuler 22.03 LTS in the AArch64 architecture as an example to describe the installation method. + +### Software and Hardware Requirements + +The software and hardware requirements of imageTailor are as follows: + +- The architecture is x86_64 or AArch64. + +- The OS is openEuler 22.03 LTS (the kernel version is 5.10 and the Python version is 3.9, which meet the tool requirements). + +- The root directory **/** of the host to run the tool have at least 40 GB space. + +- The Python version is 3.9 or later. + +- The kernel version is 5.10 or later. + +- The SElinux service is disabled. + + ```shell + $ sudo setenforce 0 + $ getenforce + Permissive + ``` + +### Obtaining the Installation Package + +Download the openEuler release package to install and use imageTailor. + +1. Obtain the ISO image file and the corresponding verification file. + + The image must be an everything image. Assume that the image is to be stored in the **root** directory. Run the following commands: + + ```shell + sudo wget https://repo.openeuler.org/openEuler-22.03-LTS-SP4/ISO/aarch64/openEuler-22.03-LTS-SP4-everything-aarch64-dvd.iso -O /root/temp/openEuler-22.03-LTS-SP4-everything-aarch64-dvd.iso + sudo wget https://repo.openeuler.org/openEuler-22.03-LTS-SP4/ISO/aarch64/openEuler-22.03-LTS-SP4-everything-aarch64-dvd.iso.sha256sum -O /root/temp/openEuler-22.03-LTS-SP4-everything-aarch64-dvd.iso.sha256sum + ``` + +2. Obtain the verification value in the sha256sum verification file. + + ```shell + sudo cat /root/temp/openEuler-22.03-LTS-SP4-everything-aarch64-dvd.iso.sha256sum + ``` + +3. Calculate the verification value of the ISO image file. + + ```shell + sudo sha256sum /root/temp/openEuler-22.03-LTS-SP4-everything-aarch64-dvd.iso + ``` + +4. Compare the verification value in the sha256sum file with that of the ISO image. If they are the same, the file integrity is verified. Otherwise, the file integrity is damaged. You need to obtain the file again. + +### Installing imageTailor + +The following uses openEuler 22.03 LTS in AArch64 architecture as an example to describe how to install imageTailor. + +1. Ensure that openEuler 22.03 LTS (or a running environment that meets the requirements of imageTailor) has been installed on the host. + + ```shell + $ cat /etc/openEuler-release + openEuler release 22.03 LTS + ``` + +2. Create a **/etc/yum.repos.d/local.repo** file to configure the Yum repository. The following is an example of the configuration file. **baseurl** indicates the directory for mounting the ISO image. + + ```text + [local] + name=local + baseurl=file:///root/imageTailor_mount + gpgcheck=0 + enabled=1 + ``` + +3. Run the following commands as the **root** user to mount the image to the **/root/imageTailor_mount** directory as the Yum repository (ensure that the value of **baseurl** is the same as that configured in the repo file and the disk space of the directory is greater than 20 GB): + + ```shell + sudo mkdir /root/imageTailor_mount + sudo mount -o loop /root/temp/openEuler-22.03-LTS-everything-aarch64-dvd.iso /root/imageTailor_mount/ + ``` + +4. Make the Yum repository take effect. + + ```shell + yum clean all + sudo yum makecache + ``` + +5. Install the imageTailor tool as the **root** user. + + ```shell + sudo yum install -y imageTailor + ``` + +6. Run the following command as the **root** user to verify that the tool has been installed successfully: + + ```shell + $ cd /opt/imageTailor/ + $ sudo ./mkdliso -h + ------------------------------------------------------------------------------------------------------------- + Usage: mkdliso -p product_name -c configpath [--minios yes|no|force] [-h] [--sec] + Options: + -p,--product Specify the product to make, check custom/cfg_yourProduct. + -c,--cfg-path Specify the configuration file path, the form should be consistent with custom/cfg_xxx + --minios Make minios: yes|no|force + --sec Perform security hardening + -h,--help Display help information + + Example: + command: + ./mkdliso -p openEuler -c custom/cfg_openEuler --sec + ./mkdliso -p docker -c custom/cfg_docker + ./mkdliso -p EMB_rootfs -c custom/cfg_EMB_rootfs + ./mkdliso -p qcow2 -c custom/cfg_qcow2 + help: + ./mkdliso -h + ------------------------------------------------------------------------------------------------------------- + ``` + +### Directory Description + +After imageTailor is installed, the directory structure of the tool package is as follows + +- openEuler environment + + ```text + [imageTailor] + |-[custom] + |-[cfg_openEuler] + |-[usr_file] // Stores files to be added + |-[usr_install] //Stores hook scripts to be added + |-[all] + |-[conf] + |-[hook] + |-[cmd.conf] // Configures the default commands and libraries used by an ISO image + |-[rpm.conf] // Configures the list of RPM packages and drivers installed by default for an ISO image + |-[security_s.conf] // Configures security hardening policies + |-[sys.conf] // Configures ISO image system parameters + |-[kiwi] // Basic configurations of imageTailor + |-[repos] //RPM sources for obtaining the RPM packages required for creating an ISO image + |-[security-tool] // Security hardening tool + |-mkdliso // Executable script for creating an ISO image + ``` + +- Docker environment + + ```text + [imageTailor] + |-[custom] + |-[cfg_docker] + |-[config.xml] // Configures the list of RPM packages and repositories installed by default for an ISO image + |-[env.pm] + |-[group] + |-[images.sh] // Tailoring script + |-[passwd] + |-[kiwi] // Basic configurations of imageTailor + |-[repos] // RPM sources for obtaining the RPM packages required for creating an ISO image + |-[security-tool] // Security hardening tool + |-mkdliso // Executable script for creating an ISO image + ``` + +- EMB_rootfs environment + +```text +[imageTailor] + |-[custom] + |-[cfg_EMB_rootfs] + |-[usr_install] // User hook scripts + |-[conf] + |-[isopackage.sdf] + |-[menu.lst] + |-[modules] + |-[cmd.conf] // Configures the default commands and libraries used by an ISO image + |-[rpm.conf] // Configures the list of RPM packages and drivers installed by default for an ISO image + |-[security_s.conf] // Configures security hardening policies + |-[sys.conf] // Configures ISO image system parameters + |-[kiwi] // Basic configurations of imageTailor + |-[repos] // RPM sources for obtaining the RPM packages required for creating an ISO image + |-[security-tool] // Security hardening tool + |-mkdliso // Executable script for creating an ISO image +``` + +- QCOW2 environment + +```text +[imageTailor] + |-[custom] + |-[cfg_qcow2] + |-[bin] // Command scripts + |-[create-image] // Image creation entry + |-[source_files] // Script invocation entry + |-[config] // Configurations + |-[grub.cfg] // Grub configurations + |-[repo] // Repositories + |-[root_pwd] // Root password + |-[rpmlist] // Software package list + |-[hooks] // hook scripts + |-[lib] // Common scripts + |-[misc] // Public scripts + |-[template] + |-[kiwi] // Basic configurations of imageTailor + |-[repos] // RPM sources for obtaining the RPM packages required for creating an ISO image + |-[security-tool] // Security hardening tool + |-mkdliso // Executable script for creating an ISO image +``` + +## Image Customization + +This section describes how to use the imageTailor tool to package the service RPM packages, custom files, drivers, commands, and libraries to the target ISO image. + +### Overall Process + +The following figure shows the process of using imageTailor to customize an image. + +![](./figures/flowchart.png) + +The steps are described as follows: + +- Check software and hardware environment: Ensure that the host for creating the ISO image meets the software and hardware requirements. + +- Customize service packages: Add RPM packages (including service RPM packages, commands, drivers, and library files) and files (including custom files, commands, drivers, and library files). + + - Adding service RPM packages: Add RPM packages to the ISO image as required. For details, see [Installation](#installation). + - Adding custom files: If you want to perform custom operations such as hardware check, system configuration check, and driver installation when the target ISO system is installed or started, you can compile custom files and package them to the ISO image. + - Adding drivers, commands, and library files: If the RPM package source of openEuler does not contain the required drivers, commands, or library files, you can use imageTailor to package the corresponding drivers, commands, or library files into the ISO image. + +- Configure system parameters: + + - Configuring host parameters: To ensure that the ISO image is successfully installed and started, you need to configure host parameters. + - Configuring partitions: You can configure service partitions based on the service plan and adjust system partitions. + - Configuring the network: You can set system network parameters as required, such as the NIC name, IP address, and subnet mask. + - Configuring the initial password: To ensure that the ISO image is successfully installed and started, you need to configure the initial passwords of the **root** user and GRUB. + - Configuring kernel parameters: You can configure the command line parameters of the kernel as required. + +- Configure security hardening policies. + + ImageTailor provides default security hardening policies. You can modify **security_s.conf** (in the ISO image customization phase) to perform secondary security hardening on the system based on service requirements. For details, see the [Security Hardening Guide](https://docs.openeuler.org/en/docs/22.03_LTS/docs/SecHarden/secHarden.html). + +- Create an ISO image: + + Use the imageTailor tool to create an ISO image. + +### Customizing Service Packages + +You can pack service RPM packages, custom files, drivers, commands, and library files into the target ISO image as required. + +#### Setting a Local Repo Source + +To customize an ISO image, you must set a repo source in the **/opt/imageTailor/repos/euler_base/** directory. This section describes how to set a local repo source. + +1. Download the ISO file released by openEuler. (The RPM package of the everything image released by the openEuler must be used.) + + ```shell + cd /opt + wget https://repo.openeuler.org/openEuler-22.03-LTS/ISO/aarch64/openEuler-22.03-LTS-everything-aarch64-dvd.iso + ``` + +2. Create a mount directory **/opt/openEuler_repo** and mount the ISO file to the directory. + + ```shell + $ sudo mkdir -p /opt/openEuler_repo + $ sudo mount openEuler-22.03-LTS-everything-aarch64-dvd.iso /opt/openEuler_repo + mount: /opt/openEuler_repo: WARNING: source write-protected, mounted read-only. + ``` + +3. Copy the RPM packages in the ISO file to the **/opt/imageTailor/repos/euler_base/** directory. + + ```shell + $ sudo rm -rf /opt/imageTailor/repos/euler_base && sudo mkdir -p /opt/imageTailor/repos/euler_base + $ sudo cp -ar /opt/openEuler_repo/Packages/* /opt/imageTailor/repos/euler_base + $ sudo chmod -R 644 /opt/imageTailor/repos/euler_base + $ sudo ls /opt/imageTailor/repos/euler_base|wc -l + 2577 + $ sudo umount /opt/openEuler_repo && sudo rm -rf /opt/openEuler_repo + $ cd /opt/imageTailor + ``` + +#### Adding Files + +You can add files to an ISO image as required. The file types include custom files, drivers, commands, or library file. Store the files to the **/opt/imageTailor/custom/cfg_openEuler/usr_file** directory. + +##### Precautions + +- The commands to be packed must be executable. Otherwise, imageTailor will fail to pack the commands into the ISO. + +- The file stored in the **/opt/imageTailor/custom/cfg_openEuler/usr_file** directory will be generated in the root directory of the ISO. Therefore, the directory structure of the file must be a complete path starting from the root directory so that imageTailor can place the file in the correct directory. + + For example, if you want **file1** to be in the **/opt** directory of the ISO, create an **opt** directory in the **usr_file** directory and copy **file1** to the **opt** directory. For example: + + ```shell + $ pwd + /opt/imageTailor/custom/cfg_openEuler/usr_file + + $ tree + . + ├── etc + │   ├── default + │   │   └── grub + │   └── profile.d + │   └── csh.precmd + └── opt + └── file1 + + 4 directories, 3 files + ``` + +- The paths in **/opt/imageTailor/custom/cfg_openEuler/usr_file** must be real paths. For example, the paths do not contain soft links. You can run the `realpath` or `readlink -f` command to query the real path. + +- If you need to invoke a custom script in the system startup or installation phase, that is, a hook script, store the file in the **hook** directory. + +#### Adding RPM Packages + +##### Procedure + +To add RPM packages (drivers, commands, or library files) to an ISO image, perform the following steps: + +>[!NOTE] **NOTE:** +> +>- The **rpm.conf** and **cmd.conf** files are stored in the **/opt/imageTailor/custom/cfg_openEuler/** directory. +>- The RPM package tailoring granularity below indicates **sys_cut='no'**. For details about the cutout granularity, see [Configuring Host Parameters](#configuring-host-parameters). +>- If no local repo source is configured, configure a local repo source by referring to [Setting a Local Repo Source](#setting-a-local-repo-source). +> + +1. Check whether the **/opt/imageTailor/repos/euler_base/** directory contains the RPM package to be added. + + - If yes, go to step 2. + - If no, go to step 3. + +2. Configure the RPM package information in the **\** section in the **rpm.conf** file. + + - For the RPM package tailoring granularity, no further action is required. + - For other tailoring granularities, go to step 4. + +3. Obtain the RPM package and store it in the **/opt/imageTailor/custom/cfg_openEuler/usr_rpm** directory. If the RPM package depends on other RPM packages, store the dependency packages to this directory because the added RPM package and its dependent RPM packages must be packed into the ISO image at the same time. + + - For the RPM package tailoring granularity, go to step 4. + - For other tailoring granularities, no further action is required. + +4. Configure the drivers, commands, and library files to be retained in the RPM package in the **rpm.conf** and **cmd.conf** files. If there are common files to be tailored, configure them in the **\\** section in the **cmd.conf** file. + +##### Configuration File Description + +| Operation | Configuration File| Section | +| :----------- | :----------- | :----------------------------------------------------------- | +| Adding drivers | rpm.conf | \
    \
    \

    Note: The **driver_name** is the relative path of **/lib/modules/{kernel_version_number}/kernel/**.| +| Adding commands | cmd.conf | \
    \
    \
    | +| Adding library files | cmd.conf | \
    \
    \
    | +| Deleting other files| cmd.conf | \
    \
    \

    Note: The file name must be an absolute path.| + +**Example** + +- Adding drivers + + ```xml + + + + + ...... + + ``` + +- Adding commands + + ```xml + + + + + ...... + + ``` + +- Adding library files + + ```xml + + + + + + ``` + +- Deleting other files + + ```xml + + + + + + ``` + +#### Adding Hook Scripts + +A hook script is invoked by the OS during startup and installation to execute the actions defined in the script. The directory for storing hook scripts of imageTailor is **custom/cfg_openEuler/usr_install/hook directory**, which has different subdirectories. Each subdirectory represents an OS startup or installation phase. Store the scripts based on the phases in which the scripts are invoked. This operation is not available in the Docker environment. + +##### Script Naming Rule + +The script name must start with **S+number** (the number must be at least two digits). The number indicates the execution sequence of the hook script. Example: **S01xxx.sh** + +>[!NOTE] **NOTE:** +> +>The scripts in the **hook** directory are executed using the `source` command. Therefore, exercise caution when using the `exit` command in the scripts because the entire installation script exits after the `exit` command is executed. + +##### Description of hook Subdirectories + +| Subdirectory | Script Example | Time for Execution | Description | +| :-------------------- | :---------------------| :------------------------------- | :----------------------------------------------------------- | +| insmod_drv_hook | N/A | After OS drivers are loaded | N/A | +| custom_install_hook | S01custom_install.sh | After the drivers are loaded, that is, after **insmod_drv_hook** is executed| You can customize the OS installation process by using a custom script.| +| env_check_hook | S01check_hw.sh | Before the OS installation initialization | The script is used to check hardware specifications and types before initialization.| +| set_install_ip_hook | S01set_install_ip.sh | When network configuration is being performed during OS installation initialization. | You can customize the network configuration by using a custom script.| +| before_partition_hook | S01checkpart.sh | Before partitioning | You can check correctness of the partition configuration file by using a custom script.| +| before_setup_os_hook | N/A | Before the repo file is decompressed | You can customize partition mounting.
    If the decompression path of the installation package is not the root partition specified in the partition configuration, customize partition mounting and assign the decompression path to the input global variable.| +| before_mkinitrd_hook | S01install_drv.sh | Before the `mkinitrd` command is run | The hook script executed before running the `mkinitrd` command when **initrd** is saved to the disk. You can add and update driver files in **initrd**.| +| after_setup_os_hook | N/A | After OS installation | After the installation is complete, you can perform custom operations on the system files, such as modifying **grub.cfg**.| +| install_succ_hook | N/A | When the OS is successfully installed | The scripts in this subdirectory are used to parse the installation information and send information of whether the installation succeeds.**install_succ_hook** cannot be set to **install_break**.| +| install_fail_hook | N/A | When the OS installation fails | The scripts in this subdirectory are used to parse the installation information and send information of whether the installation succeeds.**install_fail_hook** cannot be set to **install_break**.| + +### Configuring System Parameters + +Before creating an ISO image, you need to configure system parameters, including host parameters, initial passwords, partitions, network, compilation parameters, and system command line parameters. + +#### Configuring Host Parameters + +The **\ \** section in the **/opt/imageTailor/custom/cfg_openEuler/sys.conf** file is used to configure common system parameters, such as the host name and kernel boot parameters. This operation is not available in the Docker environment. + +The default configuration provided by openEuler is as follows. You can modify the configuration as required. + +```text + + sys_service_enable='ipcc' + sys_service_disable='cloud-config cloud-final cloud-init-local cloud-init' + sys_utc='yes' + sys_timezone='' + sys_cut='no' + sys_usrrpm_cut='no' + sys_hostname='Euler' + sys_usermodules_autoload='' + sys_gconv='GBK' + +``` + +The parameters are described as follows: + +- sys_service_enable + + This parameter is optional. Services enabled by the OS by default. Separate multiple services with spaces. If you do not need to add a system service, use the default value **ipcc**. Pay attention to the following during the configuration: + + - Default system services cannot be deleted. + - You can configure service-related services, but the repo source must contain the service RPM package. + - By default, only the services configured in this parameter are enabled. If a service depends on other services, you need to configure the depended services in this parameter. + +- sys_service_disable + + This parameter is optional. Services that are not allowed to automatically start upon system startup. Separate multiple services with spaces. If no system service needs to be disabled, leave this parameter blank. + +- sys_utc + + (Mandatory) Indicates whether to use coordinated universal time (UTC) time. The value can be **yes** or **no**. The default value is **yes**. + +- sys_timezone + + This parameter is optional. Sets the time zone. The value can be a time zone supported by openEuler, which can be queried in the **/usr/share/zoneinfo/zone.tab** file. + +- sys_cut + + (Mandatory) Indicates whether to tailor the RPM packages. The value can be **yes**, **no**, or **debug**.**yes** indicates that the RPM packages are tailored. **no** indicates that the RPM packages are not tailored (only the RPM packages in the **rpm.conf** file is installed). **debug** indicates that the RPM packages are tailored but the `rpm` command is retained for customization after installation. The default value is **no**. + + >[!NOTE] NOTE: + > + > - imageTailor installs the RPM package added by the user, deletes the files configured in the **\** section of the **cmd.conf** file, and then deletes the commands, libraries, and drivers that are not configured in **cmd.conf** or **rpm.conf**. + > - When **sys_cut='yes'** is configured, imageTailor does not support the installation of the `rpm` command. Even if the `rpm` command is configured in the **rpm.conf** file, the configuration does not take effect. + +- sys_usrrpm_cut + + (Mandatory) Indicates whether to tailor the RPM packages added by users to the **/opt/imageTailor/custom/cfg_openEuler/usr_rpm** directory. The value can be **yes** or **no**. The default value is **no**. + + - **sys_usrrpm_cut='yes'**: imageTailor installs the RPM packages added by the user, deletes the file configured in the **\** section in the **cmd.conf** file, and then deletes the commands, libraries, and drivers that are not configured in **cmd.conf** or **rpm.conf**. + + - **sys_usrrpm_cut='no'**: imageTailor installs the RPM packages added by the user but does not delete the files in the RPM packages. + +- sys_hostname + + (Mandatory) Host name. After the OS is deployed in batches, you are advised to change the host name of each node to ensure that the host name of each node is unique. + + The host name must be a combination of letters, digits, and hyphens (-) and must start with a letter or digit. Letters are case sensitive. The value contains a maximum of 63 characters. The default value is **Euler**. + +- sys_usermodules_autoload + + (Optional) Driver loaded during system startup. When configuring this parameter, you do not need to enter the file extension **.ko**. If there are multiple drivers, separate them by space. By default, this parameter is left blank, indicating that no additional driver is loaded. + +- sys_gconv + + (Optional) This parameter is used to tailor **/usr/lib/gconv** and **/usr/lib64/gconv**. The options are as follows: + + - **null**/**NULL**: indicates that this parameter is not configured. If **sys_cut='yes'** is configured, **/usr/lib/gconv** and **/usr/lib64/gconv** will be deleted. + - **all**/**ALL**: keeps **/usr/lib/gconv** and **/usr/lib64/gconv**. + - **xxx,xxx**: keeps the corresponding files in the **/usr/lib/gconv** and **/usr/lib64/gconv** directories. If multiple files need to be kept, use commas (,) to separate them. + +- sys_man_cut + + (Optional) Indicates whether to tailor the man pages. The value can be **yes** or **no**. The default value is **yes**. + +>[!NOTE] NOTE: +> +> If both **sys_cut** and **sys_usrrpm_cut** are configured, **sys_cut** is used. The following rules apply: +> +> - sys_cut='no' +> +> No matter whether **sys_usrrpm_cut** is set to **yes** or **no**, the system RPM package tailoring granularity is used. That is, imageTailor installs the RPM packages in the repo source and the RPM packages in the **usr_rpm** directory, however, the files in the RPM package are not deleted. Even if some files in the RPM packages are not required, imageTailor will delete them. +> +> - sys_cut='yes' +> +> - sys_usrrpm_cut='no' +> +> System RPM package tailoring granularity: imageTailor deletes files in the RPM packages in the repo sources as configured. +> +> - sys_usrrpm_cut='yes' +> +> System and user RPM package tailoring granularity: imageTailor deletes files in the RPM packages in the repo sources and the **usr_rpm** directory as configured. +> + +#### Configuring Initial Passwords + +The **root** and GRUB passwords must be configured during OS installation. Otherwise, you cannot log in to the OS as the **root** user after the OS is installed using the tailored ISO image. This section describes how to configure the initial passwords. This operation is not available in the Docker environment. + +> [!NOTE] NOTE: +> +> You must configure the initial **root** and GRUB passwords manually. + +##### Configuring the Initial Password of the root User + +###### Introduction + +The initial password of the **root** user is stored in the **/opt/imageTailor/custom/cfg_openEuler/rpm.conf** file. You can modify this file to set the initial password of the **root** user. + +>[!NOTE] **NOTE:** +> +>- If the `--minios yes/force` parameter is required when you run the `mkdliso` command to create an ISO image, you need to enter the corresponding information in the **/opt/imageTailor/kiwi/minios/cfg_minios/rpm.conf** file. + +The default configuration of the initial password of the **root** user in the **/opt/imageTailor/custom/cfg_openEuler/rpm.conf** file is as follows. Add a password of your choice. + +```xml + + + +``` + +The parameters are described as follows: + +- **group**: group to which the user belongs. +- **pwd**: ciphertext of the initial password. The encryption algorithm is SHA-512. Replace **${pwd}** with the actual ciphertext. +- **home**: home directory of the user. +- **name**: name of the user to be configured. + +###### Modification Method + +Before creating an ISO image, you need to change the initial password of the **root** user. The following describes how to set the initial password of the **root** user (**root** permissions are required): + +1. Add a user for generating a password, for example, **testUser**. + + ```shell + sudo useradd testUser + ``` + +2. Set the password of **testUser**. Run the following command and set the password as prompted: + + ```shell + $ sudo passwd testUser + Changing password for user testUser. + New password: + Retype new password: + passwd: all authentication tokens updated successfully. + ``` + +3. View the **/etc/shadow** file. The content following **testUser** (string between two colons) is the ciphertext of the password. + + ```shell + $ sudo cat /etc/shadow | grep testUser + testUser:$6$YkX5uFDGVO1VWbab$jvbwkZ2Kt0MzZXmPWy.7bJsgmkN0U2gEqhm9KqT1jwQBlwBGsF3Z59heEXyh8QKm3Qhc5C3jqg2N1ktv25xdP0:19052:0:90:7:35:: + ``` + +4. Copy and paste the ciphertext to the **pwd** field in the **/opt/imageTailor/custom/cfg_openEuler/rpm.conf** file. + + ```xml + + + + ``` + +5. If the `--minios yes/force` parameter is required when you run the `mkdliso` command to create an ISO image, configure the **pwd** field of the corresponding user in **/opt/imageTailor/kiwi/minios/cfg_minios/rpm.conf**. + + ```xml + + + + ``` + +##### Configuring the Initial GRUB Password + +The initial GRUB password is stored in the **/opt/imageTailor/custom/cfg_openEuler/usr_file/etc/default/grub** file. Modify this file to configure the initial GRUB password. If the initial GRUB password is not configured, the ISO image will fail to be created. + +> [!NOTE] NOTE: +> +> - The **root** permissions are required for configuring the initial GRUB password. +> - The default user corresponding to the GRUB password is **root**. +> +> - The `grub2-set-password` command must exist in the system. If the command does not exist, install it in advance. + +1. Run the following command and set the GRUB password as prompted: + + ```shell + $ sudo grub2-set-password -o ./ + Enter password: + Confirm password: + grep: .//grub.cfg: No such file or directory + WARNING: The current configuration lacks password support! + Update your configuration with grub2-mkconfig to support this feature. + ``` + +2. After the command is executed, the **user.cfg** file is generated in the current directory. The content starting with **grub.pbkdf2.sha512** is the encrypted GRUB password. + + ```shell + $ sudo cat user.cfg + GRUB2_PASSWORD=grub.pbkdf2.sha512.10000.CE285BE1DED0012F8B2FB3DEA38782A5B1040FEC1E49D5F602285FD6A972D60177C365F1 + B5D4CB9D648AD4C70CF9AA2CF9F4D7F793D4CE008D9A2A696A3AF96A.0AF86AB3954777F40D324816E45DD8F66CA1DE836DC7FBED053DB02 + 4456EE657350A27FF1E74429546AD9B87BE8D3A13C2E686DD7C71D4D4E85294B6B06E0615 + ``` + +3. Copy the preceding ciphertext and add the following configuration to the **/opt/imageTailor/custom/cfg_openEuler/usr_file/etc/default/grub** file: + + ```text + GRUB_PASSWORD="grub.pbkdf2.sha512.10000.CE285BE1DED0012F8B2FB3DEA38782A5B1040FEC1E49D5F602285FD6A972D60177C365F1 + B5D4CB9D648AD4C70CF9AA2CF9F4D7F793D4CE008D9A2A696A3AF96A.0AF86AB3954777F40D324816E45DD8F66CA1DE836DC7FBED053DB02 + 4456EE657350A27FF1E74429546AD9B87BE8D3A13C2E686DD7C71D4D4E85294B6B06E0615" + ``` + +#### Configuring Partitions + +If you want to adjust system partitions or service partitions, modify the **\** section in the **/opt/imageTailor/custom/cfg_openEuler/sys.conf** file. This operation is not available in the Docker environment. + +>[!NOTE] **NOTE:** +> +>- System partition: partition for storing the OS. +>- Service partition: partition for service data. +>- The type of a partition is determined by the content it stores, not the size, mount path, or file system. +>- Partition configuration is optional. You can manually configure partitions after OS installation. + + The format of **\** is as follows: + +disk_ID mount_path partition_size partition_type file_system \[Secondary formatting flag] + +The default configuration is as follows: + +```text + +hd0 /boot 512M primary ext4 yes +hd0 /boot/efi 200M primary vfat yes +hd0 / 30G primary ext4 +hd0 - - extended - +hd0 /var 1536M logical ext4 +hd0 /home max logical ext4 + +``` + +The parameters are described as follows: + +- disk_ID: + ID of a disk. Set this parameter in the format of **hd***x*, where *x* indicates the *x*th disk. + + >[!NOTE] **NOTE:** + > + >Partition configuration takes effect only when the disk can be recognized. + +- mount_path: + Mount path to a specified partition. You can configure service partitions and adjust the default system partition. If you do not mount partitions, set this parameter to **-**. + + >[!NOTE] **NOTE:** + > + >- You must configure the mount path to **/**. You can adjust mount paths to other partitions according to your needs. + >- When the UEFI boot mode is used, the partition configuration in the x86_64 architecture must contain the mount path **/boot**, and the partition configuration in the AArch64 architecture must contain the mount path **/boot/efi**. + +- partition_size: + The value types are as follows: + + - G/g: The unit of a partition size is GB, for example, 2G. + - M/m: The unit of a partition size is MB, for example, 300M. + - T/t: The unit of a partition size is TB, for example, 1T. + - MAX/max: The rest space of a hard disk is used to create a partition. This value can only be assigned to the last partition. + + >[!NOTE] **NOTE:** +> + >- A partition size value cannot contain decimal numbers. If there are decimal numbers, change the unit of the value to make the value an integer. For example, 1.5 GB should be changed to 1536 MB. + >- When the partition size is set to **MAX**/**max**, the size of the remaining partition cannot exceed the limit of the supported file system type (the default file system type is **ext4**, and the maximum size is **16T**). + +- partition_type: + The values of partition types are as follows: + + - primary: primary partitions + - extended: extended partition (configure only *disk_ID* for this partition) + - logical: logical partitions + +- file_system: + Currently, **ext4** and **vfat** file systems are supported. + +- \[Secondary formatting flag]: + Indicates whether to format the disk during secondary installation. This parameter is optional. + + - The value can be **yes** or **no**. The default value is **no**. + + >[!NOTE] **NOTE:** + > + >Secondary formatting indicates that openEuler has been installed on the disk before this installation. If the partition table configuration (partition size, mount point, and file type) used in the previous installation is the same as that used in the current installation, this flag can be used to configure whether to format the previous partitions, except the **/boot** and **/** partitions. If the target host is installed for the first time, this flag does not take effect, and all partitions with specified file systems are formatted. + +#### Configuring the Network + +The system network parameters are stored in **/opt/imageTailor/custom/cfg_openEuler/sys.conf**. You can modify the network parameters of the target ISO image, such as the NIC name, IP address, and subnet mask, by configuring **\\** in this file. This operation is not available in the Docker environment. + +The default network configuration in the **sys.conf** file is as follows. **netconfig-0** indicates the **eth0** NIC. If you need to configure an additional NIC, for example, **eth1**, add **\\** to the configuration file and set the parameters of **eth1**. + +```text + +BOOTPROTO="dhcp" +DEVICE="eth0" +IPADDR="" +NETMASK="" +STARTMODE="auto" + +``` + +The following table describes the parameters. + +- | Parameter | Mandatory or Not| Value | Description | + | :-------- | -------- | :------------------------------------------------ | :----------------------------------------------------------- | + | BOOTPROTO | Yes | none / static / dhcp | **none**: No protocol is used for boot, and no IP address is assigned.
    **static**: An IP address is statically assigned.
    **dhcp**: An IP address is dynamically obtained using the dynamic host configuration protocol (DHCP).| + | DEVICE | Yes | Example: **eth1** | NIC name. | + | IPADDR | Yes | Example: **192.168.11.100** | IP address.
    This parameter must be configured only when the value of **BOOTPROTO** is **static**.| + | NETMASK | Yes | - | Subnet mask.
    This parameter must be configured only when the value of **BOOTPROTO** is **static**.| + | STARTMODE | Yes | manual / auto / hotplug / ifplugd / nfsroot / off | NIC start mode.
    **manual**: A user runs the `ifup` command on a terminal to start an NIC.
    **auto**/**hotplug**/**ifplug**/**nfsroot**: An NIC is started when the OS identifies it.
    **off**: An NIC cannot be started in any situations.
    For details about the parameters, run the `man ifcfg` command on the host that is used to create the ISO image.| + +#### Configuring Kernel Parameters + +To ensure stable and efficient running of the system, you can modify kernel command line parameters as required. For an OS image created by imageTailor, you can modify the **GRUB_CMDLINE_LINUX** configuration in the **/opt/imageTailor/custom/cfg_openEuler/usr_file/etc/default/grub** file to modify the kernel command line parameters. This operation is not available in the Docker, EMB_rootfs, or QCOW2 environment. + +The default settings of the kernel command line parameters in **GRUB_CMDLINE_LINUX** are as follows: + +```text +GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 crashkernel=512M oops=panic softlockup_panic=1 reserve_kbox_mem=16M crash_kexec_post_notifiers panic=3 console=tty0" +``` + +The meanings of the configurations are as follows (for details about other common kernel command line parameters, see related kernel documents): + +- net.ifnames=0 biosdevname=0 + + Name the NIC in traditional mode. + +- crashkernel=512M + + The memory space reserved for kdump is 512 MB. + +- oops=panic panic=3 + + The kernel panics when an oops error occurs, and the system restarts 3 seconds later. + +- softlockup_panic=1 + + The kernel panics when a soft-lockup is detected. + +- reserve_kbox_mem=16M + + The memory space reserved for Kbox is 16 MB. + +- console=tty0 + + Specifies **tty0** as the output device of the first virtual console. + +- crash_kexec_post_notifiers + + After the system crashes, the function registered with the panic notification chain is called first, and then kdump is executed. + +### Creating an Image + +After customizing the operating system, you can use the `mkdliso` script to create the OS image file. The OSimage created using imageTailor is an ISO image file. + +#### Command Description + +##### Syntax + +```shell +mkdliso [-p openEuler|docker|EMB_rootfs|qcow2] [-c custom/cfg_openEuler|custom/cfg_docker|custom/cfg_EMB_rootfs|custom/cfg_qcow2] [--minios yes|no|force] [--sec] [-h] +``` + +##### Parameter Description + +| Parameter| Mandatory| Description | Value Range | +| -------- | -------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| -p | Yes | Specifies the product name. | **openEuler**, **docker**, **EMB_rootfs**, **qcow2** | +| c | Yes | Specifies the relative path of the configuration file. | **custom/cfg_openEuler**, **custom/cfg_docker**, **custom/cfg_EMB_rootfs**, **custom/cfg_qcow2** | +| --minios | No | Specifies whether to create the **initrd** file that is used to boot the system during system installation. | The default value is **yes**.
    **yes**: The **initrd** file will be created when the command is executed for the first time. When a subsequent `mkdliso` is executed, the system checks whether the **initrd** file exists in the **usr_install/boot** directory using sha256 verification. If the **initrd** file exists, it is not created again. Otherwise, it is created.
    **no**: The **initrd** file is not created. The **initrd** file used for system boot and running is the same.
    **force**: The **initrd** file will be created forcibly, regardless of whether it exists in the **usr_install/boot** directory or not.| +| --sec | No | Specifies whether to perform security hardening on the generated ISO file.
    If this parameter is not specified, the user should undertake the resultant security risks| N/A | +| -h | No | Obtains help information. | N/A | + +#### Image Creation Guide + +To create an ISO image using`mkdliso`, perform the following steps: + +>[!NOTE] NOTE: +> +> - The absolute path to `mkdliso` must not contain spaces. Otherwise, the ISO image creation will fail. +> - In the environment for creating the ISO image, the value of **umask** must be set to **0022**. + +1. Run the `mkdliso` command as the **root** user to generate the ISO image file. The following command is used for reference: + + ```shell + sudo /opt/imageTailor/mkdliso -p openEuler -c custom/cfg_openEuler --sec + sudo /opt/imageTailor/mkdliso -p docker -c custom/cfg_docker + sudo /opt/imageTailor/mkdliso -p EMB_rootfs -c custom/cfg_EMB_rootfs + sudo /opt/imageTailor/mkdliso -p qcow2 -c custom/cfg_qcow2 + ``` + + After the command is executed, the created files are stored in the **/opt/imageTailor/result/{date}** directory, including: + - **openEuler-aarch64.iso** and **openEuler-aarch64.iso.sha256** in the openEuler environment + - **openEuler-image-qemu-\*.rootfs.cpio.gz** and **openEuler-image-qemu-\*.rootfs.cpio.gz.sha256** in the EMB_rootfs environment + - **docker.\*.tar.xz**, **docker.\*.tar.xz.sha256sum**, **docker_source.rpmlist**, and **docker_binary.rpmlist** in the Docker environment + - **openEuler_\*.qcow2** and **openEuler_\*.qcow2.sha256sum** in the QCOW2 environment + +2. Verify the integrity of the ISO image file. Assume that the date and time is **2022-03-21-14-48**. + + ```shell + cd /opt/imageTailor/result/2022-03-21-14-48/ + sha256sum -c openEuler-aarch64.iso.sha256 + ``` + + If the following information is displayed, the ISO image creation is complete. + + ```text + openEuler-aarch64.iso: OK + ``` + + If the following information is displayed, the image is incomplete. The ISO image file is damaged and needs to be created again. + + ```text + openEuler-aarch64.iso: FAILED + sha256sum: WARNING: 1 computed checksum did NOT match + ``` + +3. View the logs. + + After an image is created, you can view logs as required (for example, when an error occurs during image creation). When an image is created for the first time, the corresponding log file and security hardening log file are compressed into a TAR package (the log file is named in the format of **sys_custom_log_{Date}.tar.gz**) and stored in the **result/log directory**. Only the latest 50 compressed log packages are stored in this directory. If the number of compressed log packages exceeds 50, the earliest files will be overwritten. + +### Tailoring Time Zones + +After the customized ISO image is installed, you can tailor the time zones supported by the openEuler system as required. This section describes how to tailor the time zones. + +The information about time zones supported by openEuler is stored in the time zone folder **/usr/share/zoneinfo**. You can run the following command to view the time zone information: + +```shell +$ ls /usr/share/zoneinfo/ +Africa/ America/ Asia/ Atlantic/ Australia/ Etc/ Europe/ +Pacific/ zone.tab +``` + +Each subfolder represents an area. The current areas include continents, oceans, and **Etc**. Each area folder contains the locations that belong to it. Generally, a location is a city or an island. + +All time zones are in the format of *area/location*. For example, if China Standard Time is used in southern China, the time zone is Asia/Shanghai (location may not be the capital). The corresponding time zone file is **/usr/share/zoneinfo/Asia/Shanghai**. + +If you want to tailor some time zones, delete the corresponding time zone files. + +### Customization Example + +This section describes how to use imageTailor to create an ISO image. + +1. Check whether the environment used to create the ISO meets the requirements. + + ``` shell + $ cat /etc/openEuler-release + openEuler release 22.03 LTS + ``` + +2. Ensure that the root directory has at least 40 GB free space. + + ```shell + $ df -h + Filesystem Size Used Avail Use% Mounted on + ...... + /dev/vdb 196G 28K 186G 1% / + ``` + +3. Install the imageTailor tailoring tool. For details, see [Installation](#installation). + + ```shell + $ sudo yum install -y imageTailor + $ ll /opt/imageTailor/ + total 88K + drwxr-xr-x. 3 root root 4.0K Mar 3 08:00 custom + drwxr-xr-x. 10 root root 4.0K Mar 3 08:00 kiwi + -r-x------. 1 root root 69K Mar 3 08:00 mkdliso + drwxr-xr-x. 2 root root 4.0K Mar 9 14:48 repos + drwxr-xr-x. 2 root root 4.0K Mar 9 14:48 security-tool + ``` + +4. Configure a local repo source. + + ```shell + $ wget https://repo.openeuler.org/openEuler-22.03-LTS/ISO/aarch64/openEuler-22.03-LTS-everything-aarch64-dvd.iso + $ sudo mkdir -p /opt/openEuler_repo + $ sudo mount openEuler-22.03-LTS-everything-aarch64-dvd.iso /opt/openEuler_repo + mount: /opt/openEuler_repo: WARNING: source write-protected, mounted read-only. + $ sudo rm -rf /opt/imageTailor/repos/euler_base && sudo mkdir -p /opt/imageTailor/repos/euler_base + $ sudo cp -ar /opt/openEuler_repo/Packages/* /opt/imageTailor/repos/euler_base + $ sudo chmod -R 644 /opt/imageTailor/repos/euler_base + $ sudo ls /opt/imageTailor/repos/euler_base|wc -l + 2577 + $ sudo umount /opt/openEuler_repo && sudo rm -rf /opt/openEuler_repo + $ cd /opt/imageTailor + ``` + +5. Change the **root** and GRUB passwords. + + Replace **\${pwd\*}** with the encrypted password by referring to [Configuring Initial Passwords](#configuring-initial-passwords). + + - openEuler + + ```shell + $ cd /opt/imageTailor/ + $ sudo vi custom/cfg_openEuler/usr_file/etc/default/grub + GRUB_PASSWORD="${pwd1}" + $ + $ sudo vi kiwi/minios/cfg_minios/rpm.conf + + + + $ + $ sudo vi custom/cfg_openEuler/rpm.conf + + + + ``` + + - Docker: + There is no GRUB or root password. + + - EMB_rootfs: + + ```shell + $ cd /opt/imageTailor/ + $ sudo vi custom/cfg_EMB_rootfs/rpm.conf + + + + ``` + + - qcow2: + + ```shell + $ cd /opt/imageTailor/ + $ sudo vi custom/cfg_qcow2/config/root_pwd + ${pwd2} + ``` + +6. Run the tailoring command. + + - openEuler + + ```shell + $ sudo rm -rf /opt/imageTailor/result + $ sudo ./mkdliso -p openEuler -c custom/cfg_openEuler --minios force + ...... + Complete release iso file at: result/2022-03-09-15-31/openEuler-aarch64.iso + move all mkdliso log file to result/log/sys_custom_log_20220309153231.tar.gz + $ ll result/2022-03-09-15-31/ + total 889M + -rw-r--r--. 1 root root 889M Mar 9 15:32 openEuler-aarch64.iso + -rw-r--r--. 1 root root 87 Mar 9 15:32 openEuler-aarch64.iso.sha256 + ``` + + - Docker: + + ```shell + $ sudo rm -rf /opt/imageTailor/result + $ sudo ./mkdliso -p docker -c custom/cfg_docker + ...... + Complete release iso file at: result/2023-03-09-15-31/docker.aarch64.tar.xz + move all mkdliso log file to result/log/sys_custom_log_20230309153231.tar.gz + $ ls result/2023-03-09-15-31/ + docker.aarch64.tar.xz + docker_binary.rpmlist + docker_source.rpmlist + docker.aarch64.tar.xz.sha256sum + ``` + + - EMB_rootfs: + + ```shell + $ sudo rm -rf /opt/imageTailor/result + $ sudo ./mkdliso -p EMB_rootfs -c custom/cfg_EMB_rootfs + ...... + Complete release iso file at: result/2023-02-20-18-13/openEuler-image-qemu-aarch64-20230220181343.rootfs.cpio.gz + move all mkdliso log file to result/log/sys_custom_log_20230220181343.tar.gz + $ ls result/2023-02-20-18-13/ + openEuler-image-qemu-aarch64-20230220181343.rootfs.cpio.gz + openEuler-image-qemu-aarch64-20230220181343.rootfs.cpio.gz.sha256 + ``` + + - QCOW2: + + ```shell + $ sudo rm -rf /opt/imageTailor/result + $ sudo ./mkdliso -p qcow2 -c custom/cfg_qcow2 + ...... + create qcow2 success + $ ls result/2023-05-23-15-29/ + openEuler_aarch64.qcow2 + openEuler_aarch64.qcow2.sha256sum + ``` diff --git a/docs/en/tools/community_tools/image_tailor/public_sys-resources/icon-note.gif b/docs/en/tools/community_tools/image_tailor/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/tools/community_tools/image_tailor/public_sys-resources/icon-note.gif differ diff --git a/docs/en/tools/community_tools/isocut/_toc.yaml b/docs/en/tools/community_tools/isocut/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5eb8b662ffbf6ba2d8011593a428c43004dddda0 --- /dev/null +++ b/docs/en/tools/community_tools/isocut/_toc.yaml @@ -0,0 +1,6 @@ +label: isocut User Guide +isManual: true +description: Customize openEuler ISO images +sections: + - label: isocut User Guide + href: ./isocut_user_guide.md diff --git a/docs/en/tools/community_tools/isocut/figures/flowchart.png b/docs/en/tools/community_tools/isocut/figures/flowchart.png new file mode 100644 index 0000000000000000000000000000000000000000..d3a71e8bfdb886222151cea3b2a3c0e8d8eae64a Binary files /dev/null and b/docs/en/tools/community_tools/isocut/figures/flowchart.png differ diff --git a/docs/en/tools/community_tools/isocut/figures/lack_pack.png b/docs/en/tools/community_tools/isocut/figures/lack_pack.png new file mode 100644 index 0000000000000000000000000000000000000000..a4b7f1da15da70f63a86aae360e89017c2b98f2d Binary files /dev/null and b/docs/en/tools/community_tools/isocut/figures/lack_pack.png differ diff --git a/docs/en/tools/community_tools/isocut/isocut_user_guide.md b/docs/en/tools/community_tools/isocut/isocut_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..d0e7500e2f4f746733dc210dc4d552079b0b4865 --- /dev/null +++ b/docs/en/tools/community_tools/isocut/isocut_user_guide.md @@ -0,0 +1,432 @@ +# isocut Usage Guide + +## Introduction + +The size of an openEuler image is large, and the process of downloading or transferring an image is time-consuming. In addition, when an openEuler image is used to install the OS, all RPM packages contained in the image are installed. You cannot choose to install only the required software packages. + +In some scenarios, you do not need to install the full software package provided by the image, or you need to install additional software packages. Therefore, openEuler provides isocut, an image tailoring and customization tool. You can use this tool to customize an ISO image that contains only the required RPM packages based on an openEuler image. The software packages can be the ones contained in an official ISO image or specified in addition to meet custom requirements. + +This document describes how to install and use isocut. + +## Software and Hardware Requirements + +The hardware and software requirements of the computer to make an ISO file using isocut are as follows: + +- CPU architecture: AArch64 or X86_64 +- OS: openEuler 22.03 LTS SP4 +- 60 GB or more drive space for running isocut and storing ISO images. + +## Installation + +The following uses openEuler 22.03 LTS on the AArch64 architecture as an example to describe how to install isocut. + +1. Ensure that openEuler 22.03 LTS has been installed on the computer. + + ```shell + $ cat /etc/openEuler-release + openEuler release 22.03 LTS + ``` + +2. Download the ISO image (must be an **everything** image) of the corresponding architecture and save it to any directory (it is recommended that the available space of the directory be greater than 20 GB). In this example, the ISO image is saved to the **/home/isocut_iso** directory. + + The download address of the AArch64 image is as follows: + + + + > **Note:** + > The download address of the x86_64 image is as follows: + > + > + +3. Create a **/etc/yum.repos.d/local.repo** file to configure the Yum repository. The following is an example of the configuration file. **baseurl** is the directory for mounting the ISO image. + + ```shell + [local] + name=local + baseurl=file:///home/isocut_mount + gpgcheck=0 + enabled=1 + ``` + +4. Run the following command as the **root** user to mount the image to the **/home/isocut_mount** directory (ensure that the mount directory is the same as **baseurl** configured in the **repo** file) as the Yum repository: + + ```shell + sudo mount -o loop /home/isocut_iso/openEuler-22.03-LTS-everything-aarch64-dvd.iso /home/isocut_mount + ``` + +5. Make the Yum repository take effect. + + ```shell + yum clean all + yum makecache + ``` + +6. Install isocut as the **root** user. + + ```shell + sudo yum install -y isocut + ``` + +7. Run the following command as the **root** user to verify that the tool has been installed successfully: + + ```shell + $ sudo isocut -h + Checking input ... + usage: isocut [-h] [-t temporary_workspace] [-r rpm_path] [-k kickstart_file_path] [-p product_name] [-v version_number] [-i install_picture_path] [-c cut_packages] source_iso dest_iso + + Cut openEuler iso to small one + + positional arguments: + source_iso source iso image + dest_iso destination iso image + + optional arguments: + -h, --help show this help message and exit + -t temporary_workspace temporary workspace + -r rpm_path extern rpm packages path + -k kickstart_file_path kickstart file path + -p product_name The product name + -v version_number The version number + -i install_picture_path The path of background pictures during the installation + -c cut_packages cut packages, yes/no, default is yes + ``` + +## Tailoring and Customizing an Image + +This section describes how to use isocut to create an image by tailoring or adding RPM packages to an openEuler image. + +### Command Description + +#### Format + +Run the `isocut` command to use the tool. The command format is as follows: + +```shell +isocut [ --help | -h ] [ -t ] [ -r ] [ -k ] [ -p ] [ -v ] [ -i ] [ -c ] < source_iso > < dest_iso > +``` + +#### Parameter Description + +| Parameter| Mandatory| Description| +| ------------ | -------- | -------------------------------------------------------- | +| --help \| -h | No| Queries the help information about the command.| +| -t <*temporary_workspace*> | No| Specifies the temporary directory *temp_path* for running the tool, which is an absolute path. The default value is **/tmp**.| +| -r <*rpm_path*> | No| Specifies the path of the RPM packages to be added to the ISO image.| +| -k <*kickstart_file_path*> | No | Specifies the kickstart template path if kickstart is used for automatic installation. | +| -p <*product_name*> | No | Product name | +| -v <*version_number*> | No | Product version | +| -i <*install_picture_path*> | No | Path of background pictures used during the installation | +| -c <*cut_packages*> | No | Specifies whether the RPM packages need to be cut. The default value is to cut RPM packages. | +| *source_iso* | Yes| Path and name of the ISO source image to be tailored. If no path is specified, the current path is used by default.| +| *dest_iso* | Yes| Specifies the path and name of the new ISO image created by the tool. If no path is specified, the current path is used by default.| + + >[!NOTE] **Background pictures used during the installation must meet the following naming and resolution requirements:** + > + >- Left side bar background during installation: **sidebar-bg.png**, 290x780 + >- Logo at the upper left corner during installation: **sidebar-logo.png**, 132x32 + >- Upper tool bar background of the settings page: **topbar-bg.png**, 831x105 + +### Software Package Source + +The RPM packages of the new image can be: + +- Packages contained in an official ISO image. In this case, the RPM packages to be installed are specified in the configuration file **/etc/isocut/rpmlist**. The configuration format is *software_package_name.architecture*. For example, **kernel.aarch64**. + +- Specified in addition. In this case, use the `-r` parameter to specify the path in which the RPM packages are stored when running the `isocut` command and add the RPM package names to the **/etc/isocut/rpmlist** configuration file. (See the name format above.) + + >[!NOTE] **NOTE:** + > + >- During image customization, if an RPM package specified in the configuration file cannot be found, the RPM package will not be added to the image. + >- If the dependency of the RPM package is incorrect, an error may be reported when running isocut. + +### kickstart Functions + +You can use kickstart to install images automatically by using the `-k` parameter to specify a kickstart file when running the **isocut** command. + +isocut provides a kickstart template (**/etc/isocut/anaconda-ks.cfg**). You can modify the template as required. + +#### Modifying the kickstart Template + +If you need to use the kickstart template provided by isocut, perform the following modifications: + +- Configure the root user password and the GRUB2 password in the **/etc/isocut/anaconda-ks.cfg** file. Otherwise, the automatic image installation will pause during the password setting process, waiting for you to manually enter the passwords. +- If you want to specify additional RPM packages and use kickstart for automatic installation, specify the RPM packages in the **%packages** field in both the **/etc/isocut/rpmlist** file and the kickstart file. + +See the next section for details about how to modify the kickstart file. + +##### Configuring Initial Passwords + +###### Setting the Initial Password of the **root** User + +Set the initial password of the **root** user as follows in the **/etc/isocut/anaconda-ks.cfg** file. Replace **${pwd}** with the encrypted password. + +```shell +rootpw --iscrypted ${pwd} +``` + +Obtain the initial password of the **root** user as follows (**root** permissions are required): + +1. Add a user for generating the password, for example, **testUser**. + + ```shell + sudo useradd testUser + ``` + +2. Set the password for the **testUser** user. Run the following command to set the password as prompted: + + ```shell + $ sudo passwd testUser + Changing password for user testUser. + New password: + Retype new password: + passwd: all authentication tokens updated successfully. + ``` + +3. View the **/etc/shadow** file to obtain the encrypted password. The encrypted password is the string between the two colons (:) following the **testUser** user name. (******* is used as an example.) + + ```shell + $ sudo cat /etc/shadow | grep testUser + testUser:***:19052:0:90:7:35:: + ``` + +4. Run the following command to replace the **pwd** field in the **/etc/isocut/anaconda-ks.cfg** file with the encrypted password (replace ******* with the actual password): + + ```shell + rootpw --iscrypted *** + ``` + +###### Configuring the Initial GRUB2 Password + +Add the following configuration to the **/etc/isocut/anaconda-ks.cfg** file to set the initial GRUB2 password: Replace **${pwd}** with the encrypted password. + +```text +%addon com_huawei_grub_safe --iscrypted --password='${pwd}' +%end +``` + +> [!NOTE] NOTE: +> +> - The **root** permissions are required for configuring the initial GRUB password. +> - The default user corresponding to the GRUB password is **root**. +> +> - The `grub2-set-password` command must exist in the system. If the command does not exist, install it in advance. + +1. Run the following command and set the GRUB2 password as prompted: + + ```shell + $ sudo grub2-set-password -o ./ + Enter password: + Confirm password: + grep: .//grub.cfg: No such file or directory + WARNING: The current configuration lacks password support! + Update your configuration with grub2-mkconfig to support this feature. + ``` + +2. After the command is executed, the **user.cfg** file is generated in the current directory. The content starting with **grub.pbkdf2.sha512** is the encrypted GRUB2 password. + + ```shell + $ sudo cat user.cfg + GRUB2_PASSWORD=grub.pbkdf2.sha512.*** + ``` + +3. Add the following information to the **/etc/isocut/anaconda-ks.cfg** file. Replace ******* with the encrypted GRUB2 password. + + ```text + %addon com_huawei_grub_safe --iscrypted --password='grub.pbkdf2.sha512.***' + %end + ``` + +##### Configuring the %packages Field + +If you want to specify additional RPM packages and use kickstart for automatic installation, specify the RPM packages in the **%packages** field in both the **/etc/isocut/rpmlist** file and the kickstart file. + +This section describes how to specify RPM packages in the **/etc/isocut/anaconda-ks.cfg** file. + +The default configurations of **%packages** in the **/etc/isocut/anaconda-ks.cfg** file are as follows: + +```text +%packages --multilib --ignoremissing +acl.aarch64 +aide.aarch64 +...... +NetworkManager.aarch64 +%end +``` + +Add specified RPM packages to the **%packages** configurations in the following format: + +*software_package_name.architecture*. For example, **kernel.aarch64**. + +```text +%packages --multilib --ignoremissing +acl.aarch64 +aide.aarch64 +...... +NetworkManager.aarch64 +kernel.aarch64 +%end +``` + +### Operation Guide + +>[!NOTE] **NOTE:** +> +>- Do not modify or delete the default configuration items in the **/etc/isocut/rpmlist** file. +>- All `isocut` operations require **root** permissions. +>- The source image to be tailored can be a basic image or **everything** image. In this example, the basic image **openEuler-22.03-LTS-aarch64-dvd.iso** is used. +>- In this example, assume that the new image is named **new.iso** and stored in the **/home/result** directory, the temporary directory for running the tool is **/home/temp**, and the additional RPM packages are stored in the **/home/rpms** directory. + +1. Open the configuration file **/etc/isocut/rpmlist** and specify the RPM packages to be installed (from the official ISO image). + + ```shell + sudo vi /etc/isocut/rpmlist + ``` + +2. Ensure that the space of the temporary directory for running isocut is greater than 8 GB. The default temporary directory is**/tmp**. You can also use the `-t` parameter to specify another directory as the temporary directory. The path of the directory must be an absolute path. In this example, the **/home/temp** directory is used. The following command output indicates that the available drive space of the **/home** directory is 38 GB, which meets the requirements. + + ```shell + $ df -h + Filesystem Size Used Avail Use% Mounted on + devtmpfs 1.2G 0 1.2G 0% /dev + tmpfs 1.5G 0 1.5G 0% /dev/shm + tmpfs 1.5G 23M 1.5G 2% /run + tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup + /dev/mapper/openeuler_openeuler-root 69G 2.8G 63G 5% / + /dev/sda2 976M 114M 796M 13% /boot + /dev/mapper/openeuler_openeuler-home 61G 21G 38G 35% /home + ``` + +3. Tailor and customize the image. + + **Scenario 1**: All RPM packages of the new image are from the official ISO image. + + ```shell + $ sudo isocut -t /home/temp /home/isocut_iso/openEuler-22.03-LTS-SP4-aarch64-dvd.iso /home/result/new.iso + Checking input ... + Checking user ... + Checking necessary tools ... + Initing workspace ... + Copying basic part of iso image ... + Downloading rpms ... + Finish create yum conf + finished + Regenerating repodata ... + Checking rpm deps ... + Getting the description of iso image ... + Remaking iso ... + Adding checksum for iso ... + Adding sha256sum for iso ... + ISO cutout succeeded, enjoy your new image "/home/result/new.iso" + isocut.lock unlocked ... + ``` + + If the preceding information is displayed, the custom image **new.iso** is successfully created. + + **Scenario 2**: The RPM packages of the new image are from the official ISO image and additional packages in **/home/rpms**. + + ```shell + sudo isocut -t /home/temp -r /home/rpms /home/isocut_iso/openEuler-22.03-LTS-SP4-aarch64-dvd.iso /home/result/new.iso + ``` + + **Scenario 3**: The kickstart file is used for automatic installation. You need to modify the **/etc/isocut/anaconda-ks.cfg** file. + + ```shell + sudo isocut -t /home/temp -k /etc/isocut/anaconda-ks.cfg /home/isocut_iso/openEuler-22.03-LTS-SP4-aarch64-dvd.iso /home/result/new.iso + ``` + +### cut_packages Functions + +Based on the standard ISO image released by openEuler, the RPM package can be tailored on demand during the installation customization. + +By specifying the `cut_packages` parameter, you can choose whether to cut RPM packages. + +#### Operation Guide + +**Scenario 1**: The user chooses not to cut RPM packages. + +```shell + $ sudo isocut -t /opt/tlriso/tmp -p openEuler -c no -v 22.03-LTS-SP4 openEuler-22.03-LTS-SP4-x86_64-dvd.iso openEuler-22.03-LTS-SP4-x86_64-dvd_new.iso + Checking input ... + Checking user ... + Checking necessary tools ... + Initing workspace ... + Copying basic part of iso image ... + Getting the description of iso image ... + Downloading rpms ... + Finish create yum conf + finished + Regenerating repodata ... + Checking rpm deps ... + Skip checking rpm deps!! + Replacing install background pictures ... + Updating EFI config file ... + Updating legacy config file ... + Updating treeinfo file ... + Customizing kickstart file ... + Remaking iso ... + Adding checksum for iso ... + Adding sha256sum for iso ... + ISO cutout succeeded, enjoy your new image "openEuler-22.03-LTS-SP4-x86_64-dvd_new.iso" + isocut.lock unlocked ... +``` + +If the preceding information is displayed, the custom image **new.iso** is successfully created. + +**Scenario 2**: The user chooses to cut RPM packages. + +```shell +sudo isocut -t /opt/tlriso/tmp -p openEuler -c yes -v 22.03-LTS-SP4 openEuler-22.03-LTS-SP4-x86_64-dvd.iso openEuler-22.03-LTS-SP4-x86_64-dvd_new.iso +``` + +**Scenario 3**: The RPM packages are cut by default, and the value of the parameter is empty. + +```shell +sudo isocut -t /opt/tlriso/tmp -p openEuler -v 22.03-LTS-SP4 openEuler-22.03-LTS-SP4-x86_64-dvd.iso openEuler-22.03-LTS-SP4-x86_64-dvd_new.iso +``` + +## FAQs + +### The System Fails to Be Installed Using an Image Tailored Based on the Default RPM Package List + +#### Context + +When isocut is used to tailor an image, the **/etc/isocut/rpmlist** configuration file is used to specify the software packages to be installed. + +Images of different OS versions contain different software packages. As a result, some packages may be missing during image tailoring. +Therefore, the **/etc/isocut/rpmlist** file contains only the kernel software package by default, +ensuring that the image can be successfully tailored. + +#### Symptom + +The ISO image is successfully tailored using the default configuration, but fails to be installed. + +An error message is displayed during the installation, indicating that packages are missing: + +![](./figures/lack_pack.png) + +#### Possible Cause + +The ISO image tailored based on the default RPM package list lacks necessary RPM packages during installation. +The missing RPM packages are displayed in the error message, and may vary depending on the version. + +#### Solution + +Add the missing packages. + + 1. Find the missing RPM packages based on the error message. + 2. Add the missing RPM packages to the **/etc/isocut/rpmlist** configuration file. + 3. Tailor and install the ISO image again. + + For example, if the missing packages are those in the example error message, modify the **rpmlist** configuration file as follows: + + ```shell + $ cat /etc/isocut/rpmlist + kernel.aarch64 + lvm2.aarch64 + chrony.aarch64 + authselect.aarch64 + shim.aarch64 + efibootmgr.aarch64 + grub2-efi-aa64.aarch64 + dosfstools.aarch64 + ``` diff --git a/docs/en/tools/community_tools/isocut/public_sys-resources/icon-note.gif b/docs/en/tools/community_tools/isocut/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/tools/community_tools/isocut/public_sys-resources/icon-note.gif differ diff --git a/docs/en/tools/community_tools/migration_tools/translation_note.txt b/docs/en/tools/community_tools/migration_tools/translation_note.txt new file mode 100644 index 0000000000000000000000000000000000000000..4065672fbc172eaddb5a57af55509721b39c60f8 --- /dev/null +++ b/docs/en/tools/community_tools/migration_tools/translation_note.txt @@ -0,0 +1 @@ +As of Jan 2024, Migration-tools does not provide English UI. The documents are not scheduled for translation. \ No newline at end of file diff --git a/docs/en/tools/community_tools/oemaker_user_guide/_toc.yaml b/docs/en/tools/community_tools/oemaker_user_guide/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c1fd8c62e5d3ba82cc67da36d18d91b3591ad25f --- /dev/null +++ b/docs/en/tools/community_tools/oemaker_user_guide/_toc.yaml @@ -0,0 +1,6 @@ +label: oemaker User Guide +isManual: true +description: Install and use oemaker +sections: + - label: oemaker User Guide + href: ./oemaker_user_guide.md diff --git a/docs/en/tools/community_tools/oemaker_user_guide/figures/flowchart.png b/docs/en/tools/community_tools/oemaker_user_guide/figures/flowchart.png new file mode 100644 index 0000000000000000000000000000000000000000..d3a71e8bfdb886222151cea3b2a3c0e8d8eae64a Binary files /dev/null and b/docs/en/tools/community_tools/oemaker_user_guide/figures/flowchart.png differ diff --git a/docs/en/tools/community_tools/oemaker_user_guide/figures/lack_pack.png b/docs/en/tools/community_tools/oemaker_user_guide/figures/lack_pack.png new file mode 100644 index 0000000000000000000000000000000000000000..a4b7f1da15da70f63a86aae360e89017c2b98f2d Binary files /dev/null and b/docs/en/tools/community_tools/oemaker_user_guide/figures/lack_pack.png differ diff --git a/docs/en/tools/community_tools/oemaker_user_guide/oemaker_user_guide.md b/docs/en/tools/community_tools/oemaker_user_guide/oemaker_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..fd152ea76c4b4e66ae5b38ef5d88170ebcbdb8c3 --- /dev/null +++ b/docs/en/tools/community_tools/oemaker_user_guide/oemaker_user_guide.md @@ -0,0 +1,161 @@ +# oemaker User Guide + +## Overview + +This document describes how to install and use oemaker, the openEuler image creation tool. + +## Software and Hardware Requirements + +The hardware and software requirements of the computer to create an ISO file using oemaker are as follows: + +- CPU architecture: AArch64 or X86_64 +- OS: openEuler 22.03 LTS SP4 +- 60 GB or more drive space for running oemaker and storing ISO images. + +## Installation + +The following uses openEuler 22.03 LTS SP4 on the AArch64 architecture as an example to describe how to install oemaker. + +1. Ensure that openEuler 22.03 LTS SP4 has been installed on the computer. + + ```shell + cat /etc/openEuler-release + openEuler release 22.03 LTS SP4 + ``` + +2. Download the ISO image (must be an **everything** image) of the corresponding architecture and save it to any directory (it is recommended that the available space of the directory be greater than 20 GB). In this example, the ISO image is saved to the **/home** directory. + + AArch64 image download: + + + + >[!NOTE] **NOTE:** + > + > x86_64 image download: + > + > + +3. Create a **/etc/yum.repos.d/local.repo** file to configure the Yum source. The following is an example of the configuration file. **baseurl** is the directory for mounting the ISO image. + + ```shell + [local] + name=local + baseurl=file:///home/oemaker_iso + gpgcheck=0 + enabled=1 + ``` + +4. Run the following command as the **root** user to mount the image to the **/home/oemaker_iso** directory (ensure that the mount directory is the same as **baseurl** configured in the **repo** file) as the Yum repository: + + ```shell + sudo mount -o loop /home/openEuler-22.03-LTS-SP4-everything-aarch64-dvd.iso /home/oemaker_iso + ``` + +5. Make the Yum repository take effect. + + ```shell + yum clean all + yum makecache + ``` + +6. Install oemaker as the **root** user. + + ```shell + sudo yum install -y oemaker + ``` + +7. Run the following command as the **root** user to verify that the tool has been installed successfully: + + ```shell + sudo oemaker -h + Usage: oemaker [-h] [-t Type] [-p Product] [-v Version] [-r RELEASE] [-s REPOSITORY] + + optional arguments: + -t Type ISO Type, include standard debug source everything everything_debug everything_src livecd and netinst + -p Product Product Name, such as: openEuler + -v Version version identifier + -r RELEASE release information + -s REPOSITORY source dnf repository address link(may be listed multiple times) + -h show the help message and exit + ``` + +## Image Creation + +This section describes how to use oemaker to create an openEuler image. + +### Command Description + +#### Syntax + +Run the **oemaker** command to use the tool. The command syntax is as follows: + +```shell +oemaker [ --help | -h ] [ -t ] [ -p ] [ -v ] [-r ] [-s ] +``` + +#### Command Options + +| Option | Mandatory| Description | +|-----------------------------| -------- |---------------------------------------------------------| +| --help \ -h | No | Query the help information the command. | +| -t <ISO type> | Yes | Specify the image type. The value can be **standard**, **debug**, **source**, **everything**, **everything_debug**, **everything_src**, **livecd**, or **netinst**.| +| -p <Product name> | No | Product name. | +| -v <Version number> | No | Product version. | +| -r <Release information> | No | Release information. | +| -s <Source dnf repository address link> | No | Software repository. | + +### Software Repository + +The RPM packages of the new image can be: + +- Packages of the original ISO image: The RPM packages to be installed are specified in the configuration file **rpmlist**. The configuration format is *software_package_name*. For example, **kernel**. + +- Extra packages: Extra packages can be added to **/home/oemaker_iso** and run the `createrepo` command based on **normal.xml** of the original image to regenerate the repository. + + >[!NOTE] **NOTE:** + > + >- During image creation, if an RPM package specified in the configuration file cannot be found, the RPM package will not be added to the image. + >- If the dependency of the RPM package is incorrect, an error may be reported during image creation. + +### Operation Guide + +The following uses the **livecd** image as an example. + +1. Modify the configuration file **/opt/oemaker/config/aarch64/livecd/rpmlist** to specify the RPM software packages to be installed. + + ```shell + sudo vi /opt/oemaker/config/aarch64/livecd/rpmlist + ``` + +2. Ensure that the space of the temporary directory for running oemaker is greater than 60 GB. + + ```shell + df -h + Filesystem Size Used Avail Use% Mounted on + devtmpfs 1.2G 0 1.2G 0% /dev + tmpfs 1.5G 0 1.5G 0% /dev/shm + tmpfs 1.5G 23M 1.5G 2% /run + tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup + /dev/mapper/openeuler_openeuler-root 69G 2.8G 63G 5% / + /dev/sda2 976M 114M 796M 13% /boot + /dev/mapper/openeuler_openeuler-home 61G 21G 38G 35% /home + ``` + +3. Perform the creation. + + Run the following commands: + + ```shell + cd /opt/oemaker + ./oemaker.sh -t livecd -p openEuler -v 22.03-LTS-SP4 -r '' -s "file:///home/oemaker_iso" + ``` + + The result is stored in the **/result** directory. + + ```shell + ls /result/ -l + total 549052 + -rw-r--r-- 1 root root 20244 Nov 17 15:24 openEuler-livecd-22.03-LTS-SP4-aarch64_binary.rpmlist + -rw-r--r-- 1 root root 562188288 Nov 17 15:24 openEuler-livecd-22.03-LTS-SP4-aarch64.iso + -rw-r--r-- 1 root root 15736 Nov 17 15:24 openEuler-livecd-22.03-LTS-SP4-aarch64_source.rpmlist + ``` diff --git a/docs/en/tools/community_tools/oemaker_user_guide/public_sys-resources/icon-note.gif b/docs/en/tools/community_tools/oemaker_user_guide/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/tools/community_tools/oemaker_user_guide/public_sys-resources/icon-note.gif differ diff --git a/docs/en/tools/community_tools/oepkgs/_toc.yaml b/docs/en/tools/community_tools/oepkgs/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8f218aefac2ba9d269db49b9194664b2c4d0fd29 --- /dev/null +++ b/docs/en/tools/community_tools/oepkgs/_toc.yaml @@ -0,0 +1,11 @@ +label: oepkg User Guide +isManual: true +description: Use oepkg to manage packages +sections: + - label: oepkgs User Guide + href: ./overview.md + - label: oepkgs Image Source Configuration and Usage + href: ./oepkgs_image_source_configuration_and_usage.md + - label: Co-construction and Future of oepkgs + href: ./co_construction_and_future_of_oepkgs.md + diff --git a/docs/en/tools/community_tools/oepkgs/co_construction_and_future_of_oepkgs.md b/docs/en/tools/community_tools/oepkgs/co_construction_and_future_of_oepkgs.md new file mode 100644 index 0000000000000000000000000000000000000000..0430be7060dab953bf00af75c748160a8625be08 --- /dev/null +++ b/docs/en/tools/community_tools/oepkgs/co_construction_and_future_of_oepkgs.md @@ -0,0 +1,64 @@ +# Co-construction and Future of oepkgs + +## Contribution as an Individual + +![](./public_sys-resources/contrib-oepkgs.png) + +1. Submit a PR to create a repository. + + Submit a PR in the [oepkgs-management](https://gitee.com/oepkgs/oepkgs-management) repository and fill in two configuration files. After the PR is merged, the repository creation robot ci-robot automatically creates a repository under [src-oepkgs](https://gitee.com/src-oepkgs). + + >[!NOTE] **NOTE:** + > + > - The oepkgs repository classifies software packages by domain and category. Software packages of different domains and categories are maintained by different **SIGs**. + > - Open source software can be introduced to **an existing SIG of oepkgs** by submitting a PR and modifying the **sig-info.yaml** file of the SIG. It is not mandatory to create a SIG when a software package is introduced. + + For example, if Nginx is to be introduced, the configuration files in the oepkgs-management repository would be **sig-info.yaml** and **nginx.yaml**. + + Fields in **sig-info.yaml**: + + | Field| Description| Mandatory| + |---|---|---| + | name | SIG name, which is related to the software package domain.| √ | + | description | Description of the SIG.| √ | + | mailing_list | Subscribed email addresses of the SIG| × | + | meeting_url | SIG meeting link| × | + | maintainers | Manager of the SIG, responsible for review and merging of PRs of the SIG repositories.| √ | + | repositories | SIG repositories| √ | + | committers | Committers of SIG repositories are responsible for review and merging of PRs of the corresponding repositories.| √ | + + Fields in **nginx.yaml**: + + | Field| Description| Mandatory| + |---|---|---| + | name | Package name (repository name)| √ | + | description | Software package description| √ | + | upstream | Upstream repository address of software package| √ | + | branches | Repository branches| √ | + +2. Add source code files. + + - After step 1 is complete, the repository is generated within 5 minutes. Add source code files to the repository through PRs. The source code files include **nginx.spec** that can be used to build RPM packages and **nginx-2.12.0.tar.bz2**. For details, see . + + >[!NOTE] **NOTE:** + > + > - After a PR is submitted, the PR quality gate build test will be performed within 5 to 30 minutes. The test result will be submitted as a comment under the PR. It is recommended that the PR be merged after **Build_Result** is displayed as **SUCCESS**. + > - The maintainer specified in the **oepkgs-management/sig/virtual/sig-info.yaml** configuration file can merge the PR by commenting **/lgtm** and **/approve** under the PR. + +3. Build the software package. + + oepkgs provides a mature CI/CD system to support software package source code building, binary scanning, and basic function verification, ensuring reliable quality and continuous evolution of the software repository. + +## Future plan + +Services for more users and developers + +- More services will be opened to users and developers for wider participation, promoting the improvement of the oepkgs service. + +Software package patch management + +- A software package patch management system has been planned to enhance the display of binary package security hardening information. The query platform uses software package patch management to provide more comprehensive binary package information. + +Continuous construction + +- The openEuler expansion repository will be continuously developed to include more software. oepkgs works with the official openEuler repository to promote the development of the openEuler ecosystem. diff --git a/docs/en/tools/community_tools/oepkgs/oepkgs_image_source_configuration_and_usage.md b/docs/en/tools/community_tools/oepkgs/oepkgs_image_source_configuration_and_usage.md new file mode 100644 index 0000000000000000000000000000000000000000..9c6645b7e7ff70a0165a844f8ff660c2c2dab83d --- /dev/null +++ b/docs/en/tools/community_tools/oepkgs/oepkgs_image_source_configuration_and_usage.md @@ -0,0 +1,60 @@ +# oepkgs Image Source Configuration and Usage + +## Configuration + +Currently, the oepkgs image source provides more than 30,000 software packages. You can download the software packages by following the installation guide on the oepkgs search page. Alternatively, you can download the oepkgs-release package to the server and run the `yum search` command to search for the desired software package, and download and use it. + +>[!NOTE] **NOTE:** +> +> - The address of the oepkgs search page is . The method of downloading and installing software packages is the same as that of downloading and installing the oepkgs-release package. The following describes the detailed procedure. +> - Download the oepkgs-release package to the server. By default, the `priority` field in the .repo configuration file is used to change the priority of the oepkgs image source to the lowest to ensure that the image source provided by the OS is preferentially used. You can change the priority of the oepkgs image source as required. + +1. Log in to the [oepkgs community](https://oepkgs.net/) website. +2. Click the **Search** tab. The software package search page is displayed. +3. Enter **oepkgs-release** in the search box and click **Search**. The download list of oepkgs-release packages of different versions is displayed. + - oepkgs-release +4. Select the oepkgs-release package to be downloaded based on the openEuler version in the environment to be configured. +5. Click **View Details** to view details about the oepkgs-release package and configure the image source based on the installation guide. + 1. Add the source. + + ```shell + dnf config-manager --add-repo https://repo.oepkgs.net/openeuler/rpm/openEuler-xxx/extras/noarch/ + ``` + + 2. Update the source index. + + ```shell + dnf update + ``` + + 3. Install the **oepkgs-release** software package. + + ```shell + dnf install oepkgs-release + ``` + + 4. Check the image source configured on the service. + + ```shell + dnf repolist + ``` + +>[!NOTE] **NOTE:** +> +> - After the oepkgs-release package is installed, the oepkgs image source has been configured on the service. You can view the new .repo file in the **/etc/yum.repos.d/** directory. + +## Usage Guide + +If the oepkgs image source is configured in the environment by downloading the oepkgs-release package to the server, run the following command to download the software package from the oepkgs image source: + +1. Query the software package. + + ```shell + dnf search *** + ``` + +2. Install the software package. + + ```shell + dnf install *** + ``` diff --git a/docs/en/tools/community_tools/oepkgs/overview.md b/docs/en/tools/community_tools/oepkgs/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..30741d9809618c90186f283883cf4e2b81ed94cb --- /dev/null +++ b/docs/en/tools/community_tools/oepkgs/overview.md @@ -0,0 +1,3 @@ +# oepkgs User Guide + +Open External Packages Service [oepkgs](https://oepkgs.net/en/) is a third-party community that provides software packages and container images for openEuler and other Linux distributions. Currently, the oepkgs [image source](https://repo.oepkgs.net/openEuler/rpm/) provides more than 30,000 software packages. The oepkgs community performs build tests and compatibility tests on software packages, and manages the lifecycle of the [source code repository](https://gitee.com/src-oepkgs) of software packages on oepkgs. diff --git a/docs/en/tools/community_tools/oepkgs/public_sys-resources/SBOM.png b/docs/en/tools/community_tools/oepkgs/public_sys-resources/SBOM.png new file mode 100644 index 0000000000000000000000000000000000000000..be0edbeb34af95e44dc0e99d00b057d15e891191 Binary files /dev/null and b/docs/en/tools/community_tools/oepkgs/public_sys-resources/SBOM.png differ diff --git a/docs/en/tools/community_tools/oepkgs/public_sys-resources/contrib-oepkgs.png b/docs/en/tools/community_tools/oepkgs/public_sys-resources/contrib-oepkgs.png new file mode 100644 index 0000000000000000000000000000000000000000..69b698a7153a44bd2a74db17b9496359e4df62b4 Binary files /dev/null and b/docs/en/tools/community_tools/oepkgs/public_sys-resources/contrib-oepkgs.png differ diff --git a/docs/en/tools/community_tools/oepkgs/public_sys-resources/icon-note.gif b/docs/en/tools/community_tools/oepkgs/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/tools/community_tools/oepkgs/public_sys-resources/icon-note.gif differ diff --git a/docs/en/tools/community_tools/oepkgs/public_sys-resources/install-payload.png b/docs/en/tools/community_tools/oepkgs/public_sys-resources/install-payload.png new file mode 100644 index 0000000000000000000000000000000000000000..c2da47fe2e0f38de3394701103d3133ba4110c32 Binary files /dev/null and b/docs/en/tools/community_tools/oepkgs/public_sys-resources/install-payload.png differ diff --git a/docs/en/tools/community_tools/oepkgs/public_sys-resources/openEuler.png b/docs/en/tools/community_tools/oepkgs/public_sys-resources/openEuler.png new file mode 100644 index 0000000000000000000000000000000000000000..d307559bbaba1eef8910501ffc4891c386b838f2 Binary files /dev/null and b/docs/en/tools/community_tools/oepkgs/public_sys-resources/openEuler.png differ diff --git "a/docs/en/tools/community_tools/oepkgs/public_sys-resources/openEuler\346\211\251\345\261\225\344\273\223\350\264\250\351\207\217\344\277\235\351\232\234.png" "b/docs/en/tools/community_tools/oepkgs/public_sys-resources/openEuler\346\211\251\345\261\225\344\273\223\350\264\250\351\207\217\344\277\235\351\232\234.png" new file mode 100644 index 0000000000000000000000000000000000000000..f61dbb7e8de605eb79ae5973b9fe41a9174d0bf2 Binary files /dev/null and "b/docs/en/tools/community_tools/oepkgs/public_sys-resources/openEuler\346\211\251\345\261\225\344\273\223\350\264\250\351\207\217\344\277\235\351\232\234.png" differ diff --git a/docs/en/tools/community_tools/oepkgs/public_sys-resources/rpm-metadata.png b/docs/en/tools/community_tools/oepkgs/public_sys-resources/rpm-metadata.png new file mode 100644 index 0000000000000000000000000000000000000000..82489e9f39c001b5472f36c572ae57f01b1e804a Binary files /dev/null and b/docs/en/tools/community_tools/oepkgs/public_sys-resources/rpm-metadata.png differ diff --git a/docs/en/tools/community_tools/oepkgs/public_sys-resources/search-oepkgs.jpg b/docs/en/tools/community_tools/oepkgs/public_sys-resources/search-oepkgs.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aa022b3af369a04ed59991e9967ac3bd1c2a2e08 Binary files /dev/null and b/docs/en/tools/community_tools/oepkgs/public_sys-resources/search-oepkgs.jpg differ diff --git a/docs/en/tools/community_tools/oepkgs/public_sys-resources/security.png b/docs/en/tools/community_tools/oepkgs/public_sys-resources/security.png new file mode 100644 index 0000000000000000000000000000000000000000..5fef1023af0ce09eaff4f52df8365c69f590a9c3 Binary files /dev/null and b/docs/en/tools/community_tools/oepkgs/public_sys-resources/security.png differ diff --git a/docs/en/tools/community_tools/pin/_toc.yaml b/docs/en/tools/community_tools/pin/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..79cb8e98e4c04f4ea76c6a61c7f97a2f7cefa32f --- /dev/null +++ b/docs/en/tools/community_tools/pin/_toc.yaml @@ -0,0 +1,6 @@ +label: PIN User Guide +isManual: true +description: Use PIN, a GCC plugin framework +sections: + - label: Installation and Deployment + href: ./pin_user_guide.md diff --git a/docs/en/tools/community_tools/pin/pin_user_guide.md b/docs/en/tools/community_tools/pin/pin_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..b4ae03aad8bc56cce7b2cfa659bbce9f7e95fe13 --- /dev/null +++ b/docs/en/tools/community_tools/pin/pin_user_guide.md @@ -0,0 +1,123 @@ +# Installation and Deployment + +## Software + +* OS: openEuler 22.03 LTS SP4 + +## Hardware + +* x86_64 +* AArch64 + +## Preparing the Environment + +* Install the openEuler operating system. For details, see the [*openEuler Installation Guide*](./../../../server/installation_upgrade/installation/installation_guide.md). + +### Install the dependency + +#### Installing the Software on Which the PIN GCC Client Depends + +```shell +yum install -y git +yum install -y make +yum install -y cmake +yum install -y grpc +yum install -y grpc-devel +yum install -y grpc-plugins +yum install -y protobuf-devel +yum install -y jsoncpp +yum install -y jsoncpp-devel +yum install -y gcc-plugin-devel +yum install -y llvm-mlir +yum install -y llvm-mlir-devel +yum install -y llvm-devel +``` + +#### Installing the Software on Which the PIN Server Depends + +```shell +yum install -y git +yum install -y make +yum install -y cmake +yum install -y grpc +yum install -y grpc-devel +yum install -y grpc-plugins +yum install -y protobuf-devel +yum install -y jsoncpp +yum install -y jsoncpp-devel +yum install -y llvm-mlir +yum install -y llvm-mlir-devel +yum install -y llvm-devel +``` + +## Installing PIN + +### Performing Installation + +#### Installing the PIN GCC Client + +```shell +yum install -y pin-gcc-client +``` + +#### Installing the PIN Server + +```shell +yum install -y pin-server +``` + +### Build + +#### Building the PIN GCC Client + +```shell +git clone https://gitee.com/openeuler/pin-gcc-client.git +cd pin-gcc-client +mkdir build +cd build +cmake ../ -DMLIR_DIR=${MLIR_PATH} -DLLVM_DIR=${LLVM_PATH} +make +``` + +#### Building the PIN Server + +```shell +git clone https://gitee.com/openeuler/pin-server.git +cd pin-server +mkdir build +cd build +cmake ../ -DMLIR_DIR=${MLIR_PATH} -DLLVM_DIR=${LLVM_PATH} +make +``` + +# Usage + +You can use `-fplugin` and `-fplugin-arg-libpin_xxx` to enable the Plug-IN (PIN) tool. +Command: + +```shell +$(TARGET): $(OBJS) + $(CXX) -fplugin=${CLIENT_PATH}/libpin_gcc_client.so \ + -fplugin-arg-libpin_gcc_client-server_path=${SERVER_PATH}/pin_server \ + -fplugin-arg-libpin_gcc_client-log_level="1" \ + -fplugin-arg-libpin_gcc_client-arg1="xxx" +``` + +You can use the `${INSTALL_PATH}/bin/pin-gcc-client.json` file to configure PIN. The configuration options are as follows: + +* `path`: path of the executable file of the PIN server. +* `sha256file`: path of the PIN verification file `xxx.sha256`. +* `timeout`: timeout interval for cross-process communication, in milliseconds. + +Compile options: + +* `-fplugin`: path of the .so file of the PIN client. +* `-fplugin-arg-libpin_gcc_client-server_path`: path of the executable program of the PIN server. +* `-fplugin-arg-libpin_gcc_client-log_level`: default log level. The value ranges from `0` to `3`. The default value is `1`. +* `-fplugin-arg-libpin_gcc_client-argN`: other parameters that can be specified as required. `argN` indicates the argument required by PIN. + +# Compatibility + +This section describes the compatibility issues in some special scenarios. This project is in continuous iteration and will be fixed as soon as possible. Developers are welcome to join this project. + +* When PIN is enabled in the `-flto` phase, multi-process compilation using `make -j` is not supported. You are advised to use `make -j1` for compilation. diff --git a/docs/en/tools/community_tools/uadk/_toc.yaml b/docs/en/tools/community_tools/uadk/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d46a660f3de75e20f2e55c82ea37baa4f964d031 --- /dev/null +++ b/docs/en/tools/community_tools/uadk/_toc.yaml @@ -0,0 +1,6 @@ +label: UADK Quick Start +isManual: true +description: Install and use UADK on openEuler +sections: + - label: UADK Quick Start + href: ./uadk_quick_start.md diff --git a/docs/en/tools/community_tools/uadk/public_sys-resources/icon-note.gif b/docs/en/tools/community_tools/uadk/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/tools/community_tools/uadk/public_sys-resources/icon-note.gif differ diff --git a/docs/en/tools/community_tools/uadk/uadk_quick_start.md b/docs/en/tools/community_tools/uadk/uadk_quick_start.md new file mode 100644 index 0000000000000000000000000000000000000000..79a62e2078a07bffe174be0e89af77fbe4a3a373 --- /dev/null +++ b/docs/en/tools/community_tools/uadk/uadk_quick_start.md @@ -0,0 +1,705 @@ +# UADK Quick Start Guide + +## Overview + +This chapter describes how to quickly start using UADK and the UADK engine. + +### UADK + +UADK is a general-purpose user space accelerator framework that uses shared virtual addressing (SVA) to provide a unified programming interface for hardware acceleration of cryptographic and compression algorithms. UADK includes Unified/User-space-access-intended Accelerator Framework (UACCE), which enables hardware accelerators from different vendors that support SVA to adapt to UADK. + +UADK consists of UACCE, vendors' drivers, and an algorithm layer. UADK requires the hardware accelerator to support SVA, and the operating system to support IOMMU and SVA. Hardware accelerators from different vendors are registered as different character devices with UACCE by using kernel-mode drivers of the vendors. A user can access the hardware accelerators by performing user-mode operations on the character devices. UADK provides an algorithm layer for invoking the cryptographic and compression algorithms in a unified manner. Currently, UADK supports the following algorithms: + +- AES, SM4, DES, SM3, SHA*x*, MD5, AEAD and HMAC +- RSA and DH +- gzip and zlib + +Currently, Kunpeng hardware accelerators have been registered with UACCE. Through the UADK framework, users can run cryptographic and compression algorithms using hardware accelerators instead of CPUs, freeing up CPU computing power and improving computing performance. + +### UADK Engine + +The UADK engine is an upper-layer application of UADK developed based on the OpenSSL engine mechanism. The UADK engine provides the function of using hardware accelerators through the OpenSSL command line tools and OpenSSL standard interface to quickly migrate existing services. + +The UADK engine consists of five sub-modules: RSA engine, DH engine, ECC engine, Cipher engine, and Digest engine. After hardware accelerators from different vendors are registered with UADK as devices, you can use the OpenSSL command line tools or OpenSSL standard interface through the UADK engine to obtain the hardware acceleration functions of the devices. The engine ID is **uadk_engine**. The sub-modules and functions of the UADK engine are as follows: + +- RSA engine: supports key generation, asymmetric encryption and decryption, and digital signature. +- DH engine: supports key negotiation. +- ECC engine: generates data verification codes. +- Cipher engine: supports symmetric encryption and decryption. +- Digest engine: generates message digests. + +After a Kunpeng hardware accelerator is registered with UADK, you can use the OpenSSL command line tools or OpenSSL standard interface to use the functions of the Kunpeng hardware accelerator through the UADK engine. + +### Application Scenarios + +Big data, data confidentiality, intelligent security, web services, and distributed storage. + +--- + +## Usage Requirements + +This section uses the Kunpeng hardware accelerator as an example to describe the usage requirements of UADK and the UADK engine. The usage requirements of other vendors' hardware accelerators are similar. + +### Hardware + +A CPU of the Kunpeng 9*xx* series that has been registered with UADK. + +### Software + +#### Operating System + +openEuler 22.03 LTS or later. +The OS kernel must support the IOMMU and SVA features. + +#### Other Software Packages + +OpenSSL 1.1.1a or later. + +### Toolchain + +Compiler used to build UADK and the UADK engine: + +GCC 10.2.0 + +--- + +## Installation and Deployment + +This section uses the Kunpeng hardware accelerator as an example to describe how to install, upgrade, and uninstall UADK and the UADK engine. The installation, upgrade, and uninstallation of hardware accelerators from other vendors are similar. The kernel-mode driver of the Kunpeng hardware accelerator and the user-mode driver of UADK need to be used together. Perform the operations in sequence. + +### Installing and Deploying UADK + +The UADK algorithm library can be installed using the Yum source or RPM package, or built from source. You can select an installation method as required. + +#### Installing Using the Yum Source + +On openEuler 22.03 LTS SP4 or later, run the following command to install UADK from the Yum source: + +```shell +yum install libwd +``` + +#### Installing Using the RPM Package + +Obtain the [UADK RPM package](https://gitee.com/src-openeuler/libwd) from the openEuler community. + +The installation commands are as follows: + +```shell +cd /usr/src/ +git clone https://gitee.com/src-openeuler/libwd.git +mkdir -p /root/rpmbuild +cd /root/rpmbuild +mkdir BUILD BUILDROOT RPMS SOURCES SPECS SRPMS +cp /usr/src/libwd/libwd*.tar.gz /usr/src/libwd/*patch /root/rpmbuild/SOURCES/ +cp /usr/src/libwd/warpdrive.spec /root/rpmbuild/SPECS/ +rpmbuild --bb SPECS/warpdrive.spec +rpm -ivh /root/rpmbuild/RPMS/aarch64/libwd*.rpm +``` + +#### Building from Source + +Obtain the [UADK source code](https://github.com/Linaro/uadk) from the Linaro community. + +For details about how to build, install, and configure UADK, visit +. + +### Loading the UACCE Driver + +Before loading the hardware accelerator driver of the vendor, you need to load **uacce.ko**. + +Run `modprobe uacce` or `insmod /lib/modules/$(uname -r)/uacce.ko` to load **uacce.ko**. + +### Loading the Accelerator Driver of the Vendor + +The following uses the Kunpeng hardware accelerator as an example to describe how to load a driver. + +| Accelerator Module | Module Loading Sequence | +| ------------------ | ---------------------------------- | +| HPRE | uacce.ko, hisi_qm.ko, hisi_hpre.ko | +| ZIP | uacce.ko, hisi_qm.ko, hisi_zip.ko | +| SEC | uacce.ko, hisi_qm.ko, hisi_sec2.ko | + +>[!NOTE] **Note:** +>When loading **hisi_hpre.ko**, **hisi_zip.ko**, or **hisi_sec2.ko**, you can specify **uacce_mode**. `uacce_mode=1` indicates the SVA mode. `uacce_mode=2` indicates the no-SVA mode. +>The user-mode driver of the Kunpeng hardware accelerator depends on the UACCE framework (while the kernel-mode driver does not). Therefore, you need to load **uacce.ko** first. The ZIP, HPRE, and SEC modules of the Kunpeng hardware accelerator depend on the QM module for queue management. Therefore, after loading **uacce.ko**, you need to load **hisi_qm.ko**, and then load the drivers of the ZIP, HPRE, and SEC modules. + +You can use the insmod or modprobe tool to load the drivers. + +To load the drivers using the modprobe tool, perform the following steps: + +- Load the user-mode driver of the HPRE module in SVA mode. + + ```shell + modprobe hisi_hpre uacce_mode=1 + ``` + +- Load the user-mode driver of the SEC module in SVA mode. + + ```shell + modprobe hisi_sec2 uacce_mode=1 + ``` + +- Load the user-mode driver of the ZIP module in SVA mode. + + ```shell + modprobe hisi_zip uacce_mode=1 + ``` + +To load the drivers using the insmod tool, perform the following steps: + +- Load the user-mode driver of the HPRE module in SVA mode. + + ```shell + insmod /lib/modules/$(uname -r)/uacce.ko + insmod /lib/modules/$(uname -r)/hisi_qm.ko + insmod /lib/modules/$(uname -r)/hisi_hpre.ko uacce_mode=1 + ``` + +- Load the user-mode driver of the SEC module in SVA mode. + + ```shell + insmod /lib/modules/$(uname -r)/uacce.ko + insmod /lib/modules/$(uname -r)/hisi_qm.ko + insmod /lib/modules/$(uname -r)/hisi_sec2.ko uacce_mode=1 + ``` + +- Load the user-mode driver of the ZIP module in SVA mode. + + ```shell + insmod /lib/modules/$(uname -r)/uacce.ko + insmod /lib/modules/$(uname -r)/hisi_qm.ko + insmod /lib/modules/$(uname -r)/hisi_zip.ko uacce_mode=1 + ``` + + Module parameter configuration: + +When loading the drivers, you can set the module parameters in any sequence. After configuring the module parameters and loading the driver, you can query the module parameters by using the `cat /sys/bus/pci/drivers//module/parameters/` command. The module parameters cannot be updated after the driver is loaded. To modify the module parameters, you need to unload the driver, set the new module parameters, and reload the driver. + +- The formats of the module parameter configuration commands are as follows: + + ```shell + insmod [uacce_mode] [pf_q_num] [vfs_num] [sgl_sge_nr] [ctx_q_num] + ``` + + ```shell + modprobe [uacce_mode] [pf_q_num] [vfs_num] [sgl_sge_nr] [ctx_q_num] + ``` + + - The parameters in square brackets ([]) are optional and have default values. The parameters can be in any sequence. + - The default value of **uacce_mode** for all modules is **0**, indicating that the user mode is not supported. Therefore, you need to set **uacce_mode=1** for users in user mode. + - The default value of **pf_q_num** for the SEC module is **256**. The default value of **pf_q_num** for the HPRE or ZIP module is **64**. + - The default value of **vfs_num** for all modules is **0**. + - The default value of **sgl_sge_nr** for all modules is **10**. + - The default value of **ctx_q_num** for all modules is **2**. + + For example, if you choose not to use the default values when loading the ZIP driver, run the following command to manually configure the parameters: + + ```shell + insmod /lib/modules/$(uname -r)/hisi_zip.ko uacce_mode=1 pf_q_num =16 vfs_num=1 sgl_sge_nr=16 + ``` + + - If only the SVA feature is required for the first time, set **uacce_mode=1**. + +### Unloading the Accelerator Driver of the Vendor + +The following uses the Kunpeng hardware accelerator as an example to describe how to unload a driver. To unload a driver, run the following command: + +```shell +modprobe -r hisi_hpre +``` + +or + +```shell +rmmod hisi_hpre +``` + +### Installing and Deploying the UADK Engine + +The UADK engine can be installed using the Yum source or RPM package, or built from source. You can select an installation method as required. + +#### Installing Using the Yum Source + +On openEuler 22.03 LTS SP4, run the following command to install the UADK engine using the Yum source: + +```shell +yum install uadk_engine +``` + +#### Installing Using the RPM Package + +Obtain the [UADK engine RPM package](https://gitee.com/src-openeuler/uadk_engine) from the openEuler community. + +The installation commands are as follows: + +```shell +cd /usr/src/ +git clone https://gitee.com/src-openeuler/uadk_engine.git +mkdir -p /root/rpmbuild +cd /root/rpmbuild +mkdir BUILD BUILDROOT RPMS SOURCES SPECS SRPMS +cp /usr/src/uadk_engine/uadk_engine*.tar.gz /usr/src/uadk_engine/*patch /root/rpmbuild/SOURCES/ +cp /usr/src/uadk_engine/uadk_engine.spec /root/rpmbuild/SPECS/ +rpmbuild --bb SPECS/uadk_engine.spec +rpm -ivh /root/rpmbuild/RPMS/aarch64/uadk_engine*.rpm --prefix=/usr/local/openssl/lib/engines-1.1 +``` + +#### Building from Source + +Obtain the [UADK engine source code](https://github.com/Linaro/uadk_engine) from the Linaro community. + +For details about how to build and install the UADK engine, visit +. + +--- + +## Getting Started + +### Using UADK + +UADK provides a performance test tool. After UADK is built and installed, a tool named uadk_tool is generated. You can view the usage and parameter description of the performance test tool using the `uadk_tool benchmark --help` command. + +#### Enabling Environment Variables + +Run the `export` commands to set the numbers of queues. + +```shell +export WD_RSA_CTX_NUM="sync:2@0,async:4@0" +export WD_DH_CTX_NUM="sync:2@0,async:4@0" +export WD_CIPHER_CTX_NUM="sync:2@2,async:4@2" +export WD_DIGEST_CTX_NUM="sync:2@2,async:4@2" +``` + +The input parameter format of the environment variables is **ctx_mode:ctx_num@node**, indicating that a number of *ctx_num* queues in *ctx_mode* are set on the NUMA node whose index is *node*. +For example, **"sync:2@0,async:4@0"** indicates that two queues in sync mode and four queues in async mode are set on the NUMA 0 node. + +#### Performing Performance Tests + +- MD5 performance test + + Test the digest calculation performance of MD5 in SVA mode. + + ```shell + uadk_tool benchmark --alg md5 --mode sva --opt 0 --sync --seconds 5 --thread 2 --multi 1 --ctxnum 6 + ``` + +- SM3 performance test + + Test the digest calculation performance of SM3 in SVA mode. + + ```shell + uadk_tool benchmark --alg sm3 --mode sva --opt 0 --sync --seconds 5 --thread 2 --multi 1 --ctxnum 6 + ``` + +- SHA performance test + + Test the digest calculation performance of SHA-512 in SVA mode. + + ```shell + uadk_tool benchmark --alg sha-512 --mode sva --opt 0 --sync --seconds 5 --thread 2 --multi 1 --ctxnum 6 + ``` + +- AES performance test + + Test the performance of AES-128-CBC encryption in SVA mode. + + ```shell + uadk_tool benchmark --alg aes-128-cbc --mode sva --opt 0 --sync --pktlen 1024 --seconds 5 --multi 1 --thread 2 --ctxnum 6 + ``` + + Test the performance of AES-128-CBC decryption in SVA mode. + + ```shell + uadk_tool benchmark --alg aes-128-cbc --mode sva --opt 1 --sync --pktlen 1024 --seconds 5 --multi 1 --thread 2 --ctxnum 6 + ``` + +- SM4 performance test + + Test the performance of SM4-128-ECB encryption in SVA mode. + + ```shell + uadk_tool benchmark --alg sm4-128-ecb --mode sva --opt 0 --sync --pktlen 1024 --seconds 5 --multi 1 --thread 2 --ctxnum 6 + ``` + + Test the performance of SM4-128-ECB decryption in SVA mode. + + ```shell + uadk_tool benchmark --alg sm4-128-ecb --mode sva --opt 1 --sync --pktlen 1024 --seconds 5 --multi 1 --thread 2 --ctxnum 6 + ``` + +- DES performance test + + Test the performance of 3DES-128-ECB encryption in SVA mode. + + ```shell + uadk_tool benchmark --alg 3des-128-ecb --mode sva --opt 0 --sync --pktlen 1024 --seconds 5 --multi 1 --thread 2 --ctxnum 6 + ``` + + Test the performance of 3DES-128-ECB decryption in SVA mode. + + ```shell + uadk_tool benchmark --alg 3des-128-ecb --mode sva --opt 1 --sync --pktlen 1024 --seconds 5 --multi 1 --thread 2 --ctxnum 6 + ``` + + For other test scenarios, use the `uadk_tool benchmark --help` command to view the parameter and configuration description. + +### Using the UADK Engine + +You can use the OpenSSL command line tools to directly invoke the UADK engine. Use the help menu of each OpenSSL tool to learn about how to use the tool. + +#### Enabling Environment Variables + +The UADK engine supports environment variables. You can set the numbers of queues for executing tasks as required. + +1. Add the following content to the beginning of the **openssl.cnf** file (usually in **/usr/local/ssl/**): + + ```text + openssl_cnf=openssl_def + [openssl_def] + engines=engine_section + [engine_section] + uadk_engine=uadk_section + [uadk_section] + UADK_CMD_ENABLE_RSA_ENV=1 + UADK_CMD_ENABLE_DH_ENV=1 + UADK_CMD_ENABLE_CIPHER_ENV=1 + UADK_CMD_ENABLE_DIGEST_ENV=1 + ``` + +2. Run the `export` commands to set the numbers of queues. + + ```shell + export WD_RSA_CTX_NUM="sync:2@0,async:4@0" + export WD_DH_CTX_NUM="sync:2@0,async:4@0" + export WD_CIPHER_CTX_NUM="sync:2@2,async:4@2" + export WD_DIGEST_CTX_NUM="sync:2@2,async:4@2" + ``` + + The input parameter format of the environment variables is **ctx_mode:ctx_num@node**, indicating that a number of *ctx_num* queues in *ctx_mode* are set on the NUMA node whose index is *node*. + For example, **"sync:2@0,async:4@0"** indicates that two queues in sync mode and four queues in async mode are set on the NUMA 0 node. + +#### Performing Function Tests + +- RSA function test + + Generate a private key. + + ```shell + openssl genrsa -out prikey.pem -engine uadk_engine 1024 + ``` + + Obtain a public key. + + ```shell + openssl rsa -in prikey.pem -pubout -out pubkey.pem -engine uadk_engine + ``` + + Assume that the file to be encrypted is **plain.txt**. + + ```shell + echo "Content to be encrypted" > plain.txt + ``` + + Encrypt the file. + + ```shell + openssl rsautl -encrypt -in plain.txt -inkey pubkey.pem -pubin -out enc.txt -engine uadk_engine + ``` + + Decrypt the file. + + ```shell + openssl rsautl -decrypt -in enc.txt -inkey prikey.pem -out dec.txt -engine uadk_engine + ``` + + Assume that the file to be signed is **msg.txt**. + + ```shell + echo "Content to be signed" > msg.txt + ``` + + Sign the file. + + ```shell + openssl rsautl -sign -in msg.txt -inkey prikey.pem -out signed.txt -engine uadk_engine + ``` + + Verify the signature. + + ```shell + openssl rsautl -verify -in signed.txt -inkey pubkey.pem -pubin -out verified.txt -engine uadk_engine + ``` + + Use the openssl speed tool to perform the test. + + ```shell + openssl speed -elapsed -engine uadk_engine rsa1024 + openssl speed -elapsed -engine uadk_engine -async_jobs 10 rsa1024 + openssl speed -elapsed -engine uadk_engine -async_jobs 36 rsa1024 + ``` + +- DH function test + + Generate a global public key parameter. + + ```shell + openssl dhparam -out dhparam.pem 768 + ``` + + Generate Alice's private key. + + ```shell + openssl genpkey -paramfile dhparam.pem -out alice_prikey.pem -engine uadk_engine + ``` + + Obtain Alice's public key. + + ```shell + openssl pkey -in alice_prikey.pem -pubout -out alice_pubkey.pem + ``` + + Generate Bob's private key. + + ```shell + openssl genpkey -paramfile dhparam.pem -out bob_prikey.pem -engine uadk_engine + ``` + + Obtain Bob's public key. + + ```shell + openssl pkey -in bob_prikey.pem -pubout -out bob_pubkey.pem + ``` + + Exchange public keys and generate negotiated keys. + + ```shell + openssl pkeyutl -derive -inkey alice_prikey.pem -peerkey bob_pubkey.pem -out secret1.bin -engine uadk_engine + openssl pkeyutl -derive -inkey bob_prikey.pem -peerkey alice_pubkey.pem -out secret2.bin -engine uadk_engine + ``` + + Compare the negotiated shared keys. + + ```shell + cmp secret1.bin secret2.bin + xxd secret1.bin + xxd secret2.bin + ``` + +- MD5 function test + + Assume that the digest file to be calculated is **data.txt**. + + ```shell + echo "Content to be hashed" > data.txt + ``` + + Calculate the digest. + + ```shell + openssl md5 -engine uadk_engine data.txt + ``` + + Use the openssl speed tool to perform the test. + + ```shell + openssl speed -engine uadk_engine -async_jobs 1 -evp md5 + ``` + +- SM3 function test + + Assume that the digest file to be calculated is **data.txt**. + + ```shell + echo "Content to be hashed" > data.txt + ``` + + Calculate the digest. + + ```shell + openssl sm3 -engine uadk_engine data.txt + ``` + +- SHA function test + + Assume that the digest file to be calculated is **data.txt**. + + ```shell + echo "Content to be hashed" > data.txt + ``` + + Calculate the digest. + + ```shell + openssl sha1 -engine uadk_engine data.txt + openssl sha256 -engine uadk_engine data.txt + openssl sha512 -engine uadk_engine data.txt + ``` + +- AES function test + + Assume that the file to be encrypted is **data.txt**. + + ```shell + echo "Content to be encrypted" > data + ``` + + Use AES-128-CBC to encrypt the file. + + ```shell + openssl enc -aes-128-cbc -a -in data -out data.en -pass pass:123456 -K abc -iv abc -engine uadk_engine -p + ``` + + Use AES-128-CBC to decrypt the file. + + ```shell + openssl enc -aes-128-cbc -a -d -in data.en -out data.de -pass pass:123456 -K abc -iv abc -engine uadk_engine -p + ``` + + Use AES-192-CBC to encrypt the file. + + ```shell + openssl enc -aes-192-cbc -a -in data -out data.en -pass pass:123456 -K abc -iv abc -engine uadk_engine -p + ``` + + Use AES-192-CBC to decrypt the file. + + ```shell + openssl enc -aes-192-cbc -a -d -in data.en -out data.de -pass pass:123456 -K abc -iv abc -engine uadk_engine -p + ``` + + Use AES-256-CBC to encrypt the file. + + ```shell + openssl enc -aes-256-cbc -a -in data -out data.en -pass pass:123456 -K abc -iv abc -engine uadk_engine -p + ``` + + Use AES-256-CBC to decrypt the file. + + ```shell + openssl enc -aes-256-cbc -a -d -in data.en -out data.de -pass pass:123456 -K abc -iv abc -engine uadk_engine -p + ``` + + Use AES-128-ECB to encrypt the file. + + ```shell + openssl enc -aes-128-ecb -a -in data -out data.en -pass pass:123456 -K abc -engine uadk_engine -p + ``` + + Use AES-128-ECB to decrypt the file. + + ```shell + openssl enc -aes-128-ecb -a -d -in data.en -out data.de -pass pass:123456 -K abc -engine uadk_engine -p + ``` + + Use AES-192-ECB to encrypt the file. + + ```shell + openssl enc -aes-192-ecb -a -in data -out data.en -pass pass:123456 -K abc -engine uadk_engine -p + ``` + + Use AES-192-ECB to decrypt the file. + + ```shell + openssl enc -aes-192-ecb -a -d -in data.en -out data.de -pass pass:123456 -K abc -engine uadk_engine -p + ``` + + Use AES-256-ECB to encrypt the file. + + ```shell + openssl enc -aes-256-ecb -a -in data -out data.en -pass pass:123456 -K abc -engine uadk_engine -p + ``` + + Use AES-256-ECB to decrypt the file. + + ```shell + openssl enc -aes-256-ecb -a -d -in data.en -out data.de -pass pass:123456 -K abc -engine uadk_engine -p + ``` + + Use AES-128-CTR to encrypt the file. + + ```shell + openssl enc -aes-128-ctr -a -in data -out data.en -pass pass:123456 -K abc -engine uadk_engine -p + ``` + + Use AES-128-CTR to decrypt the file. + + ```shell + openssl enc -aes-128-ctr -a -d -in data.en -out data.de -pass pass:123456 -K abc -engine uadk_engine -p + ``` + + Use AES-192-CTR to encrypt the file. + + ```shell + openssl enc -aes-192-ctr -a -in data -out data.en -pass pass:123456 -K abc -engine uadk_engine -p + ``` + + Use AES-192-CTR to decrypt the file. + + ```shell + openssl enc -aes-192-ctr -a -d -in data.en -out data.de -pass pass:123456 -K abc -engine uadk_engine -p + ``` + + Use AES-256-CTR to encrypt the file. + + ```shell + openssl enc -aes-256-ctr -a -in data -out data.en -pass pass:123456 -K abc -engine uadk_engine -p + ``` + + Use AES-256-CTR to decrypt the file. + + ```shell + openssl enc -aes-256-ctr -a -d -in data.en -out data.de -pass pass:123456 -K abc -engine uadk_engine -p + ``` + +- SM4 function test + + Use SM4-CBC to encrypt the file. + + ```shell + openssl enc -sm4-cbc -a -in data -out data.en -pass pass:123456 -K abc -iv abc -engine uadk_engine -p + ``` + + Use SM4-CBC to decrypt the file. + + ```shell + openssl enc -sm4-cbc -a -d -in data.en -out data.de -pass pass:123456 -K abc -iv abc -engine uadk_engine -p + ``` + + Use SM4-ECB to encrypt the file. + + ```shell + openssl enc -sm4-ecb -a -in data -out data.en -pass pass:123456 -K abc -iv abc -engine uadk_engine -p + ``` + + Use SM4-ECB to decrypt the file. + + ```shell + openssl enc -sm4-ecb -a -d -in data.en -out data.de -pass pass:123456 -K abc -iv abc -engine uadk_engine -p + ``` + +- DES function test + + Use DES-EDE3-CBC to encrypt the file. + + ```shell + openssl enc -des-ede3-cbc -a -in data -out data.en -pass pass:123456 -K abc -iv abc -engine uadk_engine -p + ``` + + Use DES-EDE3-CBC to decrypt the file. + + ```shell + openssl enc -des-ede3-cbc -a -d -in data.en -out data.de -pass pass:123456 -K abc -iv abc -engine uadk_engine -p + ``` + + Use DES-EDE3-ECB to encrypt the file. + + ```shell + openssl enc -des-ede3-ecb -a -in data -out data.en -pass pass:123456 -K abc -iv abc -engine uadk_engine -p + ``` + + Use DES-EDE3-ECB to decrypt the file. + + ```shell + openssl enc -des-ede3-ecb -a -d -in data.en -out data.de -pass pass:123456 -K abc -iv abc -engine uadk_engine -p + ``` diff --git a/docs/en/tools/desktop/_toc.yaml b/docs/en/tools/desktop/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b3bde1361480045b9b8fe79034f1184468d1912e --- /dev/null +++ b/docs/en/tools/desktop/_toc.yaml @@ -0,0 +1,9 @@ +label: Desktop Environments +sections: + - href: ./gnome/_toc.yaml + - href: ./ukui/_toc.yaml + - href: ./dde/_toc.yaml + - href: ./kiran/_toc.yaml + - href: ./i3/_toc.yaml + - href: ./kubesphere/_toc.yaml + - href: ./xfce/_toc.yaml diff --git a/docs/en/tools/desktop/dde/_toc.yaml b/docs/en/tools/desktop/dde/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..68de4ee90939c64671081da29052195b1bb90e8a --- /dev/null +++ b/docs/en/tools/desktop/dde/_toc.yaml @@ -0,0 +1,8 @@ +label: DDE User Guide +isManual: true +description: Install and use DDE +sections: + - label: Installing DDE + href: ./dde_installation.md + - label: Using DDE + href: ./dde_userguide.md diff --git a/docs/en/tools/desktop/dde/dde_installation.md b/docs/en/tools/desktop/dde/dde_installation.md new file mode 100644 index 0000000000000000000000000000000000000000..7831ab06c45bab96e456a231e622d53c0d39312a --- /dev/null +++ b/docs/en/tools/desktop/dde/dde_installation.md @@ -0,0 +1,42 @@ +# DDE Installation + +## Introduction + +DDE is a powerful desktop environment developed by UnionTech. It contains dozens of self-developed desktop applications. + +## Procedure + +1. [Download](https://openeuler.org/en/download/) the openEuler ISO file and install the OS. + +2. Update the software source. + + ```bash + sudo dnf update + ``` + +3. Install DDE. + + ```bash + sudo dnf install dde + ``` + +4. Set the system to start with the graphical interface. + + ```bash + sudo systemctl set-default graphical.target + ``` + +5. Reboot the system. + + ```bash + sudo reboot + ``` + +6. After the reboot is complete, use the user created during the installation process or the **openeuler** user to log in to the desktop. + + > ![notes](./figures/icon99-o.svg)Notes: + > + > DDE does not allow login as the root user. + > DDE has a built-in openeuler user whose password is openeuler. + +Now you can use DDE. diff --git a/docs/en/tools/desktop/dde/dde_userguide.md b/docs/en/tools/desktop/dde/dde_userguide.md new file mode 100644 index 0000000000000000000000000000000000000000..9db606efe927d2c77aba057e389200037db1b7c4 --- /dev/null +++ b/docs/en/tools/desktop/dde/dde_userguide.md @@ -0,0 +1,850 @@ + +# DDE Desktop Environment + +## Overview + +DDE desktop environment is an elegant, secure, reliable and easy to use GUI comprised of the desktop, dock, launcher and control center. Acting as the key basis for our operating system, its main interface is shown as below. + +![1|desk](./figures/43.jpg) + +### Getting Started + +When you enter DDE for the very first time, a welcome program will automatically start. You can watch the introduction video, select your desktop style and icon theme, and learn more about the system functions. + +![0|welcome](./figures/46.png) + +## Desktop + +Desktop is the main screen you see after logging in. On the desktop, you can create a new file/folder, sort files, open in terminal, set wallpaper and screensaver and etc. You can also add shortcuts for applications on desktop by using [Send to desktop](#set-app-shortcut). + +![0|contextmenu](./figures/41.png) + +### Create New Folder/Document + +Just as in File Manager, you can create a new folder/document on the desktop, or do some operations for the files on it. + +- Right-click the desktop, select **New folder** and enter the name for it. +- Right-click the desktop, select **New document**, select the type and enter its name. + +Right-click a file or folder on the desktop, and use the features of File Manager as below: + +| Function | Description | +| ---------------- | ------------------------------------------------------------ | +| Open with | Select an app to open it. | +| Cut | Move it to another location. | +| Copy | Copy it to another location. | +| Rename | Change its name. | +| Delete | Delete and move it to the trash. | +| Create link | Create a shortcut of the file or folder. | +| Tag information | Add a tag. | +| Compress/Extract | Compress the file or folder, or extract the compressed file. | +| Properties | View the basic info, share it or change the permission. | + +### Sort Files + +Sort the files on your desktop to make it organized and fit your needs. + +1. Right-click the desktop. +2. Click **Sort by**, you can: + +- Click **Name** to display files in the name sequence. +- Click **Size** to display files in the size sequence. +- Click **Type** to display files in type. +- Click **Time modified** to display files in the order of last modified date. + +> ![tips](./figures/icon125-o.svg)Tips: *Check **Auto arrange**, icons on the desktop will be listed in order automatically, and if an icon is removed, another one will fill in the blank.* + +### Adjust Icon Size + +1. Right-click the desktop. +2. Click **Icon size**, and choose a proper size. + +> ![tips](./figures/icon125-o.svg)Tips: *Press **Ctrl** + ![=](./figures/icon134-o.svg)/![-](./figures/icon132-o.svg) scrolling mouse wheel to adjust icon size on the desktop and in Launcher.* + +### Set Display + +You can set display scaling, screen resolution, brightness and so on from the desktop. + +1. Right-click the desktop. +2. Click **Display Settings** to open the settings in Control Center. + +> ![notes](./figures/icon99-o.svg)Notes: *For specific operations, please refer to [Display](#display).* + +### Change Wallpaper + +Select some elegant and fashionable wallpapers to beautify your desktop and make it distinctive. + +1. Right-click the desktop. +2. Click **Wallpaper and Screensaver** to preview all the wallpapers. +3. Click your favorite one and it will apply in your desktop and screen lock. +4. You can also choose **Only desktop** or **Only lock screen**. + +![1|wallpaper](./figures/63.jpg) + +> ![tips](./figures/icon125-o.svg)Tips: *You can also set your favorite picture as wallpaper in an image viewer.* + +### Clipboard + +All the texts, pictures and documents cut and copied by the current user after login are displayed in the clipboard, which can be copied quickly by double-clicking the clipboard. The clipboard is cleared automatically after logout and shutdown. + +1. Use the shortcuts **Ctrl**+**Alt**+ **V** to wake up the clipboard. + +2. Double-click in the clipboard to copy the current content quickly and the corresponding block will be moved to the top of the clipboard. + +3. Select the target destination to paste it. + +4. Click![close](./figures/icon57-o.svg)to delete the current content and click **Clear All** to clear the clipboard. + + ![1|clipboard](./figures/40.png) + +## Dock + +Dock is at the bottom of the desktop by default to help you quickly open frequently-used applications, which includes Launcher, applications, system tray, and plugins. In the dock, you can open launcher, show the desktop, enter the workspaces, open and exit apps, set input methods, adjust the volume, connect to the network, view the calendar and enter the shutdown interface, and so on. + +### Icons on Dock + +In the Dock, there are icons of Launcher, applications, system tray, and plugins. + +![1|fashion](./figures/45.png) + +| Icon | Description | +| ---- | ---- | +| ![launcher](./figures/icon66-o.svg) | Launcher - click to view all the installed applications. | +| ![deepin-toggle-desktop](./figures/icon69-o.svg) | Click to show the desktop. | +| ![dde-file-manager](./figures/icon63-o.svg) | File Manager - click to view files and folders on the disk. | +| ![dde-calendar](./figures/icon62-o.svg) | Calendar - view dates and create new schedules. | +| ![controlcenter](./figures/icon58-o.svg) | Control Center - click to check or change system settings. | +| ![notification](./figures/icon101-o.svg) | Notification Center - show all notifications from the system and applications. | +| ![onboard](./figures/icon103-o.svg) | Onboard virtual keyboard. | +| ![shutdown](./figures/icon122-o.svg) | Click to enter the shutdown interface. | +| ![trash](./figures/icon126-o.svg) | Trash. | + +> ![tips](./figures/icon125-o.svg)Tips: *In Efficient Mode, you can click the right side of Dock to show the desktop. Move the cursor to the running app in the Dock and you will see its preview window.* + +### Switch Display Mode + +There are two display modes of Dock: fashion mode and efficient mode, icon sizes are different in them. + +![1|fashion](./figures/46.png) + +![1|efficient](./figures/63.png) + +You can switch the display modes by the following operations: + +1. Right-click the Dock and select **Mode**. +2. Select the display mode. + +### Change Dock Location + +You can place Dock on any direction of your desktop. + +1. Right-click the Dock and select **Location**. +2. Select a location. + +### Change Dock Height + +Drag the top edge to increase or decrease the height. + +### Show/Hide Plugins + +1. Right-click the Dock and select **Plugins**. +2. On the submenu, you can check or uncheck **Trash, Power, Show Desktop, Onboard**, and **Datetime** to show or hide the corresponding icon in the Dock. + +### View Notifications + +When there are system or application notifications, they will be shown in the middle of the screen. If there are buttons in the message, click buttons to do the actions; if there are not, click the message to close it. + +![notification](./figures/51.png) + +Click notification in Dock to view all the notifications. + +### View Date and Time + +- Hover the cursor over the Time icon in Dock to view the current time, date and day of the week. +- Click the Time icon to open Calendar. + +### Enter Shutdown Interface + +There are two ways to enter the shutdown interface: + +- Click ![shutdown](./figures/icon122-o.svg) in Dock. +- Click ![poweroff_normal](./figures/icon136-o.svg) at the bottom right corner of Launcher mini mode. + +| Function | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| Shut down ![poweroff_normal](./figures/icon136-o.svg) | Shut down the computer. | +| Reboot ![reboot_normal](./figures/icon110-o.svg) | Restart the computer. | +| Lock ![lock_normal](./figures/icon90-o.svg) | Lock the computer with the password. Or press **Super** + **L** to lock it. | +| Switch user ![userswitch_normal](./figures/icon128-o.svg) | Log in with another user account. | +| Log out ![logout_normal](./figures/icon92-o.svg) | End all the processes and initialize the system. | +| Start system monitor![deepin-system-monitor](./figures/icon68-o.svg) | View the running processes and end the one you want. | + +> ![notes](./figures/icon99-o.svg)Notes: ![userswitch_normal](./figures/icon128-o.svg) *will be shown if there are multiple accounts in the system.* + +### Trash + +You can find all deleted files in the trash, which can be restored or emptied. + +#### Restore Files + +You can restore deleted files in Trash or press **Ctrl** + **Z** to restore the lately deleted files. + +1. Select the file in the trash. +2. Right-click the file and select **Restore**. +3. The file will be in its original path. + +> ![attention](./figures/icon52-o.svg)Attention: *If the original folder of the file has been deleted, the deleted file will be restored to a new folder automatically created.* + +#### Empty Trash + +In the trash, click **Empty** to permanently delete all the files in the trash. + +## Launcher + +Launcher ![launcher](./figures/icon66-o.svg) helps you manage all the installed applications, where you can quickly find an application by category navigation or by a search. + +> ![tips](./figures/icon125-o.svg)Tips: *You can view newly installed applications in Launcher. The newly-installed ones are followed with a blue dot.* + +### Switch Launcher Modes + +There are two display modes of Launcher: fullscreen mode and mini mode. Click the icon at the upper right corner to switch modes. + +Both modes support searching applications and sending them to the desktop or Dock. + +The mini mode also supports opening File Manager, Control Center and shutdown interface directly. + +![1|fullscreen](./figures/47.jpg) +![1|mini](./figures/52.png) + +### Sort Applications + +In fullscreen mode, all applications in Launcher are listed by the installation time by default. You can sort the application icons as the ways below: + +- Hover the cursor over an application icon, hold down the left key of mouse, drag and drop the application icon to arrange it freely. +- Click the category icon ![category](./figures/icon56-o.svg) on the upper left in Launcher to arrange the icons by category. + +![1|sortapp](./figures/60.jpg) + +In mini mode, applications are displayed according to using frequency by default. + +### Find Applications + +In Launcher, you can scroll up and down to find an application, or locate it with the category navigation. + +If you already know the application name, just search for it. + +### Set App Shortcut + +The shortcut offers a method to run applications easily and quickly. + +#### Create App Shortcut + +Send the application icon to the desktop or Dock to facilitate the follow-up operations. + +In Launcher, right-click an app icon and you can: + +- Select **Send to desktop** to create a shortcut on the desktop. +- Select **Send to dock** to fix the application icon in Dock. + +![0|sendto](./figures/58.png) + +> ![notes](./figures/icon99-o.svg)Notes: *You can drag the application icon from Launcher to Dock. But you cannot drag and drop the application while it is running. Then you can right-click the application icon in Dock and select **Dock** to fix it in order to open it quickly for the next time.* + +#### Delete Shortcut + +Delete a shortcut from the desktop directly, or remove it from Dock or Launcher. + +**Remove the shortcut from Dock:** + +- Hold down the left key of mouse, drag and drop the icon away from Dock. +- You cannot drag and drop the application icon while it is running. Then you can right-click the application icon in Dock and select **Undock** to remove it from Dock. + +**Remove the shortcut from Launcher:** + +In Launcher, right-click the icon and you can: + +- Select **Remove from desktop** to delete the shortcut from the desktop. +- Select **Remove from dock** to remove the application icon from Dock. + +> ![notes](./figures/icon99-o.svg)Notes: *The above operations only delete the shortcut rather than uninstall the applications.* + +### Run Applications + +For the applications whose shortcuts have been created on the desktop or Dock, you can open them in the following ways: + +- Double-click the desktop icon or right-click it and select **Open**. +- Click the application icon in Dock or right-click it and select **Open**. + +To open the application only shown in Launcher, click the icon or right-click it and select **Open**. + +> ![tips](./figures/icon125-o.svg)Tips: *For the frequently-used applications, right-click the app icon and select **Add to startup** to run it when the computer boots.* + +## Control Center + +You can manage the system settings in Control Center, including account management, network settings, date and time, personalization, display settings, etc. After entering the desktop environment, click ![controlcenter](./figures/icon58-o.svg) to open Control Center. + +### Homepage Introduction + +The homepage of Control Center provides several setting modules and click one to enter the detailed settings. + +![0|dcchomepage](./figures/42.png) + +Once you open a setting module in Control Center, the navigation appears on the left. Click the left navigation to quickly switch to other settings. + +![0|cc-navigation](./figures/39.png) + +#### Title Bar + +The title bar contains the back button, search box, main menu and the window buttons. + +- Back button: Click ![back](./figures/icon53-o.svg) to go back to the homepage. +- Search box: Input a keyword and search the related settings. +- Main menu: Click ![menu](./figures/icon83-o.svg) to enter the main menu where you can set the window theme, view the manual and exit. + +### Accounts + +You have already created an account when installing the system. Here you can modify account settings or create a new one. + +![0|account](./figures/38.png) + +#### Create New Account + +1. On the homepage of Control Center, click ![account_normal](./figures/icon49-o.svg). +2. Click ![add](./figures/icon50-o.svg). +3. Input a username and a password twice. +4. Click **Create**. +5. Input the password of the current user account in the authentication dialog box, and the new account will be added to the account list. + +#### Change Account Avatar + +1. On the homepage of Control Center, click ![account_normal](./figures/icon49-o.svg). +2. Click an existing account in the list. +3. Click the user avatar. +4. Select a avatar or upload a local avatar. + +#### Set Full Name + +The account full name is shown in account list and system login interface and you can set it as needed. + +1. On the homepage of Control Center, click ![account_normal](./figures/icon49-o.svg). +2. Click an existing account in the list. +3. Click ![edit](./figures/icon75-o.svg) after **Full Name**, and input a name. + +#### Change Password + +1. On the homepage of Control Center, click ![account_normal](./figures/icon49-o.svg). + +2. Click the current account. + +3. Click **Change Password**. + +4. Input a new password twice and confirm. + +#### Delete Account + +1. On the homepage of Control Center, click ![account_normal](./figures/icon49-o.svg). +2. Click an account that's not logged in. +3. Click **Delete Account**. +4. Click **Delete** in the pop-up window. + +> ![attention](./figures/icon52-o.svg)Attention: *The logged in account cannot be deleted.* + +#### Privilege + +The first account has administrator privilege when you install the system. All other accounts you add after that are common users. One account can be grouped in many user groups. + +##### Group setting + +When you add or modify accounts, you can: + +- Select a group existing in the system. +- Select the group with the same name as the current user. +- Select the group with the same name as another user when the account was previously added. + +### Display + +Set screen resolution, brightness, direction and display scaling properly to have the best visual effect. + +![0|display](./figures/44.png) + +#### Single Screen Settings + +##### Change Resolution + +1. On the homepage of Control Center, click ![display_normal](./figures/icon72-o.svg). +2. Click **Resolution**. +3. Select a proper resolution in the list. +4. Click **Save**. + +##### Adjust Brightness + +1. On the homepage of Control Center, click ![display_normal](./figures/icon72-o.svg). +2. Click **Brightness**. + - Drag the slider to set screen brightness. + - Switch on **Night Shift**, the screen hue will be auto-adjusted according to your location. + - Switch on **Auto Brightness**, the monitor will change the brightness automatically according to ambient light (shown only if PC has a light sensor). + +##### Change Refresh Rate + +1. On the homepage of Control Center, click ![display_normal](./figures/icon72-o.svg). +2. Click **Refresh Rate**. +3. Select a proper one, and click **Save**. + +##### Change Display Direction + +1. On the homepage of Control Center, click ![display_normal](./figures/icon72-o.svg). +2. Click ![rotate](./figures/icon112-o.svg). +3. Every time you click, the screen will rotate 90 degrees counterclockwise. +4. To restore to the original direction, click the right button to exit; to use the current direction, press **Ctrl**+ **S** to save it. + +#### Multiple Screen Settings + +Expand your desktop by multiple screens! Use VGA/HDMI/DP cable to connect your computer to other display devices. + +1. On the homepage of Control Center, click ![display_normal](./figures/icon72-o.svg). +2. Click **Multiple Displays**. +3. Select a display mode: + - **Duplicate**: display the same image on other screens. + - **Extend**: expand the desktop across the screens. + - **Customize**: customize the display settings for multiple screens. + +In multiple displays, press **Super** + **P** to show its OSD. + +Operations are as follows: + +1. Hold **Super** and press **P** or click to select the options. +2. Release the keys, the selected mode will take into effect. + +>![notes](./figures/icon99-o.svg)Notes: *When the multiple displays are in the extend mode, only the main screen supports desktop icon display, right-click menu operation and other functions, while the sub-screens do not.* + +##### Custom Settings + +1. On the homepage of Control Center, click ![display_normal](./figures/icon72-o.svg). +2. Click **Multiple Displays** > **Customize**. +3. Click **Recognize**. +4. Choose **Merge** or **Split** the screens, specify the main screen, set the resolution and refresh rate, and rotate screen if you want. +5. Click **Save**. + +> ![notes](./figures/icon99-o.svg)Notes: *"Merge" means duplicate mode, "Split" means extend mode.* + +### Default Application Settings + +If you have installed several applications with similar functions, such as text editor, choose one of them to be the default application to open that type of file. + +![0|default](./figures/39.png) + +#### Set Default Application + +1. Right-click the file, choose **Open with** > **Set default program**. +2. Select one application, **Set as default** is checked by default, and click **Confirm**. +3. The application will automatically be added to the default application list in Control Center. + +#### Change Default Application + +1. On the homepage of Control Center, click ![default_applications_normal](./figures/icon70-o.svg). +2. Select a file type. +3. Select another one in the list as the default application. + +#### Add Default Application + +1. On the homepage of Control Center, click ![default_applications_normal](./figures/icon70-o.svg). +2. Select a file type. +3. Click ![add](./figures/icon50-o.svg) below to add a desktop file (usually at /usr/share/applications) or a specified binary file as the default application. +4. The application will be added to the list and set as default application automatically. + +#### Delete Default Application + +In the default application list, you can only delete the applications you added. To remove other applications from the list, the only way is to uninstall them. Once uninstalled, they will automatically be deleted from the list. + +To delete the default applications you have added, do as below: + +1. On the homepage of Control Center, click ![default_applications_normal](./figures/icon70-o.svg). +2. Select a file type. +3. Click ![close](./figures/icon57-o.svg) after the application name to delete it. + +### Personalization Settings + +You can set theme, accent color, font, change the appearance of the desktop and windows to your favorite style. + +![0|personalise](./figures/56.png) + +#### Set Window Theme + +1. On the homepage of Control Center, click ![personalization_normal](./figures/icon105-o.svg). +2. Click **General**. +3. Select one window theme, which will be used as system theme. + +> ![notes](./figures/icon99-o.svg)Notes: *"Auto" means changing window theme automatically according to the sunset and sunrise time. After sunrise, it is light theme; after sunset, it is dark theme.* + +#### Change Accent Color + +Accent color refers to the color used when you select one option or file in the system. + +1. On the homepage of Control Center, click ![personalization_normal](./figures/icon105-o.svg). +2. Click **General**. +3. Pick a color under **Accent Color** and view its effects. + +#### Set Icon Theme + +1. On the homepage of Control Center, click ![personalization_normal](./figures/icon105-o.svg). +2. Click **Icon Theme** and select an icon style. + +#### Set Cursor Theme + +1. On the homepage of Control Center, click ![personalization_normal](./figures/icon105-o.svg). +2. Click **Cursor Theme** and select a set of cursors. + +#### Change Font + +1. On the homepage of Control Center, click ![personalization_normal](./figures/icon105-o.svg). +2. Click **Font**. +3. Set the font and font size for the system. + +### Network Settings + +After login, you need to connect to a network first and then surf the Internet! + +> ![tips](./figures/icon125-o.svg)Tips: *Check your network status by hovering over or clicking the network icon in Dock.* + +![0|network](./figures/54.png) + +#### Wired Network + +Wired network is secure and stable, which makes it the most common way to connect to the Internet. After your router is set, connect both ends of the network cable to the computer and router to connect to a wired network. + +1. Plug the cable into the network slot of a computer. +2. Plug another end of the cable into the router or network port. +3. On the homepage of Control Center, click ![network_normal](./figures/icon97-o.svg). +4. Click **Wired Network** to enter the setting page of wired network. +5. Switch on **Wired Network Adapter** to enable wired network. +6. If it is successfully connected to the network, there will be a prompt "Wired Connection connected". + +You can also edit and add a new wired network in the setting page. + +#### Mobile Network + +If you are at a place without network, mobile network adapter is a useful tool to help you connect to the Internet as long as the place is covered by telephone signals. + +1. Plug the mobile network adapter into your computer USB port. +2. Your computer will auto connect to the network. +3. On the homepage of Control Center, click ![network_normal](./figures/icon97-o.svg). +4. Click **Mobile Network** to view the detailed network info. + +#### DSL/PPPoE Connections + +DSL is a dial-up connection using a standard phone line and analog modem to access the Internet. Configure the modem, plug the telephone line into the network interface of the computer, create a broadband dial-up connection, and enter the user name and password provided by the operator to dial up the Internet. + +##### Create a PPPoE Connection + +1. On the homepage of Control Center, click ![network_normal](./figures/icon97-o.svg). +2. Click **DSL**. +3. Click ![add](./figures/icon50-o.svg). +4. Enter the name, your account and password the operator provides. +5. Click **Save**. The connection will automatically start. + +#### VPN + +VPN is a virtual private network. Its main function is to establish a private network on the public network for encrypted communication. Whether you are on a business trip or working at home, you can use VPN to access intranet resources as long as you can access the Internet. You can also use VPN to speed up access to websites in other countries. + +1. On the homepage of Control Center, click ![network_normal](./figures/icon97-o.svg). +2. Click **VPN**, and click ![add](./figures/icon50-o.svg) or ![import](./figures/icon84-o.svg). +3. Select the VPN protocol type, and enter the name, gateway, account, password and other information. (Importing VPN will automatically fill in information) +4. Click **Save**, the system will try to connect VPN network automatically. +5. You can export the VPN settings to backup or share with other users. + +> ![notes](./figures/icon99-o.svg)Notes: *If you don't want to use the VPN as the default routing, but only want it to take effect on specific network resources, switch on **Only applied in corresponding resources**.* + +#### System Proxy + +1. On the homepage of Control Center, click ![network_normal](./figures/icon97-o.svg). +2. Click **System Proxy**. + +- Click **None** and **Save** to disable the proxy. +- Click **Manual** and input the address and port of proxy servers. +- Click **Auto** and input a URL to configure the proxy info. + +#### Application Proxy + +1. On the homepage of Control Center, click ![network_normal](./figures/icon97-o.svg). +2. Click **Application Proxy**. +3. Select a proxy type, and fill in the IP address, port, etc. +4. Click **Save** to save the proxy settings. + +> ![notes](./figures/icon99-o.svg)Notes: *After being configured, run Launcher, right-click any application's icon and check **Use a proxy**, and then the application will be opened by proxy.* + +#### Network Info + +You can view MAC, IP address, gateway and other network info in network details. + +1. On the homepage of Control Center, click ![network_normal](./figures/icon97-o.svg). +2. Click **Network Details**. +3. View the network info of the current network. + +### Sound Settings + +Set your speaker and microphone properly to make you hear more comfortable and make clearer recordings. + +![0|sound](./figures/61.png) + +#### Output + +1. On the homepage of Control Center, click ![sound_normal](./figures/icon116-o.svg). + +2. Click **Output** to: + + - Select output device type from the dropdown list after **Output Device**. + + - Drag the slider to adjust output volume and left/right balance. + - Switch on **Volume Boost**, the volume could be adjustable from 0~150% (the former range is 0~100%). + +#### Input + +1. On the homepage of Control Center, click ![sound_normal](./figures/icon116-o.svg). +2. Click **Input** to: + - Select input device type from the dropdown list after **Input Device**. + - Adjust input volume by dragging the slider. + - You can enable **Automatic Noise Suppression** by clicking the button after "Automatic Noise Suppression". + +> ![tips](./figures/icon125-o.svg)Tips: *Usually, you need to turn up the input volume to make sure that you can hear the sound of the sound source, but the volume should not be too high, because it will cause distortion of the sound. Here is how to set input volume: Speak to your microphone at a normal volume and view "Input Level". If the indicator changes obviously according to the volume, then the input volume is at a proper level.* + +#### System Sound Effects + +1. On the homepage of Control Center, click ![sound_normal](./figures/icon116-o.svg). +2. Click **Sound Effects**, check the options you want to switch on the sound when the corresponding event occurs. + +> ![tips](./figures/icon125-o.svg)Tips: *Click to listen to the sound effect.* + +### Date and Time + +Set your timezone properly to have correct date and time. You can also change them manually. + +![0|time](./figures/62.png) + +#### Change Timezone + +You have selected the timezone during system installation and do as follows to change it. + +1. On the homepage of Control Center, click ![time](./figures/icon124-o.svg). +2. Click **Timezone List**. +3. Click **Change System Timezone** and select a timezone by searching or clicking on the map. +4. Click **Confirm**. + +#### Add Timezone + +Add another timezone to see the date and time there. + +1. On the homepage of Control Center, click ![time](./figures/icon124-o.svg). +2. Click **Timezone List**. +3. Click ![add](./figures/icon50-o.svg), select a timezone by searching or clicking on the map. +4. Click **Add**. + +#### Delete Timezone + +1. On the homepage of Control Center, click ![time](./figures/icon124-o.svg). +2. Click **Timezone List**. +3. Click **Edit** after "Timezone List". +4. Click ![delete](./figures/icon71-o.svg) to remove the timezone. + +#### Change Date and Time + +Note that the auto-sync function will be disabled after changing date and time manually. + +1. On the homepage of Control Center, click ![time](./figures/icon124-o.svg). +2. Click **Time Settings**. + - Switch on/off **Auto Sync**. + - Enter the correct date and time. +3. Click **Confirm**. + +#### Set Time Format + +Setting the format of time and date is supported. + +1. On the homepage of Control Center, click ![time](./figures/icon124-o.svg). +2. Click **Time Format** to set the first day of week, long date, short date, long time, and short time. + +### Power Management + +Power management helps you to improve system safety. + +![0|power](./figures/57.png) + +#### Time to Suspend + +1. On the homepage of Control Center, click ![power_normal](./figures/icon107-o.svg). +2. Click **Plugged In**. +3. Set the time to suspend. + +#### Time to Lock Screen + +1. On the homepage of Control Center, click ![power_normal](./figures/icon107-o.svg). +2. Click **Plugged In**. +3. Set the time to lock screen. + +#### Power button settings + +1. On the homepage of Control Center, click ![power_normal](./figures/icon107-o.svg). +2. Click **Plugged In**. +3. You can select **Shut down, Suspend, Hibernate, Turn off the monitor, Do nothing** from the drop-down list after **When pressing the power button**. + +Any operation done here will take effect immediately. At the same time, the system will notify the user that the power button setting is changed. + +### Mouse + +Mouse is common computer input device. Using the mouse, you can make the operation easier and faster. + +![0|mouse](./figures/53.png) + +#### General Settings + +1. On the homepage of Control Center, click ![mouse_touchpad_normal](./figures/icon94-o.svg). +2. Click **General**. +3. Switch on **Left Hand**, and adjust **Scrolling Speed**, **Double-click Speed**. + +> ![notes](./figures/icon99-o.svg)Notes: *If "Left Hand" is enabled, left-click and right-click of the mouse exchange.* + +#### Mouse + +After inserting or connecting the mouse, make relevant settings in the Control Center to make it more in line with your usage habits. + +1. On the homepage of Control Center, click ![mouse_touchpad_normal](./figures/icon94-o.svg). +2. Click **Mouse**. +3. Adjust **Pointer Speed**, which helps you to control the speed at which the pointer moves as the mouse moves. +4. Switch on **Natural Scrolling**/**Mouse Acceleration** if you want. + +> ![notes](./figures/icon99-o.svg)Notes: +> +> - *Turn on the mouse acceleration to improve the accuracy of the pointer. The moving distance of the mouse pointer on the screen will increase according to the acceleration of the moving speed. It can be turned on or off according to the usage.* +> - *If Natural Scrolling is enabled, when you scroll down, the page will scroll down, when you scroll up, the page will scroll up as well.* + +### Keyboard and Language + +Set keyboard properties and select your keyboard layout to keep your typing habit. You can also adjust the keyboard layout according to the country and language, change system language, and customize shortcuts here. + +![0|keyboard](./figures/59.png) + +#### Keyboard Properties + +1. On the homepage of Control Center, click ![keyboard_normal](./figures/icon86-o.svg). +2. Click **General**. +3. Adjust **Repeat Delay**/**Repeat Rate**. +4. Click "Test here" and hold down a key to test the repeat rate. +5. Switch on **Numeric Keypad** and **Caps Lock Prompt** if you want. + +#### Keyboard Layout + +Set the keyboard layout to customize the keyboard for the current language. When you press a key on the keyboard, the keyboard layout controls which characters are displayed on the screen. After changing the keyboard layout, the characters on the screen may not match the characters on the keyboard keys. + +You have set a keyboard layout during system installation, but you can add more for other purposes. + +![layout](./figures/50.png) + +##### Add Keyboard Layout + +1. On the homepage of Control Center, click ![keyboard_normal](./figures/icon86-o.svg). +2. Click **Keyboard Layout**. +3. Click ![add](./figures/icon50-o.svg). Click a keyboard layout to add it. + +##### Delete Keyboard Layout + +1. On the homepage of Control Center, click ![keyboard_normal](./figures/icon86-o.svg). +2. Click **Keyboard Layout**. +3. Click **Edit**. +4. Click ![delete](./figures/icon71-o.svg) to delete keyboard layout. + +##### Switch Keyboard Layout + +1. On the homepage of Control Center, click ![keyboard_normal](./figures/icon86-o.svg). +2. Click **Keyboard Layout**. +3. Click the layout you want to switch to. +4. After successful switching, the layout will be marked with a check. + +> ![tips](./figures/icon125-o.svg)Tips: *You can also select one or more shortcuts to switch the keyboard layouts in order. Select **Applies to** to make the keyboard layout after switching be applied to the whole system or current application.* + +#### System Language + +The system language is the language you selected when you installed the system by default, which can be changed at any time. + +##### Add System Language + +Add multiple languages into the list to change language conveniently. + +1. On the homepage of Control Center, click ![keyboard_normal](./figures/icon86-o.svg). +2. Click **System Language**. +3. Click ![add](./figures/icon50-o.svg) to enter the language list. +4. Select the language you want, and it will be added into system language list automatically. + +##### Change System Language + +1. On the homepage of Control Center, click ![keyboard_normal](./figures/icon86-o.svg). +2. Click **System Language**. +3. Select the language you want to switch to, and the language package will be installed automatically. +4. After being successfully installed, log out and log in again to view the changes. + +> ![attention](./figures/icon52-o.svg)Attention: *The keyboard layout may also be changed in the process of switching the system language. Please make sure that you select a correct keyboard layout to enter the login password.* + +#### Shortcuts + +The shortcut list includes all shortcuts in the system. View, modify and customize the shortcuts here as you want. + +![0|shortcut](./figures/59.png) + +##### View Shortcuts + +1. On the homepage of Control Center, click ![keyboard_normal](./figures/icon86-o.svg). +2. Click **Shortcuts**. +3. You can search or view the default shortcuts for system, window and workspace. + +##### Modify Shortcuts + +1. On the homepage of Control Center, click ![keyboard_normal](./figures/icon86-o.svg). +2. Click **Shortcuts**. +3. Click the shortcut you want to modify. +4. Press new shortcut to change it. + +> ![tips](./figures/icon125-o.svg)Tips: *To disable a shortcut, please press ![Backspace](./figures/icon54-o.svg) on the keyboard. To cancel modifying, press **Esc** or click Restore Defaults at the bottom.* + +##### Customize Shortcuts + +1. On the homepage of Control Center, click ![keyboard_normal](./figures/icon86-o.svg). +2. Click **Shortcuts**. +3. Click ![add](./figures/icon50-o.svg). +4. Enter the name, command and shortcut. +5. Click **Add**. +6. After being successfully added, click **Edit**. +7. Click ![delete](./figures/icon71-o.svg) to delete the custom shortcut. + +> ![tips](./figures/icon125-o.svg)Tips: *To change the shortcut, click it and press a new shortcut to change it directly. To edit the name and command of the custom shortcut, click**Edit ** > ![edit](./figures/icon75-o.svg) near the shortcut name to enter the shortcut settings.* + +### System Info + +You can view system version, authorization info, hardware info, and the agreements here. + +![0|info](./figures/48.png) + +#### About This PC + +1. On the homepage of Control Center, click ![system_info_normal](./figures/icon120-o.svg). +2. Under **About This PC**, you can view system version, authorization and hardware information. +3. If the system has not been activated, click **Activate** to activate the system. + +#### Edition License + +1. On the homepage of Control Center, click ![system_info_normal](./figures/icon120-o.svg). +2. View the system edition license under **Edition License**. + +#### End User License Agreement + +1. On the homepage of Control Center, click ![system_info_normal](./figures/icon120-o.svg). +2. View the End User License Agreement under **End User License Agreement**. + +## Keyboard Interaction + +You can use the keyboard to switch between various interface areas, select objects and perform operations. + +| Key | Function | +| :----------------------------------------------------------- | :----------------------------------------------------------- | +| **Tab** | Switch between different areas or dialog buttons. | +| ![Up](./figures/icon127-o.svg) ![Down](./figures/icon73-o.svg) ![Left](./figures/icon88-o.svg) ![Right](./figures/icon111-o.svg) | Used to select different objects in the same area. Press ![Right](./figures/icon111-o.svg) to enter the lower menu and ![Left](./figures/icon88-o.svg) to return to the upper menu. Press![Up](./figures/icon127-o.svg)and ![Down](./figures/icon73-o.svg) to switch between up and down. | +| **Enter** | Execute the selected operation. | +| **Space** | Preview the selected object in File Manager; start and pause the playback in Music and Movie; expand the drop-down options in the drop-down list (The enter key is also available.). | +| **Ctrl** + **M** | Open the right-click menu. | diff --git a/docs/en/tools/desktop/dde/figures/.keep b/docs/en/tools/desktop/dde/figures/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/en/tools/desktop/dde/figures/1.png b/docs/en/tools/desktop/dde/figures/1.png new file mode 100644 index 0000000000000000000000000000000000000000..40af4242eebb440a76c749a8d970d50cd7b89bf4 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/1.png differ diff --git a/docs/en/tools/desktop/dde/figures/10.png b/docs/en/tools/desktop/dde/figures/10.png new file mode 100644 index 0000000000000000000000000000000000000000..e588ffbe3d8d7b66d92ae8f2b4bcec7c80d0592c Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/10.png differ diff --git a/docs/en/tools/desktop/dde/figures/11.png b/docs/en/tools/desktop/dde/figures/11.png new file mode 100644 index 0000000000000000000000000000000000000000..1989a5bb08155f920363e154e68bb148715c7e9e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/11.png differ diff --git a/docs/en/tools/desktop/dde/figures/12.png b/docs/en/tools/desktop/dde/figures/12.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6346161182d2cfeaf3818d5ec518ddb11c732e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/12.png differ diff --git a/docs/en/tools/desktop/dde/figures/1202_1.jpg b/docs/en/tools/desktop/dde/figures/1202_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..def242a5b9a70602a9aab7dd8048244e7d9f6793 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/1202_1.jpg differ diff --git a/docs/en/tools/desktop/dde/figures/13.png b/docs/en/tools/desktop/dde/figures/13.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7def1fb66c90da62acde799eaffca97e3b5396 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/13.png differ diff --git a/docs/en/tools/desktop/dde/figures/14.png b/docs/en/tools/desktop/dde/figures/14.png new file mode 100644 index 0000000000000000000000000000000000000000..3a27a66d57e284775420d467f90dcc02889bbffe Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/14.png differ diff --git a/docs/en/tools/desktop/dde/figures/15.png b/docs/en/tools/desktop/dde/figures/15.png new file mode 100644 index 0000000000000000000000000000000000000000..370bea32abcaa8a2b06a1a61c1455d4b35f43474 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/15.png differ diff --git a/docs/en/tools/desktop/dde/figures/16.png b/docs/en/tools/desktop/dde/figures/16.png new file mode 100644 index 0000000000000000000000000000000000000000..812ee462669c5263ef4bffc49ca4f9b6af4541c6 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/16.png differ diff --git a/docs/en/tools/desktop/dde/figures/17.png b/docs/en/tools/desktop/dde/figures/17.png new file mode 100644 index 0000000000000000000000000000000000000000..36e524b806874fa3788f5e4dcd78350686281107 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/17.png differ diff --git a/docs/en/tools/desktop/dde/figures/18.png b/docs/en/tools/desktop/dde/figures/18.png new file mode 100644 index 0000000000000000000000000000000000000000..51b32442980aa60646f77dabd53ade74f55891fe Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/18.png differ diff --git a/docs/en/tools/desktop/dde/figures/19.png b/docs/en/tools/desktop/dde/figures/19.png new file mode 100644 index 0000000000000000000000000000000000000000..c9457d09aa9f1662b2c9e4550cdbdb9f57dd020e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/19.png differ diff --git a/docs/en/tools/desktop/dde/figures/2.png b/docs/en/tools/desktop/dde/figures/2.png new file mode 100644 index 0000000000000000000000000000000000000000..97917cc245484a43bec8562757d920a06f123121 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/2.png differ diff --git a/docs/en/tools/desktop/dde/figures/20.png b/docs/en/tools/desktop/dde/figures/20.png new file mode 100644 index 0000000000000000000000000000000000000000..b0943189920d7a541d35da27340593ea93f92a17 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/20.png differ diff --git a/docs/en/tools/desktop/dde/figures/21.png b/docs/en/tools/desktop/dde/figures/21.png new file mode 100644 index 0000000000000000000000000000000000000000..e590c22c0ea28906b5f4ea7ccbc6ab11e47ad173 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/21.png differ diff --git a/docs/en/tools/desktop/dde/figures/22.png b/docs/en/tools/desktop/dde/figures/22.png new file mode 100644 index 0000000000000000000000000000000000000000..03a548b1ffb1f0ad53cfa5387af2721af90bca81 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/22.png differ diff --git a/docs/en/tools/desktop/dde/figures/23.png b/docs/en/tools/desktop/dde/figures/23.png new file mode 100644 index 0000000000000000000000000000000000000000..834c492094715cde1c02c91752ecabfe7921ed62 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/23.png differ diff --git a/docs/en/tools/desktop/dde/figures/24.png b/docs/en/tools/desktop/dde/figures/24.png new file mode 100644 index 0000000000000000000000000000000000000000..1881e868b74a60888b319576fa38fb4af92ba75c Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/24.png differ diff --git a/docs/en/tools/desktop/dde/figures/25.png b/docs/en/tools/desktop/dde/figures/25.png new file mode 100644 index 0000000000000000000000000000000000000000..f38839725d27a3486984d152e5d9de305364fbd2 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/25.png differ diff --git a/docs/en/tools/desktop/dde/figures/26.png b/docs/en/tools/desktop/dde/figures/26.png new file mode 100644 index 0000000000000000000000000000000000000000..6d7957119133ecb98b1b6b104e54a3a4647ec2a5 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/26.png differ diff --git a/docs/en/tools/desktop/dde/figures/27.png b/docs/en/tools/desktop/dde/figures/27.png new file mode 100644 index 0000000000000000000000000000000000000000..3e4733717fdc5172d6479b393005219e65e96df4 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/27.png differ diff --git a/docs/en/tools/desktop/dde/figures/28.png b/docs/en/tools/desktop/dde/figures/28.png new file mode 100644 index 0000000000000000000000000000000000000000..a77772e818e3f6c11acac3b9cfa18bad14a0a48c Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/28.png differ diff --git a/docs/en/tools/desktop/dde/figures/29.png b/docs/en/tools/desktop/dde/figures/29.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f58ffe5855295268298448744e5aadbdc55276 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/29.png differ diff --git a/docs/en/tools/desktop/dde/figures/3.png b/docs/en/tools/desktop/dde/figures/3.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb76b336957020ed6867d908e0a8bdcfc953c52 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/3.png differ diff --git a/docs/en/tools/desktop/dde/figures/30.png b/docs/en/tools/desktop/dde/figures/30.png new file mode 100644 index 0000000000000000000000000000000000000000..d91adefba1753959e90ccf4aa1501ac08d7144bd Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/30.png differ diff --git a/docs/en/tools/desktop/dde/figures/31.png b/docs/en/tools/desktop/dde/figures/31.png new file mode 100644 index 0000000000000000000000000000000000000000..0abef09ab438f5f8cfb68090993f55c493b8c15e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/31.png differ diff --git a/docs/en/tools/desktop/dde/figures/32.png b/docs/en/tools/desktop/dde/figures/32.png new file mode 100644 index 0000000000000000000000000000000000000000..d567cfbacc07a9eb46ff2c54a68432f45e034e94 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/32.png differ diff --git a/docs/en/tools/desktop/dde/figures/33.png b/docs/en/tools/desktop/dde/figures/33.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5896e2884520672c0bd88d68471b45a09c56fe Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/33.png differ diff --git a/docs/en/tools/desktop/dde/figures/34.png b/docs/en/tools/desktop/dde/figures/34.png new file mode 100644 index 0000000000000000000000000000000000000000..81bc9480fbbd81a97c559d7a6a74274deeab2bd1 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/34.png differ diff --git a/docs/en/tools/desktop/dde/figures/35.png b/docs/en/tools/desktop/dde/figures/35.png new file mode 100644 index 0000000000000000000000000000000000000000..ab2399847a643a87279337704e23fea7609bb211 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/35.png differ diff --git a/docs/en/tools/desktop/dde/figures/36.png b/docs/en/tools/desktop/dde/figures/36.png new file mode 100644 index 0000000000000000000000000000000000000000..536981609b9ae5d32be56bec612f2b3446146184 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/36.png differ diff --git a/docs/en/tools/desktop/dde/figures/37.png b/docs/en/tools/desktop/dde/figures/37.png new file mode 100644 index 0000000000000000000000000000000000000000..e39aa03587642dc1f8622fff515b05a9a3085b28 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/37.png differ diff --git a/docs/en/tools/desktop/dde/figures/38.png b/docs/en/tools/desktop/dde/figures/38.png new file mode 100644 index 0000000000000000000000000000000000000000..838f5ff0616a83cdf42edb053f4e72b93bfa644e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/38.png differ diff --git a/docs/en/tools/desktop/dde/figures/39.png b/docs/en/tools/desktop/dde/figures/39.png new file mode 100644 index 0000000000000000000000000000000000000000..12a379403d73a47b2fa564120a28fdb58d188963 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/39.png differ diff --git a/docs/en/tools/desktop/dde/figures/4.png b/docs/en/tools/desktop/dde/figures/4.png new file mode 100644 index 0000000000000000000000000000000000000000..5078e36aca713706d2cf08a3ebecdc3769951899 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/4.png differ diff --git a/docs/en/tools/desktop/dde/figures/40.png b/docs/en/tools/desktop/dde/figures/40.png new file mode 100644 index 0000000000000000000000000000000000000000..bf419894eab852b45604966c62fafa71f051c4df Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/40.png differ diff --git a/docs/en/tools/desktop/dde/figures/41.png b/docs/en/tools/desktop/dde/figures/41.png new file mode 100644 index 0000000000000000000000000000000000000000..f94b0ee72e0d4e9277e9b44b4268cfbdb8402104 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/41.png differ diff --git a/docs/en/tools/desktop/dde/figures/42.png b/docs/en/tools/desktop/dde/figures/42.png new file mode 100644 index 0000000000000000000000000000000000000000..3182e551c4e4b03885bad6339f1de514b3f55f8c Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/42.png differ diff --git a/docs/en/tools/desktop/dde/figures/43.jpg b/docs/en/tools/desktop/dde/figures/43.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26e9244f58ea9800081fd61ae135477f05b21b40 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/43.jpg differ diff --git a/docs/en/tools/desktop/dde/figures/44.png b/docs/en/tools/desktop/dde/figures/44.png new file mode 100644 index 0000000000000000000000000000000000000000..c3abaecd6e053272d81e0ad9bd183c6858b4f3c5 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/44.png differ diff --git a/docs/en/tools/desktop/dde/figures/45.png b/docs/en/tools/desktop/dde/figures/45.png new file mode 100644 index 0000000000000000000000000000000000000000..86b051acde857c88479714414f721a7f59cca483 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/45.png differ diff --git a/docs/en/tools/desktop/dde/figures/46.png b/docs/en/tools/desktop/dde/figures/46.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ec41c87628bf28c9905523f99ae93aebd13614 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/46.png differ diff --git a/docs/en/tools/desktop/dde/figures/47.jpg b/docs/en/tools/desktop/dde/figures/47.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf95f03c8ea0f84a878bc63af20972c9da71bc04 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/47.jpg differ diff --git a/docs/en/tools/desktop/dde/figures/48.png b/docs/en/tools/desktop/dde/figures/48.png new file mode 100644 index 0000000000000000000000000000000000000000..ef21fa1ce1e2e9848a8dca16e692de673df7c6d7 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/48.png differ diff --git a/docs/en/tools/desktop/dde/figures/49.png b/docs/en/tools/desktop/dde/figures/49.png new file mode 100644 index 0000000000000000000000000000000000000000..3b77668e5a4d1bdb3043c473dff9b36fa7144714 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/49.png differ diff --git a/docs/en/tools/desktop/dde/figures/5.png b/docs/en/tools/desktop/dde/figures/5.png new file mode 100644 index 0000000000000000000000000000000000000000..2976a745cfaede26594d6daa01cfc18d18b1de8b Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/5.png differ diff --git a/docs/en/tools/desktop/dde/figures/50.png b/docs/en/tools/desktop/dde/figures/50.png new file mode 100644 index 0000000000000000000000000000000000000000..b86a55fe4363f56fc18befc9d27025a75ca427ad Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/50.png differ diff --git a/docs/en/tools/desktop/dde/figures/51.png b/docs/en/tools/desktop/dde/figures/51.png new file mode 100644 index 0000000000000000000000000000000000000000..d427ac871dba9c32eb4ffe736d5352f8408da533 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/51.png differ diff --git a/docs/en/tools/desktop/dde/figures/52.png b/docs/en/tools/desktop/dde/figures/52.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca0a2db05c70bc25f9bb59e82d074f671cfc74e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/52.png differ diff --git a/docs/en/tools/desktop/dde/figures/53.png b/docs/en/tools/desktop/dde/figures/53.png new file mode 100644 index 0000000000000000000000000000000000000000..76fbc34a1d5621b83c2d8c93222766acad33350d Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/53.png differ diff --git a/docs/en/tools/desktop/dde/figures/54.png b/docs/en/tools/desktop/dde/figures/54.png new file mode 100644 index 0000000000000000000000000000000000000000..49ecae6f8941a118223f3765c23015df074c4983 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/54.png differ diff --git a/docs/en/tools/desktop/dde/figures/56.png b/docs/en/tools/desktop/dde/figures/56.png new file mode 100644 index 0000000000000000000000000000000000000000..36fee795bfe593b6246c8d6c2bddea9386b06f45 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/56.png differ diff --git a/docs/en/tools/desktop/dde/figures/57.png b/docs/en/tools/desktop/dde/figures/57.png new file mode 100644 index 0000000000000000000000000000000000000000..539d06b77b058a933cb154c43641d498050986e0 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/57.png differ diff --git a/docs/en/tools/desktop/dde/figures/58.png b/docs/en/tools/desktop/dde/figures/58.png new file mode 100644 index 0000000000000000000000000000000000000000..396ca16d873e54505bcdbd41d669366eea7f5dee Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/58.png differ diff --git a/docs/en/tools/desktop/dde/figures/59.png b/docs/en/tools/desktop/dde/figures/59.png new file mode 100644 index 0000000000000000000000000000000000000000..9b1de98ac4fe686937ca844d3e9481548a79ce63 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/59.png differ diff --git a/docs/en/tools/desktop/dde/figures/6.png b/docs/en/tools/desktop/dde/figures/6.png new file mode 100644 index 0000000000000000000000000000000000000000..275c23872f2353f007371672714902babcc3db53 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/6.png differ diff --git a/docs/en/tools/desktop/dde/figures/60.jpg b/docs/en/tools/desktop/dde/figures/60.jpg new file mode 100644 index 0000000000000000000000000000000000000000..033c88aaadd04f7d4058ec2eb5b2c70498319bf7 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/60.jpg differ diff --git a/docs/en/tools/desktop/dde/figures/61.png b/docs/en/tools/desktop/dde/figures/61.png new file mode 100644 index 0000000000000000000000000000000000000000..8df17062963a3baf92318a12ec34b1378122687b Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/61.png differ diff --git a/docs/en/tools/desktop/dde/figures/62.png b/docs/en/tools/desktop/dde/figures/62.png new file mode 100644 index 0000000000000000000000000000000000000000..ec312d6c0c22018c1745dd866da71ce9be47fbda Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/62.png differ diff --git a/docs/en/tools/desktop/dde/figures/63.jpg b/docs/en/tools/desktop/dde/figures/63.jpg new file mode 100644 index 0000000000000000000000000000000000000000..504f7cf59768f6fd1cd73a115d01fbc4e15a02e1 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/63.jpg differ diff --git a/docs/en/tools/desktop/dde/figures/63.png b/docs/en/tools/desktop/dde/figures/63.png new file mode 100644 index 0000000000000000000000000000000000000000..86b051acde857c88479714414f721a7f59cca483 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/63.png differ diff --git a/docs/en/tools/desktop/dde/figures/64.png b/docs/en/tools/desktop/dde/figures/64.png new file mode 100644 index 0000000000000000000000000000000000000000..cbbd2ede047e735c3766e08b04595f08cd72f5b2 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/64.png differ diff --git a/docs/en/tools/desktop/dde/figures/7.png b/docs/en/tools/desktop/dde/figures/7.png new file mode 100644 index 0000000000000000000000000000000000000000..4d397959ac7f6d166ef5a3b7084bd5c3c93b475f Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/7.png differ diff --git a/docs/en/tools/desktop/dde/figures/8.png b/docs/en/tools/desktop/dde/figures/8.png new file mode 100644 index 0000000000000000000000000000000000000000..8ade274092d7b3e461c96d7909a9d89d3a944f09 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/8.png differ diff --git a/docs/en/tools/desktop/dde/figures/9.png b/docs/en/tools/desktop/dde/figures/9.png new file mode 100644 index 0000000000000000000000000000000000000000..f7b2215404929346f1a814b0b1d6d482559c08b5 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/9.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-add-resource.png b/docs/en/tools/desktop/dde/figures/HA-add-resource.png new file mode 100644 index 0000000000000000000000000000000000000000..ac24895a1247828d248132f6c789ad8ef51a57e4 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-add-resource.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-apache-show.png b/docs/en/tools/desktop/dde/figures/HA-apache-show.png new file mode 100644 index 0000000000000000000000000000000000000000..c216500910f75f2de1108f6b618c5c08f4df8bae Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-apache-show.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-apache-suc.png b/docs/en/tools/desktop/dde/figures/HA-apache-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..23a7aaa702e3e68190ff7e01a5a673aee2c92409 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-apache-suc.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-api.png b/docs/en/tools/desktop/dde/figures/HA-api.png new file mode 100644 index 0000000000000000000000000000000000000000..f825fe005705d30809d12df97958cff0e5a80135 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-api.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-clone-suc.png b/docs/en/tools/desktop/dde/figures/HA-clone-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..4b6099ccc88d4f6f907a0c4563e729ab2a4dece1 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-clone-suc.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-clone.png b/docs/en/tools/desktop/dde/figures/HA-clone.png new file mode 100644 index 0000000000000000000000000000000000000000..1b09ab73849494f4ffd759fa612ae3c241bd9c1d Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-clone.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-corosync.png b/docs/en/tools/desktop/dde/figures/HA-corosync.png new file mode 100644 index 0000000000000000000000000000000000000000..c4d93242e65c503b6e1b6a457e2517f647984a66 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-corosync.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-firstchoice-cmd.png b/docs/en/tools/desktop/dde/figures/HA-firstchoice-cmd.png new file mode 100644 index 0000000000000000000000000000000000000000..a265bab07f1d8e46d9d965975be180a8de6c9eb2 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-firstchoice-cmd.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-firstchoice.png b/docs/en/tools/desktop/dde/figures/HA-firstchoice.png new file mode 100644 index 0000000000000000000000000000000000000000..bd982ddcea55c629c0257fca86051a9ffa77e7b4 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-firstchoice.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-group-new-suc.png b/docs/en/tools/desktop/dde/figures/HA-group-new-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..437fd01ee83a9a1f65c12838fe56eea8435f6759 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-group-new-suc.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-group-new-suc2.png b/docs/en/tools/desktop/dde/figures/HA-group-new-suc2.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb933bd761f9808de95a324a50226ff041ebd4f Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-group-new-suc2.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-group-new.png b/docs/en/tools/desktop/dde/figures/HA-group-new.png new file mode 100644 index 0000000000000000000000000000000000000000..9c914d0cc2e14f3220fc4346175961f129efb37b Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-group-new.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-group-suc.png b/docs/en/tools/desktop/dde/figures/HA-group-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..2338580343833ebab08627be3a2efbcdb48aef9e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-group-suc.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-group.png b/docs/en/tools/desktop/dde/figures/HA-group.png new file mode 100644 index 0000000000000000000000000000000000000000..6897817665dee90c0f8c47c6a3cb4bb09db52d78 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-group.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-home-page.png b/docs/en/tools/desktop/dde/figures/HA-home-page.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a7a82dc412250d4c0984b3876c6f93c6aca789 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-home-page.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-login.png b/docs/en/tools/desktop/dde/figures/HA-login.png new file mode 100644 index 0000000000000000000000000000000000000000..65d0ae11ec810da7574ec72bebf6e1b020c94a0d Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-login.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-mariadb-suc.png b/docs/en/tools/desktop/dde/figures/HA-mariadb-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..6f6756c945121715edc623bd9a848bc48ffeb4ca Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-mariadb-suc.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-mariadb.png b/docs/en/tools/desktop/dde/figures/HA-mariadb.png new file mode 100644 index 0000000000000000000000000000000000000000..d29587c8609b9d6aefeb07170901361b5ef8402d Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-mariadb.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-nfs-suc.png b/docs/en/tools/desktop/dde/figures/HA-nfs-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..c0ea6af79e91649f1ad7d97ab6c2a0069a4f4fb8 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-nfs-suc.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-nfs.png b/docs/en/tools/desktop/dde/figures/HA-nfs.png new file mode 100644 index 0000000000000000000000000000000000000000..f6917938eec2e0431a9891c067475dd0b21c1bd9 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-nfs.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-pacemaker.png b/docs/en/tools/desktop/dde/figures/HA-pacemaker.png new file mode 100644 index 0000000000000000000000000000000000000000..7681f963f67d2b803fef6fb2c3247384136201f8 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-pacemaker.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-pcs-status.png b/docs/en/tools/desktop/dde/figures/HA-pcs-status.png new file mode 100644 index 0000000000000000000000000000000000000000..fb150fba9f6258658702b35caacf98076d1fd109 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-pcs-status.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-pcs.png b/docs/en/tools/desktop/dde/figures/HA-pcs.png new file mode 100644 index 0000000000000000000000000000000000000000..283670d7c3d0961ee1cb41345c2b2a013d7143b0 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-pcs.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-refresh.png b/docs/en/tools/desktop/dde/figures/HA-refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..c2678c0c2945acbabfbeae0d5de8924a216bbf31 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-refresh.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-vip-suc.png b/docs/en/tools/desktop/dde/figures/HA-vip-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..313ce56e14f931c78dad4349ed57ab3fd7907f50 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-vip-suc.png differ diff --git a/docs/en/tools/desktop/dde/figures/HA-vip.png b/docs/en/tools/desktop/dde/figures/HA-vip.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b417df2e64527d3b29d0289756dfbb01bf66ec Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/HA-vip.png differ diff --git a/docs/en/tools/desktop/dde/figures/dde-1.png b/docs/en/tools/desktop/dde/figures/dde-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fb1d5177c39262ed182f10a57fdae850d007eeb1 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/dde-1.png differ diff --git a/docs/en/tools/desktop/dde/figures/dde-2.png b/docs/en/tools/desktop/dde/figures/dde-2.png new file mode 100644 index 0000000000000000000000000000000000000000..be5d296937bd17b9646b32c80934aa76738027af Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/dde-2.png differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-1.PNG b/docs/en/tools/desktop/dde/figures/gnome-1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ed57060770957f304a3fb7ca993241d56e90f541 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-1.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-10.PNG b/docs/en/tools/desktop/dde/figures/gnome-10.PNG new file mode 100644 index 0000000000000000000000000000000000000000..94af842ca7d0de47db4d0030a0741d0cae634a21 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-10.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-11.PNG b/docs/en/tools/desktop/dde/figures/gnome-11.PNG new file mode 100644 index 0000000000000000000000000000000000000000..022c764002542196b723eadaaaae080b3afc1d0f Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-11.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-12.PNG b/docs/en/tools/desktop/dde/figures/gnome-12.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4255aa3e1629b2af94ec59ae0fe346d91da8ba61 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-12.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-13.PNG b/docs/en/tools/desktop/dde/figures/gnome-13.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f6bad1c09c36bdef3ed4dd48c14e98c03a230cc7 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-13.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-14.PNG b/docs/en/tools/desktop/dde/figures/gnome-14.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a661a4e759ff3107fc9bfa5f664a86f77051dfcf Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-14.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-15.PNG b/docs/en/tools/desktop/dde/figures/gnome-15.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2e5a26c33b2cb432d4b7a79af8407b5b13592d09 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-15.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-16.PNG b/docs/en/tools/desktop/dde/figures/gnome-16.PNG new file mode 100644 index 0000000000000000000000000000000000000000..178d5e836b69168c441676c4e77721e22f460981 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-16.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-17.PNG b/docs/en/tools/desktop/dde/figures/gnome-17.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2ea9f9e1914bb90193689e3d35e48918dcc7c019 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-17.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-18.PNG b/docs/en/tools/desktop/dde/figures/gnome-18.PNG new file mode 100644 index 0000000000000000000000000000000000000000..55b5c07ea89fca246600ff7ea0ff66f03427ddcb Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-18.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-19.PNG b/docs/en/tools/desktop/dde/figures/gnome-19.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b9f78d01b726078d25d900e4ef9f9ffb1bdc9075 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-19.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-2.PNG b/docs/en/tools/desktop/dde/figures/gnome-2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..cf86813c71dd47584c5f4d9c0d6fec29813c9dc9 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-2.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-20.PNG b/docs/en/tools/desktop/dde/figures/gnome-20.PNG new file mode 100644 index 0000000000000000000000000000000000000000..37133665e2025c5267c3bf1ea742bc7295d0cb59 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-20.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-21.PNG b/docs/en/tools/desktop/dde/figures/gnome-21.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0d0bc17b2a973d6e035b3d08097e0ad6138ed786 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-21.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-22.PNG b/docs/en/tools/desktop/dde/figures/gnome-22.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4967a95e8c1fcf4fa5e6a799933149365e447725 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-22.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-23.PNG b/docs/en/tools/desktop/dde/figures/gnome-23.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ac39542d77bdfe64b1c3d0119870cbd5e0136d17 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-23.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-24.PNG b/docs/en/tools/desktop/dde/figures/gnome-24.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e4572c436249b329643a6777ddf6a2852fcab5a6 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-24.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-25.PNG b/docs/en/tools/desktop/dde/figures/gnome-25.PNG new file mode 100644 index 0000000000000000000000000000000000000000..93ac3582bd0dc5a273614e20b89ea654fe02ff9d Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-25.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-26.PNG b/docs/en/tools/desktop/dde/figures/gnome-26.PNG new file mode 100644 index 0000000000000000000000000000000000000000..98f349dab192b4b6a297d4907b9156c5d6240652 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-26.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-27.PNG b/docs/en/tools/desktop/dde/figures/gnome-27.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ea319f8df41e1bdbccb34e597ccdb3c6d21a3727 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-27.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-28.PNG b/docs/en/tools/desktop/dde/figures/gnome-28.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b2f1db5ea27cdfada82ba9572395598df2ecf648 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-28.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-29.PNG b/docs/en/tools/desktop/dde/figures/gnome-29.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fc2f6a8a2bbc56af1b657a5a25359aa15183125e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-29.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-3.PNG b/docs/en/tools/desktop/dde/figures/gnome-3.PNG new file mode 100644 index 0000000000000000000000000000000000000000..3ac1eb3b0d6cd8a84b0c408f745e40db6d845ca8 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-3.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-30.PNG b/docs/en/tools/desktop/dde/figures/gnome-30.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6799ad80c89443267a31c0b2d3b059cc9dd8aceb Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-30.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-31.PNG b/docs/en/tools/desktop/dde/figures/gnome-31.PNG new file mode 100644 index 0000000000000000000000000000000000000000..39ebf079f7a11c28359440111b548bf2d7be5aaa Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-31.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-32.PNG b/docs/en/tools/desktop/dde/figures/gnome-32.PNG new file mode 100644 index 0000000000000000000000000000000000000000..28a77475cf3a1176a0c5d01418e1833fef627cc7 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-32.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-33.PNG b/docs/en/tools/desktop/dde/figures/gnome-33.PNG new file mode 100644 index 0000000000000000000000000000000000000000..cecde6d0ab299f69ad95f25ff7d3f7130da09d02 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-33.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-34.PNG b/docs/en/tools/desktop/dde/figures/gnome-34.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a760c501d86debdb81a89ef3a70b694e22d0e4da Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-34.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-35.PNG b/docs/en/tools/desktop/dde/figures/gnome-35.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ab46f383f1b8f2c740effff3c59ad224b9e5025b Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-35.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-36.PNG b/docs/en/tools/desktop/dde/figures/gnome-36.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e248144b99bb65943446f6c9fbd6ad45c11ddd58 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-36.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-37.PNG b/docs/en/tools/desktop/dde/figures/gnome-37.PNG new file mode 100644 index 0000000000000000000000000000000000000000..7181726fb3d074298e41ee59ca14c9be68884aad Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-37.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-38.PNG b/docs/en/tools/desktop/dde/figures/gnome-38.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b5c02d20fbad894fa3702b6274b047ef26ea1a10 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-38.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-39.PNG b/docs/en/tools/desktop/dde/figures/gnome-39.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0c85bb5f72d7625e683409c3d4605b56f74d746b Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-39.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-4.PNG b/docs/en/tools/desktop/dde/figures/gnome-4.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0bce0130188f00f30c67a4a8d4904ad8419428da Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-4.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-40.PNG b/docs/en/tools/desktop/dde/figures/gnome-40.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e0c5a085776933b08d94cf51ae22d52af0a68ca0 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-40.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-41.PNG b/docs/en/tools/desktop/dde/figures/gnome-41.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0fc42fc339480115cc588fee59983faf4652fc80 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-41.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-42.PNG b/docs/en/tools/desktop/dde/figures/gnome-42.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fa18531c9e9ec6ee9dcb9e7c5046ee41bcfa454f Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-42.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-43.PNG b/docs/en/tools/desktop/dde/figures/gnome-43.PNG new file mode 100644 index 0000000000000000000000000000000000000000..aadb23eda46dc831a56935a38f9a7d0c9534db89 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-43.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-44.PNG b/docs/en/tools/desktop/dde/figures/gnome-44.PNG new file mode 100644 index 0000000000000000000000000000000000000000..8747e97f510cfd64abf520e099b5abeceb056970 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-44.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-45.PNG b/docs/en/tools/desktop/dde/figures/gnome-45.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a0841f2360ad016c15444ff913a4a7b437ee047e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-45.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-46.PNG b/docs/en/tools/desktop/dde/figures/gnome-46.PNG new file mode 100644 index 0000000000000000000000000000000000000000..d1815b118b98b523c1c97d14a69292528248878c Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-46.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-47.PNG b/docs/en/tools/desktop/dde/figures/gnome-47.PNG new file mode 100644 index 0000000000000000000000000000000000000000..73c8deaf7bf8c3fca34fec443e9b60d13910732b Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-47.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-48.PNG b/docs/en/tools/desktop/dde/figures/gnome-48.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6414ceafc991a94815324d362918b06e849d952e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-48.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-49.PNG b/docs/en/tools/desktop/dde/figures/gnome-49.PNG new file mode 100644 index 0000000000000000000000000000000000000000..040a7a235cc3dca8dfae6d89f1d28bb308a42391 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-49.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-5.PNG b/docs/en/tools/desktop/dde/figures/gnome-5.PNG new file mode 100644 index 0000000000000000000000000000000000000000..30076d824d8dde3206ff012538e1691df3a3e5ed Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-5.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-50.PNG b/docs/en/tools/desktop/dde/figures/gnome-50.PNG new file mode 100644 index 0000000000000000000000000000000000000000..05951779983fa2c198afca908f6c54cbc35f557a Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-50.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-51.PNG b/docs/en/tools/desktop/dde/figures/gnome-51.PNG new file mode 100644 index 0000000000000000000000000000000000000000..995f82f57a7828926ceea5dbaaf9f79ec453c1ab Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-51.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-52.PNG b/docs/en/tools/desktop/dde/figures/gnome-52.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6607be66dc61953729cf5106b4d39aa724b8bf76 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-52.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-53.PNG b/docs/en/tools/desktop/dde/figures/gnome-53.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b1e851620eadab0376be79fcc12c0d8d3d943ec3 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-53.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-54.PNG b/docs/en/tools/desktop/dde/figures/gnome-54.PNG new file mode 100644 index 0000000000000000000000000000000000000000..c9e773a1aec444feedfbfb3dce8ca9745ccb9f9e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-54.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-55.PNG b/docs/en/tools/desktop/dde/figures/gnome-55.PNG new file mode 100644 index 0000000000000000000000000000000000000000..bd935df19ada2bbbf6f9f4b58d020f73fbdbbed0 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-55.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-56.PNG b/docs/en/tools/desktop/dde/figures/gnome-56.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4475f73a68296d19cf0010b1f848aa3cbcd82858 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-56.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-57.PNG b/docs/en/tools/desktop/dde/figures/gnome-57.PNG new file mode 100644 index 0000000000000000000000000000000000000000..24073cd56613e3fce7f3a7e0f057a12d8d8f3077 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-57.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-58.PNG b/docs/en/tools/desktop/dde/figures/gnome-58.PNG new file mode 100644 index 0000000000000000000000000000000000000000..19112ae3f1f4ee9e0d7b2191ddec2d14ad171d67 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-58.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-59.PNG b/docs/en/tools/desktop/dde/figures/gnome-59.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4c4225e9208ad3d38e1ec9e846d6b7c5e89e3991 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-59.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-6.PNG b/docs/en/tools/desktop/dde/figures/gnome-6.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fa53206b21811a75382f6aee788c1cd8a20d9ba7 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-6.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-7.PNG b/docs/en/tools/desktop/dde/figures/gnome-7.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fe38b39118bb79bef4412ed0f08c472ad145980e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-7.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-8.PNG b/docs/en/tools/desktop/dde/figures/gnome-8.PNG new file mode 100644 index 0000000000000000000000000000000000000000..769939c5583d02d014ded8065eaa7ac6aeb81cd4 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-8.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/gnome-9.PNG b/docs/en/tools/desktop/dde/figures/gnome-9.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b699942966fe2fe444e86231638f917f524328d9 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/gnome-9.PNG differ diff --git a/docs/en/tools/desktop/dde/figures/icon1.png b/docs/en/tools/desktop/dde/figures/icon1.png new file mode 100644 index 0000000000000000000000000000000000000000..9bac00355cf4aa57d32287fd4271404f6fd3fd4d Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon1.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon10-o.png b/docs/en/tools/desktop/dde/figures/icon10-o.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c56d1a64c588d86f8fe510c74e5a7c4cb810d4 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon10-o.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon101-o.svg b/docs/en/tools/desktop/dde/figures/icon101-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..af1c5d3dc0277a6ea59e71efb6ca97bdfc782e8e --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon101-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/tools/desktop/dde/figures/icon103-o.svg b/docs/en/tools/desktop/dde/figures/icon103-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..c06c885725c569ab8db1fe7d595a7c65f18c5142 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon103-o.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon105-o.svg b/docs/en/tools/desktop/dde/figures/icon105-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..36c49949fa569330b761c2d65518f36c10435508 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon105-o.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon107-o.svg b/docs/en/tools/desktop/dde/figures/icon107-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..fb5a3ea756f6ccb7b3e5c31122a433347a908c96 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon107-o.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon11-o.png b/docs/en/tools/desktop/dde/figures/icon11-o.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1f2cb7f99b583768c7cbd7e05a57f302dbe8a Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon11-o.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon110-o.svg b/docs/en/tools/desktop/dde/figures/icon110-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..7958e3f192061592e002e1e8a1bad06ffa86742c --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon110-o.svg @@ -0,0 +1,12 @@ + + + + reboot_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/icon111-o.svg b/docs/en/tools/desktop/dde/figures/icon111-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..097d16a08d305a8b3f3b2268ab1ea8342e799377 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon111-o.svg @@ -0,0 +1,13 @@ + + + + Right + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/icon112-o.svg b/docs/en/tools/desktop/dde/figures/icon112-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e51628c2b8b10495f3410d219814286696ea2fd5 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon112-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon116-o.svg b/docs/en/tools/desktop/dde/figures/icon116-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..4d79cd6dbbbfd3969f4e0ad0ad88e27398853505 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon116-o.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon12-o.png b/docs/en/tools/desktop/dde/figures/icon12-o.png new file mode 100644 index 0000000000000000000000000000000000000000..f1f0f59dd3879461a0b5bc0632693a4a4124def3 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon12-o.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon120-o.svg b/docs/en/tools/desktop/dde/figures/icon120-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e895c347d16a200aea46b00428b0b9f1a3c94246 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon120-o.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon122-o.svg b/docs/en/tools/desktop/dde/figures/icon122-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..7fb014b5fd6097ca37a84d0b6a27dc982d675c8a --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon122-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/tools/desktop/dde/figures/icon124-o.svg b/docs/en/tools/desktop/dde/figures/icon124-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..960c0ec096c925213f8953398f0e8e5db3cdaed3 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon124-o.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon125-o.svg b/docs/en/tools/desktop/dde/figures/icon125-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..011c05f4b8f296867cd408a339230323fcbb28dd --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon125-o.svg @@ -0,0 +1,9 @@ + + + tips + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/icon126-o.svg b/docs/en/tools/desktop/dde/figures/icon126-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e0a43b6b8beb434090ac0dd3a8fd68c023f11fce --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon126-o.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon127-o.svg b/docs/en/tools/desktop/dde/figures/icon127-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..bed95d35334a8d0151211054236c0bacddcc0dd3 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon127-o.svg @@ -0,0 +1,13 @@ + + + + Up + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/icon128-o.svg b/docs/en/tools/desktop/dde/figures/icon128-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..aa727f3f5d5883b3fb83a79c4b98e8b5bfe4ade6 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon128-o.svg @@ -0,0 +1,12 @@ + + + + userswitch_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/icon13-o.png b/docs/en/tools/desktop/dde/figures/icon13-o.png new file mode 100644 index 0000000000000000000000000000000000000000..c05a981b29d8ad11c6682f796f79b4cafd0f088b Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon13-o.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon132-o.svg b/docs/en/tools/desktop/dde/figures/icon132-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..588ba9d98864ba67a562fa9179f29405f7687aa0 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon132-o.svg @@ -0,0 +1,15 @@ + + + + - + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/icon133-o.svg b/docs/en/tools/desktop/dde/figures/icon133-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..886d90a83e33497d134bdb3dcc864a5c2df53f20 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon133-o.svg @@ -0,0 +1,13 @@ + + + + + + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/icon134-o.svg b/docs/en/tools/desktop/dde/figures/icon134-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..784cf383eb0e8f5c7a57a602047be50ad0a3bc05 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon134-o.svg @@ -0,0 +1,15 @@ + + + + = + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/icon135-o.svg b/docs/en/tools/desktop/dde/figures/icon135-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..cea628a8f5eb92d10661b690242b6de41ca64816 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon135-o.svg @@ -0,0 +1,15 @@ + + + + ~ + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/icon136-o.svg b/docs/en/tools/desktop/dde/figures/icon136-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..24aa139ab2fefaee20935551f1af5aef473719ed --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon136-o.svg @@ -0,0 +1,12 @@ + + + + poweroff_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/icon14-o.png b/docs/en/tools/desktop/dde/figures/icon14-o.png new file mode 100644 index 0000000000000000000000000000000000000000..b21deee4d98593d93fb5f72158d2d78f3d3f1cb9 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon14-o.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon15-o.png b/docs/en/tools/desktop/dde/figures/icon15-o.png new file mode 100644 index 0000000000000000000000000000000000000000..1827a20e9da4d28e35e8ab2eae739b2fec37b385 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon15-o.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon16.png b/docs/en/tools/desktop/dde/figures/icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..f271594dda9d3ad0f038c9d719dd68c3e82c59f1 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon16.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon17.png b/docs/en/tools/desktop/dde/figures/icon17.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe58b89347c857920bce25f067fbd11c308e502 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon17.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon18.png b/docs/en/tools/desktop/dde/figures/icon18.png new file mode 100644 index 0000000000000000000000000000000000000000..1827a20e9da4d28e35e8ab2eae739b2fec37b385 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon18.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon19-o.png b/docs/en/tools/desktop/dde/figures/icon19-o.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1f2cb7f99b583768c7cbd7e05a57f302dbe8a Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon19-o.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon2.png b/docs/en/tools/desktop/dde/figures/icon2.png new file mode 100644 index 0000000000000000000000000000000000000000..9101e4b386df065a87d422bc5a0b287528ea5ec7 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon2.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon20.png b/docs/en/tools/desktop/dde/figures/icon20.png new file mode 100644 index 0000000000000000000000000000000000000000..4de3c7c695893539967245ea5e269b26e2b735be Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon20.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon21.png b/docs/en/tools/desktop/dde/figures/icon21.png new file mode 100644 index 0000000000000000000000000000000000000000..e7b4320b6ce1fd4adb52525ba2c60983ffb2eed3 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon21.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon22.png b/docs/en/tools/desktop/dde/figures/icon22.png new file mode 100644 index 0000000000000000000000000000000000000000..43bfa96965ad13e0a34ead3cb1102a76b9346a23 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon22.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon23.png b/docs/en/tools/desktop/dde/figures/icon23.png new file mode 100644 index 0000000000000000000000000000000000000000..aee221ddaa81d06fa7bd5b89a624da90cd1e53da Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon23.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon24.png b/docs/en/tools/desktop/dde/figures/icon24.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e5d700431ca1666fe9eda2cefce5dd2f83bdcd Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon24.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon25.png b/docs/en/tools/desktop/dde/figures/icon25.png new file mode 100644 index 0000000000000000000000000000000000000000..3de0f9476bbee9e89c3b759afbed968f17b5bbcc Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon25.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon26-o.png b/docs/en/tools/desktop/dde/figures/icon26-o.png new file mode 100644 index 0000000000000000000000000000000000000000..2293a893caf6d89c3beb978598fe7f281e68e7d5 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon26-o.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon27-o.png b/docs/en/tools/desktop/dde/figures/icon27-o.png new file mode 100644 index 0000000000000000000000000000000000000000..abbab8e40f7e3ca7c2a6f28ff78f08f15117828e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon27-o.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon28-o.png b/docs/en/tools/desktop/dde/figures/icon28-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon28-o.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon29-o.png b/docs/en/tools/desktop/dde/figures/icon29-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon29-o.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon3.png b/docs/en/tools/desktop/dde/figures/icon3.png new file mode 100644 index 0000000000000000000000000000000000000000..930ee8909e89e3624c581f83d713af271cd96c75 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon3.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon30-o.png b/docs/en/tools/desktop/dde/figures/icon30-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon30-o.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon31-o.png b/docs/en/tools/desktop/dde/figures/icon31-o.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon31-o.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon32.png b/docs/en/tools/desktop/dde/figures/icon32.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon32.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon33.png b/docs/en/tools/desktop/dde/figures/icon33.png new file mode 100644 index 0000000000000000000000000000000000000000..88ed145b25f6f025ad795ceb012500e0944cb54c Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon33.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon34.png b/docs/en/tools/desktop/dde/figures/icon34.png new file mode 100644 index 0000000000000000000000000000000000000000..8247f52a3424c81b451ceb318f4a7979a5eddece Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon34.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon35.png b/docs/en/tools/desktop/dde/figures/icon35.png new file mode 100644 index 0000000000000000000000000000000000000000..7c656e9030b94809a57c7e369921e6a585f3574c Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon35.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon36.png b/docs/en/tools/desktop/dde/figures/icon36.png new file mode 100644 index 0000000000000000000000000000000000000000..7d29d173e914dfff48245d3d3a4d42575ce2d1db Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon36.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon37.png b/docs/en/tools/desktop/dde/figures/icon37.png new file mode 100644 index 0000000000000000000000000000000000000000..58be4c621b6638115153e361801deb9ee06634d8 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon37.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon38.png b/docs/en/tools/desktop/dde/figures/icon38.png new file mode 100644 index 0000000000000000000000000000000000000000..0c861ccb891f4fb5e533eb7f7151a8fce1571f17 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon38.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon39.png b/docs/en/tools/desktop/dde/figures/icon39.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ba1f347452d0cd1c06c6c51d2cdf5aea5e490b Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon39.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon4.png b/docs/en/tools/desktop/dde/figures/icon4.png new file mode 100644 index 0000000000000000000000000000000000000000..548dc8b648edb73ff1dd8a0266e8479203e72ca0 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon4.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon40.png b/docs/en/tools/desktop/dde/figures/icon40.png new file mode 100644 index 0000000000000000000000000000000000000000..9c29dd1e9a1bf22c36abf51cb18fa9e47b455fab Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon40.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon41.png b/docs/en/tools/desktop/dde/figures/icon41.png new file mode 100644 index 0000000000000000000000000000000000000000..9e8aea527a2119433fffec5a8800ebfa4fa5062f Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon41.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon42-o.png b/docs/en/tools/desktop/dde/figures/icon42-o.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon42-o.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon42.png b/docs/en/tools/desktop/dde/figures/icon42.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon42.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon43-o.png b/docs/en/tools/desktop/dde/figures/icon43-o.png new file mode 100644 index 0000000000000000000000000000000000000000..284bdd551baf25beb4143013402e77a1a4c60ccb Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon43-o.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon44-o.png b/docs/en/tools/desktop/dde/figures/icon44-o.png new file mode 100644 index 0000000000000000000000000000000000000000..810f4d784ee140dbf562e67a0d3fd391272626a5 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon44-o.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon45-o.png b/docs/en/tools/desktop/dde/figures/icon45-o.png new file mode 100644 index 0000000000000000000000000000000000000000..3e528ce2c98284f020ae4912a853f5864526396b Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon45-o.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon46-o.png b/docs/en/tools/desktop/dde/figures/icon46-o.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6a3ca0fe57016f3685981ed518493ceea1c855 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon46-o.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon47-o.png b/docs/en/tools/desktop/dde/figures/icon47-o.png new file mode 100644 index 0000000000000000000000000000000000000000..6eeaba98d908775bd363a8ffcec27c3b6a214013 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon47-o.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon49-o.svg b/docs/en/tools/desktop/dde/figures/icon49-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..f2d76acd147ccaf5e493a7c035bb90640af7817c --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon49-o.svg @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon5.png b/docs/en/tools/desktop/dde/figures/icon5.png new file mode 100644 index 0000000000000000000000000000000000000000..e4206b7b584bf0702c7cb2f03a3a41e20bfba844 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon5.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon50-o.svg b/docs/en/tools/desktop/dde/figures/icon50-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..05026802be4718205065d6369e14cc0b6ef05bc7 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon50-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon52-o.svg b/docs/en/tools/desktop/dde/figures/icon52-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..23149c05873259cd39721b8ee9c3ab7db86d64c5 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon52-o.svg @@ -0,0 +1,9 @@ + + + attention + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/icon53-o.svg b/docs/en/tools/desktop/dde/figures/icon53-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..50e33489ce984b0acfd621da4a8ef837fdf048c1 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon53-o.svg @@ -0,0 +1,11 @@ + + + + previous + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/icon54-o.svg b/docs/en/tools/desktop/dde/figures/icon54-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..3b599aef4b822c707d2f646405bb00837aed96fd --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon54-o.svg @@ -0,0 +1,18 @@ + + + + Backspace + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/icon56-o.svg b/docs/en/tools/desktop/dde/figures/icon56-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9f13b6861e3858deec8d57a5301c934acc247069 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon56-o.svg @@ -0,0 +1,19 @@ + + + + Slice 1 + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/icon57-o.svg b/docs/en/tools/desktop/dde/figures/icon57-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e6fbfa1381b76ab3fcd45652b33267a7f6c69bb7 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon57-o.svg @@ -0,0 +1,11 @@ + + + + titlebutton/close_normal + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/icon58-o.svg b/docs/en/tools/desktop/dde/figures/icon58-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9746dcacfc8e5d4c4b63233801e37418a190fc8f --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon58-o.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon6.png b/docs/en/tools/desktop/dde/figures/icon6.png new file mode 100644 index 0000000000000000000000000000000000000000..88ced3587e9a42b145fe11393726f40aba9d1b2c Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon6.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon62-o.svg b/docs/en/tools/desktop/dde/figures/icon62-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..09f61b446669df2e05a3351d40d8c30879c7b035 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon62-o.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon63-o.svg b/docs/en/tools/desktop/dde/figures/icon63-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..06c03ed99260ffadc681475dad35610aedf67f83 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon63-o.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon66-o.svg b/docs/en/tools/desktop/dde/figures/icon66-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..5793b3846b7fe6a5758379591215b16c7f9e1b52 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon66-o.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon68-o.svg b/docs/en/tools/desktop/dde/figures/icon68-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..a7748052dfa436116d8742dca28f7d90865231ed --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon68-o.svg @@ -0,0 +1,23 @@ + + + + deepin-system-monitor + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/icon69-o.svg b/docs/en/tools/desktop/dde/figures/icon69-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e21dfd00a32a44ee1c8e3882b4ca8239be04690f --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon69-o.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon7.png b/docs/en/tools/desktop/dde/figures/icon7.png new file mode 100644 index 0000000000000000000000000000000000000000..05fe8aa38c84ca0c0c99b0b005ddec2f2ba42f4a Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon7.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon70-o.svg b/docs/en/tools/desktop/dde/figures/icon70-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..b5787a7ffa5ed9519a48c6937c60927fd11fd455 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon70-o.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon71-o.svg b/docs/en/tools/desktop/dde/figures/icon71-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..669a21f143b06cb45ea3f45f7f071809f2cbc8a8 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon71-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon72-o.svg b/docs/en/tools/desktop/dde/figures/icon72-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..79067ed9b9ff7912e1742183b461fa056601b9cc --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon72-o.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon73-o.svg b/docs/en/tools/desktop/dde/figures/icon73-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..cf6292387f5e790db6ebd66184aabcbb39257ee7 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon73-o.svg @@ -0,0 +1,13 @@ + + + + Down + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/icon75-o.svg b/docs/en/tools/desktop/dde/figures/icon75-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..ef6823ccc19858f57374f0b78ad31514e8311be3 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon75-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/tools/desktop/dde/figures/icon8.png b/docs/en/tools/desktop/dde/figures/icon8.png new file mode 100644 index 0000000000000000000000000000000000000000..01543c3e0f5e96a023b4e1f0859a03e3a0dafd56 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon8.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon83-o.svg b/docs/en/tools/desktop/dde/figures/icon83-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..35dd6eacc54a933dc9ebc3f3010edfa7363fecc0 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon83-o.svg @@ -0,0 +1,84 @@ + + + + + + image/svg+xml + + img_upload + + + + + + img_upload + Created with Sketch. + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon84-o.svg b/docs/en/tools/desktop/dde/figures/icon84-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9bd11b9e7b45b506dd7e1c87d09d545d8f48af06 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon84-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon86-o.svg b/docs/en/tools/desktop/dde/figures/icon86-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..5da20233309c43d4fc7b315f441cde476c835c67 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon86-o.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon88-o.svg b/docs/en/tools/desktop/dde/figures/icon88-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..c2570c26575fd14cb5e9d9fe77831d2e8f6c9333 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon88-o.svg @@ -0,0 +1,13 @@ + + + + Left + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/icon9.png b/docs/en/tools/desktop/dde/figures/icon9.png new file mode 100644 index 0000000000000000000000000000000000000000..a07c9ab8e51decd9a3bca8c969d2ae95bd68512c Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/icon9.png differ diff --git a/docs/en/tools/desktop/dde/figures/icon90-o.svg b/docs/en/tools/desktop/dde/figures/icon90-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..79b5e0a141f7969a8f77ae61f4c240de7187afe9 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon90-o.svg @@ -0,0 +1,12 @@ + + + + lock_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/icon92-o.svg b/docs/en/tools/desktop/dde/figures/icon92-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..21341b64a832e1935252aa82e7a4e0b083c16eae --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon92-o.svg @@ -0,0 +1,12 @@ + + + + logout_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/icon94-o.svg b/docs/en/tools/desktop/dde/figures/icon94-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..a47044149a02101dbd24a3fdb2f3ead77efca6c1 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon94-o.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon97-o.svg b/docs/en/tools/desktop/dde/figures/icon97-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..4f4670de29d8c86885b5aa806b2c8cdc6fc16dcb --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon97-o.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/dde/figures/icon99-o.svg b/docs/en/tools/desktop/dde/figures/icon99-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e9a3aa60a51404c9390bfbea8d8ff09edc0e2e32 --- /dev/null +++ b/docs/en/tools/desktop/dde/figures/icon99-o.svg @@ -0,0 +1,11 @@ + + + notes + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/dde/figures/kiran-1.png b/docs/en/tools/desktop/dde/figures/kiran-1.png new file mode 100644 index 0000000000000000000000000000000000000000..59b632062ba3ff6e26c550567e858eb4dfdfc780 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-1.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-10.png b/docs/en/tools/desktop/dde/figures/kiran-10.png new file mode 100644 index 0000000000000000000000000000000000000000..18cfa3074af1f4b8d49d064a77b016f24ab8c17c Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-10.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-11.png b/docs/en/tools/desktop/dde/figures/kiran-11.png new file mode 100644 index 0000000000000000000000000000000000000000..b58fbb7ce8a798d5355855a4ac0638540df74d9e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-11.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-12.png b/docs/en/tools/desktop/dde/figures/kiran-12.png new file mode 100644 index 0000000000000000000000000000000000000000..920d0c7112be6bed509773413de36506d748b822 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-12.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-13.png b/docs/en/tools/desktop/dde/figures/kiran-13.png new file mode 100644 index 0000000000000000000000000000000000000000..f6632732bd2e8a10d0cda2bd0550f43741a7ba97 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-13.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-14.png b/docs/en/tools/desktop/dde/figures/kiran-14.png new file mode 100644 index 0000000000000000000000000000000000000000..52eae7cc40fe4f7c6b2a8fe9744209a1fcbc30d8 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-14.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-15.png b/docs/en/tools/desktop/dde/figures/kiran-15.png new file mode 100644 index 0000000000000000000000000000000000000000..5496c56ca72983780b9785d2d15c4008fb73aeef Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-15.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-16.png b/docs/en/tools/desktop/dde/figures/kiran-16.png new file mode 100644 index 0000000000000000000000000000000000000000..6125b257245aa89f9b6592ed5b14a95d5699076e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-16.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-17.png b/docs/en/tools/desktop/dde/figures/kiran-17.png new file mode 100644 index 0000000000000000000000000000000000000000..d8a4cb88017efe9f41f78ffc2f9de06dedcc1b23 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-17.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-18.png b/docs/en/tools/desktop/dde/figures/kiran-18.png new file mode 100644 index 0000000000000000000000000000000000000000..0cb0c50d15597998fbd4cf3db2d1d0f9ec3c920e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-18.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-19.png b/docs/en/tools/desktop/dde/figures/kiran-19.png new file mode 100644 index 0000000000000000000000000000000000000000..58ef2d33a52cf6404ea03b6a2d37f8d8b8391539 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-19.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-2.png b/docs/en/tools/desktop/dde/figures/kiran-2.png new file mode 100644 index 0000000000000000000000000000000000000000..088bf53c1e763924e7cee46d0cdac98ad0a9d5e2 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-2.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-20.png b/docs/en/tools/desktop/dde/figures/kiran-20.png new file mode 100644 index 0000000000000000000000000000000000000000..e8608485553033eb2ae141162e4300fa48c578cd Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-20.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-21.png b/docs/en/tools/desktop/dde/figures/kiran-21.png new file mode 100644 index 0000000000000000000000000000000000000000..4d4c0ff304bdfbc8e715d2e756315a005c008336 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-21.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-22.png b/docs/en/tools/desktop/dde/figures/kiran-22.png new file mode 100644 index 0000000000000000000000000000000000000000..6778d5a40a82e699da9531f4727a196d1442b9ae Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-22.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-23.png b/docs/en/tools/desktop/dde/figures/kiran-23.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1d5e284eb299a771c5abbfdff611270ddf2449 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-23.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-24.png b/docs/en/tools/desktop/dde/figures/kiran-24.png new file mode 100644 index 0000000000000000000000000000000000000000..a3ed57f9e9c300a65f867d29a44f287405a0509c Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-24.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-25.png b/docs/en/tools/desktop/dde/figures/kiran-25.png new file mode 100644 index 0000000000000000000000000000000000000000..694e6173dfbf1fda8d07670a8e3daf4fbeb263ac Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-25.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-26.png b/docs/en/tools/desktop/dde/figures/kiran-26.png new file mode 100644 index 0000000000000000000000000000000000000000..3b6ae2eeff3aae39107f15b60c5bb14ffc787cd8 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-26.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-27.png b/docs/en/tools/desktop/dde/figures/kiran-27.png new file mode 100644 index 0000000000000000000000000000000000000000..3b6ae2eeff3aae39107f15b60c5bb14ffc787cd8 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-27.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-28.png b/docs/en/tools/desktop/dde/figures/kiran-28.png new file mode 100644 index 0000000000000000000000000000000000000000..01ff3a8f47248d96c714e78b80fd81cd1ed16e0f Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-28.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-29.png b/docs/en/tools/desktop/dde/figures/kiran-29.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ad5b4438eae441f6086ce5e1aae2e6755aa12a Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-29.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-3.png b/docs/en/tools/desktop/dde/figures/kiran-3.png new file mode 100644 index 0000000000000000000000000000000000000000..e1399424c52eee8804f9433c9e9bf203950008c6 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-3.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-30.png b/docs/en/tools/desktop/dde/figures/kiran-30.png new file mode 100644 index 0000000000000000000000000000000000000000..c1efc1e3931a129affd5dfcea9e319556e492f04 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-30.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-31.png b/docs/en/tools/desktop/dde/figures/kiran-31.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ad5b4438eae441f6086ce5e1aae2e6755aa12a Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-31.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-32.png b/docs/en/tools/desktop/dde/figures/kiran-32.png new file mode 100644 index 0000000000000000000000000000000000000000..fd900ec891b09313a7c558c61213b1816b803034 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-32.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-33.png b/docs/en/tools/desktop/dde/figures/kiran-33.png new file mode 100644 index 0000000000000000000000000000000000000000..64ba70b08ed63c6e0942478d61e36a8c443f0604 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-33.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-34.png b/docs/en/tools/desktop/dde/figures/kiran-34.png new file mode 100644 index 0000000000000000000000000000000000000000..4b869e7d172e2f2889d487157b92204a28a8dc4e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-34.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-35.png b/docs/en/tools/desktop/dde/figures/kiran-35.png new file mode 100644 index 0000000000000000000000000000000000000000..9b383f3c84964b4fc34c4d8e75400325f93908bc Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-35.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-36.png b/docs/en/tools/desktop/dde/figures/kiran-36.png new file mode 100644 index 0000000000000000000000000000000000000000..0b16632852c5024e2c6ec4fbd49513e3b7a2b146 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-36.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-37.png b/docs/en/tools/desktop/dde/figures/kiran-37.png new file mode 100644 index 0000000000000000000000000000000000000000..2be3cc3b2528260c579b59f529e7a5663f1cc779 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-37.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-38.png b/docs/en/tools/desktop/dde/figures/kiran-38.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1ffaf3aa920f922357f6d48700f42974600d77 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-38.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-39.png b/docs/en/tools/desktop/dde/figures/kiran-39.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0e5add782b6c9cf4a8b9f6473c96641c39bd1d Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-39.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-4.png b/docs/en/tools/desktop/dde/figures/kiran-4.png new file mode 100644 index 0000000000000000000000000000000000000000..bd318280b403912ab4846b694592d580b9e5d242 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-4.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-40.png b/docs/en/tools/desktop/dde/figures/kiran-40.png new file mode 100644 index 0000000000000000000000000000000000000000..083031058ff47dc1550881d3a9f189861d3e8563 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-40.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-41.png b/docs/en/tools/desktop/dde/figures/kiran-41.png new file mode 100644 index 0000000000000000000000000000000000000000..582893929e2c10a96c49696411bbed3ea9fd7c55 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-41.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-42.png b/docs/en/tools/desktop/dde/figures/kiran-42.png new file mode 100644 index 0000000000000000000000000000000000000000..eede1243506ccd309ee707465f56c31581dd8554 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-42.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-43.0.png b/docs/en/tools/desktop/dde/figures/kiran-43.0.png new file mode 100644 index 0000000000000000000000000000000000000000..caacc027322d4b7480e6508d4a1b4a13eefcf788 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-43.0.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-43.png b/docs/en/tools/desktop/dde/figures/kiran-43.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea9f45ed8f327fce426352c4ae7fbf06cbefc84 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-43.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-44.png b/docs/en/tools/desktop/dde/figures/kiran-44.png new file mode 100644 index 0000000000000000000000000000000000000000..c86a100005f89dbb9b24055e42d716205d47399e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-44.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-45.png b/docs/en/tools/desktop/dde/figures/kiran-45.png new file mode 100644 index 0000000000000000000000000000000000000000..c5b5d75f972e594587f3393c8d384dcd76e7477e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-45.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-46.png b/docs/en/tools/desktop/dde/figures/kiran-46.png new file mode 100644 index 0000000000000000000000000000000000000000..e9a28632c62de95d8ea2d436ba9bc705ff980991 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-46.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-47.png b/docs/en/tools/desktop/dde/figures/kiran-47.png new file mode 100644 index 0000000000000000000000000000000000000000..a3606e3c899f944eb84d206d98cedc3377197c97 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-47.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-48.png b/docs/en/tools/desktop/dde/figures/kiran-48.png new file mode 100644 index 0000000000000000000000000000000000000000..b69202c9a83bfc2c835ab166ef0fc2455bb4bcd3 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-48.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-49.png b/docs/en/tools/desktop/dde/figures/kiran-49.png new file mode 100644 index 0000000000000000000000000000000000000000..d739e6107fd80ecd741dacaaf9dfb868afc61e37 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-49.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-5.png b/docs/en/tools/desktop/dde/figures/kiran-5.png new file mode 100644 index 0000000000000000000000000000000000000000..154dd54d43b5b98682eb798518046e72fc7e3f83 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-5.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-50.png b/docs/en/tools/desktop/dde/figures/kiran-50.png new file mode 100644 index 0000000000000000000000000000000000000000..96957676afc9f66bcc4b63c5e39eb8890f108015 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-50.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-6.png b/docs/en/tools/desktop/dde/figures/kiran-6.png new file mode 100644 index 0000000000000000000000000000000000000000..927b475d6687d60f04fed8a535b2225a8f4b23f7 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-6.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-7.png b/docs/en/tools/desktop/dde/figures/kiran-7.png new file mode 100644 index 0000000000000000000000000000000000000000..254ef11f36d958f6ef7c70853e5f61032f825463 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-7.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-8.png b/docs/en/tools/desktop/dde/figures/kiran-8.png new file mode 100644 index 0000000000000000000000000000000000000000..29b5845d2fa94cba92719b8649a5e86c926ea911 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-8.png differ diff --git a/docs/en/tools/desktop/dde/figures/kiran-9.png b/docs/en/tools/desktop/dde/figures/kiran-9.png new file mode 100644 index 0000000000000000000000000000000000000000..46bcfdd0e1e88ad0f0ade4a3990c3ac5d66060e7 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kiran-9.png differ diff --git a/docs/en/tools/desktop/dde/figures/kubesphere.png b/docs/en/tools/desktop/dde/figures/kubesphere.png new file mode 100644 index 0000000000000000000000000000000000000000..939dcb70202b19c7853cbfd8f27f6e8e4678ce26 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/kubesphere.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-1.png b/docs/en/tools/desktop/dde/figures/xfce-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c04222d7757b84aa8afecf98815eee25211a86d7 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-1.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-2.png b/docs/en/tools/desktop/dde/figures/xfce-2.png new file mode 100644 index 0000000000000000000000000000000000000000..fa7e1a1ae3c1535a1528f03636d2b62d727412af Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-2.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-3.png b/docs/en/tools/desktop/dde/figures/xfce-3.png new file mode 100644 index 0000000000000000000000000000000000000000..6eeb68ad39f45ff476f1d18b8cd34492ec1f542b Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-3.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-4.png b/docs/en/tools/desktop/dde/figures/xfce-4.png new file mode 100644 index 0000000000000000000000000000000000000000..f66de500fad7c847c2fea2e3774413d1c38e642e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-4.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-5.png b/docs/en/tools/desktop/dde/figures/xfce-5.png new file mode 100644 index 0000000000000000000000000000000000000000..0258b0e5cf6c7c13d88b0431f4b0221e86451ce8 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-5.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-6.png b/docs/en/tools/desktop/dde/figures/xfce-6.png new file mode 100644 index 0000000000000000000000000000000000000000..f2027b37021b260a97ff56a32026a53d00db0763 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-6.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-7.png b/docs/en/tools/desktop/dde/figures/xfce-7.png new file mode 100644 index 0000000000000000000000000000000000000000..b7a94df356b7b9f7dca3d305d066ec854406aaab Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-7.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-71.png b/docs/en/tools/desktop/dde/figures/xfce-71.png new file mode 100644 index 0000000000000000000000000000000000000000..6e2ff40536d18253dcfd4a69396e8e96817f704a Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-71.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-8.png b/docs/en/tools/desktop/dde/figures/xfce-8.png new file mode 100644 index 0000000000000000000000000000000000000000..4ae9885b617e49cba84140e84dd6b354ff55f92c Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-8.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-81.png b/docs/en/tools/desktop/dde/figures/xfce-81.png new file mode 100644 index 0000000000000000000000000000000000000000..b97c9a81c2a07efe361e6dc6ee8bed5db445ecfa Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-81.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-811.png b/docs/en/tools/desktop/dde/figures/xfce-811.png new file mode 100644 index 0000000000000000000000000000000000000000..21447e37a5dd94fc88cb3ec0a11cd0dc0d50cf36 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-811.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-812.png b/docs/en/tools/desktop/dde/figures/xfce-812.png new file mode 100644 index 0000000000000000000000000000000000000000..d505f1ac8111062a172b9fb5f5717d72f653f1b8 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-812.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-813.png b/docs/en/tools/desktop/dde/figures/xfce-813.png new file mode 100644 index 0000000000000000000000000000000000000000..218d3b80c83cade14acc0c0baa4532710d1959dd Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-813.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-814.png b/docs/en/tools/desktop/dde/figures/xfce-814.png new file mode 100644 index 0000000000000000000000000000000000000000..6ccbe910bd32cb4d619ba47d2fcb354424e80451 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-814.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-82.png b/docs/en/tools/desktop/dde/figures/xfce-82.png new file mode 100644 index 0000000000000000000000000000000000000000..170deb5fb43f4e924d5ba4eba94a02c341d31515 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-82.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-821.png b/docs/en/tools/desktop/dde/figures/xfce-821.png new file mode 100644 index 0000000000000000000000000000000000000000..690f3f0b528dfdaf6586549cdeb105df2214fc44 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-821.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-83.png b/docs/en/tools/desktop/dde/figures/xfce-83.png new file mode 100644 index 0000000000000000000000000000000000000000..95e4844c0ece09819d3e9f1e8457bbf371b1282e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-83.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-831.png b/docs/en/tools/desktop/dde/figures/xfce-831.png new file mode 100644 index 0000000000000000000000000000000000000000..61da16b7871a085a6c373a1262c0f785fb415e60 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-831.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-832.png b/docs/en/tools/desktop/dde/figures/xfce-832.png new file mode 100644 index 0000000000000000000000000000000000000000..87b59b42d86ebd205750e162d5f2751b4d87181e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-832.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-84.png b/docs/en/tools/desktop/dde/figures/xfce-84.png new file mode 100644 index 0000000000000000000000000000000000000000..1afe9d9bd51af83c99793666bad47d231bba5c7b Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-84.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-841.png b/docs/en/tools/desktop/dde/figures/xfce-841.png new file mode 100644 index 0000000000000000000000000000000000000000..35875b40b8c95ce32652003daa5caf065747725f Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-841.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-842.png b/docs/en/tools/desktop/dde/figures/xfce-842.png new file mode 100644 index 0000000000000000000000000000000000000000..b4031b575ffc3e9aa5a8edc7826fe28af97d0f23 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-842.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-85.png b/docs/en/tools/desktop/dde/figures/xfce-85.png new file mode 100644 index 0000000000000000000000000000000000000000..bce9a0165290167d5fceee22d74f2abf4aed28fd Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-85.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-851.png b/docs/en/tools/desktop/dde/figures/xfce-851.png new file mode 100644 index 0000000000000000000000000000000000000000..15c9e2d6d04e9b712bdf88d0ee1e7246a8d7b83e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-851.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-86.png b/docs/en/tools/desktop/dde/figures/xfce-86.png new file mode 100644 index 0000000000000000000000000000000000000000..d78bc4ae0dbf13c3ad40b29468bd44056817e522 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-86.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-861.png b/docs/en/tools/desktop/dde/figures/xfce-861.png new file mode 100644 index 0000000000000000000000000000000000000000..9a58733007cfac1c42ff244b52ee14c75051d852 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-861.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-87.png b/docs/en/tools/desktop/dde/figures/xfce-87.png new file mode 100644 index 0000000000000000000000000000000000000000..ee5844bcfa836ec8ecf0a5fea125dcab530ad6db Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-87.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-9.png b/docs/en/tools/desktop/dde/figures/xfce-9.png new file mode 100644 index 0000000000000000000000000000000000000000..5586c4f62cc161665b91a56ad23b2320901901c0 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-9.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-91.png b/docs/en/tools/desktop/dde/figures/xfce-91.png new file mode 100644 index 0000000000000000000000000000000000000000..ee69879bb4ad66405b045af5e3965e275fe8eabf Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-91.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-911.png b/docs/en/tools/desktop/dde/figures/xfce-911.png new file mode 100644 index 0000000000000000000000000000000000000000..b49416558e9ab844fda2026b76e2e900ac106842 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-911.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-92.png b/docs/en/tools/desktop/dde/figures/xfce-92.png new file mode 100644 index 0000000000000000000000000000000000000000..78dd6313c603aad9ebd37fe68e06f98b2a3b331e Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-92.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-921.png b/docs/en/tools/desktop/dde/figures/xfce-921.png new file mode 100644 index 0000000000000000000000000000000000000000..0681efd633cff00fe8572579b8971933cfc41dc1 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-921.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-93.png b/docs/en/tools/desktop/dde/figures/xfce-93.png new file mode 100644 index 0000000000000000000000000000000000000000..06ac80c152fefbe1ad2ba1c989f6acfbbaf1a992 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-93.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-931.png b/docs/en/tools/desktop/dde/figures/xfce-931.png new file mode 100644 index 0000000000000000000000000000000000000000..591a6d21d8fe69aed84d35316af506771a26ac01 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-931.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-94.png b/docs/en/tools/desktop/dde/figures/xfce-94.png new file mode 100644 index 0000000000000000000000000000000000000000..f48064ff5902c4ea740ccba9a1640cbca27b5b72 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-94.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-941.png b/docs/en/tools/desktop/dde/figures/xfce-941.png new file mode 100644 index 0000000000000000000000000000000000000000..aaee48a09a1e7233d25f68c6a74c7c39edc73b1f Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-941.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-95.png b/docs/en/tools/desktop/dde/figures/xfce-95.png new file mode 100644 index 0000000000000000000000000000000000000000..bda965b15a859e4cccf4b80f62875f79eb3470fd Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-95.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-951.png b/docs/en/tools/desktop/dde/figures/xfce-951.png new file mode 100644 index 0000000000000000000000000000000000000000..1d8ff807ac84bdae0dc935c3964d10701b5d47dc Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-951.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-96.png b/docs/en/tools/desktop/dde/figures/xfce-96.png new file mode 100644 index 0000000000000000000000000000000000000000..29ce24923477065b98cacf603f185113e9959069 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-96.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-961.png b/docs/en/tools/desktop/dde/figures/xfce-961.png new file mode 100644 index 0000000000000000000000000000000000000000..9d2944ae05699b8424695c865242c1c4f5d60fac Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-961.png differ diff --git a/docs/en/tools/desktop/dde/figures/xfce-962.png b/docs/en/tools/desktop/dde/figures/xfce-962.png new file mode 100644 index 0000000000000000000000000000000000000000..72c65f9675d8259f327077ce7f7212bd2b17a588 Binary files /dev/null and b/docs/en/tools/desktop/dde/figures/xfce-962.png differ diff --git a/docs/en/tools/desktop/gnome/_toc.yaml b/docs/en/tools/desktop/gnome/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5d6dedb50f009c3c2cad50ff11b6f49add1272bf --- /dev/null +++ b/docs/en/tools/desktop/gnome/_toc.yaml @@ -0,0 +1,8 @@ +label: GNOME User Guide +isManual: true +description: Install and use GNOME +sections: + - label: Installing GNOME + href: ./gnome_installation.md + - label: Using GNOME + href: ./gnome_user_guide.md diff --git a/docs/en/tools/desktop/gnome/figures/.keep b/docs/en/tools/desktop/gnome/figures/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/en/tools/desktop/gnome/figures/1.png b/docs/en/tools/desktop/gnome/figures/1.png new file mode 100644 index 0000000000000000000000000000000000000000..40af4242eebb440a76c749a8d970d50cd7b89bf4 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/1.png differ diff --git a/docs/en/tools/desktop/gnome/figures/10.png b/docs/en/tools/desktop/gnome/figures/10.png new file mode 100644 index 0000000000000000000000000000000000000000..e588ffbe3d8d7b66d92ae8f2b4bcec7c80d0592c Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/10.png differ diff --git a/docs/en/tools/desktop/gnome/figures/11.png b/docs/en/tools/desktop/gnome/figures/11.png new file mode 100644 index 0000000000000000000000000000000000000000..1989a5bb08155f920363e154e68bb148715c7e9e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/11.png differ diff --git a/docs/en/tools/desktop/gnome/figures/12.png b/docs/en/tools/desktop/gnome/figures/12.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6346161182d2cfeaf3818d5ec518ddb11c732e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/12.png differ diff --git a/docs/en/tools/desktop/gnome/figures/1202_1.jpg b/docs/en/tools/desktop/gnome/figures/1202_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..def242a5b9a70602a9aab7dd8048244e7d9f6793 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/1202_1.jpg differ diff --git a/docs/en/tools/desktop/gnome/figures/13.png b/docs/en/tools/desktop/gnome/figures/13.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7def1fb66c90da62acde799eaffca97e3b5396 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/13.png differ diff --git a/docs/en/tools/desktop/gnome/figures/14.png b/docs/en/tools/desktop/gnome/figures/14.png new file mode 100644 index 0000000000000000000000000000000000000000..3a27a66d57e284775420d467f90dcc02889bbffe Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/14.png differ diff --git a/docs/en/tools/desktop/gnome/figures/15.png b/docs/en/tools/desktop/gnome/figures/15.png new file mode 100644 index 0000000000000000000000000000000000000000..370bea32abcaa8a2b06a1a61c1455d4b35f43474 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/15.png differ diff --git a/docs/en/tools/desktop/gnome/figures/16.png b/docs/en/tools/desktop/gnome/figures/16.png new file mode 100644 index 0000000000000000000000000000000000000000..812ee462669c5263ef4bffc49ca4f9b6af4541c6 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/16.png differ diff --git a/docs/en/tools/desktop/gnome/figures/17.png b/docs/en/tools/desktop/gnome/figures/17.png new file mode 100644 index 0000000000000000000000000000000000000000..36e524b806874fa3788f5e4dcd78350686281107 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/17.png differ diff --git a/docs/en/tools/desktop/gnome/figures/18.png b/docs/en/tools/desktop/gnome/figures/18.png new file mode 100644 index 0000000000000000000000000000000000000000..51b32442980aa60646f77dabd53ade74f55891fe Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/18.png differ diff --git a/docs/en/tools/desktop/gnome/figures/19.png b/docs/en/tools/desktop/gnome/figures/19.png new file mode 100644 index 0000000000000000000000000000000000000000..c9457d09aa9f1662b2c9e4550cdbdb9f57dd020e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/19.png differ diff --git a/docs/en/tools/desktop/gnome/figures/2.png b/docs/en/tools/desktop/gnome/figures/2.png new file mode 100644 index 0000000000000000000000000000000000000000..97917cc245484a43bec8562757d920a06f123121 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/2.png differ diff --git a/docs/en/tools/desktop/gnome/figures/20.png b/docs/en/tools/desktop/gnome/figures/20.png new file mode 100644 index 0000000000000000000000000000000000000000..b0943189920d7a541d35da27340593ea93f92a17 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/20.png differ diff --git a/docs/en/tools/desktop/gnome/figures/21.png b/docs/en/tools/desktop/gnome/figures/21.png new file mode 100644 index 0000000000000000000000000000000000000000..e590c22c0ea28906b5f4ea7ccbc6ab11e47ad173 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/21.png differ diff --git a/docs/en/tools/desktop/gnome/figures/22.png b/docs/en/tools/desktop/gnome/figures/22.png new file mode 100644 index 0000000000000000000000000000000000000000..03a548b1ffb1f0ad53cfa5387af2721af90bca81 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/22.png differ diff --git a/docs/en/tools/desktop/gnome/figures/23.png b/docs/en/tools/desktop/gnome/figures/23.png new file mode 100644 index 0000000000000000000000000000000000000000..834c492094715cde1c02c91752ecabfe7921ed62 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/23.png differ diff --git a/docs/en/tools/desktop/gnome/figures/24.png b/docs/en/tools/desktop/gnome/figures/24.png new file mode 100644 index 0000000000000000000000000000000000000000..1881e868b74a60888b319576fa38fb4af92ba75c Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/24.png differ diff --git a/docs/en/tools/desktop/gnome/figures/25.png b/docs/en/tools/desktop/gnome/figures/25.png new file mode 100644 index 0000000000000000000000000000000000000000..f38839725d27a3486984d152e5d9de305364fbd2 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/25.png differ diff --git a/docs/en/tools/desktop/gnome/figures/26.png b/docs/en/tools/desktop/gnome/figures/26.png new file mode 100644 index 0000000000000000000000000000000000000000..6d7957119133ecb98b1b6b104e54a3a4647ec2a5 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/26.png differ diff --git a/docs/en/tools/desktop/gnome/figures/27.png b/docs/en/tools/desktop/gnome/figures/27.png new file mode 100644 index 0000000000000000000000000000000000000000..3e4733717fdc5172d6479b393005219e65e96df4 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/27.png differ diff --git a/docs/en/tools/desktop/gnome/figures/28.png b/docs/en/tools/desktop/gnome/figures/28.png new file mode 100644 index 0000000000000000000000000000000000000000..a77772e818e3f6c11acac3b9cfa18bad14a0a48c Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/28.png differ diff --git a/docs/en/tools/desktop/gnome/figures/29.png b/docs/en/tools/desktop/gnome/figures/29.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f58ffe5855295268298448744e5aadbdc55276 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/29.png differ diff --git a/docs/en/tools/desktop/gnome/figures/3.png b/docs/en/tools/desktop/gnome/figures/3.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb76b336957020ed6867d908e0a8bdcfc953c52 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/3.png differ diff --git a/docs/en/tools/desktop/gnome/figures/30.png b/docs/en/tools/desktop/gnome/figures/30.png new file mode 100644 index 0000000000000000000000000000000000000000..d91adefba1753959e90ccf4aa1501ac08d7144bd Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/30.png differ diff --git a/docs/en/tools/desktop/gnome/figures/31.png b/docs/en/tools/desktop/gnome/figures/31.png new file mode 100644 index 0000000000000000000000000000000000000000..0abef09ab438f5f8cfb68090993f55c493b8c15e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/31.png differ diff --git a/docs/en/tools/desktop/gnome/figures/32.png b/docs/en/tools/desktop/gnome/figures/32.png new file mode 100644 index 0000000000000000000000000000000000000000..d567cfbacc07a9eb46ff2c54a68432f45e034e94 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/32.png differ diff --git a/docs/en/tools/desktop/gnome/figures/33.png b/docs/en/tools/desktop/gnome/figures/33.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5896e2884520672c0bd88d68471b45a09c56fe Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/33.png differ diff --git a/docs/en/tools/desktop/gnome/figures/34.png b/docs/en/tools/desktop/gnome/figures/34.png new file mode 100644 index 0000000000000000000000000000000000000000..81bc9480fbbd81a97c559d7a6a74274deeab2bd1 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/34.png differ diff --git a/docs/en/tools/desktop/gnome/figures/35.png b/docs/en/tools/desktop/gnome/figures/35.png new file mode 100644 index 0000000000000000000000000000000000000000..ab2399847a643a87279337704e23fea7609bb211 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/35.png differ diff --git a/docs/en/tools/desktop/gnome/figures/36.png b/docs/en/tools/desktop/gnome/figures/36.png new file mode 100644 index 0000000000000000000000000000000000000000..536981609b9ae5d32be56bec612f2b3446146184 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/36.png differ diff --git a/docs/en/tools/desktop/gnome/figures/37.png b/docs/en/tools/desktop/gnome/figures/37.png new file mode 100644 index 0000000000000000000000000000000000000000..e39aa03587642dc1f8622fff515b05a9a3085b28 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/37.png differ diff --git a/docs/en/tools/desktop/gnome/figures/38.png b/docs/en/tools/desktop/gnome/figures/38.png new file mode 100644 index 0000000000000000000000000000000000000000..838f5ff0616a83cdf42edb053f4e72b93bfa644e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/38.png differ diff --git a/docs/en/tools/desktop/gnome/figures/39.png b/docs/en/tools/desktop/gnome/figures/39.png new file mode 100644 index 0000000000000000000000000000000000000000..12a379403d73a47b2fa564120a28fdb58d188963 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/39.png differ diff --git a/docs/en/tools/desktop/gnome/figures/4.png b/docs/en/tools/desktop/gnome/figures/4.png new file mode 100644 index 0000000000000000000000000000000000000000..5078e36aca713706d2cf08a3ebecdc3769951899 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/4.png differ diff --git a/docs/en/tools/desktop/gnome/figures/40.png b/docs/en/tools/desktop/gnome/figures/40.png new file mode 100644 index 0000000000000000000000000000000000000000..bf419894eab852b45604966c62fafa71f051c4df Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/40.png differ diff --git a/docs/en/tools/desktop/gnome/figures/41.png b/docs/en/tools/desktop/gnome/figures/41.png new file mode 100644 index 0000000000000000000000000000000000000000..f94b0ee72e0d4e9277e9b44b4268cfbdb8402104 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/41.png differ diff --git a/docs/en/tools/desktop/gnome/figures/42.png b/docs/en/tools/desktop/gnome/figures/42.png new file mode 100644 index 0000000000000000000000000000000000000000..3182e551c4e4b03885bad6339f1de514b3f55f8c Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/42.png differ diff --git a/docs/en/tools/desktop/gnome/figures/43.jpg b/docs/en/tools/desktop/gnome/figures/43.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26e9244f58ea9800081fd61ae135477f05b21b40 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/43.jpg differ diff --git a/docs/en/tools/desktop/gnome/figures/44.png b/docs/en/tools/desktop/gnome/figures/44.png new file mode 100644 index 0000000000000000000000000000000000000000..c3abaecd6e053272d81e0ad9bd183c6858b4f3c5 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/44.png differ diff --git a/docs/en/tools/desktop/gnome/figures/45.png b/docs/en/tools/desktop/gnome/figures/45.png new file mode 100644 index 0000000000000000000000000000000000000000..86b051acde857c88479714414f721a7f59cca483 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/45.png differ diff --git a/docs/en/tools/desktop/gnome/figures/46.png b/docs/en/tools/desktop/gnome/figures/46.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ec41c87628bf28c9905523f99ae93aebd13614 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/46.png differ diff --git a/docs/en/tools/desktop/gnome/figures/47.jpg b/docs/en/tools/desktop/gnome/figures/47.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf95f03c8ea0f84a878bc63af20972c9da71bc04 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/47.jpg differ diff --git a/docs/en/tools/desktop/gnome/figures/48.png b/docs/en/tools/desktop/gnome/figures/48.png new file mode 100644 index 0000000000000000000000000000000000000000..ef21fa1ce1e2e9848a8dca16e692de673df7c6d7 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/48.png differ diff --git a/docs/en/tools/desktop/gnome/figures/49.png b/docs/en/tools/desktop/gnome/figures/49.png new file mode 100644 index 0000000000000000000000000000000000000000..3b77668e5a4d1bdb3043c473dff9b36fa7144714 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/49.png differ diff --git a/docs/en/tools/desktop/gnome/figures/5.png b/docs/en/tools/desktop/gnome/figures/5.png new file mode 100644 index 0000000000000000000000000000000000000000..2976a745cfaede26594d6daa01cfc18d18b1de8b Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/5.png differ diff --git a/docs/en/tools/desktop/gnome/figures/50.png b/docs/en/tools/desktop/gnome/figures/50.png new file mode 100644 index 0000000000000000000000000000000000000000..b86a55fe4363f56fc18befc9d27025a75ca427ad Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/50.png differ diff --git a/docs/en/tools/desktop/gnome/figures/51.png b/docs/en/tools/desktop/gnome/figures/51.png new file mode 100644 index 0000000000000000000000000000000000000000..d427ac871dba9c32eb4ffe736d5352f8408da533 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/51.png differ diff --git a/docs/en/tools/desktop/gnome/figures/52.png b/docs/en/tools/desktop/gnome/figures/52.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca0a2db05c70bc25f9bb59e82d074f671cfc74e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/52.png differ diff --git a/docs/en/tools/desktop/gnome/figures/53.png b/docs/en/tools/desktop/gnome/figures/53.png new file mode 100644 index 0000000000000000000000000000000000000000..76fbc34a1d5621b83c2d8c93222766acad33350d Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/53.png differ diff --git a/docs/en/tools/desktop/gnome/figures/54.png b/docs/en/tools/desktop/gnome/figures/54.png new file mode 100644 index 0000000000000000000000000000000000000000..49ecae6f8941a118223f3765c23015df074c4983 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/54.png differ diff --git a/docs/en/tools/desktop/gnome/figures/56.png b/docs/en/tools/desktop/gnome/figures/56.png new file mode 100644 index 0000000000000000000000000000000000000000..36fee795bfe593b6246c8d6c2bddea9386b06f45 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/56.png differ diff --git a/docs/en/tools/desktop/gnome/figures/57.png b/docs/en/tools/desktop/gnome/figures/57.png new file mode 100644 index 0000000000000000000000000000000000000000..539d06b77b058a933cb154c43641d498050986e0 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/57.png differ diff --git a/docs/en/tools/desktop/gnome/figures/58.png b/docs/en/tools/desktop/gnome/figures/58.png new file mode 100644 index 0000000000000000000000000000000000000000..396ca16d873e54505bcdbd41d669366eea7f5dee Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/58.png differ diff --git a/docs/en/tools/desktop/gnome/figures/59.png b/docs/en/tools/desktop/gnome/figures/59.png new file mode 100644 index 0000000000000000000000000000000000000000..9b1de98ac4fe686937ca844d3e9481548a79ce63 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/59.png differ diff --git a/docs/en/tools/desktop/gnome/figures/6.png b/docs/en/tools/desktop/gnome/figures/6.png new file mode 100644 index 0000000000000000000000000000000000000000..275c23872f2353f007371672714902babcc3db53 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/6.png differ diff --git a/docs/en/tools/desktop/gnome/figures/60.jpg b/docs/en/tools/desktop/gnome/figures/60.jpg new file mode 100644 index 0000000000000000000000000000000000000000..033c88aaadd04f7d4058ec2eb5b2c70498319bf7 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/60.jpg differ diff --git a/docs/en/tools/desktop/gnome/figures/61.png b/docs/en/tools/desktop/gnome/figures/61.png new file mode 100644 index 0000000000000000000000000000000000000000..8df17062963a3baf92318a12ec34b1378122687b Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/61.png differ diff --git a/docs/en/tools/desktop/gnome/figures/62.png b/docs/en/tools/desktop/gnome/figures/62.png new file mode 100644 index 0000000000000000000000000000000000000000..ec312d6c0c22018c1745dd866da71ce9be47fbda Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/62.png differ diff --git a/docs/en/tools/desktop/gnome/figures/63.jpg b/docs/en/tools/desktop/gnome/figures/63.jpg new file mode 100644 index 0000000000000000000000000000000000000000..504f7cf59768f6fd1cd73a115d01fbc4e15a02e1 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/63.jpg differ diff --git a/docs/en/tools/desktop/gnome/figures/63.png b/docs/en/tools/desktop/gnome/figures/63.png new file mode 100644 index 0000000000000000000000000000000000000000..86b051acde857c88479714414f721a7f59cca483 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/63.png differ diff --git a/docs/en/tools/desktop/gnome/figures/64.png b/docs/en/tools/desktop/gnome/figures/64.png new file mode 100644 index 0000000000000000000000000000000000000000..cbbd2ede047e735c3766e08b04595f08cd72f5b2 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/64.png differ diff --git a/docs/en/tools/desktop/gnome/figures/7.png b/docs/en/tools/desktop/gnome/figures/7.png new file mode 100644 index 0000000000000000000000000000000000000000..4d397959ac7f6d166ef5a3b7084bd5c3c93b475f Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/7.png differ diff --git a/docs/en/tools/desktop/gnome/figures/8.png b/docs/en/tools/desktop/gnome/figures/8.png new file mode 100644 index 0000000000000000000000000000000000000000..8ade274092d7b3e461c96d7909a9d89d3a944f09 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/8.png differ diff --git a/docs/en/tools/desktop/gnome/figures/9.png b/docs/en/tools/desktop/gnome/figures/9.png new file mode 100644 index 0000000000000000000000000000000000000000..f7b2215404929346f1a814b0b1d6d482559c08b5 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/9.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-add-resource.png b/docs/en/tools/desktop/gnome/figures/HA-add-resource.png new file mode 100644 index 0000000000000000000000000000000000000000..ac24895a1247828d248132f6c789ad8ef51a57e4 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-add-resource.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-apache-show.png b/docs/en/tools/desktop/gnome/figures/HA-apache-show.png new file mode 100644 index 0000000000000000000000000000000000000000..c216500910f75f2de1108f6b618c5c08f4df8bae Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-apache-show.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-apache-suc.png b/docs/en/tools/desktop/gnome/figures/HA-apache-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..23a7aaa702e3e68190ff7e01a5a673aee2c92409 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-apache-suc.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-api.png b/docs/en/tools/desktop/gnome/figures/HA-api.png new file mode 100644 index 0000000000000000000000000000000000000000..f825fe005705d30809d12df97958cff0e5a80135 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-api.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-clone-suc.png b/docs/en/tools/desktop/gnome/figures/HA-clone-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..4b6099ccc88d4f6f907a0c4563e729ab2a4dece1 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-clone-suc.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-clone.png b/docs/en/tools/desktop/gnome/figures/HA-clone.png new file mode 100644 index 0000000000000000000000000000000000000000..1b09ab73849494f4ffd759fa612ae3c241bd9c1d Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-clone.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-corosync.png b/docs/en/tools/desktop/gnome/figures/HA-corosync.png new file mode 100644 index 0000000000000000000000000000000000000000..c4d93242e65c503b6e1b6a457e2517f647984a66 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-corosync.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-firstchoice-cmd.png b/docs/en/tools/desktop/gnome/figures/HA-firstchoice-cmd.png new file mode 100644 index 0000000000000000000000000000000000000000..a265bab07f1d8e46d9d965975be180a8de6c9eb2 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-firstchoice-cmd.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-firstchoice.png b/docs/en/tools/desktop/gnome/figures/HA-firstchoice.png new file mode 100644 index 0000000000000000000000000000000000000000..bd982ddcea55c629c0257fca86051a9ffa77e7b4 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-firstchoice.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-group-new-suc.png b/docs/en/tools/desktop/gnome/figures/HA-group-new-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..437fd01ee83a9a1f65c12838fe56eea8435f6759 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-group-new-suc.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-group-new-suc2.png b/docs/en/tools/desktop/gnome/figures/HA-group-new-suc2.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb933bd761f9808de95a324a50226ff041ebd4f Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-group-new-suc2.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-group-new.png b/docs/en/tools/desktop/gnome/figures/HA-group-new.png new file mode 100644 index 0000000000000000000000000000000000000000..9c914d0cc2e14f3220fc4346175961f129efb37b Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-group-new.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-group-suc.png b/docs/en/tools/desktop/gnome/figures/HA-group-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..2338580343833ebab08627be3a2efbcdb48aef9e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-group-suc.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-group.png b/docs/en/tools/desktop/gnome/figures/HA-group.png new file mode 100644 index 0000000000000000000000000000000000000000..6897817665dee90c0f8c47c6a3cb4bb09db52d78 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-group.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-home-page.png b/docs/en/tools/desktop/gnome/figures/HA-home-page.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a7a82dc412250d4c0984b3876c6f93c6aca789 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-home-page.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-login.png b/docs/en/tools/desktop/gnome/figures/HA-login.png new file mode 100644 index 0000000000000000000000000000000000000000..65d0ae11ec810da7574ec72bebf6e1b020c94a0d Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-login.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-mariadb-suc.png b/docs/en/tools/desktop/gnome/figures/HA-mariadb-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..6f6756c945121715edc623bd9a848bc48ffeb4ca Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-mariadb-suc.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-mariadb.png b/docs/en/tools/desktop/gnome/figures/HA-mariadb.png new file mode 100644 index 0000000000000000000000000000000000000000..d29587c8609b9d6aefeb07170901361b5ef8402d Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-mariadb.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-nfs-suc.png b/docs/en/tools/desktop/gnome/figures/HA-nfs-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..c0ea6af79e91649f1ad7d97ab6c2a0069a4f4fb8 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-nfs-suc.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-nfs.png b/docs/en/tools/desktop/gnome/figures/HA-nfs.png new file mode 100644 index 0000000000000000000000000000000000000000..f6917938eec2e0431a9891c067475dd0b21c1bd9 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-nfs.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-pacemaker.png b/docs/en/tools/desktop/gnome/figures/HA-pacemaker.png new file mode 100644 index 0000000000000000000000000000000000000000..7681f963f67d2b803fef6fb2c3247384136201f8 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-pacemaker.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-pcs-status.png b/docs/en/tools/desktop/gnome/figures/HA-pcs-status.png new file mode 100644 index 0000000000000000000000000000000000000000..fb150fba9f6258658702b35caacf98076d1fd109 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-pcs-status.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-pcs.png b/docs/en/tools/desktop/gnome/figures/HA-pcs.png new file mode 100644 index 0000000000000000000000000000000000000000..283670d7c3d0961ee1cb41345c2b2a013d7143b0 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-pcs.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-refresh.png b/docs/en/tools/desktop/gnome/figures/HA-refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..c2678c0c2945acbabfbeae0d5de8924a216bbf31 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-refresh.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-vip-suc.png b/docs/en/tools/desktop/gnome/figures/HA-vip-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..313ce56e14f931c78dad4349ed57ab3fd7907f50 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-vip-suc.png differ diff --git a/docs/en/tools/desktop/gnome/figures/HA-vip.png b/docs/en/tools/desktop/gnome/figures/HA-vip.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b417df2e64527d3b29d0289756dfbb01bf66ec Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/HA-vip.png differ diff --git a/docs/en/tools/desktop/gnome/figures/dde-1.png b/docs/en/tools/desktop/gnome/figures/dde-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fb1d5177c39262ed182f10a57fdae850d007eeb1 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/dde-1.png differ diff --git a/docs/en/tools/desktop/gnome/figures/dde-2.png b/docs/en/tools/desktop/gnome/figures/dde-2.png new file mode 100644 index 0000000000000000000000000000000000000000..be5d296937bd17b9646b32c80934aa76738027af Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/dde-2.png differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-1.PNG b/docs/en/tools/desktop/gnome/figures/gnome-1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ed57060770957f304a3fb7ca993241d56e90f541 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-1.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-10.PNG b/docs/en/tools/desktop/gnome/figures/gnome-10.PNG new file mode 100644 index 0000000000000000000000000000000000000000..94af842ca7d0de47db4d0030a0741d0cae634a21 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-10.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-11.PNG b/docs/en/tools/desktop/gnome/figures/gnome-11.PNG new file mode 100644 index 0000000000000000000000000000000000000000..022c764002542196b723eadaaaae080b3afc1d0f Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-11.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-12.PNG b/docs/en/tools/desktop/gnome/figures/gnome-12.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4255aa3e1629b2af94ec59ae0fe346d91da8ba61 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-12.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-13.PNG b/docs/en/tools/desktop/gnome/figures/gnome-13.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f6bad1c09c36bdef3ed4dd48c14e98c03a230cc7 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-13.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-14.PNG b/docs/en/tools/desktop/gnome/figures/gnome-14.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a661a4e759ff3107fc9bfa5f664a86f77051dfcf Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-14.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-15.PNG b/docs/en/tools/desktop/gnome/figures/gnome-15.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2e5a26c33b2cb432d4b7a79af8407b5b13592d09 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-15.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-16.PNG b/docs/en/tools/desktop/gnome/figures/gnome-16.PNG new file mode 100644 index 0000000000000000000000000000000000000000..178d5e836b69168c441676c4e77721e22f460981 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-16.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-17.PNG b/docs/en/tools/desktop/gnome/figures/gnome-17.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2ea9f9e1914bb90193689e3d35e48918dcc7c019 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-17.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-18.PNG b/docs/en/tools/desktop/gnome/figures/gnome-18.PNG new file mode 100644 index 0000000000000000000000000000000000000000..55b5c07ea89fca246600ff7ea0ff66f03427ddcb Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-18.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-19.PNG b/docs/en/tools/desktop/gnome/figures/gnome-19.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b9f78d01b726078d25d900e4ef9f9ffb1bdc9075 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-19.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-2.PNG b/docs/en/tools/desktop/gnome/figures/gnome-2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..cf86813c71dd47584c5f4d9c0d6fec29813c9dc9 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-2.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-20.PNG b/docs/en/tools/desktop/gnome/figures/gnome-20.PNG new file mode 100644 index 0000000000000000000000000000000000000000..37133665e2025c5267c3bf1ea742bc7295d0cb59 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-20.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-21.PNG b/docs/en/tools/desktop/gnome/figures/gnome-21.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0d0bc17b2a973d6e035b3d08097e0ad6138ed786 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-21.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-22.PNG b/docs/en/tools/desktop/gnome/figures/gnome-22.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4967a95e8c1fcf4fa5e6a799933149365e447725 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-22.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-23.PNG b/docs/en/tools/desktop/gnome/figures/gnome-23.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ac39542d77bdfe64b1c3d0119870cbd5e0136d17 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-23.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-24.PNG b/docs/en/tools/desktop/gnome/figures/gnome-24.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e4572c436249b329643a6777ddf6a2852fcab5a6 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-24.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-25.PNG b/docs/en/tools/desktop/gnome/figures/gnome-25.PNG new file mode 100644 index 0000000000000000000000000000000000000000..93ac3582bd0dc5a273614e20b89ea654fe02ff9d Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-25.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-26.PNG b/docs/en/tools/desktop/gnome/figures/gnome-26.PNG new file mode 100644 index 0000000000000000000000000000000000000000..98f349dab192b4b6a297d4907b9156c5d6240652 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-26.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-27.PNG b/docs/en/tools/desktop/gnome/figures/gnome-27.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ea319f8df41e1bdbccb34e597ccdb3c6d21a3727 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-27.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-28.PNG b/docs/en/tools/desktop/gnome/figures/gnome-28.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b2f1db5ea27cdfada82ba9572395598df2ecf648 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-28.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-29.PNG b/docs/en/tools/desktop/gnome/figures/gnome-29.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fc2f6a8a2bbc56af1b657a5a25359aa15183125e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-29.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-3.PNG b/docs/en/tools/desktop/gnome/figures/gnome-3.PNG new file mode 100644 index 0000000000000000000000000000000000000000..3ac1eb3b0d6cd8a84b0c408f745e40db6d845ca8 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-3.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-30.PNG b/docs/en/tools/desktop/gnome/figures/gnome-30.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6799ad80c89443267a31c0b2d3b059cc9dd8aceb Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-30.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-31.PNG b/docs/en/tools/desktop/gnome/figures/gnome-31.PNG new file mode 100644 index 0000000000000000000000000000000000000000..39ebf079f7a11c28359440111b548bf2d7be5aaa Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-31.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-32.PNG b/docs/en/tools/desktop/gnome/figures/gnome-32.PNG new file mode 100644 index 0000000000000000000000000000000000000000..28a77475cf3a1176a0c5d01418e1833fef627cc7 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-32.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-33.PNG b/docs/en/tools/desktop/gnome/figures/gnome-33.PNG new file mode 100644 index 0000000000000000000000000000000000000000..cecde6d0ab299f69ad95f25ff7d3f7130da09d02 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-33.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-34.PNG b/docs/en/tools/desktop/gnome/figures/gnome-34.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a760c501d86debdb81a89ef3a70b694e22d0e4da Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-34.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-35.PNG b/docs/en/tools/desktop/gnome/figures/gnome-35.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ab46f383f1b8f2c740effff3c59ad224b9e5025b Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-35.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-36.PNG b/docs/en/tools/desktop/gnome/figures/gnome-36.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e248144b99bb65943446f6c9fbd6ad45c11ddd58 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-36.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-37.PNG b/docs/en/tools/desktop/gnome/figures/gnome-37.PNG new file mode 100644 index 0000000000000000000000000000000000000000..7181726fb3d074298e41ee59ca14c9be68884aad Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-37.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-38.PNG b/docs/en/tools/desktop/gnome/figures/gnome-38.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b5c02d20fbad894fa3702b6274b047ef26ea1a10 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-38.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-39.PNG b/docs/en/tools/desktop/gnome/figures/gnome-39.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0c85bb5f72d7625e683409c3d4605b56f74d746b Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-39.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-4.PNG b/docs/en/tools/desktop/gnome/figures/gnome-4.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0bce0130188f00f30c67a4a8d4904ad8419428da Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-4.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-40.PNG b/docs/en/tools/desktop/gnome/figures/gnome-40.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e0c5a085776933b08d94cf51ae22d52af0a68ca0 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-40.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-41.PNG b/docs/en/tools/desktop/gnome/figures/gnome-41.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0fc42fc339480115cc588fee59983faf4652fc80 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-41.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-42.PNG b/docs/en/tools/desktop/gnome/figures/gnome-42.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fa18531c9e9ec6ee9dcb9e7c5046ee41bcfa454f Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-42.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-43.PNG b/docs/en/tools/desktop/gnome/figures/gnome-43.PNG new file mode 100644 index 0000000000000000000000000000000000000000..aadb23eda46dc831a56935a38f9a7d0c9534db89 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-43.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-44.PNG b/docs/en/tools/desktop/gnome/figures/gnome-44.PNG new file mode 100644 index 0000000000000000000000000000000000000000..8747e97f510cfd64abf520e099b5abeceb056970 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-44.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-45.PNG b/docs/en/tools/desktop/gnome/figures/gnome-45.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a0841f2360ad016c15444ff913a4a7b437ee047e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-45.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-46.PNG b/docs/en/tools/desktop/gnome/figures/gnome-46.PNG new file mode 100644 index 0000000000000000000000000000000000000000..d1815b118b98b523c1c97d14a69292528248878c Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-46.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-47.PNG b/docs/en/tools/desktop/gnome/figures/gnome-47.PNG new file mode 100644 index 0000000000000000000000000000000000000000..73c8deaf7bf8c3fca34fec443e9b60d13910732b Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-47.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-48.PNG b/docs/en/tools/desktop/gnome/figures/gnome-48.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6414ceafc991a94815324d362918b06e849d952e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-48.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-49.PNG b/docs/en/tools/desktop/gnome/figures/gnome-49.PNG new file mode 100644 index 0000000000000000000000000000000000000000..040a7a235cc3dca8dfae6d89f1d28bb308a42391 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-49.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-5.PNG b/docs/en/tools/desktop/gnome/figures/gnome-5.PNG new file mode 100644 index 0000000000000000000000000000000000000000..30076d824d8dde3206ff012538e1691df3a3e5ed Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-5.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-50.PNG b/docs/en/tools/desktop/gnome/figures/gnome-50.PNG new file mode 100644 index 0000000000000000000000000000000000000000..05951779983fa2c198afca908f6c54cbc35f557a Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-50.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-51.PNG b/docs/en/tools/desktop/gnome/figures/gnome-51.PNG new file mode 100644 index 0000000000000000000000000000000000000000..995f82f57a7828926ceea5dbaaf9f79ec453c1ab Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-51.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-52.PNG b/docs/en/tools/desktop/gnome/figures/gnome-52.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6607be66dc61953729cf5106b4d39aa724b8bf76 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-52.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-53.PNG b/docs/en/tools/desktop/gnome/figures/gnome-53.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b1e851620eadab0376be79fcc12c0d8d3d943ec3 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-53.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-54.PNG b/docs/en/tools/desktop/gnome/figures/gnome-54.PNG new file mode 100644 index 0000000000000000000000000000000000000000..c9e773a1aec444feedfbfb3dce8ca9745ccb9f9e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-54.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-55.PNG b/docs/en/tools/desktop/gnome/figures/gnome-55.PNG new file mode 100644 index 0000000000000000000000000000000000000000..bd935df19ada2bbbf6f9f4b58d020f73fbdbbed0 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-55.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-56.PNG b/docs/en/tools/desktop/gnome/figures/gnome-56.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4475f73a68296d19cf0010b1f848aa3cbcd82858 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-56.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-57.PNG b/docs/en/tools/desktop/gnome/figures/gnome-57.PNG new file mode 100644 index 0000000000000000000000000000000000000000..24073cd56613e3fce7f3a7e0f057a12d8d8f3077 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-57.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-58.PNG b/docs/en/tools/desktop/gnome/figures/gnome-58.PNG new file mode 100644 index 0000000000000000000000000000000000000000..19112ae3f1f4ee9e0d7b2191ddec2d14ad171d67 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-58.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-59.PNG b/docs/en/tools/desktop/gnome/figures/gnome-59.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4c4225e9208ad3d38e1ec9e846d6b7c5e89e3991 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-59.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-6.PNG b/docs/en/tools/desktop/gnome/figures/gnome-6.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fa53206b21811a75382f6aee788c1cd8a20d9ba7 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-6.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-7.PNG b/docs/en/tools/desktop/gnome/figures/gnome-7.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fe38b39118bb79bef4412ed0f08c472ad145980e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-7.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-8.PNG b/docs/en/tools/desktop/gnome/figures/gnome-8.PNG new file mode 100644 index 0000000000000000000000000000000000000000..769939c5583d02d014ded8065eaa7ac6aeb81cd4 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-8.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/gnome-9.PNG b/docs/en/tools/desktop/gnome/figures/gnome-9.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b699942966fe2fe444e86231638f917f524328d9 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/gnome-9.PNG differ diff --git a/docs/en/tools/desktop/gnome/figures/icon1.png b/docs/en/tools/desktop/gnome/figures/icon1.png new file mode 100644 index 0000000000000000000000000000000000000000..9bac00355cf4aa57d32287fd4271404f6fd3fd4d Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon1.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon10-o.png b/docs/en/tools/desktop/gnome/figures/icon10-o.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c56d1a64c588d86f8fe510c74e5a7c4cb810d4 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon10-o.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon101-o.svg b/docs/en/tools/desktop/gnome/figures/icon101-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..af1c5d3dc0277a6ea59e71efb6ca97bdfc782e8e --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon101-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon103-o.svg b/docs/en/tools/desktop/gnome/figures/icon103-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..c06c885725c569ab8db1fe7d595a7c65f18c5142 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon103-o.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon105-o.svg b/docs/en/tools/desktop/gnome/figures/icon105-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..36c49949fa569330b761c2d65518f36c10435508 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon105-o.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon107-o.svg b/docs/en/tools/desktop/gnome/figures/icon107-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..fb5a3ea756f6ccb7b3e5c31122a433347a908c96 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon107-o.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon11-o.png b/docs/en/tools/desktop/gnome/figures/icon11-o.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1f2cb7f99b583768c7cbd7e05a57f302dbe8a Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon11-o.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon110-o.svg b/docs/en/tools/desktop/gnome/figures/icon110-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..7958e3f192061592e002e1e8a1bad06ffa86742c --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon110-o.svg @@ -0,0 +1,12 @@ + + + + reboot_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/icon111-o.svg b/docs/en/tools/desktop/gnome/figures/icon111-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..097d16a08d305a8b3f3b2268ab1ea8342e799377 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon111-o.svg @@ -0,0 +1,13 @@ + + + + Right + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/icon112-o.svg b/docs/en/tools/desktop/gnome/figures/icon112-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e51628c2b8b10495f3410d219814286696ea2fd5 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon112-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon116-o.svg b/docs/en/tools/desktop/gnome/figures/icon116-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..4d79cd6dbbbfd3969f4e0ad0ad88e27398853505 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon116-o.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon12-o.png b/docs/en/tools/desktop/gnome/figures/icon12-o.png new file mode 100644 index 0000000000000000000000000000000000000000..f1f0f59dd3879461a0b5bc0632693a4a4124def3 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon12-o.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon120-o.svg b/docs/en/tools/desktop/gnome/figures/icon120-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e895c347d16a200aea46b00428b0b9f1a3c94246 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon120-o.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon122-o.svg b/docs/en/tools/desktop/gnome/figures/icon122-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..7fb014b5fd6097ca37a84d0b6a27dc982d675c8a --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon122-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon124-o.svg b/docs/en/tools/desktop/gnome/figures/icon124-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..960c0ec096c925213f8953398f0e8e5db3cdaed3 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon124-o.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon125-o.svg b/docs/en/tools/desktop/gnome/figures/icon125-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..011c05f4b8f296867cd408a339230323fcbb28dd --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon125-o.svg @@ -0,0 +1,9 @@ + + + tips + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/icon126-o.svg b/docs/en/tools/desktop/gnome/figures/icon126-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e0a43b6b8beb434090ac0dd3a8fd68c023f11fce --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon126-o.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon127-o.svg b/docs/en/tools/desktop/gnome/figures/icon127-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..bed95d35334a8d0151211054236c0bacddcc0dd3 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon127-o.svg @@ -0,0 +1,13 @@ + + + + Up + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/icon128-o.svg b/docs/en/tools/desktop/gnome/figures/icon128-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..aa727f3f5d5883b3fb83a79c4b98e8b5bfe4ade6 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon128-o.svg @@ -0,0 +1,12 @@ + + + + userswitch_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/icon13-o.png b/docs/en/tools/desktop/gnome/figures/icon13-o.png new file mode 100644 index 0000000000000000000000000000000000000000..c05a981b29d8ad11c6682f796f79b4cafd0f088b Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon13-o.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon132-o.svg b/docs/en/tools/desktop/gnome/figures/icon132-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..588ba9d98864ba67a562fa9179f29405f7687aa0 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon132-o.svg @@ -0,0 +1,15 @@ + + + + - + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/icon133-o.svg b/docs/en/tools/desktop/gnome/figures/icon133-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..886d90a83e33497d134bdb3dcc864a5c2df53f20 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon133-o.svg @@ -0,0 +1,13 @@ + + + + + + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/icon134-o.svg b/docs/en/tools/desktop/gnome/figures/icon134-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..784cf383eb0e8f5c7a57a602047be50ad0a3bc05 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon134-o.svg @@ -0,0 +1,15 @@ + + + + = + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/icon135-o.svg b/docs/en/tools/desktop/gnome/figures/icon135-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..cea628a8f5eb92d10661b690242b6de41ca64816 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon135-o.svg @@ -0,0 +1,15 @@ + + + + ~ + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/icon136-o.svg b/docs/en/tools/desktop/gnome/figures/icon136-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..24aa139ab2fefaee20935551f1af5aef473719ed --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon136-o.svg @@ -0,0 +1,12 @@ + + + + poweroff_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/icon14-o.png b/docs/en/tools/desktop/gnome/figures/icon14-o.png new file mode 100644 index 0000000000000000000000000000000000000000..b21deee4d98593d93fb5f72158d2d78f3d3f1cb9 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon14-o.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon15-o.png b/docs/en/tools/desktop/gnome/figures/icon15-o.png new file mode 100644 index 0000000000000000000000000000000000000000..1827a20e9da4d28e35e8ab2eae739b2fec37b385 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon15-o.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon16.png b/docs/en/tools/desktop/gnome/figures/icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..f271594dda9d3ad0f038c9d719dd68c3e82c59f1 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon16.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon17.png b/docs/en/tools/desktop/gnome/figures/icon17.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe58b89347c857920bce25f067fbd11c308e502 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon17.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon18.png b/docs/en/tools/desktop/gnome/figures/icon18.png new file mode 100644 index 0000000000000000000000000000000000000000..1827a20e9da4d28e35e8ab2eae739b2fec37b385 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon18.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon19-o.png b/docs/en/tools/desktop/gnome/figures/icon19-o.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1f2cb7f99b583768c7cbd7e05a57f302dbe8a Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon19-o.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon2.png b/docs/en/tools/desktop/gnome/figures/icon2.png new file mode 100644 index 0000000000000000000000000000000000000000..9101e4b386df065a87d422bc5a0b287528ea5ec7 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon2.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon20.png b/docs/en/tools/desktop/gnome/figures/icon20.png new file mode 100644 index 0000000000000000000000000000000000000000..4de3c7c695893539967245ea5e269b26e2b735be Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon20.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon21.png b/docs/en/tools/desktop/gnome/figures/icon21.png new file mode 100644 index 0000000000000000000000000000000000000000..e7b4320b6ce1fd4adb52525ba2c60983ffb2eed3 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon21.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon22.png b/docs/en/tools/desktop/gnome/figures/icon22.png new file mode 100644 index 0000000000000000000000000000000000000000..43bfa96965ad13e0a34ead3cb1102a76b9346a23 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon22.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon23.png b/docs/en/tools/desktop/gnome/figures/icon23.png new file mode 100644 index 0000000000000000000000000000000000000000..aee221ddaa81d06fa7bd5b89a624da90cd1e53da Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon23.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon24.png b/docs/en/tools/desktop/gnome/figures/icon24.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e5d700431ca1666fe9eda2cefce5dd2f83bdcd Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon24.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon25.png b/docs/en/tools/desktop/gnome/figures/icon25.png new file mode 100644 index 0000000000000000000000000000000000000000..3de0f9476bbee9e89c3b759afbed968f17b5bbcc Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon25.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon26-o.png b/docs/en/tools/desktop/gnome/figures/icon26-o.png new file mode 100644 index 0000000000000000000000000000000000000000..2293a893caf6d89c3beb978598fe7f281e68e7d5 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon26-o.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon27-o.png b/docs/en/tools/desktop/gnome/figures/icon27-o.png new file mode 100644 index 0000000000000000000000000000000000000000..abbab8e40f7e3ca7c2a6f28ff78f08f15117828e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon27-o.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon28-o.png b/docs/en/tools/desktop/gnome/figures/icon28-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon28-o.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon29-o.png b/docs/en/tools/desktop/gnome/figures/icon29-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon29-o.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon3.png b/docs/en/tools/desktop/gnome/figures/icon3.png new file mode 100644 index 0000000000000000000000000000000000000000..930ee8909e89e3624c581f83d713af271cd96c75 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon3.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon30-o.png b/docs/en/tools/desktop/gnome/figures/icon30-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon30-o.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon31-o.png b/docs/en/tools/desktop/gnome/figures/icon31-o.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon31-o.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon32.png b/docs/en/tools/desktop/gnome/figures/icon32.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon32.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon33.png b/docs/en/tools/desktop/gnome/figures/icon33.png new file mode 100644 index 0000000000000000000000000000000000000000..88ed145b25f6f025ad795ceb012500e0944cb54c Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon33.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon34.png b/docs/en/tools/desktop/gnome/figures/icon34.png new file mode 100644 index 0000000000000000000000000000000000000000..8247f52a3424c81b451ceb318f4a7979a5eddece Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon34.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon35.png b/docs/en/tools/desktop/gnome/figures/icon35.png new file mode 100644 index 0000000000000000000000000000000000000000..7c656e9030b94809a57c7e369921e6a585f3574c Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon35.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon36.png b/docs/en/tools/desktop/gnome/figures/icon36.png new file mode 100644 index 0000000000000000000000000000000000000000..7d29d173e914dfff48245d3d3a4d42575ce2d1db Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon36.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon37.png b/docs/en/tools/desktop/gnome/figures/icon37.png new file mode 100644 index 0000000000000000000000000000000000000000..58be4c621b6638115153e361801deb9ee06634d8 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon37.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon38.png b/docs/en/tools/desktop/gnome/figures/icon38.png new file mode 100644 index 0000000000000000000000000000000000000000..0c861ccb891f4fb5e533eb7f7151a8fce1571f17 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon38.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon39.png b/docs/en/tools/desktop/gnome/figures/icon39.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ba1f347452d0cd1c06c6c51d2cdf5aea5e490b Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon39.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon4.png b/docs/en/tools/desktop/gnome/figures/icon4.png new file mode 100644 index 0000000000000000000000000000000000000000..548dc8b648edb73ff1dd8a0266e8479203e72ca0 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon4.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon40.png b/docs/en/tools/desktop/gnome/figures/icon40.png new file mode 100644 index 0000000000000000000000000000000000000000..9c29dd1e9a1bf22c36abf51cb18fa9e47b455fab Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon40.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon41.png b/docs/en/tools/desktop/gnome/figures/icon41.png new file mode 100644 index 0000000000000000000000000000000000000000..9e8aea527a2119433fffec5a8800ebfa4fa5062f Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon41.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon42-o.png b/docs/en/tools/desktop/gnome/figures/icon42-o.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon42-o.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon42.png b/docs/en/tools/desktop/gnome/figures/icon42.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon42.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon43-o.png b/docs/en/tools/desktop/gnome/figures/icon43-o.png new file mode 100644 index 0000000000000000000000000000000000000000..284bdd551baf25beb4143013402e77a1a4c60ccb Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon43-o.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon44-o.png b/docs/en/tools/desktop/gnome/figures/icon44-o.png new file mode 100644 index 0000000000000000000000000000000000000000..810f4d784ee140dbf562e67a0d3fd391272626a5 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon44-o.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon45-o.png b/docs/en/tools/desktop/gnome/figures/icon45-o.png new file mode 100644 index 0000000000000000000000000000000000000000..3e528ce2c98284f020ae4912a853f5864526396b Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon45-o.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon46-o.png b/docs/en/tools/desktop/gnome/figures/icon46-o.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6a3ca0fe57016f3685981ed518493ceea1c855 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon46-o.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon47-o.png b/docs/en/tools/desktop/gnome/figures/icon47-o.png new file mode 100644 index 0000000000000000000000000000000000000000..6eeaba98d908775bd363a8ffcec27c3b6a214013 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon47-o.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon49-o.svg b/docs/en/tools/desktop/gnome/figures/icon49-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..f2d76acd147ccaf5e493a7c035bb90640af7817c --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon49-o.svg @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon5.png b/docs/en/tools/desktop/gnome/figures/icon5.png new file mode 100644 index 0000000000000000000000000000000000000000..e4206b7b584bf0702c7cb2f03a3a41e20bfba844 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon5.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon50-o.svg b/docs/en/tools/desktop/gnome/figures/icon50-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..05026802be4718205065d6369e14cc0b6ef05bc7 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon50-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon52-o.svg b/docs/en/tools/desktop/gnome/figures/icon52-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..23149c05873259cd39721b8ee9c3ab7db86d64c5 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon52-o.svg @@ -0,0 +1,9 @@ + + + attention + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/icon53-o.svg b/docs/en/tools/desktop/gnome/figures/icon53-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..50e33489ce984b0acfd621da4a8ef837fdf048c1 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon53-o.svg @@ -0,0 +1,11 @@ + + + + previous + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/icon54-o.svg b/docs/en/tools/desktop/gnome/figures/icon54-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..3b599aef4b822c707d2f646405bb00837aed96fd --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon54-o.svg @@ -0,0 +1,18 @@ + + + + Backspace + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/icon56-o.svg b/docs/en/tools/desktop/gnome/figures/icon56-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9f13b6861e3858deec8d57a5301c934acc247069 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon56-o.svg @@ -0,0 +1,19 @@ + + + + Slice 1 + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/icon57-o.svg b/docs/en/tools/desktop/gnome/figures/icon57-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e6fbfa1381b76ab3fcd45652b33267a7f6c69bb7 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon57-o.svg @@ -0,0 +1,11 @@ + + + + titlebutton/close_normal + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/icon58-o.svg b/docs/en/tools/desktop/gnome/figures/icon58-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9746dcacfc8e5d4c4b63233801e37418a190fc8f --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon58-o.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon6.png b/docs/en/tools/desktop/gnome/figures/icon6.png new file mode 100644 index 0000000000000000000000000000000000000000..88ced3587e9a42b145fe11393726f40aba9d1b2c Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon6.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon62-o.svg b/docs/en/tools/desktop/gnome/figures/icon62-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..09f61b446669df2e05a3351d40d8c30879c7b035 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon62-o.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon63-o.svg b/docs/en/tools/desktop/gnome/figures/icon63-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..06c03ed99260ffadc681475dad35610aedf67f83 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon63-o.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon66-o.svg b/docs/en/tools/desktop/gnome/figures/icon66-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..5793b3846b7fe6a5758379591215b16c7f9e1b52 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon66-o.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon68-o.svg b/docs/en/tools/desktop/gnome/figures/icon68-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..a7748052dfa436116d8742dca28f7d90865231ed --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon68-o.svg @@ -0,0 +1,23 @@ + + + + deepin-system-monitor + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/icon69-o.svg b/docs/en/tools/desktop/gnome/figures/icon69-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e21dfd00a32a44ee1c8e3882b4ca8239be04690f --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon69-o.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon7.png b/docs/en/tools/desktop/gnome/figures/icon7.png new file mode 100644 index 0000000000000000000000000000000000000000..05fe8aa38c84ca0c0c99b0b005ddec2f2ba42f4a Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon7.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon70-o.svg b/docs/en/tools/desktop/gnome/figures/icon70-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..b5787a7ffa5ed9519a48c6937c60927fd11fd455 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon70-o.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon71-o.svg b/docs/en/tools/desktop/gnome/figures/icon71-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..669a21f143b06cb45ea3f45f7f071809f2cbc8a8 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon71-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon72-o.svg b/docs/en/tools/desktop/gnome/figures/icon72-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..79067ed9b9ff7912e1742183b461fa056601b9cc --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon72-o.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon73-o.svg b/docs/en/tools/desktop/gnome/figures/icon73-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..cf6292387f5e790db6ebd66184aabcbb39257ee7 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon73-o.svg @@ -0,0 +1,13 @@ + + + + Down + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/icon75-o.svg b/docs/en/tools/desktop/gnome/figures/icon75-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..ef6823ccc19858f57374f0b78ad31514e8311be3 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon75-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon8.png b/docs/en/tools/desktop/gnome/figures/icon8.png new file mode 100644 index 0000000000000000000000000000000000000000..01543c3e0f5e96a023b4e1f0859a03e3a0dafd56 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon8.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon83-o.svg b/docs/en/tools/desktop/gnome/figures/icon83-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..35dd6eacc54a933dc9ebc3f3010edfa7363fecc0 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon83-o.svg @@ -0,0 +1,84 @@ + + + + + + image/svg+xml + + img_upload + + + + + + img_upload + Created with Sketch. + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon84-o.svg b/docs/en/tools/desktop/gnome/figures/icon84-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9bd11b9e7b45b506dd7e1c87d09d545d8f48af06 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon84-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon86-o.svg b/docs/en/tools/desktop/gnome/figures/icon86-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..5da20233309c43d4fc7b315f441cde476c835c67 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon86-o.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon88-o.svg b/docs/en/tools/desktop/gnome/figures/icon88-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..c2570c26575fd14cb5e9d9fe77831d2e8f6c9333 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon88-o.svg @@ -0,0 +1,13 @@ + + + + Left + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/icon9.png b/docs/en/tools/desktop/gnome/figures/icon9.png new file mode 100644 index 0000000000000000000000000000000000000000..a07c9ab8e51decd9a3bca8c969d2ae95bd68512c Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/icon9.png differ diff --git a/docs/en/tools/desktop/gnome/figures/icon90-o.svg b/docs/en/tools/desktop/gnome/figures/icon90-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..79b5e0a141f7969a8f77ae61f4c240de7187afe9 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon90-o.svg @@ -0,0 +1,12 @@ + + + + lock_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/icon92-o.svg b/docs/en/tools/desktop/gnome/figures/icon92-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..21341b64a832e1935252aa82e7a4e0b083c16eae --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon92-o.svg @@ -0,0 +1,12 @@ + + + + logout_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/icon94-o.svg b/docs/en/tools/desktop/gnome/figures/icon94-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..a47044149a02101dbd24a3fdb2f3ead77efca6c1 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon94-o.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon97-o.svg b/docs/en/tools/desktop/gnome/figures/icon97-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..4f4670de29d8c86885b5aa806b2c8cdc6fc16dcb --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon97-o.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/gnome/figures/icon99-o.svg b/docs/en/tools/desktop/gnome/figures/icon99-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e9a3aa60a51404c9390bfbea8d8ff09edc0e2e32 --- /dev/null +++ b/docs/en/tools/desktop/gnome/figures/icon99-o.svg @@ -0,0 +1,11 @@ + + + notes + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/gnome/figures/kiran-1.png b/docs/en/tools/desktop/gnome/figures/kiran-1.png new file mode 100644 index 0000000000000000000000000000000000000000..59b632062ba3ff6e26c550567e858eb4dfdfc780 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-1.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-10.png b/docs/en/tools/desktop/gnome/figures/kiran-10.png new file mode 100644 index 0000000000000000000000000000000000000000..18cfa3074af1f4b8d49d064a77b016f24ab8c17c Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-10.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-11.png b/docs/en/tools/desktop/gnome/figures/kiran-11.png new file mode 100644 index 0000000000000000000000000000000000000000..b58fbb7ce8a798d5355855a4ac0638540df74d9e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-11.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-12.png b/docs/en/tools/desktop/gnome/figures/kiran-12.png new file mode 100644 index 0000000000000000000000000000000000000000..920d0c7112be6bed509773413de36506d748b822 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-12.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-13.png b/docs/en/tools/desktop/gnome/figures/kiran-13.png new file mode 100644 index 0000000000000000000000000000000000000000..f6632732bd2e8a10d0cda2bd0550f43741a7ba97 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-13.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-14.png b/docs/en/tools/desktop/gnome/figures/kiran-14.png new file mode 100644 index 0000000000000000000000000000000000000000..52eae7cc40fe4f7c6b2a8fe9744209a1fcbc30d8 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-14.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-15.png b/docs/en/tools/desktop/gnome/figures/kiran-15.png new file mode 100644 index 0000000000000000000000000000000000000000..5496c56ca72983780b9785d2d15c4008fb73aeef Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-15.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-16.png b/docs/en/tools/desktop/gnome/figures/kiran-16.png new file mode 100644 index 0000000000000000000000000000000000000000..6125b257245aa89f9b6592ed5b14a95d5699076e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-16.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-17.png b/docs/en/tools/desktop/gnome/figures/kiran-17.png new file mode 100644 index 0000000000000000000000000000000000000000..d8a4cb88017efe9f41f78ffc2f9de06dedcc1b23 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-17.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-18.png b/docs/en/tools/desktop/gnome/figures/kiran-18.png new file mode 100644 index 0000000000000000000000000000000000000000..0cb0c50d15597998fbd4cf3db2d1d0f9ec3c920e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-18.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-19.png b/docs/en/tools/desktop/gnome/figures/kiran-19.png new file mode 100644 index 0000000000000000000000000000000000000000..58ef2d33a52cf6404ea03b6a2d37f8d8b8391539 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-19.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-2.png b/docs/en/tools/desktop/gnome/figures/kiran-2.png new file mode 100644 index 0000000000000000000000000000000000000000..088bf53c1e763924e7cee46d0cdac98ad0a9d5e2 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-2.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-20.png b/docs/en/tools/desktop/gnome/figures/kiran-20.png new file mode 100644 index 0000000000000000000000000000000000000000..e8608485553033eb2ae141162e4300fa48c578cd Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-20.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-21.png b/docs/en/tools/desktop/gnome/figures/kiran-21.png new file mode 100644 index 0000000000000000000000000000000000000000..4d4c0ff304bdfbc8e715d2e756315a005c008336 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-21.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-22.png b/docs/en/tools/desktop/gnome/figures/kiran-22.png new file mode 100644 index 0000000000000000000000000000000000000000..6778d5a40a82e699da9531f4727a196d1442b9ae Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-22.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-23.png b/docs/en/tools/desktop/gnome/figures/kiran-23.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1d5e284eb299a771c5abbfdff611270ddf2449 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-23.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-24.png b/docs/en/tools/desktop/gnome/figures/kiran-24.png new file mode 100644 index 0000000000000000000000000000000000000000..a3ed57f9e9c300a65f867d29a44f287405a0509c Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-24.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-25.png b/docs/en/tools/desktop/gnome/figures/kiran-25.png new file mode 100644 index 0000000000000000000000000000000000000000..694e6173dfbf1fda8d07670a8e3daf4fbeb263ac Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-25.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-26.png b/docs/en/tools/desktop/gnome/figures/kiran-26.png new file mode 100644 index 0000000000000000000000000000000000000000..3b6ae2eeff3aae39107f15b60c5bb14ffc787cd8 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-26.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-27.png b/docs/en/tools/desktop/gnome/figures/kiran-27.png new file mode 100644 index 0000000000000000000000000000000000000000..3b6ae2eeff3aae39107f15b60c5bb14ffc787cd8 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-27.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-28.png b/docs/en/tools/desktop/gnome/figures/kiran-28.png new file mode 100644 index 0000000000000000000000000000000000000000..01ff3a8f47248d96c714e78b80fd81cd1ed16e0f Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-28.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-29.png b/docs/en/tools/desktop/gnome/figures/kiran-29.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ad5b4438eae441f6086ce5e1aae2e6755aa12a Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-29.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-3.png b/docs/en/tools/desktop/gnome/figures/kiran-3.png new file mode 100644 index 0000000000000000000000000000000000000000..e1399424c52eee8804f9433c9e9bf203950008c6 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-3.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-30.png b/docs/en/tools/desktop/gnome/figures/kiran-30.png new file mode 100644 index 0000000000000000000000000000000000000000..c1efc1e3931a129affd5dfcea9e319556e492f04 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-30.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-31.png b/docs/en/tools/desktop/gnome/figures/kiran-31.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ad5b4438eae441f6086ce5e1aae2e6755aa12a Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-31.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-32.png b/docs/en/tools/desktop/gnome/figures/kiran-32.png new file mode 100644 index 0000000000000000000000000000000000000000..fd900ec891b09313a7c558c61213b1816b803034 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-32.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-33.png b/docs/en/tools/desktop/gnome/figures/kiran-33.png new file mode 100644 index 0000000000000000000000000000000000000000..64ba70b08ed63c6e0942478d61e36a8c443f0604 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-33.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-34.png b/docs/en/tools/desktop/gnome/figures/kiran-34.png new file mode 100644 index 0000000000000000000000000000000000000000..4b869e7d172e2f2889d487157b92204a28a8dc4e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-34.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-35.png b/docs/en/tools/desktop/gnome/figures/kiran-35.png new file mode 100644 index 0000000000000000000000000000000000000000..9b383f3c84964b4fc34c4d8e75400325f93908bc Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-35.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-36.png b/docs/en/tools/desktop/gnome/figures/kiran-36.png new file mode 100644 index 0000000000000000000000000000000000000000..0b16632852c5024e2c6ec4fbd49513e3b7a2b146 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-36.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-37.png b/docs/en/tools/desktop/gnome/figures/kiran-37.png new file mode 100644 index 0000000000000000000000000000000000000000..2be3cc3b2528260c579b59f529e7a5663f1cc779 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-37.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-38.png b/docs/en/tools/desktop/gnome/figures/kiran-38.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1ffaf3aa920f922357f6d48700f42974600d77 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-38.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-39.png b/docs/en/tools/desktop/gnome/figures/kiran-39.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0e5add782b6c9cf4a8b9f6473c96641c39bd1d Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-39.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-4.png b/docs/en/tools/desktop/gnome/figures/kiran-4.png new file mode 100644 index 0000000000000000000000000000000000000000..bd318280b403912ab4846b694592d580b9e5d242 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-4.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-40.png b/docs/en/tools/desktop/gnome/figures/kiran-40.png new file mode 100644 index 0000000000000000000000000000000000000000..083031058ff47dc1550881d3a9f189861d3e8563 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-40.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-41.png b/docs/en/tools/desktop/gnome/figures/kiran-41.png new file mode 100644 index 0000000000000000000000000000000000000000..582893929e2c10a96c49696411bbed3ea9fd7c55 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-41.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-42.png b/docs/en/tools/desktop/gnome/figures/kiran-42.png new file mode 100644 index 0000000000000000000000000000000000000000..eede1243506ccd309ee707465f56c31581dd8554 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-42.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-43.0.png b/docs/en/tools/desktop/gnome/figures/kiran-43.0.png new file mode 100644 index 0000000000000000000000000000000000000000..caacc027322d4b7480e6508d4a1b4a13eefcf788 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-43.0.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-43.png b/docs/en/tools/desktop/gnome/figures/kiran-43.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea9f45ed8f327fce426352c4ae7fbf06cbefc84 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-43.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-44.png b/docs/en/tools/desktop/gnome/figures/kiran-44.png new file mode 100644 index 0000000000000000000000000000000000000000..c86a100005f89dbb9b24055e42d716205d47399e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-44.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-45.png b/docs/en/tools/desktop/gnome/figures/kiran-45.png new file mode 100644 index 0000000000000000000000000000000000000000..c5b5d75f972e594587f3393c8d384dcd76e7477e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-45.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-46.png b/docs/en/tools/desktop/gnome/figures/kiran-46.png new file mode 100644 index 0000000000000000000000000000000000000000..e9a28632c62de95d8ea2d436ba9bc705ff980991 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-46.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-47.png b/docs/en/tools/desktop/gnome/figures/kiran-47.png new file mode 100644 index 0000000000000000000000000000000000000000..a3606e3c899f944eb84d206d98cedc3377197c97 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-47.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-48.png b/docs/en/tools/desktop/gnome/figures/kiran-48.png new file mode 100644 index 0000000000000000000000000000000000000000..b69202c9a83bfc2c835ab166ef0fc2455bb4bcd3 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-48.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-49.png b/docs/en/tools/desktop/gnome/figures/kiran-49.png new file mode 100644 index 0000000000000000000000000000000000000000..d739e6107fd80ecd741dacaaf9dfb868afc61e37 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-49.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-5.png b/docs/en/tools/desktop/gnome/figures/kiran-5.png new file mode 100644 index 0000000000000000000000000000000000000000..154dd54d43b5b98682eb798518046e72fc7e3f83 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-5.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-50.png b/docs/en/tools/desktop/gnome/figures/kiran-50.png new file mode 100644 index 0000000000000000000000000000000000000000..96957676afc9f66bcc4b63c5e39eb8890f108015 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-50.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-6.png b/docs/en/tools/desktop/gnome/figures/kiran-6.png new file mode 100644 index 0000000000000000000000000000000000000000..927b475d6687d60f04fed8a535b2225a8f4b23f7 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-6.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-7.png b/docs/en/tools/desktop/gnome/figures/kiran-7.png new file mode 100644 index 0000000000000000000000000000000000000000..254ef11f36d958f6ef7c70853e5f61032f825463 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-7.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-8.png b/docs/en/tools/desktop/gnome/figures/kiran-8.png new file mode 100644 index 0000000000000000000000000000000000000000..29b5845d2fa94cba92719b8649a5e86c926ea911 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-8.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kiran-9.png b/docs/en/tools/desktop/gnome/figures/kiran-9.png new file mode 100644 index 0000000000000000000000000000000000000000..46bcfdd0e1e88ad0f0ade4a3990c3ac5d66060e7 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kiran-9.png differ diff --git a/docs/en/tools/desktop/gnome/figures/kubesphere.png b/docs/en/tools/desktop/gnome/figures/kubesphere.png new file mode 100644 index 0000000000000000000000000000000000000000..939dcb70202b19c7853cbfd8f27f6e8e4678ce26 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/kubesphere.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-1.png b/docs/en/tools/desktop/gnome/figures/xfce-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c04222d7757b84aa8afecf98815eee25211a86d7 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-1.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-2.png b/docs/en/tools/desktop/gnome/figures/xfce-2.png new file mode 100644 index 0000000000000000000000000000000000000000..fa7e1a1ae3c1535a1528f03636d2b62d727412af Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-2.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-3.png b/docs/en/tools/desktop/gnome/figures/xfce-3.png new file mode 100644 index 0000000000000000000000000000000000000000..6eeb68ad39f45ff476f1d18b8cd34492ec1f542b Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-3.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-4.png b/docs/en/tools/desktop/gnome/figures/xfce-4.png new file mode 100644 index 0000000000000000000000000000000000000000..f66de500fad7c847c2fea2e3774413d1c38e642e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-4.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-5.png b/docs/en/tools/desktop/gnome/figures/xfce-5.png new file mode 100644 index 0000000000000000000000000000000000000000..0258b0e5cf6c7c13d88b0431f4b0221e86451ce8 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-5.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-6.png b/docs/en/tools/desktop/gnome/figures/xfce-6.png new file mode 100644 index 0000000000000000000000000000000000000000..f2027b37021b260a97ff56a32026a53d00db0763 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-6.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-7.png b/docs/en/tools/desktop/gnome/figures/xfce-7.png new file mode 100644 index 0000000000000000000000000000000000000000..b7a94df356b7b9f7dca3d305d066ec854406aaab Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-7.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-71.png b/docs/en/tools/desktop/gnome/figures/xfce-71.png new file mode 100644 index 0000000000000000000000000000000000000000..6e2ff40536d18253dcfd4a69396e8e96817f704a Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-71.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-8.png b/docs/en/tools/desktop/gnome/figures/xfce-8.png new file mode 100644 index 0000000000000000000000000000000000000000..4ae9885b617e49cba84140e84dd6b354ff55f92c Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-8.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-81.png b/docs/en/tools/desktop/gnome/figures/xfce-81.png new file mode 100644 index 0000000000000000000000000000000000000000..b97c9a81c2a07efe361e6dc6ee8bed5db445ecfa Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-81.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-811.png b/docs/en/tools/desktop/gnome/figures/xfce-811.png new file mode 100644 index 0000000000000000000000000000000000000000..21447e37a5dd94fc88cb3ec0a11cd0dc0d50cf36 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-811.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-812.png b/docs/en/tools/desktop/gnome/figures/xfce-812.png new file mode 100644 index 0000000000000000000000000000000000000000..d505f1ac8111062a172b9fb5f5717d72f653f1b8 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-812.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-813.png b/docs/en/tools/desktop/gnome/figures/xfce-813.png new file mode 100644 index 0000000000000000000000000000000000000000..218d3b80c83cade14acc0c0baa4532710d1959dd Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-813.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-814.png b/docs/en/tools/desktop/gnome/figures/xfce-814.png new file mode 100644 index 0000000000000000000000000000000000000000..6ccbe910bd32cb4d619ba47d2fcb354424e80451 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-814.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-82.png b/docs/en/tools/desktop/gnome/figures/xfce-82.png new file mode 100644 index 0000000000000000000000000000000000000000..170deb5fb43f4e924d5ba4eba94a02c341d31515 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-82.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-821.png b/docs/en/tools/desktop/gnome/figures/xfce-821.png new file mode 100644 index 0000000000000000000000000000000000000000..690f3f0b528dfdaf6586549cdeb105df2214fc44 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-821.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-83.png b/docs/en/tools/desktop/gnome/figures/xfce-83.png new file mode 100644 index 0000000000000000000000000000000000000000..95e4844c0ece09819d3e9f1e8457bbf371b1282e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-83.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-831.png b/docs/en/tools/desktop/gnome/figures/xfce-831.png new file mode 100644 index 0000000000000000000000000000000000000000..61da16b7871a085a6c373a1262c0f785fb415e60 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-831.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-832.png b/docs/en/tools/desktop/gnome/figures/xfce-832.png new file mode 100644 index 0000000000000000000000000000000000000000..87b59b42d86ebd205750e162d5f2751b4d87181e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-832.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-84.png b/docs/en/tools/desktop/gnome/figures/xfce-84.png new file mode 100644 index 0000000000000000000000000000000000000000..1afe9d9bd51af83c99793666bad47d231bba5c7b Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-84.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-841.png b/docs/en/tools/desktop/gnome/figures/xfce-841.png new file mode 100644 index 0000000000000000000000000000000000000000..35875b40b8c95ce32652003daa5caf065747725f Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-841.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-842.png b/docs/en/tools/desktop/gnome/figures/xfce-842.png new file mode 100644 index 0000000000000000000000000000000000000000..b4031b575ffc3e9aa5a8edc7826fe28af97d0f23 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-842.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-85.png b/docs/en/tools/desktop/gnome/figures/xfce-85.png new file mode 100644 index 0000000000000000000000000000000000000000..bce9a0165290167d5fceee22d74f2abf4aed28fd Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-85.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-851.png b/docs/en/tools/desktop/gnome/figures/xfce-851.png new file mode 100644 index 0000000000000000000000000000000000000000..15c9e2d6d04e9b712bdf88d0ee1e7246a8d7b83e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-851.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-86.png b/docs/en/tools/desktop/gnome/figures/xfce-86.png new file mode 100644 index 0000000000000000000000000000000000000000..d78bc4ae0dbf13c3ad40b29468bd44056817e522 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-86.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-861.png b/docs/en/tools/desktop/gnome/figures/xfce-861.png new file mode 100644 index 0000000000000000000000000000000000000000..9a58733007cfac1c42ff244b52ee14c75051d852 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-861.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-87.png b/docs/en/tools/desktop/gnome/figures/xfce-87.png new file mode 100644 index 0000000000000000000000000000000000000000..ee5844bcfa836ec8ecf0a5fea125dcab530ad6db Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-87.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-9.png b/docs/en/tools/desktop/gnome/figures/xfce-9.png new file mode 100644 index 0000000000000000000000000000000000000000..5586c4f62cc161665b91a56ad23b2320901901c0 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-9.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-91.png b/docs/en/tools/desktop/gnome/figures/xfce-91.png new file mode 100644 index 0000000000000000000000000000000000000000..ee69879bb4ad66405b045af5e3965e275fe8eabf Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-91.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-911.png b/docs/en/tools/desktop/gnome/figures/xfce-911.png new file mode 100644 index 0000000000000000000000000000000000000000..b49416558e9ab844fda2026b76e2e900ac106842 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-911.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-92.png b/docs/en/tools/desktop/gnome/figures/xfce-92.png new file mode 100644 index 0000000000000000000000000000000000000000..78dd6313c603aad9ebd37fe68e06f98b2a3b331e Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-92.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-921.png b/docs/en/tools/desktop/gnome/figures/xfce-921.png new file mode 100644 index 0000000000000000000000000000000000000000..0681efd633cff00fe8572579b8971933cfc41dc1 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-921.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-93.png b/docs/en/tools/desktop/gnome/figures/xfce-93.png new file mode 100644 index 0000000000000000000000000000000000000000..06ac80c152fefbe1ad2ba1c989f6acfbbaf1a992 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-93.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-931.png b/docs/en/tools/desktop/gnome/figures/xfce-931.png new file mode 100644 index 0000000000000000000000000000000000000000..591a6d21d8fe69aed84d35316af506771a26ac01 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-931.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-94.png b/docs/en/tools/desktop/gnome/figures/xfce-94.png new file mode 100644 index 0000000000000000000000000000000000000000..f48064ff5902c4ea740ccba9a1640cbca27b5b72 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-94.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-941.png b/docs/en/tools/desktop/gnome/figures/xfce-941.png new file mode 100644 index 0000000000000000000000000000000000000000..aaee48a09a1e7233d25f68c6a74c7c39edc73b1f Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-941.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-95.png b/docs/en/tools/desktop/gnome/figures/xfce-95.png new file mode 100644 index 0000000000000000000000000000000000000000..bda965b15a859e4cccf4b80f62875f79eb3470fd Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-95.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-951.png b/docs/en/tools/desktop/gnome/figures/xfce-951.png new file mode 100644 index 0000000000000000000000000000000000000000..1d8ff807ac84bdae0dc935c3964d10701b5d47dc Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-951.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-96.png b/docs/en/tools/desktop/gnome/figures/xfce-96.png new file mode 100644 index 0000000000000000000000000000000000000000..29ce24923477065b98cacf603f185113e9959069 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-96.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-961.png b/docs/en/tools/desktop/gnome/figures/xfce-961.png new file mode 100644 index 0000000000000000000000000000000000000000..9d2944ae05699b8424695c865242c1c4f5d60fac Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-961.png differ diff --git a/docs/en/tools/desktop/gnome/figures/xfce-962.png b/docs/en/tools/desktop/gnome/figures/xfce-962.png new file mode 100644 index 0000000000000000000000000000000000000000..72c65f9675d8259f327077ce7f7212bd2b17a588 Binary files /dev/null and b/docs/en/tools/desktop/gnome/figures/xfce-962.png differ diff --git a/docs/en/tools/desktop/gnome/gnome_installation.md b/docs/en/tools/desktop/gnome/gnome_installation.md new file mode 100644 index 0000000000000000000000000000000000000000..37c23de15875252ac8a1e877ecab771fac03800c --- /dev/null +++ b/docs/en/tools/desktop/gnome/gnome_installation.md @@ -0,0 +1,107 @@ +# Installing GNOME on openEuler + +GNOME is a desktop environment for Unix-like operating systems. As the officially released desktop of GNU Project, GNOME provides a comprehensive, easy-to-use, and user-friendly desktop environment for application usage and development. + +For users, GNOME is a suite that integrates the desktop environment and applications. For developers, GNOME is an application development framework, consisting of a large number of function libraries. Applications written in GNOME can run properly even if users do not run the GNOME desktop environment. + +GNOME includes basic software such as the file manager, app store, and text editor, and advanced applications and tools such as system sampling analysis, system logs, software engineering IDE, web browser, simple VM monitor, and developer document browser. + +You are advised to create an administrator during the installation. + +1. [Download](https://www.openeuler.org/en/) the openEuler ISO image, install the system, and update the software source. The Everything and EPOL sources need to be configured. The following command is used to install GNOME in minimum installation mode. + + ```sh + sudo dnf update + ``` + +2. Install a front library. + + ```sh + sudo dnf install dejavu-fonts liberation-fonts gnu-*-fonts google-*-fonts + ``` + +3. Install Xorg. + + ```sh + sudo dnf install xorg-* + ``` + +In this case, many extra packages may be installed. You can run the following commands to install the required Xorg packages: + + sudo dnf install xorg-x11-apps xorg-x11-drivers xorg-x11-drv-ati \ + xorg-x11-drv-dummy xorg-x11-drv-evdev xorg-x11-drv-fbdev xorg-x11-drv-intel \ + xorg-x11-drv-libinput xorg-x11-drv-nouveau xorg-x11-drv-qxl \ + xorg-x11-drv-synaptics-legacy xorg-x11-drv-v4l xorg-x11-drv-vesa \ + xorg-x11-drv-vmware xorg-x11-drv-wacom xorg-x11-fonts xorg-x11-fonts-others \ + xorg-x11-font-utils xorg-x11-server xorg-x11-server-utils xorg-x11-server-Xephyr \ + xorg-x11-server-Xspice xorg-x11-util-macros xorg-x11-utils xorg-x11-xauth \ + xorg-x11-xbitmaps xorg-x11-xinit xorg-x11-xkb-utils + +4. Install GNOME and it's components. + + ```sh + sudo dnf install adwaita-icon-theme atk atkmm at-spi2-atk at-spi2-core baobab \ + abattis-cantarell-fonts cheese clutter clutter-gst3 clutter-gtk cogl dconf \ + dconf-editor devhelp eog epiphany evince evolution-data-server file-roller folks \ + gcab gcr gdk-pixbuf2 gdm gedit geocode-glib gfbgraph gjs glib2 glibmm24 \ + glib-networking gmime30 gnome-autoar gnome-backgrounds gnome-bluetooth \ + gnome-builder gnome-calculator gnome-calendar gnome-characters \ + gnome-clocks gnome-color-manager gnome-contacts gnome-control-center \ + gnome-desktop3 gnome-disk-utility gnome-font-viewer gnome-getting-started-docs \ + gnome-initial-setup gnome-keyring gnome-logs gnome-menus gnome-music \ + gnome-online-accounts gnome-online-miners gnome-photos gnome-remote-desktop \ + gnome-screenshot gnome-session gnome-settings-daemon gnome-shell \ + gnome-shell-extensions gnome-software gnome-system-monitor gnome-terminal \ + gnome-tour gnome-user-docs gnome-user-share gnome-video-effects \ + gnome-weather gobject-introspection gom grilo grilo-plugins \ + gsettings-desktop-schemas gsound gspell gssdp gtk3 gtk4 gtk-doc gtkmm30 \ + gtksourceview4 gtk-vnc2 gupnp gupnp-av gupnp-dlna gvfs json-glib libchamplain \ + libdazzle libgdata libgee libgnomekbd libgsf libgtop2 libgweather libgxps libhandy \ + libmediaart libnma libnotify libpeas librsvg2 libsecret libsigc++20 libsoup \ + mm-common mutter nautilus orca pango pangomm libphodav python3-pyatspi \ + python3-gobject rest rygel simple-scan sushi sysprof tepl totem totem-pl-parser \ + tracker3 tracker3-miners vala vte291 yelp yelp-tools \ + yelp-xsl zenity + ``` + +5. Enable GNOME Display Manager (GDM). + + ```sh + sudo systemctl enable gdm + ``` + +6. Set the default login mode to GUI. + + ```sh + sudo systemctl set-default graphical.target + ``` + +Reboot the device for configuration verification. + + sudo reboot + +7. If GDM cannot work: + +Disable GDM if it is installed by default. + + sudo systemctl disable gdm + +Install LightDM instead. + + sudo dnf install lightdm lightdm-gtk + +Set the default desktop to GNOME as the root user. + + echo 'user-session=gnome' >> /etc/lightdm/lightdm.conf.d/60-lightdm-gtk-greeter.conf + +Enable LightDM. + + sudo systemctl enable lightdm + +Set the default login mode to GUI. + + sudo systemctl set-default graphical.target + +Reboot the device for configuration verification. + + sudo reboot diff --git a/docs/en/tools/desktop/gnome/gnome_user_guide.md b/docs/en/tools/desktop/gnome/gnome_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..0b9148224e96d095d5849292bb41744649b14b9f --- /dev/null +++ b/docs/en/tools/desktop/gnome/gnome_user_guide.md @@ -0,0 +1,386 @@ +# GNOME User Guide + +## 1. Overview + +GNOME is a desktop environment for Unix-like operating systems. As the officially desktop of GNU Project, GNOME aims to build a comprehensive, easy-to-use, and user-friendly desktop environment for Unix or Unix-like operating systems based on free software. + +GNOME provides the following functional components: + +ATK: accessibility toolkit. + +Bonobo: component framework to compound documents. + +GObject: object-oriented framework in C language. + +GConf: system for storing configuration settings of apps. + +GNOME VFS: virtual file system. + +GNOME Keyring: security system. + +GNOME Print: software for printing documents. + +GStreamer: multimedia framework of GNOME. + +GTK+: building toolkit. + +Cairo: complex 2D graphics library. + +Human Interface Guidelines: software development documents provided by Sun Microsystems to facilitate GNOME usage. + +LibXML: XML library designed for GNOME. + +ORBit: CORBA Object Request Broker (ORB) that makes software componentized. + +Pango: library for i18n text arrangement and transformation. + +Metacity: window manager. + +This document describes how to use GNOME. + +The following figure shows the GUI. + +![Figure 1](./figures/gnome-1.png) + +## 2. Desktop + +### 2.1 Desktop + +The GNOME desktop is clean because it does not display any files or directories. Only the left, middle, and right parts of the top bar on the desktop have entry options. They are the activity entry, message notification entry, and system status entry. + +![Figure 2](./figures/gnome-2.png) + +### 2.2 Shortcut Menu + +After you right-click in the blank area on the desktop, a shortcut menu shown in the following figure is displayed, providing users with some shortcut functions. + +![Figure 3](./figures/gnome-3.png) + +The following table describes the shortcuts. + +| Shortcut| Description| +| :------------ | :------------ | +| Change Background| Changes the image displayed on the desktop.| +| Display Settings| Sets the resolution, screen rotation, and night light.| +| Settings| Navigates to system settings.| + +## 3. Top Bar on the Desktop + +### 3.1 Activities + +The **Activities** entry is located in the upper left corner of the desktop. It contains app favorites, lists of all apps and active apps, a multi-view switchover function, and an indicator to the current active app. + +#### 3.1.1 App Favorites + +![Figure 4](./figures/gnome-4.png) + +You can right-click an app icon in **Favorites** and choose **Remove from Favorites** from the shortcut menu to remove the app from **Favorites**. + +#### 3.1.2 List of All Apps + +To display the list of all apps, click the ![Figure 5](./figures/gnome-5.png) icon under the app favorites folder. + +![Figure 6](./figures/gnome-6.png) + +Similarly, you can right-click an app icon in the app list and choose **Add to Favorites** from the shortcut menu to add the app to **Favorites**. + +If there are so many apps and you know their names, you can enter an app name in the search box to search for it. + +![Figure 7](./figures/gnome-7.png) + +#### 3.1.3 List of Active Apps + +Active apps, that is, running apps are displayed one by one after the last app in **Favorites**. There is a white dot under the icon of each active app. + +![Figure 8](./figures/gnome-8.png) + +If you right-click an active app, operations that can be performed on the app are displayed. The operations vary with apps. Take **Screenshot** as an example. See the following figure. + +![Figure 9](./figures/gnome-9.png) + +#### 3.1.4 Multi-View Switchover + +As you view the active app list, the active apps are displayed on the right of the list in multi-view mode. + +![Figure 10](./figures/gnome-10.png) + +When you move the cursor to the right of the multi-view page, the vertical bar on the right becomes wider to display the window and desktop of the current active app. You can click the desktop image to switch back to the desktop. + +![Figure 11](./figures/gnome-11.png) + +If you click another app, it will be displayed on the top of the vertical bar. + +#### 3.1.5 Indicator to the Current Active App + +The indicator to the current active app is displayed on the right of **Activities**. You can click the indicator to display the operations that can be performed on the app. The operations vary with the apps. Take **Terminal** as an example. See the following figure. + +![Figure 12](./figures/gnome-12.png) + +You can click **Preferences** to set the terminal preferences. + +### 3.2 Message Notification + +The message notification entry is located in the middle of the top bar on the desktop, including message notification, calendar, clock, and weather. + +![Figure 13](./figures/gnome-13.png) + +#### 3.2.1 Message Notification + +If you set an alarm or countdown timer in **Clocks**, messages will be displayed on the left of the notification pane when the timer expires. The detailed information about the to-do items set in **Calendar** are also displayed on the left of the notification pane, and the summary information is displayed below the calendar on the right. + +![Figure 14](./figures/gnome-14.png) + +You can click **Do Not Disturb** to close pop-up notifications on the desktop. + +#### 3.2.2 Calendar + +As shown in the preceding figure, the calendar is displayed on the right, and there is a dot under the date of a to-do item. You can click the date to view the summary about a to-do item at the bottom of the calendar. + +#### 3.2.3 Clock and Weather + +You can also add the clock and weather to areas under the calendar. Clicking the **World Clocks** area will invoke the **Clocks** app, and clicking the **Weather** area will invoke the **Weather** app. + +![Figure 15](./figures/gnome-15.png) + +### 3.3 System Status + +The system status entry is located in the upper right corner of the desktop. It contains multiple options, as described in the following table. + +| Option| Description| +| :------------ | :------------ | +| Sound| Volume slider| +| Ethernet| Ethernet cards and their connections| +| Location In Use| Location of the system| +| Settings| System settings| +| Lock| Immediate screen lock. A password is required to unlock the screen.| +| Power Off/Log Out| Suspension, shutdown, restart, and logout| + +![Figure 16](./figures/gnome-16.png) + +The system status displayed here varies according to different settings and system configurations, such as Wi-Fi, Bluetooth, and battery. System statuses can also be appended to the left of the upper right corner by other apps, such as the input source display in the preceding figure. + +#### 3.3.1 Sound + +Quickly adjust the volume. To further set the sound, open the system settings. + +#### 3.3.2 Network + +Quickly enable or disable the network. To further configure the network, open the system settings. + +![Figure 17](./figures/gnome-17.png) + +#### 3.3.3 Location Service + +Quick enable or disable the location service. To further set the location, open the system settings. + +![Figure 18](./figures/gnome-18.png) + +#### 3.3.4 Settings + +It is one of the convenient entries to system settings. + +![Figure 19](./figures/gnome-19.png) + +You can set a large number of system-related options in the **Settings** window, which are shown in the left pane of the preceding and following figures. + +![Figure 20](./figures/gnome-20.png) + +The settings are also dynamically extended. For example, if the hardware where the system is located has Wi-Fi, the Wi-Fi item is displayed. Some important settings are described in the following sections. + +#### 3.3.5 Lock + +If you click **Lock**, the screen is locked and turns black. When you move the cursor, the screen turns on immediately. You can press any key to access the login page and enter the password to log in to the system again. The following figure shows the lock screen. + +![Figure 21](./figures/gnome-21.png) + +#### 3.3.6 Power-off/Logout + +The actions include suspension, power-off, restart, and logout. The difference between suspension and locking is that a black screen is directly displayed after suspension. You need to use the keyboard to wake up the login page, which takes a longer time than screen locking. Logout is to log out the current user and return to the login page without a black screen. You can use the same or another user account to log in again. + +![Figure 22](./figures/gnome-22.png) + +The following figure shows the user login page. + +![Figure 23](./figures/gnome-23.png) + +After the locking and suspension is waked up, the lock screen is displayed first. You need to press a key or click the screen to enter the user login page. The login page is directly displayed after the logout and restart. + +## 4. Common System Settings and App Examples + +### 4.1 Examples of System Settings + +There are four entries to system settings: + +Right-click on the desktop and choose **Settings**. + +Click the system status entry in the upper right corner and choose **Settings**. + +Click the **Activities** entry in the upper left corner and choose **Settings**. + +On the **Terminal**, run the **gnome-control-center** command. + +#### 4.1.1 Network + +![Figure 24](./figures/gnome-19.png) + +Wired networks are displayed here. You can click the button to enable or disable a network. You can also set the VPN and network proxy. + +Click the gear icon on the right of an Ethernet connection to view details, and modify or remove the connection. + +![Figure 25](./figures/gnome-24.png) + +Change the connection name. + +![Figure 26](./figures/gnome-25.png) + +Change the IP address obtaining mode (**Automatic** or **Manual**), and add the DNS and a route. + +![Figure 27](./figures/gnome-26.png) + +You can also click the plus sign (+) above the gear icon to create a connection. The settings of the new connection are similar to those shown in preceding figures. The prerequisite is that the Ethernet port exists. + +#### 4.1.2 Displays + +You can set the fixed resolution on the **Displays** tab page. If the resolution of your hardware system is not included, set it on the command line. Then, the newly set resolution will be displayed here. + +![Figure 28](./figures/gnome-27.png) + +Select a resolution and click **Keep Changes** to make the settings take effect. + +![Figure 29](./figures/gnome-28.png) + +Some displays allow you to rotate the screen vertically, for example, to view the text at the bottom of the screen at a time. The **Orientation** here also provides such support. + +![Figure 30](./figures/gnome-29.png) + +#### 4.1.3 Keyboard Shortcuts + +You can set keyboard shortcuts to perform shortcut operations, such as quickly opening the home folder, camera, or browser. GNOME does not provide a shortcut for starting the **Terminal**. You can set a default one. + +View existing shortcut settings in scrolling mode or search for shortcuts. + +![Figure 31](./figures/gnome-30.png) + +Clicking a disabled item, such as the home folder and web browser, triggers shortcut settings. + +![Figure 32](./figures/gnome-31.png) + +![Figure 33](./figures/gnome-32.png) + +Effect after the setting is successful. + +![Figure 34](./figures/gnome-33.png) + +Scroll the keyboard shortcuts page to the bottom and click + to add a shortcut for opening the **Terminal**. + +![Figure 35](./figures/gnome-34.png) + +![Figure 36](./figures/gnome-35.png) + +![Figure 37](./figures/gnome-36.png) + +![Figure 38](./figures/gnome-37.png) + +Now, you can press **Ctrl+Alt+T** to open the **Terminal**. Settings of the home folder and web browser are similar. + +![Figure 39](./figures/gnome-38.png) + +#### 4.1.4 Region and Language + +The system can be switched between multiple languages, even if a language is not selected during system installation. + +![Figure 40](./figures/gnome-39.png) + +You can click **Language** and **Formats** to change the language from Chinese to English, and click **Restart**. You need to log in to the system again and restart the session for the language settings to take effect. + +![Figure 41](./figures/gnome-40.png) + +![Figure 42](./figures/gnome-41.png) + +![Figure 43](./figures/gnome-42.png) + +Click the gear icon on the right of **Input Sources** to view the keyboard shortcuts and input source options. You can click the plus sign (+) to add an input source. + +![Figure 44](./figures/gnome-43.png) + +When you use the shortcut to switch the input method, you can view the change in the system status area in the upper right corner. + +![Figure 45](./figures/gnome-44.png) + +#### 4.1.5 Users + +You can add and delete users on the **Users** GUI. For a non-root user, you need to click **Unlock** and enter the password of the super user to display the complete information. + +![Figure 46](./figures/gnome-45.png) + +Click **Password** to change the password of the current user. + +![Figure 47](./figures/gnome-46.png) + +Click **Account Activity** to view the login status of the user in this week. + +![Figure 48](./figures/gnome-47.png) + +Click **Add User** in the upper right corner to add a user and set the password when adding the user or when logging in to the system as the new user. To log in to the system as a new user, log out of the system and then log in as the new user. The new user can be removed by clicking **Remove User**. The current login user cannot be removed. + +![Figure 49](./figures/gnome-48.png) + +### 4.2 Application Examples + +#### 4.2.1 Files + +The binary file name of the **Files** app is **nautilus**. You can create, modify, move, save, and delete files in the file system displayed in **Files**. + +![Figure 50](./figures/gnome-49.png) + +#### 4.2.2 Terminal + +The running **Terminal** is a special process under the GNOME login session. It functions as a console and is a new session in essence. It can perform almost all the tasks that the console can do, and it is what Linux would be without a graphical interface. + +![Figure 51](./figures/gnome-50.png) + +In the **Preferences** dialog box, you can set the font, character spacing, and theme background. + +#### 4.2.3 Software + +In **Software**, you can search for and install many free open source apps, and view and uninstall installed apps. + +![Figure 52](./figures/gnome-51.png) + +![Figure 53](./figures/gnome-52.png) + +#### 4.2.4 Browser + +GNOME has a built-in browser named **Web**. Its interface and functions are simpler than those of Chrome or Firefox, but supports common functions, such as bookmarks, search engine settings, history, and file download. + +![Figure 54](./figures/gnome-53.png) + +#### 4.2.5 System Monitor + +It is similar to the Task Manager in Windows operating systems, on which you can view the process name, user, and usage of CPU and memory resources. This monitor is dynamic, but its change effect is much worse than that of running the top command. + +![Figure 55](./figures/gnome-54.png) + +You can also view the usage trend of important components such as the CPU, memory, and network. + +![Figure 56](./figures/gnome-55.png) + +#### 4.2.6 Text Editor + +A text editor is required for creating, modifying, and saving files. In its **Preferences** dialog box, you can set the font, tab width, theme, and plug-ins. + +![Figure 57](./figures/gnome-56.png) + +#### 4.2.7 Sysprof + +Sysprof samples and presents a system, including the software and hardware, and is used to locate system performance problems, for example, app startup freezing and system response delay. You can select the project to be traced and click **Record** to start sampling. + +![Figure 58](./figures/gnome-57.png) + +![Figure 59](./figures/gnome-58.png) + +After the sampling is stopped, the result provides abundant information for diagnosis and analysis. + +![Figure 60](./figures/gnome-59.png) + +
    diff --git a/docs/en/tools/desktop/i3/_toc.yaml b/docs/en/tools/desktop/i3/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1aad3c09d3ecd49c5fc28d1ba29164f127a64bd1 --- /dev/null +++ b/docs/en/tools/desktop/i3/_toc.yaml @@ -0,0 +1,6 @@ +label: i3 User Guide +isManual: true +description: i3 is a tiling window manager +sections: + - label: i3 User Guide + href: ./i3_user_guide.md diff --git a/docs/en/tools/desktop/i3/i3_user_guide.md b/docs/en/tools/desktop/i3/i3_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..1e857b6026c6615b4d1180fb64c01f30ed7a2125 --- /dev/null +++ b/docs/en/tools/desktop/i3/i3_user_guide.md @@ -0,0 +1,54 @@ +# i3 in openEuler User Guide + +## What Is i3? + +[i3](https://i3wm.org/) is a [tiling window manager](https://en.wikipedia.org/wiki/Tiling_window_manager). + +The interface of i3 is as follows: + +![i3 layout](layout.jpeg) + +## Usage + +1. i3 is based on the X Window protocol. Therefore, you need to install X Server first. + + ```bash + dnf in xorg-x11-server + ``` + +2. As i3 is only a window manager, it does not contain the [components](https://wiki.archlinux.org/title/desktop_environment#Custom_environments) required in a complete Linux desktop environment. You need to install some basic components. + + ```bash + dnf in xorg-x11-drv-* lightdm lightdm-gtk + ``` + +3. Install i3 components. + + ```bash + dnf in i3 i3status i3blocks i3lock i3blocks-contrib \ + xfce4-terminal xcompmgr acpi dmenu + ``` + +4. Start lightdm after the installation is complete. + + ```bash + sudo systemctl start lightdm + ``` + + ![](lightdm.png) + + After the session manager is displayed, enter the user name and password to log in to the i3 desktop. + +### Basic Operations in i3 + +(**Mod** is usually mapped to the Windows key on a Windows-compatible keyboard.) + +- **Mod**+**d**: Open dmenu for quickly starting processes. +- **Mod**+**Enter**: Open a terminal. +- **Mod**+**↑**/**↓**/**←**/**→**: Move focus between windows. +- **Mod**+**Shift**+**q**: Close the window of focus. +- **Mod**+**Shift**+**r**: Hot load the configuration file. +- **Mod**+**Shift**+**e**: Exit i3. +- **Mod**+**Shift**+**l**: Lock the screen. + +For more operation guides, see [i3 Documentation](https://i3wm.org/docs/). diff --git a/docs/en/tools/desktop/i3/layout.jpeg b/docs/en/tools/desktop/i3/layout.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..eacff8758845cdfd48b24427affcb9ecd9b7a221 Binary files /dev/null and b/docs/en/tools/desktop/i3/layout.jpeg differ diff --git a/docs/en/tools/desktop/i3/lightdm.png b/docs/en/tools/desktop/i3/lightdm.png new file mode 100644 index 0000000000000000000000000000000000000000..f33c93f32cbfd33c4f6b114225122a377fcd95b6 Binary files /dev/null and b/docs/en/tools/desktop/i3/lightdm.png differ diff --git a/docs/en/tools/desktop/kiran/_toc.yaml b/docs/en/tools/desktop/kiran/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f442714fdd311ac6a5ce6d20a882f86c880b2bd7 --- /dev/null +++ b/docs/en/tools/desktop/kiran/_toc.yaml @@ -0,0 +1,8 @@ +label: Kiran User Guide +isManual: true +description: Install and use Kiran +sections: + - label: Installing Kiran + href: ./kiran_installation.md + - label: Using Kiran + href: ./kiran_user_guide.md diff --git a/docs/en/tools/desktop/kiran/figures/.keep b/docs/en/tools/desktop/kiran/figures/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/en/tools/desktop/kiran/figures/1.png b/docs/en/tools/desktop/kiran/figures/1.png new file mode 100644 index 0000000000000000000000000000000000000000..40af4242eebb440a76c749a8d970d50cd7b89bf4 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/1.png differ diff --git a/docs/en/tools/desktop/kiran/figures/10.png b/docs/en/tools/desktop/kiran/figures/10.png new file mode 100644 index 0000000000000000000000000000000000000000..e588ffbe3d8d7b66d92ae8f2b4bcec7c80d0592c Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/10.png differ diff --git a/docs/en/tools/desktop/kiran/figures/11.png b/docs/en/tools/desktop/kiran/figures/11.png new file mode 100644 index 0000000000000000000000000000000000000000..1989a5bb08155f920363e154e68bb148715c7e9e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/11.png differ diff --git a/docs/en/tools/desktop/kiran/figures/12.png b/docs/en/tools/desktop/kiran/figures/12.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6346161182d2cfeaf3818d5ec518ddb11c732e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/12.png differ diff --git a/docs/en/tools/desktop/kiran/figures/1202_1.jpg b/docs/en/tools/desktop/kiran/figures/1202_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..def242a5b9a70602a9aab7dd8048244e7d9f6793 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/1202_1.jpg differ diff --git a/docs/en/tools/desktop/kiran/figures/13.png b/docs/en/tools/desktop/kiran/figures/13.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7def1fb66c90da62acde799eaffca97e3b5396 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/13.png differ diff --git a/docs/en/tools/desktop/kiran/figures/14.png b/docs/en/tools/desktop/kiran/figures/14.png new file mode 100644 index 0000000000000000000000000000000000000000..3a27a66d57e284775420d467f90dcc02889bbffe Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/14.png differ diff --git a/docs/en/tools/desktop/kiran/figures/15.png b/docs/en/tools/desktop/kiran/figures/15.png new file mode 100644 index 0000000000000000000000000000000000000000..370bea32abcaa8a2b06a1a61c1455d4b35f43474 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/15.png differ diff --git a/docs/en/tools/desktop/kiran/figures/16.png b/docs/en/tools/desktop/kiran/figures/16.png new file mode 100644 index 0000000000000000000000000000000000000000..812ee462669c5263ef4bffc49ca4f9b6af4541c6 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/16.png differ diff --git a/docs/en/tools/desktop/kiran/figures/17.png b/docs/en/tools/desktop/kiran/figures/17.png new file mode 100644 index 0000000000000000000000000000000000000000..36e524b806874fa3788f5e4dcd78350686281107 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/17.png differ diff --git a/docs/en/tools/desktop/kiran/figures/18.png b/docs/en/tools/desktop/kiran/figures/18.png new file mode 100644 index 0000000000000000000000000000000000000000..51b32442980aa60646f77dabd53ade74f55891fe Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/18.png differ diff --git a/docs/en/tools/desktop/kiran/figures/19.png b/docs/en/tools/desktop/kiran/figures/19.png new file mode 100644 index 0000000000000000000000000000000000000000..c9457d09aa9f1662b2c9e4550cdbdb9f57dd020e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/19.png differ diff --git a/docs/en/tools/desktop/kiran/figures/2.png b/docs/en/tools/desktop/kiran/figures/2.png new file mode 100644 index 0000000000000000000000000000000000000000..97917cc245484a43bec8562757d920a06f123121 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/2.png differ diff --git a/docs/en/tools/desktop/kiran/figures/20.png b/docs/en/tools/desktop/kiran/figures/20.png new file mode 100644 index 0000000000000000000000000000000000000000..b0943189920d7a541d35da27340593ea93f92a17 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/20.png differ diff --git a/docs/en/tools/desktop/kiran/figures/21.png b/docs/en/tools/desktop/kiran/figures/21.png new file mode 100644 index 0000000000000000000000000000000000000000..e590c22c0ea28906b5f4ea7ccbc6ab11e47ad173 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/21.png differ diff --git a/docs/en/tools/desktop/kiran/figures/22.png b/docs/en/tools/desktop/kiran/figures/22.png new file mode 100644 index 0000000000000000000000000000000000000000..03a548b1ffb1f0ad53cfa5387af2721af90bca81 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/22.png differ diff --git a/docs/en/tools/desktop/kiran/figures/23.png b/docs/en/tools/desktop/kiran/figures/23.png new file mode 100644 index 0000000000000000000000000000000000000000..834c492094715cde1c02c91752ecabfe7921ed62 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/23.png differ diff --git a/docs/en/tools/desktop/kiran/figures/24.png b/docs/en/tools/desktop/kiran/figures/24.png new file mode 100644 index 0000000000000000000000000000000000000000..1881e868b74a60888b319576fa38fb4af92ba75c Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/24.png differ diff --git a/docs/en/tools/desktop/kiran/figures/25.png b/docs/en/tools/desktop/kiran/figures/25.png new file mode 100644 index 0000000000000000000000000000000000000000..f38839725d27a3486984d152e5d9de305364fbd2 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/25.png differ diff --git a/docs/en/tools/desktop/kiran/figures/26.png b/docs/en/tools/desktop/kiran/figures/26.png new file mode 100644 index 0000000000000000000000000000000000000000..6d7957119133ecb98b1b6b104e54a3a4647ec2a5 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/26.png differ diff --git a/docs/en/tools/desktop/kiran/figures/27.png b/docs/en/tools/desktop/kiran/figures/27.png new file mode 100644 index 0000000000000000000000000000000000000000..3e4733717fdc5172d6479b393005219e65e96df4 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/27.png differ diff --git a/docs/en/tools/desktop/kiran/figures/28.png b/docs/en/tools/desktop/kiran/figures/28.png new file mode 100644 index 0000000000000000000000000000000000000000..a77772e818e3f6c11acac3b9cfa18bad14a0a48c Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/28.png differ diff --git a/docs/en/tools/desktop/kiran/figures/29.png b/docs/en/tools/desktop/kiran/figures/29.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f58ffe5855295268298448744e5aadbdc55276 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/29.png differ diff --git a/docs/en/tools/desktop/kiran/figures/3.png b/docs/en/tools/desktop/kiran/figures/3.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb76b336957020ed6867d908e0a8bdcfc953c52 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/3.png differ diff --git a/docs/en/tools/desktop/kiran/figures/30.png b/docs/en/tools/desktop/kiran/figures/30.png new file mode 100644 index 0000000000000000000000000000000000000000..d91adefba1753959e90ccf4aa1501ac08d7144bd Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/30.png differ diff --git a/docs/en/tools/desktop/kiran/figures/31.png b/docs/en/tools/desktop/kiran/figures/31.png new file mode 100644 index 0000000000000000000000000000000000000000..0abef09ab438f5f8cfb68090993f55c493b8c15e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/31.png differ diff --git a/docs/en/tools/desktop/kiran/figures/32.png b/docs/en/tools/desktop/kiran/figures/32.png new file mode 100644 index 0000000000000000000000000000000000000000..d567cfbacc07a9eb46ff2c54a68432f45e034e94 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/32.png differ diff --git a/docs/en/tools/desktop/kiran/figures/33.png b/docs/en/tools/desktop/kiran/figures/33.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5896e2884520672c0bd88d68471b45a09c56fe Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/33.png differ diff --git a/docs/en/tools/desktop/kiran/figures/34.png b/docs/en/tools/desktop/kiran/figures/34.png new file mode 100644 index 0000000000000000000000000000000000000000..81bc9480fbbd81a97c559d7a6a74274deeab2bd1 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/34.png differ diff --git a/docs/en/tools/desktop/kiran/figures/35.png b/docs/en/tools/desktop/kiran/figures/35.png new file mode 100644 index 0000000000000000000000000000000000000000..ab2399847a643a87279337704e23fea7609bb211 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/35.png differ diff --git a/docs/en/tools/desktop/kiran/figures/36.png b/docs/en/tools/desktop/kiran/figures/36.png new file mode 100644 index 0000000000000000000000000000000000000000..536981609b9ae5d32be56bec612f2b3446146184 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/36.png differ diff --git a/docs/en/tools/desktop/kiran/figures/37.png b/docs/en/tools/desktop/kiran/figures/37.png new file mode 100644 index 0000000000000000000000000000000000000000..e39aa03587642dc1f8622fff515b05a9a3085b28 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/37.png differ diff --git a/docs/en/tools/desktop/kiran/figures/38.png b/docs/en/tools/desktop/kiran/figures/38.png new file mode 100644 index 0000000000000000000000000000000000000000..838f5ff0616a83cdf42edb053f4e72b93bfa644e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/38.png differ diff --git a/docs/en/tools/desktop/kiran/figures/39.png b/docs/en/tools/desktop/kiran/figures/39.png new file mode 100644 index 0000000000000000000000000000000000000000..12a379403d73a47b2fa564120a28fdb58d188963 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/39.png differ diff --git a/docs/en/tools/desktop/kiran/figures/4.png b/docs/en/tools/desktop/kiran/figures/4.png new file mode 100644 index 0000000000000000000000000000000000000000..5078e36aca713706d2cf08a3ebecdc3769951899 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/4.png differ diff --git a/docs/en/tools/desktop/kiran/figures/40.png b/docs/en/tools/desktop/kiran/figures/40.png new file mode 100644 index 0000000000000000000000000000000000000000..bf419894eab852b45604966c62fafa71f051c4df Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/40.png differ diff --git a/docs/en/tools/desktop/kiran/figures/41.png b/docs/en/tools/desktop/kiran/figures/41.png new file mode 100644 index 0000000000000000000000000000000000000000..f94b0ee72e0d4e9277e9b44b4268cfbdb8402104 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/41.png differ diff --git a/docs/en/tools/desktop/kiran/figures/42.png b/docs/en/tools/desktop/kiran/figures/42.png new file mode 100644 index 0000000000000000000000000000000000000000..3182e551c4e4b03885bad6339f1de514b3f55f8c Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/42.png differ diff --git a/docs/en/tools/desktop/kiran/figures/43.jpg b/docs/en/tools/desktop/kiran/figures/43.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26e9244f58ea9800081fd61ae135477f05b21b40 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/43.jpg differ diff --git a/docs/en/tools/desktop/kiran/figures/44.png b/docs/en/tools/desktop/kiran/figures/44.png new file mode 100644 index 0000000000000000000000000000000000000000..c3abaecd6e053272d81e0ad9bd183c6858b4f3c5 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/44.png differ diff --git a/docs/en/tools/desktop/kiran/figures/45.png b/docs/en/tools/desktop/kiran/figures/45.png new file mode 100644 index 0000000000000000000000000000000000000000..86b051acde857c88479714414f721a7f59cca483 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/45.png differ diff --git a/docs/en/tools/desktop/kiran/figures/46.png b/docs/en/tools/desktop/kiran/figures/46.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ec41c87628bf28c9905523f99ae93aebd13614 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/46.png differ diff --git a/docs/en/tools/desktop/kiran/figures/47.jpg b/docs/en/tools/desktop/kiran/figures/47.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf95f03c8ea0f84a878bc63af20972c9da71bc04 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/47.jpg differ diff --git a/docs/en/tools/desktop/kiran/figures/48.png b/docs/en/tools/desktop/kiran/figures/48.png new file mode 100644 index 0000000000000000000000000000000000000000..ef21fa1ce1e2e9848a8dca16e692de673df7c6d7 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/48.png differ diff --git a/docs/en/tools/desktop/kiran/figures/49.png b/docs/en/tools/desktop/kiran/figures/49.png new file mode 100644 index 0000000000000000000000000000000000000000..3b77668e5a4d1bdb3043c473dff9b36fa7144714 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/49.png differ diff --git a/docs/en/tools/desktop/kiran/figures/5.png b/docs/en/tools/desktop/kiran/figures/5.png new file mode 100644 index 0000000000000000000000000000000000000000..2976a745cfaede26594d6daa01cfc18d18b1de8b Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/5.png differ diff --git a/docs/en/tools/desktop/kiran/figures/50.png b/docs/en/tools/desktop/kiran/figures/50.png new file mode 100644 index 0000000000000000000000000000000000000000..b86a55fe4363f56fc18befc9d27025a75ca427ad Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/50.png differ diff --git a/docs/en/tools/desktop/kiran/figures/51.png b/docs/en/tools/desktop/kiran/figures/51.png new file mode 100644 index 0000000000000000000000000000000000000000..d427ac871dba9c32eb4ffe736d5352f8408da533 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/51.png differ diff --git a/docs/en/tools/desktop/kiran/figures/52.png b/docs/en/tools/desktop/kiran/figures/52.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca0a2db05c70bc25f9bb59e82d074f671cfc74e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/52.png differ diff --git a/docs/en/tools/desktop/kiran/figures/53.png b/docs/en/tools/desktop/kiran/figures/53.png new file mode 100644 index 0000000000000000000000000000000000000000..76fbc34a1d5621b83c2d8c93222766acad33350d Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/53.png differ diff --git a/docs/en/tools/desktop/kiran/figures/54.png b/docs/en/tools/desktop/kiran/figures/54.png new file mode 100644 index 0000000000000000000000000000000000000000..49ecae6f8941a118223f3765c23015df074c4983 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/54.png differ diff --git a/docs/en/tools/desktop/kiran/figures/56.png b/docs/en/tools/desktop/kiran/figures/56.png new file mode 100644 index 0000000000000000000000000000000000000000..36fee795bfe593b6246c8d6c2bddea9386b06f45 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/56.png differ diff --git a/docs/en/tools/desktop/kiran/figures/57.png b/docs/en/tools/desktop/kiran/figures/57.png new file mode 100644 index 0000000000000000000000000000000000000000..539d06b77b058a933cb154c43641d498050986e0 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/57.png differ diff --git a/docs/en/tools/desktop/kiran/figures/58.png b/docs/en/tools/desktop/kiran/figures/58.png new file mode 100644 index 0000000000000000000000000000000000000000..396ca16d873e54505bcdbd41d669366eea7f5dee Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/58.png differ diff --git a/docs/en/tools/desktop/kiran/figures/59.png b/docs/en/tools/desktop/kiran/figures/59.png new file mode 100644 index 0000000000000000000000000000000000000000..9b1de98ac4fe686937ca844d3e9481548a79ce63 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/59.png differ diff --git a/docs/en/tools/desktop/kiran/figures/6.png b/docs/en/tools/desktop/kiran/figures/6.png new file mode 100644 index 0000000000000000000000000000000000000000..275c23872f2353f007371672714902babcc3db53 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/6.png differ diff --git a/docs/en/tools/desktop/kiran/figures/60.jpg b/docs/en/tools/desktop/kiran/figures/60.jpg new file mode 100644 index 0000000000000000000000000000000000000000..033c88aaadd04f7d4058ec2eb5b2c70498319bf7 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/60.jpg differ diff --git a/docs/en/tools/desktop/kiran/figures/61.png b/docs/en/tools/desktop/kiran/figures/61.png new file mode 100644 index 0000000000000000000000000000000000000000..8df17062963a3baf92318a12ec34b1378122687b Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/61.png differ diff --git a/docs/en/tools/desktop/kiran/figures/62.png b/docs/en/tools/desktop/kiran/figures/62.png new file mode 100644 index 0000000000000000000000000000000000000000..ec312d6c0c22018c1745dd866da71ce9be47fbda Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/62.png differ diff --git a/docs/en/tools/desktop/kiran/figures/63.jpg b/docs/en/tools/desktop/kiran/figures/63.jpg new file mode 100644 index 0000000000000000000000000000000000000000..504f7cf59768f6fd1cd73a115d01fbc4e15a02e1 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/63.jpg differ diff --git a/docs/en/tools/desktop/kiran/figures/63.png b/docs/en/tools/desktop/kiran/figures/63.png new file mode 100644 index 0000000000000000000000000000000000000000..86b051acde857c88479714414f721a7f59cca483 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/63.png differ diff --git a/docs/en/tools/desktop/kiran/figures/64.png b/docs/en/tools/desktop/kiran/figures/64.png new file mode 100644 index 0000000000000000000000000000000000000000..cbbd2ede047e735c3766e08b04595f08cd72f5b2 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/64.png differ diff --git a/docs/en/tools/desktop/kiran/figures/7.png b/docs/en/tools/desktop/kiran/figures/7.png new file mode 100644 index 0000000000000000000000000000000000000000..4d397959ac7f6d166ef5a3b7084bd5c3c93b475f Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/7.png differ diff --git a/docs/en/tools/desktop/kiran/figures/8.png b/docs/en/tools/desktop/kiran/figures/8.png new file mode 100644 index 0000000000000000000000000000000000000000..8ade274092d7b3e461c96d7909a9d89d3a944f09 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/8.png differ diff --git a/docs/en/tools/desktop/kiran/figures/9.png b/docs/en/tools/desktop/kiran/figures/9.png new file mode 100644 index 0000000000000000000000000000000000000000..f7b2215404929346f1a814b0b1d6d482559c08b5 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/9.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-add-resource.png b/docs/en/tools/desktop/kiran/figures/HA-add-resource.png new file mode 100644 index 0000000000000000000000000000000000000000..ac24895a1247828d248132f6c789ad8ef51a57e4 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-add-resource.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-apache-show.png b/docs/en/tools/desktop/kiran/figures/HA-apache-show.png new file mode 100644 index 0000000000000000000000000000000000000000..c216500910f75f2de1108f6b618c5c08f4df8bae Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-apache-show.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-apache-suc.png b/docs/en/tools/desktop/kiran/figures/HA-apache-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..23a7aaa702e3e68190ff7e01a5a673aee2c92409 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-apache-suc.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-api.png b/docs/en/tools/desktop/kiran/figures/HA-api.png new file mode 100644 index 0000000000000000000000000000000000000000..f825fe005705d30809d12df97958cff0e5a80135 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-api.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-clone-suc.png b/docs/en/tools/desktop/kiran/figures/HA-clone-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..4b6099ccc88d4f6f907a0c4563e729ab2a4dece1 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-clone-suc.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-clone.png b/docs/en/tools/desktop/kiran/figures/HA-clone.png new file mode 100644 index 0000000000000000000000000000000000000000..1b09ab73849494f4ffd759fa612ae3c241bd9c1d Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-clone.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-corosync.png b/docs/en/tools/desktop/kiran/figures/HA-corosync.png new file mode 100644 index 0000000000000000000000000000000000000000..c4d93242e65c503b6e1b6a457e2517f647984a66 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-corosync.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-firstchoice-cmd.png b/docs/en/tools/desktop/kiran/figures/HA-firstchoice-cmd.png new file mode 100644 index 0000000000000000000000000000000000000000..a265bab07f1d8e46d9d965975be180a8de6c9eb2 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-firstchoice-cmd.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-firstchoice.png b/docs/en/tools/desktop/kiran/figures/HA-firstchoice.png new file mode 100644 index 0000000000000000000000000000000000000000..bd982ddcea55c629c0257fca86051a9ffa77e7b4 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-firstchoice.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-group-new-suc.png b/docs/en/tools/desktop/kiran/figures/HA-group-new-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..437fd01ee83a9a1f65c12838fe56eea8435f6759 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-group-new-suc.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-group-new-suc2.png b/docs/en/tools/desktop/kiran/figures/HA-group-new-suc2.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb933bd761f9808de95a324a50226ff041ebd4f Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-group-new-suc2.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-group-new.png b/docs/en/tools/desktop/kiran/figures/HA-group-new.png new file mode 100644 index 0000000000000000000000000000000000000000..9c914d0cc2e14f3220fc4346175961f129efb37b Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-group-new.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-group-suc.png b/docs/en/tools/desktop/kiran/figures/HA-group-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..2338580343833ebab08627be3a2efbcdb48aef9e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-group-suc.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-group.png b/docs/en/tools/desktop/kiran/figures/HA-group.png new file mode 100644 index 0000000000000000000000000000000000000000..6897817665dee90c0f8c47c6a3cb4bb09db52d78 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-group.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-home-page.png b/docs/en/tools/desktop/kiran/figures/HA-home-page.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a7a82dc412250d4c0984b3876c6f93c6aca789 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-home-page.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-login.png b/docs/en/tools/desktop/kiran/figures/HA-login.png new file mode 100644 index 0000000000000000000000000000000000000000..65d0ae11ec810da7574ec72bebf6e1b020c94a0d Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-login.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-mariadb-suc.png b/docs/en/tools/desktop/kiran/figures/HA-mariadb-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..6f6756c945121715edc623bd9a848bc48ffeb4ca Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-mariadb-suc.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-mariadb.png b/docs/en/tools/desktop/kiran/figures/HA-mariadb.png new file mode 100644 index 0000000000000000000000000000000000000000..d29587c8609b9d6aefeb07170901361b5ef8402d Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-mariadb.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-nfs-suc.png b/docs/en/tools/desktop/kiran/figures/HA-nfs-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..c0ea6af79e91649f1ad7d97ab6c2a0069a4f4fb8 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-nfs-suc.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-nfs.png b/docs/en/tools/desktop/kiran/figures/HA-nfs.png new file mode 100644 index 0000000000000000000000000000000000000000..f6917938eec2e0431a9891c067475dd0b21c1bd9 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-nfs.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-pacemaker.png b/docs/en/tools/desktop/kiran/figures/HA-pacemaker.png new file mode 100644 index 0000000000000000000000000000000000000000..7681f963f67d2b803fef6fb2c3247384136201f8 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-pacemaker.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-pcs-status.png b/docs/en/tools/desktop/kiran/figures/HA-pcs-status.png new file mode 100644 index 0000000000000000000000000000000000000000..fb150fba9f6258658702b35caacf98076d1fd109 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-pcs-status.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-pcs.png b/docs/en/tools/desktop/kiran/figures/HA-pcs.png new file mode 100644 index 0000000000000000000000000000000000000000..283670d7c3d0961ee1cb41345c2b2a013d7143b0 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-pcs.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-refresh.png b/docs/en/tools/desktop/kiran/figures/HA-refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..c2678c0c2945acbabfbeae0d5de8924a216bbf31 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-refresh.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-vip-suc.png b/docs/en/tools/desktop/kiran/figures/HA-vip-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..313ce56e14f931c78dad4349ed57ab3fd7907f50 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-vip-suc.png differ diff --git a/docs/en/tools/desktop/kiran/figures/HA-vip.png b/docs/en/tools/desktop/kiran/figures/HA-vip.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b417df2e64527d3b29d0289756dfbb01bf66ec Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/HA-vip.png differ diff --git a/docs/en/tools/desktop/kiran/figures/dde-1.png b/docs/en/tools/desktop/kiran/figures/dde-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fb1d5177c39262ed182f10a57fdae850d007eeb1 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/dde-1.png differ diff --git a/docs/en/tools/desktop/kiran/figures/dde-2.png b/docs/en/tools/desktop/kiran/figures/dde-2.png new file mode 100644 index 0000000000000000000000000000000000000000..be5d296937bd17b9646b32c80934aa76738027af Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/dde-2.png differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-1.PNG b/docs/en/tools/desktop/kiran/figures/gnome-1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ed57060770957f304a3fb7ca993241d56e90f541 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-1.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-10.PNG b/docs/en/tools/desktop/kiran/figures/gnome-10.PNG new file mode 100644 index 0000000000000000000000000000000000000000..94af842ca7d0de47db4d0030a0741d0cae634a21 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-10.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-11.PNG b/docs/en/tools/desktop/kiran/figures/gnome-11.PNG new file mode 100644 index 0000000000000000000000000000000000000000..022c764002542196b723eadaaaae080b3afc1d0f Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-11.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-12.PNG b/docs/en/tools/desktop/kiran/figures/gnome-12.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4255aa3e1629b2af94ec59ae0fe346d91da8ba61 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-12.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-13.PNG b/docs/en/tools/desktop/kiran/figures/gnome-13.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f6bad1c09c36bdef3ed4dd48c14e98c03a230cc7 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-13.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-14.PNG b/docs/en/tools/desktop/kiran/figures/gnome-14.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a661a4e759ff3107fc9bfa5f664a86f77051dfcf Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-14.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-15.PNG b/docs/en/tools/desktop/kiran/figures/gnome-15.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2e5a26c33b2cb432d4b7a79af8407b5b13592d09 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-15.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-16.PNG b/docs/en/tools/desktop/kiran/figures/gnome-16.PNG new file mode 100644 index 0000000000000000000000000000000000000000..178d5e836b69168c441676c4e77721e22f460981 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-16.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-17.PNG b/docs/en/tools/desktop/kiran/figures/gnome-17.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2ea9f9e1914bb90193689e3d35e48918dcc7c019 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-17.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-18.PNG b/docs/en/tools/desktop/kiran/figures/gnome-18.PNG new file mode 100644 index 0000000000000000000000000000000000000000..55b5c07ea89fca246600ff7ea0ff66f03427ddcb Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-18.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-19.PNG b/docs/en/tools/desktop/kiran/figures/gnome-19.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b9f78d01b726078d25d900e4ef9f9ffb1bdc9075 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-19.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-2.PNG b/docs/en/tools/desktop/kiran/figures/gnome-2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..cf86813c71dd47584c5f4d9c0d6fec29813c9dc9 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-2.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-20.PNG b/docs/en/tools/desktop/kiran/figures/gnome-20.PNG new file mode 100644 index 0000000000000000000000000000000000000000..37133665e2025c5267c3bf1ea742bc7295d0cb59 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-20.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-21.PNG b/docs/en/tools/desktop/kiran/figures/gnome-21.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0d0bc17b2a973d6e035b3d08097e0ad6138ed786 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-21.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-22.PNG b/docs/en/tools/desktop/kiran/figures/gnome-22.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4967a95e8c1fcf4fa5e6a799933149365e447725 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-22.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-23.PNG b/docs/en/tools/desktop/kiran/figures/gnome-23.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ac39542d77bdfe64b1c3d0119870cbd5e0136d17 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-23.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-24.PNG b/docs/en/tools/desktop/kiran/figures/gnome-24.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e4572c436249b329643a6777ddf6a2852fcab5a6 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-24.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-25.PNG b/docs/en/tools/desktop/kiran/figures/gnome-25.PNG new file mode 100644 index 0000000000000000000000000000000000000000..93ac3582bd0dc5a273614e20b89ea654fe02ff9d Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-25.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-26.PNG b/docs/en/tools/desktop/kiran/figures/gnome-26.PNG new file mode 100644 index 0000000000000000000000000000000000000000..98f349dab192b4b6a297d4907b9156c5d6240652 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-26.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-27.PNG b/docs/en/tools/desktop/kiran/figures/gnome-27.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ea319f8df41e1bdbccb34e597ccdb3c6d21a3727 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-27.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-28.PNG b/docs/en/tools/desktop/kiran/figures/gnome-28.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b2f1db5ea27cdfada82ba9572395598df2ecf648 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-28.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-29.PNG b/docs/en/tools/desktop/kiran/figures/gnome-29.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fc2f6a8a2bbc56af1b657a5a25359aa15183125e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-29.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-3.PNG b/docs/en/tools/desktop/kiran/figures/gnome-3.PNG new file mode 100644 index 0000000000000000000000000000000000000000..3ac1eb3b0d6cd8a84b0c408f745e40db6d845ca8 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-3.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-30.PNG b/docs/en/tools/desktop/kiran/figures/gnome-30.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6799ad80c89443267a31c0b2d3b059cc9dd8aceb Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-30.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-31.PNG b/docs/en/tools/desktop/kiran/figures/gnome-31.PNG new file mode 100644 index 0000000000000000000000000000000000000000..39ebf079f7a11c28359440111b548bf2d7be5aaa Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-31.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-32.PNG b/docs/en/tools/desktop/kiran/figures/gnome-32.PNG new file mode 100644 index 0000000000000000000000000000000000000000..28a77475cf3a1176a0c5d01418e1833fef627cc7 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-32.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-33.PNG b/docs/en/tools/desktop/kiran/figures/gnome-33.PNG new file mode 100644 index 0000000000000000000000000000000000000000..cecde6d0ab299f69ad95f25ff7d3f7130da09d02 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-33.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-34.PNG b/docs/en/tools/desktop/kiran/figures/gnome-34.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a760c501d86debdb81a89ef3a70b694e22d0e4da Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-34.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-35.PNG b/docs/en/tools/desktop/kiran/figures/gnome-35.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ab46f383f1b8f2c740effff3c59ad224b9e5025b Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-35.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-36.PNG b/docs/en/tools/desktop/kiran/figures/gnome-36.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e248144b99bb65943446f6c9fbd6ad45c11ddd58 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-36.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-37.PNG b/docs/en/tools/desktop/kiran/figures/gnome-37.PNG new file mode 100644 index 0000000000000000000000000000000000000000..7181726fb3d074298e41ee59ca14c9be68884aad Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-37.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-38.PNG b/docs/en/tools/desktop/kiran/figures/gnome-38.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b5c02d20fbad894fa3702b6274b047ef26ea1a10 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-38.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-39.PNG b/docs/en/tools/desktop/kiran/figures/gnome-39.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0c85bb5f72d7625e683409c3d4605b56f74d746b Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-39.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-4.PNG b/docs/en/tools/desktop/kiran/figures/gnome-4.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0bce0130188f00f30c67a4a8d4904ad8419428da Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-4.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-40.PNG b/docs/en/tools/desktop/kiran/figures/gnome-40.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e0c5a085776933b08d94cf51ae22d52af0a68ca0 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-40.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-41.PNG b/docs/en/tools/desktop/kiran/figures/gnome-41.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0fc42fc339480115cc588fee59983faf4652fc80 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-41.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-42.PNG b/docs/en/tools/desktop/kiran/figures/gnome-42.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fa18531c9e9ec6ee9dcb9e7c5046ee41bcfa454f Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-42.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-43.PNG b/docs/en/tools/desktop/kiran/figures/gnome-43.PNG new file mode 100644 index 0000000000000000000000000000000000000000..aadb23eda46dc831a56935a38f9a7d0c9534db89 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-43.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-44.PNG b/docs/en/tools/desktop/kiran/figures/gnome-44.PNG new file mode 100644 index 0000000000000000000000000000000000000000..8747e97f510cfd64abf520e099b5abeceb056970 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-44.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-45.PNG b/docs/en/tools/desktop/kiran/figures/gnome-45.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a0841f2360ad016c15444ff913a4a7b437ee047e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-45.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-46.PNG b/docs/en/tools/desktop/kiran/figures/gnome-46.PNG new file mode 100644 index 0000000000000000000000000000000000000000..d1815b118b98b523c1c97d14a69292528248878c Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-46.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-47.PNG b/docs/en/tools/desktop/kiran/figures/gnome-47.PNG new file mode 100644 index 0000000000000000000000000000000000000000..73c8deaf7bf8c3fca34fec443e9b60d13910732b Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-47.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-48.PNG b/docs/en/tools/desktop/kiran/figures/gnome-48.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6414ceafc991a94815324d362918b06e849d952e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-48.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-49.PNG b/docs/en/tools/desktop/kiran/figures/gnome-49.PNG new file mode 100644 index 0000000000000000000000000000000000000000..040a7a235cc3dca8dfae6d89f1d28bb308a42391 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-49.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-5.PNG b/docs/en/tools/desktop/kiran/figures/gnome-5.PNG new file mode 100644 index 0000000000000000000000000000000000000000..30076d824d8dde3206ff012538e1691df3a3e5ed Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-5.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-50.PNG b/docs/en/tools/desktop/kiran/figures/gnome-50.PNG new file mode 100644 index 0000000000000000000000000000000000000000..05951779983fa2c198afca908f6c54cbc35f557a Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-50.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-51.PNG b/docs/en/tools/desktop/kiran/figures/gnome-51.PNG new file mode 100644 index 0000000000000000000000000000000000000000..995f82f57a7828926ceea5dbaaf9f79ec453c1ab Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-51.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-52.PNG b/docs/en/tools/desktop/kiran/figures/gnome-52.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6607be66dc61953729cf5106b4d39aa724b8bf76 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-52.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-53.PNG b/docs/en/tools/desktop/kiran/figures/gnome-53.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b1e851620eadab0376be79fcc12c0d8d3d943ec3 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-53.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-54.PNG b/docs/en/tools/desktop/kiran/figures/gnome-54.PNG new file mode 100644 index 0000000000000000000000000000000000000000..c9e773a1aec444feedfbfb3dce8ca9745ccb9f9e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-54.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-55.PNG b/docs/en/tools/desktop/kiran/figures/gnome-55.PNG new file mode 100644 index 0000000000000000000000000000000000000000..bd935df19ada2bbbf6f9f4b58d020f73fbdbbed0 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-55.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-56.PNG b/docs/en/tools/desktop/kiran/figures/gnome-56.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4475f73a68296d19cf0010b1f848aa3cbcd82858 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-56.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-57.PNG b/docs/en/tools/desktop/kiran/figures/gnome-57.PNG new file mode 100644 index 0000000000000000000000000000000000000000..24073cd56613e3fce7f3a7e0f057a12d8d8f3077 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-57.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-58.PNG b/docs/en/tools/desktop/kiran/figures/gnome-58.PNG new file mode 100644 index 0000000000000000000000000000000000000000..19112ae3f1f4ee9e0d7b2191ddec2d14ad171d67 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-58.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-59.PNG b/docs/en/tools/desktop/kiran/figures/gnome-59.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4c4225e9208ad3d38e1ec9e846d6b7c5e89e3991 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-59.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-6.PNG b/docs/en/tools/desktop/kiran/figures/gnome-6.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fa53206b21811a75382f6aee788c1cd8a20d9ba7 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-6.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-7.PNG b/docs/en/tools/desktop/kiran/figures/gnome-7.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fe38b39118bb79bef4412ed0f08c472ad145980e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-7.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-8.PNG b/docs/en/tools/desktop/kiran/figures/gnome-8.PNG new file mode 100644 index 0000000000000000000000000000000000000000..769939c5583d02d014ded8065eaa7ac6aeb81cd4 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-8.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/gnome-9.PNG b/docs/en/tools/desktop/kiran/figures/gnome-9.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b699942966fe2fe444e86231638f917f524328d9 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/gnome-9.PNG differ diff --git a/docs/en/tools/desktop/kiran/figures/icon1.png b/docs/en/tools/desktop/kiran/figures/icon1.png new file mode 100644 index 0000000000000000000000000000000000000000..9bac00355cf4aa57d32287fd4271404f6fd3fd4d Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon1.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon10-o.png b/docs/en/tools/desktop/kiran/figures/icon10-o.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c56d1a64c588d86f8fe510c74e5a7c4cb810d4 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon10-o.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon101-o.svg b/docs/en/tools/desktop/kiran/figures/icon101-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..af1c5d3dc0277a6ea59e71efb6ca97bdfc782e8e --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon101-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon103-o.svg b/docs/en/tools/desktop/kiran/figures/icon103-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..c06c885725c569ab8db1fe7d595a7c65f18c5142 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon103-o.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon105-o.svg b/docs/en/tools/desktop/kiran/figures/icon105-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..36c49949fa569330b761c2d65518f36c10435508 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon105-o.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon107-o.svg b/docs/en/tools/desktop/kiran/figures/icon107-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..fb5a3ea756f6ccb7b3e5c31122a433347a908c96 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon107-o.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon11-o.png b/docs/en/tools/desktop/kiran/figures/icon11-o.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1f2cb7f99b583768c7cbd7e05a57f302dbe8a Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon11-o.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon110-o.svg b/docs/en/tools/desktop/kiran/figures/icon110-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..7958e3f192061592e002e1e8a1bad06ffa86742c --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon110-o.svg @@ -0,0 +1,12 @@ + + + + reboot_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/icon111-o.svg b/docs/en/tools/desktop/kiran/figures/icon111-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..097d16a08d305a8b3f3b2268ab1ea8342e799377 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon111-o.svg @@ -0,0 +1,13 @@ + + + + Right + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/icon112-o.svg b/docs/en/tools/desktop/kiran/figures/icon112-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e51628c2b8b10495f3410d219814286696ea2fd5 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon112-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon116-o.svg b/docs/en/tools/desktop/kiran/figures/icon116-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..4d79cd6dbbbfd3969f4e0ad0ad88e27398853505 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon116-o.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon12-o.png b/docs/en/tools/desktop/kiran/figures/icon12-o.png new file mode 100644 index 0000000000000000000000000000000000000000..f1f0f59dd3879461a0b5bc0632693a4a4124def3 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon12-o.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon120-o.svg b/docs/en/tools/desktop/kiran/figures/icon120-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e895c347d16a200aea46b00428b0b9f1a3c94246 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon120-o.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon122-o.svg b/docs/en/tools/desktop/kiran/figures/icon122-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..7fb014b5fd6097ca37a84d0b6a27dc982d675c8a --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon122-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon124-o.svg b/docs/en/tools/desktop/kiran/figures/icon124-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..960c0ec096c925213f8953398f0e8e5db3cdaed3 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon124-o.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon125-o.svg b/docs/en/tools/desktop/kiran/figures/icon125-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..011c05f4b8f296867cd408a339230323fcbb28dd --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon125-o.svg @@ -0,0 +1,9 @@ + + + tips + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/icon126-o.svg b/docs/en/tools/desktop/kiran/figures/icon126-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e0a43b6b8beb434090ac0dd3a8fd68c023f11fce --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon126-o.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon127-o.svg b/docs/en/tools/desktop/kiran/figures/icon127-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..bed95d35334a8d0151211054236c0bacddcc0dd3 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon127-o.svg @@ -0,0 +1,13 @@ + + + + Up + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/icon128-o.svg b/docs/en/tools/desktop/kiran/figures/icon128-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..aa727f3f5d5883b3fb83a79c4b98e8b5bfe4ade6 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon128-o.svg @@ -0,0 +1,12 @@ + + + + userswitch_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/icon13-o.png b/docs/en/tools/desktop/kiran/figures/icon13-o.png new file mode 100644 index 0000000000000000000000000000000000000000..c05a981b29d8ad11c6682f796f79b4cafd0f088b Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon13-o.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon132-o.svg b/docs/en/tools/desktop/kiran/figures/icon132-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..588ba9d98864ba67a562fa9179f29405f7687aa0 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon132-o.svg @@ -0,0 +1,15 @@ + + + + - + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/icon133-o.svg b/docs/en/tools/desktop/kiran/figures/icon133-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..886d90a83e33497d134bdb3dcc864a5c2df53f20 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon133-o.svg @@ -0,0 +1,13 @@ + + + + + + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/icon134-o.svg b/docs/en/tools/desktop/kiran/figures/icon134-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..784cf383eb0e8f5c7a57a602047be50ad0a3bc05 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon134-o.svg @@ -0,0 +1,15 @@ + + + + = + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/icon135-o.svg b/docs/en/tools/desktop/kiran/figures/icon135-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..cea628a8f5eb92d10661b690242b6de41ca64816 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon135-o.svg @@ -0,0 +1,15 @@ + + + + ~ + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/icon136-o.svg b/docs/en/tools/desktop/kiran/figures/icon136-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..24aa139ab2fefaee20935551f1af5aef473719ed --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon136-o.svg @@ -0,0 +1,12 @@ + + + + poweroff_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/icon14-o.png b/docs/en/tools/desktop/kiran/figures/icon14-o.png new file mode 100644 index 0000000000000000000000000000000000000000..b21deee4d98593d93fb5f72158d2d78f3d3f1cb9 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon14-o.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon15-o.png b/docs/en/tools/desktop/kiran/figures/icon15-o.png new file mode 100644 index 0000000000000000000000000000000000000000..1827a20e9da4d28e35e8ab2eae739b2fec37b385 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon15-o.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon16.png b/docs/en/tools/desktop/kiran/figures/icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..f271594dda9d3ad0f038c9d719dd68c3e82c59f1 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon16.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon17.png b/docs/en/tools/desktop/kiran/figures/icon17.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe58b89347c857920bce25f067fbd11c308e502 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon17.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon18.png b/docs/en/tools/desktop/kiran/figures/icon18.png new file mode 100644 index 0000000000000000000000000000000000000000..1827a20e9da4d28e35e8ab2eae739b2fec37b385 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon18.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon19-o.png b/docs/en/tools/desktop/kiran/figures/icon19-o.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1f2cb7f99b583768c7cbd7e05a57f302dbe8a Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon19-o.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon2.png b/docs/en/tools/desktop/kiran/figures/icon2.png new file mode 100644 index 0000000000000000000000000000000000000000..9101e4b386df065a87d422bc5a0b287528ea5ec7 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon2.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon20.png b/docs/en/tools/desktop/kiran/figures/icon20.png new file mode 100644 index 0000000000000000000000000000000000000000..4de3c7c695893539967245ea5e269b26e2b735be Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon20.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon21.png b/docs/en/tools/desktop/kiran/figures/icon21.png new file mode 100644 index 0000000000000000000000000000000000000000..e7b4320b6ce1fd4adb52525ba2c60983ffb2eed3 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon21.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon22.png b/docs/en/tools/desktop/kiran/figures/icon22.png new file mode 100644 index 0000000000000000000000000000000000000000..43bfa96965ad13e0a34ead3cb1102a76b9346a23 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon22.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon23.png b/docs/en/tools/desktop/kiran/figures/icon23.png new file mode 100644 index 0000000000000000000000000000000000000000..aee221ddaa81d06fa7bd5b89a624da90cd1e53da Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon23.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon24.png b/docs/en/tools/desktop/kiran/figures/icon24.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e5d700431ca1666fe9eda2cefce5dd2f83bdcd Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon24.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon25.png b/docs/en/tools/desktop/kiran/figures/icon25.png new file mode 100644 index 0000000000000000000000000000000000000000..3de0f9476bbee9e89c3b759afbed968f17b5bbcc Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon25.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon26-o.png b/docs/en/tools/desktop/kiran/figures/icon26-o.png new file mode 100644 index 0000000000000000000000000000000000000000..2293a893caf6d89c3beb978598fe7f281e68e7d5 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon26-o.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon27-o.png b/docs/en/tools/desktop/kiran/figures/icon27-o.png new file mode 100644 index 0000000000000000000000000000000000000000..abbab8e40f7e3ca7c2a6f28ff78f08f15117828e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon27-o.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon28-o.png b/docs/en/tools/desktop/kiran/figures/icon28-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon28-o.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon29-o.png b/docs/en/tools/desktop/kiran/figures/icon29-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon29-o.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon3.png b/docs/en/tools/desktop/kiran/figures/icon3.png new file mode 100644 index 0000000000000000000000000000000000000000..930ee8909e89e3624c581f83d713af271cd96c75 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon3.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon30-o.png b/docs/en/tools/desktop/kiran/figures/icon30-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon30-o.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon31-o.png b/docs/en/tools/desktop/kiran/figures/icon31-o.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon31-o.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon32.png b/docs/en/tools/desktop/kiran/figures/icon32.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon32.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon33.png b/docs/en/tools/desktop/kiran/figures/icon33.png new file mode 100644 index 0000000000000000000000000000000000000000..88ed145b25f6f025ad795ceb012500e0944cb54c Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon33.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon34.png b/docs/en/tools/desktop/kiran/figures/icon34.png new file mode 100644 index 0000000000000000000000000000000000000000..8247f52a3424c81b451ceb318f4a7979a5eddece Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon34.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon35.png b/docs/en/tools/desktop/kiran/figures/icon35.png new file mode 100644 index 0000000000000000000000000000000000000000..7c656e9030b94809a57c7e369921e6a585f3574c Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon35.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon36.png b/docs/en/tools/desktop/kiran/figures/icon36.png new file mode 100644 index 0000000000000000000000000000000000000000..7d29d173e914dfff48245d3d3a4d42575ce2d1db Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon36.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon37.png b/docs/en/tools/desktop/kiran/figures/icon37.png new file mode 100644 index 0000000000000000000000000000000000000000..58be4c621b6638115153e361801deb9ee06634d8 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon37.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon38.png b/docs/en/tools/desktop/kiran/figures/icon38.png new file mode 100644 index 0000000000000000000000000000000000000000..0c861ccb891f4fb5e533eb7f7151a8fce1571f17 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon38.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon39.png b/docs/en/tools/desktop/kiran/figures/icon39.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ba1f347452d0cd1c06c6c51d2cdf5aea5e490b Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon39.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon4.png b/docs/en/tools/desktop/kiran/figures/icon4.png new file mode 100644 index 0000000000000000000000000000000000000000..548dc8b648edb73ff1dd8a0266e8479203e72ca0 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon4.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon40.png b/docs/en/tools/desktop/kiran/figures/icon40.png new file mode 100644 index 0000000000000000000000000000000000000000..9c29dd1e9a1bf22c36abf51cb18fa9e47b455fab Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon40.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon41.png b/docs/en/tools/desktop/kiran/figures/icon41.png new file mode 100644 index 0000000000000000000000000000000000000000..9e8aea527a2119433fffec5a8800ebfa4fa5062f Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon41.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon42-o.png b/docs/en/tools/desktop/kiran/figures/icon42-o.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon42-o.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon42.png b/docs/en/tools/desktop/kiran/figures/icon42.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon42.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon43-o.png b/docs/en/tools/desktop/kiran/figures/icon43-o.png new file mode 100644 index 0000000000000000000000000000000000000000..284bdd551baf25beb4143013402e77a1a4c60ccb Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon43-o.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon44-o.png b/docs/en/tools/desktop/kiran/figures/icon44-o.png new file mode 100644 index 0000000000000000000000000000000000000000..810f4d784ee140dbf562e67a0d3fd391272626a5 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon44-o.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon45-o.png b/docs/en/tools/desktop/kiran/figures/icon45-o.png new file mode 100644 index 0000000000000000000000000000000000000000..3e528ce2c98284f020ae4912a853f5864526396b Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon45-o.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon46-o.png b/docs/en/tools/desktop/kiran/figures/icon46-o.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6a3ca0fe57016f3685981ed518493ceea1c855 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon46-o.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon47-o.png b/docs/en/tools/desktop/kiran/figures/icon47-o.png new file mode 100644 index 0000000000000000000000000000000000000000..6eeaba98d908775bd363a8ffcec27c3b6a214013 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon47-o.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon49-o.svg b/docs/en/tools/desktop/kiran/figures/icon49-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..f2d76acd147ccaf5e493a7c035bb90640af7817c --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon49-o.svg @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon5.png b/docs/en/tools/desktop/kiran/figures/icon5.png new file mode 100644 index 0000000000000000000000000000000000000000..e4206b7b584bf0702c7cb2f03a3a41e20bfba844 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon5.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon50-o.svg b/docs/en/tools/desktop/kiran/figures/icon50-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..05026802be4718205065d6369e14cc0b6ef05bc7 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon50-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon52-o.svg b/docs/en/tools/desktop/kiran/figures/icon52-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..23149c05873259cd39721b8ee9c3ab7db86d64c5 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon52-o.svg @@ -0,0 +1,9 @@ + + + attention + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/icon53-o.svg b/docs/en/tools/desktop/kiran/figures/icon53-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..50e33489ce984b0acfd621da4a8ef837fdf048c1 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon53-o.svg @@ -0,0 +1,11 @@ + + + + previous + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/icon54-o.svg b/docs/en/tools/desktop/kiran/figures/icon54-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..3b599aef4b822c707d2f646405bb00837aed96fd --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon54-o.svg @@ -0,0 +1,18 @@ + + + + Backspace + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/icon56-o.svg b/docs/en/tools/desktop/kiran/figures/icon56-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9f13b6861e3858deec8d57a5301c934acc247069 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon56-o.svg @@ -0,0 +1,19 @@ + + + + Slice 1 + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/icon57-o.svg b/docs/en/tools/desktop/kiran/figures/icon57-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e6fbfa1381b76ab3fcd45652b33267a7f6c69bb7 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon57-o.svg @@ -0,0 +1,11 @@ + + + + titlebutton/close_normal + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/icon58-o.svg b/docs/en/tools/desktop/kiran/figures/icon58-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9746dcacfc8e5d4c4b63233801e37418a190fc8f --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon58-o.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon6.png b/docs/en/tools/desktop/kiran/figures/icon6.png new file mode 100644 index 0000000000000000000000000000000000000000..88ced3587e9a42b145fe11393726f40aba9d1b2c Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon6.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon62-o.svg b/docs/en/tools/desktop/kiran/figures/icon62-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..09f61b446669df2e05a3351d40d8c30879c7b035 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon62-o.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon63-o.svg b/docs/en/tools/desktop/kiran/figures/icon63-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..06c03ed99260ffadc681475dad35610aedf67f83 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon63-o.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon66-o.svg b/docs/en/tools/desktop/kiran/figures/icon66-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..5793b3846b7fe6a5758379591215b16c7f9e1b52 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon66-o.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon68-o.svg b/docs/en/tools/desktop/kiran/figures/icon68-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..a7748052dfa436116d8742dca28f7d90865231ed --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon68-o.svg @@ -0,0 +1,23 @@ + + + + deepin-system-monitor + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/icon69-o.svg b/docs/en/tools/desktop/kiran/figures/icon69-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e21dfd00a32a44ee1c8e3882b4ca8239be04690f --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon69-o.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon7.png b/docs/en/tools/desktop/kiran/figures/icon7.png new file mode 100644 index 0000000000000000000000000000000000000000..05fe8aa38c84ca0c0c99b0b005ddec2f2ba42f4a Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon7.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon70-o.svg b/docs/en/tools/desktop/kiran/figures/icon70-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..b5787a7ffa5ed9519a48c6937c60927fd11fd455 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon70-o.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon71-o.svg b/docs/en/tools/desktop/kiran/figures/icon71-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..669a21f143b06cb45ea3f45f7f071809f2cbc8a8 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon71-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon72-o.svg b/docs/en/tools/desktop/kiran/figures/icon72-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..79067ed9b9ff7912e1742183b461fa056601b9cc --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon72-o.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon73-o.svg b/docs/en/tools/desktop/kiran/figures/icon73-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..cf6292387f5e790db6ebd66184aabcbb39257ee7 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon73-o.svg @@ -0,0 +1,13 @@ + + + + Down + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/icon75-o.svg b/docs/en/tools/desktop/kiran/figures/icon75-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..ef6823ccc19858f57374f0b78ad31514e8311be3 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon75-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon8.png b/docs/en/tools/desktop/kiran/figures/icon8.png new file mode 100644 index 0000000000000000000000000000000000000000..01543c3e0f5e96a023b4e1f0859a03e3a0dafd56 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon8.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon83-o.svg b/docs/en/tools/desktop/kiran/figures/icon83-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..35dd6eacc54a933dc9ebc3f3010edfa7363fecc0 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon83-o.svg @@ -0,0 +1,84 @@ + + + + + + image/svg+xml + + img_upload + + + + + + img_upload + Created with Sketch. + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon84-o.svg b/docs/en/tools/desktop/kiran/figures/icon84-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9bd11b9e7b45b506dd7e1c87d09d545d8f48af06 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon84-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon86-o.svg b/docs/en/tools/desktop/kiran/figures/icon86-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..5da20233309c43d4fc7b315f441cde476c835c67 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon86-o.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon88-o.svg b/docs/en/tools/desktop/kiran/figures/icon88-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..c2570c26575fd14cb5e9d9fe77831d2e8f6c9333 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon88-o.svg @@ -0,0 +1,13 @@ + + + + Left + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/icon9.png b/docs/en/tools/desktop/kiran/figures/icon9.png new file mode 100644 index 0000000000000000000000000000000000000000..a07c9ab8e51decd9a3bca8c969d2ae95bd68512c Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/icon9.png differ diff --git a/docs/en/tools/desktop/kiran/figures/icon90-o.svg b/docs/en/tools/desktop/kiran/figures/icon90-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..79b5e0a141f7969a8f77ae61f4c240de7187afe9 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon90-o.svg @@ -0,0 +1,12 @@ + + + + lock_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/icon92-o.svg b/docs/en/tools/desktop/kiran/figures/icon92-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..21341b64a832e1935252aa82e7a4e0b083c16eae --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon92-o.svg @@ -0,0 +1,12 @@ + + + + logout_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/icon94-o.svg b/docs/en/tools/desktop/kiran/figures/icon94-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..a47044149a02101dbd24a3fdb2f3ead77efca6c1 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon94-o.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon97-o.svg b/docs/en/tools/desktop/kiran/figures/icon97-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..4f4670de29d8c86885b5aa806b2c8cdc6fc16dcb --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon97-o.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kiran/figures/icon99-o.svg b/docs/en/tools/desktop/kiran/figures/icon99-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e9a3aa60a51404c9390bfbea8d8ff09edc0e2e32 --- /dev/null +++ b/docs/en/tools/desktop/kiran/figures/icon99-o.svg @@ -0,0 +1,11 @@ + + + notes + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kiran/figures/kiran-1.png b/docs/en/tools/desktop/kiran/figures/kiran-1.png new file mode 100644 index 0000000000000000000000000000000000000000..59b632062ba3ff6e26c550567e858eb4dfdfc780 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-1.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-10.png b/docs/en/tools/desktop/kiran/figures/kiran-10.png new file mode 100644 index 0000000000000000000000000000000000000000..18cfa3074af1f4b8d49d064a77b016f24ab8c17c Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-10.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-11.png b/docs/en/tools/desktop/kiran/figures/kiran-11.png new file mode 100644 index 0000000000000000000000000000000000000000..b58fbb7ce8a798d5355855a4ac0638540df74d9e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-11.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-12.png b/docs/en/tools/desktop/kiran/figures/kiran-12.png new file mode 100644 index 0000000000000000000000000000000000000000..920d0c7112be6bed509773413de36506d748b822 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-12.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-13.png b/docs/en/tools/desktop/kiran/figures/kiran-13.png new file mode 100644 index 0000000000000000000000000000000000000000..f6632732bd2e8a10d0cda2bd0550f43741a7ba97 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-13.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-14.png b/docs/en/tools/desktop/kiran/figures/kiran-14.png new file mode 100644 index 0000000000000000000000000000000000000000..52eae7cc40fe4f7c6b2a8fe9744209a1fcbc30d8 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-14.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-15.png b/docs/en/tools/desktop/kiran/figures/kiran-15.png new file mode 100644 index 0000000000000000000000000000000000000000..5496c56ca72983780b9785d2d15c4008fb73aeef Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-15.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-16.png b/docs/en/tools/desktop/kiran/figures/kiran-16.png new file mode 100644 index 0000000000000000000000000000000000000000..6125b257245aa89f9b6592ed5b14a95d5699076e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-16.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-17.png b/docs/en/tools/desktop/kiran/figures/kiran-17.png new file mode 100644 index 0000000000000000000000000000000000000000..d8a4cb88017efe9f41f78ffc2f9de06dedcc1b23 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-17.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-18.png b/docs/en/tools/desktop/kiran/figures/kiran-18.png new file mode 100644 index 0000000000000000000000000000000000000000..0cb0c50d15597998fbd4cf3db2d1d0f9ec3c920e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-18.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-19.png b/docs/en/tools/desktop/kiran/figures/kiran-19.png new file mode 100644 index 0000000000000000000000000000000000000000..58ef2d33a52cf6404ea03b6a2d37f8d8b8391539 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-19.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-2.png b/docs/en/tools/desktop/kiran/figures/kiran-2.png new file mode 100644 index 0000000000000000000000000000000000000000..088bf53c1e763924e7cee46d0cdac98ad0a9d5e2 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-2.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-20.png b/docs/en/tools/desktop/kiran/figures/kiran-20.png new file mode 100644 index 0000000000000000000000000000000000000000..e8608485553033eb2ae141162e4300fa48c578cd Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-20.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-21.png b/docs/en/tools/desktop/kiran/figures/kiran-21.png new file mode 100644 index 0000000000000000000000000000000000000000..4d4c0ff304bdfbc8e715d2e756315a005c008336 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-21.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-22.png b/docs/en/tools/desktop/kiran/figures/kiran-22.png new file mode 100644 index 0000000000000000000000000000000000000000..6778d5a40a82e699da9531f4727a196d1442b9ae Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-22.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-23.png b/docs/en/tools/desktop/kiran/figures/kiran-23.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1d5e284eb299a771c5abbfdff611270ddf2449 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-23.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-24.png b/docs/en/tools/desktop/kiran/figures/kiran-24.png new file mode 100644 index 0000000000000000000000000000000000000000..a3ed57f9e9c300a65f867d29a44f287405a0509c Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-24.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-25.png b/docs/en/tools/desktop/kiran/figures/kiran-25.png new file mode 100644 index 0000000000000000000000000000000000000000..694e6173dfbf1fda8d07670a8e3daf4fbeb263ac Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-25.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-26.png b/docs/en/tools/desktop/kiran/figures/kiran-26.png new file mode 100644 index 0000000000000000000000000000000000000000..3b6ae2eeff3aae39107f15b60c5bb14ffc787cd8 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-26.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-27.png b/docs/en/tools/desktop/kiran/figures/kiran-27.png new file mode 100644 index 0000000000000000000000000000000000000000..3b6ae2eeff3aae39107f15b60c5bb14ffc787cd8 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-27.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-28.png b/docs/en/tools/desktop/kiran/figures/kiran-28.png new file mode 100644 index 0000000000000000000000000000000000000000..01ff3a8f47248d96c714e78b80fd81cd1ed16e0f Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-28.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-29.png b/docs/en/tools/desktop/kiran/figures/kiran-29.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ad5b4438eae441f6086ce5e1aae2e6755aa12a Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-29.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-3.png b/docs/en/tools/desktop/kiran/figures/kiran-3.png new file mode 100644 index 0000000000000000000000000000000000000000..e1399424c52eee8804f9433c9e9bf203950008c6 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-3.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-30.png b/docs/en/tools/desktop/kiran/figures/kiran-30.png new file mode 100644 index 0000000000000000000000000000000000000000..c1efc1e3931a129affd5dfcea9e319556e492f04 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-30.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-31.png b/docs/en/tools/desktop/kiran/figures/kiran-31.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ad5b4438eae441f6086ce5e1aae2e6755aa12a Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-31.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-32.png b/docs/en/tools/desktop/kiran/figures/kiran-32.png new file mode 100644 index 0000000000000000000000000000000000000000..fd900ec891b09313a7c558c61213b1816b803034 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-32.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-33.png b/docs/en/tools/desktop/kiran/figures/kiran-33.png new file mode 100644 index 0000000000000000000000000000000000000000..64ba70b08ed63c6e0942478d61e36a8c443f0604 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-33.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-34.png b/docs/en/tools/desktop/kiran/figures/kiran-34.png new file mode 100644 index 0000000000000000000000000000000000000000..4b869e7d172e2f2889d487157b92204a28a8dc4e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-34.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-35.png b/docs/en/tools/desktop/kiran/figures/kiran-35.png new file mode 100644 index 0000000000000000000000000000000000000000..9b383f3c84964b4fc34c4d8e75400325f93908bc Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-35.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-36.png b/docs/en/tools/desktop/kiran/figures/kiran-36.png new file mode 100644 index 0000000000000000000000000000000000000000..0b16632852c5024e2c6ec4fbd49513e3b7a2b146 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-36.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-37.png b/docs/en/tools/desktop/kiran/figures/kiran-37.png new file mode 100644 index 0000000000000000000000000000000000000000..2be3cc3b2528260c579b59f529e7a5663f1cc779 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-37.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-38.png b/docs/en/tools/desktop/kiran/figures/kiran-38.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1ffaf3aa920f922357f6d48700f42974600d77 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-38.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-39.png b/docs/en/tools/desktop/kiran/figures/kiran-39.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0e5add782b6c9cf4a8b9f6473c96641c39bd1d Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-39.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-4.png b/docs/en/tools/desktop/kiran/figures/kiran-4.png new file mode 100644 index 0000000000000000000000000000000000000000..bd318280b403912ab4846b694592d580b9e5d242 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-4.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-40.png b/docs/en/tools/desktop/kiran/figures/kiran-40.png new file mode 100644 index 0000000000000000000000000000000000000000..083031058ff47dc1550881d3a9f189861d3e8563 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-40.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-41.png b/docs/en/tools/desktop/kiran/figures/kiran-41.png new file mode 100644 index 0000000000000000000000000000000000000000..582893929e2c10a96c49696411bbed3ea9fd7c55 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-41.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-42.png b/docs/en/tools/desktop/kiran/figures/kiran-42.png new file mode 100644 index 0000000000000000000000000000000000000000..eede1243506ccd309ee707465f56c31581dd8554 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-42.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-43.0.png b/docs/en/tools/desktop/kiran/figures/kiran-43.0.png new file mode 100644 index 0000000000000000000000000000000000000000..caacc027322d4b7480e6508d4a1b4a13eefcf788 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-43.0.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-43.png b/docs/en/tools/desktop/kiran/figures/kiran-43.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea9f45ed8f327fce426352c4ae7fbf06cbefc84 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-43.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-44.png b/docs/en/tools/desktop/kiran/figures/kiran-44.png new file mode 100644 index 0000000000000000000000000000000000000000..c86a100005f89dbb9b24055e42d716205d47399e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-44.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-45.png b/docs/en/tools/desktop/kiran/figures/kiran-45.png new file mode 100644 index 0000000000000000000000000000000000000000..c5b5d75f972e594587f3393c8d384dcd76e7477e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-45.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-46.png b/docs/en/tools/desktop/kiran/figures/kiran-46.png new file mode 100644 index 0000000000000000000000000000000000000000..e9a28632c62de95d8ea2d436ba9bc705ff980991 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-46.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-47.png b/docs/en/tools/desktop/kiran/figures/kiran-47.png new file mode 100644 index 0000000000000000000000000000000000000000..a3606e3c899f944eb84d206d98cedc3377197c97 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-47.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-48.png b/docs/en/tools/desktop/kiran/figures/kiran-48.png new file mode 100644 index 0000000000000000000000000000000000000000..b69202c9a83bfc2c835ab166ef0fc2455bb4bcd3 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-48.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-49.png b/docs/en/tools/desktop/kiran/figures/kiran-49.png new file mode 100644 index 0000000000000000000000000000000000000000..d739e6107fd80ecd741dacaaf9dfb868afc61e37 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-49.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-5.png b/docs/en/tools/desktop/kiran/figures/kiran-5.png new file mode 100644 index 0000000000000000000000000000000000000000..154dd54d43b5b98682eb798518046e72fc7e3f83 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-5.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-50.png b/docs/en/tools/desktop/kiran/figures/kiran-50.png new file mode 100644 index 0000000000000000000000000000000000000000..96957676afc9f66bcc4b63c5e39eb8890f108015 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-50.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-6.png b/docs/en/tools/desktop/kiran/figures/kiran-6.png new file mode 100644 index 0000000000000000000000000000000000000000..927b475d6687d60f04fed8a535b2225a8f4b23f7 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-6.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-7.png b/docs/en/tools/desktop/kiran/figures/kiran-7.png new file mode 100644 index 0000000000000000000000000000000000000000..254ef11f36d958f6ef7c70853e5f61032f825463 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-7.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-8.png b/docs/en/tools/desktop/kiran/figures/kiran-8.png new file mode 100644 index 0000000000000000000000000000000000000000..29b5845d2fa94cba92719b8649a5e86c926ea911 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-8.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kiran-9.png b/docs/en/tools/desktop/kiran/figures/kiran-9.png new file mode 100644 index 0000000000000000000000000000000000000000..46bcfdd0e1e88ad0f0ade4a3990c3ac5d66060e7 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kiran-9.png differ diff --git a/docs/en/tools/desktop/kiran/figures/kubesphere.png b/docs/en/tools/desktop/kiran/figures/kubesphere.png new file mode 100644 index 0000000000000000000000000000000000000000..939dcb70202b19c7853cbfd8f27f6e8e4678ce26 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/kubesphere.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-1.png b/docs/en/tools/desktop/kiran/figures/xfce-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c04222d7757b84aa8afecf98815eee25211a86d7 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-1.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-2.png b/docs/en/tools/desktop/kiran/figures/xfce-2.png new file mode 100644 index 0000000000000000000000000000000000000000..fa7e1a1ae3c1535a1528f03636d2b62d727412af Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-2.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-3.png b/docs/en/tools/desktop/kiran/figures/xfce-3.png new file mode 100644 index 0000000000000000000000000000000000000000..6eeb68ad39f45ff476f1d18b8cd34492ec1f542b Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-3.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-4.png b/docs/en/tools/desktop/kiran/figures/xfce-4.png new file mode 100644 index 0000000000000000000000000000000000000000..f66de500fad7c847c2fea2e3774413d1c38e642e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-4.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-5.png b/docs/en/tools/desktop/kiran/figures/xfce-5.png new file mode 100644 index 0000000000000000000000000000000000000000..0258b0e5cf6c7c13d88b0431f4b0221e86451ce8 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-5.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-6.png b/docs/en/tools/desktop/kiran/figures/xfce-6.png new file mode 100644 index 0000000000000000000000000000000000000000..f2027b37021b260a97ff56a32026a53d00db0763 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-6.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-7.png b/docs/en/tools/desktop/kiran/figures/xfce-7.png new file mode 100644 index 0000000000000000000000000000000000000000..b7a94df356b7b9f7dca3d305d066ec854406aaab Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-7.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-71.png b/docs/en/tools/desktop/kiran/figures/xfce-71.png new file mode 100644 index 0000000000000000000000000000000000000000..6e2ff40536d18253dcfd4a69396e8e96817f704a Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-71.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-8.png b/docs/en/tools/desktop/kiran/figures/xfce-8.png new file mode 100644 index 0000000000000000000000000000000000000000..4ae9885b617e49cba84140e84dd6b354ff55f92c Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-8.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-81.png b/docs/en/tools/desktop/kiran/figures/xfce-81.png new file mode 100644 index 0000000000000000000000000000000000000000..b97c9a81c2a07efe361e6dc6ee8bed5db445ecfa Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-81.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-811.png b/docs/en/tools/desktop/kiran/figures/xfce-811.png new file mode 100644 index 0000000000000000000000000000000000000000..21447e37a5dd94fc88cb3ec0a11cd0dc0d50cf36 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-811.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-812.png b/docs/en/tools/desktop/kiran/figures/xfce-812.png new file mode 100644 index 0000000000000000000000000000000000000000..d505f1ac8111062a172b9fb5f5717d72f653f1b8 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-812.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-813.png b/docs/en/tools/desktop/kiran/figures/xfce-813.png new file mode 100644 index 0000000000000000000000000000000000000000..218d3b80c83cade14acc0c0baa4532710d1959dd Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-813.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-814.png b/docs/en/tools/desktop/kiran/figures/xfce-814.png new file mode 100644 index 0000000000000000000000000000000000000000..6ccbe910bd32cb4d619ba47d2fcb354424e80451 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-814.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-82.png b/docs/en/tools/desktop/kiran/figures/xfce-82.png new file mode 100644 index 0000000000000000000000000000000000000000..170deb5fb43f4e924d5ba4eba94a02c341d31515 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-82.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-821.png b/docs/en/tools/desktop/kiran/figures/xfce-821.png new file mode 100644 index 0000000000000000000000000000000000000000..690f3f0b528dfdaf6586549cdeb105df2214fc44 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-821.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-83.png b/docs/en/tools/desktop/kiran/figures/xfce-83.png new file mode 100644 index 0000000000000000000000000000000000000000..95e4844c0ece09819d3e9f1e8457bbf371b1282e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-83.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-831.png b/docs/en/tools/desktop/kiran/figures/xfce-831.png new file mode 100644 index 0000000000000000000000000000000000000000..61da16b7871a085a6c373a1262c0f785fb415e60 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-831.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-832.png b/docs/en/tools/desktop/kiran/figures/xfce-832.png new file mode 100644 index 0000000000000000000000000000000000000000..87b59b42d86ebd205750e162d5f2751b4d87181e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-832.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-84.png b/docs/en/tools/desktop/kiran/figures/xfce-84.png new file mode 100644 index 0000000000000000000000000000000000000000..1afe9d9bd51af83c99793666bad47d231bba5c7b Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-84.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-841.png b/docs/en/tools/desktop/kiran/figures/xfce-841.png new file mode 100644 index 0000000000000000000000000000000000000000..35875b40b8c95ce32652003daa5caf065747725f Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-841.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-842.png b/docs/en/tools/desktop/kiran/figures/xfce-842.png new file mode 100644 index 0000000000000000000000000000000000000000..b4031b575ffc3e9aa5a8edc7826fe28af97d0f23 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-842.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-85.png b/docs/en/tools/desktop/kiran/figures/xfce-85.png new file mode 100644 index 0000000000000000000000000000000000000000..bce9a0165290167d5fceee22d74f2abf4aed28fd Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-85.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-851.png b/docs/en/tools/desktop/kiran/figures/xfce-851.png new file mode 100644 index 0000000000000000000000000000000000000000..15c9e2d6d04e9b712bdf88d0ee1e7246a8d7b83e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-851.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-86.png b/docs/en/tools/desktop/kiran/figures/xfce-86.png new file mode 100644 index 0000000000000000000000000000000000000000..d78bc4ae0dbf13c3ad40b29468bd44056817e522 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-86.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-861.png b/docs/en/tools/desktop/kiran/figures/xfce-861.png new file mode 100644 index 0000000000000000000000000000000000000000..9a58733007cfac1c42ff244b52ee14c75051d852 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-861.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-87.png b/docs/en/tools/desktop/kiran/figures/xfce-87.png new file mode 100644 index 0000000000000000000000000000000000000000..ee5844bcfa836ec8ecf0a5fea125dcab530ad6db Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-87.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-9.png b/docs/en/tools/desktop/kiran/figures/xfce-9.png new file mode 100644 index 0000000000000000000000000000000000000000..5586c4f62cc161665b91a56ad23b2320901901c0 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-9.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-91.png b/docs/en/tools/desktop/kiran/figures/xfce-91.png new file mode 100644 index 0000000000000000000000000000000000000000..ee69879bb4ad66405b045af5e3965e275fe8eabf Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-91.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-911.png b/docs/en/tools/desktop/kiran/figures/xfce-911.png new file mode 100644 index 0000000000000000000000000000000000000000..b49416558e9ab844fda2026b76e2e900ac106842 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-911.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-92.png b/docs/en/tools/desktop/kiran/figures/xfce-92.png new file mode 100644 index 0000000000000000000000000000000000000000..78dd6313c603aad9ebd37fe68e06f98b2a3b331e Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-92.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-921.png b/docs/en/tools/desktop/kiran/figures/xfce-921.png new file mode 100644 index 0000000000000000000000000000000000000000..0681efd633cff00fe8572579b8971933cfc41dc1 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-921.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-93.png b/docs/en/tools/desktop/kiran/figures/xfce-93.png new file mode 100644 index 0000000000000000000000000000000000000000..06ac80c152fefbe1ad2ba1c989f6acfbbaf1a992 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-93.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-931.png b/docs/en/tools/desktop/kiran/figures/xfce-931.png new file mode 100644 index 0000000000000000000000000000000000000000..591a6d21d8fe69aed84d35316af506771a26ac01 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-931.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-94.png b/docs/en/tools/desktop/kiran/figures/xfce-94.png new file mode 100644 index 0000000000000000000000000000000000000000..f48064ff5902c4ea740ccba9a1640cbca27b5b72 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-94.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-941.png b/docs/en/tools/desktop/kiran/figures/xfce-941.png new file mode 100644 index 0000000000000000000000000000000000000000..aaee48a09a1e7233d25f68c6a74c7c39edc73b1f Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-941.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-95.png b/docs/en/tools/desktop/kiran/figures/xfce-95.png new file mode 100644 index 0000000000000000000000000000000000000000..bda965b15a859e4cccf4b80f62875f79eb3470fd Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-95.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-951.png b/docs/en/tools/desktop/kiran/figures/xfce-951.png new file mode 100644 index 0000000000000000000000000000000000000000..1d8ff807ac84bdae0dc935c3964d10701b5d47dc Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-951.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-96.png b/docs/en/tools/desktop/kiran/figures/xfce-96.png new file mode 100644 index 0000000000000000000000000000000000000000..29ce24923477065b98cacf603f185113e9959069 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-96.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-961.png b/docs/en/tools/desktop/kiran/figures/xfce-961.png new file mode 100644 index 0000000000000000000000000000000000000000..9d2944ae05699b8424695c865242c1c4f5d60fac Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-961.png differ diff --git a/docs/en/tools/desktop/kiran/figures/xfce-962.png b/docs/en/tools/desktop/kiran/figures/xfce-962.png new file mode 100644 index 0000000000000000000000000000000000000000..72c65f9675d8259f327077ce7f7212bd2b17a588 Binary files /dev/null and b/docs/en/tools/desktop/kiran/figures/xfce-962.png differ diff --git a/docs/en/tools/desktop/kiran/kiran_installation.md b/docs/en/tools/desktop/kiran/kiran_installation.md new file mode 100644 index 0000000000000000000000000000000000000000..37f053767d55b38723239224e026e62b7adac5e4 --- /dev/null +++ b/docs/en/tools/desktop/kiran/kiran_installation.md @@ -0,0 +1,31 @@ +# Kiran Installation + +## Introduction + +Kiran desktop environment, developed by Kylinsec, is a stable, efficient, and easy-to-use desktop environment oriented towards user and market requirements. Kiran supports x86 and AArch64 architectures. + +## Procedure + +You are advised to install Kiran as the **root** user or a newly created administrator. + +1. Download the openEuler 22.03 LTS SP4 ISO file and install the OS. + +2. Update the software repository. + +```shell +sudo dnf update +``` + +1. Install kiran-desktop. + +```shell +sudo dnf install kiran-desktop +``` + +1. Set the system to start with the graphical interface, and then restart the system using the `reboot` command. + +```shell +systemctl set-default graphical.target +``` + +After the reboot is complete, log in to the Kiran desktop. diff --git a/docs/en/tools/desktop/kiran/kiran_user_guide.md b/docs/en/tools/desktop/kiran/kiran_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..7780aa7b5621ec35fa8976c19bb4fafa3cb6dd6a --- /dev/null +++ b/docs/en/tools/desktop/kiran/kiran_user_guide.md @@ -0,0 +1,298 @@ +# Kiran Desktop Environment + +## 1. Overview + +Kiran desktop environment is a stable, efficient, and easy-to-use desktop environment oriented towards user and market requirements. It consists of the desktop, taskbar, tray, control center, and window management components. This document describes how to use the Kiran desktop. + +## 2. Desktop + +### 2.1. Login Screen + +After the installation is complete, restart the system. After the system is started, enter the user name and password to log in to the system. The login screen displays the time, date, power button, and soft keyboard button. The adaptive UI supports screen zooming and multi-screen display. The login dialog box can be switched between screens following the mouse pointer. + +![Figure 1 Login screen](figures/kiran-1.png) + +### 2.2. Main Screen + +Enter the correct user name and password to log in to the system. The main screen is displayed, as shown in the following figure: + +![Figure 2-Main screen ](figures/kiran-2.png) + +Several icons are displayed on the desktop, such as **Computer**, **Home** folder, and **Trash**. The panel, located at the bottom of the screen, allows you to launch applications and switch between virtual desktops. +A desktop is a working area of a user. You will perform operations and run applications on the desktop. You can place the files and applications on the desktop for easy access. Double-click the icons to run the corresponding applications or open the files. You can drag, add, or delete desktop icons. Desktop icons allow you to complete your work more conveniently. + +![Figure 3-Computer](figures/kiran-3.png) **Computer**: Double-click to display all the local and remote disks and folders accessed from this computer. + +![Figure 4-Home folder](figures/kiran-4.png) **Home** folder: Double-click to display the contents in the home directory of the current user. + +![Figure 5- Trash](figures/kiran-5.png) **Trash**: Deleted files are temporarily stored in Trash. + +Shortcut menu: Right-click on the desktop to display the shortcut menu, which provides shortcuts for icon management, folder creation, document creation, desktop background settings, and theme settings. + +**Create Folder**: Creates a folder. + +**Create Launcher...**: Creates a launcher. + +**Create Document**: Creates an empty plain-text file. + +**Open Terminal...**: Opens the terminal application. + +**Organize Desktop by Name**: Sorts desktop files by name. + +**Keep Aligned**: If this option is selected, the desktop icons are aligned to the grid. + +**Change Desktop Background**: Opens Background to change the background picture of the desktop or lock screen. + +### 2.3 Panel + +The panel is usually located at the bottom of the screen and includes the start menu button, quick launch area, icons of frequently used applications and desktop applets, and taskbar that displays the currently running application. +When you hover the mouse pointer over an icon for several seconds, a white dialog box is displayed, describing the function of the icon. + +![Figure 6-System panel](figures/kiran-6.png) + +## 3. Taskbar + +Taskbar: displays running applications or opened documents. You can click an item on the taskbar to maximize or minimize the selected application window. You can right-click an item and choose Maximize, Minimize, or Close the application window from the shortcut menu. + +| Component | Description | +| :------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------ | +| ![Figure 7-Start Menu](figures/kiran-7.png) | Start Menu button: Similar to the Start button in Windows. When you click it, the cascaded start menu is displayed. | +| ![Figure 8 Workspace button](figures/kiran-8.png) | Click to display the workspaces. | +| ![Figure 9 File browser button](figures/kiran-9.png) | Click to start the file browser to view and manage files. | +| ![Figure 10 Terminal button](figures/kiran-10.png) | Click to start the terminal. | +| ![Figure 11 Web browser button](figures/kiran-11.png) | Click to start the Firefox browser. | +| ![Figure 12 Network control icon](figures/kiran-12.png) | Displays the current network status. Click to modify the network configuration. | +| ![Figure 13-Clock button](figures/kiran-13.png) | Displays the current date and time. You can customize the display style as required. | + +## 4. Control Center + +### 4.1. Start Menu Settings + +Choose **Start Menu** > **Control Center** > **Start Menu** Settings. +You can set the display mode and opacity of the start menu, as shown in the following figure: + +![Figure 14-Start Menu Settings](figures/kiran-14.png) + +The appearance start menu changes based on the opacity and display mode, as shown in the following figure: + +![Figure 15-Start menu](figures/kiran-15.png) + +### 4.2. Greeter Settings + +Choose **Start Menu** > **Control Center** > **Greeter Settings**. +In the Kiran desktop, you can set the login screen appearance by choosing **Greeter Settings** in **Control Center**, including the background image of the login screen, whether to enable automatic login, zoom ratio, whether to allow login by entering the user name, and whether to display the user list, as shown in the following figure: + +![Figure 16-Greeter Settings](figures/kiran-16.png) + +You can also set automatic login. Set the user name and delay for automatic login. After the system is restarted, the user automatically logs in without entering the password. + +![Figure 17 Autologin settings](figures/kiran-17.png) + +### 4.3 Display Settings + +Display attribute customization is required for every desktop environment. The Kiran desktop provides a powerful tool for customizing display attributes. You can choose **Start Menu** > **Control Center** > **Display Settings** to open the **Display Settings** window, as shown in the following figure: + +![Figure 18-Display Settings](figures/kiran-18.png) + +You can set the screen rotation, resolution, refresh rate, zoom rate, and flip. After the settings are complete, click **Apply**. + +### 4.4 Mouse Settings + +Configure the mouse by selecting **Kiran Cpanel Mouse** in **Control Center**. You can select left-hand or right-hand mode, adjust the mouse pointer speed, set whether to scroll naturally, and set whether to enable the middle button emulation by pressing the left and right button simultaneously. The following figure shows the normal mouse setting window: + +![Figure 19-Kiran Cpanel Mouse](figures/kiran-19.png) + +### 4.5. Account Manager + +Account Manager is an easy-to-use tool for managing users and user groups. You can use this tool to: + +1. Add users and set user attributes. +2. Modify user attributes. +3. View user attributes. +4. Delete users. + +User attributes include the user name, password, and login shell. User group attribute indicates the users in the user group. + +#### 4.5.1 Starting Account Manager + +In **Control Center**, choose **Account Manager** to start the account management tool, as shown in the following figure: + +![Figure 20 Account Manager](figures/kiran-20.png) + +In the window, you can see the user list on the left and the detailed information on the right. Currently, all users in the system except the root user are listed. Click a user on the left. The detailed information about the user is displayed, including the user ID and user type. +Click **Create new user**. On the page that is displayed on the right, enter the user name, user type, and password, and change the avatar as required. After setting the attributes, click **Confirm**. + +![Figure 21 Creating an account](figures/kiran-21.png) + +**Note**: If you have set the minimum length of a password (for example, four digits), you must enter a password of at least four digits. Otherwise, the system will not accept the password. + +Click the avatar area to change the avatar. The system has built-in avatars for you to select. You can also add your own avatar and click Confirm to save the settings. + +![Figure 22-Change avatar](figures/kiran-22.png) + +#### 4.5.2. Deleting a User + +Click the user to be deleted in the left area and click **Delete** on the toolbar on the right, as shown in the following figures: + +![Figure 23 Deleting a user](figures/kiran-23.png) +![Figure 24-Confirming the deletion](figures/kiran-24.png) + +In the displayed dialog box, click **No** to cancel the deletion, or click **Yes** to confirm the deletion. + +#### 4.5.3. Advanced Settings + +Choose **Create new user**, enter the user name and password, and then choose **Advanced Settings**. In the displayed dialog box, set the login shell, user ID, and user home directory. + +![Figure 25-Advanced Settings](figures/kiran-25.png) + +### 4.6. Appearance + +Display attribute customization is required for every desktop environment. The Kiran desktop provides a powerful tool for customizing display attributes. Appearance is a tool that provides unified configuration and management for the desktop background, theme, and font of the system. +Choose **Start Menu** > **Control Center** > **Appearance**. The **Appearance** window is displayed, as shown in the following figure: + +![Figure 26-Appearance Preferences](figures/kiran-26.png) + +#### 4.6.1. Theme + +Theme can be used to set the style of the dialog boxes, menus, system panels, and icons in a unified manner or separately according to your preference. + +1. Theme Settings + The system provides multiple themes by default. You can view the theme information in the **Theme** tab page. Click the theme in the **Theme** tab page to set the system theme, as shown in the following figure: + + ![Figure 27 Theme settings](figures/kiran-27.png) + +2. Customizing a Theme + You can click Customize... to customize a theme based on your preferences, as shown in the following figure. Customization options include controls, color, window border, icons, and pointer. + + ![Figure 28-Customize theme](figures/kiran-28.png) + +#### 4.6.2. Background + +You can set the desktop background, including the color and style. + +1. Background image settings + As shown in the following figure, click a wallpaper in the wallpaper area to set it as the desktop wallpaper. + + ![Figure 29-Background Settings](figures/kiran-29.png) + +2. Style + You can choose how the wallpaper fits the screen by choosing a style from the drop-down list. The styles include tile, zoom, center, scale, stretch, and span. + +3. Adding and removing wallpapers + You can click **Add...** to add your own wallpaper, as shown in the following figure: + + ![Figure 30-Add wallpaper](figures/kiran-30.png) + + Click **Open** to add the wallpaper. + You can also click **Remove** to remove wallpapers that you do not like. Simply select a wallpaper and click **Remove**. + +4. Desktop background color filling settings + You can set a color as the background. In the wallpaper tab page, choose **No Desktop Background** to use a color as the background. + The color filling styles include solid color, horizontal gradient, and vertical gradient. + + ![Figure 31-Background color filling](figures/kiran-31.png) + +#### 4.6.3. Font + +1. Font Settings + +You can set the fonts of the GUI of the system. The font styles include application, document, desktop, window title, and fixed width fonts. + +![Figure 32-Font settings](figures/kiran-32.png) + +1. Font rendering and details settings + +Font rendering settings: You can choose one of the following font rendering styles: monochrome, best shapes, best contrast, and subpixel smoothing. +By default, **best shapes** is used, as shown in the following figure: + +![Figure 33 Font rendering settings](figures/kiran-33.png) + +1. Font Details Settings + You can click **Details...** to set the font details. Details settings include resolution, smoothing, hinting, and subpixel order. + +![Figure 34-Font details setting](figures/kiran-34.png) + +You can choose whether to display icons in menus and on buttons. + +![Figure 35-Icon display settings](figures/kiran-35.png) + +## 5. Desktop Applications + +### 5.1. Text Editor + +To launch the text editor, click **Start Menu**> **All applications** > **Utilities**> **Pluma**. You can also start the text editor by entering **pluma** in the shell prompt. +A text editor is one of the most commonly used tools in all computer systems. Whether to you are creating a plain text file, data file, or source program, you need to use an editor. The text editor is used to view and modify plain text files. Plain text files, such as system logs and configuration files, are common text files that do not contain fonts or style formats. + +![Figure 36-Text editor](figures/kiran-36.png) + +### 5.2. Terminal + +In the desktop environment, you can use the Terminal application to enter the command line interface. To start Terminal, choose **Start Menu** > **All applications** > **Utilities** > **Terminal**, or click the icon on the desktop panel. + +![Figure 37-Terminal](figures/kiran-37.png) + +### 5.3. Firefox + +To launch Firefox, click **Start Menu** > **All applications** > **Network** > **Firefox**. +Firefox is a free and open source web browser. It uses the Gecko rendering engine and supports multiple operating systems, such as Windows, Mac OS X, and GNU/Linux. Firefox is small in size, fast in speed, and has other advanced features, such as tabbed browsing, faster loading speed, pop-up blocker, customizable toolbar, extension management, better search features, and a convenient sidebar. + +![Figure 38 Firefox](figures/kiran-38.png) + +### 5.4 Screenshot Tool + +Choose **Start Menu** > **All applications** > **Graphics** > **Screenshot tool** to start the screenshot tool. +Screenshot tool is a small and flexible screenshot software of the Kiran desktop. The operation UI is simple and easy to use. When the software is started, the icon of the screenshot tool is added to the tray. + +![Figure 39-Screenshot icon in the tray](figures/kiran-39.png) + +Click the icon to display the screenshot interface. You can select the screenshot area. You can right-click the icon and choose Open Launcher to set the capture area and delay. + +![Figure 40-Screenshot UI](figures/kiran-40.png) +![Figure 41-Launcher UI](figures/kiran-41.png) + +In the displayed dialog box, click **√** to save the file to the desktop, or choose Options and select a custom save location, as shown in the following figure: + +![Figure 42-Screenshot process](figures/kiran-42.png) + +### 5.5 Network Settings + +The Kiran desktop uses NetworkManager as the network configuration tool. NetworkManager can set, configure, and manage various network types, and provides advanced support for mobile broadband devices, Bluetooth, and IPv6 protocol. Choose Start Menu > **Control Center** > **Advanced Network Configuration**, or right-click the network icon in the lower right corner of the desktop and choose **Edit Connections...**, as shown in the following figure: + +![Figure 43-NetworkManager](figures/kiran-43.png) + +Wired connection settings: +Select the current NIC. For example, **ens33** is the NIC of the current system. Select the NIC and click the edit button. The NIC editing dialog box is displayed: + +![Figure 44 Editing an NIC](figures/kiran-44.png) + +IPv4 Settings are frequently used. In this example, DHCP is selected to obtain the IP address and DNS server. The system automatically obtains an IP address for the user. +When you need to manually enter the IP address, select **Manual** from the **Method** drop-down list, as shown in the following figure: + +![Figure 45 IPv4 settings](figures/kiran-45.png) + +Click **Add**, enter the IP address, subnet mask, gateway, and DNS server, as shown in the following figure: + +![Figure 46 Setting the network IP address and DNS](figures/kiran-46.png) + +Enter the IP address, subnet mask, gateway, and DNS, and Click **Save**. Click the network icon in the lower right corner of the desktop, choose **Disconnect** to disconnect from the network, and then reconnect to the network. + +--- + +### 5.6. Time and Date Manager + +To set the date and time, select **Time And Date Manager** in **Control Center**, or click the date area in the lower right corner of the desktop. The following window is displayed: + +![Figure 47 Time And Date Manager](figures/kiran-47.png) + +Automatic synchronization: Enable **Automatic synchronization** and connect to the Internet to automatically synchronize the date and time. +Time zone settings: Click **Change Time Zone**, select a time zone from the list on the right, and then click **Save**. + +![Figure 48 Change Time Zone](figures/kiran-48.png) + +Manually set the time: Disable **Automatic synchronization** and click **Set Time Manually** to manually set the year, month, day, and time. After the modification is complete, click **Save**. + +![Figure 49 Set Time Manually](figures/kiran-49.png) + +Modifying the date format: Click **Time date format setting** to modify the date format. You can set the long and short date display formats, time format, and whether to display seconds. + +![Figure 50 Time date format setting](figures/kiran-50.png) diff --git a/docs/en/tools/desktop/kubesphere/_toc.yaml b/docs/en/tools/desktop/kubesphere/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..028040738983610cd4450b6a4880742fef307278 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/_toc.yaml @@ -0,0 +1,6 @@ +label: KubeSphere Installation Guide +isManual: true +description: Install and use KubeSphere +sections: + - label: KubeSphere Installation Guide + href: ./kubesphere.md diff --git a/docs/en/tools/desktop/kubesphere/figures/.keep b/docs/en/tools/desktop/kubesphere/figures/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/en/tools/desktop/kubesphere/figures/1.png b/docs/en/tools/desktop/kubesphere/figures/1.png new file mode 100644 index 0000000000000000000000000000000000000000..40af4242eebb440a76c749a8d970d50cd7b89bf4 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/1.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/10.png b/docs/en/tools/desktop/kubesphere/figures/10.png new file mode 100644 index 0000000000000000000000000000000000000000..e588ffbe3d8d7b66d92ae8f2b4bcec7c80d0592c Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/10.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/11.png b/docs/en/tools/desktop/kubesphere/figures/11.png new file mode 100644 index 0000000000000000000000000000000000000000..1989a5bb08155f920363e154e68bb148715c7e9e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/11.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/12.png b/docs/en/tools/desktop/kubesphere/figures/12.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6346161182d2cfeaf3818d5ec518ddb11c732e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/12.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/1202_1.jpg b/docs/en/tools/desktop/kubesphere/figures/1202_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..def242a5b9a70602a9aab7dd8048244e7d9f6793 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/1202_1.jpg differ diff --git a/docs/en/tools/desktop/kubesphere/figures/13.png b/docs/en/tools/desktop/kubesphere/figures/13.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7def1fb66c90da62acde799eaffca97e3b5396 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/13.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/14.png b/docs/en/tools/desktop/kubesphere/figures/14.png new file mode 100644 index 0000000000000000000000000000000000000000..3a27a66d57e284775420d467f90dcc02889bbffe Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/14.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/15.png b/docs/en/tools/desktop/kubesphere/figures/15.png new file mode 100644 index 0000000000000000000000000000000000000000..370bea32abcaa8a2b06a1a61c1455d4b35f43474 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/15.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/16.png b/docs/en/tools/desktop/kubesphere/figures/16.png new file mode 100644 index 0000000000000000000000000000000000000000..812ee462669c5263ef4bffc49ca4f9b6af4541c6 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/16.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/17.png b/docs/en/tools/desktop/kubesphere/figures/17.png new file mode 100644 index 0000000000000000000000000000000000000000..36e524b806874fa3788f5e4dcd78350686281107 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/17.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/18.png b/docs/en/tools/desktop/kubesphere/figures/18.png new file mode 100644 index 0000000000000000000000000000000000000000..51b32442980aa60646f77dabd53ade74f55891fe Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/18.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/19.png b/docs/en/tools/desktop/kubesphere/figures/19.png new file mode 100644 index 0000000000000000000000000000000000000000..c9457d09aa9f1662b2c9e4550cdbdb9f57dd020e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/19.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/2.png b/docs/en/tools/desktop/kubesphere/figures/2.png new file mode 100644 index 0000000000000000000000000000000000000000..97917cc245484a43bec8562757d920a06f123121 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/2.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/20.png b/docs/en/tools/desktop/kubesphere/figures/20.png new file mode 100644 index 0000000000000000000000000000000000000000..b0943189920d7a541d35da27340593ea93f92a17 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/20.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/21.png b/docs/en/tools/desktop/kubesphere/figures/21.png new file mode 100644 index 0000000000000000000000000000000000000000..e590c22c0ea28906b5f4ea7ccbc6ab11e47ad173 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/21.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/22.png b/docs/en/tools/desktop/kubesphere/figures/22.png new file mode 100644 index 0000000000000000000000000000000000000000..03a548b1ffb1f0ad53cfa5387af2721af90bca81 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/22.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/23.png b/docs/en/tools/desktop/kubesphere/figures/23.png new file mode 100644 index 0000000000000000000000000000000000000000..834c492094715cde1c02c91752ecabfe7921ed62 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/23.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/24.png b/docs/en/tools/desktop/kubesphere/figures/24.png new file mode 100644 index 0000000000000000000000000000000000000000..1881e868b74a60888b319576fa38fb4af92ba75c Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/24.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/25.png b/docs/en/tools/desktop/kubesphere/figures/25.png new file mode 100644 index 0000000000000000000000000000000000000000..f38839725d27a3486984d152e5d9de305364fbd2 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/25.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/26.png b/docs/en/tools/desktop/kubesphere/figures/26.png new file mode 100644 index 0000000000000000000000000000000000000000..6d7957119133ecb98b1b6b104e54a3a4647ec2a5 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/26.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/27.png b/docs/en/tools/desktop/kubesphere/figures/27.png new file mode 100644 index 0000000000000000000000000000000000000000..3e4733717fdc5172d6479b393005219e65e96df4 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/27.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/28.png b/docs/en/tools/desktop/kubesphere/figures/28.png new file mode 100644 index 0000000000000000000000000000000000000000..a77772e818e3f6c11acac3b9cfa18bad14a0a48c Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/28.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/29.png b/docs/en/tools/desktop/kubesphere/figures/29.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f58ffe5855295268298448744e5aadbdc55276 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/29.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/3.png b/docs/en/tools/desktop/kubesphere/figures/3.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb76b336957020ed6867d908e0a8bdcfc953c52 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/3.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/30.png b/docs/en/tools/desktop/kubesphere/figures/30.png new file mode 100644 index 0000000000000000000000000000000000000000..d91adefba1753959e90ccf4aa1501ac08d7144bd Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/30.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/31.png b/docs/en/tools/desktop/kubesphere/figures/31.png new file mode 100644 index 0000000000000000000000000000000000000000..0abef09ab438f5f8cfb68090993f55c493b8c15e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/31.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/32.png b/docs/en/tools/desktop/kubesphere/figures/32.png new file mode 100644 index 0000000000000000000000000000000000000000..d567cfbacc07a9eb46ff2c54a68432f45e034e94 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/32.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/33.png b/docs/en/tools/desktop/kubesphere/figures/33.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5896e2884520672c0bd88d68471b45a09c56fe Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/33.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/34.png b/docs/en/tools/desktop/kubesphere/figures/34.png new file mode 100644 index 0000000000000000000000000000000000000000..81bc9480fbbd81a97c559d7a6a74274deeab2bd1 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/34.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/35.png b/docs/en/tools/desktop/kubesphere/figures/35.png new file mode 100644 index 0000000000000000000000000000000000000000..ab2399847a643a87279337704e23fea7609bb211 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/35.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/36.png b/docs/en/tools/desktop/kubesphere/figures/36.png new file mode 100644 index 0000000000000000000000000000000000000000..536981609b9ae5d32be56bec612f2b3446146184 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/36.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/37.png b/docs/en/tools/desktop/kubesphere/figures/37.png new file mode 100644 index 0000000000000000000000000000000000000000..e39aa03587642dc1f8622fff515b05a9a3085b28 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/37.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/38.png b/docs/en/tools/desktop/kubesphere/figures/38.png new file mode 100644 index 0000000000000000000000000000000000000000..838f5ff0616a83cdf42edb053f4e72b93bfa644e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/38.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/39.png b/docs/en/tools/desktop/kubesphere/figures/39.png new file mode 100644 index 0000000000000000000000000000000000000000..12a379403d73a47b2fa564120a28fdb58d188963 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/39.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/4.png b/docs/en/tools/desktop/kubesphere/figures/4.png new file mode 100644 index 0000000000000000000000000000000000000000..5078e36aca713706d2cf08a3ebecdc3769951899 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/4.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/40.png b/docs/en/tools/desktop/kubesphere/figures/40.png new file mode 100644 index 0000000000000000000000000000000000000000..bf419894eab852b45604966c62fafa71f051c4df Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/40.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/41.png b/docs/en/tools/desktop/kubesphere/figures/41.png new file mode 100644 index 0000000000000000000000000000000000000000..f94b0ee72e0d4e9277e9b44b4268cfbdb8402104 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/41.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/42.png b/docs/en/tools/desktop/kubesphere/figures/42.png new file mode 100644 index 0000000000000000000000000000000000000000..3182e551c4e4b03885bad6339f1de514b3f55f8c Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/42.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/43.jpg b/docs/en/tools/desktop/kubesphere/figures/43.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26e9244f58ea9800081fd61ae135477f05b21b40 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/43.jpg differ diff --git a/docs/en/tools/desktop/kubesphere/figures/44.png b/docs/en/tools/desktop/kubesphere/figures/44.png new file mode 100644 index 0000000000000000000000000000000000000000..c3abaecd6e053272d81e0ad9bd183c6858b4f3c5 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/44.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/45.png b/docs/en/tools/desktop/kubesphere/figures/45.png new file mode 100644 index 0000000000000000000000000000000000000000..86b051acde857c88479714414f721a7f59cca483 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/45.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/46.png b/docs/en/tools/desktop/kubesphere/figures/46.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ec41c87628bf28c9905523f99ae93aebd13614 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/46.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/47.jpg b/docs/en/tools/desktop/kubesphere/figures/47.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf95f03c8ea0f84a878bc63af20972c9da71bc04 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/47.jpg differ diff --git a/docs/en/tools/desktop/kubesphere/figures/48.png b/docs/en/tools/desktop/kubesphere/figures/48.png new file mode 100644 index 0000000000000000000000000000000000000000..ef21fa1ce1e2e9848a8dca16e692de673df7c6d7 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/48.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/49.png b/docs/en/tools/desktop/kubesphere/figures/49.png new file mode 100644 index 0000000000000000000000000000000000000000..3b77668e5a4d1bdb3043c473dff9b36fa7144714 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/49.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/5.png b/docs/en/tools/desktop/kubesphere/figures/5.png new file mode 100644 index 0000000000000000000000000000000000000000..2976a745cfaede26594d6daa01cfc18d18b1de8b Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/5.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/50.png b/docs/en/tools/desktop/kubesphere/figures/50.png new file mode 100644 index 0000000000000000000000000000000000000000..b86a55fe4363f56fc18befc9d27025a75ca427ad Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/50.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/51.png b/docs/en/tools/desktop/kubesphere/figures/51.png new file mode 100644 index 0000000000000000000000000000000000000000..d427ac871dba9c32eb4ffe736d5352f8408da533 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/51.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/52.png b/docs/en/tools/desktop/kubesphere/figures/52.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca0a2db05c70bc25f9bb59e82d074f671cfc74e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/52.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/53.png b/docs/en/tools/desktop/kubesphere/figures/53.png new file mode 100644 index 0000000000000000000000000000000000000000..76fbc34a1d5621b83c2d8c93222766acad33350d Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/53.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/54.png b/docs/en/tools/desktop/kubesphere/figures/54.png new file mode 100644 index 0000000000000000000000000000000000000000..49ecae6f8941a118223f3765c23015df074c4983 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/54.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/56.png b/docs/en/tools/desktop/kubesphere/figures/56.png new file mode 100644 index 0000000000000000000000000000000000000000..36fee795bfe593b6246c8d6c2bddea9386b06f45 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/56.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/57.png b/docs/en/tools/desktop/kubesphere/figures/57.png new file mode 100644 index 0000000000000000000000000000000000000000..539d06b77b058a933cb154c43641d498050986e0 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/57.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/58.png b/docs/en/tools/desktop/kubesphere/figures/58.png new file mode 100644 index 0000000000000000000000000000000000000000..396ca16d873e54505bcdbd41d669366eea7f5dee Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/58.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/59.png b/docs/en/tools/desktop/kubesphere/figures/59.png new file mode 100644 index 0000000000000000000000000000000000000000..9b1de98ac4fe686937ca844d3e9481548a79ce63 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/59.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/6.png b/docs/en/tools/desktop/kubesphere/figures/6.png new file mode 100644 index 0000000000000000000000000000000000000000..275c23872f2353f007371672714902babcc3db53 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/6.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/60.jpg b/docs/en/tools/desktop/kubesphere/figures/60.jpg new file mode 100644 index 0000000000000000000000000000000000000000..033c88aaadd04f7d4058ec2eb5b2c70498319bf7 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/60.jpg differ diff --git a/docs/en/tools/desktop/kubesphere/figures/61.png b/docs/en/tools/desktop/kubesphere/figures/61.png new file mode 100644 index 0000000000000000000000000000000000000000..8df17062963a3baf92318a12ec34b1378122687b Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/61.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/62.png b/docs/en/tools/desktop/kubesphere/figures/62.png new file mode 100644 index 0000000000000000000000000000000000000000..ec312d6c0c22018c1745dd866da71ce9be47fbda Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/62.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/63.jpg b/docs/en/tools/desktop/kubesphere/figures/63.jpg new file mode 100644 index 0000000000000000000000000000000000000000..504f7cf59768f6fd1cd73a115d01fbc4e15a02e1 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/63.jpg differ diff --git a/docs/en/tools/desktop/kubesphere/figures/63.png b/docs/en/tools/desktop/kubesphere/figures/63.png new file mode 100644 index 0000000000000000000000000000000000000000..86b051acde857c88479714414f721a7f59cca483 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/63.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/64.png b/docs/en/tools/desktop/kubesphere/figures/64.png new file mode 100644 index 0000000000000000000000000000000000000000..cbbd2ede047e735c3766e08b04595f08cd72f5b2 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/64.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/7.png b/docs/en/tools/desktop/kubesphere/figures/7.png new file mode 100644 index 0000000000000000000000000000000000000000..4d397959ac7f6d166ef5a3b7084bd5c3c93b475f Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/7.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/8.png b/docs/en/tools/desktop/kubesphere/figures/8.png new file mode 100644 index 0000000000000000000000000000000000000000..8ade274092d7b3e461c96d7909a9d89d3a944f09 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/8.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/9.png b/docs/en/tools/desktop/kubesphere/figures/9.png new file mode 100644 index 0000000000000000000000000000000000000000..f7b2215404929346f1a814b0b1d6d482559c08b5 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/9.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-add-resource.png b/docs/en/tools/desktop/kubesphere/figures/HA-add-resource.png new file mode 100644 index 0000000000000000000000000000000000000000..ac24895a1247828d248132f6c789ad8ef51a57e4 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-add-resource.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-apache-show.png b/docs/en/tools/desktop/kubesphere/figures/HA-apache-show.png new file mode 100644 index 0000000000000000000000000000000000000000..c216500910f75f2de1108f6b618c5c08f4df8bae Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-apache-show.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-apache-suc.png b/docs/en/tools/desktop/kubesphere/figures/HA-apache-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..23a7aaa702e3e68190ff7e01a5a673aee2c92409 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-apache-suc.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-api.png b/docs/en/tools/desktop/kubesphere/figures/HA-api.png new file mode 100644 index 0000000000000000000000000000000000000000..f825fe005705d30809d12df97958cff0e5a80135 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-api.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-clone-suc.png b/docs/en/tools/desktop/kubesphere/figures/HA-clone-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..4b6099ccc88d4f6f907a0c4563e729ab2a4dece1 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-clone-suc.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-clone.png b/docs/en/tools/desktop/kubesphere/figures/HA-clone.png new file mode 100644 index 0000000000000000000000000000000000000000..1b09ab73849494f4ffd759fa612ae3c241bd9c1d Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-clone.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-corosync.png b/docs/en/tools/desktop/kubesphere/figures/HA-corosync.png new file mode 100644 index 0000000000000000000000000000000000000000..c4d93242e65c503b6e1b6a457e2517f647984a66 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-corosync.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-firstchoice-cmd.png b/docs/en/tools/desktop/kubesphere/figures/HA-firstchoice-cmd.png new file mode 100644 index 0000000000000000000000000000000000000000..a265bab07f1d8e46d9d965975be180a8de6c9eb2 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-firstchoice-cmd.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-firstchoice.png b/docs/en/tools/desktop/kubesphere/figures/HA-firstchoice.png new file mode 100644 index 0000000000000000000000000000000000000000..bd982ddcea55c629c0257fca86051a9ffa77e7b4 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-firstchoice.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-group-new-suc.png b/docs/en/tools/desktop/kubesphere/figures/HA-group-new-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..437fd01ee83a9a1f65c12838fe56eea8435f6759 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-group-new-suc.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-group-new-suc2.png b/docs/en/tools/desktop/kubesphere/figures/HA-group-new-suc2.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb933bd761f9808de95a324a50226ff041ebd4f Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-group-new-suc2.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-group-new.png b/docs/en/tools/desktop/kubesphere/figures/HA-group-new.png new file mode 100644 index 0000000000000000000000000000000000000000..9c914d0cc2e14f3220fc4346175961f129efb37b Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-group-new.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-group-suc.png b/docs/en/tools/desktop/kubesphere/figures/HA-group-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..2338580343833ebab08627be3a2efbcdb48aef9e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-group-suc.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-group.png b/docs/en/tools/desktop/kubesphere/figures/HA-group.png new file mode 100644 index 0000000000000000000000000000000000000000..6897817665dee90c0f8c47c6a3cb4bb09db52d78 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-group.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-home-page.png b/docs/en/tools/desktop/kubesphere/figures/HA-home-page.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a7a82dc412250d4c0984b3876c6f93c6aca789 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-home-page.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-login.png b/docs/en/tools/desktop/kubesphere/figures/HA-login.png new file mode 100644 index 0000000000000000000000000000000000000000..65d0ae11ec810da7574ec72bebf6e1b020c94a0d Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-login.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-mariadb-suc.png b/docs/en/tools/desktop/kubesphere/figures/HA-mariadb-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..6f6756c945121715edc623bd9a848bc48ffeb4ca Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-mariadb-suc.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-mariadb.png b/docs/en/tools/desktop/kubesphere/figures/HA-mariadb.png new file mode 100644 index 0000000000000000000000000000000000000000..d29587c8609b9d6aefeb07170901361b5ef8402d Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-mariadb.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-nfs-suc.png b/docs/en/tools/desktop/kubesphere/figures/HA-nfs-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..c0ea6af79e91649f1ad7d97ab6c2a0069a4f4fb8 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-nfs-suc.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-nfs.png b/docs/en/tools/desktop/kubesphere/figures/HA-nfs.png new file mode 100644 index 0000000000000000000000000000000000000000..f6917938eec2e0431a9891c067475dd0b21c1bd9 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-nfs.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-pacemaker.png b/docs/en/tools/desktop/kubesphere/figures/HA-pacemaker.png new file mode 100644 index 0000000000000000000000000000000000000000..7681f963f67d2b803fef6fb2c3247384136201f8 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-pacemaker.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-pcs-status.png b/docs/en/tools/desktop/kubesphere/figures/HA-pcs-status.png new file mode 100644 index 0000000000000000000000000000000000000000..fb150fba9f6258658702b35caacf98076d1fd109 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-pcs-status.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-pcs.png b/docs/en/tools/desktop/kubesphere/figures/HA-pcs.png new file mode 100644 index 0000000000000000000000000000000000000000..283670d7c3d0961ee1cb41345c2b2a013d7143b0 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-pcs.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-refresh.png b/docs/en/tools/desktop/kubesphere/figures/HA-refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..c2678c0c2945acbabfbeae0d5de8924a216bbf31 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-refresh.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-vip-suc.png b/docs/en/tools/desktop/kubesphere/figures/HA-vip-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..313ce56e14f931c78dad4349ed57ab3fd7907f50 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-vip-suc.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/HA-vip.png b/docs/en/tools/desktop/kubesphere/figures/HA-vip.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b417df2e64527d3b29d0289756dfbb01bf66ec Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/HA-vip.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/dde-1.png b/docs/en/tools/desktop/kubesphere/figures/dde-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fb1d5177c39262ed182f10a57fdae850d007eeb1 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/dde-1.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/dde-2.png b/docs/en/tools/desktop/kubesphere/figures/dde-2.png new file mode 100644 index 0000000000000000000000000000000000000000..be5d296937bd17b9646b32c80934aa76738027af Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/dde-2.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-1.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ed57060770957f304a3fb7ca993241d56e90f541 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-1.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-10.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-10.PNG new file mode 100644 index 0000000000000000000000000000000000000000..94af842ca7d0de47db4d0030a0741d0cae634a21 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-10.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-11.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-11.PNG new file mode 100644 index 0000000000000000000000000000000000000000..022c764002542196b723eadaaaae080b3afc1d0f Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-11.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-12.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-12.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4255aa3e1629b2af94ec59ae0fe346d91da8ba61 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-12.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-13.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-13.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f6bad1c09c36bdef3ed4dd48c14e98c03a230cc7 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-13.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-14.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-14.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a661a4e759ff3107fc9bfa5f664a86f77051dfcf Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-14.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-15.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-15.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2e5a26c33b2cb432d4b7a79af8407b5b13592d09 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-15.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-16.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-16.PNG new file mode 100644 index 0000000000000000000000000000000000000000..178d5e836b69168c441676c4e77721e22f460981 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-16.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-17.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-17.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2ea9f9e1914bb90193689e3d35e48918dcc7c019 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-17.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-18.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-18.PNG new file mode 100644 index 0000000000000000000000000000000000000000..55b5c07ea89fca246600ff7ea0ff66f03427ddcb Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-18.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-19.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-19.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b9f78d01b726078d25d900e4ef9f9ffb1bdc9075 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-19.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-2.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..cf86813c71dd47584c5f4d9c0d6fec29813c9dc9 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-2.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-20.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-20.PNG new file mode 100644 index 0000000000000000000000000000000000000000..37133665e2025c5267c3bf1ea742bc7295d0cb59 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-20.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-21.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-21.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0d0bc17b2a973d6e035b3d08097e0ad6138ed786 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-21.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-22.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-22.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4967a95e8c1fcf4fa5e6a799933149365e447725 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-22.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-23.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-23.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ac39542d77bdfe64b1c3d0119870cbd5e0136d17 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-23.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-24.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-24.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e4572c436249b329643a6777ddf6a2852fcab5a6 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-24.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-25.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-25.PNG new file mode 100644 index 0000000000000000000000000000000000000000..93ac3582bd0dc5a273614e20b89ea654fe02ff9d Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-25.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-26.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-26.PNG new file mode 100644 index 0000000000000000000000000000000000000000..98f349dab192b4b6a297d4907b9156c5d6240652 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-26.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-27.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-27.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ea319f8df41e1bdbccb34e597ccdb3c6d21a3727 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-27.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-28.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-28.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b2f1db5ea27cdfada82ba9572395598df2ecf648 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-28.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-29.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-29.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fc2f6a8a2bbc56af1b657a5a25359aa15183125e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-29.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-3.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-3.PNG new file mode 100644 index 0000000000000000000000000000000000000000..3ac1eb3b0d6cd8a84b0c408f745e40db6d845ca8 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-3.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-30.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-30.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6799ad80c89443267a31c0b2d3b059cc9dd8aceb Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-30.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-31.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-31.PNG new file mode 100644 index 0000000000000000000000000000000000000000..39ebf079f7a11c28359440111b548bf2d7be5aaa Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-31.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-32.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-32.PNG new file mode 100644 index 0000000000000000000000000000000000000000..28a77475cf3a1176a0c5d01418e1833fef627cc7 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-32.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-33.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-33.PNG new file mode 100644 index 0000000000000000000000000000000000000000..cecde6d0ab299f69ad95f25ff7d3f7130da09d02 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-33.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-34.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-34.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a760c501d86debdb81a89ef3a70b694e22d0e4da Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-34.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-35.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-35.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ab46f383f1b8f2c740effff3c59ad224b9e5025b Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-35.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-36.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-36.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e248144b99bb65943446f6c9fbd6ad45c11ddd58 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-36.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-37.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-37.PNG new file mode 100644 index 0000000000000000000000000000000000000000..7181726fb3d074298e41ee59ca14c9be68884aad Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-37.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-38.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-38.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b5c02d20fbad894fa3702b6274b047ef26ea1a10 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-38.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-39.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-39.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0c85bb5f72d7625e683409c3d4605b56f74d746b Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-39.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-4.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-4.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0bce0130188f00f30c67a4a8d4904ad8419428da Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-4.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-40.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-40.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e0c5a085776933b08d94cf51ae22d52af0a68ca0 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-40.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-41.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-41.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0fc42fc339480115cc588fee59983faf4652fc80 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-41.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-42.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-42.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fa18531c9e9ec6ee9dcb9e7c5046ee41bcfa454f Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-42.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-43.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-43.PNG new file mode 100644 index 0000000000000000000000000000000000000000..aadb23eda46dc831a56935a38f9a7d0c9534db89 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-43.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-44.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-44.PNG new file mode 100644 index 0000000000000000000000000000000000000000..8747e97f510cfd64abf520e099b5abeceb056970 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-44.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-45.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-45.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a0841f2360ad016c15444ff913a4a7b437ee047e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-45.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-46.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-46.PNG new file mode 100644 index 0000000000000000000000000000000000000000..d1815b118b98b523c1c97d14a69292528248878c Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-46.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-47.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-47.PNG new file mode 100644 index 0000000000000000000000000000000000000000..73c8deaf7bf8c3fca34fec443e9b60d13910732b Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-47.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-48.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-48.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6414ceafc991a94815324d362918b06e849d952e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-48.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-49.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-49.PNG new file mode 100644 index 0000000000000000000000000000000000000000..040a7a235cc3dca8dfae6d89f1d28bb308a42391 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-49.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-5.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-5.PNG new file mode 100644 index 0000000000000000000000000000000000000000..30076d824d8dde3206ff012538e1691df3a3e5ed Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-5.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-50.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-50.PNG new file mode 100644 index 0000000000000000000000000000000000000000..05951779983fa2c198afca908f6c54cbc35f557a Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-50.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-51.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-51.PNG new file mode 100644 index 0000000000000000000000000000000000000000..995f82f57a7828926ceea5dbaaf9f79ec453c1ab Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-51.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-52.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-52.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6607be66dc61953729cf5106b4d39aa724b8bf76 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-52.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-53.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-53.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b1e851620eadab0376be79fcc12c0d8d3d943ec3 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-53.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-54.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-54.PNG new file mode 100644 index 0000000000000000000000000000000000000000..c9e773a1aec444feedfbfb3dce8ca9745ccb9f9e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-54.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-55.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-55.PNG new file mode 100644 index 0000000000000000000000000000000000000000..bd935df19ada2bbbf6f9f4b58d020f73fbdbbed0 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-55.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-56.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-56.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4475f73a68296d19cf0010b1f848aa3cbcd82858 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-56.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-57.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-57.PNG new file mode 100644 index 0000000000000000000000000000000000000000..24073cd56613e3fce7f3a7e0f057a12d8d8f3077 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-57.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-58.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-58.PNG new file mode 100644 index 0000000000000000000000000000000000000000..19112ae3f1f4ee9e0d7b2191ddec2d14ad171d67 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-58.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-59.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-59.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4c4225e9208ad3d38e1ec9e846d6b7c5e89e3991 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-59.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-6.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-6.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fa53206b21811a75382f6aee788c1cd8a20d9ba7 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-6.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-7.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-7.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fe38b39118bb79bef4412ed0f08c472ad145980e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-7.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-8.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-8.PNG new file mode 100644 index 0000000000000000000000000000000000000000..769939c5583d02d014ded8065eaa7ac6aeb81cd4 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-8.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/gnome-9.PNG b/docs/en/tools/desktop/kubesphere/figures/gnome-9.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b699942966fe2fe444e86231638f917f524328d9 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/gnome-9.PNG differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon-caution.gif b/docs/en/tools/desktop/kubesphere/figures/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon-caution.gif differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon-danger.gif b/docs/en/tools/desktop/kubesphere/figures/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon-danger.gif differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon-note.gif b/docs/en/tools/desktop/kubesphere/figures/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon-note.gif differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon-notice.gif b/docs/en/tools/desktop/kubesphere/figures/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon-notice.gif differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon-tip.gif b/docs/en/tools/desktop/kubesphere/figures/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon-tip.gif differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon-warning.gif b/docs/en/tools/desktop/kubesphere/figures/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon-warning.gif differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon1.png b/docs/en/tools/desktop/kubesphere/figures/icon1.png new file mode 100644 index 0000000000000000000000000000000000000000..9bac00355cf4aa57d32287fd4271404f6fd3fd4d Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon1.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon10-o.png b/docs/en/tools/desktop/kubesphere/figures/icon10-o.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c56d1a64c588d86f8fe510c74e5a7c4cb810d4 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon10-o.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon101-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon101-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..af1c5d3dc0277a6ea59e71efb6ca97bdfc782e8e --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon101-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon103-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon103-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..c06c885725c569ab8db1fe7d595a7c65f18c5142 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon103-o.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon105-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon105-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..36c49949fa569330b761c2d65518f36c10435508 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon105-o.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon107-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon107-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..fb5a3ea756f6ccb7b3e5c31122a433347a908c96 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon107-o.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon11-o.png b/docs/en/tools/desktop/kubesphere/figures/icon11-o.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1f2cb7f99b583768c7cbd7e05a57f302dbe8a Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon11-o.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon110-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon110-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..7958e3f192061592e002e1e8a1bad06ffa86742c --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon110-o.svg @@ -0,0 +1,12 @@ + + + + reboot_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/icon111-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon111-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..097d16a08d305a8b3f3b2268ab1ea8342e799377 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon111-o.svg @@ -0,0 +1,13 @@ + + + + Right + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/icon112-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon112-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e51628c2b8b10495f3410d219814286696ea2fd5 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon112-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon116-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon116-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..4d79cd6dbbbfd3969f4e0ad0ad88e27398853505 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon116-o.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon12-o.png b/docs/en/tools/desktop/kubesphere/figures/icon12-o.png new file mode 100644 index 0000000000000000000000000000000000000000..f1f0f59dd3879461a0b5bc0632693a4a4124def3 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon12-o.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon120-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon120-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e895c347d16a200aea46b00428b0b9f1a3c94246 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon120-o.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon122-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon122-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..7fb014b5fd6097ca37a84d0b6a27dc982d675c8a --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon122-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon124-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon124-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..960c0ec096c925213f8953398f0e8e5db3cdaed3 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon124-o.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon125-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon125-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..011c05f4b8f296867cd408a339230323fcbb28dd --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon125-o.svg @@ -0,0 +1,9 @@ + + + tips + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/icon126-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon126-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e0a43b6b8beb434090ac0dd3a8fd68c023f11fce --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon126-o.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon127-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon127-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..bed95d35334a8d0151211054236c0bacddcc0dd3 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon127-o.svg @@ -0,0 +1,13 @@ + + + + Up + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/icon128-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon128-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..aa727f3f5d5883b3fb83a79c4b98e8b5bfe4ade6 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon128-o.svg @@ -0,0 +1,12 @@ + + + + userswitch_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/icon13-o.png b/docs/en/tools/desktop/kubesphere/figures/icon13-o.png new file mode 100644 index 0000000000000000000000000000000000000000..c05a981b29d8ad11c6682f796f79b4cafd0f088b Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon13-o.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon132-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon132-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..588ba9d98864ba67a562fa9179f29405f7687aa0 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon132-o.svg @@ -0,0 +1,15 @@ + + + + - + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/icon133-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon133-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..886d90a83e33497d134bdb3dcc864a5c2df53f20 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon133-o.svg @@ -0,0 +1,13 @@ + + + + + + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/icon134-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon134-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..784cf383eb0e8f5c7a57a602047be50ad0a3bc05 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon134-o.svg @@ -0,0 +1,15 @@ + + + + = + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/icon135-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon135-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..cea628a8f5eb92d10661b690242b6de41ca64816 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon135-o.svg @@ -0,0 +1,15 @@ + + + + ~ + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/icon136-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon136-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..24aa139ab2fefaee20935551f1af5aef473719ed --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon136-o.svg @@ -0,0 +1,12 @@ + + + + poweroff_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/icon14-o.png b/docs/en/tools/desktop/kubesphere/figures/icon14-o.png new file mode 100644 index 0000000000000000000000000000000000000000..b21deee4d98593d93fb5f72158d2d78f3d3f1cb9 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon14-o.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon15-o.png b/docs/en/tools/desktop/kubesphere/figures/icon15-o.png new file mode 100644 index 0000000000000000000000000000000000000000..1827a20e9da4d28e35e8ab2eae739b2fec37b385 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon15-o.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon16.png b/docs/en/tools/desktop/kubesphere/figures/icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..f271594dda9d3ad0f038c9d719dd68c3e82c59f1 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon16.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon17.png b/docs/en/tools/desktop/kubesphere/figures/icon17.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe58b89347c857920bce25f067fbd11c308e502 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon17.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon18.png b/docs/en/tools/desktop/kubesphere/figures/icon18.png new file mode 100644 index 0000000000000000000000000000000000000000..1827a20e9da4d28e35e8ab2eae739b2fec37b385 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon18.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon19-o.png b/docs/en/tools/desktop/kubesphere/figures/icon19-o.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1f2cb7f99b583768c7cbd7e05a57f302dbe8a Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon19-o.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon2.png b/docs/en/tools/desktop/kubesphere/figures/icon2.png new file mode 100644 index 0000000000000000000000000000000000000000..9101e4b386df065a87d422bc5a0b287528ea5ec7 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon2.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon20.png b/docs/en/tools/desktop/kubesphere/figures/icon20.png new file mode 100644 index 0000000000000000000000000000000000000000..4de3c7c695893539967245ea5e269b26e2b735be Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon20.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon21.png b/docs/en/tools/desktop/kubesphere/figures/icon21.png new file mode 100644 index 0000000000000000000000000000000000000000..e7b4320b6ce1fd4adb52525ba2c60983ffb2eed3 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon21.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon22.png b/docs/en/tools/desktop/kubesphere/figures/icon22.png new file mode 100644 index 0000000000000000000000000000000000000000..43bfa96965ad13e0a34ead3cb1102a76b9346a23 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon22.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon23.png b/docs/en/tools/desktop/kubesphere/figures/icon23.png new file mode 100644 index 0000000000000000000000000000000000000000..aee221ddaa81d06fa7bd5b89a624da90cd1e53da Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon23.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon24.png b/docs/en/tools/desktop/kubesphere/figures/icon24.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e5d700431ca1666fe9eda2cefce5dd2f83bdcd Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon24.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon25.png b/docs/en/tools/desktop/kubesphere/figures/icon25.png new file mode 100644 index 0000000000000000000000000000000000000000..3de0f9476bbee9e89c3b759afbed968f17b5bbcc Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon25.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon26-o.png b/docs/en/tools/desktop/kubesphere/figures/icon26-o.png new file mode 100644 index 0000000000000000000000000000000000000000..2293a893caf6d89c3beb978598fe7f281e68e7d5 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon26-o.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon27-o.png b/docs/en/tools/desktop/kubesphere/figures/icon27-o.png new file mode 100644 index 0000000000000000000000000000000000000000..abbab8e40f7e3ca7c2a6f28ff78f08f15117828e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon27-o.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon28-o.png b/docs/en/tools/desktop/kubesphere/figures/icon28-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon28-o.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon29-o.png b/docs/en/tools/desktop/kubesphere/figures/icon29-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon29-o.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon3.png b/docs/en/tools/desktop/kubesphere/figures/icon3.png new file mode 100644 index 0000000000000000000000000000000000000000..930ee8909e89e3624c581f83d713af271cd96c75 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon3.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon30-o.png b/docs/en/tools/desktop/kubesphere/figures/icon30-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon30-o.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon31-o.png b/docs/en/tools/desktop/kubesphere/figures/icon31-o.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon31-o.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon32.png b/docs/en/tools/desktop/kubesphere/figures/icon32.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon32.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon33.png b/docs/en/tools/desktop/kubesphere/figures/icon33.png new file mode 100644 index 0000000000000000000000000000000000000000..88ed145b25f6f025ad795ceb012500e0944cb54c Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon33.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon34.png b/docs/en/tools/desktop/kubesphere/figures/icon34.png new file mode 100644 index 0000000000000000000000000000000000000000..8247f52a3424c81b451ceb318f4a7979a5eddece Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon34.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon35.png b/docs/en/tools/desktop/kubesphere/figures/icon35.png new file mode 100644 index 0000000000000000000000000000000000000000..7c656e9030b94809a57c7e369921e6a585f3574c Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon35.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon36.png b/docs/en/tools/desktop/kubesphere/figures/icon36.png new file mode 100644 index 0000000000000000000000000000000000000000..7d29d173e914dfff48245d3d3a4d42575ce2d1db Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon36.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon37.png b/docs/en/tools/desktop/kubesphere/figures/icon37.png new file mode 100644 index 0000000000000000000000000000000000000000..58be4c621b6638115153e361801deb9ee06634d8 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon37.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon38.png b/docs/en/tools/desktop/kubesphere/figures/icon38.png new file mode 100644 index 0000000000000000000000000000000000000000..0c861ccb891f4fb5e533eb7f7151a8fce1571f17 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon38.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon39.png b/docs/en/tools/desktop/kubesphere/figures/icon39.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ba1f347452d0cd1c06c6c51d2cdf5aea5e490b Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon39.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon4.png b/docs/en/tools/desktop/kubesphere/figures/icon4.png new file mode 100644 index 0000000000000000000000000000000000000000..548dc8b648edb73ff1dd8a0266e8479203e72ca0 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon4.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon40.png b/docs/en/tools/desktop/kubesphere/figures/icon40.png new file mode 100644 index 0000000000000000000000000000000000000000..9c29dd1e9a1bf22c36abf51cb18fa9e47b455fab Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon40.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon41.png b/docs/en/tools/desktop/kubesphere/figures/icon41.png new file mode 100644 index 0000000000000000000000000000000000000000..9e8aea527a2119433fffec5a8800ebfa4fa5062f Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon41.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon42-o.png b/docs/en/tools/desktop/kubesphere/figures/icon42-o.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon42-o.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon42.png b/docs/en/tools/desktop/kubesphere/figures/icon42.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon42.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon43-o.png b/docs/en/tools/desktop/kubesphere/figures/icon43-o.png new file mode 100644 index 0000000000000000000000000000000000000000..284bdd551baf25beb4143013402e77a1a4c60ccb Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon43-o.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon44-o.png b/docs/en/tools/desktop/kubesphere/figures/icon44-o.png new file mode 100644 index 0000000000000000000000000000000000000000..810f4d784ee140dbf562e67a0d3fd391272626a5 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon44-o.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon45-o.png b/docs/en/tools/desktop/kubesphere/figures/icon45-o.png new file mode 100644 index 0000000000000000000000000000000000000000..3e528ce2c98284f020ae4912a853f5864526396b Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon45-o.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon46-o.png b/docs/en/tools/desktop/kubesphere/figures/icon46-o.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6a3ca0fe57016f3685981ed518493ceea1c855 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon46-o.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon47-o.png b/docs/en/tools/desktop/kubesphere/figures/icon47-o.png new file mode 100644 index 0000000000000000000000000000000000000000..6eeaba98d908775bd363a8ffcec27c3b6a214013 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon47-o.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon49-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon49-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..f2d76acd147ccaf5e493a7c035bb90640af7817c --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon49-o.svg @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon5.png b/docs/en/tools/desktop/kubesphere/figures/icon5.png new file mode 100644 index 0000000000000000000000000000000000000000..e4206b7b584bf0702c7cb2f03a3a41e20bfba844 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon5.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon50-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon50-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..05026802be4718205065d6369e14cc0b6ef05bc7 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon50-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon52-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon52-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..23149c05873259cd39721b8ee9c3ab7db86d64c5 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon52-o.svg @@ -0,0 +1,9 @@ + + + attention + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/icon53-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon53-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..50e33489ce984b0acfd621da4a8ef837fdf048c1 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon53-o.svg @@ -0,0 +1,11 @@ + + + + previous + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/icon54-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon54-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..3b599aef4b822c707d2f646405bb00837aed96fd --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon54-o.svg @@ -0,0 +1,18 @@ + + + + Backspace + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/icon56-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon56-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9f13b6861e3858deec8d57a5301c934acc247069 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon56-o.svg @@ -0,0 +1,19 @@ + + + + Slice 1 + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/icon57-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon57-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e6fbfa1381b76ab3fcd45652b33267a7f6c69bb7 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon57-o.svg @@ -0,0 +1,11 @@ + + + + titlebutton/close_normal + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/icon58-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon58-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9746dcacfc8e5d4c4b63233801e37418a190fc8f --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon58-o.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon6.png b/docs/en/tools/desktop/kubesphere/figures/icon6.png new file mode 100644 index 0000000000000000000000000000000000000000..88ced3587e9a42b145fe11393726f40aba9d1b2c Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon6.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon62-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon62-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..09f61b446669df2e05a3351d40d8c30879c7b035 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon62-o.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon63-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon63-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..06c03ed99260ffadc681475dad35610aedf67f83 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon63-o.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon66-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon66-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..5793b3846b7fe6a5758379591215b16c7f9e1b52 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon66-o.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon68-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon68-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..a7748052dfa436116d8742dca28f7d90865231ed --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon68-o.svg @@ -0,0 +1,23 @@ + + + + deepin-system-monitor + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/icon69-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon69-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e21dfd00a32a44ee1c8e3882b4ca8239be04690f --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon69-o.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon7.png b/docs/en/tools/desktop/kubesphere/figures/icon7.png new file mode 100644 index 0000000000000000000000000000000000000000..05fe8aa38c84ca0c0c99b0b005ddec2f2ba42f4a Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon7.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon70-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon70-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..b5787a7ffa5ed9519a48c6937c60927fd11fd455 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon70-o.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon71-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon71-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..669a21f143b06cb45ea3f45f7f071809f2cbc8a8 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon71-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon72-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon72-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..79067ed9b9ff7912e1742183b461fa056601b9cc --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon72-o.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon73-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon73-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..cf6292387f5e790db6ebd66184aabcbb39257ee7 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon73-o.svg @@ -0,0 +1,13 @@ + + + + Down + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/icon75-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon75-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..ef6823ccc19858f57374f0b78ad31514e8311be3 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon75-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon8.png b/docs/en/tools/desktop/kubesphere/figures/icon8.png new file mode 100644 index 0000000000000000000000000000000000000000..01543c3e0f5e96a023b4e1f0859a03e3a0dafd56 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon8.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon83-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon83-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..35dd6eacc54a933dc9ebc3f3010edfa7363fecc0 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon83-o.svg @@ -0,0 +1,84 @@ + + + + + + image/svg+xml + + img_upload + + + + + + img_upload + Created with Sketch. + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon84-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon84-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9bd11b9e7b45b506dd7e1c87d09d545d8f48af06 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon84-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon86-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon86-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..5da20233309c43d4fc7b315f441cde476c835c67 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon86-o.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon88-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon88-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..c2570c26575fd14cb5e9d9fe77831d2e8f6c9333 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon88-o.svg @@ -0,0 +1,13 @@ + + + + Left + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/icon9.png b/docs/en/tools/desktop/kubesphere/figures/icon9.png new file mode 100644 index 0000000000000000000000000000000000000000..a07c9ab8e51decd9a3bca8c969d2ae95bd68512c Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/icon9.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/icon90-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon90-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..79b5e0a141f7969a8f77ae61f4c240de7187afe9 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon90-o.svg @@ -0,0 +1,12 @@ + + + + lock_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/icon92-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon92-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..21341b64a832e1935252aa82e7a4e0b083c16eae --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon92-o.svg @@ -0,0 +1,12 @@ + + + + logout_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/icon94-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon94-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..a47044149a02101dbd24a3fdb2f3ead77efca6c1 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon94-o.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon97-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon97-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..4f4670de29d8c86885b5aa806b2c8cdc6fc16dcb --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon97-o.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/kubesphere/figures/icon99-o.svg b/docs/en/tools/desktop/kubesphere/figures/icon99-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e9a3aa60a51404c9390bfbea8d8ff09edc0e2e32 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/figures/icon99-o.svg @@ -0,0 +1,11 @@ + + + notes + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-1.png b/docs/en/tools/desktop/kubesphere/figures/kiran-1.png new file mode 100644 index 0000000000000000000000000000000000000000..59b632062ba3ff6e26c550567e858eb4dfdfc780 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-1.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-10.png b/docs/en/tools/desktop/kubesphere/figures/kiran-10.png new file mode 100644 index 0000000000000000000000000000000000000000..18cfa3074af1f4b8d49d064a77b016f24ab8c17c Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-10.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-11.png b/docs/en/tools/desktop/kubesphere/figures/kiran-11.png new file mode 100644 index 0000000000000000000000000000000000000000..b58fbb7ce8a798d5355855a4ac0638540df74d9e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-11.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-12.png b/docs/en/tools/desktop/kubesphere/figures/kiran-12.png new file mode 100644 index 0000000000000000000000000000000000000000..920d0c7112be6bed509773413de36506d748b822 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-12.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-13.png b/docs/en/tools/desktop/kubesphere/figures/kiran-13.png new file mode 100644 index 0000000000000000000000000000000000000000..f6632732bd2e8a10d0cda2bd0550f43741a7ba97 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-13.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-14.png b/docs/en/tools/desktop/kubesphere/figures/kiran-14.png new file mode 100644 index 0000000000000000000000000000000000000000..52eae7cc40fe4f7c6b2a8fe9744209a1fcbc30d8 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-14.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-15.png b/docs/en/tools/desktop/kubesphere/figures/kiran-15.png new file mode 100644 index 0000000000000000000000000000000000000000..5496c56ca72983780b9785d2d15c4008fb73aeef Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-15.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-16.png b/docs/en/tools/desktop/kubesphere/figures/kiran-16.png new file mode 100644 index 0000000000000000000000000000000000000000..6125b257245aa89f9b6592ed5b14a95d5699076e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-16.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-17.png b/docs/en/tools/desktop/kubesphere/figures/kiran-17.png new file mode 100644 index 0000000000000000000000000000000000000000..d8a4cb88017efe9f41f78ffc2f9de06dedcc1b23 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-17.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-18.png b/docs/en/tools/desktop/kubesphere/figures/kiran-18.png new file mode 100644 index 0000000000000000000000000000000000000000..0cb0c50d15597998fbd4cf3db2d1d0f9ec3c920e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-18.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-19.png b/docs/en/tools/desktop/kubesphere/figures/kiran-19.png new file mode 100644 index 0000000000000000000000000000000000000000..58ef2d33a52cf6404ea03b6a2d37f8d8b8391539 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-19.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-2.png b/docs/en/tools/desktop/kubesphere/figures/kiran-2.png new file mode 100644 index 0000000000000000000000000000000000000000..088bf53c1e763924e7cee46d0cdac98ad0a9d5e2 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-2.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-20.png b/docs/en/tools/desktop/kubesphere/figures/kiran-20.png new file mode 100644 index 0000000000000000000000000000000000000000..e8608485553033eb2ae141162e4300fa48c578cd Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-20.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-21.png b/docs/en/tools/desktop/kubesphere/figures/kiran-21.png new file mode 100644 index 0000000000000000000000000000000000000000..4d4c0ff304bdfbc8e715d2e756315a005c008336 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-21.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-22.png b/docs/en/tools/desktop/kubesphere/figures/kiran-22.png new file mode 100644 index 0000000000000000000000000000000000000000..6778d5a40a82e699da9531f4727a196d1442b9ae Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-22.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-23.png b/docs/en/tools/desktop/kubesphere/figures/kiran-23.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1d5e284eb299a771c5abbfdff611270ddf2449 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-23.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-24.png b/docs/en/tools/desktop/kubesphere/figures/kiran-24.png new file mode 100644 index 0000000000000000000000000000000000000000..a3ed57f9e9c300a65f867d29a44f287405a0509c Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-24.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-25.png b/docs/en/tools/desktop/kubesphere/figures/kiran-25.png new file mode 100644 index 0000000000000000000000000000000000000000..694e6173dfbf1fda8d07670a8e3daf4fbeb263ac Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-25.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-26.png b/docs/en/tools/desktop/kubesphere/figures/kiran-26.png new file mode 100644 index 0000000000000000000000000000000000000000..3b6ae2eeff3aae39107f15b60c5bb14ffc787cd8 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-26.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-27.png b/docs/en/tools/desktop/kubesphere/figures/kiran-27.png new file mode 100644 index 0000000000000000000000000000000000000000..3b6ae2eeff3aae39107f15b60c5bb14ffc787cd8 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-27.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-28.png b/docs/en/tools/desktop/kubesphere/figures/kiran-28.png new file mode 100644 index 0000000000000000000000000000000000000000..01ff3a8f47248d96c714e78b80fd81cd1ed16e0f Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-28.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-29.png b/docs/en/tools/desktop/kubesphere/figures/kiran-29.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ad5b4438eae441f6086ce5e1aae2e6755aa12a Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-29.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-3.png b/docs/en/tools/desktop/kubesphere/figures/kiran-3.png new file mode 100644 index 0000000000000000000000000000000000000000..e1399424c52eee8804f9433c9e9bf203950008c6 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-3.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-30.png b/docs/en/tools/desktop/kubesphere/figures/kiran-30.png new file mode 100644 index 0000000000000000000000000000000000000000..c1efc1e3931a129affd5dfcea9e319556e492f04 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-30.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-31.png b/docs/en/tools/desktop/kubesphere/figures/kiran-31.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ad5b4438eae441f6086ce5e1aae2e6755aa12a Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-31.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-32.png b/docs/en/tools/desktop/kubesphere/figures/kiran-32.png new file mode 100644 index 0000000000000000000000000000000000000000..fd900ec891b09313a7c558c61213b1816b803034 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-32.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-33.png b/docs/en/tools/desktop/kubesphere/figures/kiran-33.png new file mode 100644 index 0000000000000000000000000000000000000000..64ba70b08ed63c6e0942478d61e36a8c443f0604 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-33.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-34.png b/docs/en/tools/desktop/kubesphere/figures/kiran-34.png new file mode 100644 index 0000000000000000000000000000000000000000..4b869e7d172e2f2889d487157b92204a28a8dc4e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-34.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-35.png b/docs/en/tools/desktop/kubesphere/figures/kiran-35.png new file mode 100644 index 0000000000000000000000000000000000000000..9b383f3c84964b4fc34c4d8e75400325f93908bc Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-35.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-36.png b/docs/en/tools/desktop/kubesphere/figures/kiran-36.png new file mode 100644 index 0000000000000000000000000000000000000000..0b16632852c5024e2c6ec4fbd49513e3b7a2b146 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-36.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-37.png b/docs/en/tools/desktop/kubesphere/figures/kiran-37.png new file mode 100644 index 0000000000000000000000000000000000000000..2be3cc3b2528260c579b59f529e7a5663f1cc779 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-37.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-38.png b/docs/en/tools/desktop/kubesphere/figures/kiran-38.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1ffaf3aa920f922357f6d48700f42974600d77 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-38.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-39.png b/docs/en/tools/desktop/kubesphere/figures/kiran-39.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0e5add782b6c9cf4a8b9f6473c96641c39bd1d Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-39.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-4.png b/docs/en/tools/desktop/kubesphere/figures/kiran-4.png new file mode 100644 index 0000000000000000000000000000000000000000..bd318280b403912ab4846b694592d580b9e5d242 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-4.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-40.png b/docs/en/tools/desktop/kubesphere/figures/kiran-40.png new file mode 100644 index 0000000000000000000000000000000000000000..083031058ff47dc1550881d3a9f189861d3e8563 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-40.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-41.png b/docs/en/tools/desktop/kubesphere/figures/kiran-41.png new file mode 100644 index 0000000000000000000000000000000000000000..582893929e2c10a96c49696411bbed3ea9fd7c55 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-41.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-42.png b/docs/en/tools/desktop/kubesphere/figures/kiran-42.png new file mode 100644 index 0000000000000000000000000000000000000000..eede1243506ccd309ee707465f56c31581dd8554 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-42.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-43.0.png b/docs/en/tools/desktop/kubesphere/figures/kiran-43.0.png new file mode 100644 index 0000000000000000000000000000000000000000..caacc027322d4b7480e6508d4a1b4a13eefcf788 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-43.0.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-43.png b/docs/en/tools/desktop/kubesphere/figures/kiran-43.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea9f45ed8f327fce426352c4ae7fbf06cbefc84 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-43.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-44.png b/docs/en/tools/desktop/kubesphere/figures/kiran-44.png new file mode 100644 index 0000000000000000000000000000000000000000..c86a100005f89dbb9b24055e42d716205d47399e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-44.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-45.png b/docs/en/tools/desktop/kubesphere/figures/kiran-45.png new file mode 100644 index 0000000000000000000000000000000000000000..c5b5d75f972e594587f3393c8d384dcd76e7477e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-45.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-46.png b/docs/en/tools/desktop/kubesphere/figures/kiran-46.png new file mode 100644 index 0000000000000000000000000000000000000000..e9a28632c62de95d8ea2d436ba9bc705ff980991 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-46.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-47.png b/docs/en/tools/desktop/kubesphere/figures/kiran-47.png new file mode 100644 index 0000000000000000000000000000000000000000..a3606e3c899f944eb84d206d98cedc3377197c97 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-47.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-48.png b/docs/en/tools/desktop/kubesphere/figures/kiran-48.png new file mode 100644 index 0000000000000000000000000000000000000000..b69202c9a83bfc2c835ab166ef0fc2455bb4bcd3 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-48.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-49.png b/docs/en/tools/desktop/kubesphere/figures/kiran-49.png new file mode 100644 index 0000000000000000000000000000000000000000..d739e6107fd80ecd741dacaaf9dfb868afc61e37 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-49.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-5.png b/docs/en/tools/desktop/kubesphere/figures/kiran-5.png new file mode 100644 index 0000000000000000000000000000000000000000..154dd54d43b5b98682eb798518046e72fc7e3f83 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-5.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-50.png b/docs/en/tools/desktop/kubesphere/figures/kiran-50.png new file mode 100644 index 0000000000000000000000000000000000000000..96957676afc9f66bcc4b63c5e39eb8890f108015 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-50.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-6.png b/docs/en/tools/desktop/kubesphere/figures/kiran-6.png new file mode 100644 index 0000000000000000000000000000000000000000..927b475d6687d60f04fed8a535b2225a8f4b23f7 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-6.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-7.png b/docs/en/tools/desktop/kubesphere/figures/kiran-7.png new file mode 100644 index 0000000000000000000000000000000000000000..254ef11f36d958f6ef7c70853e5f61032f825463 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-7.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-8.png b/docs/en/tools/desktop/kubesphere/figures/kiran-8.png new file mode 100644 index 0000000000000000000000000000000000000000..29b5845d2fa94cba92719b8649a5e86c926ea911 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-8.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kiran-9.png b/docs/en/tools/desktop/kubesphere/figures/kiran-9.png new file mode 100644 index 0000000000000000000000000000000000000000..46bcfdd0e1e88ad0f0ade4a3990c3ac5d66060e7 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kiran-9.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/kubesphere.png b/docs/en/tools/desktop/kubesphere/figures/kubesphere.png new file mode 100644 index 0000000000000000000000000000000000000000..939dcb70202b19c7853cbfd8f27f6e8e4678ce26 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/kubesphere.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-1.png b/docs/en/tools/desktop/kubesphere/figures/xfce-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c04222d7757b84aa8afecf98815eee25211a86d7 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-1.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-2.png b/docs/en/tools/desktop/kubesphere/figures/xfce-2.png new file mode 100644 index 0000000000000000000000000000000000000000..fa7e1a1ae3c1535a1528f03636d2b62d727412af Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-2.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-3.png b/docs/en/tools/desktop/kubesphere/figures/xfce-3.png new file mode 100644 index 0000000000000000000000000000000000000000..6eeb68ad39f45ff476f1d18b8cd34492ec1f542b Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-3.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-4.png b/docs/en/tools/desktop/kubesphere/figures/xfce-4.png new file mode 100644 index 0000000000000000000000000000000000000000..f66de500fad7c847c2fea2e3774413d1c38e642e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-4.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-5.png b/docs/en/tools/desktop/kubesphere/figures/xfce-5.png new file mode 100644 index 0000000000000000000000000000000000000000..0258b0e5cf6c7c13d88b0431f4b0221e86451ce8 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-5.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-6.png b/docs/en/tools/desktop/kubesphere/figures/xfce-6.png new file mode 100644 index 0000000000000000000000000000000000000000..f2027b37021b260a97ff56a32026a53d00db0763 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-6.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-7.png b/docs/en/tools/desktop/kubesphere/figures/xfce-7.png new file mode 100644 index 0000000000000000000000000000000000000000..b7a94df356b7b9f7dca3d305d066ec854406aaab Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-7.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-71.png b/docs/en/tools/desktop/kubesphere/figures/xfce-71.png new file mode 100644 index 0000000000000000000000000000000000000000..6e2ff40536d18253dcfd4a69396e8e96817f704a Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-71.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-8.png b/docs/en/tools/desktop/kubesphere/figures/xfce-8.png new file mode 100644 index 0000000000000000000000000000000000000000..4ae9885b617e49cba84140e84dd6b354ff55f92c Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-8.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-81.png b/docs/en/tools/desktop/kubesphere/figures/xfce-81.png new file mode 100644 index 0000000000000000000000000000000000000000..b97c9a81c2a07efe361e6dc6ee8bed5db445ecfa Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-81.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-811.png b/docs/en/tools/desktop/kubesphere/figures/xfce-811.png new file mode 100644 index 0000000000000000000000000000000000000000..21447e37a5dd94fc88cb3ec0a11cd0dc0d50cf36 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-811.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-812.png b/docs/en/tools/desktop/kubesphere/figures/xfce-812.png new file mode 100644 index 0000000000000000000000000000000000000000..d505f1ac8111062a172b9fb5f5717d72f653f1b8 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-812.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-813.png b/docs/en/tools/desktop/kubesphere/figures/xfce-813.png new file mode 100644 index 0000000000000000000000000000000000000000..218d3b80c83cade14acc0c0baa4532710d1959dd Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-813.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-814.png b/docs/en/tools/desktop/kubesphere/figures/xfce-814.png new file mode 100644 index 0000000000000000000000000000000000000000..6ccbe910bd32cb4d619ba47d2fcb354424e80451 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-814.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-82.png b/docs/en/tools/desktop/kubesphere/figures/xfce-82.png new file mode 100644 index 0000000000000000000000000000000000000000..170deb5fb43f4e924d5ba4eba94a02c341d31515 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-82.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-821.png b/docs/en/tools/desktop/kubesphere/figures/xfce-821.png new file mode 100644 index 0000000000000000000000000000000000000000..690f3f0b528dfdaf6586549cdeb105df2214fc44 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-821.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-83.png b/docs/en/tools/desktop/kubesphere/figures/xfce-83.png new file mode 100644 index 0000000000000000000000000000000000000000..95e4844c0ece09819d3e9f1e8457bbf371b1282e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-83.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-831.png b/docs/en/tools/desktop/kubesphere/figures/xfce-831.png new file mode 100644 index 0000000000000000000000000000000000000000..61da16b7871a085a6c373a1262c0f785fb415e60 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-831.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-832.png b/docs/en/tools/desktop/kubesphere/figures/xfce-832.png new file mode 100644 index 0000000000000000000000000000000000000000..87b59b42d86ebd205750e162d5f2751b4d87181e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-832.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-84.png b/docs/en/tools/desktop/kubesphere/figures/xfce-84.png new file mode 100644 index 0000000000000000000000000000000000000000..1afe9d9bd51af83c99793666bad47d231bba5c7b Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-84.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-841.png b/docs/en/tools/desktop/kubesphere/figures/xfce-841.png new file mode 100644 index 0000000000000000000000000000000000000000..35875b40b8c95ce32652003daa5caf065747725f Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-841.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-842.png b/docs/en/tools/desktop/kubesphere/figures/xfce-842.png new file mode 100644 index 0000000000000000000000000000000000000000..b4031b575ffc3e9aa5a8edc7826fe28af97d0f23 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-842.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-85.png b/docs/en/tools/desktop/kubesphere/figures/xfce-85.png new file mode 100644 index 0000000000000000000000000000000000000000..bce9a0165290167d5fceee22d74f2abf4aed28fd Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-85.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-851.png b/docs/en/tools/desktop/kubesphere/figures/xfce-851.png new file mode 100644 index 0000000000000000000000000000000000000000..15c9e2d6d04e9b712bdf88d0ee1e7246a8d7b83e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-851.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-86.png b/docs/en/tools/desktop/kubesphere/figures/xfce-86.png new file mode 100644 index 0000000000000000000000000000000000000000..d78bc4ae0dbf13c3ad40b29468bd44056817e522 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-86.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-861.png b/docs/en/tools/desktop/kubesphere/figures/xfce-861.png new file mode 100644 index 0000000000000000000000000000000000000000..9a58733007cfac1c42ff244b52ee14c75051d852 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-861.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-87.png b/docs/en/tools/desktop/kubesphere/figures/xfce-87.png new file mode 100644 index 0000000000000000000000000000000000000000..ee5844bcfa836ec8ecf0a5fea125dcab530ad6db Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-87.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-9.png b/docs/en/tools/desktop/kubesphere/figures/xfce-9.png new file mode 100644 index 0000000000000000000000000000000000000000..5586c4f62cc161665b91a56ad23b2320901901c0 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-9.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-91.png b/docs/en/tools/desktop/kubesphere/figures/xfce-91.png new file mode 100644 index 0000000000000000000000000000000000000000..ee69879bb4ad66405b045af5e3965e275fe8eabf Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-91.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-911.png b/docs/en/tools/desktop/kubesphere/figures/xfce-911.png new file mode 100644 index 0000000000000000000000000000000000000000..b49416558e9ab844fda2026b76e2e900ac106842 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-911.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-92.png b/docs/en/tools/desktop/kubesphere/figures/xfce-92.png new file mode 100644 index 0000000000000000000000000000000000000000..78dd6313c603aad9ebd37fe68e06f98b2a3b331e Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-92.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-921.png b/docs/en/tools/desktop/kubesphere/figures/xfce-921.png new file mode 100644 index 0000000000000000000000000000000000000000..0681efd633cff00fe8572579b8971933cfc41dc1 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-921.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-93.png b/docs/en/tools/desktop/kubesphere/figures/xfce-93.png new file mode 100644 index 0000000000000000000000000000000000000000..06ac80c152fefbe1ad2ba1c989f6acfbbaf1a992 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-93.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-931.png b/docs/en/tools/desktop/kubesphere/figures/xfce-931.png new file mode 100644 index 0000000000000000000000000000000000000000..591a6d21d8fe69aed84d35316af506771a26ac01 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-931.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-94.png b/docs/en/tools/desktop/kubesphere/figures/xfce-94.png new file mode 100644 index 0000000000000000000000000000000000000000..f48064ff5902c4ea740ccba9a1640cbca27b5b72 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-94.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-941.png b/docs/en/tools/desktop/kubesphere/figures/xfce-941.png new file mode 100644 index 0000000000000000000000000000000000000000..aaee48a09a1e7233d25f68c6a74c7c39edc73b1f Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-941.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-95.png b/docs/en/tools/desktop/kubesphere/figures/xfce-95.png new file mode 100644 index 0000000000000000000000000000000000000000..bda965b15a859e4cccf4b80f62875f79eb3470fd Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-95.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-951.png b/docs/en/tools/desktop/kubesphere/figures/xfce-951.png new file mode 100644 index 0000000000000000000000000000000000000000..1d8ff807ac84bdae0dc935c3964d10701b5d47dc Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-951.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-96.png b/docs/en/tools/desktop/kubesphere/figures/xfce-96.png new file mode 100644 index 0000000000000000000000000000000000000000..29ce24923477065b98cacf603f185113e9959069 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-96.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-961.png b/docs/en/tools/desktop/kubesphere/figures/xfce-961.png new file mode 100644 index 0000000000000000000000000000000000000000..9d2944ae05699b8424695c865242c1c4f5d60fac Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-961.png differ diff --git a/docs/en/tools/desktop/kubesphere/figures/xfce-962.png b/docs/en/tools/desktop/kubesphere/figures/xfce-962.png new file mode 100644 index 0000000000000000000000000000000000000000..72c65f9675d8259f327077ce7f7212bd2b17a588 Binary files /dev/null and b/docs/en/tools/desktop/kubesphere/figures/xfce-962.png differ diff --git a/docs/en/tools/desktop/kubesphere/kubesphere.md b/docs/en/tools/desktop/kubesphere/kubesphere.md new file mode 100644 index 0000000000000000000000000000000000000000..5184d057bdd517251f321ee711086b3011dcef80 --- /dev/null +++ b/docs/en/tools/desktop/kubesphere/kubesphere.md @@ -0,0 +1,52 @@ +# KubeSphere Installation Guide + +This document describes how to install and deploy Kubernetes and KubeSphere clusters on openEuler 21.09. + +## What Is KubeSphere + +[KubeSphere](https://kubesphere.io/) is an open source **distributed OS** built on [Kubernetes](https://kubernetes.io/) for cloud-native applications. It supports multi-cloud and multi-cluster management and provides full-stack automated IT O&M capabilities, simplifying DevOps-based workflows for enterprises. Its architecture enables plug-and-play integration between third-party applications and cloud-native ecosystem components. For more information, see the [KubeSphere official website](https://kubesphere.com.cn/). + +## Prerequisites + +Prepare a physical machine or VM with openEuler 21.09 installed. For details about the installation method, see the *openEuler 21.09 Installation Guide*. + +## Software Installation + +1. Install KubeKey. + + ```bash + yum install kubekey + ``` + + > ![](./figures/icon-note.gif)**Note** + > Before the installation, manually deploy Docker on each node in the cluster in advance or use KubeKey to automatically deploy Docker. The Docker version automatically deployed by KubeKey is 20.10.8. + +2. Deploy the KubeSphere cluster. + + ```bash + kk create cluster --with-kubesphere v3.1.1 + ``` + + > ![](./figures/icon-note.gif)**Note** + > After this command is executed, Kubernetes v1.19.8 is installed by default. To specify the Kubernetes version, add `--with-kubernetes < version_number >` to the end of the command line. The supported Kubernetes versions include `v1.17.9`, `v1.18.8`, `v.1.19.8`, `v1.19.9`, and `v1.20.6`. + +3. Check whether the KubeSphere cluster is successfully installed. + + ```bash + kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f + ``` + + If the following information is displayed, the KubeSphere cluster is successfully installed: + + ![](./figures/kubesphere.png) + + >![](./figures/icon-note.gif)**Note** + >This document describes how to install KubeSphere in the x86 environment. In the ARM64 environment, you need to install Kubernetes before deploying KubeSphere. + +## Accessing the KubeSphere Web Console + +**Depending on your network environment, you may need to configure port forwarding rules and firewall policies. Ensure that port 30880 is allowed in the firewall rules.** + +After the KubeSphere cluster is successfully deployed, enter `:30880` in the address box of a browser to access the KubeSphere web console. + +![kubesphere-console](./figures/1202_1.jpg) diff --git a/docs/en/tools/desktop/ukui/_toc.yaml b/docs/en/tools/desktop/ukui/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b468391825d386e4fd8c01b90ee81d52bc95a42e --- /dev/null +++ b/docs/en/tools/desktop/ukui/_toc.yaml @@ -0,0 +1,8 @@ +label: UKUI User Guide +isManual: true +description: Install and use UKUI +sections: + - label: Installing UKUI + href: ./ukui_installation.md + - label: Using UKUI + href: ./ukui_user_guide.md diff --git a/docs/en/tools/desktop/ukui/figures/.keep b/docs/en/tools/desktop/ukui/figures/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/en/tools/desktop/ukui/figures/1.png b/docs/en/tools/desktop/ukui/figures/1.png new file mode 100644 index 0000000000000000000000000000000000000000..40af4242eebb440a76c749a8d970d50cd7b89bf4 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/1.png differ diff --git a/docs/en/tools/desktop/ukui/figures/10.png b/docs/en/tools/desktop/ukui/figures/10.png new file mode 100644 index 0000000000000000000000000000000000000000..e588ffbe3d8d7b66d92ae8f2b4bcec7c80d0592c Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/10.png differ diff --git a/docs/en/tools/desktop/ukui/figures/11.png b/docs/en/tools/desktop/ukui/figures/11.png new file mode 100644 index 0000000000000000000000000000000000000000..1989a5bb08155f920363e154e68bb148715c7e9e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/11.png differ diff --git a/docs/en/tools/desktop/ukui/figures/12.png b/docs/en/tools/desktop/ukui/figures/12.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6346161182d2cfeaf3818d5ec518ddb11c732e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/12.png differ diff --git a/docs/en/tools/desktop/ukui/figures/1202_1.jpg b/docs/en/tools/desktop/ukui/figures/1202_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..def242a5b9a70602a9aab7dd8048244e7d9f6793 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/1202_1.jpg differ diff --git a/docs/en/tools/desktop/ukui/figures/13.png b/docs/en/tools/desktop/ukui/figures/13.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7def1fb66c90da62acde799eaffca97e3b5396 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/13.png differ diff --git a/docs/en/tools/desktop/ukui/figures/14.png b/docs/en/tools/desktop/ukui/figures/14.png new file mode 100644 index 0000000000000000000000000000000000000000..3a27a66d57e284775420d467f90dcc02889bbffe Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/14.png differ diff --git a/docs/en/tools/desktop/ukui/figures/15.png b/docs/en/tools/desktop/ukui/figures/15.png new file mode 100644 index 0000000000000000000000000000000000000000..370bea32abcaa8a2b06a1a61c1455d4b35f43474 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/15.png differ diff --git a/docs/en/tools/desktop/ukui/figures/16.png b/docs/en/tools/desktop/ukui/figures/16.png new file mode 100644 index 0000000000000000000000000000000000000000..812ee462669c5263ef4bffc49ca4f9b6af4541c6 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/16.png differ diff --git a/docs/en/tools/desktop/ukui/figures/17.png b/docs/en/tools/desktop/ukui/figures/17.png new file mode 100644 index 0000000000000000000000000000000000000000..36e524b806874fa3788f5e4dcd78350686281107 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/17.png differ diff --git a/docs/en/tools/desktop/ukui/figures/18.png b/docs/en/tools/desktop/ukui/figures/18.png new file mode 100644 index 0000000000000000000000000000000000000000..51b32442980aa60646f77dabd53ade74f55891fe Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/18.png differ diff --git a/docs/en/tools/desktop/ukui/figures/19.png b/docs/en/tools/desktop/ukui/figures/19.png new file mode 100644 index 0000000000000000000000000000000000000000..c9457d09aa9f1662b2c9e4550cdbdb9f57dd020e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/19.png differ diff --git a/docs/en/tools/desktop/ukui/figures/2.png b/docs/en/tools/desktop/ukui/figures/2.png new file mode 100644 index 0000000000000000000000000000000000000000..97917cc245484a43bec8562757d920a06f123121 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/2.png differ diff --git a/docs/en/tools/desktop/ukui/figures/20.png b/docs/en/tools/desktop/ukui/figures/20.png new file mode 100644 index 0000000000000000000000000000000000000000..b0943189920d7a541d35da27340593ea93f92a17 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/20.png differ diff --git a/docs/en/tools/desktop/ukui/figures/21.png b/docs/en/tools/desktop/ukui/figures/21.png new file mode 100644 index 0000000000000000000000000000000000000000..e590c22c0ea28906b5f4ea7ccbc6ab11e47ad173 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/21.png differ diff --git a/docs/en/tools/desktop/ukui/figures/22.png b/docs/en/tools/desktop/ukui/figures/22.png new file mode 100644 index 0000000000000000000000000000000000000000..03a548b1ffb1f0ad53cfa5387af2721af90bca81 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/22.png differ diff --git a/docs/en/tools/desktop/ukui/figures/23.png b/docs/en/tools/desktop/ukui/figures/23.png new file mode 100644 index 0000000000000000000000000000000000000000..834c492094715cde1c02c91752ecabfe7921ed62 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/23.png differ diff --git a/docs/en/tools/desktop/ukui/figures/24.png b/docs/en/tools/desktop/ukui/figures/24.png new file mode 100644 index 0000000000000000000000000000000000000000..1881e868b74a60888b319576fa38fb4af92ba75c Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/24.png differ diff --git a/docs/en/tools/desktop/ukui/figures/25.png b/docs/en/tools/desktop/ukui/figures/25.png new file mode 100644 index 0000000000000000000000000000000000000000..f38839725d27a3486984d152e5d9de305364fbd2 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/25.png differ diff --git a/docs/en/tools/desktop/ukui/figures/26.png b/docs/en/tools/desktop/ukui/figures/26.png new file mode 100644 index 0000000000000000000000000000000000000000..6d7957119133ecb98b1b6b104e54a3a4647ec2a5 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/26.png differ diff --git a/docs/en/tools/desktop/ukui/figures/27.png b/docs/en/tools/desktop/ukui/figures/27.png new file mode 100644 index 0000000000000000000000000000000000000000..3e4733717fdc5172d6479b393005219e65e96df4 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/27.png differ diff --git a/docs/en/tools/desktop/ukui/figures/28.png b/docs/en/tools/desktop/ukui/figures/28.png new file mode 100644 index 0000000000000000000000000000000000000000..a77772e818e3f6c11acac3b9cfa18bad14a0a48c Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/28.png differ diff --git a/docs/en/tools/desktop/ukui/figures/29.png b/docs/en/tools/desktop/ukui/figures/29.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f58ffe5855295268298448744e5aadbdc55276 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/29.png differ diff --git a/docs/en/tools/desktop/ukui/figures/3.png b/docs/en/tools/desktop/ukui/figures/3.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb76b336957020ed6867d908e0a8bdcfc953c52 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/3.png differ diff --git a/docs/en/tools/desktop/ukui/figures/30.png b/docs/en/tools/desktop/ukui/figures/30.png new file mode 100644 index 0000000000000000000000000000000000000000..d91adefba1753959e90ccf4aa1501ac08d7144bd Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/30.png differ diff --git a/docs/en/tools/desktop/ukui/figures/31.png b/docs/en/tools/desktop/ukui/figures/31.png new file mode 100644 index 0000000000000000000000000000000000000000..0abef09ab438f5f8cfb68090993f55c493b8c15e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/31.png differ diff --git a/docs/en/tools/desktop/ukui/figures/32.png b/docs/en/tools/desktop/ukui/figures/32.png new file mode 100644 index 0000000000000000000000000000000000000000..d567cfbacc07a9eb46ff2c54a68432f45e034e94 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/32.png differ diff --git a/docs/en/tools/desktop/ukui/figures/33.png b/docs/en/tools/desktop/ukui/figures/33.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5896e2884520672c0bd88d68471b45a09c56fe Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/33.png differ diff --git a/docs/en/tools/desktop/ukui/figures/34.png b/docs/en/tools/desktop/ukui/figures/34.png new file mode 100644 index 0000000000000000000000000000000000000000..81bc9480fbbd81a97c559d7a6a74274deeab2bd1 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/34.png differ diff --git a/docs/en/tools/desktop/ukui/figures/35.png b/docs/en/tools/desktop/ukui/figures/35.png new file mode 100644 index 0000000000000000000000000000000000000000..ab2399847a643a87279337704e23fea7609bb211 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/35.png differ diff --git a/docs/en/tools/desktop/ukui/figures/36.png b/docs/en/tools/desktop/ukui/figures/36.png new file mode 100644 index 0000000000000000000000000000000000000000..536981609b9ae5d32be56bec612f2b3446146184 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/36.png differ diff --git a/docs/en/tools/desktop/ukui/figures/37.png b/docs/en/tools/desktop/ukui/figures/37.png new file mode 100644 index 0000000000000000000000000000000000000000..e39aa03587642dc1f8622fff515b05a9a3085b28 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/37.png differ diff --git a/docs/en/tools/desktop/ukui/figures/38.png b/docs/en/tools/desktop/ukui/figures/38.png new file mode 100644 index 0000000000000000000000000000000000000000..838f5ff0616a83cdf42edb053f4e72b93bfa644e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/38.png differ diff --git a/docs/en/tools/desktop/ukui/figures/39.png b/docs/en/tools/desktop/ukui/figures/39.png new file mode 100644 index 0000000000000000000000000000000000000000..12a379403d73a47b2fa564120a28fdb58d188963 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/39.png differ diff --git a/docs/en/tools/desktop/ukui/figures/4.png b/docs/en/tools/desktop/ukui/figures/4.png new file mode 100644 index 0000000000000000000000000000000000000000..5078e36aca713706d2cf08a3ebecdc3769951899 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/4.png differ diff --git a/docs/en/tools/desktop/ukui/figures/40.png b/docs/en/tools/desktop/ukui/figures/40.png new file mode 100644 index 0000000000000000000000000000000000000000..bf419894eab852b45604966c62fafa71f051c4df Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/40.png differ diff --git a/docs/en/tools/desktop/ukui/figures/41.png b/docs/en/tools/desktop/ukui/figures/41.png new file mode 100644 index 0000000000000000000000000000000000000000..f94b0ee72e0d4e9277e9b44b4268cfbdb8402104 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/41.png differ diff --git a/docs/en/tools/desktop/ukui/figures/42.png b/docs/en/tools/desktop/ukui/figures/42.png new file mode 100644 index 0000000000000000000000000000000000000000..3182e551c4e4b03885bad6339f1de514b3f55f8c Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/42.png differ diff --git a/docs/en/tools/desktop/ukui/figures/43.jpg b/docs/en/tools/desktop/ukui/figures/43.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26e9244f58ea9800081fd61ae135477f05b21b40 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/43.jpg differ diff --git a/docs/en/tools/desktop/ukui/figures/44.png b/docs/en/tools/desktop/ukui/figures/44.png new file mode 100644 index 0000000000000000000000000000000000000000..c3abaecd6e053272d81e0ad9bd183c6858b4f3c5 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/44.png differ diff --git a/docs/en/tools/desktop/ukui/figures/45.png b/docs/en/tools/desktop/ukui/figures/45.png new file mode 100644 index 0000000000000000000000000000000000000000..86b051acde857c88479714414f721a7f59cca483 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/45.png differ diff --git a/docs/en/tools/desktop/ukui/figures/46.png b/docs/en/tools/desktop/ukui/figures/46.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ec41c87628bf28c9905523f99ae93aebd13614 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/46.png differ diff --git a/docs/en/tools/desktop/ukui/figures/47.jpg b/docs/en/tools/desktop/ukui/figures/47.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf95f03c8ea0f84a878bc63af20972c9da71bc04 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/47.jpg differ diff --git a/docs/en/tools/desktop/ukui/figures/48.png b/docs/en/tools/desktop/ukui/figures/48.png new file mode 100644 index 0000000000000000000000000000000000000000..ef21fa1ce1e2e9848a8dca16e692de673df7c6d7 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/48.png differ diff --git a/docs/en/tools/desktop/ukui/figures/49.png b/docs/en/tools/desktop/ukui/figures/49.png new file mode 100644 index 0000000000000000000000000000000000000000..3b77668e5a4d1bdb3043c473dff9b36fa7144714 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/49.png differ diff --git a/docs/en/tools/desktop/ukui/figures/5.png b/docs/en/tools/desktop/ukui/figures/5.png new file mode 100644 index 0000000000000000000000000000000000000000..2976a745cfaede26594d6daa01cfc18d18b1de8b Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/5.png differ diff --git a/docs/en/tools/desktop/ukui/figures/50.png b/docs/en/tools/desktop/ukui/figures/50.png new file mode 100644 index 0000000000000000000000000000000000000000..b86a55fe4363f56fc18befc9d27025a75ca427ad Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/50.png differ diff --git a/docs/en/tools/desktop/ukui/figures/51.png b/docs/en/tools/desktop/ukui/figures/51.png new file mode 100644 index 0000000000000000000000000000000000000000..d427ac871dba9c32eb4ffe736d5352f8408da533 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/51.png differ diff --git a/docs/en/tools/desktop/ukui/figures/52.png b/docs/en/tools/desktop/ukui/figures/52.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca0a2db05c70bc25f9bb59e82d074f671cfc74e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/52.png differ diff --git a/docs/en/tools/desktop/ukui/figures/53.png b/docs/en/tools/desktop/ukui/figures/53.png new file mode 100644 index 0000000000000000000000000000000000000000..76fbc34a1d5621b83c2d8c93222766acad33350d Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/53.png differ diff --git a/docs/en/tools/desktop/ukui/figures/54.png b/docs/en/tools/desktop/ukui/figures/54.png new file mode 100644 index 0000000000000000000000000000000000000000..49ecae6f8941a118223f3765c23015df074c4983 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/54.png differ diff --git a/docs/en/tools/desktop/ukui/figures/56.png b/docs/en/tools/desktop/ukui/figures/56.png new file mode 100644 index 0000000000000000000000000000000000000000..36fee795bfe593b6246c8d6c2bddea9386b06f45 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/56.png differ diff --git a/docs/en/tools/desktop/ukui/figures/57.png b/docs/en/tools/desktop/ukui/figures/57.png new file mode 100644 index 0000000000000000000000000000000000000000..539d06b77b058a933cb154c43641d498050986e0 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/57.png differ diff --git a/docs/en/tools/desktop/ukui/figures/58.png b/docs/en/tools/desktop/ukui/figures/58.png new file mode 100644 index 0000000000000000000000000000000000000000..396ca16d873e54505bcdbd41d669366eea7f5dee Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/58.png differ diff --git a/docs/en/tools/desktop/ukui/figures/59.png b/docs/en/tools/desktop/ukui/figures/59.png new file mode 100644 index 0000000000000000000000000000000000000000..9b1de98ac4fe686937ca844d3e9481548a79ce63 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/59.png differ diff --git a/docs/en/tools/desktop/ukui/figures/6.png b/docs/en/tools/desktop/ukui/figures/6.png new file mode 100644 index 0000000000000000000000000000000000000000..275c23872f2353f007371672714902babcc3db53 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/6.png differ diff --git a/docs/en/tools/desktop/ukui/figures/60.jpg b/docs/en/tools/desktop/ukui/figures/60.jpg new file mode 100644 index 0000000000000000000000000000000000000000..033c88aaadd04f7d4058ec2eb5b2c70498319bf7 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/60.jpg differ diff --git a/docs/en/tools/desktop/ukui/figures/61.png b/docs/en/tools/desktop/ukui/figures/61.png new file mode 100644 index 0000000000000000000000000000000000000000..8df17062963a3baf92318a12ec34b1378122687b Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/61.png differ diff --git a/docs/en/tools/desktop/ukui/figures/62.png b/docs/en/tools/desktop/ukui/figures/62.png new file mode 100644 index 0000000000000000000000000000000000000000..ec312d6c0c22018c1745dd866da71ce9be47fbda Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/62.png differ diff --git a/docs/en/tools/desktop/ukui/figures/63.jpg b/docs/en/tools/desktop/ukui/figures/63.jpg new file mode 100644 index 0000000000000000000000000000000000000000..504f7cf59768f6fd1cd73a115d01fbc4e15a02e1 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/63.jpg differ diff --git a/docs/en/tools/desktop/ukui/figures/63.png b/docs/en/tools/desktop/ukui/figures/63.png new file mode 100644 index 0000000000000000000000000000000000000000..86b051acde857c88479714414f721a7f59cca483 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/63.png differ diff --git a/docs/en/tools/desktop/ukui/figures/64.png b/docs/en/tools/desktop/ukui/figures/64.png new file mode 100644 index 0000000000000000000000000000000000000000..cbbd2ede047e735c3766e08b04595f08cd72f5b2 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/64.png differ diff --git a/docs/en/tools/desktop/ukui/figures/7.png b/docs/en/tools/desktop/ukui/figures/7.png new file mode 100644 index 0000000000000000000000000000000000000000..4d397959ac7f6d166ef5a3b7084bd5c3c93b475f Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/7.png differ diff --git a/docs/en/tools/desktop/ukui/figures/8.png b/docs/en/tools/desktop/ukui/figures/8.png new file mode 100644 index 0000000000000000000000000000000000000000..8ade274092d7b3e461c96d7909a9d89d3a944f09 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/8.png differ diff --git a/docs/en/tools/desktop/ukui/figures/9.png b/docs/en/tools/desktop/ukui/figures/9.png new file mode 100644 index 0000000000000000000000000000000000000000..f7b2215404929346f1a814b0b1d6d482559c08b5 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/9.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-add-resource.png b/docs/en/tools/desktop/ukui/figures/HA-add-resource.png new file mode 100644 index 0000000000000000000000000000000000000000..ac24895a1247828d248132f6c789ad8ef51a57e4 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-add-resource.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-apache-show.png b/docs/en/tools/desktop/ukui/figures/HA-apache-show.png new file mode 100644 index 0000000000000000000000000000000000000000..c216500910f75f2de1108f6b618c5c08f4df8bae Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-apache-show.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-apache-suc.png b/docs/en/tools/desktop/ukui/figures/HA-apache-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..23a7aaa702e3e68190ff7e01a5a673aee2c92409 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-apache-suc.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-api.png b/docs/en/tools/desktop/ukui/figures/HA-api.png new file mode 100644 index 0000000000000000000000000000000000000000..f825fe005705d30809d12df97958cff0e5a80135 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-api.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-clone-suc.png b/docs/en/tools/desktop/ukui/figures/HA-clone-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..4b6099ccc88d4f6f907a0c4563e729ab2a4dece1 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-clone-suc.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-clone.png b/docs/en/tools/desktop/ukui/figures/HA-clone.png new file mode 100644 index 0000000000000000000000000000000000000000..1b09ab73849494f4ffd759fa612ae3c241bd9c1d Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-clone.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-corosync.png b/docs/en/tools/desktop/ukui/figures/HA-corosync.png new file mode 100644 index 0000000000000000000000000000000000000000..c4d93242e65c503b6e1b6a457e2517f647984a66 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-corosync.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-firstchoice-cmd.png b/docs/en/tools/desktop/ukui/figures/HA-firstchoice-cmd.png new file mode 100644 index 0000000000000000000000000000000000000000..a265bab07f1d8e46d9d965975be180a8de6c9eb2 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-firstchoice-cmd.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-firstchoice.png b/docs/en/tools/desktop/ukui/figures/HA-firstchoice.png new file mode 100644 index 0000000000000000000000000000000000000000..bd982ddcea55c629c0257fca86051a9ffa77e7b4 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-firstchoice.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-group-new-suc.png b/docs/en/tools/desktop/ukui/figures/HA-group-new-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..437fd01ee83a9a1f65c12838fe56eea8435f6759 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-group-new-suc.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-group-new-suc2.png b/docs/en/tools/desktop/ukui/figures/HA-group-new-suc2.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb933bd761f9808de95a324a50226ff041ebd4f Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-group-new-suc2.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-group-new.png b/docs/en/tools/desktop/ukui/figures/HA-group-new.png new file mode 100644 index 0000000000000000000000000000000000000000..9c914d0cc2e14f3220fc4346175961f129efb37b Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-group-new.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-group-suc.png b/docs/en/tools/desktop/ukui/figures/HA-group-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..2338580343833ebab08627be3a2efbcdb48aef9e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-group-suc.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-group.png b/docs/en/tools/desktop/ukui/figures/HA-group.png new file mode 100644 index 0000000000000000000000000000000000000000..6897817665dee90c0f8c47c6a3cb4bb09db52d78 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-group.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-home-page.png b/docs/en/tools/desktop/ukui/figures/HA-home-page.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a7a82dc412250d4c0984b3876c6f93c6aca789 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-home-page.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-login.png b/docs/en/tools/desktop/ukui/figures/HA-login.png new file mode 100644 index 0000000000000000000000000000000000000000..65d0ae11ec810da7574ec72bebf6e1b020c94a0d Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-login.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-mariadb-suc.png b/docs/en/tools/desktop/ukui/figures/HA-mariadb-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..6f6756c945121715edc623bd9a848bc48ffeb4ca Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-mariadb-suc.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-mariadb.png b/docs/en/tools/desktop/ukui/figures/HA-mariadb.png new file mode 100644 index 0000000000000000000000000000000000000000..d29587c8609b9d6aefeb07170901361b5ef8402d Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-mariadb.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-nfs-suc.png b/docs/en/tools/desktop/ukui/figures/HA-nfs-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..c0ea6af79e91649f1ad7d97ab6c2a0069a4f4fb8 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-nfs-suc.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-nfs.png b/docs/en/tools/desktop/ukui/figures/HA-nfs.png new file mode 100644 index 0000000000000000000000000000000000000000..f6917938eec2e0431a9891c067475dd0b21c1bd9 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-nfs.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-pacemaker.png b/docs/en/tools/desktop/ukui/figures/HA-pacemaker.png new file mode 100644 index 0000000000000000000000000000000000000000..7681f963f67d2b803fef6fb2c3247384136201f8 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-pacemaker.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-pcs-status.png b/docs/en/tools/desktop/ukui/figures/HA-pcs-status.png new file mode 100644 index 0000000000000000000000000000000000000000..fb150fba9f6258658702b35caacf98076d1fd109 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-pcs-status.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-pcs.png b/docs/en/tools/desktop/ukui/figures/HA-pcs.png new file mode 100644 index 0000000000000000000000000000000000000000..283670d7c3d0961ee1cb41345c2b2a013d7143b0 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-pcs.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-refresh.png b/docs/en/tools/desktop/ukui/figures/HA-refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..c2678c0c2945acbabfbeae0d5de8924a216bbf31 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-refresh.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-vip-suc.png b/docs/en/tools/desktop/ukui/figures/HA-vip-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..313ce56e14f931c78dad4349ed57ab3fd7907f50 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-vip-suc.png differ diff --git a/docs/en/tools/desktop/ukui/figures/HA-vip.png b/docs/en/tools/desktop/ukui/figures/HA-vip.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b417df2e64527d3b29d0289756dfbb01bf66ec Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/HA-vip.png differ diff --git a/docs/en/tools/desktop/ukui/figures/dde-1.png b/docs/en/tools/desktop/ukui/figures/dde-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fb1d5177c39262ed182f10a57fdae850d007eeb1 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/dde-1.png differ diff --git a/docs/en/tools/desktop/ukui/figures/dde-2.png b/docs/en/tools/desktop/ukui/figures/dde-2.png new file mode 100644 index 0000000000000000000000000000000000000000..be5d296937bd17b9646b32c80934aa76738027af Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/dde-2.png differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-1.PNG b/docs/en/tools/desktop/ukui/figures/gnome-1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ed57060770957f304a3fb7ca993241d56e90f541 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-1.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-10.PNG b/docs/en/tools/desktop/ukui/figures/gnome-10.PNG new file mode 100644 index 0000000000000000000000000000000000000000..94af842ca7d0de47db4d0030a0741d0cae634a21 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-10.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-11.PNG b/docs/en/tools/desktop/ukui/figures/gnome-11.PNG new file mode 100644 index 0000000000000000000000000000000000000000..022c764002542196b723eadaaaae080b3afc1d0f Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-11.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-12.PNG b/docs/en/tools/desktop/ukui/figures/gnome-12.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4255aa3e1629b2af94ec59ae0fe346d91da8ba61 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-12.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-13.PNG b/docs/en/tools/desktop/ukui/figures/gnome-13.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f6bad1c09c36bdef3ed4dd48c14e98c03a230cc7 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-13.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-14.PNG b/docs/en/tools/desktop/ukui/figures/gnome-14.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a661a4e759ff3107fc9bfa5f664a86f77051dfcf Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-14.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-15.PNG b/docs/en/tools/desktop/ukui/figures/gnome-15.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2e5a26c33b2cb432d4b7a79af8407b5b13592d09 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-15.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-16.PNG b/docs/en/tools/desktop/ukui/figures/gnome-16.PNG new file mode 100644 index 0000000000000000000000000000000000000000..178d5e836b69168c441676c4e77721e22f460981 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-16.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-17.PNG b/docs/en/tools/desktop/ukui/figures/gnome-17.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2ea9f9e1914bb90193689e3d35e48918dcc7c019 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-17.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-18.PNG b/docs/en/tools/desktop/ukui/figures/gnome-18.PNG new file mode 100644 index 0000000000000000000000000000000000000000..55b5c07ea89fca246600ff7ea0ff66f03427ddcb Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-18.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-19.PNG b/docs/en/tools/desktop/ukui/figures/gnome-19.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b9f78d01b726078d25d900e4ef9f9ffb1bdc9075 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-19.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-2.PNG b/docs/en/tools/desktop/ukui/figures/gnome-2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..cf86813c71dd47584c5f4d9c0d6fec29813c9dc9 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-2.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-20.PNG b/docs/en/tools/desktop/ukui/figures/gnome-20.PNG new file mode 100644 index 0000000000000000000000000000000000000000..37133665e2025c5267c3bf1ea742bc7295d0cb59 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-20.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-21.PNG b/docs/en/tools/desktop/ukui/figures/gnome-21.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0d0bc17b2a973d6e035b3d08097e0ad6138ed786 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-21.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-22.PNG b/docs/en/tools/desktop/ukui/figures/gnome-22.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4967a95e8c1fcf4fa5e6a799933149365e447725 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-22.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-23.PNG b/docs/en/tools/desktop/ukui/figures/gnome-23.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ac39542d77bdfe64b1c3d0119870cbd5e0136d17 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-23.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-24.PNG b/docs/en/tools/desktop/ukui/figures/gnome-24.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e4572c436249b329643a6777ddf6a2852fcab5a6 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-24.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-25.PNG b/docs/en/tools/desktop/ukui/figures/gnome-25.PNG new file mode 100644 index 0000000000000000000000000000000000000000..93ac3582bd0dc5a273614e20b89ea654fe02ff9d Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-25.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-26.PNG b/docs/en/tools/desktop/ukui/figures/gnome-26.PNG new file mode 100644 index 0000000000000000000000000000000000000000..98f349dab192b4b6a297d4907b9156c5d6240652 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-26.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-27.PNG b/docs/en/tools/desktop/ukui/figures/gnome-27.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ea319f8df41e1bdbccb34e597ccdb3c6d21a3727 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-27.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-28.PNG b/docs/en/tools/desktop/ukui/figures/gnome-28.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b2f1db5ea27cdfada82ba9572395598df2ecf648 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-28.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-29.PNG b/docs/en/tools/desktop/ukui/figures/gnome-29.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fc2f6a8a2bbc56af1b657a5a25359aa15183125e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-29.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-3.PNG b/docs/en/tools/desktop/ukui/figures/gnome-3.PNG new file mode 100644 index 0000000000000000000000000000000000000000..3ac1eb3b0d6cd8a84b0c408f745e40db6d845ca8 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-3.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-30.PNG b/docs/en/tools/desktop/ukui/figures/gnome-30.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6799ad80c89443267a31c0b2d3b059cc9dd8aceb Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-30.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-31.PNG b/docs/en/tools/desktop/ukui/figures/gnome-31.PNG new file mode 100644 index 0000000000000000000000000000000000000000..39ebf079f7a11c28359440111b548bf2d7be5aaa Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-31.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-32.PNG b/docs/en/tools/desktop/ukui/figures/gnome-32.PNG new file mode 100644 index 0000000000000000000000000000000000000000..28a77475cf3a1176a0c5d01418e1833fef627cc7 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-32.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-33.PNG b/docs/en/tools/desktop/ukui/figures/gnome-33.PNG new file mode 100644 index 0000000000000000000000000000000000000000..cecde6d0ab299f69ad95f25ff7d3f7130da09d02 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-33.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-34.PNG b/docs/en/tools/desktop/ukui/figures/gnome-34.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a760c501d86debdb81a89ef3a70b694e22d0e4da Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-34.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-35.PNG b/docs/en/tools/desktop/ukui/figures/gnome-35.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ab46f383f1b8f2c740effff3c59ad224b9e5025b Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-35.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-36.PNG b/docs/en/tools/desktop/ukui/figures/gnome-36.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e248144b99bb65943446f6c9fbd6ad45c11ddd58 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-36.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-37.PNG b/docs/en/tools/desktop/ukui/figures/gnome-37.PNG new file mode 100644 index 0000000000000000000000000000000000000000..7181726fb3d074298e41ee59ca14c9be68884aad Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-37.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-38.PNG b/docs/en/tools/desktop/ukui/figures/gnome-38.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b5c02d20fbad894fa3702b6274b047ef26ea1a10 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-38.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-39.PNG b/docs/en/tools/desktop/ukui/figures/gnome-39.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0c85bb5f72d7625e683409c3d4605b56f74d746b Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-39.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-4.PNG b/docs/en/tools/desktop/ukui/figures/gnome-4.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0bce0130188f00f30c67a4a8d4904ad8419428da Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-4.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-40.PNG b/docs/en/tools/desktop/ukui/figures/gnome-40.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e0c5a085776933b08d94cf51ae22d52af0a68ca0 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-40.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-41.PNG b/docs/en/tools/desktop/ukui/figures/gnome-41.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0fc42fc339480115cc588fee59983faf4652fc80 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-41.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-42.PNG b/docs/en/tools/desktop/ukui/figures/gnome-42.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fa18531c9e9ec6ee9dcb9e7c5046ee41bcfa454f Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-42.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-43.PNG b/docs/en/tools/desktop/ukui/figures/gnome-43.PNG new file mode 100644 index 0000000000000000000000000000000000000000..aadb23eda46dc831a56935a38f9a7d0c9534db89 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-43.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-44.PNG b/docs/en/tools/desktop/ukui/figures/gnome-44.PNG new file mode 100644 index 0000000000000000000000000000000000000000..8747e97f510cfd64abf520e099b5abeceb056970 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-44.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-45.PNG b/docs/en/tools/desktop/ukui/figures/gnome-45.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a0841f2360ad016c15444ff913a4a7b437ee047e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-45.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-46.PNG b/docs/en/tools/desktop/ukui/figures/gnome-46.PNG new file mode 100644 index 0000000000000000000000000000000000000000..d1815b118b98b523c1c97d14a69292528248878c Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-46.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-47.PNG b/docs/en/tools/desktop/ukui/figures/gnome-47.PNG new file mode 100644 index 0000000000000000000000000000000000000000..73c8deaf7bf8c3fca34fec443e9b60d13910732b Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-47.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-48.PNG b/docs/en/tools/desktop/ukui/figures/gnome-48.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6414ceafc991a94815324d362918b06e849d952e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-48.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-49.PNG b/docs/en/tools/desktop/ukui/figures/gnome-49.PNG new file mode 100644 index 0000000000000000000000000000000000000000..040a7a235cc3dca8dfae6d89f1d28bb308a42391 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-49.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-5.PNG b/docs/en/tools/desktop/ukui/figures/gnome-5.PNG new file mode 100644 index 0000000000000000000000000000000000000000..30076d824d8dde3206ff012538e1691df3a3e5ed Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-5.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-50.PNG b/docs/en/tools/desktop/ukui/figures/gnome-50.PNG new file mode 100644 index 0000000000000000000000000000000000000000..05951779983fa2c198afca908f6c54cbc35f557a Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-50.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-51.PNG b/docs/en/tools/desktop/ukui/figures/gnome-51.PNG new file mode 100644 index 0000000000000000000000000000000000000000..995f82f57a7828926ceea5dbaaf9f79ec453c1ab Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-51.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-52.PNG b/docs/en/tools/desktop/ukui/figures/gnome-52.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6607be66dc61953729cf5106b4d39aa724b8bf76 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-52.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-53.PNG b/docs/en/tools/desktop/ukui/figures/gnome-53.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b1e851620eadab0376be79fcc12c0d8d3d943ec3 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-53.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-54.PNG b/docs/en/tools/desktop/ukui/figures/gnome-54.PNG new file mode 100644 index 0000000000000000000000000000000000000000..c9e773a1aec444feedfbfb3dce8ca9745ccb9f9e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-54.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-55.PNG b/docs/en/tools/desktop/ukui/figures/gnome-55.PNG new file mode 100644 index 0000000000000000000000000000000000000000..bd935df19ada2bbbf6f9f4b58d020f73fbdbbed0 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-55.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-56.PNG b/docs/en/tools/desktop/ukui/figures/gnome-56.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4475f73a68296d19cf0010b1f848aa3cbcd82858 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-56.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-57.PNG b/docs/en/tools/desktop/ukui/figures/gnome-57.PNG new file mode 100644 index 0000000000000000000000000000000000000000..24073cd56613e3fce7f3a7e0f057a12d8d8f3077 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-57.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-58.PNG b/docs/en/tools/desktop/ukui/figures/gnome-58.PNG new file mode 100644 index 0000000000000000000000000000000000000000..19112ae3f1f4ee9e0d7b2191ddec2d14ad171d67 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-58.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-59.PNG b/docs/en/tools/desktop/ukui/figures/gnome-59.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4c4225e9208ad3d38e1ec9e846d6b7c5e89e3991 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-59.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-6.PNG b/docs/en/tools/desktop/ukui/figures/gnome-6.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fa53206b21811a75382f6aee788c1cd8a20d9ba7 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-6.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-7.PNG b/docs/en/tools/desktop/ukui/figures/gnome-7.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fe38b39118bb79bef4412ed0f08c472ad145980e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-7.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-8.PNG b/docs/en/tools/desktop/ukui/figures/gnome-8.PNG new file mode 100644 index 0000000000000000000000000000000000000000..769939c5583d02d014ded8065eaa7ac6aeb81cd4 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-8.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/gnome-9.PNG b/docs/en/tools/desktop/ukui/figures/gnome-9.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b699942966fe2fe444e86231638f917f524328d9 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/gnome-9.PNG differ diff --git a/docs/en/tools/desktop/ukui/figures/icon1.png b/docs/en/tools/desktop/ukui/figures/icon1.png new file mode 100644 index 0000000000000000000000000000000000000000..9bac00355cf4aa57d32287fd4271404f6fd3fd4d Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon1.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon10-o.png b/docs/en/tools/desktop/ukui/figures/icon10-o.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c56d1a64c588d86f8fe510c74e5a7c4cb810d4 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon10-o.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon101-o.svg b/docs/en/tools/desktop/ukui/figures/icon101-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..af1c5d3dc0277a6ea59e71efb6ca97bdfc782e8e --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon101-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon103-o.svg b/docs/en/tools/desktop/ukui/figures/icon103-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..c06c885725c569ab8db1fe7d595a7c65f18c5142 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon103-o.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon105-o.svg b/docs/en/tools/desktop/ukui/figures/icon105-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..36c49949fa569330b761c2d65518f36c10435508 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon105-o.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon107-o.svg b/docs/en/tools/desktop/ukui/figures/icon107-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..fb5a3ea756f6ccb7b3e5c31122a433347a908c96 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon107-o.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon11-o.png b/docs/en/tools/desktop/ukui/figures/icon11-o.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1f2cb7f99b583768c7cbd7e05a57f302dbe8a Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon11-o.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon110-o.svg b/docs/en/tools/desktop/ukui/figures/icon110-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..7958e3f192061592e002e1e8a1bad06ffa86742c --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon110-o.svg @@ -0,0 +1,12 @@ + + + + reboot_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/icon111-o.svg b/docs/en/tools/desktop/ukui/figures/icon111-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..097d16a08d305a8b3f3b2268ab1ea8342e799377 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon111-o.svg @@ -0,0 +1,13 @@ + + + + Right + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/icon112-o.svg b/docs/en/tools/desktop/ukui/figures/icon112-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e51628c2b8b10495f3410d219814286696ea2fd5 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon112-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon116-o.svg b/docs/en/tools/desktop/ukui/figures/icon116-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..4d79cd6dbbbfd3969f4e0ad0ad88e27398853505 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon116-o.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon12-o.png b/docs/en/tools/desktop/ukui/figures/icon12-o.png new file mode 100644 index 0000000000000000000000000000000000000000..f1f0f59dd3879461a0b5bc0632693a4a4124def3 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon12-o.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon120-o.svg b/docs/en/tools/desktop/ukui/figures/icon120-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e895c347d16a200aea46b00428b0b9f1a3c94246 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon120-o.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon122-o.svg b/docs/en/tools/desktop/ukui/figures/icon122-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..7fb014b5fd6097ca37a84d0b6a27dc982d675c8a --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon122-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon124-o.svg b/docs/en/tools/desktop/ukui/figures/icon124-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..960c0ec096c925213f8953398f0e8e5db3cdaed3 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon124-o.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon125-o.svg b/docs/en/tools/desktop/ukui/figures/icon125-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..011c05f4b8f296867cd408a339230323fcbb28dd --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon125-o.svg @@ -0,0 +1,9 @@ + + + tips + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/icon126-o.svg b/docs/en/tools/desktop/ukui/figures/icon126-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e0a43b6b8beb434090ac0dd3a8fd68c023f11fce --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon126-o.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon127-o.svg b/docs/en/tools/desktop/ukui/figures/icon127-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..bed95d35334a8d0151211054236c0bacddcc0dd3 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon127-o.svg @@ -0,0 +1,13 @@ + + + + Up + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/icon128-o.svg b/docs/en/tools/desktop/ukui/figures/icon128-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..aa727f3f5d5883b3fb83a79c4b98e8b5bfe4ade6 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon128-o.svg @@ -0,0 +1,12 @@ + + + + userswitch_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/icon13-o.png b/docs/en/tools/desktop/ukui/figures/icon13-o.png new file mode 100644 index 0000000000000000000000000000000000000000..c05a981b29d8ad11c6682f796f79b4cafd0f088b Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon13-o.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon132-o.svg b/docs/en/tools/desktop/ukui/figures/icon132-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..588ba9d98864ba67a562fa9179f29405f7687aa0 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon132-o.svg @@ -0,0 +1,15 @@ + + + + - + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/icon133-o.svg b/docs/en/tools/desktop/ukui/figures/icon133-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..886d90a83e33497d134bdb3dcc864a5c2df53f20 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon133-o.svg @@ -0,0 +1,13 @@ + + + + + + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/icon134-o.svg b/docs/en/tools/desktop/ukui/figures/icon134-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..784cf383eb0e8f5c7a57a602047be50ad0a3bc05 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon134-o.svg @@ -0,0 +1,15 @@ + + + + = + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/icon135-o.svg b/docs/en/tools/desktop/ukui/figures/icon135-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..cea628a8f5eb92d10661b690242b6de41ca64816 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon135-o.svg @@ -0,0 +1,15 @@ + + + + ~ + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/icon136-o.svg b/docs/en/tools/desktop/ukui/figures/icon136-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..24aa139ab2fefaee20935551f1af5aef473719ed --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon136-o.svg @@ -0,0 +1,12 @@ + + + + poweroff_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/icon14-o.png b/docs/en/tools/desktop/ukui/figures/icon14-o.png new file mode 100644 index 0000000000000000000000000000000000000000..b21deee4d98593d93fb5f72158d2d78f3d3f1cb9 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon14-o.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon15-o.png b/docs/en/tools/desktop/ukui/figures/icon15-o.png new file mode 100644 index 0000000000000000000000000000000000000000..1827a20e9da4d28e35e8ab2eae739b2fec37b385 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon15-o.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon16.png b/docs/en/tools/desktop/ukui/figures/icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..f271594dda9d3ad0f038c9d719dd68c3e82c59f1 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon16.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon17.png b/docs/en/tools/desktop/ukui/figures/icon17.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe58b89347c857920bce25f067fbd11c308e502 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon17.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon18.png b/docs/en/tools/desktop/ukui/figures/icon18.png new file mode 100644 index 0000000000000000000000000000000000000000..1827a20e9da4d28e35e8ab2eae739b2fec37b385 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon18.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon19-o.png b/docs/en/tools/desktop/ukui/figures/icon19-o.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1f2cb7f99b583768c7cbd7e05a57f302dbe8a Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon19-o.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon2.png b/docs/en/tools/desktop/ukui/figures/icon2.png new file mode 100644 index 0000000000000000000000000000000000000000..9101e4b386df065a87d422bc5a0b287528ea5ec7 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon2.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon20.png b/docs/en/tools/desktop/ukui/figures/icon20.png new file mode 100644 index 0000000000000000000000000000000000000000..4de3c7c695893539967245ea5e269b26e2b735be Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon20.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon21.png b/docs/en/tools/desktop/ukui/figures/icon21.png new file mode 100644 index 0000000000000000000000000000000000000000..e7b4320b6ce1fd4adb52525ba2c60983ffb2eed3 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon21.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon22.png b/docs/en/tools/desktop/ukui/figures/icon22.png new file mode 100644 index 0000000000000000000000000000000000000000..43bfa96965ad13e0a34ead3cb1102a76b9346a23 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon22.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon23.png b/docs/en/tools/desktop/ukui/figures/icon23.png new file mode 100644 index 0000000000000000000000000000000000000000..aee221ddaa81d06fa7bd5b89a624da90cd1e53da Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon23.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon24.png b/docs/en/tools/desktop/ukui/figures/icon24.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e5d700431ca1666fe9eda2cefce5dd2f83bdcd Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon24.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon25.png b/docs/en/tools/desktop/ukui/figures/icon25.png new file mode 100644 index 0000000000000000000000000000000000000000..3de0f9476bbee9e89c3b759afbed968f17b5bbcc Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon25.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon26-o.png b/docs/en/tools/desktop/ukui/figures/icon26-o.png new file mode 100644 index 0000000000000000000000000000000000000000..2293a893caf6d89c3beb978598fe7f281e68e7d5 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon26-o.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon27-o.png b/docs/en/tools/desktop/ukui/figures/icon27-o.png new file mode 100644 index 0000000000000000000000000000000000000000..abbab8e40f7e3ca7c2a6f28ff78f08f15117828e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon27-o.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon28-o.png b/docs/en/tools/desktop/ukui/figures/icon28-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon28-o.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon29-o.png b/docs/en/tools/desktop/ukui/figures/icon29-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon29-o.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon3.png b/docs/en/tools/desktop/ukui/figures/icon3.png new file mode 100644 index 0000000000000000000000000000000000000000..930ee8909e89e3624c581f83d713af271cd96c75 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon3.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon30-o.png b/docs/en/tools/desktop/ukui/figures/icon30-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon30-o.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon31-o.png b/docs/en/tools/desktop/ukui/figures/icon31-o.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon31-o.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon32.png b/docs/en/tools/desktop/ukui/figures/icon32.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon32.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon33.png b/docs/en/tools/desktop/ukui/figures/icon33.png new file mode 100644 index 0000000000000000000000000000000000000000..88ed145b25f6f025ad795ceb012500e0944cb54c Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon33.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon34.png b/docs/en/tools/desktop/ukui/figures/icon34.png new file mode 100644 index 0000000000000000000000000000000000000000..8247f52a3424c81b451ceb318f4a7979a5eddece Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon34.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon35.png b/docs/en/tools/desktop/ukui/figures/icon35.png new file mode 100644 index 0000000000000000000000000000000000000000..7c656e9030b94809a57c7e369921e6a585f3574c Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon35.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon36.png b/docs/en/tools/desktop/ukui/figures/icon36.png new file mode 100644 index 0000000000000000000000000000000000000000..7d29d173e914dfff48245d3d3a4d42575ce2d1db Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon36.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon37.png b/docs/en/tools/desktop/ukui/figures/icon37.png new file mode 100644 index 0000000000000000000000000000000000000000..58be4c621b6638115153e361801deb9ee06634d8 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon37.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon38.png b/docs/en/tools/desktop/ukui/figures/icon38.png new file mode 100644 index 0000000000000000000000000000000000000000..0c861ccb891f4fb5e533eb7f7151a8fce1571f17 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon38.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon39.png b/docs/en/tools/desktop/ukui/figures/icon39.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ba1f347452d0cd1c06c6c51d2cdf5aea5e490b Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon39.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon4.png b/docs/en/tools/desktop/ukui/figures/icon4.png new file mode 100644 index 0000000000000000000000000000000000000000..548dc8b648edb73ff1dd8a0266e8479203e72ca0 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon4.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon40.png b/docs/en/tools/desktop/ukui/figures/icon40.png new file mode 100644 index 0000000000000000000000000000000000000000..9c29dd1e9a1bf22c36abf51cb18fa9e47b455fab Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon40.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon41.png b/docs/en/tools/desktop/ukui/figures/icon41.png new file mode 100644 index 0000000000000000000000000000000000000000..9e8aea527a2119433fffec5a8800ebfa4fa5062f Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon41.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon42-o.png b/docs/en/tools/desktop/ukui/figures/icon42-o.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon42-o.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon42.png b/docs/en/tools/desktop/ukui/figures/icon42.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon42.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon43-o.png b/docs/en/tools/desktop/ukui/figures/icon43-o.png new file mode 100644 index 0000000000000000000000000000000000000000..284bdd551baf25beb4143013402e77a1a4c60ccb Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon43-o.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon44-o.png b/docs/en/tools/desktop/ukui/figures/icon44-o.png new file mode 100644 index 0000000000000000000000000000000000000000..810f4d784ee140dbf562e67a0d3fd391272626a5 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon44-o.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon45-o.png b/docs/en/tools/desktop/ukui/figures/icon45-o.png new file mode 100644 index 0000000000000000000000000000000000000000..3e528ce2c98284f020ae4912a853f5864526396b Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon45-o.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon46-o.png b/docs/en/tools/desktop/ukui/figures/icon46-o.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6a3ca0fe57016f3685981ed518493ceea1c855 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon46-o.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon47-o.png b/docs/en/tools/desktop/ukui/figures/icon47-o.png new file mode 100644 index 0000000000000000000000000000000000000000..6eeaba98d908775bd363a8ffcec27c3b6a214013 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon47-o.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon49-o.svg b/docs/en/tools/desktop/ukui/figures/icon49-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..f2d76acd147ccaf5e493a7c035bb90640af7817c --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon49-o.svg @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon5.png b/docs/en/tools/desktop/ukui/figures/icon5.png new file mode 100644 index 0000000000000000000000000000000000000000..e4206b7b584bf0702c7cb2f03a3a41e20bfba844 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon5.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon50-o.svg b/docs/en/tools/desktop/ukui/figures/icon50-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..05026802be4718205065d6369e14cc0b6ef05bc7 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon50-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon52-o.svg b/docs/en/tools/desktop/ukui/figures/icon52-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..23149c05873259cd39721b8ee9c3ab7db86d64c5 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon52-o.svg @@ -0,0 +1,9 @@ + + + attention + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/icon53-o.svg b/docs/en/tools/desktop/ukui/figures/icon53-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..50e33489ce984b0acfd621da4a8ef837fdf048c1 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon53-o.svg @@ -0,0 +1,11 @@ + + + + previous + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/icon54-o.svg b/docs/en/tools/desktop/ukui/figures/icon54-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..3b599aef4b822c707d2f646405bb00837aed96fd --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon54-o.svg @@ -0,0 +1,18 @@ + + + + Backspace + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/icon56-o.svg b/docs/en/tools/desktop/ukui/figures/icon56-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9f13b6861e3858deec8d57a5301c934acc247069 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon56-o.svg @@ -0,0 +1,19 @@ + + + + Slice 1 + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/icon57-o.svg b/docs/en/tools/desktop/ukui/figures/icon57-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e6fbfa1381b76ab3fcd45652b33267a7f6c69bb7 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon57-o.svg @@ -0,0 +1,11 @@ + + + + titlebutton/close_normal + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/icon58-o.svg b/docs/en/tools/desktop/ukui/figures/icon58-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9746dcacfc8e5d4c4b63233801e37418a190fc8f --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon58-o.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon6.png b/docs/en/tools/desktop/ukui/figures/icon6.png new file mode 100644 index 0000000000000000000000000000000000000000..88ced3587e9a42b145fe11393726f40aba9d1b2c Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon6.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon62-o.svg b/docs/en/tools/desktop/ukui/figures/icon62-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..09f61b446669df2e05a3351d40d8c30879c7b035 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon62-o.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon63-o.svg b/docs/en/tools/desktop/ukui/figures/icon63-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..06c03ed99260ffadc681475dad35610aedf67f83 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon63-o.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon66-o.svg b/docs/en/tools/desktop/ukui/figures/icon66-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..5793b3846b7fe6a5758379591215b16c7f9e1b52 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon66-o.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon68-o.svg b/docs/en/tools/desktop/ukui/figures/icon68-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..a7748052dfa436116d8742dca28f7d90865231ed --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon68-o.svg @@ -0,0 +1,23 @@ + + + + deepin-system-monitor + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/icon69-o.svg b/docs/en/tools/desktop/ukui/figures/icon69-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e21dfd00a32a44ee1c8e3882b4ca8239be04690f --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon69-o.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon7.png b/docs/en/tools/desktop/ukui/figures/icon7.png new file mode 100644 index 0000000000000000000000000000000000000000..05fe8aa38c84ca0c0c99b0b005ddec2f2ba42f4a Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon7.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon70-o.svg b/docs/en/tools/desktop/ukui/figures/icon70-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..b5787a7ffa5ed9519a48c6937c60927fd11fd455 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon70-o.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon71-o.svg b/docs/en/tools/desktop/ukui/figures/icon71-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..669a21f143b06cb45ea3f45f7f071809f2cbc8a8 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon71-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon72-o.svg b/docs/en/tools/desktop/ukui/figures/icon72-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..79067ed9b9ff7912e1742183b461fa056601b9cc --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon72-o.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon73-o.svg b/docs/en/tools/desktop/ukui/figures/icon73-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..cf6292387f5e790db6ebd66184aabcbb39257ee7 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon73-o.svg @@ -0,0 +1,13 @@ + + + + Down + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/icon75-o.svg b/docs/en/tools/desktop/ukui/figures/icon75-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..ef6823ccc19858f57374f0b78ad31514e8311be3 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon75-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon8.png b/docs/en/tools/desktop/ukui/figures/icon8.png new file mode 100644 index 0000000000000000000000000000000000000000..01543c3e0f5e96a023b4e1f0859a03e3a0dafd56 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon8.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon83-o.svg b/docs/en/tools/desktop/ukui/figures/icon83-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..35dd6eacc54a933dc9ebc3f3010edfa7363fecc0 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon83-o.svg @@ -0,0 +1,84 @@ + + + + + + image/svg+xml + + img_upload + + + + + + img_upload + Created with Sketch. + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon84-o.svg b/docs/en/tools/desktop/ukui/figures/icon84-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9bd11b9e7b45b506dd7e1c87d09d545d8f48af06 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon84-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon86-o.svg b/docs/en/tools/desktop/ukui/figures/icon86-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..5da20233309c43d4fc7b315f441cde476c835c67 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon86-o.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon88-o.svg b/docs/en/tools/desktop/ukui/figures/icon88-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..c2570c26575fd14cb5e9d9fe77831d2e8f6c9333 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon88-o.svg @@ -0,0 +1,13 @@ + + + + Left + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/icon9.png b/docs/en/tools/desktop/ukui/figures/icon9.png new file mode 100644 index 0000000000000000000000000000000000000000..a07c9ab8e51decd9a3bca8c969d2ae95bd68512c Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/icon9.png differ diff --git a/docs/en/tools/desktop/ukui/figures/icon90-o.svg b/docs/en/tools/desktop/ukui/figures/icon90-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..79b5e0a141f7969a8f77ae61f4c240de7187afe9 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon90-o.svg @@ -0,0 +1,12 @@ + + + + lock_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/icon92-o.svg b/docs/en/tools/desktop/ukui/figures/icon92-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..21341b64a832e1935252aa82e7a4e0b083c16eae --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon92-o.svg @@ -0,0 +1,12 @@ + + + + logout_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/icon94-o.svg b/docs/en/tools/desktop/ukui/figures/icon94-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..a47044149a02101dbd24a3fdb2f3ead77efca6c1 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon94-o.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon97-o.svg b/docs/en/tools/desktop/ukui/figures/icon97-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..4f4670de29d8c86885b5aa806b2c8cdc6fc16dcb --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon97-o.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/ukui/figures/icon99-o.svg b/docs/en/tools/desktop/ukui/figures/icon99-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e9a3aa60a51404c9390bfbea8d8ff09edc0e2e32 --- /dev/null +++ b/docs/en/tools/desktop/ukui/figures/icon99-o.svg @@ -0,0 +1,11 @@ + + + notes + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/ukui/figures/kiran-1.png b/docs/en/tools/desktop/ukui/figures/kiran-1.png new file mode 100644 index 0000000000000000000000000000000000000000..59b632062ba3ff6e26c550567e858eb4dfdfc780 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-1.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-10.png b/docs/en/tools/desktop/ukui/figures/kiran-10.png new file mode 100644 index 0000000000000000000000000000000000000000..18cfa3074af1f4b8d49d064a77b016f24ab8c17c Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-10.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-11.png b/docs/en/tools/desktop/ukui/figures/kiran-11.png new file mode 100644 index 0000000000000000000000000000000000000000..b58fbb7ce8a798d5355855a4ac0638540df74d9e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-11.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-12.png b/docs/en/tools/desktop/ukui/figures/kiran-12.png new file mode 100644 index 0000000000000000000000000000000000000000..920d0c7112be6bed509773413de36506d748b822 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-12.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-13.png b/docs/en/tools/desktop/ukui/figures/kiran-13.png new file mode 100644 index 0000000000000000000000000000000000000000..f6632732bd2e8a10d0cda2bd0550f43741a7ba97 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-13.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-14.png b/docs/en/tools/desktop/ukui/figures/kiran-14.png new file mode 100644 index 0000000000000000000000000000000000000000..52eae7cc40fe4f7c6b2a8fe9744209a1fcbc30d8 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-14.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-15.png b/docs/en/tools/desktop/ukui/figures/kiran-15.png new file mode 100644 index 0000000000000000000000000000000000000000..5496c56ca72983780b9785d2d15c4008fb73aeef Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-15.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-16.png b/docs/en/tools/desktop/ukui/figures/kiran-16.png new file mode 100644 index 0000000000000000000000000000000000000000..6125b257245aa89f9b6592ed5b14a95d5699076e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-16.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-17.png b/docs/en/tools/desktop/ukui/figures/kiran-17.png new file mode 100644 index 0000000000000000000000000000000000000000..d8a4cb88017efe9f41f78ffc2f9de06dedcc1b23 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-17.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-18.png b/docs/en/tools/desktop/ukui/figures/kiran-18.png new file mode 100644 index 0000000000000000000000000000000000000000..0cb0c50d15597998fbd4cf3db2d1d0f9ec3c920e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-18.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-19.png b/docs/en/tools/desktop/ukui/figures/kiran-19.png new file mode 100644 index 0000000000000000000000000000000000000000..58ef2d33a52cf6404ea03b6a2d37f8d8b8391539 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-19.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-2.png b/docs/en/tools/desktop/ukui/figures/kiran-2.png new file mode 100644 index 0000000000000000000000000000000000000000..088bf53c1e763924e7cee46d0cdac98ad0a9d5e2 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-2.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-20.png b/docs/en/tools/desktop/ukui/figures/kiran-20.png new file mode 100644 index 0000000000000000000000000000000000000000..e8608485553033eb2ae141162e4300fa48c578cd Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-20.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-21.png b/docs/en/tools/desktop/ukui/figures/kiran-21.png new file mode 100644 index 0000000000000000000000000000000000000000..4d4c0ff304bdfbc8e715d2e756315a005c008336 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-21.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-22.png b/docs/en/tools/desktop/ukui/figures/kiran-22.png new file mode 100644 index 0000000000000000000000000000000000000000..6778d5a40a82e699da9531f4727a196d1442b9ae Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-22.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-23.png b/docs/en/tools/desktop/ukui/figures/kiran-23.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1d5e284eb299a771c5abbfdff611270ddf2449 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-23.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-24.png b/docs/en/tools/desktop/ukui/figures/kiran-24.png new file mode 100644 index 0000000000000000000000000000000000000000..a3ed57f9e9c300a65f867d29a44f287405a0509c Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-24.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-25.png b/docs/en/tools/desktop/ukui/figures/kiran-25.png new file mode 100644 index 0000000000000000000000000000000000000000..694e6173dfbf1fda8d07670a8e3daf4fbeb263ac Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-25.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-26.png b/docs/en/tools/desktop/ukui/figures/kiran-26.png new file mode 100644 index 0000000000000000000000000000000000000000..3b6ae2eeff3aae39107f15b60c5bb14ffc787cd8 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-26.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-27.png b/docs/en/tools/desktop/ukui/figures/kiran-27.png new file mode 100644 index 0000000000000000000000000000000000000000..3b6ae2eeff3aae39107f15b60c5bb14ffc787cd8 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-27.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-28.png b/docs/en/tools/desktop/ukui/figures/kiran-28.png new file mode 100644 index 0000000000000000000000000000000000000000..01ff3a8f47248d96c714e78b80fd81cd1ed16e0f Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-28.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-29.png b/docs/en/tools/desktop/ukui/figures/kiran-29.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ad5b4438eae441f6086ce5e1aae2e6755aa12a Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-29.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-3.png b/docs/en/tools/desktop/ukui/figures/kiran-3.png new file mode 100644 index 0000000000000000000000000000000000000000..e1399424c52eee8804f9433c9e9bf203950008c6 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-3.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-30.png b/docs/en/tools/desktop/ukui/figures/kiran-30.png new file mode 100644 index 0000000000000000000000000000000000000000..c1efc1e3931a129affd5dfcea9e319556e492f04 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-30.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-31.png b/docs/en/tools/desktop/ukui/figures/kiran-31.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ad5b4438eae441f6086ce5e1aae2e6755aa12a Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-31.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-32.png b/docs/en/tools/desktop/ukui/figures/kiran-32.png new file mode 100644 index 0000000000000000000000000000000000000000..fd900ec891b09313a7c558c61213b1816b803034 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-32.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-33.png b/docs/en/tools/desktop/ukui/figures/kiran-33.png new file mode 100644 index 0000000000000000000000000000000000000000..64ba70b08ed63c6e0942478d61e36a8c443f0604 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-33.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-34.png b/docs/en/tools/desktop/ukui/figures/kiran-34.png new file mode 100644 index 0000000000000000000000000000000000000000..4b869e7d172e2f2889d487157b92204a28a8dc4e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-34.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-35.png b/docs/en/tools/desktop/ukui/figures/kiran-35.png new file mode 100644 index 0000000000000000000000000000000000000000..9b383f3c84964b4fc34c4d8e75400325f93908bc Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-35.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-36.png b/docs/en/tools/desktop/ukui/figures/kiran-36.png new file mode 100644 index 0000000000000000000000000000000000000000..0b16632852c5024e2c6ec4fbd49513e3b7a2b146 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-36.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-37.png b/docs/en/tools/desktop/ukui/figures/kiran-37.png new file mode 100644 index 0000000000000000000000000000000000000000..2be3cc3b2528260c579b59f529e7a5663f1cc779 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-37.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-38.png b/docs/en/tools/desktop/ukui/figures/kiran-38.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1ffaf3aa920f922357f6d48700f42974600d77 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-38.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-39.png b/docs/en/tools/desktop/ukui/figures/kiran-39.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0e5add782b6c9cf4a8b9f6473c96641c39bd1d Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-39.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-4.png b/docs/en/tools/desktop/ukui/figures/kiran-4.png new file mode 100644 index 0000000000000000000000000000000000000000..bd318280b403912ab4846b694592d580b9e5d242 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-4.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-40.png b/docs/en/tools/desktop/ukui/figures/kiran-40.png new file mode 100644 index 0000000000000000000000000000000000000000..083031058ff47dc1550881d3a9f189861d3e8563 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-40.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-41.png b/docs/en/tools/desktop/ukui/figures/kiran-41.png new file mode 100644 index 0000000000000000000000000000000000000000..582893929e2c10a96c49696411bbed3ea9fd7c55 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-41.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-42.png b/docs/en/tools/desktop/ukui/figures/kiran-42.png new file mode 100644 index 0000000000000000000000000000000000000000..eede1243506ccd309ee707465f56c31581dd8554 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-42.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-43.0.png b/docs/en/tools/desktop/ukui/figures/kiran-43.0.png new file mode 100644 index 0000000000000000000000000000000000000000..caacc027322d4b7480e6508d4a1b4a13eefcf788 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-43.0.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-43.png b/docs/en/tools/desktop/ukui/figures/kiran-43.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea9f45ed8f327fce426352c4ae7fbf06cbefc84 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-43.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-44.png b/docs/en/tools/desktop/ukui/figures/kiran-44.png new file mode 100644 index 0000000000000000000000000000000000000000..c86a100005f89dbb9b24055e42d716205d47399e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-44.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-45.png b/docs/en/tools/desktop/ukui/figures/kiran-45.png new file mode 100644 index 0000000000000000000000000000000000000000..c5b5d75f972e594587f3393c8d384dcd76e7477e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-45.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-46.png b/docs/en/tools/desktop/ukui/figures/kiran-46.png new file mode 100644 index 0000000000000000000000000000000000000000..e9a28632c62de95d8ea2d436ba9bc705ff980991 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-46.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-47.png b/docs/en/tools/desktop/ukui/figures/kiran-47.png new file mode 100644 index 0000000000000000000000000000000000000000..a3606e3c899f944eb84d206d98cedc3377197c97 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-47.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-48.png b/docs/en/tools/desktop/ukui/figures/kiran-48.png new file mode 100644 index 0000000000000000000000000000000000000000..b69202c9a83bfc2c835ab166ef0fc2455bb4bcd3 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-48.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-49.png b/docs/en/tools/desktop/ukui/figures/kiran-49.png new file mode 100644 index 0000000000000000000000000000000000000000..d739e6107fd80ecd741dacaaf9dfb868afc61e37 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-49.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-5.png b/docs/en/tools/desktop/ukui/figures/kiran-5.png new file mode 100644 index 0000000000000000000000000000000000000000..154dd54d43b5b98682eb798518046e72fc7e3f83 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-5.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-50.png b/docs/en/tools/desktop/ukui/figures/kiran-50.png new file mode 100644 index 0000000000000000000000000000000000000000..96957676afc9f66bcc4b63c5e39eb8890f108015 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-50.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-6.png b/docs/en/tools/desktop/ukui/figures/kiran-6.png new file mode 100644 index 0000000000000000000000000000000000000000..927b475d6687d60f04fed8a535b2225a8f4b23f7 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-6.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-7.png b/docs/en/tools/desktop/ukui/figures/kiran-7.png new file mode 100644 index 0000000000000000000000000000000000000000..254ef11f36d958f6ef7c70853e5f61032f825463 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-7.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-8.png b/docs/en/tools/desktop/ukui/figures/kiran-8.png new file mode 100644 index 0000000000000000000000000000000000000000..29b5845d2fa94cba92719b8649a5e86c926ea911 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-8.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kiran-9.png b/docs/en/tools/desktop/ukui/figures/kiran-9.png new file mode 100644 index 0000000000000000000000000000000000000000..46bcfdd0e1e88ad0f0ade4a3990c3ac5d66060e7 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kiran-9.png differ diff --git a/docs/en/tools/desktop/ukui/figures/kubesphere.png b/docs/en/tools/desktop/ukui/figures/kubesphere.png new file mode 100644 index 0000000000000000000000000000000000000000..939dcb70202b19c7853cbfd8f27f6e8e4678ce26 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/kubesphere.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-1.png b/docs/en/tools/desktop/ukui/figures/xfce-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c04222d7757b84aa8afecf98815eee25211a86d7 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-1.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-2.png b/docs/en/tools/desktop/ukui/figures/xfce-2.png new file mode 100644 index 0000000000000000000000000000000000000000..fa7e1a1ae3c1535a1528f03636d2b62d727412af Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-2.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-3.png b/docs/en/tools/desktop/ukui/figures/xfce-3.png new file mode 100644 index 0000000000000000000000000000000000000000..6eeb68ad39f45ff476f1d18b8cd34492ec1f542b Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-3.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-4.png b/docs/en/tools/desktop/ukui/figures/xfce-4.png new file mode 100644 index 0000000000000000000000000000000000000000..f66de500fad7c847c2fea2e3774413d1c38e642e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-4.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-5.png b/docs/en/tools/desktop/ukui/figures/xfce-5.png new file mode 100644 index 0000000000000000000000000000000000000000..0258b0e5cf6c7c13d88b0431f4b0221e86451ce8 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-5.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-6.png b/docs/en/tools/desktop/ukui/figures/xfce-6.png new file mode 100644 index 0000000000000000000000000000000000000000..f2027b37021b260a97ff56a32026a53d00db0763 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-6.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-7.png b/docs/en/tools/desktop/ukui/figures/xfce-7.png new file mode 100644 index 0000000000000000000000000000000000000000..b7a94df356b7b9f7dca3d305d066ec854406aaab Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-7.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-71.png b/docs/en/tools/desktop/ukui/figures/xfce-71.png new file mode 100644 index 0000000000000000000000000000000000000000..6e2ff40536d18253dcfd4a69396e8e96817f704a Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-71.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-8.png b/docs/en/tools/desktop/ukui/figures/xfce-8.png new file mode 100644 index 0000000000000000000000000000000000000000..4ae9885b617e49cba84140e84dd6b354ff55f92c Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-8.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-81.png b/docs/en/tools/desktop/ukui/figures/xfce-81.png new file mode 100644 index 0000000000000000000000000000000000000000..b97c9a81c2a07efe361e6dc6ee8bed5db445ecfa Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-81.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-811.png b/docs/en/tools/desktop/ukui/figures/xfce-811.png new file mode 100644 index 0000000000000000000000000000000000000000..21447e37a5dd94fc88cb3ec0a11cd0dc0d50cf36 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-811.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-812.png b/docs/en/tools/desktop/ukui/figures/xfce-812.png new file mode 100644 index 0000000000000000000000000000000000000000..d505f1ac8111062a172b9fb5f5717d72f653f1b8 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-812.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-813.png b/docs/en/tools/desktop/ukui/figures/xfce-813.png new file mode 100644 index 0000000000000000000000000000000000000000..218d3b80c83cade14acc0c0baa4532710d1959dd Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-813.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-814.png b/docs/en/tools/desktop/ukui/figures/xfce-814.png new file mode 100644 index 0000000000000000000000000000000000000000..6ccbe910bd32cb4d619ba47d2fcb354424e80451 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-814.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-82.png b/docs/en/tools/desktop/ukui/figures/xfce-82.png new file mode 100644 index 0000000000000000000000000000000000000000..170deb5fb43f4e924d5ba4eba94a02c341d31515 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-82.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-821.png b/docs/en/tools/desktop/ukui/figures/xfce-821.png new file mode 100644 index 0000000000000000000000000000000000000000..690f3f0b528dfdaf6586549cdeb105df2214fc44 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-821.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-83.png b/docs/en/tools/desktop/ukui/figures/xfce-83.png new file mode 100644 index 0000000000000000000000000000000000000000..95e4844c0ece09819d3e9f1e8457bbf371b1282e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-83.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-831.png b/docs/en/tools/desktop/ukui/figures/xfce-831.png new file mode 100644 index 0000000000000000000000000000000000000000..61da16b7871a085a6c373a1262c0f785fb415e60 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-831.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-832.png b/docs/en/tools/desktop/ukui/figures/xfce-832.png new file mode 100644 index 0000000000000000000000000000000000000000..87b59b42d86ebd205750e162d5f2751b4d87181e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-832.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-84.png b/docs/en/tools/desktop/ukui/figures/xfce-84.png new file mode 100644 index 0000000000000000000000000000000000000000..1afe9d9bd51af83c99793666bad47d231bba5c7b Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-84.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-841.png b/docs/en/tools/desktop/ukui/figures/xfce-841.png new file mode 100644 index 0000000000000000000000000000000000000000..35875b40b8c95ce32652003daa5caf065747725f Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-841.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-842.png b/docs/en/tools/desktop/ukui/figures/xfce-842.png new file mode 100644 index 0000000000000000000000000000000000000000..b4031b575ffc3e9aa5a8edc7826fe28af97d0f23 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-842.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-85.png b/docs/en/tools/desktop/ukui/figures/xfce-85.png new file mode 100644 index 0000000000000000000000000000000000000000..bce9a0165290167d5fceee22d74f2abf4aed28fd Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-85.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-851.png b/docs/en/tools/desktop/ukui/figures/xfce-851.png new file mode 100644 index 0000000000000000000000000000000000000000..15c9e2d6d04e9b712bdf88d0ee1e7246a8d7b83e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-851.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-86.png b/docs/en/tools/desktop/ukui/figures/xfce-86.png new file mode 100644 index 0000000000000000000000000000000000000000..d78bc4ae0dbf13c3ad40b29468bd44056817e522 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-86.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-861.png b/docs/en/tools/desktop/ukui/figures/xfce-861.png new file mode 100644 index 0000000000000000000000000000000000000000..9a58733007cfac1c42ff244b52ee14c75051d852 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-861.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-87.png b/docs/en/tools/desktop/ukui/figures/xfce-87.png new file mode 100644 index 0000000000000000000000000000000000000000..ee5844bcfa836ec8ecf0a5fea125dcab530ad6db Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-87.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-9.png b/docs/en/tools/desktop/ukui/figures/xfce-9.png new file mode 100644 index 0000000000000000000000000000000000000000..5586c4f62cc161665b91a56ad23b2320901901c0 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-9.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-91.png b/docs/en/tools/desktop/ukui/figures/xfce-91.png new file mode 100644 index 0000000000000000000000000000000000000000..ee69879bb4ad66405b045af5e3965e275fe8eabf Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-91.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-911.png b/docs/en/tools/desktop/ukui/figures/xfce-911.png new file mode 100644 index 0000000000000000000000000000000000000000..b49416558e9ab844fda2026b76e2e900ac106842 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-911.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-92.png b/docs/en/tools/desktop/ukui/figures/xfce-92.png new file mode 100644 index 0000000000000000000000000000000000000000..78dd6313c603aad9ebd37fe68e06f98b2a3b331e Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-92.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-921.png b/docs/en/tools/desktop/ukui/figures/xfce-921.png new file mode 100644 index 0000000000000000000000000000000000000000..0681efd633cff00fe8572579b8971933cfc41dc1 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-921.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-93.png b/docs/en/tools/desktop/ukui/figures/xfce-93.png new file mode 100644 index 0000000000000000000000000000000000000000..06ac80c152fefbe1ad2ba1c989f6acfbbaf1a992 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-93.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-931.png b/docs/en/tools/desktop/ukui/figures/xfce-931.png new file mode 100644 index 0000000000000000000000000000000000000000..591a6d21d8fe69aed84d35316af506771a26ac01 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-931.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-94.png b/docs/en/tools/desktop/ukui/figures/xfce-94.png new file mode 100644 index 0000000000000000000000000000000000000000..f48064ff5902c4ea740ccba9a1640cbca27b5b72 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-94.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-941.png b/docs/en/tools/desktop/ukui/figures/xfce-941.png new file mode 100644 index 0000000000000000000000000000000000000000..aaee48a09a1e7233d25f68c6a74c7c39edc73b1f Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-941.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-95.png b/docs/en/tools/desktop/ukui/figures/xfce-95.png new file mode 100644 index 0000000000000000000000000000000000000000..bda965b15a859e4cccf4b80f62875f79eb3470fd Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-95.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-951.png b/docs/en/tools/desktop/ukui/figures/xfce-951.png new file mode 100644 index 0000000000000000000000000000000000000000..1d8ff807ac84bdae0dc935c3964d10701b5d47dc Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-951.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-96.png b/docs/en/tools/desktop/ukui/figures/xfce-96.png new file mode 100644 index 0000000000000000000000000000000000000000..29ce24923477065b98cacf603f185113e9959069 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-96.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-961.png b/docs/en/tools/desktop/ukui/figures/xfce-961.png new file mode 100644 index 0000000000000000000000000000000000000000..9d2944ae05699b8424695c865242c1c4f5d60fac Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-961.png differ diff --git a/docs/en/tools/desktop/ukui/figures/xfce-962.png b/docs/en/tools/desktop/ukui/figures/xfce-962.png new file mode 100644 index 0000000000000000000000000000000000000000..72c65f9675d8259f327077ce7f7212bd2b17a588 Binary files /dev/null and b/docs/en/tools/desktop/ukui/figures/xfce-962.png differ diff --git a/docs/en/tools/desktop/ukui/ukui_installation.md b/docs/en/tools/desktop/ukui/ukui_installation.md new file mode 100644 index 0000000000000000000000000000000000000000..9025b18a3c6c57c69a8b575d79af5b678e884c2e --- /dev/null +++ b/docs/en/tools/desktop/ukui/ukui_installation.md @@ -0,0 +1,28 @@ +# UKUI Installation + +UKUI is a Linux desktop built by the KylinSoft software team over the years, primarily based on GTK and QT. Compared to other UI interfaces, UKUI is easy to use. The components of UKUI are small and low coupling, can run alone without relying on other suites. It can provide user a friendly and efficient experience. + +UKUI supports both x86_64 and aarch64 architectures. + +You are advised to create an administrator user before installing UKUI. + +1. Download openEuler 22.03 LTS SP4 and update the software source. + + ```shell + sudo dnf update + ``` + +2. Install UKUI. + + ```shell + sudo dnf install ukui + ``` + +3. If you want to set the system to start with the graphical interface after confirming the installation, run the following command and reboot the system (`reboot`). + + ```shell + systemctl set-default graphical.target + ``` + +UKUI is constantly updated. Please check the latest installation method: +openEuler UKUI Issues diff --git a/docs/en/tools/desktop/ukui/ukui_user_guide.md b/docs/en/tools/desktop/ukui/ukui_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..8a856df1588e5cd5d7f393a8c87ab257881dca45 --- /dev/null +++ b/docs/en/tools/desktop/ukui/ukui_user_guide.md @@ -0,0 +1,380 @@ +# UKUI Desktop Environment + +## Overview + +The desktop environment is the basis for GUI-based operations. UKUI provides multiple functions including taskbar and start menu. The home screen is shown in figure below. + +![Fig. 1 Home screen](./figures/1.png) + +## Desktop + +### Desktop Icons + +The Computer, Recycle Bin and Home folder icons are displayed on the desktop by default. Double click an icon to open the page. The functions are shown in table below. + +| Icon | Description | +| :----------------------- | :----------------------------------------------------------------- | +| ![](./figures/icon1.png) | Computer: shows the drives and hardwares connected to the machine. | +| ![](./figures/icon2.png) | Recycle Bin: shows documents that have been deleted. | +| ![](./figures/icon3.png) | Personal: shows the user's home directory. | + +Right-clicking "Computer" and selecting "Properties" shows the current system version, kernel version, and other related information. + +![Fig. 2 "Computer" - "Properties"-big](./figures/2.png) + +### Context Menu + +Right-click on the desktop blank area to display the context menu, as shown in figure below. + +![Fig. 3 Right-click Menu](./figures/3.png) + +Some of the options are described in table below. + +| Option | Description | +| :-------- | :-------------------------------------------------------- | +| New | Creates folders, documents, and WPS files. | +| View type | Displays small, medium, large, or super large icons. | +| Sort by | Sorts files by name, type, size, or date of modification. | + +## Taskbar + +### Basic Function + +The taskbar is located at the bottom and includes the start menu, multi view switch, file browser, Firefox, WPS, and tray. + +![Fig. 4 Taskbar](./figures/4.png) + +| Component | Description | +| :----------------------- | :------------------------------------------------------------------------------------------------------------------------------------------ | +| ![](./figures/icon4.png) | Start menu: Open the start menu to find applications and files. | +| ![](./figures/icon5.png) | Multi view switch: Operate in multiple workspaces. | +| ![](./figures/icon6.png) | File browser: Browse and manage documents in the system. | +| ![](./figures/icon7.png) | Firefox: Access the Internet conveniently and safely. | +| ![](./figures/icon8.png) | WPS: Perform the most commonly used office operations to process text, tables, and presentations. | +| Window Display Area | The blank area in the middle of the task bar displays the running programs or opened documents, and allows you to close and top the window. | +| ![](./figures/icon9.png) | Tray: Change settings for sound, Kylin Weather, internet connection, input method, notification center, date, and night mode. | +| Show Desktop | The button on the far right is used to minimize all windows on the desktop or restore the windows. | + +#### Multi View Switch + +Click the icon "![](./figures/icon10-o.png)" on the taskbar to enter the interface shown in figure below, and select the operation area that users need to work on at the moment in multiple work areas. + +![Fig. 5 Multi View Switch-big](./figures/5.png) + +#### Preview Window + +Users move the mouse over the app icon in the taskbar, and then a small preview window will be shown if this app has already been opened. + +Hover over the specified window as shown below for hover state, the window will be slightly fuzzy glass effect (left), the rest of the window as default Status (right). + +![Fig. 6 Taskbar - Preview Window](./figures/6.png) + +Users can close the application by right-clicking on the app icon in the taskbar. + +![Fig. 7 Taskbar - Right-click Preview](./figures/7.png) + +#### Sidebar + +The sidebar is located at the right of the entire desktop. Click the icon "![](./figures/icon11-o.png)" in the taskbar tray menu to open the storage menu, and click the icon "![](./figures/icon12-o.png)" in Sidebar to pop up the sidebar as shown in figure below. + +The sidebar consists of two parts: Notification Center, Clipboard and Widget. + +![Fig. 8 Sidebar without message status-big](./figures/8.png) + +##### Notification Center + +Notification center will display a list of recent important and newest information. + +Select "Clear" in the upper right corner to clear the list of information; Select "Setting" in the upper right corner to go to the notification settings in the control center, and users can set which applications can show information and the quantity of information. + +![Fig. 9 Notification Center-big](./figures/9.png) + +Workspace at right side can be set to fold by applications. + +![Fig. 10 Fold messages by applications-big](./figures/10.png) + +Icon "![](./figures/icon13-o.png)" at the top right corner of the sidebar can store unimportant information. When the messages are more than 999+, it will be shown as the form of ![](./figures/icon14-o.png) which means limitless. + +![Fig. 11 Message Organizer](./figures/11.png) + +##### Clipboard + +Clipboard can save the contents those were recently selected to copy or cut, and users can operate them by using the icons in Table. + +![Fig. 12 Clipboard](./figures/12.png) + +Clicking "![](./figures/icon15-o.png)", users can edit the the contents of the clipboard. + +![Fig. 13 edit the content](./figures/13.png) + +| Icon | Description | Icon | Description | +| :------------------------ | :----------------- | :------------------------ | :--------------- | +| ![](./figures/icon16.png) | Copy the content | ![](./figures/icon18.png) | Edit the content | +| ![](./figures/icon17.png) | Delete the content | | | + +The second label of the clipboard is the small plug-in that contains alarm clock, sticky notes, and user feedback. + +![Fig. 14 Plug-in](./figures/14.png) + +#### Tray Menu + +##### Storage Menu + +Click "![](./figures/icon19-o.png)" at the tray menu to open the storage menu. + +It contains Kylin Weather, Input Method, Bluetooth, USB, etc. + +![Fig. 15 Storage Menu](./figures/15.png) + +##### Input Method + +The taskbar input method defaults to Sogou input method. Use the shortcut key "Ctrl+Space" to switch it out, and the "Shift" key to switch between Chinese and English modes. + +![Fig. 16 Input Method](./figures/16.png) + +##### USB + +When a USB flash drive is inserted, the dat inside is automatically read. + +Click "![](./figures/icon26-o.png)" to open the window as shown in figure below. + +When users need to umount the USB, please click the icon "![](./figures/icon27-o.png)". + +![Fig. 17 The status of USB](./figures/17.png) + +##### Power Supply + +Click the icon "![](./figures/icon28-o.png)": + +When no power supply is detected. + +![Fig. 18 No Power Supply](./figures/18.png) + +When power supply is detected. + +![Fig. 19 Have Power Supply](./figures/19.png) + +Users right-click the icon "![](./figures/icon30-o.png)" of power manager to open the power setting menu. + +It provides two setting options: adjust screen brightness, and set power and sleep. + +![Fig. 20 Power Manager](./figures/20.png) + +If the power manager pops up a"low battery" window, users can click to turn on the power save mode, and the power manager will set the machine to run in this mode immediately. + +![Fig. 21 Power Saving Mode](./figures/21.png) + +##### Network + +Users can choose wired or wireless network connections by clicking the icon "![](./figures/icon31-o.png)" of network manager. + +| Icon | Description | Icon | Description | +| :------------------------ | :----------------- | :------------------------ | :---------------------- | +| ![](./figures/icon32.png) | Connected | ![](./figures/icon37.png) | Unconnected | +| ![](./figures/icon33.png) | Connection limited | ![](./figures/icon38.png) | Locked | +| ![](./figures/icon34.png) | Connecting | ![](./figures/icon39.png) | Wifi connected | +| ![](./figures/icon35.png) | Wifi unconnected | ![](./figures/icon40.png) | Wifi connection limited | +| ![](./figures/icon36.png) | Wifi locked | ![](./figures/icon41.png) | Wifi connecting | + +![Fig. 22 Network Connection](./figures/22.png) + +- Wired Network + In the wired network connection interface, click on the wired network plan to expand. Details of the network. + + ![Fig. 23 Wired Network](./figures/23.png) + +- Wireless Network + Click the switch button in the upper right corner to turn on the wireless network connection, and select the WiFi from the list of available wireless networks. Enter the password to access the Internet. + + ![Fig. 24 Wireless Network](./figures/24.png) + +- Network Setting + Right-click the icon "![](./figures/icon42-o.png)" of network manager to pop up the setting menu. + + ![Fig. 25 Wired Network Setting](./figures/25.png) + + Click network setting to go to the setting window immediately. + + ![Fig. 26 Network Setting](./figures/26.png) + +##### Volume + +Click the icon "![](./figures/icon43-o.png)" to open the volume window, and there provides three modes. + +- Mini Mode + It only displays the volume of the speaker. + + ![Fig. 27 Mini Mode](./figures/27.png) + +- According to Equipment + It contains input equipment and output equipment. + + ![Fig. 28 According to Equipment List](./figures/28.png) + +- According to Application + It contains system volume and other applications' volume. + + ![Fig. 29 According to Application List](./figures/29.png) + +##### Calendar + +Click the date&time on the taskbar to open the calendar window. + +Users can view the day's information by filtering the year, month, day. The date will be displayed in large letters, with the time, the week, the festival,and the lunar calendar. Taboos can be seen by checking. + +![Fig. 30 Calendar-big](./figures/30.png) + +##### Night Mode + +Click the icon "![](./figures/icon44-o.png)" on the Taskbar and then the system changes to the night mode. + +#### Advanced Setting + +Right-click the Taskbar to open the menu. + +![Fig. 31 Right-Clicking Menu](./figures/31.png) + +Users can set the layout of taskbar in "Taskbar Settings". + +## Window + +### Window Manager + +The functions provided as shown in Table. + +| Function | Description | +| :---------------------- | :----------------------------------------------------------------------------------------------------------- | +| Title Bar | Show the title name of current window | +| Minimize/Maximize/Close | The three icon buttons at the right of the title bar correspond to minimize, maximize and close respectively | +| Side Sliding | Users can scroll up and down to view the page by the slider at the right of the window | +| Stack | Allow overlap among windows | +| Drag and Drop | Long press the left mouse button at the title bar to move the window to any position | +| Resize | Move the mouse to the corner of the window and long press the left button to resize the window | + +### Window Switch + +There are three ways to switch windows: + +- Click the window title on the Taskbar. + +- Click the different window at the desktop. + +- Use shortcut keys < Alt > + < Tab >. + +## Start Menu + +### Basic Function + +Click the button to open the "Start Menu". + +It provides sliding bar. + +![Fig. 32 Start Menu](./figures/32.png) + +#### Category Menu at right side + +When the mouse is over the right side of the start menu, it will appear a pre-expanded cue bar. Clicking to expand, and then three categories are showing at the right side by default: "Common Software", "Alphabetical Category", and "Functional category". + +- All Software: List all software, recently used software will be displayed on the top of this page. + +- Alphabetical Category: List all software by first letter. + +- Functional category: List all software by their functions. + +Users can click the button at top right corner to view full-screen menu mode. + +![Fig. 33 Full-screen Menu-big](./figures/33.png) + +#### Function Button at right side + +It provides User Avatar, Computer, Control Center and Shutdown four options. + +##### User Avatar + +Click "![](./figures/icon45-o.png)" to view user's information. + +##### Computer + +Click "![](./figures/icon46-o.png)" to open personal home folder + +##### Control Center + +Click "![](./figures/icon47-o.png)" to go to the control center. + +##### Shutdown + +###### Lock Screen + +When users do not need to use the computer temporarily, the lock screen can be selected (without affecting the current running state of the system) to prevent misoperations. And input the password to re-enter the system. + +The system will automatically lock the screen after a period of idle time by default. + +![Fig. 34 Lock Screen-big](./figures/34.png) + +###### Switch Users & Log Out + +When users want to select another user to log in using the computer, users can select "Log out" or "Switch user". + +At this point, the system will close all running applications; Therefore, please save the current jobs before performing this action. + +###### Shutdown & Reboot + +There are two ways: + +1)"Start Menu" > "Power" > "Shutdown" + +It will pop up a dialog box, and users can choose shutdown or reboot as needed. + +![Fig. 35 Shutdown Dialog Box-big](./figures/35.png) + +2)"Start Menu" > right side menu of the "Shutdown" button > "Shutdown"/"Reboot" + +The system will shutdown or reboot immediately without popping up the dialog box. + +### Advanced Setting + +Right-clicking Start Menu, it provides lock screen, switch user, log out, reboot, and shutdown five shortcut options. + +### Applications + +Users can search apps in the search box by key words. As shown in figure below, the result will show up automatically with the input. + +![Fig. 36 Search Apps](./figures/36.png) + +Right-clicking one app in the Start Menu, the right-click menu popping up. + +![Fig. 37 Right-click Menu](./figures/37.png) + +The options are described in table below. + +| Option | Description | +| :----------------------- | :--------------------------------------------------------------- | +| Attach to "All Software" | Add the selected software to the top of the list of All Software | +| Attach to Taskbar | Generate icon for the application on the Taskbar | +| Add to Desktop Shortcut | Generate shortcut icon for the application on the desktop | +| Uninstall | Remove the application | + +## FAQ + +### I Cannot Login to the System After Locking the Screen + +- Switch to character terminal by pressing **Ctrl + Alt + F2**. + +- Input the user-name and passwd to login to the system. + +- Do "sudo rm -rf ~/.Xauthority". + +- Switch to graphical interface by pressing **Ctrl + Alt + F1**, and input the password. + +## Appendix + +### Shortcut Key + +| Shortcut Key | Function | +| :------------------ | :------------------ | +| F5 | Refresh the desktop | +| F1 | Open the user-guide | +| Alt + Tab | Switch the window | +| win | Open the Start Menu | +| Ctrl + Alt + L | Lock Screen | +| Ctrl + Alt + Delete | Log out | diff --git a/docs/en/tools/desktop/xfce/_toc.yaml b/docs/en/tools/desktop/xfce/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6fbd65174fb4852481f6eb37c35a9b2248898754 --- /dev/null +++ b/docs/en/tools/desktop/xfce/_toc.yaml @@ -0,0 +1,8 @@ +label: Xfce User Guide +isManual: true +description: Install and use Xfce +sections: + - label: Installing Xfce + href: ./xfce_installation.md + - label: Using Xfce + href: ./xfce_user_guide.md diff --git a/docs/en/tools/desktop/xfce/figures/.keep b/docs/en/tools/desktop/xfce/figures/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/en/tools/desktop/xfce/figures/1.png b/docs/en/tools/desktop/xfce/figures/1.png new file mode 100644 index 0000000000000000000000000000000000000000..40af4242eebb440a76c749a8d970d50cd7b89bf4 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/1.png differ diff --git a/docs/en/tools/desktop/xfce/figures/10.png b/docs/en/tools/desktop/xfce/figures/10.png new file mode 100644 index 0000000000000000000000000000000000000000..e588ffbe3d8d7b66d92ae8f2b4bcec7c80d0592c Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/10.png differ diff --git a/docs/en/tools/desktop/xfce/figures/11.png b/docs/en/tools/desktop/xfce/figures/11.png new file mode 100644 index 0000000000000000000000000000000000000000..1989a5bb08155f920363e154e68bb148715c7e9e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/11.png differ diff --git a/docs/en/tools/desktop/xfce/figures/12.png b/docs/en/tools/desktop/xfce/figures/12.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6346161182d2cfeaf3818d5ec518ddb11c732e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/12.png differ diff --git a/docs/en/tools/desktop/xfce/figures/1202_1.jpg b/docs/en/tools/desktop/xfce/figures/1202_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..def242a5b9a70602a9aab7dd8048244e7d9f6793 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/1202_1.jpg differ diff --git a/docs/en/tools/desktop/xfce/figures/13.png b/docs/en/tools/desktop/xfce/figures/13.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7def1fb66c90da62acde799eaffca97e3b5396 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/13.png differ diff --git a/docs/en/tools/desktop/xfce/figures/14.png b/docs/en/tools/desktop/xfce/figures/14.png new file mode 100644 index 0000000000000000000000000000000000000000..3a27a66d57e284775420d467f90dcc02889bbffe Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/14.png differ diff --git a/docs/en/tools/desktop/xfce/figures/15.png b/docs/en/tools/desktop/xfce/figures/15.png new file mode 100644 index 0000000000000000000000000000000000000000..370bea32abcaa8a2b06a1a61c1455d4b35f43474 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/15.png differ diff --git a/docs/en/tools/desktop/xfce/figures/16.png b/docs/en/tools/desktop/xfce/figures/16.png new file mode 100644 index 0000000000000000000000000000000000000000..812ee462669c5263ef4bffc49ca4f9b6af4541c6 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/16.png differ diff --git a/docs/en/tools/desktop/xfce/figures/17.png b/docs/en/tools/desktop/xfce/figures/17.png new file mode 100644 index 0000000000000000000000000000000000000000..36e524b806874fa3788f5e4dcd78350686281107 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/17.png differ diff --git a/docs/en/tools/desktop/xfce/figures/18.png b/docs/en/tools/desktop/xfce/figures/18.png new file mode 100644 index 0000000000000000000000000000000000000000..51b32442980aa60646f77dabd53ade74f55891fe Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/18.png differ diff --git a/docs/en/tools/desktop/xfce/figures/19.png b/docs/en/tools/desktop/xfce/figures/19.png new file mode 100644 index 0000000000000000000000000000000000000000..c9457d09aa9f1662b2c9e4550cdbdb9f57dd020e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/19.png differ diff --git a/docs/en/tools/desktop/xfce/figures/2.png b/docs/en/tools/desktop/xfce/figures/2.png new file mode 100644 index 0000000000000000000000000000000000000000..97917cc245484a43bec8562757d920a06f123121 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/2.png differ diff --git a/docs/en/tools/desktop/xfce/figures/20.png b/docs/en/tools/desktop/xfce/figures/20.png new file mode 100644 index 0000000000000000000000000000000000000000..b0943189920d7a541d35da27340593ea93f92a17 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/20.png differ diff --git a/docs/en/tools/desktop/xfce/figures/21.png b/docs/en/tools/desktop/xfce/figures/21.png new file mode 100644 index 0000000000000000000000000000000000000000..e590c22c0ea28906b5f4ea7ccbc6ab11e47ad173 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/21.png differ diff --git a/docs/en/tools/desktop/xfce/figures/22.png b/docs/en/tools/desktop/xfce/figures/22.png new file mode 100644 index 0000000000000000000000000000000000000000..03a548b1ffb1f0ad53cfa5387af2721af90bca81 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/22.png differ diff --git a/docs/en/tools/desktop/xfce/figures/23.png b/docs/en/tools/desktop/xfce/figures/23.png new file mode 100644 index 0000000000000000000000000000000000000000..834c492094715cde1c02c91752ecabfe7921ed62 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/23.png differ diff --git a/docs/en/tools/desktop/xfce/figures/24.png b/docs/en/tools/desktop/xfce/figures/24.png new file mode 100644 index 0000000000000000000000000000000000000000..1881e868b74a60888b319576fa38fb4af92ba75c Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/24.png differ diff --git a/docs/en/tools/desktop/xfce/figures/25.png b/docs/en/tools/desktop/xfce/figures/25.png new file mode 100644 index 0000000000000000000000000000000000000000..f38839725d27a3486984d152e5d9de305364fbd2 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/25.png differ diff --git a/docs/en/tools/desktop/xfce/figures/26.png b/docs/en/tools/desktop/xfce/figures/26.png new file mode 100644 index 0000000000000000000000000000000000000000..6d7957119133ecb98b1b6b104e54a3a4647ec2a5 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/26.png differ diff --git a/docs/en/tools/desktop/xfce/figures/27.png b/docs/en/tools/desktop/xfce/figures/27.png new file mode 100644 index 0000000000000000000000000000000000000000..3e4733717fdc5172d6479b393005219e65e96df4 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/27.png differ diff --git a/docs/en/tools/desktop/xfce/figures/28.png b/docs/en/tools/desktop/xfce/figures/28.png new file mode 100644 index 0000000000000000000000000000000000000000..a77772e818e3f6c11acac3b9cfa18bad14a0a48c Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/28.png differ diff --git a/docs/en/tools/desktop/xfce/figures/29.png b/docs/en/tools/desktop/xfce/figures/29.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f58ffe5855295268298448744e5aadbdc55276 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/29.png differ diff --git a/docs/en/tools/desktop/xfce/figures/3.png b/docs/en/tools/desktop/xfce/figures/3.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb76b336957020ed6867d908e0a8bdcfc953c52 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/3.png differ diff --git a/docs/en/tools/desktop/xfce/figures/30.png b/docs/en/tools/desktop/xfce/figures/30.png new file mode 100644 index 0000000000000000000000000000000000000000..d91adefba1753959e90ccf4aa1501ac08d7144bd Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/30.png differ diff --git a/docs/en/tools/desktop/xfce/figures/31.png b/docs/en/tools/desktop/xfce/figures/31.png new file mode 100644 index 0000000000000000000000000000000000000000..0abef09ab438f5f8cfb68090993f55c493b8c15e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/31.png differ diff --git a/docs/en/tools/desktop/xfce/figures/32.png b/docs/en/tools/desktop/xfce/figures/32.png new file mode 100644 index 0000000000000000000000000000000000000000..d567cfbacc07a9eb46ff2c54a68432f45e034e94 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/32.png differ diff --git a/docs/en/tools/desktop/xfce/figures/33.png b/docs/en/tools/desktop/xfce/figures/33.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5896e2884520672c0bd88d68471b45a09c56fe Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/33.png differ diff --git a/docs/en/tools/desktop/xfce/figures/34.png b/docs/en/tools/desktop/xfce/figures/34.png new file mode 100644 index 0000000000000000000000000000000000000000..81bc9480fbbd81a97c559d7a6a74274deeab2bd1 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/34.png differ diff --git a/docs/en/tools/desktop/xfce/figures/35.png b/docs/en/tools/desktop/xfce/figures/35.png new file mode 100644 index 0000000000000000000000000000000000000000..ab2399847a643a87279337704e23fea7609bb211 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/35.png differ diff --git a/docs/en/tools/desktop/xfce/figures/36.png b/docs/en/tools/desktop/xfce/figures/36.png new file mode 100644 index 0000000000000000000000000000000000000000..536981609b9ae5d32be56bec612f2b3446146184 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/36.png differ diff --git a/docs/en/tools/desktop/xfce/figures/37.png b/docs/en/tools/desktop/xfce/figures/37.png new file mode 100644 index 0000000000000000000000000000000000000000..e39aa03587642dc1f8622fff515b05a9a3085b28 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/37.png differ diff --git a/docs/en/tools/desktop/xfce/figures/38.png b/docs/en/tools/desktop/xfce/figures/38.png new file mode 100644 index 0000000000000000000000000000000000000000..838f5ff0616a83cdf42edb053f4e72b93bfa644e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/38.png differ diff --git a/docs/en/tools/desktop/xfce/figures/39.png b/docs/en/tools/desktop/xfce/figures/39.png new file mode 100644 index 0000000000000000000000000000000000000000..12a379403d73a47b2fa564120a28fdb58d188963 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/39.png differ diff --git a/docs/en/tools/desktop/xfce/figures/4.png b/docs/en/tools/desktop/xfce/figures/4.png new file mode 100644 index 0000000000000000000000000000000000000000..5078e36aca713706d2cf08a3ebecdc3769951899 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/4.png differ diff --git a/docs/en/tools/desktop/xfce/figures/40.png b/docs/en/tools/desktop/xfce/figures/40.png new file mode 100644 index 0000000000000000000000000000000000000000..bf419894eab852b45604966c62fafa71f051c4df Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/40.png differ diff --git a/docs/en/tools/desktop/xfce/figures/41.png b/docs/en/tools/desktop/xfce/figures/41.png new file mode 100644 index 0000000000000000000000000000000000000000..f94b0ee72e0d4e9277e9b44b4268cfbdb8402104 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/41.png differ diff --git a/docs/en/tools/desktop/xfce/figures/42.png b/docs/en/tools/desktop/xfce/figures/42.png new file mode 100644 index 0000000000000000000000000000000000000000..3182e551c4e4b03885bad6339f1de514b3f55f8c Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/42.png differ diff --git a/docs/en/tools/desktop/xfce/figures/43.jpg b/docs/en/tools/desktop/xfce/figures/43.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26e9244f58ea9800081fd61ae135477f05b21b40 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/43.jpg differ diff --git a/docs/en/tools/desktop/xfce/figures/44.png b/docs/en/tools/desktop/xfce/figures/44.png new file mode 100644 index 0000000000000000000000000000000000000000..c3abaecd6e053272d81e0ad9bd183c6858b4f3c5 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/44.png differ diff --git a/docs/en/tools/desktop/xfce/figures/45.png b/docs/en/tools/desktop/xfce/figures/45.png new file mode 100644 index 0000000000000000000000000000000000000000..86b051acde857c88479714414f721a7f59cca483 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/45.png differ diff --git a/docs/en/tools/desktop/xfce/figures/46.png b/docs/en/tools/desktop/xfce/figures/46.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ec41c87628bf28c9905523f99ae93aebd13614 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/46.png differ diff --git a/docs/en/tools/desktop/xfce/figures/47.jpg b/docs/en/tools/desktop/xfce/figures/47.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf95f03c8ea0f84a878bc63af20972c9da71bc04 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/47.jpg differ diff --git a/docs/en/tools/desktop/xfce/figures/48.png b/docs/en/tools/desktop/xfce/figures/48.png new file mode 100644 index 0000000000000000000000000000000000000000..ef21fa1ce1e2e9848a8dca16e692de673df7c6d7 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/48.png differ diff --git a/docs/en/tools/desktop/xfce/figures/49.png b/docs/en/tools/desktop/xfce/figures/49.png new file mode 100644 index 0000000000000000000000000000000000000000..3b77668e5a4d1bdb3043c473dff9b36fa7144714 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/49.png differ diff --git a/docs/en/tools/desktop/xfce/figures/5.png b/docs/en/tools/desktop/xfce/figures/5.png new file mode 100644 index 0000000000000000000000000000000000000000..2976a745cfaede26594d6daa01cfc18d18b1de8b Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/5.png differ diff --git a/docs/en/tools/desktop/xfce/figures/50.png b/docs/en/tools/desktop/xfce/figures/50.png new file mode 100644 index 0000000000000000000000000000000000000000..b86a55fe4363f56fc18befc9d27025a75ca427ad Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/50.png differ diff --git a/docs/en/tools/desktop/xfce/figures/51.png b/docs/en/tools/desktop/xfce/figures/51.png new file mode 100644 index 0000000000000000000000000000000000000000..d427ac871dba9c32eb4ffe736d5352f8408da533 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/51.png differ diff --git a/docs/en/tools/desktop/xfce/figures/52.png b/docs/en/tools/desktop/xfce/figures/52.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca0a2db05c70bc25f9bb59e82d074f671cfc74e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/52.png differ diff --git a/docs/en/tools/desktop/xfce/figures/53.png b/docs/en/tools/desktop/xfce/figures/53.png new file mode 100644 index 0000000000000000000000000000000000000000..76fbc34a1d5621b83c2d8c93222766acad33350d Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/53.png differ diff --git a/docs/en/tools/desktop/xfce/figures/54.png b/docs/en/tools/desktop/xfce/figures/54.png new file mode 100644 index 0000000000000000000000000000000000000000..49ecae6f8941a118223f3765c23015df074c4983 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/54.png differ diff --git a/docs/en/tools/desktop/xfce/figures/56.png b/docs/en/tools/desktop/xfce/figures/56.png new file mode 100644 index 0000000000000000000000000000000000000000..36fee795bfe593b6246c8d6c2bddea9386b06f45 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/56.png differ diff --git a/docs/en/tools/desktop/xfce/figures/57.png b/docs/en/tools/desktop/xfce/figures/57.png new file mode 100644 index 0000000000000000000000000000000000000000..539d06b77b058a933cb154c43641d498050986e0 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/57.png differ diff --git a/docs/en/tools/desktop/xfce/figures/58.png b/docs/en/tools/desktop/xfce/figures/58.png new file mode 100644 index 0000000000000000000000000000000000000000..396ca16d873e54505bcdbd41d669366eea7f5dee Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/58.png differ diff --git a/docs/en/tools/desktop/xfce/figures/59.png b/docs/en/tools/desktop/xfce/figures/59.png new file mode 100644 index 0000000000000000000000000000000000000000..9b1de98ac4fe686937ca844d3e9481548a79ce63 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/59.png differ diff --git a/docs/en/tools/desktop/xfce/figures/6.png b/docs/en/tools/desktop/xfce/figures/6.png new file mode 100644 index 0000000000000000000000000000000000000000..275c23872f2353f007371672714902babcc3db53 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/6.png differ diff --git a/docs/en/tools/desktop/xfce/figures/60.jpg b/docs/en/tools/desktop/xfce/figures/60.jpg new file mode 100644 index 0000000000000000000000000000000000000000..033c88aaadd04f7d4058ec2eb5b2c70498319bf7 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/60.jpg differ diff --git a/docs/en/tools/desktop/xfce/figures/61.png b/docs/en/tools/desktop/xfce/figures/61.png new file mode 100644 index 0000000000000000000000000000000000000000..8df17062963a3baf92318a12ec34b1378122687b Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/61.png differ diff --git a/docs/en/tools/desktop/xfce/figures/62.png b/docs/en/tools/desktop/xfce/figures/62.png new file mode 100644 index 0000000000000000000000000000000000000000..ec312d6c0c22018c1745dd866da71ce9be47fbda Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/62.png differ diff --git a/docs/en/tools/desktop/xfce/figures/63.jpg b/docs/en/tools/desktop/xfce/figures/63.jpg new file mode 100644 index 0000000000000000000000000000000000000000..504f7cf59768f6fd1cd73a115d01fbc4e15a02e1 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/63.jpg differ diff --git a/docs/en/tools/desktop/xfce/figures/63.png b/docs/en/tools/desktop/xfce/figures/63.png new file mode 100644 index 0000000000000000000000000000000000000000..86b051acde857c88479714414f721a7f59cca483 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/63.png differ diff --git a/docs/en/tools/desktop/xfce/figures/64.png b/docs/en/tools/desktop/xfce/figures/64.png new file mode 100644 index 0000000000000000000000000000000000000000..cbbd2ede047e735c3766e08b04595f08cd72f5b2 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/64.png differ diff --git a/docs/en/tools/desktop/xfce/figures/7.png b/docs/en/tools/desktop/xfce/figures/7.png new file mode 100644 index 0000000000000000000000000000000000000000..4d397959ac7f6d166ef5a3b7084bd5c3c93b475f Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/7.png differ diff --git a/docs/en/tools/desktop/xfce/figures/8.png b/docs/en/tools/desktop/xfce/figures/8.png new file mode 100644 index 0000000000000000000000000000000000000000..8ade274092d7b3e461c96d7909a9d89d3a944f09 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/8.png differ diff --git a/docs/en/tools/desktop/xfce/figures/9.png b/docs/en/tools/desktop/xfce/figures/9.png new file mode 100644 index 0000000000000000000000000000000000000000..f7b2215404929346f1a814b0b1d6d482559c08b5 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/9.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-add-resource.png b/docs/en/tools/desktop/xfce/figures/HA-add-resource.png new file mode 100644 index 0000000000000000000000000000000000000000..ac24895a1247828d248132f6c789ad8ef51a57e4 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-add-resource.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-apache-show.png b/docs/en/tools/desktop/xfce/figures/HA-apache-show.png new file mode 100644 index 0000000000000000000000000000000000000000..c216500910f75f2de1108f6b618c5c08f4df8bae Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-apache-show.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-apache-suc.png b/docs/en/tools/desktop/xfce/figures/HA-apache-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..23a7aaa702e3e68190ff7e01a5a673aee2c92409 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-apache-suc.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-api.png b/docs/en/tools/desktop/xfce/figures/HA-api.png new file mode 100644 index 0000000000000000000000000000000000000000..f825fe005705d30809d12df97958cff0e5a80135 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-api.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-clone-suc.png b/docs/en/tools/desktop/xfce/figures/HA-clone-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..4b6099ccc88d4f6f907a0c4563e729ab2a4dece1 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-clone-suc.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-clone.png b/docs/en/tools/desktop/xfce/figures/HA-clone.png new file mode 100644 index 0000000000000000000000000000000000000000..1b09ab73849494f4ffd759fa612ae3c241bd9c1d Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-clone.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-corosync.png b/docs/en/tools/desktop/xfce/figures/HA-corosync.png new file mode 100644 index 0000000000000000000000000000000000000000..c4d93242e65c503b6e1b6a457e2517f647984a66 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-corosync.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-firstchoice-cmd.png b/docs/en/tools/desktop/xfce/figures/HA-firstchoice-cmd.png new file mode 100644 index 0000000000000000000000000000000000000000..a265bab07f1d8e46d9d965975be180a8de6c9eb2 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-firstchoice-cmd.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-firstchoice.png b/docs/en/tools/desktop/xfce/figures/HA-firstchoice.png new file mode 100644 index 0000000000000000000000000000000000000000..bd982ddcea55c629c0257fca86051a9ffa77e7b4 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-firstchoice.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-group-new-suc.png b/docs/en/tools/desktop/xfce/figures/HA-group-new-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..437fd01ee83a9a1f65c12838fe56eea8435f6759 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-group-new-suc.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-group-new-suc2.png b/docs/en/tools/desktop/xfce/figures/HA-group-new-suc2.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb933bd761f9808de95a324a50226ff041ebd4f Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-group-new-suc2.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-group-new.png b/docs/en/tools/desktop/xfce/figures/HA-group-new.png new file mode 100644 index 0000000000000000000000000000000000000000..9c914d0cc2e14f3220fc4346175961f129efb37b Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-group-new.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-group-suc.png b/docs/en/tools/desktop/xfce/figures/HA-group-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..2338580343833ebab08627be3a2efbcdb48aef9e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-group-suc.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-group.png b/docs/en/tools/desktop/xfce/figures/HA-group.png new file mode 100644 index 0000000000000000000000000000000000000000..6897817665dee90c0f8c47c6a3cb4bb09db52d78 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-group.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-home-page.png b/docs/en/tools/desktop/xfce/figures/HA-home-page.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a7a82dc412250d4c0984b3876c6f93c6aca789 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-home-page.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-login.png b/docs/en/tools/desktop/xfce/figures/HA-login.png new file mode 100644 index 0000000000000000000000000000000000000000..65d0ae11ec810da7574ec72bebf6e1b020c94a0d Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-login.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-mariadb-suc.png b/docs/en/tools/desktop/xfce/figures/HA-mariadb-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..6f6756c945121715edc623bd9a848bc48ffeb4ca Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-mariadb-suc.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-mariadb.png b/docs/en/tools/desktop/xfce/figures/HA-mariadb.png new file mode 100644 index 0000000000000000000000000000000000000000..d29587c8609b9d6aefeb07170901361b5ef8402d Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-mariadb.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-nfs-suc.png b/docs/en/tools/desktop/xfce/figures/HA-nfs-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..c0ea6af79e91649f1ad7d97ab6c2a0069a4f4fb8 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-nfs-suc.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-nfs.png b/docs/en/tools/desktop/xfce/figures/HA-nfs.png new file mode 100644 index 0000000000000000000000000000000000000000..f6917938eec2e0431a9891c067475dd0b21c1bd9 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-nfs.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-pacemaker.png b/docs/en/tools/desktop/xfce/figures/HA-pacemaker.png new file mode 100644 index 0000000000000000000000000000000000000000..7681f963f67d2b803fef6fb2c3247384136201f8 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-pacemaker.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-pcs-status.png b/docs/en/tools/desktop/xfce/figures/HA-pcs-status.png new file mode 100644 index 0000000000000000000000000000000000000000..fb150fba9f6258658702b35caacf98076d1fd109 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-pcs-status.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-pcs.png b/docs/en/tools/desktop/xfce/figures/HA-pcs.png new file mode 100644 index 0000000000000000000000000000000000000000..283670d7c3d0961ee1cb41345c2b2a013d7143b0 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-pcs.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-refresh.png b/docs/en/tools/desktop/xfce/figures/HA-refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..c2678c0c2945acbabfbeae0d5de8924a216bbf31 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-refresh.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-vip-suc.png b/docs/en/tools/desktop/xfce/figures/HA-vip-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..313ce56e14f931c78dad4349ed57ab3fd7907f50 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-vip-suc.png differ diff --git a/docs/en/tools/desktop/xfce/figures/HA-vip.png b/docs/en/tools/desktop/xfce/figures/HA-vip.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b417df2e64527d3b29d0289756dfbb01bf66ec Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/HA-vip.png differ diff --git a/docs/en/tools/desktop/xfce/figures/dde-1.png b/docs/en/tools/desktop/xfce/figures/dde-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fb1d5177c39262ed182f10a57fdae850d007eeb1 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/dde-1.png differ diff --git a/docs/en/tools/desktop/xfce/figures/dde-2.png b/docs/en/tools/desktop/xfce/figures/dde-2.png new file mode 100644 index 0000000000000000000000000000000000000000..be5d296937bd17b9646b32c80934aa76738027af Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/dde-2.png differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-1.PNG b/docs/en/tools/desktop/xfce/figures/gnome-1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ed57060770957f304a3fb7ca993241d56e90f541 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-1.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-10.PNG b/docs/en/tools/desktop/xfce/figures/gnome-10.PNG new file mode 100644 index 0000000000000000000000000000000000000000..94af842ca7d0de47db4d0030a0741d0cae634a21 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-10.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-11.PNG b/docs/en/tools/desktop/xfce/figures/gnome-11.PNG new file mode 100644 index 0000000000000000000000000000000000000000..022c764002542196b723eadaaaae080b3afc1d0f Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-11.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-12.PNG b/docs/en/tools/desktop/xfce/figures/gnome-12.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4255aa3e1629b2af94ec59ae0fe346d91da8ba61 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-12.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-13.PNG b/docs/en/tools/desktop/xfce/figures/gnome-13.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f6bad1c09c36bdef3ed4dd48c14e98c03a230cc7 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-13.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-14.PNG b/docs/en/tools/desktop/xfce/figures/gnome-14.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a661a4e759ff3107fc9bfa5f664a86f77051dfcf Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-14.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-15.PNG b/docs/en/tools/desktop/xfce/figures/gnome-15.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2e5a26c33b2cb432d4b7a79af8407b5b13592d09 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-15.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-16.PNG b/docs/en/tools/desktop/xfce/figures/gnome-16.PNG new file mode 100644 index 0000000000000000000000000000000000000000..178d5e836b69168c441676c4e77721e22f460981 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-16.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-17.PNG b/docs/en/tools/desktop/xfce/figures/gnome-17.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2ea9f9e1914bb90193689e3d35e48918dcc7c019 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-17.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-18.PNG b/docs/en/tools/desktop/xfce/figures/gnome-18.PNG new file mode 100644 index 0000000000000000000000000000000000000000..55b5c07ea89fca246600ff7ea0ff66f03427ddcb Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-18.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-19.PNG b/docs/en/tools/desktop/xfce/figures/gnome-19.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b9f78d01b726078d25d900e4ef9f9ffb1bdc9075 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-19.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-2.PNG b/docs/en/tools/desktop/xfce/figures/gnome-2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..cf86813c71dd47584c5f4d9c0d6fec29813c9dc9 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-2.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-20.PNG b/docs/en/tools/desktop/xfce/figures/gnome-20.PNG new file mode 100644 index 0000000000000000000000000000000000000000..37133665e2025c5267c3bf1ea742bc7295d0cb59 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-20.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-21.PNG b/docs/en/tools/desktop/xfce/figures/gnome-21.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0d0bc17b2a973d6e035b3d08097e0ad6138ed786 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-21.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-22.PNG b/docs/en/tools/desktop/xfce/figures/gnome-22.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4967a95e8c1fcf4fa5e6a799933149365e447725 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-22.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-23.PNG b/docs/en/tools/desktop/xfce/figures/gnome-23.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ac39542d77bdfe64b1c3d0119870cbd5e0136d17 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-23.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-24.PNG b/docs/en/tools/desktop/xfce/figures/gnome-24.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e4572c436249b329643a6777ddf6a2852fcab5a6 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-24.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-25.PNG b/docs/en/tools/desktop/xfce/figures/gnome-25.PNG new file mode 100644 index 0000000000000000000000000000000000000000..93ac3582bd0dc5a273614e20b89ea654fe02ff9d Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-25.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-26.PNG b/docs/en/tools/desktop/xfce/figures/gnome-26.PNG new file mode 100644 index 0000000000000000000000000000000000000000..98f349dab192b4b6a297d4907b9156c5d6240652 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-26.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-27.PNG b/docs/en/tools/desktop/xfce/figures/gnome-27.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ea319f8df41e1bdbccb34e597ccdb3c6d21a3727 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-27.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-28.PNG b/docs/en/tools/desktop/xfce/figures/gnome-28.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b2f1db5ea27cdfada82ba9572395598df2ecf648 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-28.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-29.PNG b/docs/en/tools/desktop/xfce/figures/gnome-29.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fc2f6a8a2bbc56af1b657a5a25359aa15183125e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-29.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-3.PNG b/docs/en/tools/desktop/xfce/figures/gnome-3.PNG new file mode 100644 index 0000000000000000000000000000000000000000..3ac1eb3b0d6cd8a84b0c408f745e40db6d845ca8 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-3.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-30.PNG b/docs/en/tools/desktop/xfce/figures/gnome-30.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6799ad80c89443267a31c0b2d3b059cc9dd8aceb Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-30.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-31.PNG b/docs/en/tools/desktop/xfce/figures/gnome-31.PNG new file mode 100644 index 0000000000000000000000000000000000000000..39ebf079f7a11c28359440111b548bf2d7be5aaa Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-31.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-32.PNG b/docs/en/tools/desktop/xfce/figures/gnome-32.PNG new file mode 100644 index 0000000000000000000000000000000000000000..28a77475cf3a1176a0c5d01418e1833fef627cc7 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-32.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-33.PNG b/docs/en/tools/desktop/xfce/figures/gnome-33.PNG new file mode 100644 index 0000000000000000000000000000000000000000..cecde6d0ab299f69ad95f25ff7d3f7130da09d02 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-33.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-34.PNG b/docs/en/tools/desktop/xfce/figures/gnome-34.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a760c501d86debdb81a89ef3a70b694e22d0e4da Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-34.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-35.PNG b/docs/en/tools/desktop/xfce/figures/gnome-35.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ab46f383f1b8f2c740effff3c59ad224b9e5025b Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-35.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-36.PNG b/docs/en/tools/desktop/xfce/figures/gnome-36.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e248144b99bb65943446f6c9fbd6ad45c11ddd58 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-36.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-37.PNG b/docs/en/tools/desktop/xfce/figures/gnome-37.PNG new file mode 100644 index 0000000000000000000000000000000000000000..7181726fb3d074298e41ee59ca14c9be68884aad Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-37.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-38.PNG b/docs/en/tools/desktop/xfce/figures/gnome-38.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b5c02d20fbad894fa3702b6274b047ef26ea1a10 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-38.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-39.PNG b/docs/en/tools/desktop/xfce/figures/gnome-39.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0c85bb5f72d7625e683409c3d4605b56f74d746b Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-39.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-4.PNG b/docs/en/tools/desktop/xfce/figures/gnome-4.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0bce0130188f00f30c67a4a8d4904ad8419428da Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-4.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-40.PNG b/docs/en/tools/desktop/xfce/figures/gnome-40.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e0c5a085776933b08d94cf51ae22d52af0a68ca0 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-40.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-41.PNG b/docs/en/tools/desktop/xfce/figures/gnome-41.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0fc42fc339480115cc588fee59983faf4652fc80 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-41.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-42.PNG b/docs/en/tools/desktop/xfce/figures/gnome-42.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fa18531c9e9ec6ee9dcb9e7c5046ee41bcfa454f Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-42.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-43.PNG b/docs/en/tools/desktop/xfce/figures/gnome-43.PNG new file mode 100644 index 0000000000000000000000000000000000000000..aadb23eda46dc831a56935a38f9a7d0c9534db89 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-43.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-44.PNG b/docs/en/tools/desktop/xfce/figures/gnome-44.PNG new file mode 100644 index 0000000000000000000000000000000000000000..8747e97f510cfd64abf520e099b5abeceb056970 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-44.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-45.PNG b/docs/en/tools/desktop/xfce/figures/gnome-45.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a0841f2360ad016c15444ff913a4a7b437ee047e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-45.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-46.PNG b/docs/en/tools/desktop/xfce/figures/gnome-46.PNG new file mode 100644 index 0000000000000000000000000000000000000000..d1815b118b98b523c1c97d14a69292528248878c Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-46.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-47.PNG b/docs/en/tools/desktop/xfce/figures/gnome-47.PNG new file mode 100644 index 0000000000000000000000000000000000000000..73c8deaf7bf8c3fca34fec443e9b60d13910732b Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-47.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-48.PNG b/docs/en/tools/desktop/xfce/figures/gnome-48.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6414ceafc991a94815324d362918b06e849d952e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-48.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-49.PNG b/docs/en/tools/desktop/xfce/figures/gnome-49.PNG new file mode 100644 index 0000000000000000000000000000000000000000..040a7a235cc3dca8dfae6d89f1d28bb308a42391 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-49.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-5.PNG b/docs/en/tools/desktop/xfce/figures/gnome-5.PNG new file mode 100644 index 0000000000000000000000000000000000000000..30076d824d8dde3206ff012538e1691df3a3e5ed Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-5.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-50.PNG b/docs/en/tools/desktop/xfce/figures/gnome-50.PNG new file mode 100644 index 0000000000000000000000000000000000000000..05951779983fa2c198afca908f6c54cbc35f557a Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-50.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-51.PNG b/docs/en/tools/desktop/xfce/figures/gnome-51.PNG new file mode 100644 index 0000000000000000000000000000000000000000..995f82f57a7828926ceea5dbaaf9f79ec453c1ab Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-51.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-52.PNG b/docs/en/tools/desktop/xfce/figures/gnome-52.PNG new file mode 100644 index 0000000000000000000000000000000000000000..6607be66dc61953729cf5106b4d39aa724b8bf76 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-52.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-53.PNG b/docs/en/tools/desktop/xfce/figures/gnome-53.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b1e851620eadab0376be79fcc12c0d8d3d943ec3 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-53.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-54.PNG b/docs/en/tools/desktop/xfce/figures/gnome-54.PNG new file mode 100644 index 0000000000000000000000000000000000000000..c9e773a1aec444feedfbfb3dce8ca9745ccb9f9e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-54.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-55.PNG b/docs/en/tools/desktop/xfce/figures/gnome-55.PNG new file mode 100644 index 0000000000000000000000000000000000000000..bd935df19ada2bbbf6f9f4b58d020f73fbdbbed0 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-55.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-56.PNG b/docs/en/tools/desktop/xfce/figures/gnome-56.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4475f73a68296d19cf0010b1f848aa3cbcd82858 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-56.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-57.PNG b/docs/en/tools/desktop/xfce/figures/gnome-57.PNG new file mode 100644 index 0000000000000000000000000000000000000000..24073cd56613e3fce7f3a7e0f057a12d8d8f3077 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-57.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-58.PNG b/docs/en/tools/desktop/xfce/figures/gnome-58.PNG new file mode 100644 index 0000000000000000000000000000000000000000..19112ae3f1f4ee9e0d7b2191ddec2d14ad171d67 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-58.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-59.PNG b/docs/en/tools/desktop/xfce/figures/gnome-59.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4c4225e9208ad3d38e1ec9e846d6b7c5e89e3991 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-59.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-6.PNG b/docs/en/tools/desktop/xfce/figures/gnome-6.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fa53206b21811a75382f6aee788c1cd8a20d9ba7 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-6.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-7.PNG b/docs/en/tools/desktop/xfce/figures/gnome-7.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fe38b39118bb79bef4412ed0f08c472ad145980e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-7.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-8.PNG b/docs/en/tools/desktop/xfce/figures/gnome-8.PNG new file mode 100644 index 0000000000000000000000000000000000000000..769939c5583d02d014ded8065eaa7ac6aeb81cd4 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-8.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/gnome-9.PNG b/docs/en/tools/desktop/xfce/figures/gnome-9.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b699942966fe2fe444e86231638f917f524328d9 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/gnome-9.PNG differ diff --git a/docs/en/tools/desktop/xfce/figures/icon1.png b/docs/en/tools/desktop/xfce/figures/icon1.png new file mode 100644 index 0000000000000000000000000000000000000000..9bac00355cf4aa57d32287fd4271404f6fd3fd4d Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon1.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon10-o.png b/docs/en/tools/desktop/xfce/figures/icon10-o.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c56d1a64c588d86f8fe510c74e5a7c4cb810d4 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon10-o.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon101-o.svg b/docs/en/tools/desktop/xfce/figures/icon101-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..af1c5d3dc0277a6ea59e71efb6ca97bdfc782e8e --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon101-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon103-o.svg b/docs/en/tools/desktop/xfce/figures/icon103-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..c06c885725c569ab8db1fe7d595a7c65f18c5142 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon103-o.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon105-o.svg b/docs/en/tools/desktop/xfce/figures/icon105-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..36c49949fa569330b761c2d65518f36c10435508 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon105-o.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon107-o.svg b/docs/en/tools/desktop/xfce/figures/icon107-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..fb5a3ea756f6ccb7b3e5c31122a433347a908c96 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon107-o.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon11-o.png b/docs/en/tools/desktop/xfce/figures/icon11-o.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1f2cb7f99b583768c7cbd7e05a57f302dbe8a Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon11-o.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon110-o.svg b/docs/en/tools/desktop/xfce/figures/icon110-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..7958e3f192061592e002e1e8a1bad06ffa86742c --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon110-o.svg @@ -0,0 +1,12 @@ + + + + reboot_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/icon111-o.svg b/docs/en/tools/desktop/xfce/figures/icon111-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..097d16a08d305a8b3f3b2268ab1ea8342e799377 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon111-o.svg @@ -0,0 +1,13 @@ + + + + Right + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/icon112-o.svg b/docs/en/tools/desktop/xfce/figures/icon112-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e51628c2b8b10495f3410d219814286696ea2fd5 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon112-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon116-o.svg b/docs/en/tools/desktop/xfce/figures/icon116-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..4d79cd6dbbbfd3969f4e0ad0ad88e27398853505 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon116-o.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon12-o.png b/docs/en/tools/desktop/xfce/figures/icon12-o.png new file mode 100644 index 0000000000000000000000000000000000000000..f1f0f59dd3879461a0b5bc0632693a4a4124def3 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon12-o.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon120-o.svg b/docs/en/tools/desktop/xfce/figures/icon120-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e895c347d16a200aea46b00428b0b9f1a3c94246 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon120-o.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon122-o.svg b/docs/en/tools/desktop/xfce/figures/icon122-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..7fb014b5fd6097ca37a84d0b6a27dc982d675c8a --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon122-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon124-o.svg b/docs/en/tools/desktop/xfce/figures/icon124-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..960c0ec096c925213f8953398f0e8e5db3cdaed3 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon124-o.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon125-o.svg b/docs/en/tools/desktop/xfce/figures/icon125-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..011c05f4b8f296867cd408a339230323fcbb28dd --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon125-o.svg @@ -0,0 +1,9 @@ + + + tips + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/icon126-o.svg b/docs/en/tools/desktop/xfce/figures/icon126-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e0a43b6b8beb434090ac0dd3a8fd68c023f11fce --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon126-o.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon127-o.svg b/docs/en/tools/desktop/xfce/figures/icon127-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..bed95d35334a8d0151211054236c0bacddcc0dd3 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon127-o.svg @@ -0,0 +1,13 @@ + + + + Up + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/icon128-o.svg b/docs/en/tools/desktop/xfce/figures/icon128-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..aa727f3f5d5883b3fb83a79c4b98e8b5bfe4ade6 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon128-o.svg @@ -0,0 +1,12 @@ + + + + userswitch_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/icon13-o.png b/docs/en/tools/desktop/xfce/figures/icon13-o.png new file mode 100644 index 0000000000000000000000000000000000000000..c05a981b29d8ad11c6682f796f79b4cafd0f088b Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon13-o.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon132-o.svg b/docs/en/tools/desktop/xfce/figures/icon132-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..588ba9d98864ba67a562fa9179f29405f7687aa0 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon132-o.svg @@ -0,0 +1,15 @@ + + + + - + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/icon133-o.svg b/docs/en/tools/desktop/xfce/figures/icon133-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..886d90a83e33497d134bdb3dcc864a5c2df53f20 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon133-o.svg @@ -0,0 +1,13 @@ + + + + + + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/icon134-o.svg b/docs/en/tools/desktop/xfce/figures/icon134-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..784cf383eb0e8f5c7a57a602047be50ad0a3bc05 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon134-o.svg @@ -0,0 +1,15 @@ + + + + = + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/icon135-o.svg b/docs/en/tools/desktop/xfce/figures/icon135-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..cea628a8f5eb92d10661b690242b6de41ca64816 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon135-o.svg @@ -0,0 +1,15 @@ + + + + ~ + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/icon136-o.svg b/docs/en/tools/desktop/xfce/figures/icon136-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..24aa139ab2fefaee20935551f1af5aef473719ed --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon136-o.svg @@ -0,0 +1,12 @@ + + + + poweroff_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/icon14-o.png b/docs/en/tools/desktop/xfce/figures/icon14-o.png new file mode 100644 index 0000000000000000000000000000000000000000..b21deee4d98593d93fb5f72158d2d78f3d3f1cb9 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon14-o.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon15-o.png b/docs/en/tools/desktop/xfce/figures/icon15-o.png new file mode 100644 index 0000000000000000000000000000000000000000..1827a20e9da4d28e35e8ab2eae739b2fec37b385 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon15-o.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon16.png b/docs/en/tools/desktop/xfce/figures/icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..f271594dda9d3ad0f038c9d719dd68c3e82c59f1 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon16.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon17.png b/docs/en/tools/desktop/xfce/figures/icon17.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe58b89347c857920bce25f067fbd11c308e502 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon17.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon18.png b/docs/en/tools/desktop/xfce/figures/icon18.png new file mode 100644 index 0000000000000000000000000000000000000000..1827a20e9da4d28e35e8ab2eae739b2fec37b385 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon18.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon19-o.png b/docs/en/tools/desktop/xfce/figures/icon19-o.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1f2cb7f99b583768c7cbd7e05a57f302dbe8a Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon19-o.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon2.png b/docs/en/tools/desktop/xfce/figures/icon2.png new file mode 100644 index 0000000000000000000000000000000000000000..9101e4b386df065a87d422bc5a0b287528ea5ec7 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon2.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon20.png b/docs/en/tools/desktop/xfce/figures/icon20.png new file mode 100644 index 0000000000000000000000000000000000000000..4de3c7c695893539967245ea5e269b26e2b735be Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon20.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon21.png b/docs/en/tools/desktop/xfce/figures/icon21.png new file mode 100644 index 0000000000000000000000000000000000000000..e7b4320b6ce1fd4adb52525ba2c60983ffb2eed3 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon21.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon22.png b/docs/en/tools/desktop/xfce/figures/icon22.png new file mode 100644 index 0000000000000000000000000000000000000000..43bfa96965ad13e0a34ead3cb1102a76b9346a23 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon22.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon23.png b/docs/en/tools/desktop/xfce/figures/icon23.png new file mode 100644 index 0000000000000000000000000000000000000000..aee221ddaa81d06fa7bd5b89a624da90cd1e53da Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon23.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon24.png b/docs/en/tools/desktop/xfce/figures/icon24.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e5d700431ca1666fe9eda2cefce5dd2f83bdcd Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon24.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon25.png b/docs/en/tools/desktop/xfce/figures/icon25.png new file mode 100644 index 0000000000000000000000000000000000000000..3de0f9476bbee9e89c3b759afbed968f17b5bbcc Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon25.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon26-o.png b/docs/en/tools/desktop/xfce/figures/icon26-o.png new file mode 100644 index 0000000000000000000000000000000000000000..2293a893caf6d89c3beb978598fe7f281e68e7d5 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon26-o.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon27-o.png b/docs/en/tools/desktop/xfce/figures/icon27-o.png new file mode 100644 index 0000000000000000000000000000000000000000..abbab8e40f7e3ca7c2a6f28ff78f08f15117828e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon27-o.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon28-o.png b/docs/en/tools/desktop/xfce/figures/icon28-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon28-o.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon29-o.png b/docs/en/tools/desktop/xfce/figures/icon29-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon29-o.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon3.png b/docs/en/tools/desktop/xfce/figures/icon3.png new file mode 100644 index 0000000000000000000000000000000000000000..930ee8909e89e3624c581f83d713af271cd96c75 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon3.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon30-o.png b/docs/en/tools/desktop/xfce/figures/icon30-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon30-o.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon31-o.png b/docs/en/tools/desktop/xfce/figures/icon31-o.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon31-o.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon32.png b/docs/en/tools/desktop/xfce/figures/icon32.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon32.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon33.png b/docs/en/tools/desktop/xfce/figures/icon33.png new file mode 100644 index 0000000000000000000000000000000000000000..88ed145b25f6f025ad795ceb012500e0944cb54c Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon33.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon34.png b/docs/en/tools/desktop/xfce/figures/icon34.png new file mode 100644 index 0000000000000000000000000000000000000000..8247f52a3424c81b451ceb318f4a7979a5eddece Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon34.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon35.png b/docs/en/tools/desktop/xfce/figures/icon35.png new file mode 100644 index 0000000000000000000000000000000000000000..7c656e9030b94809a57c7e369921e6a585f3574c Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon35.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon36.png b/docs/en/tools/desktop/xfce/figures/icon36.png new file mode 100644 index 0000000000000000000000000000000000000000..7d29d173e914dfff48245d3d3a4d42575ce2d1db Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon36.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon37.png b/docs/en/tools/desktop/xfce/figures/icon37.png new file mode 100644 index 0000000000000000000000000000000000000000..58be4c621b6638115153e361801deb9ee06634d8 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon37.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon38.png b/docs/en/tools/desktop/xfce/figures/icon38.png new file mode 100644 index 0000000000000000000000000000000000000000..0c861ccb891f4fb5e533eb7f7151a8fce1571f17 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon38.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon39.png b/docs/en/tools/desktop/xfce/figures/icon39.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ba1f347452d0cd1c06c6c51d2cdf5aea5e490b Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon39.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon4.png b/docs/en/tools/desktop/xfce/figures/icon4.png new file mode 100644 index 0000000000000000000000000000000000000000..548dc8b648edb73ff1dd8a0266e8479203e72ca0 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon4.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon40.png b/docs/en/tools/desktop/xfce/figures/icon40.png new file mode 100644 index 0000000000000000000000000000000000000000..9c29dd1e9a1bf22c36abf51cb18fa9e47b455fab Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon40.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon41.png b/docs/en/tools/desktop/xfce/figures/icon41.png new file mode 100644 index 0000000000000000000000000000000000000000..9e8aea527a2119433fffec5a8800ebfa4fa5062f Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon41.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon42-o.png b/docs/en/tools/desktop/xfce/figures/icon42-o.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon42-o.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon42.png b/docs/en/tools/desktop/xfce/figures/icon42.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon42.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon43-o.png b/docs/en/tools/desktop/xfce/figures/icon43-o.png new file mode 100644 index 0000000000000000000000000000000000000000..284bdd551baf25beb4143013402e77a1a4c60ccb Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon43-o.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon44-o.png b/docs/en/tools/desktop/xfce/figures/icon44-o.png new file mode 100644 index 0000000000000000000000000000000000000000..810f4d784ee140dbf562e67a0d3fd391272626a5 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon44-o.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon45-o.png b/docs/en/tools/desktop/xfce/figures/icon45-o.png new file mode 100644 index 0000000000000000000000000000000000000000..3e528ce2c98284f020ae4912a853f5864526396b Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon45-o.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon46-o.png b/docs/en/tools/desktop/xfce/figures/icon46-o.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6a3ca0fe57016f3685981ed518493ceea1c855 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon46-o.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon47-o.png b/docs/en/tools/desktop/xfce/figures/icon47-o.png new file mode 100644 index 0000000000000000000000000000000000000000..6eeaba98d908775bd363a8ffcec27c3b6a214013 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon47-o.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon49-o.svg b/docs/en/tools/desktop/xfce/figures/icon49-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..f2d76acd147ccaf5e493a7c035bb90640af7817c --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon49-o.svg @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon5.png b/docs/en/tools/desktop/xfce/figures/icon5.png new file mode 100644 index 0000000000000000000000000000000000000000..e4206b7b584bf0702c7cb2f03a3a41e20bfba844 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon5.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon50-o.svg b/docs/en/tools/desktop/xfce/figures/icon50-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..05026802be4718205065d6369e14cc0b6ef05bc7 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon50-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon52-o.svg b/docs/en/tools/desktop/xfce/figures/icon52-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..23149c05873259cd39721b8ee9c3ab7db86d64c5 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon52-o.svg @@ -0,0 +1,9 @@ + + + attention + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/icon53-o.svg b/docs/en/tools/desktop/xfce/figures/icon53-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..50e33489ce984b0acfd621da4a8ef837fdf048c1 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon53-o.svg @@ -0,0 +1,11 @@ + + + + previous + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/icon54-o.svg b/docs/en/tools/desktop/xfce/figures/icon54-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..3b599aef4b822c707d2f646405bb00837aed96fd --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon54-o.svg @@ -0,0 +1,18 @@ + + + + Backspace + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/icon56-o.svg b/docs/en/tools/desktop/xfce/figures/icon56-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9f13b6861e3858deec8d57a5301c934acc247069 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon56-o.svg @@ -0,0 +1,19 @@ + + + + Slice 1 + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/icon57-o.svg b/docs/en/tools/desktop/xfce/figures/icon57-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e6fbfa1381b76ab3fcd45652b33267a7f6c69bb7 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon57-o.svg @@ -0,0 +1,11 @@ + + + + titlebutton/close_normal + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/icon58-o.svg b/docs/en/tools/desktop/xfce/figures/icon58-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9746dcacfc8e5d4c4b63233801e37418a190fc8f --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon58-o.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon6.png b/docs/en/tools/desktop/xfce/figures/icon6.png new file mode 100644 index 0000000000000000000000000000000000000000..88ced3587e9a42b145fe11393726f40aba9d1b2c Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon6.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon62-o.svg b/docs/en/tools/desktop/xfce/figures/icon62-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..09f61b446669df2e05a3351d40d8c30879c7b035 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon62-o.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon63-o.svg b/docs/en/tools/desktop/xfce/figures/icon63-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..06c03ed99260ffadc681475dad35610aedf67f83 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon63-o.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon66-o.svg b/docs/en/tools/desktop/xfce/figures/icon66-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..5793b3846b7fe6a5758379591215b16c7f9e1b52 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon66-o.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon68-o.svg b/docs/en/tools/desktop/xfce/figures/icon68-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..a7748052dfa436116d8742dca28f7d90865231ed --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon68-o.svg @@ -0,0 +1,23 @@ + + + + deepin-system-monitor + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/icon69-o.svg b/docs/en/tools/desktop/xfce/figures/icon69-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e21dfd00a32a44ee1c8e3882b4ca8239be04690f --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon69-o.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon7.png b/docs/en/tools/desktop/xfce/figures/icon7.png new file mode 100644 index 0000000000000000000000000000000000000000..05fe8aa38c84ca0c0c99b0b005ddec2f2ba42f4a Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon7.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon70-o.svg b/docs/en/tools/desktop/xfce/figures/icon70-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..b5787a7ffa5ed9519a48c6937c60927fd11fd455 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon70-o.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon71-o.svg b/docs/en/tools/desktop/xfce/figures/icon71-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..669a21f143b06cb45ea3f45f7f071809f2cbc8a8 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon71-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon72-o.svg b/docs/en/tools/desktop/xfce/figures/icon72-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..79067ed9b9ff7912e1742183b461fa056601b9cc --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon72-o.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon73-o.svg b/docs/en/tools/desktop/xfce/figures/icon73-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..cf6292387f5e790db6ebd66184aabcbb39257ee7 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon73-o.svg @@ -0,0 +1,13 @@ + + + + Down + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/icon75-o.svg b/docs/en/tools/desktop/xfce/figures/icon75-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..ef6823ccc19858f57374f0b78ad31514e8311be3 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon75-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon8.png b/docs/en/tools/desktop/xfce/figures/icon8.png new file mode 100644 index 0000000000000000000000000000000000000000..01543c3e0f5e96a023b4e1f0859a03e3a0dafd56 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon8.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon83-o.svg b/docs/en/tools/desktop/xfce/figures/icon83-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..35dd6eacc54a933dc9ebc3f3010edfa7363fecc0 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon83-o.svg @@ -0,0 +1,84 @@ + + + + + + image/svg+xml + + img_upload + + + + + + img_upload + Created with Sketch. + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon84-o.svg b/docs/en/tools/desktop/xfce/figures/icon84-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..9bd11b9e7b45b506dd7e1c87d09d545d8f48af06 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon84-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon86-o.svg b/docs/en/tools/desktop/xfce/figures/icon86-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..5da20233309c43d4fc7b315f441cde476c835c67 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon86-o.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon88-o.svg b/docs/en/tools/desktop/xfce/figures/icon88-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..c2570c26575fd14cb5e9d9fe77831d2e8f6c9333 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon88-o.svg @@ -0,0 +1,13 @@ + + + + Left + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/icon9.png b/docs/en/tools/desktop/xfce/figures/icon9.png new file mode 100644 index 0000000000000000000000000000000000000000..a07c9ab8e51decd9a3bca8c969d2ae95bd68512c Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/icon9.png differ diff --git a/docs/en/tools/desktop/xfce/figures/icon90-o.svg b/docs/en/tools/desktop/xfce/figures/icon90-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..79b5e0a141f7969a8f77ae61f4c240de7187afe9 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon90-o.svg @@ -0,0 +1,12 @@ + + + + lock_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/icon92-o.svg b/docs/en/tools/desktop/xfce/figures/icon92-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..21341b64a832e1935252aa82e7a4e0b083c16eae --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon92-o.svg @@ -0,0 +1,12 @@ + + + + logout_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/icon94-o.svg b/docs/en/tools/desktop/xfce/figures/icon94-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..a47044149a02101dbd24a3fdb2f3ead77efca6c1 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon94-o.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon97-o.svg b/docs/en/tools/desktop/xfce/figures/icon97-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..4f4670de29d8c86885b5aa806b2c8cdc6fc16dcb --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon97-o.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/tools/desktop/xfce/figures/icon99-o.svg b/docs/en/tools/desktop/xfce/figures/icon99-o.svg new file mode 100644 index 0000000000000000000000000000000000000000..e9a3aa60a51404c9390bfbea8d8ff09edc0e2e32 --- /dev/null +++ b/docs/en/tools/desktop/xfce/figures/icon99-o.svg @@ -0,0 +1,11 @@ + + + notes + + + + + + + + \ No newline at end of file diff --git a/docs/en/tools/desktop/xfce/figures/kiran-1.png b/docs/en/tools/desktop/xfce/figures/kiran-1.png new file mode 100644 index 0000000000000000000000000000000000000000..59b632062ba3ff6e26c550567e858eb4dfdfc780 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-1.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-10.png b/docs/en/tools/desktop/xfce/figures/kiran-10.png new file mode 100644 index 0000000000000000000000000000000000000000..18cfa3074af1f4b8d49d064a77b016f24ab8c17c Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-10.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-11.png b/docs/en/tools/desktop/xfce/figures/kiran-11.png new file mode 100644 index 0000000000000000000000000000000000000000..b58fbb7ce8a798d5355855a4ac0638540df74d9e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-11.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-12.png b/docs/en/tools/desktop/xfce/figures/kiran-12.png new file mode 100644 index 0000000000000000000000000000000000000000..920d0c7112be6bed509773413de36506d748b822 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-12.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-13.png b/docs/en/tools/desktop/xfce/figures/kiran-13.png new file mode 100644 index 0000000000000000000000000000000000000000..f6632732bd2e8a10d0cda2bd0550f43741a7ba97 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-13.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-14.png b/docs/en/tools/desktop/xfce/figures/kiran-14.png new file mode 100644 index 0000000000000000000000000000000000000000..52eae7cc40fe4f7c6b2a8fe9744209a1fcbc30d8 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-14.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-15.png b/docs/en/tools/desktop/xfce/figures/kiran-15.png new file mode 100644 index 0000000000000000000000000000000000000000..5496c56ca72983780b9785d2d15c4008fb73aeef Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-15.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-16.png b/docs/en/tools/desktop/xfce/figures/kiran-16.png new file mode 100644 index 0000000000000000000000000000000000000000..6125b257245aa89f9b6592ed5b14a95d5699076e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-16.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-17.png b/docs/en/tools/desktop/xfce/figures/kiran-17.png new file mode 100644 index 0000000000000000000000000000000000000000..d8a4cb88017efe9f41f78ffc2f9de06dedcc1b23 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-17.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-18.png b/docs/en/tools/desktop/xfce/figures/kiran-18.png new file mode 100644 index 0000000000000000000000000000000000000000..0cb0c50d15597998fbd4cf3db2d1d0f9ec3c920e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-18.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-19.png b/docs/en/tools/desktop/xfce/figures/kiran-19.png new file mode 100644 index 0000000000000000000000000000000000000000..58ef2d33a52cf6404ea03b6a2d37f8d8b8391539 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-19.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-2.png b/docs/en/tools/desktop/xfce/figures/kiran-2.png new file mode 100644 index 0000000000000000000000000000000000000000..088bf53c1e763924e7cee46d0cdac98ad0a9d5e2 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-2.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-20.png b/docs/en/tools/desktop/xfce/figures/kiran-20.png new file mode 100644 index 0000000000000000000000000000000000000000..e8608485553033eb2ae141162e4300fa48c578cd Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-20.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-21.png b/docs/en/tools/desktop/xfce/figures/kiran-21.png new file mode 100644 index 0000000000000000000000000000000000000000..4d4c0ff304bdfbc8e715d2e756315a005c008336 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-21.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-22.png b/docs/en/tools/desktop/xfce/figures/kiran-22.png new file mode 100644 index 0000000000000000000000000000000000000000..6778d5a40a82e699da9531f4727a196d1442b9ae Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-22.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-23.png b/docs/en/tools/desktop/xfce/figures/kiran-23.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1d5e284eb299a771c5abbfdff611270ddf2449 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-23.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-24.png b/docs/en/tools/desktop/xfce/figures/kiran-24.png new file mode 100644 index 0000000000000000000000000000000000000000..a3ed57f9e9c300a65f867d29a44f287405a0509c Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-24.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-25.png b/docs/en/tools/desktop/xfce/figures/kiran-25.png new file mode 100644 index 0000000000000000000000000000000000000000..694e6173dfbf1fda8d07670a8e3daf4fbeb263ac Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-25.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-26.png b/docs/en/tools/desktop/xfce/figures/kiran-26.png new file mode 100644 index 0000000000000000000000000000000000000000..3b6ae2eeff3aae39107f15b60c5bb14ffc787cd8 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-26.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-27.png b/docs/en/tools/desktop/xfce/figures/kiran-27.png new file mode 100644 index 0000000000000000000000000000000000000000..3b6ae2eeff3aae39107f15b60c5bb14ffc787cd8 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-27.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-28.png b/docs/en/tools/desktop/xfce/figures/kiran-28.png new file mode 100644 index 0000000000000000000000000000000000000000..01ff3a8f47248d96c714e78b80fd81cd1ed16e0f Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-28.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-29.png b/docs/en/tools/desktop/xfce/figures/kiran-29.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ad5b4438eae441f6086ce5e1aae2e6755aa12a Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-29.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-3.png b/docs/en/tools/desktop/xfce/figures/kiran-3.png new file mode 100644 index 0000000000000000000000000000000000000000..e1399424c52eee8804f9433c9e9bf203950008c6 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-3.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-30.png b/docs/en/tools/desktop/xfce/figures/kiran-30.png new file mode 100644 index 0000000000000000000000000000000000000000..c1efc1e3931a129affd5dfcea9e319556e492f04 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-30.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-31.png b/docs/en/tools/desktop/xfce/figures/kiran-31.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ad5b4438eae441f6086ce5e1aae2e6755aa12a Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-31.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-32.png b/docs/en/tools/desktop/xfce/figures/kiran-32.png new file mode 100644 index 0000000000000000000000000000000000000000..fd900ec891b09313a7c558c61213b1816b803034 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-32.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-33.png b/docs/en/tools/desktop/xfce/figures/kiran-33.png new file mode 100644 index 0000000000000000000000000000000000000000..64ba70b08ed63c6e0942478d61e36a8c443f0604 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-33.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-34.png b/docs/en/tools/desktop/xfce/figures/kiran-34.png new file mode 100644 index 0000000000000000000000000000000000000000..4b869e7d172e2f2889d487157b92204a28a8dc4e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-34.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-35.png b/docs/en/tools/desktop/xfce/figures/kiran-35.png new file mode 100644 index 0000000000000000000000000000000000000000..9b383f3c84964b4fc34c4d8e75400325f93908bc Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-35.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-36.png b/docs/en/tools/desktop/xfce/figures/kiran-36.png new file mode 100644 index 0000000000000000000000000000000000000000..0b16632852c5024e2c6ec4fbd49513e3b7a2b146 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-36.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-37.png b/docs/en/tools/desktop/xfce/figures/kiran-37.png new file mode 100644 index 0000000000000000000000000000000000000000..2be3cc3b2528260c579b59f529e7a5663f1cc779 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-37.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-38.png b/docs/en/tools/desktop/xfce/figures/kiran-38.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1ffaf3aa920f922357f6d48700f42974600d77 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-38.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-39.png b/docs/en/tools/desktop/xfce/figures/kiran-39.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0e5add782b6c9cf4a8b9f6473c96641c39bd1d Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-39.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-4.png b/docs/en/tools/desktop/xfce/figures/kiran-4.png new file mode 100644 index 0000000000000000000000000000000000000000..bd318280b403912ab4846b694592d580b9e5d242 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-4.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-40.png b/docs/en/tools/desktop/xfce/figures/kiran-40.png new file mode 100644 index 0000000000000000000000000000000000000000..083031058ff47dc1550881d3a9f189861d3e8563 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-40.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-41.png b/docs/en/tools/desktop/xfce/figures/kiran-41.png new file mode 100644 index 0000000000000000000000000000000000000000..582893929e2c10a96c49696411bbed3ea9fd7c55 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-41.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-42.png b/docs/en/tools/desktop/xfce/figures/kiran-42.png new file mode 100644 index 0000000000000000000000000000000000000000..eede1243506ccd309ee707465f56c31581dd8554 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-42.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-43.0.png b/docs/en/tools/desktop/xfce/figures/kiran-43.0.png new file mode 100644 index 0000000000000000000000000000000000000000..caacc027322d4b7480e6508d4a1b4a13eefcf788 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-43.0.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-43.png b/docs/en/tools/desktop/xfce/figures/kiran-43.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea9f45ed8f327fce426352c4ae7fbf06cbefc84 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-43.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-44.png b/docs/en/tools/desktop/xfce/figures/kiran-44.png new file mode 100644 index 0000000000000000000000000000000000000000..c86a100005f89dbb9b24055e42d716205d47399e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-44.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-45.png b/docs/en/tools/desktop/xfce/figures/kiran-45.png new file mode 100644 index 0000000000000000000000000000000000000000..c5b5d75f972e594587f3393c8d384dcd76e7477e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-45.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-46.png b/docs/en/tools/desktop/xfce/figures/kiran-46.png new file mode 100644 index 0000000000000000000000000000000000000000..e9a28632c62de95d8ea2d436ba9bc705ff980991 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-46.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-47.png b/docs/en/tools/desktop/xfce/figures/kiran-47.png new file mode 100644 index 0000000000000000000000000000000000000000..a3606e3c899f944eb84d206d98cedc3377197c97 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-47.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-48.png b/docs/en/tools/desktop/xfce/figures/kiran-48.png new file mode 100644 index 0000000000000000000000000000000000000000..b69202c9a83bfc2c835ab166ef0fc2455bb4bcd3 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-48.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-49.png b/docs/en/tools/desktop/xfce/figures/kiran-49.png new file mode 100644 index 0000000000000000000000000000000000000000..d739e6107fd80ecd741dacaaf9dfb868afc61e37 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-49.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-5.png b/docs/en/tools/desktop/xfce/figures/kiran-5.png new file mode 100644 index 0000000000000000000000000000000000000000..154dd54d43b5b98682eb798518046e72fc7e3f83 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-5.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-50.png b/docs/en/tools/desktop/xfce/figures/kiran-50.png new file mode 100644 index 0000000000000000000000000000000000000000..96957676afc9f66bcc4b63c5e39eb8890f108015 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-50.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-6.png b/docs/en/tools/desktop/xfce/figures/kiran-6.png new file mode 100644 index 0000000000000000000000000000000000000000..927b475d6687d60f04fed8a535b2225a8f4b23f7 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-6.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-7.png b/docs/en/tools/desktop/xfce/figures/kiran-7.png new file mode 100644 index 0000000000000000000000000000000000000000..254ef11f36d958f6ef7c70853e5f61032f825463 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-7.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-8.png b/docs/en/tools/desktop/xfce/figures/kiran-8.png new file mode 100644 index 0000000000000000000000000000000000000000..29b5845d2fa94cba92719b8649a5e86c926ea911 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-8.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kiran-9.png b/docs/en/tools/desktop/xfce/figures/kiran-9.png new file mode 100644 index 0000000000000000000000000000000000000000..46bcfdd0e1e88ad0f0ade4a3990c3ac5d66060e7 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kiran-9.png differ diff --git a/docs/en/tools/desktop/xfce/figures/kubesphere.png b/docs/en/tools/desktop/xfce/figures/kubesphere.png new file mode 100644 index 0000000000000000000000000000000000000000..939dcb70202b19c7853cbfd8f27f6e8e4678ce26 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/kubesphere.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-1.png b/docs/en/tools/desktop/xfce/figures/xfce-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c04222d7757b84aa8afecf98815eee25211a86d7 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-1.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-2.png b/docs/en/tools/desktop/xfce/figures/xfce-2.png new file mode 100644 index 0000000000000000000000000000000000000000..fa7e1a1ae3c1535a1528f03636d2b62d727412af Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-2.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-3.png b/docs/en/tools/desktop/xfce/figures/xfce-3.png new file mode 100644 index 0000000000000000000000000000000000000000..6eeb68ad39f45ff476f1d18b8cd34492ec1f542b Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-3.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-4.png b/docs/en/tools/desktop/xfce/figures/xfce-4.png new file mode 100644 index 0000000000000000000000000000000000000000..f66de500fad7c847c2fea2e3774413d1c38e642e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-4.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-5.png b/docs/en/tools/desktop/xfce/figures/xfce-5.png new file mode 100644 index 0000000000000000000000000000000000000000..0258b0e5cf6c7c13d88b0431f4b0221e86451ce8 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-5.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-6.png b/docs/en/tools/desktop/xfce/figures/xfce-6.png new file mode 100644 index 0000000000000000000000000000000000000000..f2027b37021b260a97ff56a32026a53d00db0763 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-6.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-7.png b/docs/en/tools/desktop/xfce/figures/xfce-7.png new file mode 100644 index 0000000000000000000000000000000000000000..b7a94df356b7b9f7dca3d305d066ec854406aaab Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-7.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-71.png b/docs/en/tools/desktop/xfce/figures/xfce-71.png new file mode 100644 index 0000000000000000000000000000000000000000..6e2ff40536d18253dcfd4a69396e8e96817f704a Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-71.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-8.png b/docs/en/tools/desktop/xfce/figures/xfce-8.png new file mode 100644 index 0000000000000000000000000000000000000000..4ae9885b617e49cba84140e84dd6b354ff55f92c Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-8.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-81.png b/docs/en/tools/desktop/xfce/figures/xfce-81.png new file mode 100644 index 0000000000000000000000000000000000000000..b97c9a81c2a07efe361e6dc6ee8bed5db445ecfa Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-81.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-811.png b/docs/en/tools/desktop/xfce/figures/xfce-811.png new file mode 100644 index 0000000000000000000000000000000000000000..21447e37a5dd94fc88cb3ec0a11cd0dc0d50cf36 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-811.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-812.png b/docs/en/tools/desktop/xfce/figures/xfce-812.png new file mode 100644 index 0000000000000000000000000000000000000000..d505f1ac8111062a172b9fb5f5717d72f653f1b8 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-812.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-813.png b/docs/en/tools/desktop/xfce/figures/xfce-813.png new file mode 100644 index 0000000000000000000000000000000000000000..218d3b80c83cade14acc0c0baa4532710d1959dd Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-813.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-814.png b/docs/en/tools/desktop/xfce/figures/xfce-814.png new file mode 100644 index 0000000000000000000000000000000000000000..6ccbe910bd32cb4d619ba47d2fcb354424e80451 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-814.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-82.png b/docs/en/tools/desktop/xfce/figures/xfce-82.png new file mode 100644 index 0000000000000000000000000000000000000000..170deb5fb43f4e924d5ba4eba94a02c341d31515 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-82.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-821.png b/docs/en/tools/desktop/xfce/figures/xfce-821.png new file mode 100644 index 0000000000000000000000000000000000000000..690f3f0b528dfdaf6586549cdeb105df2214fc44 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-821.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-83.png b/docs/en/tools/desktop/xfce/figures/xfce-83.png new file mode 100644 index 0000000000000000000000000000000000000000..95e4844c0ece09819d3e9f1e8457bbf371b1282e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-83.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-831.png b/docs/en/tools/desktop/xfce/figures/xfce-831.png new file mode 100644 index 0000000000000000000000000000000000000000..61da16b7871a085a6c373a1262c0f785fb415e60 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-831.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-832.png b/docs/en/tools/desktop/xfce/figures/xfce-832.png new file mode 100644 index 0000000000000000000000000000000000000000..87b59b42d86ebd205750e162d5f2751b4d87181e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-832.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-84.png b/docs/en/tools/desktop/xfce/figures/xfce-84.png new file mode 100644 index 0000000000000000000000000000000000000000..1afe9d9bd51af83c99793666bad47d231bba5c7b Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-84.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-841.png b/docs/en/tools/desktop/xfce/figures/xfce-841.png new file mode 100644 index 0000000000000000000000000000000000000000..35875b40b8c95ce32652003daa5caf065747725f Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-841.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-842.png b/docs/en/tools/desktop/xfce/figures/xfce-842.png new file mode 100644 index 0000000000000000000000000000000000000000..b4031b575ffc3e9aa5a8edc7826fe28af97d0f23 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-842.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-85.png b/docs/en/tools/desktop/xfce/figures/xfce-85.png new file mode 100644 index 0000000000000000000000000000000000000000..bce9a0165290167d5fceee22d74f2abf4aed28fd Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-85.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-851.png b/docs/en/tools/desktop/xfce/figures/xfce-851.png new file mode 100644 index 0000000000000000000000000000000000000000..15c9e2d6d04e9b712bdf88d0ee1e7246a8d7b83e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-851.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-86.png b/docs/en/tools/desktop/xfce/figures/xfce-86.png new file mode 100644 index 0000000000000000000000000000000000000000..d78bc4ae0dbf13c3ad40b29468bd44056817e522 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-86.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-861.png b/docs/en/tools/desktop/xfce/figures/xfce-861.png new file mode 100644 index 0000000000000000000000000000000000000000..9a58733007cfac1c42ff244b52ee14c75051d852 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-861.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-87.png b/docs/en/tools/desktop/xfce/figures/xfce-87.png new file mode 100644 index 0000000000000000000000000000000000000000..ee5844bcfa836ec8ecf0a5fea125dcab530ad6db Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-87.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-9.png b/docs/en/tools/desktop/xfce/figures/xfce-9.png new file mode 100644 index 0000000000000000000000000000000000000000..5586c4f62cc161665b91a56ad23b2320901901c0 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-9.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-91.png b/docs/en/tools/desktop/xfce/figures/xfce-91.png new file mode 100644 index 0000000000000000000000000000000000000000..ee69879bb4ad66405b045af5e3965e275fe8eabf Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-91.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-911.png b/docs/en/tools/desktop/xfce/figures/xfce-911.png new file mode 100644 index 0000000000000000000000000000000000000000..b49416558e9ab844fda2026b76e2e900ac106842 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-911.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-92.png b/docs/en/tools/desktop/xfce/figures/xfce-92.png new file mode 100644 index 0000000000000000000000000000000000000000..78dd6313c603aad9ebd37fe68e06f98b2a3b331e Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-92.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-921.png b/docs/en/tools/desktop/xfce/figures/xfce-921.png new file mode 100644 index 0000000000000000000000000000000000000000..0681efd633cff00fe8572579b8971933cfc41dc1 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-921.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-93.png b/docs/en/tools/desktop/xfce/figures/xfce-93.png new file mode 100644 index 0000000000000000000000000000000000000000..06ac80c152fefbe1ad2ba1c989f6acfbbaf1a992 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-93.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-931.png b/docs/en/tools/desktop/xfce/figures/xfce-931.png new file mode 100644 index 0000000000000000000000000000000000000000..591a6d21d8fe69aed84d35316af506771a26ac01 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-931.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-94.png b/docs/en/tools/desktop/xfce/figures/xfce-94.png new file mode 100644 index 0000000000000000000000000000000000000000..f48064ff5902c4ea740ccba9a1640cbca27b5b72 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-94.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-941.png b/docs/en/tools/desktop/xfce/figures/xfce-941.png new file mode 100644 index 0000000000000000000000000000000000000000..aaee48a09a1e7233d25f68c6a74c7c39edc73b1f Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-941.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-95.png b/docs/en/tools/desktop/xfce/figures/xfce-95.png new file mode 100644 index 0000000000000000000000000000000000000000..bda965b15a859e4cccf4b80f62875f79eb3470fd Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-95.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-951.png b/docs/en/tools/desktop/xfce/figures/xfce-951.png new file mode 100644 index 0000000000000000000000000000000000000000..1d8ff807ac84bdae0dc935c3964d10701b5d47dc Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-951.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-96.png b/docs/en/tools/desktop/xfce/figures/xfce-96.png new file mode 100644 index 0000000000000000000000000000000000000000..29ce24923477065b98cacf603f185113e9959069 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-96.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-961.png b/docs/en/tools/desktop/xfce/figures/xfce-961.png new file mode 100644 index 0000000000000000000000000000000000000000..9d2944ae05699b8424695c865242c1c4f5d60fac Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-961.png differ diff --git a/docs/en/tools/desktop/xfce/figures/xfce-962.png b/docs/en/tools/desktop/xfce/figures/xfce-962.png new file mode 100644 index 0000000000000000000000000000000000000000..72c65f9675d8259f327077ce7f7212bd2b17a588 Binary files /dev/null and b/docs/en/tools/desktop/xfce/figures/xfce-962.png differ diff --git a/docs/en/tools/desktop/xfce/xfce_installation.md b/docs/en/tools/desktop/xfce/xfce_installation.md new file mode 100644 index 0000000000000000000000000000000000000000..8591fefcf4a653043a9272379983c9933c8d51cd --- /dev/null +++ b/docs/en/tools/desktop/xfce/xfce_installation.md @@ -0,0 +1,77 @@ +# Xfce Installation + +Xfce is a lightweight Linux desktop. In the current version, all components have been updated from GTK2 to GTK3 and from D-Dbus Glib to GDBus. Most components support GObject Introspection (GI), which is used to generate and parse the API meta information of the C program library, so that the dynamic language (or managed language) can be bound to the program library based on C + GObject. In the current version, user experience is optimized, new features are added, and a large number of bugs are fixed. Xfce occupies fewer memory and CPU resources than other UIs (GNOME and KDE), providing smoother and more efficient user experience. + +Xfce supports the x86\_64 and AArch64 architectures. + +You are advised to create an administrator during the installation. + +1. [Download](https://openeuler.org/en/download/) the openEuler ISO image and install the OS. Run the following command to update the software source. You are advised to configure the Everything source and the EPOL source. This document describes how to install Xfce in the minimum installation scenario. + + ```shell + sudo dnf update + ``` + +2. Install the font library. + + ```shell + sudo dnf install dejavu-fonts liberation-fonts gnu-*-fonts google-*-fonts + ``` + +3. Install Xorg. + + ```shell + sudo dnf install xorg-* + ``` + +4. Install Xfce and related components. + + ```shell + sudo dnf install xfwm4 xfdesktop xfce4-* xfce4-*-plugin network-manager-applet *fonts + ``` + +5. Install the login manager. + + ```shell + sudo dnf install lightdm lightdm-gtk + ``` + +6. Run the following command as the root user to set Xfce as the default desktop environment: + + ```shell + echo 'user-session=xfce' >> /etc/lightdm/lightdm.conf.d/60-lightdm-gtk-greeter.conf + ``` + +7. Start Xfce using the login manager. + + ```shell + sudo systemctl start lightdm + ``` + + After the login manager is started, choose **Xfce Session** in the upper right corner and enter the user name and password to log in. + +8. Set the GUI to start upon system boot. + + ```shell + sudo systemctl enable lightdm + sudo systemctl set-default graphical.target + ``` + + If GDM is installed by default, you are advised to disable GDM. + + ```shell + systemctl disable gdm + ``` + + Restart the machine. + + ```shell + sudo reboot + ``` + +## FAQs + +**Why Is the Background Color of the LightDM Login Page Black?** + +The login page is black because **background** is not set in the default configuration file **/etc/lightdm/lightdm-gtk-greeter.conf** of lightdm-gtk. +Set **background=/usr/share/backgrounds/xfce/xfce-blue.jpg** in the **greeter** section at the end of the configuration file, and then run the `systemctl restart lightdm` command. diff --git a/docs/en/tools/desktop/xfce/xfce_user_guide.md b/docs/en/tools/desktop/xfce/xfce_user_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..26d00793701b0c8fcb48ce9a1e51ab19c097ad39 --- /dev/null +++ b/docs/en/tools/desktop/xfce/xfce_user_guide.md @@ -0,0 +1,243 @@ +# Xfce Desktop Environment + +## 1. Overview + +Xfce is a lightweight desktop environment running on Unix-like operating systems. Xfce provides multiple functional components, including all applications. This document describes how to use Xfce. + +The following figure shows the WebUI. + +![Figure 1 Main screen of the desktop - big](./figures/xfce-1.png) + +
    + +## 2. Desktop + +### 2.1 Desktop Icons + +By default, icons such as the file system, main folder, and mount directory are placed. You can double-click the icons to open the page. + +![Figure 2 Default desktop icons - big](./figures/xfce-2.png) + +### 2.2 Shortcut Menu + +Right-click in the blank area on the desktop. The shortcut menus are displayed, as shown in the following figure. + +![Figure 3 Shortcut menu](./figures/xfce-3.png) + +The following table describes some options. + +| Parameter| Description| +|:----------|:----------| +| Open in New Window| Open the **Desktop** directory of the login user.| +| Create Launcher| Create a launcher.| +| Create URL Link| Create a URL link.| +| Create Folder| Create a folder.| +| Create Document| Create a text file.| +| Open Terminal Here| Create a terminal.| +| Arrange Desktop Icons| Automatically arrange desktop icons.| +| Desktop Settings| Set the background, menus, and icons.| +| Applications| Applications| + +
    + +## 3. Taskbar + +### 3.1 Basic Functions + +The taskbar is located at the top, including application, window display area, multi-view switch, and tray menus. + +![Figure 4 Taskbar](./figures/xfce-4.png) + +| Component| Description| +|:----------|:----------| +| Applications| Display all applications and settings, and allow you to search for applications and settings.| +| Window display area| The blank area in the middle of the horizontal bar, which displays running programs or opened documents. You can minimize, maximize, close, or pin the window to the top.| +| Switching views| Perform operations in multiple workspaces without interfering with each other.| +| Tray| Set the network connection, sound, power, notification center, calendar, and login user actions.| + +#### 3.1.1 Applications + +![Figure 5 All applications - big](./figures/xfce-5.png) + +#### 3.1.2 Window Display Area + +![Figure 6 Window display area - big](./figures/xfce-6.png) + +#### 3.1.3 Multi-View Switching + +Click ![](./figures/xfce-7.png) in the taskbar to enter the corresponding work area. + +For example, you can use the mouse to switch among multiple workspaces to select the operation area that you want to work in. + +![Figure 7 Switching among multiple views - big](./figures/xfce-71.png) + +#### 3.1.4 Tray + +![Figure 8 Tray menu - big](./figures/xfce-8.png) + +##### 3.1.4.1 Network + +You can click ![](./figures/xfce-81.png) on the taskbar and select a network connection mode as required. + +![Figure 9 Network connection page](./figures/xfce-811.png) + +Network settings dialog box + +Right-click the network icon ![](./figures/xfce-81.png) on the taskbar. The network setting menu is displayed. + +![Figure 10 Network settings](./figures/xfce-812.png) + +Click **Edit Connections**. The network setting dialog box is displayed. + +![Figure 11 Network setting dialog box](./figures/xfce-813.png) + +Double-click the specified network connection, for example, **enp1s0**. The page for setting the connection is displayed. + +![Figure 12 Setting the wired network](./figures/xfce-814.png) + +##### 3.1.4.2 Volume + +Click the volume icon ![](./figures/xfce-82.png) on the taskbar to open the sound page. + +![Figure 13 Volume setting window](./figures/xfce-821.png) + +##### 3.1.4.3 Power supply + +Click ![](./figures/xfce-83.png) on the taskbar. + +![Figure 14 Power supply devices](./figures/xfce-831.png) + +You can click **Power Manager Settings** to configure the display and nodes. + +![Figure 15 Setting the power manager](./figures/xfce-832.png) + +##### 3.1.4.4 Notification Center + +Click ![](./figures/xfce-84.png) on the taskbar. + +![Figure 16 Notification center - big](./figures/xfce-841.png) + +You can disable the notification function by selecting **Do not disturb**. + +The notification center displays the latest important information list. You can click **Clear log** to clear the information list. + +You can click **Notification settings** to go to the notification setting page of the control panel and set the applications to be displayed and the number of messages to be displayed. + +![Figure 17 Notification center - big](./figures/xfce-842.png) + +##### 3.1.4.5 Calendar + +You can click the date and time on the taskbar to display the calendar window and view the calendar, month calendar, and annual calendar. + +You can choose a year, a month and a day to view the information of a specific day. + +![Figure 18 Calendar-big](./figures/xfce-85.png) + +Right-click the time and date on the taskbar and click **Properties** to set the time. + +![Figure 19 Date setting - big](./figures/xfce-851.png) + +#### 3.1.4.6 Advanced Settings + +Right-click the taskbar and choose **Panel** from the shortcut menu. + +![Figure 20 Shortcut menu on the taskbar](./figures/xfce-86.png) + +You can set the layout of the taskbar and add or delete items. + +![Figure 21 Shortcut menu on the taskbar](./figures/xfce-861.png) + +##### 3.1.4.7 Login User Actions + +Click the login user on the task bar to view related actions. + +![Figure 22 Actions of a login user](./figures/xfce-87.png) + +###### 3.1.4.7.1 Lock Screen + +If you use the computer currently, you can lock the screen (which does not affect the current running status of the system) to prevent misoperations. After locking the screen, you can enter the password to log in to the system again. + +By default, the system automatically locks the screen after a period of idle time. + +###### 3.1.4.7.2 Switch User + +If you want to log in to the computer as another user, choose **Switch User**. + +Then, the system closes all running applications. Therefore, before performing this operation, save the current work. + +###### 3.1.4.7.3 Suspend + +For the sake of environmental protection and energy saving, you can select **Suspend****.** + +After that, the related data is read into the memory. Do not switch the power supply. + +###### 3.1.4.7.3 Shut Down + +You can choose **Shut Down** to shut down a computer. + +Before performing this operation, save the current work. + +###### 3.1.4.7.3 Log Out + +To log out of the GUI, click **Log Out**. + +Then, the system closes all running applications. Therefore, before performing this operation, save the current work. + +
    + +## 4. Shortcut Operation Bar + +### 4.1 Basic Functions + +The shortcut operation bar is located at the bottom, including the icons for displaying all the desktops, terminals, file managers, web browsers, application search, and user home directories. + +![Figure 23 Shortcut operation bar](./figures/xfce-9.png) + +| Component| Description | +|:----------|:----------| +| Show Desktop| Hide all windows and show the desktop. Click again to restore the window.| +| Terminal| Open a terminal.| +| File Manager| Open a file manager.| +| Web Browser| Open a web browser.| +| Application Finder| Open the application search window.| +| User Home Directory| Open the home directory of the login user.| + +#### 4.1.1 Show Desktop + +Click ![](./figures/xfce-91.png) on the shortcut operation bar to display the desktop. + +![Figure 24 Showing the desktop - big](./figures/xfce-911.png) + +#### 4.1.2 Terminal + +Click ![](./figures/xfce-92.png) on the shortcut operation bar to open a terminal. + +![Figure 25 Terminal-big](./figures/xfce-921.png) + +#### 4.1.3 File Manager + +You can click the ![](./figures/xfce-93.png) icon on the shortcut operation bar to open a file manager. + +![Figure 26 File manager - big](./figures/xfce-931.png) + +#### 4.1.4 Web Browser + +You can click the ![](./figures/xfce-94.png) icon on the shortcut operation bar to open a web browser. + +![Figure 27 Web browser - big](./figures/xfce-941.png) + +#### 4.1.5 Application Finder + +You can click the ![](./figures/xfce-95.png) icon on the shortcut operation bar to open an application program search interface. + +![Figure 28 Searching for an application - big](./figures/xfce-951.png) + +#### 4.1.6 User Home Directory + +Click ![](./figures/xfce-96.png) on the shortcut operation bar and click **Open File**. The user home directory page is displayed. + +![Figure 29 User home directory - big](./figures/xfce-961.png) + +Click the ![](./figures/xfce-96.png) icon on the shortcut operation bar, and then click **Open in Terminal** to open a terminal. The current directory is the home directory of the user. + +![Figure 30 User home directory - big](./figures/xfce-962.png) diff --git a/docs/en/tools/devops/_toc.yaml b/docs/en/tools/devops/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3b30b5afe625f71c459ab8de4c42b9bdc0a1cd35 --- /dev/null +++ b/docs/en/tools/devops/_toc.yaml @@ -0,0 +1,11 @@ +label: Community Services +sections: + - label: Source Code Management + sections: + - href: ./patch_tracking/_toc.yaml + - label: Package Management + sections: + - href: ./pkgship/_toc.yaml + - label: Package Creation + sections: + - href: ./eulermaker/_toc.yaml diff --git a/docs/en/tools/devops/eulermaker/_toc.yaml b/docs/en/tools/devops/eulermaker/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..35c1b2bc7940415032402acbb755458cebf96d91 --- /dev/null +++ b/docs/en/tools/devops/eulermaker/_toc.yaml @@ -0,0 +1,6 @@ +label: EulerMaker +isManual: true +description: EulerMaker builds source code into binary software packages +sections: + - label: EulerMaker Usage + href: ./merge_configs.md diff --git a/docs/en/tools/devops/eulermaker/figures/1686189862936_image.png b/docs/en/tools/devops/eulermaker/figures/1686189862936_image.png new file mode 100644 index 0000000000000000000000000000000000000000..25d9365f454d8ac950673c8c89ff5abcf7fb4157 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/figures/1686189862936_image.png differ diff --git a/docs/en/tools/devops/eulermaker/figures/1686190779219_image.png b/docs/en/tools/devops/eulermaker/figures/1686190779219_image.png new file mode 100644 index 0000000000000000000000000000000000000000..c94d01cd9057cdb9e3a51eefb7f389ceab72c3ee Binary files /dev/null and b/docs/en/tools/devops/eulermaker/figures/1686190779219_image.png differ diff --git a/docs/en/tools/devops/eulermaker/figures/1686190839529_image.png b/docs/en/tools/devops/eulermaker/figures/1686190839529_image.png new file mode 100644 index 0000000000000000000000000000000000000000..146eedad4cd02978bfb18ee5f4aa6bb05092cda8 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/figures/1686190839529_image.png differ diff --git a/docs/en/tools/devops/eulermaker/figures/1686193530087_image.png b/docs/en/tools/devops/eulermaker/figures/1686193530087_image.png new file mode 100644 index 0000000000000000000000000000000000000000..e89f4e78266e7dcb4ea320d74f73610438d500b0 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/figures/1686193530087_image.png differ diff --git a/docs/en/tools/devops/eulermaker/figures/1686193606679_image.png b/docs/en/tools/devops/eulermaker/figures/1686193606679_image.png new file mode 100644 index 0000000000000000000000000000000000000000..3070dddbbcd1dca259bef95d62e5ec18dcc44499 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/figures/1686193606679_image.png differ diff --git a/docs/en/tools/devops/eulermaker/figures/1686193747460_image.png b/docs/en/tools/devops/eulermaker/figures/1686193747460_image.png new file mode 100644 index 0000000000000000000000000000000000000000..76c8c5fd75b6ed406737f6c3445559c355fd21c0 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/figures/1686193747460_image.png differ diff --git a/docs/en/tools/devops/eulermaker/figures/1686194008501_image.png b/docs/en/tools/devops/eulermaker/figures/1686194008501_image.png new file mode 100644 index 0000000000000000000000000000000000000000..82134424e83f72f6c3aba04077d34f555149015d Binary files /dev/null and b/docs/en/tools/devops/eulermaker/figures/1686194008501_image.png differ diff --git a/docs/en/tools/devops/eulermaker/figures/1686194042686_image.png b/docs/en/tools/devops/eulermaker/figures/1686194042686_image.png new file mode 100644 index 0000000000000000000000000000000000000000..60f00d2b818b75b0778caacefcf7de0dae1e6663 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/figures/1686194042686_image.png differ diff --git a/docs/en/tools/devops/eulermaker/figures/image.png b/docs/en/tools/devops/eulermaker/figures/image.png new file mode 100644 index 0000000000000000000000000000000000000000..1051e6fc1a7068898108b862aea1835b43799030 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/figures/image.png differ diff --git a/docs/en/tools/devops/eulermaker/images/.keep b/docs/en/tools/devops/eulermaker/images/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/en/tools/devops/eulermaker/images/add_file.png b/docs/en/tools/devops/eulermaker/images/add_file.png new file mode 100644 index 0000000000000000000000000000000000000000..6fc4c5b089237ecbb5dabdae6954093c5234c380 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/add_file.png differ diff --git a/docs/en/tools/devops/eulermaker/images/add_package.png b/docs/en/tools/devops/eulermaker/images/add_package.png new file mode 100644 index 0000000000000000000000000000000000000000..1c58f18f4781f6c34c995d56dee131149b835df8 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/add_package.png differ diff --git a/docs/en/tools/devops/eulermaker/images/add_rpms.png b/docs/en/tools/devops/eulermaker/images/add_rpms.png new file mode 100644 index 0000000000000000000000000000000000000000..1bb748b49523bfa1b328f4bd9fbf2bf45fcf9bf2 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/add_rpms.png differ diff --git a/docs/en/tools/devops/eulermaker/images/add_rpms_2.png b/docs/en/tools/devops/eulermaker/images/add_rpms_2.png new file mode 100644 index 0000000000000000000000000000000000000000..25c845415c8ce1fdedac308b777422405502bffa Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/add_rpms_2.png differ diff --git a/docs/en/tools/devops/eulermaker/images/brach_package.png b/docs/en/tools/devops/eulermaker/images/brach_package.png new file mode 100644 index 0000000000000000000000000000000000000000..ab72263596c18b2e4a11d69c68cde4f775dcc1c5 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/brach_package.png differ diff --git a/docs/en/tools/devops/eulermaker/images/branch_package.png b/docs/en/tools/devops/eulermaker/images/branch_package.png new file mode 100644 index 0000000000000000000000000000000000000000..d9230ffbfc6b9bd006fdf6268537a8b70b43a8f4 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/branch_package.png differ diff --git a/docs/en/tools/devops/eulermaker/images/build_detail.png b/docs/en/tools/devops/eulermaker/images/build_detail.png new file mode 100644 index 0000000000000000000000000000000000000000..52a49744799e5387ba0dc76dfce3e0d4ebeb1c2f Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/build_detail.png differ diff --git a/docs/en/tools/devops/eulermaker/images/build_history.png b/docs/en/tools/devops/eulermaker/images/build_history.png new file mode 100644 index 0000000000000000000000000000000000000000..b413f18a53409a3ba6fb0891e887a9a6a10c001a Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/build_history.png differ diff --git a/docs/en/tools/devops/eulermaker/images/certification.png b/docs/en/tools/devops/eulermaker/images/certification.png new file mode 100644 index 0000000000000000000000000000000000000000..3bd145b7070b8fd2a1f5c29e762214540f747f8b Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/certification.png differ diff --git a/docs/en/tools/devops/eulermaker/images/config.png b/docs/en/tools/devops/eulermaker/images/config.png new file mode 100644 index 0000000000000000000000000000000000000000..2042e3bb09a98d34429586322de51e398ed99a20 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/config.png differ diff --git a/docs/en/tools/devops/eulermaker/images/config_net.png b/docs/en/tools/devops/eulermaker/images/config_net.png new file mode 100644 index 0000000000000000000000000000000000000000..64f514ded1a9575708c1a379e118b5297d0ee580 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/config_net.png differ diff --git a/docs/en/tools/devops/eulermaker/images/config_partition.png b/docs/en/tools/devops/eulermaker/images/config_partition.png new file mode 100644 index 0000000000000000000000000000000000000000..8f63e16cd6c9c07795ad3174a6f4de621ba6bb37 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/config_partition.png differ diff --git a/docs/en/tools/devops/eulermaker/images/config_passwd.png b/docs/en/tools/devops/eulermaker/images/config_passwd.png new file mode 100644 index 0000000000000000000000000000000000000000..e9947adc07c9147faae1ec5ad58c327b703ae86c Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/config_passwd.png differ diff --git a/docs/en/tools/devops/eulermaker/images/config_system.png b/docs/en/tools/devops/eulermaker/images/config_system.png new file mode 100644 index 0000000000000000000000000000000000000000..147fc5ba087113ec34ec4b73bc615b5d5c222d16 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/config_system.png differ diff --git a/docs/en/tools/devops/eulermaker/images/create-project.png b/docs/en/tools/devops/eulermaker/images/create-project.png new file mode 100644 index 0000000000000000000000000000000000000000..e4c80324bf81eb3a9c54d300ae2795a693959898 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/create-project.png differ diff --git a/docs/en/tools/devops/eulermaker/images/create_project.png b/docs/en/tools/devops/eulermaker/images/create_project.png new file mode 100644 index 0000000000000000000000000000000000000000..22f369f3558657c5287bb62bbe344880ea530034 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/create_project.png differ diff --git a/docs/en/tools/devops/eulermaker/images/custom_package.png b/docs/en/tools/devops/eulermaker/images/custom_package.png new file mode 100644 index 0000000000000000000000000000000000000000..7f89731a1734e9426099ad26cd9a6ac85528adf6 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/custom_package.png differ diff --git a/docs/en/tools/devops/eulermaker/images/custom_package_2.png b/docs/en/tools/devops/eulermaker/images/custom_package_2.png new file mode 100644 index 0000000000000000000000000000000000000000..612a003bd902b6e50ddc51bf94aebb6e3e08a49e Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/custom_package_2.png differ diff --git a/docs/en/tools/devops/eulermaker/images/dag_relation.PNG b/docs/en/tools/devops/eulermaker/images/dag_relation.PNG new file mode 100644 index 0000000000000000000000000000000000000000..64bc551096b0978d20dabdaee1a69bb4cfcf14fb Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/dag_relation.PNG differ diff --git a/docs/en/tools/devops/eulermaker/images/dag_relationships.png b/docs/en/tools/devops/eulermaker/images/dag_relationships.png new file mode 100644 index 0000000000000000000000000000000000000000..acfca3666f7937105337b57e1b4305c7af0681c7 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/dag_relationships.png differ diff --git a/docs/en/tools/devops/eulermaker/images/download.png b/docs/en/tools/devops/eulermaker/images/download.png new file mode 100644 index 0000000000000000000000000000000000000000..40e4d418f2f8a57fb730dec03960f995cf255ca4 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/download.png differ diff --git a/docs/en/tools/devops/eulermaker/images/enter_pipeline.png b/docs/en/tools/devops/eulermaker/images/enter_pipeline.png new file mode 100644 index 0000000000000000000000000000000000000000..bf41d190deed529ec11d7fce0c929fb914360cc2 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/enter_pipeline.png differ diff --git a/docs/en/tools/devops/eulermaker/images/fork_backlight.png b/docs/en/tools/devops/eulermaker/images/fork_backlight.png new file mode 100644 index 0000000000000000000000000000000000000000..0000eff2d35e972bf61fd2af1a7d0ae01f6d0122 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/fork_backlight.png differ diff --git a/docs/en/tools/devops/eulermaker/images/full_build.png b/docs/en/tools/devops/eulermaker/images/full_build.png new file mode 100644 index 0000000000000000000000000000000000000000..cdc25c7a4be1b2a6ea2e744086e9c31f4a5d9346 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/full_build.png differ diff --git a/docs/en/tools/devops/eulermaker/images/home.png b/docs/en/tools/devops/eulermaker/images/home.png new file mode 100644 index 0000000000000000000000000000000000000000..32d301ac9c3edea498c5445c732cbdf87c1056a8 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/home.png differ diff --git a/docs/en/tools/devops/eulermaker/images/host_parameters.png b/docs/en/tools/devops/eulermaker/images/host_parameters.png new file mode 100644 index 0000000000000000000000000000000000000000..dd13cee631c0ef793cc529f702f5de239f1a2b39 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/host_parameters.png differ diff --git a/docs/en/tools/devops/eulermaker/images/image-build-1.png b/docs/en/tools/devops/eulermaker/images/image-build-1.png new file mode 100644 index 0000000000000000000000000000000000000000..1cf2b33f2141144ffbd4164cd307f8fa81e67568 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/image-build-1.png differ diff --git a/docs/en/tools/devops/eulermaker/images/image-build-2.png b/docs/en/tools/devops/eulermaker/images/image-build-2.png new file mode 100644 index 0000000000000000000000000000000000000000..54a99f7d29965db62522f55370b1fbc3ebcced3b Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/image-build-2.png differ diff --git a/docs/en/tools/devops/eulermaker/images/image-build.png b/docs/en/tools/devops/eulermaker/images/image-build.png new file mode 100644 index 0000000000000000000000000000000000000000..71238d92d6c08fda87c4c900d68ba4cfd1f81f77 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/image-build.png differ diff --git a/docs/en/tools/devops/eulermaker/images/image-his-2.png b/docs/en/tools/devops/eulermaker/images/image-his-2.png new file mode 100644 index 0000000000000000000000000000000000000000..23956c3506f782175e920feb70c2a1d958e5818a Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/image-his-2.png differ diff --git a/docs/en/tools/devops/eulermaker/images/image-his.png b/docs/en/tools/devops/eulermaker/images/image-his.png new file mode 100644 index 0000000000000000000000000000000000000000..43dcee777c89c499efd250d8adb6c9377e18a3f9 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/image-his.png differ diff --git a/docs/en/tools/devops/eulermaker/images/image_details.png b/docs/en/tools/devops/eulermaker/images/image_details.png new file mode 100644 index 0000000000000000000000000000000000000000..9e05e11da1f2265c2f5101b247cfd980f1e250e7 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/image_details.png differ diff --git a/docs/en/tools/devops/eulermaker/images/incremental_build.png b/docs/en/tools/devops/eulermaker/images/incremental_build.png new file mode 100644 index 0000000000000000000000000000000000000000..1550b4025eb2bd7b55b9b9391e8f8130cd546a99 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/incremental_build.png differ diff --git a/docs/en/tools/devops/eulermaker/images/inherit_project.png b/docs/en/tools/devops/eulermaker/images/inherit_project.png new file mode 100644 index 0000000000000000000000000000000000000000..6faee2fa96a4ec76fb32a5acd43c469c28dbd0d3 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/inherit_project.png differ diff --git a/docs/en/tools/devops/eulermaker/images/jobs.png b/docs/en/tools/devops/eulermaker/images/jobs.png new file mode 100644 index 0000000000000000000000000000000000000000..0469194c994e0b022463b43cea7f2c92e7c74cbd Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/jobs.png differ diff --git a/docs/en/tools/devops/eulermaker/images/login.png b/docs/en/tools/devops/eulermaker/images/login.png new file mode 100644 index 0000000000000000000000000000000000000000..32383e5176d5f691fdbd079df2546385e7ce0aac Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/login.png differ diff --git a/docs/en/tools/devops/eulermaker/images/openeuler-community-login.png b/docs/en/tools/devops/eulermaker/images/openeuler-community-login.png new file mode 100644 index 0000000000000000000000000000000000000000..9e9bede08d8dba2ce9c0bd32644a42746bff48f4 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/openeuler-community-login.png differ diff --git a/docs/en/tools/devops/eulermaker/images/package_overview.png b/docs/en/tools/devops/eulermaker/images/package_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..0242c985fec75ef004d1aaec46c675ac486b3412 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/package_overview.png differ diff --git a/docs/en/tools/devops/eulermaker/images/pipeline_add.png b/docs/en/tools/devops/eulermaker/images/pipeline_add.png new file mode 100644 index 0000000000000000000000000000000000000000..2a7464d743a7a243311d7be10d32f0e75532233c Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/pipeline_add.png differ diff --git a/docs/en/tools/devops/eulermaker/images/pipeline_clone.png b/docs/en/tools/devops/eulermaker/images/pipeline_clone.png new file mode 100644 index 0000000000000000000000000000000000000000..111ba197509d71436d52734da73f4c6882b43df6 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/pipeline_clone.png differ diff --git a/docs/en/tools/devops/eulermaker/images/pipeline_delete.png b/docs/en/tools/devops/eulermaker/images/pipeline_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..2a5d91c407d99a98561dbaae9c0f73e6a6700d60 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/pipeline_delete.png differ diff --git a/docs/en/tools/devops/eulermaker/images/pipeline_list.png b/docs/en/tools/devops/eulermaker/images/pipeline_list.png new file mode 100644 index 0000000000000000000000000000000000000000..01722cdbc16f3a7de8998978aea227168ebbfe50 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/pipeline_list.png differ diff --git a/docs/en/tools/devops/eulermaker/images/pipeline_param.png b/docs/en/tools/devops/eulermaker/images/pipeline_param.png new file mode 100644 index 0000000000000000000000000000000000000000..70852e6d7112e08b54c1741b74c4923e15b6a128 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/pipeline_param.png differ diff --git a/docs/en/tools/devops/eulermaker/images/pipeline_start.png b/docs/en/tools/devops/eulermaker/images/pipeline_start.png new file mode 100644 index 0000000000000000000000000000000000000000..1f4d7ba885bb08cde3c523f7e23c0751d42f516f Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/pipeline_start.png differ diff --git a/docs/en/tools/devops/eulermaker/images/register.png b/docs/en/tools/devops/eulermaker/images/register.png new file mode 100644 index 0000000000000000000000000000000000000000..32c00ccebee78b4652ac57b9507d107d31f24f6a Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/register.png differ diff --git a/docs/en/tools/devops/eulermaker/images/release-image_build.png b/docs/en/tools/devops/eulermaker/images/release-image_build.png new file mode 100644 index 0000000000000000000000000000000000000000..56d7c636cdce03e226efd57f3c8127a579fd06be Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/release-image_build.png differ diff --git a/docs/en/tools/devops/eulermaker/images/run-job.png b/docs/en/tools/devops/eulermaker/images/run-job.png new file mode 100644 index 0000000000000000000000000000000000000000..744e674f6eed82525d60fe4c6ce6f383852c7db9 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/run-job.png differ diff --git a/docs/en/tools/devops/eulermaker/images/sign-up-local-account.png b/docs/en/tools/devops/eulermaker/images/sign-up-local-account.png new file mode 100644 index 0000000000000000000000000000000000000000..7f7ebb44d2314cab3939c57b1871d4f8b1063acf Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/sign-up-local-account.png differ diff --git a/docs/en/tools/devops/eulermaker/images/single_build.png b/docs/en/tools/devops/eulermaker/images/single_build.png new file mode 100644 index 0000000000000000000000000000000000000000..76d92fdd9c95afb984720de169712d9a5e402dcb Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/single_build.png differ diff --git a/docs/en/tools/devops/eulermaker/images/user_add.png b/docs/en/tools/devops/eulermaker/images/user_add.png new file mode 100644 index 0000000000000000000000000000000000000000..644d014f9561a7bccdc7f92cd494e38f42f20435 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/user_add.png differ diff --git a/docs/en/tools/devops/eulermaker/images/user_manager.png b/docs/en/tools/devops/eulermaker/images/user_manager.png new file mode 100644 index 0000000000000000000000000000000000000000..fd44cb94dedea095eba93a5110e8ac1a973e2b0d Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/user_manager.png differ diff --git a/docs/en/tools/devops/eulermaker/images/web-project.PNG b/docs/en/tools/devops/eulermaker/images/web-project.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4f53c375d41eb3a0481dc8ad192cb7c139248311 Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/web-project.PNG differ diff --git a/docs/en/tools/devops/eulermaker/images/wgcloud-web.PNG b/docs/en/tools/devops/eulermaker/images/wgcloud-web.PNG new file mode 100644 index 0000000000000000000000000000000000000000..3ed2a07058365b5609cf923926171df8a9b11e0f Binary files /dev/null and b/docs/en/tools/devops/eulermaker/images/wgcloud-web.PNG differ diff --git a/docs/en/tools/devops/eulermaker/merge_configs.md b/docs/en/tools/devops/eulermaker/merge_configs.md new file mode 100644 index 0000000000000000000000000000000000000000..4cb3ca81a3fbe05e2a19df0d5c0d917a37fb6cb2 --- /dev/null +++ b/docs/en/tools/devops/eulermaker/merge_configs.md @@ -0,0 +1,123 @@ +# Overview + +This feature allows users to modify, customize, and iterate build files of software packages to manage macro definition differences between build files of different versions and packages. + +## Installation and Uninstallation + +### Installation + +```shell +pip install merge_configs-0.0.6-py3-none-any.whl +``` + +### Uninstallation + +```shell +pip uninstall merge-configs +``` + +## Usage + +### Command Options + +```shell +merge-configs --help +-p PACKAGES, --packages PACKAGES: Specifies the software packages to be merged. Separate multiple software packages by spaces. +-The c CONFIG_FILE, --config_file CONFIG_FILE: Sets the hierarchical root directory file config.yaml. +-o OUTPUT, --output OUTPUT: Sets the output file path. +-d --debug: Indicates whether to set the log mode to debug. +-l LIST_FEATURES, --list-features LIST_FEATURES: If not empty, displays the user configuration information and sets the software packages in the value of -p. Use commas (,) to separate multiple software packages. +-a TARGET_ARCH, --arch TARGET_ARCH: Sets the target architecture for merge, for example, x86_64 or aarch64. +``` + +Frequently used command: + +```shell +merge-configs -p \${package} -c \${config_path}/config.yaml -o \${output_path} -a \${target_arch_name} -l \${package} +``` + +The common YAML structure is as follows: + +![](./figures/image.png) + +After the conversion: + +![](./figures/1686189862936_image.png) + +### Software Package Tailoring + +The software package compilation information is stored separately in a hierarchical architecture, including the main YAML configuration, **files.yaml** file configuration, compilation execution script, runtime execution script, and changelog. The customized content in each file is parsed and converted by `merge-configs` and takes effect during compilation. + +#### Parameter Customization + +1. Parameter name customization: +The parameter name can be modified. Generally, change only the source and patch numbers. A random parameter name may conflict with the SPEC file syntax. + +2. Parameter value customization: +The customization scope of parameter values is large. You can modify the content as required. However, do not change the value type. For example, if the value type is changed from string to list, conversion errors may occur. + +Patch number and value modification: + +![](./figures/1686190779219_image.png) + +After the conversion: + +![](./figures/1686190839529_image.png) + +#### Conditional Customization + +Add **when** conditions to the keys at the YAML configuration layer to add conditional customization. + +```text +Source: + 0: http://ftp.gnu.org/gnu/libtool/libtool-%{version}.tar.xz +source when arch in aarch64: + 100: libtool-aarch-%{version}.tar.xz +``` + +There are three customization modes: + +1. Architecture customization + + ```text + buildRequires: + - "gcc" + buildRequires when arch in x86_64: + - "gcc-c++" + buildRequires when arch not in x86_64: + - "gzip" + ``` + +2. Flag customization: +The **defineFlags** field will be converted to **bcond_with** or **bcond_without**. + + ```text + defineFlags: + +auto_compile: "" + patchset when +auto_compile: + 1001: libtool-0.0.1-auto_compile.patch + ``` + +3. Macro customization: +**%%{rpmGlobal.}** indicates the macro defined in the package information, and **%%%{rpmGlobal.}** indicates the macro defined in the RPM system. + + ```text + rpmGloal: + posttest: 0 + source when %%{rpmGlobal.posttest}: + 1: posttest.sh + source when %%%{rpmGlobal._debugsource_packages}: + 2: openEuler_setup.py + ``` + +After customization: + +![](./figures/1686194042686_image.png) + +After customization and conversion: + +![](./figures/1686194008501_image.png) + +### Conversion + +Currently, EulerMaker supports only conversion YAML to SPEC and supports only RPM package build using `rpmbuild`. diff --git a/docs/en/tools/devops/eulermaker/translation_note.txt b/docs/en/tools/devops/eulermaker/translation_note.txt new file mode 100644 index 0000000000000000000000000000000000000000..16d2f8a1a29fc00c87aa4c116de06ac643ff1155 --- /dev/null +++ b/docs/en/tools/devops/eulermaker/translation_note.txt @@ -0,0 +1 @@ +As of Jan 2024, EulerMaker does not provide English UI. The documents are not scheduled for translation. \ No newline at end of file diff --git a/docs/en/tools/devops/patch_tracking/_toc.yaml b/docs/en/tools/devops/patch_tracking/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f8ddddf56145887fae19a582abc954b7764dd741 --- /dev/null +++ b/docs/en/tools/devops/patch_tracking/_toc.yaml @@ -0,0 +1,7 @@ +label: patch-tracking +isManual: true +description: Manage software package patches +sections: + - label: patch-tracking + href: ./patch_tracking.md + diff --git a/docs/en/tools/devops/patch_tracking/images/Maintainer.jpg b/docs/en/tools/devops/patch_tracking/images/Maintainer.jpg new file mode 100644 index 0000000000000000000000000000000000000000..45912da4e7915715df0f598b9429f63bc8695667 Binary files /dev/null and b/docs/en/tools/devops/patch_tracking/images/Maintainer.jpg differ diff --git a/docs/en/tools/devops/patch_tracking/images/PatchTracking.jpg b/docs/en/tools/devops/patch_tracking/images/PatchTracking.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3bac7d2f1b4a228da8d273cdaef55f2d33792fab Binary files /dev/null and b/docs/en/tools/devops/patch_tracking/images/PatchTracking.jpg differ diff --git a/docs/en/tools/devops/patch_tracking/images/packagemanagement.png b/docs/en/tools/devops/patch_tracking/images/packagemanagement.png new file mode 100644 index 0000000000000000000000000000000000000000..6d314e2c6ad6bafd321d9f76cd6aa5f17a8cb394 Binary files /dev/null and b/docs/en/tools/devops/patch_tracking/images/packagemanagement.png differ diff --git a/docs/en/tools/devops/patch_tracking/images/panel.png b/docs/en/tools/devops/patch_tracking/images/panel.png new file mode 100644 index 0000000000000000000000000000000000000000..150eb8c8229f9e8cb47706f3b82f07516a505076 Binary files /dev/null and b/docs/en/tools/devops/patch_tracking/images/panel.png differ diff --git a/docs/en/tools/devops/patch_tracking/images/pkgship3.png b/docs/en/tools/devops/patch_tracking/images/pkgship3.png new file mode 100644 index 0000000000000000000000000000000000000000..d3061c022d272175751fc99405d057bfa6664dd5 Binary files /dev/null and b/docs/en/tools/devops/patch_tracking/images/pkgship3.png differ diff --git a/docs/en/tools/devops/patch_tracking/patch_tracking.md b/docs/en/tools/devops/patch_tracking/patch_tracking.md new file mode 100644 index 0000000000000000000000000000000000000000..6ea40c128695db1f28d44fa32b08e0d6dd83e91a --- /dev/null +++ b/docs/en/tools/devops/patch_tracking/patch_tracking.md @@ -0,0 +1,318 @@ +# patch-tracking + +## Overview + +During the development of the openEuler release, the latest code of each software package in the upstream community needs to be updated in a timely manner to fix function bugs and security issues, preventing the openEuler release from defects and vulnerabilities. + +This tool manages the patches for software packages, proactively monitors the patches submitted by the upstream community, automatically generates patches, submits issues to the corresponding Maintainer, and verifies basic patch functions to reduce the verification workload and help the Maintainer make decisions quickly. + +## Architecture + +### C/S Architecture + +The patch-tracking uses the C/S architecture. + +The patch-tracking is located in the server. It executes patch tracking tasks, including maintaining tracking items, identifying branch code changes in the upstream repository and generating patch files, and submitting issues and PRs to Gitee. In addition, the patch-tracking provides RESTful APIs for adding, deleting, modifying, and querying tracking items. + +The patch-tracking-cli is a command line tool located in the client. It invokes the RESTful APIs of the patch-tracking to add, delete, modify, and query tracking items. + +### Core Procedure + +I. Patch tracking service procedure + +The procedure for handling the submitted patch is as follows: + +1. Add the tracking item using the command line tool. +2. Automatically obtain patch files from the upstream repository (for example, GitHub) that is configured for the tracking item. +3. Create a temporary branch and submit the obtained patch file to the temporary branch. +4. Automatically submit an issue to the corresponding repository and generate the PR associated with the issue. + +![PatchTracking](./images/PatchTracking.jpg) + +II. Procedure for the Maintainer to handle the submitted patch + +The procedure for handling the submitted patch is as follows: + +1. The Maintainer analyzes the PR. +2. Execute the continuous integration (CI). After the CI is successfully executed, determine whether to merge the PR. + +![Maintainer](./images/Maintainer.jpg) + +### Data structure + +- Tracking table + +| No. | Name | Description | Type | Key | Is Null Allowed | +| :--: | --------------- | ------------------------------------------------------------ | ------- | ------- | --------------- | +| 1 | id | Sequence number of the tracking item of the self-added patch | int | - | No | +| 2 | version_control | Version control system type of the upstream SCM | String | - | No | +| 3 | scm_repo | Upstream SCM repository address | String | - | No | +| 4 | scm_branch | Upstream SCM tracking branch | String | - | No | +| 5 | scm_commit | Latest Commit ID processed by the upstream code | String | - | Yes | +| 6 | repo | Address of the Gitee repository where the package source code is stored | String | Primary | No | +| 7 | branch | Branch of the Gitee repository where the package source code is stored | String | Primary | No | +| 8 | enabled | Indicating whether to start tracking | Boolean | - | No | + +- Issue table + +| No. | Name | Description | Type | Key | Is Null Allowed | +| :--: | ------ | ------------------------------------------------------------ | ------ | ------- | --------------- | +| 1 | issue | Issue No. | String | Primary | No | +| 2 | repo | Address of the Gitee repository where the package source code is stored | String | - | No | +| 3 | branch | Branch of the Gitee repository where the package source code is stored | String | - | No | + +## Tool Deployment + +### Downloading Software + +The repo source is officially released at [https://repo.openeuler.org/](https://repo.openeuler.org/). + +The RPM package can be obtained from [[https://build.openeuler.openatom.cn/package/show/openEuler:22.03:LTS:SP4/patch-tracking](https://build.openeuler.openatom.cn/package/show/openEuler:22.03:LTS:SP4/patch-tracking)). + +### Installing the Tool + +Method 1: Install the patch-tracking from the repo source. + +1. Use DNF to mount the repo source (The repo source of 22.03 LTS SP4 or later is required. For details, see the [Application Development Guide](../../../server/development/application_dev/application_development.md)). Run the following command to download and install the patch-tracking and its dependencies. + +2. Run the following command to install the `patch-tracking`: + + ```shell + dnf install patch-tracking + ``` + +Method 2: Install the patch-tracking using the RPM package. + +1. Install the required dependencies. + + ```shell + dnf install python3-uWSGI python3-flask python3-Flask-SQLAlchemy python3-Flask-APScheduler python3-Flask-HTTPAuth python3-requests python3-pandas + ``` + +2. `patch-tracking-1.0.0-1.oe1.noarch.rpm` is used as an example. Run the following command to install the patch-tracking. + + ```shell + rpm -ivh patch-tracking-1.0.0-1.oe1.noarch.rpm + ``` + +### Generating a Certificate + +Run the following command to generate a certificate: + +```shell +openssl req -x509 -days 3650 -subj "/CN=self-signed" \ +-nodes -newkey rsa:4096 -keyout self-signed.key -out self-signed.crt +``` + +Copy the generated `self-signed.key` and `self-signed.crt` files to the **/etc/patch-tracking** directory. + +### Configuring Parameters + +Configure the corresponding parameters in the configuration file. The path of the configuration file is `/etc/patch-tracking/settings.conf`. + +1. Configure the service listening address. + + ```text + LISTEN = "127.0.0.1:5001" + ``` + +2. GitHub Token is used to access the repository information hosted in the upstream open source software repository of GitHub. For details about how to create a GitHub token, see [Creating a personal access token](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token). + + ```text + GITHUB_ACCESS_TOKEN = "" + ``` + +3. For a repository that is hosted on Gitee and needs to be tracked, configure a Gitee Token with the repository permission to submit patch files, issues, and PRs. + + ```text + GITEE_ACCESS_TOKEN = "" + ``` + +4. Scan the database as scheduled to detect whether new or modified tracking items exist and obtain upstream patches for the detected tracking items. Set the interval of scanning and the unit is second. + + ```text + SCAN_DB_INTERVAL = 3600 + ``` + +5. When the command line tool is running, you need to enter the user name and password hash value for the authentication for the POST interface. + + ```text + USER = "admin" + + PASSWORD = "" + ``` + +> The default value of `USER` is `admin`. + +Run the following command to obtain the password hash value. **Test@123** is the configured password. + +```shell +$ generate_password Test@123 +pbkdf2:sha256:150000$w38eLeRm$ebb5069ba3b4dda39a698bd1d9d7f5f848af3bd93b11e0cde2b28e9e34bfbbae +``` + +> The password hash value must meet the following complexity requirements: +> +> - The length is more than or equal to 6 bytes. +> - The password must contain uppercase letters, lowercase letters, digits, and special characters (~!@#%\^\*-\_=+). + +Add the password hash value `pbkdf2:sha256:150000$w38eLeRm$ebb5069ba3b4dda39a698bd1d9d7f5f848af3bd93b11e0cde2b28e9e34bfbbae` to the quotation marks of `PASSWORD = ""`. + +### Starting the Patch Tracking Service + +You can use either of the following methods to start the service: + +- Use the systemd mode. + + ```shell + systemctl start patch-tracking + ``` + +- Run the executable program. + + ```shell + /usr/bin/patch-tracking + ``` + +## Tool Usage + +### Adding a Tracking Item + +You can associate the software repository and branch to be tracked with the corresponding upstream open source software repository and branch in any of the following ways: + +- Using the CLI + + Parameter description: + + > --user: User name to be authenticated for the POST interface. It is the same as the USER parameter in the **settings.conf** file. + > --password: Password to be authenticated for the POST interface. It is the password string corresponding to the PASSWORD hash value in the **settings.conf** file. + > --server: URL for starting the patch tracking service, for example, 127.0.0.1:5001. + > --version\_control: Control tool of the upstream repository version. Only GitHub is supported. + > --repo: Name of the repository to be tracked, in the format of organization/repository. + > + > --branch: Branch name of the repository to be tracked. + > --scm\_repo: Name of the upstream repository to be tracked, in the GitHub format of organization/repository. + > --scm\_branch: Branch of the upstream repository to be tracked. + > + > --enabled: Indicates whether to automatically track the repository. + + For example: + + ```shell + patch-tracking-cli add --server 127.0.0.1:5001 --user admin --password Test@123 --version_control github --repo testPatchTrack/testPatch1 --branch master --scm_repo BJMX/testPatch01 --scm_branch test --enabled true + ``` + +- Using a specified file + + Parameter description: + + > --server: URL for starting the patch tracking service, for example, 127.0.0.1:5001. + > --user: User name to be authenticated for the POST interface. It is the same as the USER parameter in the **settings.conf** file. + > --password: Password to be authenticated for the POST interface. It is the password string corresponding to the PASSWORD hash value in the **settings.conf** file. + > --file: YAML file path. + + Add the information about the repository, branch, version management tool, and whether to enable monitoring to the YAML file (for example, **tracking.yaml**). The file path is used as the command of the `--file` to invoke the input parameters. + + For example: + + ```shell + patch-tracking-cli add --server 127.0.0.1:5001 --user admin --password Test@123 --file tracking.yaml + ``` + + The format of the YAML file is as follows. The content on the left of the colon (:) cannot be modified, and the content on the right of the colon (:) needs to be set based on the site requirements. + + ```shell + version_control: github + scm_repo: xxx/xxx + scm_branch: master + repo: xxx/xxx + branch: master + enabled: true + ``` + + > version\_control: Control tool of the upstream repository version. Only GitHub is supported. + > scm\_repo: Name of the upstream repository to be tracked, in the GitHub format of organization/repository. + > scm\_branch: Branch of the upstream repository to be tracked. + > repo: Name of the repository to be tracked, in the format of organization/repository. + > branch: Branch name of the repository to be tracked. + > enabled: Indicates whether to automatically track the repository. + +- Using a specified directory + + Place multiple `xxx.yaml` files in a specified directory, such as the `test_yaml`, and run the following command to record the tracking items of all YAML files in the specified directory. + + Parameter description: + + > --user: User name to be authenticated for the POST interface. It is the same as the USER parameter in the **settings.conf** file. + > --password: Password to be authenticated for the POST interface. It is the password string corresponding to the PASSWORD hash value in the **settings.conf** file. + > --server: URL for starting the patch tracking service, for example, 127.0.0.1:5001. + > --dir: Path where the YAML file is stored. + + ```shell + patch-tracking-cli add --server 127.0.0.1:5001 --user admin --password Test@123 --dir /home/Work/test_yaml/ + ``` + +### Querying a Tracking Item + +Parameter description: + +> --server: (Mandatory) URL for starting the patch tracking service, for example, 127.0.0.1:5001. +> --table: (Mandatory) Table to be queried. +> --Repo: (Optional) repo to be queried. Query all content in the table if this parameter is not configured. +> --branch: (Optional) Branch to be queried. + +```shell +patch-tracking-cli query --server --table tracking +``` + +The website can be accessed properly. + +```shell +patch-tracking-cli query --server 127.0.0.1:5001 --table tracking +``` + +### Querying the Generated Issue + +```shell +patch-tracking-cli query --server --table issue +``` + +For example: + +```shell +patch-tracking-cli query --server 127.0.0.1:5001 --table issue +``` + +### Deleting a Tracking Item + +```shell +patch-tracking-cli delete --server SERVER --user USER --password PWD --repo REPO [--branch BRANCH] +``` + +For example: + +```shell +patch-tracking-cli delete --server 127.0.0.1:5001 --user admin --password Test@123 --repo testPatchTrack/testPatch1 --branch master +``` + +> You can delete a single piece of data from a specified repo or branch. You can also delete data of all branches in a specified repo. + +### Checking Issues and PRs on Gitee + +Log in to Gitee and check the software project to be tracked. On the Issues and Pull Requests tab pages of the project, you can see the item named in `[patch tracking] TIME`, for example, the `[patch tracking] 20200713101548`. This item is the issue and PR of the patch file that is just generated. + +## FAQ + +### When I Access api.github.com, the Connection Is Refused + +#### Symptom + +During the operation of the patch-tracking, the following error message may occur: + +```text + Sep 21 22:00:10 localhost.localdomain patch-tracking[36358]: 2020-09-21 22:00:10,812 - patch_tracking.util.github_api - WARNING - HTTPSConnectionPool(host='api.github.com', port=443): Max retries exceeded with url: /user (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +``` + +#### Possible Cause + +The preceding problem is caused by the unstable network access between the patch-tracking and GitHub API. Ensure that the patch-tracking is operating in a stable network environment (for example, Huawei Cloud Hong Kong). diff --git a/docs/en/tools/devops/pkgship/_toc.yaml b/docs/en/tools/devops/pkgship/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..fb3dca87517b14716e7854eba194388ce9461306 --- /dev/null +++ b/docs/en/tools/devops/pkgship/_toc.yaml @@ -0,0 +1,6 @@ +label: pkgship +isManual: true +description: Software packages dependency lookup, lifecycle management, patch tracking, and more +sections: + - label: pkgship + href: ./pkgship.md diff --git a/docs/en/tools/devops/pkgship/images/Maintainer.jpg b/docs/en/tools/devops/pkgship/images/Maintainer.jpg new file mode 100644 index 0000000000000000000000000000000000000000..45912da4e7915715df0f598b9429f63bc8695667 Binary files /dev/null and b/docs/en/tools/devops/pkgship/images/Maintainer.jpg differ diff --git a/docs/en/tools/devops/pkgship/images/PatchTracking.jpg b/docs/en/tools/devops/pkgship/images/PatchTracking.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3bac7d2f1b4a228da8d273cdaef55f2d33792fab Binary files /dev/null and b/docs/en/tools/devops/pkgship/images/PatchTracking.jpg differ diff --git a/docs/en/tools/devops/pkgship/images/pkgship.png b/docs/en/tools/devops/pkgship/images/pkgship.png new file mode 100644 index 0000000000000000000000000000000000000000..20808309c820d9d732dd4f25d6b882e5d802afdb Binary files /dev/null and b/docs/en/tools/devops/pkgship/images/pkgship.png differ diff --git a/docs/en/tools/devops/pkgship/images/pkgship_outline.png b/docs/en/tools/devops/pkgship/images/pkgship_outline.png new file mode 100644 index 0000000000000000000000000000000000000000..6fe1247c22c6b12a83aa01a5812c444f1667b952 Binary files /dev/null and b/docs/en/tools/devops/pkgship/images/pkgship_outline.png differ diff --git a/docs/en/tools/devops/pkgship/pkgship.md b/docs/en/tools/devops/pkgship/pkgship.md new file mode 100644 index 0000000000000000000000000000000000000000..b039ce775d05249f8625a022b974d7d335951bb9 --- /dev/null +++ b/docs/en/tools/devops/pkgship/pkgship.md @@ -0,0 +1,401 @@ +# pkgship + +## Introduction + +The pkgship is a query tool used to manage the dependency of OS software packages and provide a complete dependency graph. The pkgship provides functions such as software package dependency query, lifecycle management, and patch query. + +1. Software package dependency query: Allow community personnel to understand the impact on software when software packages are introduced, updated, or deleted. +2. Patch query: Allow community personnel to learn about the patches in the openEuler software package and obtain the patch information. For details, see [patch-tracking](./../patch_tracking/patch_tracking.md). + +## Architecture + +The system uses the Flask-RESTful development mode. The following figure shows the architecture: + +![](images/pkgship.png) + +## Downloading the Software + +- The repo source is officially released at: +- You can obtain the source code at: +- You can obtain the RPM package at: + +## Operating Environment + +- Hardware configuration: + +| Item| Recommended Specification| +|----------|----------| +| CPU| 8 cores| +| Memory| 32 GB (minimum: 4 GB)| +| Network bandwidth| 300 Mbit/s| +| I/O| 375 MB/s| + +- Software configuration: + +| Name| Specifications| +|----------|----------| +| Elasticsearch| 7.10.1. Single-node and cluster deployment is available.| +| Redis| 5.0.4 or later is recommended. You are advised to set the size to 3/4 of the memory.| +| Python| 3.8 or later.| + +## Installing the Tool + +> Note: The software can run in Docker. In openEuler 21.09, due to environment restrictions, use the `--privileged` parameter when creating a Docker. Otherwise, the software fails to be started. This document will be updated after the adaptation. + +### 1\. Installing the pkgship + +You can use either of the following methods to install the pkgship: + +- Method 1: Mount the repo source using DNF. +Use DNF to mount the repo source where the pkgship is located (for details, see the [Application Development Guide](https://docs.openeuler.org/en/docs/22.03_LTS_SP1/docs/ApplicationDev/application-development.html). Then run the following command to download and install the pkgship and its dependencies: + + ```bash + dnf install pkgship + ``` + +- Method 2: Install the RPM package. Download the RPM package of the pkgship and run the following command to install the pkgship (x.x-x indicates the version number and needs to be replaced with the actual one): + + ```bash + rpm -ivh pkgship-x.x-x.oe1.noarch.rpm + ``` + + Or + + ```bash + dnf install pkgship-x.x-x.oe1.noarch.rpm + ``` + +### 2\. Installing Elasticsearch and Redis + +If Elasticsearch or Redis is not installed in the environment, you can execute the automatic installation script after the pkgship is installed. + +The default script path is as follows: + +```bash +/etc/pkgship/auto_install_pkgship_requires.sh +``` + +Run the following command: + +```bash +/bin/bash auto_install_pkgship_requires.sh elasticsearch +``` + +Or + +```bash + /bin/bash auto_install_pkgship_requires.sh redis +``` + +### 3\. Adding a User After the Installation + +After the pkgship software is installed, the system automatically creates a user named **pkgshipuser** and a user group named **pkgshipuser**. They will be used when the service is started and running. + +## Configuring Parameters + +1\. Configure the parameters in the configuration file. The default configuration file of the system is stored in **/etc/pkgship/package.ini**. Modify the configuration file as required. + +```bash +vim /etc/pkgship/package.ini +``` + +```ini +[SYSTEM-System Configuration] +; Path for storing the .yaml file imported during database initialization. The .yaml file records the location of the imported .sqlite file. +init_conf_path=/etc/pkgship/conf.yaml + +; Service query port +query_port=8090 + +; Service query IP address +query_ip_addr=127.0.0.1 + +; Address of the remote service. The command line can directly call the remote service to complete the data request. +remote_host=https://api.openeuler.org/pkgmanage + +; Directory for storing temporary files during initialization and download. The directory will not be occupied for a long time. It is recommended that the available space be at least 1 GB. +temporary_directory=/opt/pkgship/tmp/ + +[LOG-Logs] +; Service log storage path +log_path=/var/log/pkgship/ + +; Log level. The options are as follows: +; INFO DEBUG WARNING ERROR CRITICAL +log_level=INFO + +; Maximum size of a service log file. If the size of a service log file exceeds the value of this parameter, the file is automatically compressed and dumped. The default value is 30 MB. +max_bytes=31457280 + +; Maximum number of backup log files. The default value is 30. +backup_count=30 + +[UWSGI-Web Server Configuration] +; Operation log path +daemonize=/var/log/pkgship-operation/uwsgi.log +; Size of data transmitted between the front end and back end +buffer-size=65536 +; Network connection timeout interval +http-timeout=600 +; Service response time +harakiri=600 + +[REDIS-Cache Configuration] +; The address of the Redis cache server can be the released domain or IP address that can be accessed. +; The default link address is 127.0.0.1. +redis_host=127.0.0.1 + +; Port number of the Redis cache server. The default value is 6379. +redis_port=6379 + +; Maximum number of connections allowed by the Redis server at a time. +redis_max_connections=10 + +[DATABASE-Database] +; Database access address. The default value is the IP address of the local host. +database_host=127.0.0.1 + +; Database access port. The default value is 9200. +database_port=9200 + +``` + +2\. Create a YAML configuration file to initialize the database. The **conf.yaml** file is stored in the **/etc/pkgship/** directory by default. The pkgship reads the name of the database to be created and the SQLite file to be imported based on this configuration. You can also configure the repo address of the SQLite file. An example of the **conf.yaml** file is as follows: + +```yaml +dbname: oe22.03 #Database name +src_db_file: /etc/pkgship/repo/openEuler-20.09/src #Local path of the source package +bin_db_file: /etc/pkgship/repo/openEuler-20.09/bin #Local path of the binary package +priority: 1 #Database priority + +dbname: oe20.09 +src_db_file: https://repo.openeuler.org/openEuler-20.09/source #Repo source of the source package +bin_db_file: https://repo.openeuler.org/openEuler-20.09/everything/aarch64 #Repo source of the binary package +priority: 2 +``` + +> To change the storage path, change the value of **init\_conf\_path** in the **package.ini** file. +> +> The SQLite file path cannot be configured directly. +> +> The value of **dbname** can contain only lowercase letters and digits. + +## Starting and Stopping the Service + +The pkgship can be started and stopped in two modes: systemctl mode and pkgshipd mode. In systemctl mode, the automatic startup mechanism can be stopped when an exception occurs. You can run any of the following commands: + +```shell +systemctl start pkgship.service # Start the service. + +systemctl stop pkgship.service # Stop the service. + +systemctl restart pkgship.service # Restart the service. +``` + +```sh +pkgshipd start # Start the service. + +pkgshipd stop # Stop the service. +``` + +> Only one mode is supported in each start/stop period. The two modes cannot be used at the same time. +> +> The pkgshipd startup mode can be used only by the **pkgshipuser** user. +> +> If the **systemctl** command is not supported in the Docker environment, run the **pkgshipd** command to start or stop the service. + +## Using the Tool + +1. Initialize the database. + + > Application scenario: After the service is started, to query the package information and dependency in the corresponding database (for example, oe22.03 and oe20.09), you need to import the SQLite (including the source code library and binary library) generated by the **createrepo** to the service. Then insert the generated JSON body of the package information into the corresponding database of Elasticsearch. The database name is the value of d**bname-source/binary** generated based on the value of **dbname** in the **conf.yaml** file. + + ```bash + pkgship init [-filepath path] + ``` + + > Parameter description: +**-filepath**: (Optional) Specifies the path of the initialization configuration file **config.yaml.** You can use either a relative path or an absolute path. If no parameter is specified, the default configuration is used for initialization. + +2. Query a single package. + + You can query details about a source package or binary package (**packagename**) in the specified **database** table. + + > Application scenario: You can query the detailed information about the source package or binary package in a specified database. + + ```bash + pkgship pkginfo $packageName $database [-s] + ``` + + > Parameter description: +**packagename**: (Mandatory) Specifies the name of the software package to be queried. +**database**: (Mandatory) Specifies the database name. + > + > **-s**: (Optional) Specifies that the source package `src` is to be queried by `-s`. If this parameter is not specified, the binary package information of `bin` is queried by default. + +3. Query all packages. + + Query information about all packages in the database. + + > Application scenario: You can query information about all software packages in a specified database. + + ```bash + pkgship list $database [-s] + ``` + + > Parameter description: +**database**: (Mandatory) Specifies the database name. +**-s**: (Optional) Specifies that the source package `src` is to be queried by `-s`. If this parameter is not specified, the binary package information of `bin` is queried by default. + +4. Query the installation dependency. + + Query the installation dependency of the binary package (**binaryName**). + + > Application scenario: When you need to install the binary package A, you need to install B, the installation dependency of A, and C, the installation dependency of B, etc. A can be installed only after all the installation dependencies are installed in the system. Therefore, before installing the binary package A, you may need to query all installation dependencies of A. You can run the following command to query multiple databases based on the default priority of the platform, and to customize the database query priority. + + ```bash + pkgship installdep [$binaryName $binaryName1 $binaryName2...] [-dbs] [db1 db2...] [-level] $level + ``` + + > Parameter description: +**binaryName**: (Mandatory) Specifies the name of the dependent binary package to be queried. Multiple packages can be transferred. + > + > **-dbs:** (Optional) Specifies the priority of the database to be queried. If this parameter is not specified, the database is queried based on the default priority. + > + > **-level**: (Optional) Specifies the dependency level to be queried. If this parameter is not specified, the default value **0** is used, indicating that all levels are queried. + +5. Query the compilation dependency. + + Query all compilation dependencies of the source code package (**sourceName**). + + > Application scenario: To compile the source code package A, you need to install B, the compilation dependency package of A. To install B, you need to obtain all installation dependency packages of B. Therefore, before compiling the source code package A, you need to query the compilation dependencies of A and all installation dependencies of these compilation dependencies. You can run the following command to query multiple databases based on the default priority of the platform, and to customize the database query priority. + + ```bash + pkgship builddep [$sourceName $sourceName1 $sourceName2..] -dbs [db1 db2 ..] [-level] $level + ``` + + > Parameter description: +**sourceName**: (Mandatory) Specifies the name of the source package on which the compilation depends. Multiple packages can be queried. + > + > **-dbs:** (Optional) Specifies the priority of the database to be queried. If this parameter is not specified, the database is queried based on the default priority. + > + > **-level**: (Optional) Specifies the dependency level to be queried. If this parameter is not specified, the default value **0** is used, indicating that all levels are queried. + +6. Query the self-compilation and self-installation dependencies. + + Query the installation and compilation dependencies of a specified binary package (**binaryName**) or source package (**sourceName**). In the command, **\[pkgName]** indicates the name of the binary package or source package to be queried. When querying a binary package, you can query all installation dependencies of the binary package, and the compilation dependencies of the source package corresponding to the binary package, as well as all installation dependencies of these compilation dependencies. When querying a source package, you can query its compilation dependency, and all installation dependencies of the compilation dependency, as well as all installation dependencies of the binary packages generated by the source package. In addition, you can run this command together with the corresponding parameters to query the self-compilation dependency of a software package and the dependency of a subpackage. + + > Application scenario: If you want to introduce a new software package based on the existing version library, you need to introduce all compilation and installation dependencies of the software package. You can run this command to query these two dependency types at the same time to know the packages introduced by the new software package, and to query binary packages and source packages. + + ```bash + pkgship selfdepend [$pkgName1 $pkgName2 $pkgName3 ..] [-dbs] [db1 db2..] [-b] [-s] [-w] + ``` + + > Parameter description: + > + > **pkgName**: (Mandatory) Specifies the name of the software package on which the installation depends. Multiple software packages can be transferred. + > + > **-dbs:** (Optional) Specifies the priority of the database to be queried. If this parameter is not specified, the database is queried based on the default priority. + > + > **-b**: (Optional) Specifies that the package to be queried is a binary package. If this parameter is not specified, the source package is queried by default. + > + > **-s**: (Optional) If **-s** is specified, all installation dependencies, compilation dependencies (that is, compilation dependencies of the source package on which compilation depends), and installation dependencies of all compilation dependencies of the software package are queried. If **-s** is not added, all installation dependencies and layer-1 compilation dependencies of the software package, as well as all installation dependencies of layer-1 compilation dependencies, are queried. + > + > **-w**: (Optional) If **-w** is specified, when a binary package is introduced, the query result displays the source package corresponding to the binary package and all binary packages generated by the source package. If **-w** is not specified, only the corresponding source package is displayed in the query result when a binary package is imported. + +7. Query dependency. +Query the packages that depend on the software package (**pkgName**) in a database (**dbName**). + + > Application scenario: You can run this command to query the software packages that will be affected by the upgrade or deletion of the software source package A. This command displays the source packages (for example, B) that depend on the binary packages generated by source package A (if it is a source package or the input binary package for compilation). It also displays the binary packages (for example, C1) that depend on A for installation. Then, it queries the source package (for example, D) that depend on the binary package generated by B C1 for compilation and the binary package (for example E1) for installation. This process continues until it traverses the packages that depend on the binary packages. + + ```bash + pkgship bedepend dbName [$pkgName1 $pkgName2 $pkgName3] [-w] [-b] [-install/build] + ``` + + > Parameter description: + > + > **dbName**: (Mandatory) Specifies the name of the repository whose dependency needs to be queried. Only one repository can be queried each time. + > + > **pkgName**: (Mandatory) Specifies the name of the software package to be queried. Multiple software packages can be queried. + > + > **-w**: (Optional) If **-w** is not specified, the query result does not contain the subpackages of the corresponding source package by default. If **\[-w]** is specified after the command, not only the dependency of binary package C1 is queried, but also the dependency of other binary packages (such as C2 and C3) generated by source package C corresponding to C1 is queried. + > + > **-b**: (Optional) Specifies `-b` and indicates that the package to be queried is a binary package. By default, the source package is queried. + > + > **-install/build**: (Optional) `-install` indicates that installation dependencies are queried. `-build` indicates that build dependencies are queried. By default, all dependencies are queried. `-install` and `-build` are exclusive to each other. + +8. Query the database information. + + > Application scenario: Check which databases are initialized in Elasticsearch. This function returns the list of initialized databases based on the priority. + + ```bash + pkgship dbs + ``` + +9. Obtain the version number. + + > Application scenario: Obtain the version number of the pkgship software. + + ```bash + pkgship -v + ``` + +## Viewing and Dumping Logs + +### Viewing Logs + +When the pkgship service is running, two types of logs are generated: service logs and operation logs. + +1\. Service logs: + +Path: **/var/log/pkgship/log\_info.log**. You can customize the path through the **log\_path** field in the **package.ini** file. + +Function: This log records the internal running of the code to facilitate fault locating. + +Permission: The permissions on the path and the log file are 755 and 644, respectively. Common users can view the log file. + +2\. Operation logs: + +Path: **/var/log/pkgship-operation/uwsgi.log**. You can customize the path through the **daemonize** field in the **package.ini** file. + +Function: This log records user operation information, including the IP address, access time, URL, and result, to facilitate subsequent queries and record attacker information. + +Permission: The permissions on the path and the log file are 700 and 644, respectively. Only the **root** and **pkgshipuser** users can view the log file. + +### Dumping Logs + +1\. Service log dumping: + +- Dumping mechanism + + Use the dumping mechanism of the logging built-in function of Python to back up logs based on the log size. + +> The items are used to configure the capacity and number of backups of each log in the **package.ini** file. +> +> ```ini +> ; Maximum capacity of each file, the unit is byte, default is 30M +> max_bytes=31457280 +> +> ; Number of old logs to keep;default is 30 +> backup_count=30 +> ``` + +- Dumping process + + After a log is written, if the size of the log file exceeds the configured log capacity, the log file is automatically compressed and dumped. The compressed file name is **log\_info.log.***x***.gz**, where *x* is a number. A smaller number indicates a later backup. + + When the number of backup log files reaches the threshold, the earliest backup log file is deleted and the latest compressed log file is backed up. + +2\. Operation log dumping: + +- Dumping mechanism + + A script is used to dump data by time. Data is dumped once a day and is retained for 30 days. Customized configuration is not supported. + + > The script is stored in **/etc/pkgship/uwsgi\_logrotate.sh**. + +- Dumping process + + When the pkgship is started, the script for dumping data runs in the background. From the startup, dumping and compression are performed every other day. A total of 30 compressed files are retained. The compressed file name is **uwsgi.log-20201010***x***.zip**, where *x* indicates the hour when the file is compressed. + + After the pkgship is stopped, the script for dumping data is stopped and data is not dumped . When the pkgship is started again, the script for dumping data is executed again. diff --git a/docs/en/virtualization/_toc.yaml b/docs/en/virtualization/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..184700fbe5e41c00b86dfa0462651b530c7d9a3a --- /dev/null +++ b/docs/en/virtualization/_toc.yaml @@ -0,0 +1,10 @@ +label: Virtualization +sections: + - label: Virtualization Platforms + sections: + - href: ./virtualization_platform/virtualization/_toc.yaml + - href: ./virtualization_platform/stratovirt/_toc.yaml + - label: openStack User Guide + href: >- + https://openstack-sig.readthedocs.io/zh/latest/ + description: Open source platform for cloud computing management \ No newline at end of file diff --git a/docs/en/virtualization/virtualization_platform/stratovirt/_toc.yaml b/docs/en/virtualization/virtualization_platform/stratovirt/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6fb04e05d3d46e113c747ff76a15469006c4cd61 --- /dev/null +++ b/docs/en/virtualization/virtualization_platform/stratovirt/_toc.yaml @@ -0,0 +1,20 @@ +label: StratoVirt User Guide +isManual: true +description: StratoVirt serves as an enterprise-level virtualization platform tailored for cloud data centers in the computing sector. It enables a unified architecture to accommodate VMs, containers, and serverless environments +sections: + - label: StratoVirt Introduction + href: ./stratovirt_introduction.md + - label: StratoVirt Installation + href: ./install_stratovirt.md + - label: Environment Preparation + href: ./prepare_env.md + - label: VM Configuration + href: ./vm_configuration.md + - label: VM Management + href: ./vm_management.md + - label: Interconnection with the iSula Secure Container + href: ./interconnect_isula.md + - label: Interconnection with libvirt + href: ./interconnect_libvirt.md + - label: StratoVirt VFIO User Guide + href: ./stratovirt_vfio_instructions.md diff --git a/docs/en/virtualization/virtualization_platform/stratovirt/figures/StratoVirt_architecture.jpg b/docs/en/virtualization/virtualization_platform/stratovirt/figures/StratoVirt_architecture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93f1697131dd2a6f8c010def9f42ad067b9b0bd9 Binary files /dev/null and b/docs/en/virtualization/virtualization_platform/stratovirt/figures/StratoVirt_architecture.jpg differ diff --git a/docs/en/virtualization/virtualization_platform/stratovirt/install_stratovirt.md b/docs/en/virtualization/virtualization_platform/stratovirt/install_stratovirt.md new file mode 100644 index 0000000000000000000000000000000000000000..def57db336cbfe7b0c3c53b4e4a0fc346b26b025 --- /dev/null +++ b/docs/en/virtualization/virtualization_platform/stratovirt/install_stratovirt.md @@ -0,0 +1,32 @@ +# Installing StratoVirt + +## Software and Hardware Requirements + +### Minimum Hardware Requirements + +- Processor architecture: Only the AArch64 and x86_64 processor architectures are supported. AArch64 requires ARMv8 or a later version that supports virtualization extension. x86_64 requires VT-x support. + +- 2-core CPU +- 4 GiB memory +- 16 GiB available disk space + +### Software Requirements + +Operating system: openEuler 22.03 LTS SP4 + +## Component Installation + +To use StratoVirt virtualization, it is necessary to install StratoVirt. Before the installation, ensure that the openEuler Yum source has been configured. + +1. Run the following command as user **root** to install the StratoVirt component: + + ```shell + # yum install stratovirt + ``` + +2. Check whether the installation is successful. + + ```shell + $ stratovirt -version + StratoVirt 2.1.0 + ``` diff --git a/docs/en/virtualization/virtualization_platform/stratovirt/interconnect_isula.md b/docs/en/virtualization/virtualization_platform/stratovirt/interconnect_isula.md new file mode 100644 index 0000000000000000000000000000000000000000..67b3d6032320739b529c8172453cf4e4864a222e --- /dev/null +++ b/docs/en/virtualization/virtualization_platform/stratovirt/interconnect_isula.md @@ -0,0 +1,220 @@ +# Connecting to the iSula Secure Container + +## Overview + +To provide a better isolation environment for containers and improve system security, you can interconnect StratoVirt with iSula secure containers. + +## Connecting to the iSula Secure Container + +### Prerequisites + +iSulad and kata-containers have been installed, and iSulad supports the containerd-kata-shim-v2 container runtime and devicemapper storage driver. + +The following describes how to install and configure iSulad and kata-containers. + +1. Configure the Yum source and install iSulad and kata-containers as the **root** user. + + ```shell + yum install iSulad + yum install kata-containers + ``` + +2. Create and configure a storage device. + + You need to plan the drive, for example, **/dev/sdxx**, which will be formatted. + + ```shell + pvcreate /dev/sdxx + vgcreate isulaVG0 /dev/sdxx + lvcreate --wipesignatures y -n thinpool isulaVG0 -l 95%VG + lvcreate --wipesignatures y -n thinpoolmeta isulaVG0 -l 1%VG + lvconvert -y --zero n -c 512K --thinpool isulaVG0/thinpool --poolmetadata isulaVG0/thinpoolmeta + ``` + + Add the following information to the **/etc/lvm/profile/isulaVG0-thinpool.profile** configuration file: + + ```text + activation { + thin_pool_autoextend_threshold=80 + thin_pool_autoextend_percent=20 + } + ``` + + Modify **storage-driver** and **storage-opts** in the **/etc/isulad/daemon.json** configuration file as follows. Set the default storage driver type **overlay** to **devicemapper**. + + ```JSON + "storage-driver": "devicemapper", + "storage-opts": [ + "dm.thinpooldev=/dev/mapper/isulaVG0-thinpool", + "dm.fs=ext4", + "dm.min_free_space=10%" + ], + ``` + +3. Restart **isulad**. + + ```shell + systemctl daemon-reload + systemctl restart isulad + ``` + +4. Check whether the iSula storage driver is successfully configured. + + ```shell + isula info + ``` + + If the following information is displayed, the configuration is successful: + + ```text + Storage Driver: devicemapper + ``` + +### Interconnection Guide + +This section describes how to interconnect StratoVirt with kata-containers to access the iSula container ecosystem. + +#### Connecting to a Lightweight VM + +1. Modify the kata configuration file. Its default path is **/usr/share/defaults/kata-containers/configuration.toml**. You can also configure the file by referring to **configuration-stratovirt.toml** in the same directory. Modify the **hypervisor** type of the secure container to **stratovirt**, **kernel** to the absolute path of the kernel image of kata-containers, and **initrd** to the **initrd** image file of kata-containers. (If you use Yum to install kata-containers, the two image files are downloaded and stored in the **/var/lib/kata/** directory by default. You can also use other images during the configuration.) + + The modified configurations are as follows: + + ```shell + [hypervisor.stratovirt] + path = "/usr/bin/stratovirt" + kernel = "/var/lib/kata/kernel" + initrd = "/var/lib/kata/kata-containers-initrd.img" + machine_type = "microvm" + block_device_driver = "virtio-mmio" + use_vsock = true + enable_netmon = true + internetworking_model="tcfilter" + sandbox_cgroup_with_emulator = false + disable_new_netns = false + disable_block_device_use = false + disable_vhost_net = true + ``` + +2. Run the `isula` command with **root** permissions to start the BusyBox secure container and interconnect StratoVirt with it. + + ```shell + isula run -tid --runtime "io.containerd.kata.v2" --net=none --name test busybox:latest sh + ``` + +3. Run the `isula ps` command to check whether the secure container **test** is running properly. Then run the following command to access the container: + + ```shell + isula exec –ti test sh + ``` + +4. Use a VM snapshot to accelerate startup of the secure container and reduce the VM memory overhead. + + Modify the kata configuration file **configuration.toml** and set **enable_template** to **true** to allow the VM to start by creating a snapshot. + + ```shell + [factory] + # VM templating support. Once enabled, new VMs are created from template + # using vm cloning. They will share the same initial kernel, initramfs and + # agent memory by mapping it readonly. It helps speeding up new container + # creation and saves a lot of memory if there are many kata containers running + # on the same host. + # + # When disabled, new VMs are created from scratch. + # + # Note: Requires "initrd=" to be set ("image=" is not supported). + # + # Default false + enable_template = true + ``` + + After the **enable_template** configuration item is set to **true**, kata-containers checks whether a snapshot file exists in the default path (**/run/vc/vm/template**) during secure container creation. If yes, kata-containers starts the VM using the snapshot file. If no, kata-containers creates a VM snapshot and start the VM using the snapshot file. + +5. Use the security component Ozone to further enhance the isolation of secure containers. + + Modify the kata configuration file **configuration.toml** and set the configuration item **ozone_path** to the path of the Ozone executable file. (If StratoVirt is installed using Yum, the Ozone executable file is stored in the **/usr/bin** directory by default.) After this item is configured, the Ozone security sandbox function is enabled to protect the VM against attacks after the virtualization layer isolation is broken and further enhance the isolation of StratoVirt secure containers. + + ```toml + # Path for the ozone specific to stratovirt + # If the ozone path is set, stratovirt will be launched in + # ozone secure environment. It is disabled by default. + ozone_path = "/usr/bin/ozone" + ``` + + You can now run container commands in the **test** container. + +#### Connecting to a Standard VM + +To use a StratoVirt standard VM as the sandbox of a secure container, you need to modify some other configurations. + +1. The configurations are as follows: + + ```text + [hypervisor.stratovirt] + path = "/usr/bin/stratovirt" + kernel = "/var/lib/kata/kernel" + initrd = "/var/lib/kata/kata-containers-initrd.img" + # x86_64 architecture + machine_type = "q35" + # AArch64 architecture + machine_type = "virt" + block_device_driver = "virtio-blk" + pcie_root_port = 2 + use_vsock = true + enable_netmon = true + internetworking_model = "tcfilter" + sandbox_cgroup_with_emulator = false + disable_new_netns = false + disable_block_device_use = false + disable_vhost_net = true + ``` + + In the configurations above, modify the VM type according to the architecture of the host machine. Change the value of **block_device_driver** to **virtio-blk**. StratoVirt supports only devices hot-plugged to the root port. Set a proper value of **pcie_root_port** based on the number of devices to be hot-plugged. + +2. Install the firmware required for starting a standard VM. + + x86_64 architecture: + + ```shell + yum install -y edk2-ovmf + ``` + + AArch64 architecture: + + ```shell + yum install -y edk2-aarch64 + ``` + +3. Build and replace the binary file of kata-containers 2.x. + + Currently, a StratoVirt standard VMs can only be used as the sandbox of a kata-containers 2.x container (corresponding to the openEuler-21.09 branch in the kata-containers repository). You need to download and compile the kata-containers source code and replace the **containerd-shim-kata-v2** binary file in the **/usr/bin** directory. + + ```shell + mkdir -p /root/go/src/github.com/ + cd /root/go/src/github.com/ + git clone https://gitee.com/src-openeuler/kata-containers.git + cd kata-containers + git checkout openEuler-21.09 + ./apply-patches + cd src/runtime + make + ``` + + Back up the kata binary file in the **/usr/bin/** directory and replace it with the compiled binary file **containerd-shim-kata-v2**. + + ```shell + cp /usr/bin/containerd-shim-kata-v2 /usr/bin/containerd-shim-kata-v2.bk + cp containerd-shim-kata-v2 /usr/bin/containerd-shim-kata-v2 + ``` + +4. Run the `isula` command with **root** permissions to start the BusyBox secure container and interconnect StratoVirt with it. + + ```shell + isula run -tid --runtime "io.containerd.kata.v2" --net=none --name test busybox:latest sh + ``` + +5. Run the `isula ps` command to check whether the secure container **test** is running properly. Then run the following command to access the container: + + ```shell + isula exec -ti test sh + ``` diff --git a/docs/en/virtualization/virtualization_platform/stratovirt/interconnect_libvirt.md b/docs/en/virtualization/virtualization_platform/stratovirt/interconnect_libvirt.md new file mode 100644 index 0000000000000000000000000000000000000000..3e496675951dc809e9cb5d32079d1e0c15f182ff --- /dev/null +++ b/docs/en/virtualization/virtualization_platform/stratovirt/interconnect_libvirt.md @@ -0,0 +1,637 @@ +# Interconnecting with libvirt + +## Overview + +libvirt is an upper-layer software that manages different types of Hypervisors using different drivers and provides unified and stable APIs. + +In cloud scenarios, libvirt is widely used to manage large numbers of VMs. To facilitate the deployment, orchestration, and management of large-scale StratoVirt VMs, StratoVirt interconnects with libvirt through the libvirt northbound interface. In this case, you can use an XML file of libvirt to describe a VM, including the VM name, CPU, and disks. + +This chapter describes the XML configurations supported by the StratoVirt platform and how to use the `virsh` command to manage VMs. + +## Prerequisites + +To interconnect StratoVirt with libvirt, the host must meet the following requirements: + +- The Yum source has been correctly configured. +- libvirt has been correctly installed and started. +- StratoVirt has been correctly installed. + +## VM Configuration + +The libvirt tool uses an XML file to describe features about a VM, including the VM name, CPUs, memory, disks, and NICs. You can manage the VM by modifying the XML configuration file. + +Before interconnecting StratoVirt with libvirt, configure the XML file first. This section describes the supported XML configuration items and configuration methods during interconnection between StratoVirt and libvirt. + +> [!NOTE]**NOTE** +> +> Before using libvirt to manage StratoVirt VMs, pay attention to the features supported by StratoVirt, including mutually exclusive relationships between features, and feature prerequisites and specifications. For details, see [Configuring VMs](./vm_configuration.md) in CLI mode. + +### VM Description + +A VM XML file must contain the two basic elements that describe the VM: **domain** and **name**. + +#### Elements + +- **domain**: root element of the VM configuration, which is used to configure the Hypervisor type that runs the StratoVirt VM. + + Attribute **type**: type of **domain**. In StratoVirt, the value is **kvm**. + +- **name**: VM name. + + A VM name contains a maximum of 255 characters, consisting of digits, letters, underscores, hyphens, and colons. Names of VMs on the same host must be unique. + +#### Configuration Example + +Assume that the VM name is StratoVirt. The following is the example: + +```shell + + StratoVirt + ... + +``` + +### Virtual CPU and Memory + +This section describes how to configure virtual CPUs and memory. + +#### Elements + +- **vcpu**: number of virtual processors. + +- **memory**: size of the virtual memory. + + Attribute **unit**: memory unit. The value can be **KiB** (210 bytes), **MiB** (220 bytes), **GiB** (230 bytes), or **TiB** (240 bytes). + + > [!NOTE]**NOTE** + > + > StratoVirt does not support the CPU topology. Do not set this item. + +#### Configuration Example + +The following is an example of configuring 8 GiB memory and four virtual CPUs: + +```xml + + ... + 4 + 8 + ... + +``` + +### VM Devices + +This section describes how to use the XML file to configure VM devices, including disk, NIC, RNG (random number generator), balloon, console, and vsock devices. + +#### Disks + +#### Elements + +- Attribute **type**: type of the backend storage medium. In StraroVirt, the value is **file**. + + Attribute **device**: type of the storage medium presented to the VM. In StraroVirt, the value is **disk**. + +- **driver**: details about the backend driver. + + Attribute **type**: disk format type. In StraroVirt, the value is **raw**. Currently, StratoVirt supports only **raw** disks. + + Attribute **iothread**: iothread configured for the disk. The value is the iothread ID. Before configuring the disk iothread, use the **iothread** element to configure the iothread quantity. + +- **source**: backend storage medium. + + Attribute **file**: disk path. + +- **target**: details about the backend driver. + + Attribute **dev**: disk name. + + Attribute **bus**: disk device type. In StraroVirt, the value is **virtio**. + +- **iotune**: disk I/O feature. + + Attribute **total_iops_sec**: disk IOPS. + +- **address**: attribute of the bus to which the device is to be mounted. + + Attribute **type**: bus type. In StratoVirt, the value is **pci**. + + Attribute **domain**: domain of the VM. + + Attribute **bus**: ID of the bus to which the device is to be mounted. + + Attribute **slot**: ID of the slot to which the device is to be mounted. The value range is \[0, 31]. + + Attribute **function**: ID of the function to which the device is to be mounted. The value range is \[0, 7]. + +#### Configuration Example + +Set the disk path to **/home/openEuler-22.03-LTS-SP4-stratovirt.img**, iothread quantity to **1**, disk iothread to **iothread1**, and IOPS to **10000**, and mount the disk to the PCI bus whose bus ID is 1, slot ID is 0, and function ID is 0. The following is the example: + +```xml + + ... + 1 + + + + + + + 10000 + +
    + + ... + + +``` + +#### Network Devices + +#### Elements + +- **interface**: network interface. + + Attribute **type**: network device type. + +- **mac**: virtual NIC address. + + Attribute **address**: virtual NIC address. + +- **source**: backend network bridge. + + Attribute **bridge**: network bridge. + +- **target**: backend NIC. + + Attribute **dev**: backend tap device. + +- **model**: virtual NIC type. + + Attribute **type**: virtual NIC type. In StratoVirt, the value is **virtio**. + +- **driver**: whether to enable the vhost. + + Attribute **name**: If **name** is set to **qemu**, the virtio-net device is used. If **driver** is not configured or **name** is set to **vhost**, the vhost-net device is used. + +#### Configuration Example + +Before configuring the network, [configure the Linux bridge](.././virtualization/environment_preparation.md#setting-up-a-linux-bridge) first. Set the MAC address to **de:ad:be:ef:00:01** and network bridge to **br0**. Use the virtio-net device, and mount it to the PCI bus whose bus ID is 2, slot ID is 0, and function ID is 0. The following is the example: + +```xml + + ... + + + + + + +
    + + ... + + +``` + +#### Balloon Devices + +#### Elements + +- **memballoon**: balloon device type. + + Attribute **model**: type of the balloon device. In StratoVirt, the value is **virtio**. + +- **alias**: alias of the balloon device. + + Attribute **name**: ID of the balloon device. + + Attribute **autodeflate**: auto deflate feature. The options are **on** and **off**. + +#### Configuration Example + +Configure the balloon device, enable the auto deflate feature, and mount it to the PCI bus whose bus ID is 3, slot ID is 0, and function ID is 0. The following is the example: + +```xml + + ... + + + + +
    + + ... + + +``` + +#### Console Devices + +The console device is mounted to the virtio-serial bus. Therefore, you need to create a virtio-serial device when creating a console device. + +> [!NOTE]**NOTE** +> +> The console device of StratoVirt does not support the multi-port feature. Each VM can be configured with only one console device. + +#### Elements + +- **controller**: controller. + + Attribute **type**: controller type. The value is **virtio-serial**. + +- **alias**: alias. + + Attribute **name**: device ID. + +- **console**: console device. + + Attribute **type**: redirection mode of the console device. The following redirection modes are supported: **pty**, **file**, and **unix**. + +- **target**: configuration of the console device. + + Attribute **type**: console device type. In StratoVirt, the value is **virtio**. + +#### Configuration Example + +Set the redirection mode to **pty** and mount the console device to the PCI bus whose bus ID is 4, slot ID is 0, and function ID is 0. The following is the example: + +```xml + + ... + + + +
    + + + + + + ... + + +``` + +#### RNG Devices + +#### Elements + +- **rng**: RNG device. + + Attribute **model**: type of the RNG device. In StratoVirt, the value is **virtio**. + +- **rate**: rate at which the RNG device generates random numbers. + + Attribute **period**: period of random number generation, in milliseconds. Currently, the StratoVirt does not allow you to set the period value. The default value (1000 milliseconds) is used. + + Attribute **bytes**: maximum number of bytes generated in a period. + +- **backend**: RNG device backend. The value is the path of the RNG device on the host. + + Attribute **model**: type of the backend device. In StratoVirt, the value is **random**. + +#### Configuration Example + +Configure that a maximum of 1234 bytes are generated within 1000 ms. The path of the RNG device on the host is **/dev/random**, and the device is mounted to the PCI bus whose bus ID is 5, slot ID is 0, and function ID is 0. The following is the example: + +```xml + + ... + + + + /dev/random +
    + + ... + + +``` + +#### vsock Devices + +#### Elements + +- **vsock**: vsock device. + + Attribute **model**: type of the vsock device. In StratoVirt, the value is **virtio**. + +- **cid**: CID of the vsock device. + + Attribute **address**: sets the CID value. + +#### Configuration Example + +Set **cid** to **8** and mount the device to the PCI bus whose bus ID is 6, slot ID is 0, and function ID is 0. The following is the example: + +```xml + + ... + + + +
    + + ... + + +``` + +### System Architecture Configuration + +The XML file also contains some architecture-related configurations, such as the pflash and mainboard. + +#### Elements + +- **os**: defines VM startup parameters. + + Child element **type**: VM type. Attribute **arch** indicates the architecture and **machine** indicates the mainboard type. In StratoVirt, the AArch64 architecture supports only the virt mainboard, and the x86_64 architecture supports only the Q35 mainboard. + + Child element **kernel**: kernel path. + + Child element **cmdline**: command line startup parameters. + + Child element **loader**: loading firmware. Attribute **readonly** indicates that the firmware is read-only and **type** indicates the firmware type. In StratoVirt, the type value is **pflash**. + +- **features**: features supported by Hypervisors. + + Child element **acpi**: whether to support ACPI. The ACPI feature is used in StratoVirt, so it must be configured. + + Child element **gic**: interrupt processor specified for ARM processors. Attribute **version** indicates the GIC version. In StratoVirt, the value is **3**. + +#### Configuration Example + +Set the CPU architecture of the VM to ARM and the mainboard to **virt**. The startup command is `console=ttyAMA0 root=/dev/vda reboot=k panic=1 rw`. The path of pflash is **/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw**, which is read-only. The kernel path is **/home/std-vmlinuxz**. The following is the example: + +```xml + + ... + + hvm + /home/std-vmlinuxz + console=ttyAMA0 root=/dev/vda reboot=k panic=1 rw + `/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw` + + ... + +``` + +### Huge Page Memory + +#### Elements + +- **memoryBacking**: configures the memory information. + +- **hugepages**: configures memory huge pages. + +- **page**: configures huge pages. + + Attribute **size**: size of huge memory pages. + + Attribute **unit**: unit of the huge page size. + +#### Configuration Example + +The following is an example of configuring 2 MiB huge pages: + +```xml + + ... + + + + + + ... + +``` + +### Configuration Examples + +#### x86 Configuration Example + +Configure a server named StratoVirt with 8 GiB memory, 1 GiB huge pages, and four vCPUs. Its architecture is x86_64 and the mainboard type is Q35. The following is a configuration example of the corresponding XML file: + +```xml + + StratoVirt + 8 + + + + + + + 4 + + 1 + + hvm + /path/to/standard_vm_kernel + console=hvc0 root=/dev/vda reboot=k panic=1 rw + /path/to/pflash + /path/to/OVMF_VARS + + + + + + /path/to/StratoVirt_binary_file + + + + + + + + + + + + + + + + 1000 + +
    + + + + + + +
    + + + + +
    + + + + + + + + +
    + + + + + /path/to/random_file +
    + + + + +
    + + + +``` + +#### ARM Configuration Example + +Configure a server named StratoVirt with 8 GiB memory, 1 GiB huge pages, four vCPUs. Its architecture is AArch64 and the mainboard type is virt. The configuration example of the corresponding XML file is as follows: + +```xml + + StratoVirt + 8 + + + + + + + 4 + + 1 + + hvm + /path/to/standard_vm_kernel + console=ttyAMA0 root=/dev/vda reboot=k panic=1 rw + /path/to/pflash + + + + + + + /path/to/StratoVirt_binary_file + + + + + + +
    + + 1000 + + + + + + + +
    + + + + +
    + + + + + + + + +
    + + + + + /path/to/random_file +
    + + + + +
    + + + +``` + +## VM Management + +libvirt uses `virsh` commands to manage VMs. After the StratoVirt platform is interconnected with libvirt, only the following commands for interaction with StratoVirt are supported: + +- `create`: creates a VM. + +- `suspend`: suspends a VM. + +- `resume`: resumes a VM. + +- `destroy`: destroys a VM. + +- `console`: logs in to a VM through the console. + +> [!NOTE]**NOTE** +> +> StratoVirt does not support commands for restarting or shutting down VMs. + +### VM Lifecycle Management + +If you have created a VM configuration file named **StratoVirt** in st.xml format, you can use the following commands for VM lifecycle management: + +- Creating a VM. + + ```shell + virsh create st.xml + ``` + + After the VM is created, you can run the `virsh list` command to check whether a VM named **StratoVirt** exists. + +- Suspending a VM. + + ```shell + virsh suspend StratoVirt + ``` + + After the VM is suspended, it stops running. You can run the `virsh list` command to check whether the status of VM **StratoVirt** is **paused**. + +- Resuming a VM. + + ```shell + virsh resume StratoVirt + ``` + + After the VM is resumed, you can run the `virsh list` command to check whether the status of VM **StratoVirt** is **running**. + +- Destroying a VM. + + ```shell + virsh destroy StratoVirt + ``` + + After the VM is destroyed, you can run the `virsh list` command to check that VM **StratoVirt** does not exist. + +### VM Login + +After the VM is created, you can run the `virsh console` command to log in to it to perform specific operations. If the VM name is **StratoVirt**, run the following command: + +```shell +virsh console StratoVirt +``` + +> [!NOTE]**NOTE** +> +> To use the `virsh console` command, set the redirection type of the console device to **pty** in the XML file. diff --git a/docs/en/virtualization/virtualization_platform/stratovirt/prepare_env.md b/docs/en/virtualization/virtualization_platform/stratovirt/prepare_env.md new file mode 100644 index 0000000000000000000000000000000000000000..78054e5d849bb6bf4db9329b022d6bf9a4688df3 --- /dev/null +++ b/docs/en/virtualization/virtualization_platform/stratovirt/prepare_env.md @@ -0,0 +1,164 @@ +# Preparing the Environment + +## Usage + +- StratoVirt can run on VMs with the x86_64 or AArch64 processor architecture. +- You are advised to compile, debug, and deploy StratoVirt on openEuler 22.03 LTS SP4. +- StratoVirt can run with non-root permissions. + +## Environment Requirements + +The following are required in the environment for running StratoVirt: + +- /dev/vhost-vsock device (for implementing MMIO) +- nmap tool +- Kernel and rootfs images + +## Preparing Devices and Tools + +- To run StratoVirt, the MMIO device must be implemented. Therefore, before running StratoVirt, ensure that the **/dev/vhost-vsock** device exists. + + Check whether the device exists. + + ```sh + $ ls /dev/vhost-vsock + /dev/vhost-vsock + ``` + + If the device does not exist, run the following command to generate it: + + ```sh + modprobe vhost_vsock + ``` + +- To use QMP commands, install the nmap tool first. After configuring the Yum source, run the following command to install the tool: + + ```sh + # yum install nmap + ``` + +## Preparing Images + +### Creating the Kernel Image + +StratoVirt of the current version supports only the PE kernel image of the x86_64 and AArch64 platforms. The kernel image in PE format can be generated by using the following method: + +1. Run the following commands to obtain the kernel source code of openEuler: + + ```sh + git clone https://gitee.com/openeuler/kernel.git + cd kernel + ``` + +2. Run the following command to check and switch to the kernel version openEuler-22.03-LTS-SP4: + + ```sh + git checkout openEuler-22.03-LTS-SP4 + ``` + +3. Configure and compile the Linux kernel. You are advised to use the [recommended configuration file](https://gitee.com/openeuler/stratovirt/tree/master/docs/kernel_config)). Copy the file to the kernel directory, rename it to **.config**, and run the `make olddefconfig` command to update to the latest default configuration (otherwise, you may need to manually select options for subsequent compilation). Alternatively, you can run the following command to configure the kernel as prompted. The system may display a message indicating that specific dependencies are missing. Run the `yum install` command to install the dependencies as prompted. + + ```sh + make menuconfig + ``` + +4. Run the following command to create and convert the kernel image to the PE format. The converted image is **vmlinux.bin**. + + ```sh + make -j vmlinux && objcopy -O binary vmlinux vmlinux.bin + ``` + +5. If you want to use the kernel in bzImzge format on the x86 platform, run the following command: + + ```sh + make -j bzImage + ``` + +## Creating the Rootfs Image + +The rootfs image is a file system image. When StratoVirt is started, the ext4 image with **init** can be loaded. To create an ext4 rootfs image, perform the following steps: + +1. Prepare a file with a proper size (for example, create a file with the size of 10 GB in **/home**). + + ```sh + cd /home + dd if=/dev/zero of=./rootfs.ext4 bs=1G count=10 + ``` + +2. Create an empty ext4 file system on this file. + + ```sh + mkfs.ext4 ./rootfs.ext4 + ``` + +3. Mount the file image. Create the **/mnt/rootfs** directory and mount **rootfs.ext4** to the directory as user **root**. + + ```sh + $ mkdir /mnt/rootfs + # Return to the directory where the file system is created, for example, **/home**. + $ cd /home + $ sudo mount ./rootfs.ext4 /mnt/rootfs && cd /mnt/rootfs + ``` + +4. Obtain the latest alpine-mini rootfs of the corresponding processor architecture. + + - If the AArch64 processor architecture is used, you can get the latest rootfs from the [alpine](http://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/). For example, alpine-minirootfs-3.16.0-aarch64.tar.gz, the reference commands are as follows: + + ```sh + wget http://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/aarch64/alpine-minirootfs-3.16.0-aarch64.tar.gz + tar -zxvf alpine-minirootfs-3.16.0-aarch64.tar.gz + rm alpine-minirootfs-3.16.0-aarch64.tar.gz + ``` + + - If the x86_64 processor architecture is used, you can get the latest rootfs from the [alpine](http://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/). For example, alpine-minirootfs-3.16.0-x86_64.tar.gz, the reference commands are as follows: + + ```sh + wget http://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/x86_64/alpine-minirootfs-3.16.0-x86_64.tar.gz + tar -zxvf alpine-minirootfs-3.16.0-x86_64.tar.gz + rm alpine-minirootfs-3.16.0-x86_64.tar.gz + ``` + +5. Run the following commands to create a simple **/sbin/init** for the ext4 file image: + + ```sh + $ rm sbin/init; touch sbin/init && cat > sbin/init < /sys/bus/pci/devices/0000:03:00.0/driver/unbind + ``` + + Finally bind the PCI device to the vfio-pci driver. + + ```shell + lspci -ns 0000:03:00.0 |awk -F':| ' '{print 5" "6}' > /sys/bus/pci/drivers/vfio-pci/new_id + ``` + + After the NIC is bound to the vfio-pci driver, the NIC information cannot be queried on the host. Only the PCI device information can be queried. + +## VFIO Device Passthrough + +### Introduction + +The VFIO is a user-mode device driver solution provided by the kernel. The VFIO driver can securely present capabilities such as device I/O, interrupt, and DMA to user space. After StratoVirt uses the VFIO device passthrough solution, the I/O performance of VMs is greatly improved. + +### Using VFIO Passthrough + +StratoVirt interconnects with libvirt to enable you to manage and configure VMs by modifying corresponding XML files. The following describes how to enable VFIO passthrough by modifying the XML file of a VM. + +**Step 1** Modify the XML file. + +(1) Run the following command on the host to query the CPU architecture information: + + ```shell + # uname -m + ``` + +(2) For the AArch64 and x86_64 architectures, [download](https://gitee.com/openeuler/stratovirt/tree/master/docs) the StratoVirt XML file **stratovirt_aarch64.xml** or **stratovirtvirt_x86.xml** and save it to any directory, for example, **/home**. + + ```shell + # cp stratovirt/docs/stratovirt_$arch.xml /home + ``` + +(3) Modify the VFIO configuration in the XML file based on the site requirements. **bus**, **slot**, and **function** specify the PCI device bound to the vfio-pci driver. The related configurations are as follows: + +```shell + + + + +
    + + +``` + +In the preceding example, the device type is PCI, and **managed='yes'** indicates that libvirt unbinds the PCI device from the host and rebinds it to the vfio-pci driver. In the**source** item, the **domain**, **bus**, **slot**, and **function** of the VFIO passthrough device are configured. + +**Step 2** Create and log in to a VM using the libvirt command line. + +```shell +# virsh create stratovirt_$arch.xml +# virsh list --all +Id Name State +-------------------- +1 StratoVirt running +# virsh console 1 +``` + +**Step 3** View and use the VFIO passthrough NIC on the VM. + +(1) Check the NIC information before configuration. + + ```shell + # ip a + 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + inet 127.0.0.1/8 scope host lo + valid_lft forever preferred_lft forever + 2: enp1s0: mtu 1500 qdisc noop state DOWN group default qlen 1000 + link/ether 72:b8:51:9d:d1:27 brd ff:ff:ff:ff:ff:ff + ``` + +(2) Dynamically configure the IP address of the NIC. + + ```shell + # dhclient + ``` + +(3) Check whether the IP address is configured successfully. + + ```shell + # ip a + 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + inet 127.0.0.1/8 scope host lo + valid_lft forever preferred_lft forever + 2: enp1s0: mtu 1500 qdisc mq state UP group default qlen 1000 + link/ether 72:b8:51:9d:d1:27 brd ff:ff:ff:ff:ff:ff + inet 192.168.1.3/16 brd 192.168.255.255 scope global dynamic enp1s0 + valid_lft 86453sec preferred_lft 86453sec + ``` + + The preceding command output indicates that the IP address 192.168.1.3 is successfully assigned and the VM can directly use the configured NIC. + + Note: If the passthrough NIC is not connected to a physical network, network information cannot be obtained. + +### Unbinding the VFIO Driver + +To unbind a passthrough NIC from a VM, log in to the host and run the following command to bind the NIC to the host again.**hinic** indicates the NIC driver type. + +```shell +# echo 0000:03:00.0 > /sys/bus/pci/drivers/vfio-pci/unbind +# echo 0000:03:00.0 > /sys/bus/pci/drivers/hinic/bind +``` + +Note: Before binding a VFIO driver, you can run the **ethtool -i enp0** command on the host to obtain the NIC driver type.**enp0** indicates the name of the corresponding NIC. + +## SR-IOV Passthrough + +### Introduction + +When VFIO passthrough is enabled, VMs can directly access hardware, but each device can be exclusively used by only one VM. The SR-IOV passthrough technology can virtualize a physical function (PF) into multiple virtual functions (VFs) and directly pass the VFs to different VMs. This technology increases the number of available devices. + +### Procedure + +**Step 1** Create multiple VFs. + +The **sriov_numvfs** file is used to describe the count of VFs provided by SR-IOV and is stored in **/sys/bus/pci/devices/domain\:bus\:slot.function/**. For example, for the device whose bus ID is 03, slot ID is 00, and function ID is 0 in the preceding example, you can run the following command to create four VFs: + +```shell +# echo 4 > /sys/bus/pci/devices/0000\:03\:00.0/sriov_numvfs +``` + +**Step 2** Verify that the VFs are successfully created. + +```shell +# lspci -v | grep "Eth" | grep 1822 +``` + +If the following information is displayed, four VFs 03:00.1, 03:00.2, 03:00.3, and 03:00.4 are successfully created: + +```shell +03:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45) +03:00.1 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) +03:00.2 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) +03:00.3 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) +03:00.4 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) +``` + +**Step 3** All the created VFs can be passed to VMs. The method for using an SR-IOV device is the same as that for using a common PCI device. diff --git a/docs/en/virtualization/virtualization_platform/stratovirt/vm_configuration.md b/docs/en/virtualization/virtualization_platform/stratovirt/vm_configuration.md new file mode 100644 index 0000000000000000000000000000000000000000..0e5be06c49c697c629afa46739d9f1179dd5c3e5 --- /dev/null +++ b/docs/en/virtualization/virtualization_platform/stratovirt/vm_configuration.md @@ -0,0 +1,564 @@ +# Configuring VMs + +## Overview + +With StratoVirt, you can use command line parameters to specify VM configurations. Alternatively, you can interconnect StratoVirt with libvirt and use XML files to configure VMs. This chapter describes the command-line configuration mode. + +> [!NOTE]**NOTE** +> +> In this document, **/path/to/socket** indicates the socket file in the user-defined path. +> +> In openEuler 22.03 LTS SP4 and later versions, JSON files are not supported. + +## Specifications + +StratoVirt supports lightweight and standard VMs. + +- Lightweight VMs use the lightweight microVM mainboard and the MMIO bus. +- Standard VMs support standard startup. They use the Q35 mainboard on x86 platforms, and the virt mainboard and PCI bus on AArch64 platforms. + +### Lightweight VMs + +- Number of VM CPUs: \[1, 254\] +- VM memory size: \[256 MiB, 512 GiB\] +- Number of VM disks (including hot plugged-in disks): \[0, 6\] +- Number of VM NICs (including hot plugged-in NICs): \[0, 2\] +- The VM console device supports only single way connection. +- If the host CPU architecture is x86_64, a maximum of 11 MMIO devices can be configured. However, you are advised to configure a maximum of two other devices except disks and NICs. On the AArch64 platform, a maximum of 160 MMIO devices can be configured. You are advised to configure a maximum of 12 other devices except disks and NICs. + +### Standard VMs + +- Number of VM CPUs: \[1, 254\] +- VM memory size: \[256 MiB, 512 GiB\] +- The VM console device supports only single way connection. +- Only one console device is supported. +- A maximum of 32 PCI devices are supported. +- PCI bus to which the PCI device is mounted: slot ID \[0, 32); function ID \[0, 8). + +## Minimal Configuration + +The minimum configuration for running StratoVirt is as follows: + +- Use the Linux kernel image in PE or bzImage format (x86_64 only). +- Set the rootfs image as the virtio-blk device and add it to kernel parameters. +- Use api-channel to control StratoVirt. +- To use a serial port for login, add one to the kernel startup command line. The standard model on the AArch64 platform is ttyAMA0, and the model used in other scenarios is ttyS0. + +## Configuration Description + +### Command Format + +The format of the command configured by running cmdline is as follows: + +**/path/to/stratovirt** _- \[Parameter 1\] \[Option\]-\[Parameter 2\] \[Option\]..._ + +### Usage Instructions + +1. To ensure that the socket required by the api-channel can be created, run the following command to clear the environment: + + ```shell + rm [parameter] *[user-defined socket file path]* + ``` + +2. Run the cmdline command. + + ```shell + /path/to/stratovirt - [Parameter 1] [Parameter option] - [Parameter 2] [Parameter option]... + ``` + +### Basic Parameters + +The following table lists the basic configuration information. + +| Parameter| Option| Description| +| ---------------- | ----------------------------------------------- | ------------------------------------------------------------ | +| -name | _VMname_ | Configures the VM name (a string of 1 to 255 characters).| +| -kernel | /path/to/vmlinux.bin| Configures the kernel image.| +| -append | console=ttyS0 root=/dev/vda reboot=k panic=1 rw | Configures the kernel command line parameter. For the standard x86_64 virtualization platform, **console** is default to **ttyS0**. For the AArch64 platform, **console** is default to **ttyAMA0**. If the virtio-console device is configured but the serial port device is not configured, set **console** to **hvc0** (irrelevant to the architecture).| +| -initrd | /path/to/initrd.img | Configures the initrd file.| +| -smp | \[cpus=\] CPU count| Configures the number of CPUs. The value range is \[1, 254\].| +| -m | Memory size (MiB/GiB). The default unit is MiB.| Configures the memory size. The value range is \[256 MiB, 512 GiB\].| +| -qmp | unix:/path/to/socket,server,nowait | Configures api-channel. Before running api-channel, ensure that the socket file does not exist.| +| -D | /path/to/logfile | Configures the log file.| +| -pidfile | /path/to/pidfile | Configures the pid file. This parameter must be used together with **-daemonize**. Ensure that the pid file does not exist before running the script.| +| -disable-seccomp | N/A| Disables Seccomp. Seccomp is enabled by default.| +| -daemonize | N/A| Enables daemon processes.| + +### VM Types + +You can run the **-machine** parameter to specify the type of the VM to be started. + +Parameters: + +- **type**: VM startup type. The value is **MicroVm** for lightweight virtualization, **q35** for standard virtualization on the x86_64 platform, and **virt** for standard virtualization on the AArch64 platform. +- **dump-guest-core** (optional): whether to dump the VM memory when a process panics. +- **mem-share** (optional): whether to share memory with other processes. + +### Disk Configuration + +VM disk configuration includes the following configuration items: + +- **drive_id**: disk ID. +- **path_on_host**: disk path. +- **serial_num** (optional): serial number of the disk. +- **read_only** (optional): whether the disk is read-only. +- **direct** (optional): whether to open the disk in O_DIRECT mode. +- **iothread** (optional): iothread attribute. +- **throttling.iops-total** (optional): disk QoS for limiting disk I/O operations. +- **if** (optional): driver type. The default value is **none**. The block device is **none**. +- **bus**: bus to which the device is to be mounted. +- **addr**: IDs of the slot and function to which the device is to be mounted. +- **multifunction** (optional): whether to enable PCI multi-function. + +#### Disk Configuration Modes + +Disk configuration consists of two steps: driver configuration and block device configuration. + +The lightweight VM configuration format is as follows: + +```shell +-drive id=drive_id,file=path_on_host[,readonly=off][,direct=off][,throttling.iops-total=200][,if=none] +-device virtio-blk-device,drive=drive_id,id=blkid[,iothread=iothread1][,serial=serial_num] +``` + +The standard VM configuration format is as follows: + +```shell +-drive id=drive_id,file=path_on_host[,readonly=off][,direct=off][,throttling.iops-total=200][,if=none] +-device virtio-blk-pci,drive=drive_id,bus=pcie.0,addr=0x3.0x0,id=blkid[,iothread=iothread1,][serial=serial_num][,multifunction=on] +``` + +The following describes the **throttling.iops-total** and **iothread** configuration items: + +#### Disk QoS + +##### Introduction + +QoS is short for quality of service. In cloud scenarios, multiple VMs are started on a single host. Because the total disk access bandwidth of the host is limited, when a VM has heavy disk access pressure, it will occupy the access bandwidth of other VMs. As a result, the I/O performance of other VMs will be affected. To reduce the impact between VMs, you can configure QoS to limit the disk access rate of the VMs. + +##### Precautions + +- Currently, QoS supports the configuration of disk IOPS. +- The value range of IOPS is \[0, 1000000\]. The value **0** indicates that the IOPS is not limited. The actual IOPS does not exceed the preset value or the upper limit of the actual backend disk performance. +- Only the average IOPS can be limited. Instantaneous burst traffic cannot be limited. + +##### Configuration Methods + +Usage: + +**CLI** + +```shell +-drive xxx,throttling.iops-total=200 +``` + +Parameters: + +- **throttling.iops-total**: I/O delivery speed of the disk on a VM after IOPS is configured. It does not exceed the value of this parameter. +- _xxx_: other settings of the disk. + +#### iothread + +For details about the iothread configuration, see [iothread Configuration](#iothread-configuration). + +### NIC Configuration + +VM NIC configuration includes the following configuration items: + +- **idv**: unique device ID. +- **tap**: tap device. +- **ifname**: name of the tap device on the host. +- **mac** (optional): MAC address of the VM. +- **iothread** (optional): iothread attribute of the disk. For details about the iothread configuration of the NIC, see [iothread Configuration](#iothread-configuration). + +#### Configuration Methods + +> [!NOTE]**NOTE**: +> +> Before using the network, run the following commands to configure the host bridge and tap device: +> +> ```shell +> yum install -y bridge-utils iproute net-tools +> brctl addbr qbr0 +> ip tuntap add tap0 mode tap +> brctl addif qbr0 tap0 +> ifconfig qbr0 up; ifconfig tap0 up +> ifconfig qbr0 192.168.0.1 +> ``` + +1. Configure virtio-net. ([] indicates an optional parameter.) + + Lightweight VMs: + + ```shell + -netdev tap,id=netdevid,ifname=host_dev_name[,vhostfd=2] + -device virtio-net-device,netdev=netdevid,id=netid[,iothread=iothread1,mac=12:34:56:78:9A:BC] + ``` + + Standard VMs: + + ```shell + -netdev tap,id=netdevid,ifname=host_dev_name[,vhostfd=2] + -device virtio-net-pci,netdev=netdevid,id=netid,bus=pcie.0,addr=0x2.0x0[,multifunction=on,iothread=iothread1,mac=12:34:56:78:9A:BC] + ``` + +2. Configure vhost-net. + + Lightweight VMs: + + ```shell + -netdev tap,id=netdevid,ifname=host_dev_name,vhost=on[,vhostfd=2] + -device virtio-net-device,netdev=netdevid,id=netid[,iothread=iothread1,mac=12:34:56:78:9A:BC] + ``` + + Standard VMs: + + ```shell + -netdev tap,id=netdevid,ifname=host_dev_name,vhost=on[,vhostfd=2] + -device virtio-net-pci,netdev=netdevid,id=netid,bus=pcie.0,addr=0x2.0x0[,multifunction=on,iothread=iothread1,mac=12:34:56:78:9A:BC] + ``` + +### chardev Configuration + +Redirect I/Os from the Guest to chardev on the host. The chardev backend type can be **stdio**, **pty**, **socket**, or **file**.**file** can be set only during output. The configuration items are as follows: + +- **id**: unique device ID. +- **backend**: redirection type. +- **path**: path of the device redirection file. This parameter is required only for **socket** and **file** devices. +- **server**: uses chardev as a server. This parameter is required only for **socket** devices. +- **nowait**: The expected status is disconnected. This parameter is required only for **socket** devices. + +When chardev is used, a console file is created and used. Therefore, ensure that the console file does not exist before starting StratoVirt. + +#### Configuration Methods + +```shell +-chardev backend,id=chardev_id[,path=path,server,nowait] +``` + +### Serial Port Configuration + +A serial port is a VM device used to transmit data between hosts and VMs. To use a serial port, configure **console** to **ttyS0** in the kernel command line, and to **ttyAMA0** for standard startup on the AArch64 platform. The configuration items are as follows: + +- **chardev**: redirected chardev device. +- **backend**, **path**, **server**, and **nowait**: The meanings of these parameters are the same as those in **chardev**. + +#### Configuration Methods + +```shell +-serial chardev:chardev_id +``` + +Or: + +```shell +-chardev backend[,path=path,server,nowait] +``` + +### Console Device Configuration + +virtio-console is a universal serial port device used for data transmission between hosts and VMs. If only the console device is configured and I/O operations are performed through the console device, set **console** to **hvc0** in the kernel startup parameters. The console device has the following configuration items: + +- **id**: device ID. +- **path**: path of virtio console files. +- **socket**: redirection in socket mode. +- **chardev**: redirected chardev device. + +#### Configuration Methods + +The console configuration consists of three steps: specify virtio-serial, create a character device, and then create a virtconsole device. + +Lightweight VMs: + +```shell +-device virtio-serial-device[,id=virtio-serial0] +-chardev socket,path=socket_path,id=virtioconsole1,server,nowait +-device virtconsole,chardev=virtioconsole1,id=console_id +``` + +Standard VMs: + +```shell +-device virtio-serial-pci,bus=pcie.0,addr=0x1.0x0[,multifunction=on,id=virtio-serial0] +-chardev socket,path=socket_path,id=virtioconsole1,server,nowait +-device virtconsole,chardev=virtioconsole1,id=console_id +``` + +### vsock Device Configuration + +The vsock is also a device for communication between hosts and VMs. It is similar to the console but has better performance. The configuration items are as follows: + +- **id**: unique device ID. +- **guest_cid**: unique context ID. + +#### Configuration Methods + +Lightweight VMs: + +```shell +-device vhost-vsock-device,id=vsock_id,guest-cid=3 +``` + +Standard VMs: + +```shell +-device vhost-vsock-pci,id=vsock_id,guest-cid=3,bus=pcie.0,addr=0x1.0x0[,multifunction=on] +``` + +### Memory Huge Page Configuration + +#### Introduction + +StratoVirt supports the configuration of huge pages for VMs. Compared with the traditional 4 KB memory page mode, huge page memory can effectively reduce the number of TLB misses and page fault interrupts, significantly improving the performance of memory-intensive services. + +#### Precautions + +- The directory to which the huge pages are mounted must be an absolute path. +- Memory huge pages can be configured only during startup. +- Only static huge pages are supported. +- Configure huge pages on the host before use. +- To use the huge page feature, ensure that the VM memory size is an integer multiple of _huge page size_. + +#### Mutually Exclusive Features + +- If the huge page feature is configured, the balloon feature does not take effect. + +#### Configuration Methods + +##### Configuring Huge Pages on the Host + +###### Mounting + +Mount the huge page file system to a specified directory. `/path/to/hugepages` is the user-defined empty directory. + +```shell +mount -t hugetlbfs hugetlbfs /path/to/hugepages +``` + +###### Setting the Number of Huge Pages + +- Set the number of static huge pages. `num` indicates the specified number. + + ```shell + sysctl vm.nr_hugepages=num + ``` + +- Query huge page statistics. + + ```shell + cat /proc/meminfo | grep Hugepages + ``` + + To view statistics about huge pages of other sizes, view the related information in the `/sys/kernel/mm/hugepages/hugepages-*/` directory. + +> [!NOTE]**NOTE**: +> +> Configure the StratoVirt memory specifications and huge pages based on the huge page usage. If the huge page resources are insufficient, the VM fails to be started. + +#### Adding Huge Page Configuration When Starting StratoVirt + +- CLI + + ```shell + -mem-path /page/to/hugepages + ``` + + In the preceding command, `/page/to/hugepages` indicates the directory to which the huge page file system is mounted. Only absolute paths are supported. + +
    + +> [!NOTE]**NOTE**: +> +> **Typical configuration**: Set **mem-path** in the StratoVirt command line to the _huge page file system mount directory_. The StratoVirt huge page feature is recommended for the typical configuration. + +### iothread Configuration + +#### Introduction + +After a VM with the iothread configuration is started on StratoVirt, threads independent of the main thread are started on the host. These independent threads can be used to process I/O requests of devices, improving the device I/O performance and reducing the impact on message processing on the management plane. + +#### Precautions + +- A maximum of eight iothreads can be configured. +- The iothread attribute can be configured for disks and NICs. +- iothreads occupy CPU resources of the host. When the I/O pressure is high in a VM, the CPU resources occupied by a single iothread depend on the disk access speed. For example, a common SATA disk occupies less than 20% CPU resources. + +#### Creating an iothread + +**CLI** + +```shell +-object iothread,id=iothread1 -object iothread,id=iothread2 +``` + +Parameters: + +- **id**: identifies an iothread. This ID can be set to the iothread attribute of the disk or NIC. If iothread is configured in the startup parameter, the thread with the specified ID is started on the host after the VM is started. + +#### Configuring the iothread Attribute for a Disk or NIC + +**CLI-based configurations** + +Lightweight VMs: + +Disks + +```shell +-device virtio-blk-device xxx,iothread=iothread1 +``` + +NICs + +```shell +-device virtio-net-device xxx,iothread=iothread2 +``` + +Standard VMs: + +Disks + +```shell +-device virtio-blk-pci xxx,iothread=iothread1 +``` + +NICs + +```shell +-device virtio-net-pci xxx,iothread=iothread2 +``` + +Parameters: + +1. **iothread**: Set this parameter to the iothread ID, indicating the thread that processes the I/O of the device. +2. _xxx_: other configurations of the disk or NIC. + +### Balloon Device Configuration + +#### Introduction + +During running of a VM, the balloon driver in it occupies or releases memory to dynamically adjust the VM's available memory, achieving memory elasticity. + +#### Precautions + +- Before enabling balloon, ensure that the page size of the guest is the same as that of the host. +- The balloon feature must be enabled for the guest kernel. +- When memory elastic scaling is enabled, slight frame freezing may occur in the VM and the memory performance may deteriorate. + +#### Mutually Exclusive Features + +- This feature is mutually exclusive with huge page memory. +- In the x86 architecture, the number of interrupts is limited. Therefore, the total number of balloon devices and other virtio devices cannot exceed 11. By default, six block devices, two net devices, and one serial port device are used. + +#### Specifications + +- Each VM can be configured with only one balloon device. + +#### Configuration Methods + +Lightweight VMs: + +```shell +-device virtio-balloon-device,deflate-on-oom=true +``` + +Standard VMs: + +```shell +-device virtio-balloon-pci,bus=pcie.0,addr=0x4.0x0,deflate-on-oom=true[,multifunction=on] +``` + +[!NOTE]**NOTE** + +>1. The value of **deflate-on-oom** is of the Boolean type, indicating whether to enable the auto deflate feature. When this feature is enabled, if the balloon device has reclaimed some memory, it automatically releases the memory to the guest when the guest requires the memory. If this feature is disabled, the memory is not automatically returned. +>2. When running the QMP command to reclaim the VM memory, ensure that the VM has sufficient memory to keep basic running. Otherwise, some operations may time out and the VM cannot apply for idle memory. +>3. If the huge page feature is enabled in the VM, the balloon device cannot reclaim the memory occupied by the huge pages. +> +> If **deflate-on-oom** is set to **false**, when the guest memory is insufficient, the balloon device does not automatically release the memory. As a result, the guest OOM may occur, the processes may be killed, and even the VM cannot run properly. + +### RNG Configuration + +#### Introduction + +Virtio RNG is a paravirtualized random number generator that generates hardware random numbers for the guest. + +#### Configuration Methods + +Virtio RNG can be configured as the Virtio MMIO device or Virtio PCI device. To configure the Virtio RNG device as a Virtio MMIO device, run the following command: + +```shell +-object rng-random,id=objrng0,filename=/path/to/random_file +-device virtio-rng-device,rng=objrng0,max-bytes=1234,period=1000 +``` + +To configure the Virtio RNG device as a Virtio PCI device, run the following command: + +```shell +-object rng-random,id=objrng0,filename=/path/to/random_file +-device virtio-rng-pci,rng=objrng0,max-bytes=1234,period=1000,bus=pcie.0,addr=0x1.0x0,id=rng-id[,multifunction=on] +``` + +Parameters: + +- **filename**: path of the character device used to generate random numbers on the host, for example, **/dev/random**. +- **period**: period for limiting the read rate of random number characters, in milliseconds. +- **max-bytes**: maximum number of bytes of a random number generated by a character device within a period. +- **bus**: name of the bus to which the Virtio RNG device is mounted. +- **addr**: address of the Virtio RNG device. The parameter format is **addr=**_\[slot].\[function]_, where _slot_ and _function_ indicate the slot number and function number of the device respectively. The slot number and function number are hexadecimal numbers. The function number of the Virtio RNG device is **0x0**. + +#### Precautions + +- If **period** and **max-bytes** are not configured, the read rate of random number characters is not limited. +- Otherwise, the value range of **max-bytes/period\*1000** is \[64, 1000000000]. It is recommended that the value be not too small to prevent the rate of obtaining random number characters from being too slow. +- Only the average number of random number characters can be limited, and the burst traffic cannot be limited. +- If the guest needs to use the Virtio RNG device, the guest kernel requires the following configurations: **CONFIG_HW_RANDOM=y**, **CONFIG_HW_RANDOM_VIA=y**, and **CONFIG_HW_RANDOM_VIRTIO=y**. +- When configuring the Virtio RNG device, check whether the entropy pool is sufficient to avoid VM freezing. For example, if the character device path is **/dev/random**, you can check **/proc/sys/kernel/random/entropy_avail** to view the current entropy pool size. When the entropy pool is full, the entropy pool size is **4096**. Generally, the value is greater than 1000. + +## Configuration Examples + +### Lightweight VMs + +This section provides an example of the minimum configuration for creating a lightweight VM. + +1. Log in to the host and delete the socket file to ensure that the QMP can be created. + + ```shell + rm -f /tmp/stratovirt.socket + ``` + +2. Run StratoVirt. + + ```shell + $ /path/to/stratovirt \ + -kernel /path/to/vmlinux.bin \ + -append console=ttyS0 root=/dev/vda rw reboot=k panic=1 \ + -drive file=/home/rootfs.ext4,id=rootfs,readonly=false \ + -device virtio-blk-device,drive=rootfs \ + -qmp unix:/tmp/stratovirt.socket,server,nowait \ + -serial stdio + ``` + + After the running is successful, the VM is created and started based on the specified configuration parameters. + +### Standard VMs + +This section provides an example of the minimum configuration for creating a standard VM on the ARM platform. + +1. Delete the socket file to ensure that QMP can be created. + + ```shell + rm -f /tmp/stratovirt.socket + ``` + +2. Run StratoVirt. + + ```shell + $ /path/to/stratovirt \ + -kernel /path/to/vmlinux.bin \ + -append console=ttyAMA0 root=/dev/vda rw reboot=k panic=1 \ + -drive file=/path/to/code_storage_file,if=pflash,unit=0[,readonly=true] \ + -drive file=/path/to/data_storage_file,if=pflash,unit=1, \ + -drive file=/home/rootfs.ext4,id=rootfs,readonly=false \ + -device virtio-blk-device,drive=rootfs,bus=pcie.0,addr=0x1 \ + -qmp unix:/tmp/stratovirt.socket,server,nowait \ + -serial stdio + ``` diff --git a/docs/en/virtualization/virtualization_platform/stratovirt/vm_management.md b/docs/en/virtualization/virtualization_platform/stratovirt/vm_management.md new file mode 100644 index 0000000000000000000000000000000000000000..035d14f18a06679f28bc6e9997a958ddad39d3db --- /dev/null +++ b/docs/en/virtualization/virtualization_platform/stratovirt/vm_management.md @@ -0,0 +1,606 @@ +# Managing VMs + +## Overview + +StratoVirt allows you to query VM information and manage VM resources and lifecycle with QMP. To query the information about a VM, connect to the VM first. + +## Querying VM Information + +### Introduction + +StratoVirt can be used to query the VM status, vCPU topology, and vCPU online status. + +### Querying VM Status + +Run the **query-status** command to query the running status of a VM. + +- Usage: + + **{ "execute": "query-status" }** + +- Example: + +```text +<- { "execute": "query-status" } +-> { "return": { "running": true,"singlestep": false,"status": "running" } +``` + +### Querying Topology Information + +Run the **query-cpus** command to query the topologies of all CPUs. + +- Usage: + + **{ "execute": "query-cpus" }** + +- Example: + +```text +<- { "execute": "query-cpus" } +-> {"return":[{"CPU":0,"arch":"x86","current":true,"halted":false,"props":{"core-id":0,"socket-id":0,"thread-id":0},"qom_path":"/machine/unattached/device[0]","thread_id":8439},{"CPU":1,"arch":"x86","current":true,"halted":false,"props":{"core-id":0,"socket-id":1,"thread-id":0},"qom_path":"/machine/unattached/device[1]","thread_id":8440}]} +``` + +### Querying vCPU Online Status + +Run the **query-hotpluggable-cpus** command to query the online/offline statuses of all vCPUs. + +- Usage: +**{ "execute": "query-hotpluggable-cpus" }** + +- Example: + +```text +<- { "execute": "query-hotpluggable-cpus" } +-> {"return":[{"props":{"core-id":0,"socket-id":0,"thread-id":0},"qom-path":"/machine/unattached/device[0]","type":"host-x86-cpu","vcpus-count":1},{"props":{"core-id":0,"socket-id":1,"thread-id":0},"qom-path":"/machine/unattached/device[1]","type":"host-x86-cpu","vcpus-count":1}]} +``` + +Online vCPUs have the `qom-path` item, while offline vCPUs do not. + +## Managing VM Lifecycle + +### Introduction + +StratoVirt can manage the lifecycle of a VM, including starting, stopping, resuming, and exiting the VM. + +### Creating and Starting a VM + +Use the command line parameters to specify the VM configuration, and create and start a VM. + +- When using the command line parameters to specify the VM configuration, run the following command to create and start the VM: + +```shell +$/path/to/stratovirt - *[Parameter 1] [Parameter option] - [Parameter 2] [Parameter option]*... +``` + +> [!NOTE] +> +> After the lightweight VM is started, there are two NICs: eth0 and eth1. The two NICs are reserved for hot plugging: eth0 first and then eth1. Currently, only two virtio-net NICs can be hot plugged. + +### Connecting to a VM + +StratoVirt uses QMP to manage VMs. To stop, resume, or exit a VM, connect it the StratoVirt through QMP first. + +Open a new CLI (CLI B) on the host and run the following command to connect to the api-channel as the **root** user: + +```shell +ncat -U /path/to/socket +``` + +After the connection is set up, you will receive a greeting message from StratoVirt, as shown in the following: + +```text +{"QMP":{"version":{"qemu":{"micro":1,"minor":0,"major":4},"package":""},"capabilities":[]}} +``` + +You can now manage the VM by entering the QMP commands in CLI B. + +> [!NOTE] +> +> QMP provides **stop**, **cont**, **quit**, and **query-status** commands to manage and query VM statuses. +> +> All QMP commands for managing VMs are entered in CLI B. `<-` indicates the command input, and `->` indicates the QMP returned result. + +### Stopping a VM + +QMP provides the **stop** command to stop a VM, that is, to stop all vCPUs of the VM. The command syntax is as follows: + +**{"execute":"stop"}** + +**Example:** + +The **stop** command and the command output are as follows: + +```text +<- {"execute":"stop"} +-> {"event":"STOP","data":{},"timestamp":{"seconds":1583908726,"microseconds":162739}} +-> {"return":{}} +``` + +### Resuming a VM + +QMP provides the **cont** command to resume a stopped VM, that is, to resume all vCPUs of the VM. The command syntax is as follows: + +**{"execute":"cont"}** + +**Example:** + +The **cont** command and the command output are as follows: + +```text +<- {"execute":"cont"} +-> {"event":"RESUME","data":{},"timestamp":{"seconds":1583908853,"microseconds":411394}} +-> {"return":{}} +``` + +### Exiting a VM + +QMP provides the **quit** command to exit a VM, that is, to exit the StratoVirt process. The command syntax is as follows: + +**{"execute":"quit"}** + +**Example:** + +```text +<- {"execute":"quit"} +-> {"return":{}} +-> {"event":"SHUTDOWN","data":{"guest":false,"reason":"host-qmp-quit"},"timestamp":{"ds":1590563776,"microseconds":519808}} +``` + +## Managing VM Resources + +### Hot-Pluggable Disks + +StratoVirt allows you to adjust the number of disks when a VM is running. That is, you can add or delete VM disks without interrupting services. + +**Note** + +- For a standard VM, the **CONFIG_HOTPLUG_PCI_PCIE=y** configuration must be enabled for the VM kernel. + +- For a standard VM, devices can be hot added to the root port. The root port device must be configured before the VM is started. + +- You are not advised to hot swap a device when the VM is being started, stopped, or under high internal pressure. Otherwise, the VM may become abnormal because the drivers on the VM cannot respond in a timely manner. + +#### Hot Adding Disks + +**Usage:** + +Lightweight VM: + +```text +{"execute": "blockdev-add", "arguments": {"node-name": "drive-0", "file": {"driver": "file", "filename": "/path/to/block"}, "cache": {"direct": true}, "read-only": false}} +{"execute": "device_add", "arguments": {"id": "drive-0", "driver": "virtio-blk-mmio", "addr": "0x1"}} +``` + +Standard VM: + +```text +{"execute": "blockdev-add", "arguments": {"node-name": "drive-0", "file": {"driver": "file", "filename": "/path/to/block"}, "cache": {"direct": true}, "read-only": false}} +{"execute":"device_add", "arguments":{"id":"drive-0", "driver":"virtio-blk-pci", "drive": "drive-0", "addr":"0x0", "bus": "pcie.1"}} +``` + +**Parameters:** + +- For a lightweight VM, the value of **node-name** in **blockdev-add** must be the same as that of **id** in **device_add**. For example, the values of **node-name** and **id** are both **drive-0** as shown above. + +- For a standard VM, the value of **drive** must be the same as that of **node-name** in **blockdev-add**. + +- **/path/to/block** is the image path of the hot added disks. It cannot be the path of the disk image that boots the rootfs. + +- For a lightweight VM, the value of **addr**, starting from **0x0**, is mapped to a virtio device on the VM. **0x0** is mapped to **vda**, **0x1** is mapped to **vdb**, and so on. To be compatible with the QMP protocol, **addr** can be replaced by **lun**, but **lun=0** is mapped to the **vdb** of the guest machine. For a standard VM, the value of **addr** must be **0x0**. + +- For a standard VM, **bus** indicates the name of the bus to mount the device. Currently, the device can be hot added only to the root port device. The value of **bus** must be the ID of the root port device. + +- For a lightweight VM, StratoVirt supports a maximum of six virtio-blk disks. Note this when hot adding disks. For a standard VM, the maximum number of hot added disks depends on the number of root port devices. + +**Example:** + +Lightweight VM: + +```text +<- {"execute": "blockdev-add", "arguments": {"node-name": "drive-0", "file": {"driver": "file", "filename": "/path/to/block"}, "cache": {"direct": true}, "read-only": false}} +-> {"return": {}} +<- {"execute": "device_add", "arguments": {"id": "drive-0", "driver": "virtio-blk-mmio", "addr": "0x1"}} +-> {"return": {}} +``` + +Standard VM: + +```text +<- {"execute": "blockdev-add", "arguments": {"node-name": "drive-0", "file": {"driver": "file", "filename": "/path/to/block"}, "cache": {"direct": true}, "read-only": false}} +-> {"return": {}} +<- {"execute":"device_add", "arguments":{"id":"drive-0", "driver":"virtio-blk-pci", "drive": "drive-0", "addr":"0x0", "bus": "pcie.1"}} +-> {"return": {}} +``` + +#### Hot Removing Disks + +**Usage:** + +Lightweight VM: + +```text +{"execute": "device_del", "arguments": {"id":"drive-0"}} +``` + +Standard VM: + +```text +{"execute": "device_del", "arguments": {"id":"drive-0"}} +{"execute": "blockdev-del", "arguments": {"node-name": "drive-0"}} +``` + +**Parameters:** + +**id** indicates the ID of the disk to be hot removed. + +- **node-name** indicates the backend name of the disk. + +**Example:** + +Lightweight VM: + +```text +<- {"execute": "device_del", "arguments": {"id": "drive-0"}} +-> {"event":"DEVICE_DELETED","data":{"device":"drive-0","path":"drive-0"},"timestamp":{"seconds":1598513162,"microseconds":367129}} +-> {"return": {}} +``` + +Standard VM: + +```text +<- {"execute": "device_del", "arguments": {"id":"drive-0"}} +-> {"return": {}} +-> {"event":"DEVICE_DELETED","data":{"device":"drive-0","path":"drive-0"},"timestamp":{"seconds":1598513162,"microseconds":367129}} +<- {"execute": "blockdev-del", "arguments": {"node-name": "drive-0"}} +-> {"return": {}} +``` + +A **DEVICE_DELETED** event indicates that the device is removed from StratoVirt. + +### Hot-Pluggable NICs + +StratoVirt allows you to adjust the number of NICs when a VM is running. That is, you can add or delete VM NICs without interrupting services. + +**Note** + +- For a standard VM, the **CONFIG_HOTPLUG_PCI_PCIE=y** configuration must be enabled for the VM kernel. + +- For a standard VM, devices can be hot added to the root port. The root port device must be configured before the VM is started. + +- You are not advised to hot swap a device when the VM is being started, stopped, or under high internal pressure. Otherwise, the VM may become abnormal because the drivers on the VM cannot respond in a timely manner. + +#### Hot Adding NICs + +**Preparations (Requiring the root Permission)** + +1. Create and enable a Linux bridge. For example, if the bridge name is **qbr0**, run the following command: + + ```shell + brctl addbr qbr0 + ifconfig qbr0 up + ``` + +2. Create and enable a tap device. For example, if the tap device name is **tap0**, run the following command: + + ```shell + ip tuntap add tap0 mode tap + ifconfig tap0 up + ``` + +3. Add the tap device to the bridge. + + ```shell + brctl addif qbr0 tap0 + ``` + +**Usage:** + +Lightweight VM: + +```text +{"execute":"netdev_add", "arguments":{"id":"net-0", "ifname":"tap0"}} +{"execute":"device_add", "arguments":{"id":"net-0", "driver":"virtio-net-mmio", "addr":"0x0"}} +``` + +Standard VM: + +```text +{"execute":"netdev_add", "arguments":{"id":"net-0", "ifname":"tap0"}} +{"execute":"device_add", "arguments":{"id":"net-0", "driver":"virtio-net-pci", "addr":"0x0", "netdev": "net-0", "bus": "pcie.1"}} +``` + +**Parameters:** + +- For a lightweight VM, **id** in **netdev_add** must be the same as that in **device_add**. **ifname** is the name of the backend tap device. + +- For a standard VM, the value of **netdev** must be the value of **id** in **netdev_add**. + +- For a lightweight VM, the value of **addr**, starting from **0x0**, is mapped to an NIC on the VM. **0x0** is mapped to **eth0**, **0x1** is mapped to **eth1**. For a standard VM, the value of **addr** must be **0x0**. + +- For a standard VM, **bus** indicates the name of the bus to mount the device. Currently, the device can be hot added only to the root port device. The value of **bus** must be the ID of the root port device. + +- For a lightweight VM, StratoVirt supports a maximum of two virtio-net NICs. Therefore, pay attention to the specification restrictions when hot adding in NICs. For a standard VM, the maximum number of hot added disks depends on the number of root port devices. + +**Example:** + +Lightweight VM: + +```text +<- {"execute":"netdev_add", "arguments":{"id":"net-0", "ifname":"tap0"}} +-> {"return": {}} +<- {"execute":"device_add", "arguments":{"id":"net-0", "driver":"virtio-net-mmio", "addr":"0x0"}} +-> {"return": {}} +``` + +**addr:0x0** corresponds to **eth0** in the VM. + +Standard VM: + +```text +<- {"execute":"netdev_add", "arguments":{"id":"net-0", "ifname":"tap0"}} +-> {"return": {}} +<- {"execute":"device_add", "arguments":{"id":"net-0", "driver":"virtio-net-pci", "addr":"0x0", "netdev": "net-0", "bus": "pcie.1"}} +-> {"return": {}} +``` + +#### Hot Removing NICs + +**Usage:** + +Lightweight VM: + +```text +{"execute": "device_del", "arguments": {"id": "net-0"}} +``` + +Standard VM: + +```text +{"execute": "device_del", "arguments": {"id":"net-0"}} +{"execute": "netdev_del", "arguments": {"id": "net-0"}} +``` + +**Parameters:** + +**id**: NIC ID, for example, **net-0**. + +- **id** in **netdev_del** indicates the backend name of the NIC. + +**Example:** + +Lightweight VM: + +```text +<- {"execute": "device_del", "arguments": {"id": "net-0"}} +-> {"event":"DEVICE_DELETED","data":{"device":"net-0","path":"net-0"},"timestamp":{"seconds":1598513339,"microseconds":97310}} +-> {"return": {}} +``` + +Standard VM: + +```text +<- {"execute": "device_del", "arguments": {"id":"net-0"}} +-> {"return": {}} +-> {"event":"DEVICE_DELETED","data":{"device":"net-0","path":"net-0"},"timestamp":{"seconds":1598513339,"microseconds":97310}} +<- {"execute": "netdev_del", "arguments": {"id": "net-0"}} +-> {"return": {}} +``` + +A **DEVICE_DELETED** event indicates that the device is removed from StratoVirt. + +### Hot-swappable Pass-through Devices + +You can add or delete the passthrough devices of a StratoVirt standard VM when it is running. + +**Note** + +- The **CONFIG_HOTPLUG_PCI_PCIE=y** configuration must be enabled for the VM kernel. + +- Devices can be hot added to the root port. The root port device must be configured before the VM is started. + +- You are not advised to hot swap a device when the VM is being started, stopped, or under high internal pressure. Otherwise, the VM may become abnormal because the drivers on the VM cannot respond in a timely manner. + +#### Hot Adding Pass-through Devices + +**Usage:** + +```text +{"execute":"device_add", "arguments":{"id":"vfio-0", "driver":"vfio-pci", "bus": "pcie.1", "addr":"0x0", "host": "0000:1a:00.3"}} +``` + +**Parameters:** + +- **id** indicates the ID of the hot added device. + +- **bus** indicates the name of the bus to mount the device. + +- **addr** indicates the slot and function numbers to mount the device. Currently, **addr** must be set to **0x0**. + +- **host** indicates the domain number, bus number, slot number, and function number of the passthrough device on the host machine. + +**Example:** + +```text +<- {"execute":"device_add", "arguments":{"id":"vfio-0", "driver":"vfio-pci", "bus": "pcie.1", "addr":"0x0", "host": "0000:1a:00.3"}} +-> {"return": {}} +``` + +#### Hot Removing Pass-through Devices + +**Usage:** + +```text +{"execute": "device_del", "arguments": {"id": "vfio-0"}} +``` + +**Parameters:** + +- **id** indicates the ID of the device to be hot removed, which is specified when the device is hot added. + +**Example:** + +```text +<- {"execute": "device_del", "arguments": {"id": "vfio-0"}} +-> {"return": {}} +-> {"event":"DEVICE_DELETED","data":{"device":"vfio-0","path":"vfio-0"},"timestamp":{"seconds":1614310541,"microseconds":554250}} +``` + +A **DEVICE_DELETED** event indicates that the device is removed from StratoVirt. + +## Using Balloon Devices + +The balloon device is used to reclaim idle memory from a VM. It called by running the QMP command. + +**Usage:** + +```text +{"execute": "balloon", "arguments": {"value": 2147483648}} +``` + +**Parameters:** + +- **value**: size of the guest memory to be set. The unit is byte. If the value is greater than the memory value configured during VM startup, the latter is used. + +**Example:** + +The memory size configured during VM startup is 4 GiB. If the idle memory of the VM queried by running the free command is greater than 2 GiB, you can run the QMP command to set the guest memory size to 2147483648 bytes. + +```text +<- {"execute": "balloon", "arguments": {"value": 2147483648}} +-> {"return": {}} +``` + +Query the actual memory of the VM: + +```text +<- {"execute": "query-balloon"} +-> {"return":{"actual":2147483648}} +``` + +## Using VM Memory Snapshots + +### Introduction + +A VM memory snapshot stores the device status and memory information of a VM in a snapshot file. If the VM is damaged, you can use the snapshot to restore it to the time when the snapshot was created, improving system reliability. + +StratoVirt allows you to create snapshots for stopped VMs and create VMs in batches with a snapshot file as the VM template. As long as a snapshot is created after a VM is started and enters the user mode, the quick startup can skip the kernel startup and user-mode service initialization phases and complete the VM startup in milliseconds. + +### Mutually Exclusive Features + +Memory snapshots cannot be created or used for VMs that are configured with the following devices or use the following features: + +- vhost-net device +- VFIO passthrough device +- Balloon device +- Huge page memory feature +- mem-shared feature +- memory backend file **mem-path** + +### Creating a Snapshot + +For StratoVirt VMs, perform the following steps to create a storage snapshot: + +1. Create and start a VM. + +2. Run the QMP command on the host to stop the VM. + + ```text + <- {"execute":"stop"} + -> {"event":"STOP","data":{},"timestamp":{"seconds":1583908726,"microseconds":162739}} + -> {"return":{}} + ``` + +3. Confirm that the VM is stopped. + + ```text + <- {"execute":"query-status"} + -> {"return":{"running":true,"singlestep":false,"status":"paused"}} + ``` + +4. Run the following QMP command to create a VM snapshot in a specified absolute path, for example, **/path/to/template**: + + ```text + <- {"execute":"migrate", "arguments":{"uri":"file:/path/to/template"}} + -> {"return":{}} + ``` + +5. Check whether the snapshot is successfully created. + + ```text + <- {"execute":"query-migrate"} + ``` + + If "{"return":{"status":"completed"}}" is displayed, the snapshot is successfully created. + + If the snapshot is created successfully, the `memory` and `state` directories are generated in the specified path **/path/to/template**. The `state` file contains VM device status information, and the `memory` file contains VM memory data. The size of the `memory` file is close to the configured VM memory size. + +### Querying Snapshot Status + +There are five statuses in the snapshot process. + +- `None`: The snapshot resource is not ready. +- `Setup`: The snapshot resource is ready. You can create a snapshot. +- `Active`: The snapshot is being created. +- `Completed`: The snapshot is created successfully. +- `Failed`: The snapshot fails to be created. + +You can run the `query-migrate` QMP command on the host to query the status of the current snapshot. For example, if the VM snapshot is created successfully, the following output is displayed: + +```text +<- {"execute":"query-migrate"} +-> {"return":{"status":"completed"}} +``` + +### Restoring a VM + +#### Precautions + +- The following models support the snapshot and boot from snapshot features: + - microvm + - Q35 (x86_64) + - virt (AArch64) +- When a snapshot is used for restoration, the configured devices must be the same as those used when the snapshot is created. +- If a microVM is used and the disk/NIC hot plugging-in feature is enabled before the snapshot is taken, you need to configure the hot plugged-in disks or NICs in the startup command line during restoration. + +#### Restoring a VM from a Snapshot File + +**Command Format** + +```shell +stratovirt -incoming URI +``` + +**Parameters** + +**URI**: snapshot path. The current version supports only the `file` type, followed by the absolute path of the snapshot file. + +**Example** + +Assume that the VM used for creating a snapshot is created by running the following command: + +```shell +$ stratovirt \ + -machine microvm \ + -kernel /path/to/kernel \ + -smp 1 -m 1024 \ + -append "console=ttyS0 pci=off reboot=k quiet panic=1 root=/dev/vda" \ + -drive file=/path/to/rootfs,id=rootfs,readonly=off,direct=off \ + -device virtio-blk-device,drive=rootfs \ + -qmp unix:/path/to/socket,server,nowait \ + -serial stdio +``` + +Then, the command for restoring the VM from the snapshot (assume that the snapshot storage path is **/path/to/template**) is as follows: + +```shell +$ stratovirt \ + -machine microvm \ + -kernel /path/to/kernel \ + -smp 1 -m 1024 \ + -append "console=ttyS0 pci=off reboot=k quiet panic=1 root=/dev/vda" \ + -drive file=/path/to/rootfs,id=rootfs,readonly=off,direct=off \ + -device virtio-blk-device,drive=rootfs \ + -qmp unix:/path/to/another_socket,server,nowait \ + -serial stdio \ + -incoming file:/path/to/template +``` diff --git a/docs/en/virtualization/virtualization_platform/virtualization/_toc.yaml b/docs/en/virtualization/virtualization_platform/virtualization/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e3daca41818afa14c995bc90f421aa1265f9e891 --- /dev/null +++ b/docs/en/virtualization/virtualization_platform/virtualization/_toc.yaml @@ -0,0 +1,35 @@ +label: Virtualization User Guide +isManual: true +description: Virtualization technologies for creating and managing VMs on openEuler +sections: + - label: Introduction to Virtualization + href: ./introduction_to_virtulization.md + - label: Virtualization Component Installation + href: ./virtualization_installation.md + - label: Environment Preparation + href: ./environment_preparation.md + - label: VM Configuration + href: ./vm_configuration.md + - label: VM Management + href: ./managing_vms.md + - label: VM Live Migration + href: ./vm_live_migration.md + - label: System Resource Management + href: ./system_resource_management.md + - label: Device Management + href: ./managing_devices.md + - label: VM Maintainability Management + href: ./vm_maintainability_managment.md + - label: Best Practices + href: ./best_practices.md + - label: Tool Guide + href: ./tool_guide.md + sections: + - label: vmtop + href: ./vmtop.md + - label: LibcarePlus + href: ./libcareplus.md + - label: Skylark VM Hybrid Deployment + href: ./skylark.md + - label: Appendix + href: ./appendix.md diff --git a/docs/en/virtualization/virtualization_platform/virtualization/appendix.md b/docs/en/virtualization/virtualization_platform/virtualization/appendix.md new file mode 100644 index 0000000000000000000000000000000000000000..574ef636260426f83ba77bfd0999bb2a58aa030b --- /dev/null +++ b/docs/en/virtualization/virtualization_platform/virtualization/appendix.md @@ -0,0 +1,140 @@ +# Appendix + +## Terminology & Acronyms and Abbreviations + +For the terminology & acronyms and abbreviation used in this document, see [Table 1](#table201236162279) and [Table 2](#table1423422319271). + +**Table 1** Terminology + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Term

    +

    Description

    +

    AArch64

    +

    AArch64 is an execution state of the ARMv8 architecture. AArch64 is not only an extension of the 32-bit ARM architecture, but also a brand new architecture in ARMv8 that uses the brand new A64 instruction set.

    +

    Domain

    +

    A collection of configurable resources, including memory, vCPUs, network devices, and disk devices. Run the VM in the domain. A domain is allocated with virtual resources and can be independently started, stopped, and restarted.

    +

    Libvirt

    +

    A set of tools used to manage virtualization platforms, including KVM, QEMU, Xen, and other virtualization platforms.

    +

    Guest OS

    +

    The OS running on the VM.

    +

    Host OS

    +

    The OS of the virtual physical machine.

    +

    Hypervisor

    +

    Virtual machine monitor (VMM), is an intermediate software layer that runs between a basic physical server and an OS. It allows multiple OSs and applications to share hardware.

    +

    VM

    +

    A complete virtual computer system that is constructed by using the virtualization technology and simulating the functions of a complete computer hardware system through software.

    +
    + +**Table 2** Acronyms and abbreviations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Acronyms and abbreviations

    +

    Full spelling

    +

    Full name

    +

    Description

    +

    NUMA

    +

    Non-Uniform Memory Access Architecture

    +

    Non Uniform Memory Access Architecture

    +

    NUMA is a memory architecture designed for multi-processor computers. Under NUMA, a processor accesses its own local memory faster than accessing non-local memory (the memory is located on another processor, or the memory shared between processors).

    +

    KVM

    +

    Kernel-based Virtual Machine

    +

    Kernel-based VM

    +

    KVM is a kernel-based VM. It is a kernel module of Linux and makes Linux a hypervisor.

    +

    OVS

    +

    Open vSwitch

    +

    Open vSwitch

    +

    OVS is a high-quality multi-layer vSwitch that uses the open-source Apache 2.0 license protocol.

    +

    QEMU

    +

    Quick Emulator

    +

    Quick Emulator

    +

    QEMU is a general-purpose, open-source emulator that implements hardware virtualization.

    +

    SMP

    +

    Symmetric Multi-Processor

    +

    Symmetric Multi-Processor

    +

    SMP is a multi-processor computer hardware architecture. Currently, most processor systems use a symmetric multi-processor architecture. The architecture system has multiple processors, each processor shares the memory subsystem and bus structure.

    +

    UEFI

    +

    Unified Extensible Firmware Interface

    +

    Unified Extensible Firmware Interface

    +

    A standard that describes new interfaces in detail. This interface is used by the OS to automatically load the prestart operation environment to an OS.

    +

    VM

    +

    Virtual Machine

    +

    VM

    +

    A complete virtual computer system that is constructed by using the virtualization technology and simulating the functions of a complete computer hardware system through software.

    +

    VMM

    +

    Virtual Machine Monitor

    +

    VM Monitor

    +

    An intermediate software layer that runs between a basic physical server and an OS. It allows multiple OSs and applications to share hardware.

    +
    diff --git a/docs/en/virtualization/virtualization_platform/virtualization/best_practices.md b/docs/en/virtualization/virtualization_platform/virtualization/best_practices.md new file mode 100644 index 0000000000000000000000000000000000000000..a13990953d090f2f24fbf546abfd2b1d831c54aa --- /dev/null +++ b/docs/en/virtualization/virtualization_platform/virtualization/best_practices.md @@ -0,0 +1,688 @@ +# Best Practices + +## Performance Best Practices + +### Halt-Polling + +#### Overview + +If compute resources are sufficient, the halt-polling feature can be used to enable virtual machines (VMs) to obtain performance similar to that of physical machines. If the halt-polling feature is not enabled, the host allocates CPU resources to other processes when the vCPU exits due to idle timeout. When the halt-polling feature is enabled on the host, the vCPU of the VM performs polling when it is idle. The polling duration depends on the actual configuration. If the vCPU is woken up during the polling, the vCPU can continue to run without being scheduled from the host. This reduces the scheduling overhead and improves the VM system performance. + +>[!NOTE] **NOTE:** +>The halt-polling mechanism ensures that the vCPU thread of the VM responds in a timely manner. However, when the VM has no load, the host also performs polling. As a result, the host detects that the CPU usage of the vCPU is high, but the actual CPU usage of the VM is not high. + +#### Procedure + +The halt-polling feature is enabled by default. You can dynamically change the halt-polling time of vCPU by modifying the **halt\_poll\_ns** file. The default value is **500000**, in ns. + +For example, to set the polling duration to 400,000 ns, run the following command: + +```shell +# echo 400000 > /sys/module/kvm/parameters/halt_poll_ns +``` + +### I/O Thread Configuration + +#### Overview + +By default, QEMU main threads handle backend VM read and write operations on the KVM. This causes the following issues: + +- VM I/O requests are processed by a QEMU main thread. Therefore, the single-thread CPU usage becomes the bottleneck of VM I/O performance. +- The QEMU global lock \(qemu\_global\_mutex\) is used when VM I/O requests are processed by the QEMU main thread. If the I/O processing takes a long time, the QEMU main thread will occupy the global lock for a long time. As a result, the VM vCPU cannot be scheduled properly, affecting the overall VM performance and user experience. + +You can configure the I/O thread attribute for the virtio-blk disk or virtio-scsi controller. At the QEMU backend, an I/O thread is used to process read and write requests of a virtual disk. The mapping relationship between the I/O thread and the virtio-blk disk or virtio-scsi controller can be a one-to-one relationship to minimize the impact on the QEMU main thread, enhance the overall I/O performance of the VM, and improve user experience. + +#### Configuration Description + +To use I/O threads to process VM disk read and write requests, you need to modify VM configurations as follows: + +- Configure the total number of high-performance virtual disks on the VM. For example, set **** to **4** to control the total number of I/O threads. + + ```xml + + VMName + 4194304 + 4194304 + 4 + 4 + ``` + +- Configure the I/O thread attribute for the virtio-blk disk. **** indicates I/O thread IDs. The IDs start from 1 and each ID must be unique. The maximum ID is the value of ****. For example, to allocate I/O thread 2 to the virtio-blk disk, set parameters as follows: + + ```xml + + + + +
    + + ``` + +- Configure the I/O thread attribute for the virtio-scsi controller. For example, to allocate I/O thread 2 to the virtio-scsi controller, set parameters as follows: + + ```xml + + + +
    + + ``` + +- Bind I/O threads to a physical CPU. + + Binding I/O threads to specified physical CPUs does not affect the resource usage of vCPU threads. **** indicates I/O thread IDs, and **** indicates IDs of the bound physical CPUs. + + ```xml + + + + + ``` + +### Raw Device Mapping + +#### Overview + +When configuring VM storage devices, you can use configuration files to configure virtual disks for VMs, or connect block devices \(such as physical LUNs and LVs\) to VMs for use to improve storage performance. The latter configuration method is called raw device mapping \(RDM\). Through RDM, a virtual disk is presented as a small computer system interface \(SCSI\) device to the VM and supports most SCSI commands. + +RDM can be classified into virtual RDM and physical RDM based on backend implementation features. Compared with virtual RDM, physical RDM provides better performance and more SCSI commands. However, for physical RDM, the entire SCSI disk needs to be mounted to a VM for use. If partitions or logical volumes are used for configuration, the VM cannot identify the disk. + +#### Configuration Example + +VM configuration files need to be modified for RDM. The following is a configuration example. + +- Virtual RDM + + The following is an example of mounting the SCSI disk **/dev/sdc** on the host to the VM as a virtual raw device: + + ```xml + + + ... + + + + + +
    + + ... + + + ``` + +- Physical RDM + + The following is an example of mounting the SCSI disk **/dev/sdc** on the host to the VM as a physical raw device: + + ```xml + + + ... + + + + + +
    + + ... + + + ``` + +### kworker Isolation and Binding + +#### Overview + +kworker is a per-CPU thread implemented by the Linux kernel. It is used to execute workqueue requests in the system. kworker threads will compete for physical core resources with vCPU threads, resulting in virtualization service performance jitter. To ensure that the VM can run stably and reduce the interference of kworker threads on the VM, you can bind kworker threads on the host to a specific CPU. + +#### Procedure + +You can modify the **/sys/devices/virtual/workqueue/cpumask** file to bind tasks in the workqueue to the CPU specified by **cpumasks**. Masks in **cpumask** are in hexadecimal format. For example, if you need to bind kworker to CPU0 to CPU7, run the following command to change the mask to **ff**: + +```shell +# echo ff > /sys/devices/virtual/workqueue/cpumask +``` + +### HugePage Memory + +#### Overview + +Compared with traditional 4 KB memory paging, openEuler also supports 2 MB/1 GB memory paging. HugePage memory can effectively reduce TLB misses and significantly improve the performance of memory-intensive services. openEuler uses two technologies to implement HugePage memory. + +- Static HugePages + + The static HugePage requires that a static HugePage pool be reserved before the host OS is loaded. When creating a VM, you can modify the XML configuration file to specify that the VM memory is allocated from the static HugePage pool. The static HugePage ensures that all memory of a VM exists on the host as the HugePage to ensure physical continuity. However, the deployment difficulty is increased. After the page size of the static HugePage pool is changed, the host needs to be restarted for the change to take effect. The size of a static HugePage can be 2 MB or 1 GB. + +- THP + + If the transparent HugePage \(THP\) mode is enabled, the VM automatically selects available 2 MB consecutive pages and automatically splits and combines HugePages when allocating memory. When no 2 MB consecutive pages are available, the VM selects available 64 KB \(AArch64 architecture\) or 4 KB \(x86\_64 architecture\) pages for allocation. By using THP, users do not need to be aware of it and 2 MB HugePages can be used to improve memory access performance. + +If VMs use static HugePages, you can disable THP to reduce the overhead of the host OS and ensure stable VM performance. + +#### Procedure + +- Configure static HugePages. + + Before creating a VM, modify the XML file to configure a static HugePage for the VM. + + ```xml + + + + + + ``` + + The preceding XML segment indicates that a 1 GB static HugePage is configured for the VM. + + ```xml + + + + + + ``` + + The preceding XML segment indicates that a 2 MB static HugePage is configured for the VM. + +- Configure transparent HugePage. + + Dynamically enable the THP through sysfs. + + ```shell + # echo always > /sys/kernel/mm/transparent_hugepage/enabled + ``` + + Dynamically disable the THP. + + ```shell + # echo never > /sys/kernel/mm/transparent_hugepage/enabled + ``` + +### PV-qspinlock + +#### Overview + +PV-qspinlock optimizes the spin lock in the virtual scenario of CPU overcommitment. It allows the hypervisor to set the vCPU in the lock context to the block state and wake up the corresponding vCPU after the lock is released. In this way, pCPU resources can be better used in the overcommitment scenario, and the compilation application scenario is optimized to reduce the compilation duration. + +#### Procedure + +Modify the /boot/efi/EFI/openEuler/grub.cfg configuration file of the VM, add arm_pvspin to the startup parameter in the command line, and restart the VM for the modification to take effect. After PV-qspinlock takes effect, run the `dmesg` command on the VM. The following information is displayed: + +```text +[ 0.000000] arm-pv: PV qspinlocks enabled +``` + +>[!NOTE] **Note:** +>PV-qspinlock is supported only when the operating systems of the host machine and VM are both openEuler 20.09 or later and the VM kernel compilation option CONFIG_PARAVIRT_SPINLOCKS is set to y (default value for openEuler). + +### Guest-Idle-Haltpoll + +#### Overview + +To ensure fairness and reduce power consumption, when the vCPU of the VM is idle, the VM executes the WFx/HLT instruction to exit to the host machine and triggers context switchover. The host machine determines whether to schedule other processes or vCPUs on the physical CPU or enter the energy saving mode. However, overheads of switching between a VM and a host machine, additional context switching, and IPI wakeup are relatively high, and this problem is particularly prominent in services where sleep and wakeup are frequently performed. The Guest-Idle-Haltpoll technology indicates that when the vCPU of a VM is idle, the WFx/HLT is not executed immediately and VM-exit occurs. Instead, polling is performed on the VM for a period of time. During this period, the tasks of other vCPUs that share the LLC on the vCPU are woken up without sending IPI interrupts. This reduces the overhead of sending and receiving IPI interrupts and the overhead of VM-exit, thereby reducing the task wakeup latency. + +>![!NOTE] **Note:** + The execution of the `idle-haltpoll` command by the vCPU on the VM increases the CPU overhead of the vCPU on the host machine. Therefore, it is recommended that the vCPU exclusively occupy physical cores on the host machine when this feature is enabled. + +#### Procedure + +The Guest-Idle-Haltpoll feature is disabled by default. The following describes how to enable this feature. + +1. Enable the Guest-Idle-Haltpoll feature. + - If the processor architecture of the host machine is x86, you can configure hint-dedicated in the XML file of the VM on the host machine to enable this feature. In this way, the status that the vCPU exclusively occupies the physical core can be transferred to the VM through the VM XML configuration. The host machine ensures the status of the physical core exclusively occupied by the vCPU. + + ```xml + + ... + + + ... + + + + ... + + ``` + + Alternatively, log into the VM to perform online configuration at the VM granularity. This method does not rely on the host to configure the vCPU to exclusively occupy the physical core. + + ```shell + echo Y > /sys/module/cpuidle_haltpoll/parameters/force + ``` + + - If the processor architecture of the host machine is AArch64, this feature can be enabled only by logging into the VM to perform online configuration at the VM granularity. This method does not rely on the host to configure the vCPU to exclusively occupy the physical core. + + ```shell + echo Y > /sys/module/cpuidle_haltpoll/parameters/force + ``` + +2. Check whether the Guest-Idle-Haltpoll feature takes effect. Run the following command on the VM. If haltpoll is returned, the feature has taken effect. + + ```shell + # cat /sys/devices/system/cpu/cpuidle/current_driver + ``` + +3. (Optional) Set the Guest-Idle-Haltpoll parameter. + + The following configuration files are provided in the /sys/module/haltpoll/parameters/ directory of the VM. You can adjust the configuration parameters based on service characteristics. + + - guest\_halt\_poll\_ns: a global parameter that specifies the maximum polling duration after the vCPU is idle. The default value is 200000 (unit: ns). + - guest\_halt\_poll\_shrink: a divisor that is used to shrink the current vCPU guest\_halt\_poll\_ns when the wakeup event occurs after the global guest\_halt\_poll\_ns time. The default value is 2. + - guest\_halt\_poll\_grow: a multiplier that is used to extend the current vCPU guest\_halt\_poll\_ns when the wakeup event occurs after the current vCPU guest\_halt\_poll\_ns and before the global guest\_halt\_poll\_ns. The default value is 2. + - guest\_halt\_poll\_grow\_start: When the system is idle, the guest\_halt\_poll\_ns of each vCPU reaches 0. This parameter is used to set the initial value of the current vCPU guest\_halt\_poll\_ns to facilitate scaling in and scaling out of the vCPU polling duration. The default value is 50000 (unit: ns). + - guest\_halt\_poll\_allow\_shrink: a switch that is used to enable vCPU guest\_halt\_poll\_ns scale-in. The default value is Y. (Y indicates enabling the scale-in; N indicates disabling the scale-in.) + + You can run the following command as the user root to change the parameter values: In the preceding command, *value* indicates the parameter value to be set, and *configFile* indicates the corresponding configuration file. + + ```shell + # echo value > /sys/module/haltpoll/parameters/configFile + ``` + + For example, to set the global guest\_halt\_poll\_ns to 200000 ns, run the following command: + + ```shell + # echo 200000 > /sys/module/haltpoll/parameters/guest_halt_poll_ns + ``` + +### NVMe Drive Passthrough + +#### Overview + +The device passthrough technology is a hardware-based virtualization solution. With this technology, VMs can be directly connected to specified physical passthrough devices. To improve VM storage performance, you can use the PCI passthrough technology to pass through NVMe drives to VMs. + +#### Procedure + +1. Make preparations. + + - Ensure that the driver provided by the NVMe drive vendor is installed in the guest OS. Otherwise, the NVMe drive cannot work properly. + - Ensure that the VT-d and VT-x support of the CPU is enabled on the host OS. + - Ensure that the IOMMU function of the kernel is enabled on the host OS. + - Ensure that the interrupt remapping function of the kernel is enabled on the host OS. + +2. Obtain the PCI BDF information of an NVMe drive. + + Run the **lspci** command on the host to obtain the resource list of PCI devices on the host. + + ```shell + # lspci -vmm + Slot: 81:00.1 + Class: Non-Volatile memory controller + ... + ``` + + In the command output, **Slot** indicates the PCI BDF number of the NVMe drive, **81** indicates the bus number, **00** indicates the slot number, and **1** indicates the function number. + +3. Mount a PCI passthrough NVMe drive to a VM. + + When creating a VM, add the PCI NVMe drive passthrough configuration option to the corresponding XML configuration file. The configuration file is as follows: + + ```xml + + +
    + + + ``` + + - **hostdev.source.address.domain**: domain number of the PCI device on the host OS. + - **hostdev.source.address.bus**: bus number of the PCI device on the host OS. + - **hostdev.source.address.slot**: slot number of the PCI device on the host OS. + - **hostdev.source.address.function**: function number of the PCI device on the host OS. + +4. Specify a PCI BAR of the NVMe drive. + + To further maximize the performance of the NVMe drive, you need to specify a BAR for PCI MSI-X interrupts of the passthrough NVMe drive in the guest OS. The configuration is as follows: + + ```xml + + +
    + + +
    + + + + + + ``` + + In the preceding XML configuration, the interrupt information of the passthrough NVMe drive is processed on BAR 2. After this configuration is added, the performance of the NVMe drive in the guest OS is almost the same as that of that in the host OS. + +## security Best Practices + +### Libvirt Authentication + +#### Overview + +When a user uses libvirt remote invocation but no authentication is performed, any third-party program that connects to the host's network can operate VMs through the libvirt remote invocation mechanism. This poses security risks. To improve system security, openEuler provides the libvirt authentication function. That is, users can remotely invoke a VM through libvirt only after identity authentication. Only specified users can access the VM, thereby protecting VMs on the network. + +#### Enabling Libvirt Authentication + +By default, the libvirt remote invocation function is disabled on openEuler. This following describes how to enable the libvirt remote invocation and libvirt authentication functions. + +1. Log in to the host. +2. Modify the libvirt service configuration file **/etc/libvirt/libvirtd.conf** to enable the libvirt remote invocation and libvirt authentication functions. For example, to enable the TCP remote invocation that is based on the Simple Authentication and Security Layer \(SASL\) framework, configure parameters by referring to the following: + + ```conf + #Transport layer security protocol. The value 0 indicates that the protocol is disabled, and the value 1 indicates that the protocol is enabled. You can set the value as needed. + listen_tls = 0 + #Enable the TCP remote invocation. To enable the libvirt remote invocation and libvirt authentication functions, set the value to 1. + listen_tcp = 1 + #User-defined protocol configuration for TCP remote invocation. The following uses sasl as an example. + auth_tcp = "sasl" + ``` + +3. Modify the **/etc/sasl2/libvirt.conf** configuration file to set the SASL mechanism and SASLDB. + + ```conf + #Authentication mechanism of the SASL framework. + mech_list: digest-md5 + #Database for storing usernames and passwords + sasldb_path: /etc/libvirt/passwd.db + ``` + +4. Add the user for SASL authentication and set the password. Take the user **userName** as an example. The command is as follows: + + ```shell + # saslpasswd2 -a libvirt userName + Password: + Again (for verification): + ``` + +5. Modify the **/etc/sysconfig/libvirtd** configuration file to enable the libvirt listening option. + + ```conf + LIBVIRTD_ARGS="--listen" + ``` + +6. Restart the libvirtd service to make the modification to take effect. + + ```shell + # systemctl restart libvirtd + ``` + +7. Check whether the authentication function for libvirt remote invocation takes effect. Enter the username and password as prompted. If the libvirt service is successfully connected, the function is successfully enabled. + + ```shell + # virsh -c qemu+tcp://192.168.0.1/system + Please enter your authentication name: openeuler + Please enter your password: + Welcome to virsh, the virtualization interactive terminal. + + Type: 'help' for help with commands + 'quit' to quit + + virsh # + ``` + +#### Managing SASL + +The following describes how to manage SASL users. + +- Query an existing user in the database. + + ```shell + # sasldblistusers2 -f /etc/libvirt/passwd.db + user@localhost.localdomain: userPassword + ``` + +- Delete a user from the database. + + ```shell + # saslpasswd2 -a libvirt -d user + ``` + +### qemu-ga + +#### Overview + +QEMU guest agent \(qemu-ga\) is a daemon running within VMs. It allows users on a host OS to perform various management operations on the guest OS through outband channels provided by QEMU. The operations include file operations \(open, read, write, close, seek, and flush\), internal shutdown, VM suspend \(suspend-disk, suspend-ram, and suspend-hybrid\), and obtaining of VM internal information \(including the memory, CPU, NIC, and OS information\). + +In some scenarios with high security requirements, qemu-ga provides the blacklist function to prevent internal information leakage of VMs. You can use a blacklist to selectively shield some functions provided by qemu-ga. + +>[!NOTE] **NOTE:** +>The qemu-ga installation package is **qemu-guest-agent-***xx***.rpm**. It is not installed on openEuler by default. *xx* indicates the actual version number. + +#### Procedure + +To add a qemu-ga blacklist, perform the following steps: + +1. Log in to the VM and ensure that the qemu-guest-agent service exists and is running. + + ```shell + # systemctl status qemu-guest-agent |grep Active + Active: active (running) since Wed 2018-03-28 08:17:33 CST; 9h ago + ``` + +2. Query which **qemu-ga** commands can be added to the blacklist: + + ```shell + # qemu-ga --blacklist ? + guest-sync-delimited + guest-sync + guest-ping + guest-get-time + guest-set-time + guest-info + ... + ``` + +3. Set the blacklist. Add the commands to be shielded to **--blacklist** in the **/usr/lib/systemd/system/qemu-guest-agent.service** file. Use spaces to separate different commands. For example, to add the `guest-file-open` and `guest-file-close` commands to the blacklist, configure the file by referring to the following: + + ```text + [Service] + ExecStart=-/usr/bin/qemu-ga \ + --blacklist=guest-file-open guest-file-close + ``` + +4. Restart the qemu-guest-agent service. + + ```shell + # systemctl daemon-reload + # systemctl restart qemu-guest-agent + ``` + +5. Check whether the qemu-ga blacklist function takes effect on the VM, that is, whether the **--blacklist** parameter configured for the qemu-ga process is correct. + + ```shell + # ps -ef|grep qemu-ga|grep -E "blacklist=|b=" + root 727 1 0 08:17 ? 00:00:00 /usr/bin/qemu-ga --method=virtio-serial --path=/dev/virtio-ports/org.qemu.guest_agent.0 --blacklist=guest-file-open guest-file-close guest-file-read guest-file-write guest-file-seek guest-file-flush -F/etc/qemu-ga/fsfreeze-hook + ``` + + >[!NOTE] **NOTE:** + >For more information about qemu-ga, visit [https://wiki.qemu.org/Features/GuestAgent](https://wiki.qemu.org/Features/GuestAgent). + +### sVirt Protection + +#### Overview + +In a virtualization environment that uses the discretionary access control \(DAC\) policy only, malicious VMs running on hosts may attack the hypervisor or other VMs. To improve security in virtualization scenarios, openEuler uses sVirt for protection. sVirt is a security protection technology based on SELinux. It is applicable to KVM virtualization scenarios. A VM is a common process on the host OS. In the hypervisor, the sVirt mechanism labels QEMU processes corresponding to VMs with SELinux labels. In addition to types which are used to label virtualization processes and files, different categories are used to label different VMs. Each VM can access only file devices of the same category. This prevents VMs from accessing files and devices on unauthorized hosts or other VMs, thereby preventing VM escape and improving host and VM security. + +#### Enabling sVirt Protection + +**Enabling SELinux on the Host** + +1. Log in to the host. +2. Enable the SELinux function on the host. + 1. Modify the system startup parameter file **grub.cfg** to set **selinux** to **1**. + + ```text + selinux=1 + ``` + + 2. Modify **/etc/selinux/config** to set the **SELINUX** to **enforcing**. + + ```shell + SELINUX=enforcing + ``` + +3. Restart the host. + + ```shell + # reboot + ``` + +**Creating a VM Where the sVirt Function Is Enabled** + +1. Add the following information to the VM configuration file: + + ```xml + + ``` + + Or check whether the following configuration exists in the file: + + ```xml + + ``` + +2. Create a VM. + + ```shell + # virsh define openEulerVM.xml + ``` + +**Checking Whether sVirt Is Enabled** + +Run the following command to check whether sVirt protection has been enabled for the QEMU process of the running VM. If **svirt\_t:s0:c** exists, sVirt protection has been enabled. + +```shell +# ps -eZ|grep qemu |grep "svirt_t:s0:c" +system_u:system_r:svirt_t:s0:c200,c947 11359 ? 00:03:59 qemu-kvm +system_u:system_r:svirt_t:s0:c427,c670 13790 ? 19:02:07 qemu-kvm +``` + +### VM Trusted Boot + +#### Overview + +Trusted boot includes measure boot and remote attestation. The measure boot function is mainly provided by virtualization component. The remote attestation function is enabled by users who install related software (RA client) on VMs and set up the RA server. + +The two basic elements for measure boot are the root of trust (RoT) and chain of trust. The basic idea is to establish a RoT in the computer system. The trustworthiness of the RoT is ensured by physical security, technical security, and management security, that is, CRTM (Core Root of Trust for Measurement). A chain of trust is established, starting from the RoT to the BIOS/BootLoader, operating system, and then to the application. The measure boot and trust is performed by one level to the previous level. Finally, the trust is extended to the entire system. The preceding process looks like a chain, so it is called a chain of trust. + +The CRTM is the root of the measure boot and the first component of the system startup. No other code is used to check the integrity of the CRTM. Therefore, as the starting point of the chain of trust, it must be an absolutely trusted source of trust. The CRTM needs to be technically designed as a segment of read-only or strictly restricted code to defend against BIOS attacks and prevent remote injection of malicious code or modification of startup code at the upper layer of the operating system. In a physical host, the CPU microcode is used as the CRTM. In a virtualization environment, the sec part of the vBIOS is generally the CRTM. + +During startup, the previous component measures (calculates the hash value) the next component, and then extends the measurement value to the trusted storage area, for example, the PCR of the TPM. The CRTM measurement BootLoader extends the measurement value to the PCR, and the BootLoader measurement OS extends the measurement value to the PCR. + +#### Configuring the vTPM Device to Enable Measurement Startup + +**Installing the swtpm and libtpms Software** + +swtpm provides a TPM emulator (TPM 1.2 and TPM 2.0) that can be integrated into a virtualization environment. So far, it has been integrated into QEMU and serves as a prototype system in RunC. swtpm uses libtpms to provide TPM 1.2 and TPM 2.0 simulation functions. +Currently, openEuler 22.03 LTS provides the libtpms and swtpm sources. You can run the `yum` command to install them. + +```shell +# yum install libtpms swtpm swtpm-devel swtpm-tools +``` + +**Configuring the vTPM Device for the VM** + +1. Add the following information to the VM configuration file: + + ```xml + + ... + + ... + + + + ... + + ... + + ``` + + >![!NOTE] **Note:** + > Do not configure the ACPI feature for a VM running openEuler 20.09 in the AArch64 architecture, because the VM trusted boot does not support the ACPI feature. Otherwise, the VM cannot recognize the vTPM device after startup. For openEuler earlier than version 22.03 in the AArch64 architecture, set the value of **tpm model** to **\**. + +2. Create the VM. + + ```shell + # virsh define MeasuredBoot.xml + ``` + +3. Start the VM. + + Before starting the VM, run the `chmod` command to grant the following permission to the /var/lib/swtpm-localca/ directory. Otherwise, the libvirt cannot start the swtpm. + + ```shell + chmod -R 777 /var/lib/swtpm-localca/ + virsh start MeasuredbootVM + ``` + +**Confirming that the Measure Boot Is Successfully Enabled** + +The vBIOS determines whether to enable the measure boot function. Currently, the vBIOS in openEuler 22.03 LTS has the measure boot capability. If the host machine uses the edk2 component of another version, check whether the edk2 component supports the measure boot function. + +Log in to the VM as user root and check whether the TPM driver, tpm2-tss protocol stack, and tpm2-tools are installed on the VM. +By default, the tpm driver (tpm_tis.ko), tpm2-tss protocol stack, and tpm2-tools are installed in openEuler 22.03 LTS. If another OS is used, run the following command to check whether the driver and related tools are installed: + +```shell +# lsmod |grep tpm +# tpm_tis 16384 0 +# +# yum list installed | grep -E 'tpm2-tss|tpm2-tools' +# +# yum install tpm2-tss tpm2-tools +``` + +You can run the `tpm2_pcrread` (`tpm2_pcrlist` in tpm2_tools of earlier versions) command to list all PCR values. + +```shell +# tpm2_pcrread +sha1 : + 0 : fffdcae7cef57d93c5f64d1f9b7f1879275cff55 + 1 : 5387ba1d17bba5fdadb77621376250c2396c5413 + 2 : b2a83b0ebf2f8374299a5b2bdfc31ea955ad7236 + 3 : b2a83b0ebf2f8374299a5b2bdfc31ea955ad7236 + 4 : e5d40ace8bb38eb170c61682eb36a3020226d2c0 + 5 : 367f6ea79688062a6df5f4737ac17b69cd37fd61 + 6 : b2a83b0ebf2f8374299a5b2bdfc31ea955ad7236 + 7 : 518bd167271fbb64589c61e43d8c0165861431d8 + 8 : af65222affd33ff779780c51fa8077485aca46d9 + 9 : 5905ec9fb508b0f30b2abf8787093f16ca608a5a + 10 : 0000000000000000000000000000000000000000 + 11 : 0000000000000000000000000000000000000000 + 12 : 0000000000000000000000000000000000000000 + 13 : 0000000000000000000000000000000000000000 + 14 : 0000000000000000000000000000000000000000 + 15 : 0000000000000000000000000000000000000000 + 16 : 0000000000000000000000000000000000000000 + 17 : ffffffffffffffffffffffffffffffffffffffff + 18 : ffffffffffffffffffffffffffffffffffffffff + 19 : ffffffffffffffffffffffffffffffffffffffff + 20 : ffffffffffffffffffffffffffffffffffffffff + 21 : ffffffffffffffffffffffffffffffffffffffff + 22 : ffffffffffffffffffffffffffffffffffffffff + 23 : 0000000000000000000000000000000000000000 +sha256 : + 0 : d020873038268904688cfe5b8ccf8b8d84c1a2892fc866847355f86f8066ea2d + 1 : 13cebccdb194dd916f2c0c41ec6832dfb15b41a9eb5229d33a25acb5ebc3f016 + 2 : 3d458cfe55cc03ea1f443f1562beec8df51c75e14a9fcf9a7234a13f198e7969 + 3 : 3d458cfe55cc03ea1f443f1562beec8df51c75e14a9fcf9a7234a13f198e7969 + 4 : 07f9074ccd4513ef1cafd7660f9afede422b679fd8ad99d25c0659eba07cc045 + 5 : ba34c80668f84407cd7f498e310cc4ac12ec6ec43ea8c93cebb2a688cf226aff + 6 : 3d458cfe55cc03ea1f443f1562beec8df51c75e14a9fcf9a7234a13f198e7969 + 7 : 65caf8dd1e0ea7a6347b635d2b379c93b9a1351edc2afc3ecda700e534eb3068 + 8 : f440af381b644231e7322babfd393808e8ebb3a692af57c0b3a5d162a6e2c118 + 9 : 54c08c8ba4706273f53f90085592f7b2e4eaafb8d433295b66b78d9754145cfc + 10 : 0000000000000000000000000000000000000000000000000000000000000000 + 11 : 0000000000000000000000000000000000000000000000000000000000000000 + 12 : 0000000000000000000000000000000000000000000000000000000000000000 + 13 : 0000000000000000000000000000000000000000000000000000000000000000 + 14 : 0000000000000000000000000000000000000000000000000000000000000000 + 15 : 0000000000000000000000000000000000000000000000000000000000000000 + 16 : 0000000000000000000000000000000000000000000000000000000000000000 + 17 : ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + 18 : ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + 19 : ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + 20 : ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + 21 : ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + 22 : ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + 23 : 0000000000000000000000000000000000000000000000000000000000000000 +``` diff --git a/docs/en/virtualization/virtualization_platform/virtualization/environment_preparation.md b/docs/en/virtualization/virtualization_platform/virtualization/environment_preparation.md new file mode 100644 index 0000000000000000000000000000000000000000..04a5c324ff32b910dcdd07e9c157ffb64470ac5f --- /dev/null +++ b/docs/en/virtualization/virtualization_platform/virtualization/environment_preparation.md @@ -0,0 +1,364 @@ +# Environment Preparation + +## Preparing a VM Image + +### Overview + +A VM image is a file that contains a virtual disk that has been installed and can be used to start the OS. VM images are in different formats, such as raw and qcow2. Compared with the raw format, the qcow2 format occupies less space and supports features such as snapshot, copy-on-write, AES encryption, and zlib compression. However, the performance of the qcow2 format is slightly lower than that of the raw format. The qemu-img tool is used to create image files. This section uses the qcow2 image file as an example to describe how to create a VM image. + +### Creating an Image + +To create a qcow2 image file, perform the following steps: + +1. Install the **qemu-img** software package. + + ```shell + yum install -y qemu-img + ``` + +2. Run the **create** command of the qemu-img tool to create an image file. The command format is as follows: + + ```shell + qemu-img create -f -o + ``` + + The parameters are described as follows: + + - _imgFormat_: Image format. The value can be **raw** or **qcow2**. + - _fileOption_: File option, which is used to set features of an image file, such as specifying a backend image file, compression, and encryption. + - _fileName_: File name. + - _diskSize_: Disk size, which specifies the size of a block disk. The unit can be K, M, G, or T, indicating KiB, MiB, GiB, or TiB. + + For example, to create an image file **openEuler-image.qcow2** whose disk size is 4 GB and format is qcow2, the command and output are as follows: + + ```shell + $ qemu-img create -f qcow2 openEuler-image.qcow2 4G + Formatting 'openEuler-image.qcow2', fmt=qcow2 size=4294967296 cluster_size=65536 lazy_refcounts=off refcount_bits=16 + ``` + +### Changing the Image Disk Space + +If a VM requires larger disk space, you can use the qemu-img tool to change the disk space of the VM image. The method is as follows: + +1. Run the following command to query the disk space of the VM image: + + ```shell + qemu-img info + ``` + + For example, if the command and output for querying the disk space of the openEuler-image.qcow2 image are as follows, the disk space of the image is 4 GiB. + + ```shell + $ qemu-img info openEuler-image.qcow2 + image: openEuler-image.qcow2 + file format: qcow2 + virtual size: 4.0G (4294967296 bytes) + disk size: 196K + cluster_size: 65536 + Format specific information: + compat: 1.1 + lazy refcounts: false + refcount bits: 16 + corrupt: false + ``` + +2. Run the following command to change the image disk space. In the command, _imgFileName_ indicates the image name, and **+** and **-** indicate the image disk space to be increased and decreased, respectively. The unit is KB, MB, GB, and T, indicating KiB, MiB, GiB, and TiB, respectively. + + ```shell + qemu-img resize [+|-] + ``` + + For example, to expand the disk space of the openEuler-image.qcow2 image to 24 GiB, that is, to add 20 GiB to the original 4 GiB, the command and output are as follows: + + ```shell + $ qemu-img resize openEuler-image.qcow2 +20G + Image resized. + ``` + +3. Run the following command to check whether the image disk space is changed successfully: + + ```shell + qemu-img info + ``` + + For example, if the openEuler-image.qcow2 image disk space has been expanded to 24 GiB, the command and output are as follows: + + ```shell + $ qemu-img info openEuler-image.qcow2 + image: openEuler-image.qcow2 + file format: qcow2 + virtual size: 24G (25769803776 bytes) + disk size: 200K + cluster_size: 65536 + Format specific information: + compat: 1.1 + lazy refcounts: false + refcount bits: 16 + corrupt: false + ``` + +## Preparing the VM Network + +### Overview + +To enable the VM to communicate with external networks, you need to configure the network environment for the VM. KVM virtualization supports multiple types of bridges, such as Linux bridge and Open vSwitch bridge. As shown in [Figure 1](#fig1785384714917), the data transmission path is **VM \> virtual NIC device \> Linux bridge or Open vSwitch bridge \> physical NIC**. In addition to configuring virtual NICs \(vNICs\) for VMs, creating a bridge for a host is the key to connecting to a virtualized network. + +This section describes how to set up a Linux bridge and an Open vSwitch bridge to connect a VM to the network. You can select a bridge type based on the site requirements. + +**Figure 1** Virtual network structure +![](./figures/virtual-network-structure.png) + +### Setting Up a Linux Bridge + +The following describes how to bind the physical NIC eth0 to the Linux bridge br0. + +1. Install the **bridge-utils** software package. + + The Linux bridge is managed by the brctl tool. The corresponding installation package is bridge-utils. The installation command is as follows: + + ```shell + yum install -y bridge-utils + ``` + +2. Create bridge br0. + + ```shell + brctl addbr br0 + ``` + +3. Bind the physical NIC eth0 to the Linux bridge. + + ```shell + brctl addif br0 eth0 + ``` + + >[!NOTE] **Note:** + > If you run the `brctl addif br0 eth0` command through an SSH connection, the connection will be closed. You need to perform the following operations on iBMC to complete the VM network configuration. + +4. After eth0 is connected to the bridge, the IP address is no longer required. Install net-tools and set the IP address of eth0 to 0.0.0.0. + + ```shell + yum install -y net-tools + ifconfig eth0 0.0.0.0 + ``` + +5. Set the IP address of br0. + - If a DHCP server is available, set a dynamic IP address through the dhclient. + + ```shell + dhclient br0 + ``` + + - If no DHCP server is available, configure a static IP address for br0. For example, set the static IP address to 192.168.1.2 and subnet mask to 255.255.255.0. + + ```shell + ifconfig br0 192.168.1.2 netmask 255.255.255.0 + ``` + +### Setting Up an Open vSwitch Bridge + +The Open vSwitch bridge provides more convenient automatic orchestration capabilities. This section describes how to install network virtualization components to set up an Open vSwitch bridge. + +**1. Install the Open vSwitch component.** + +If the Open vSwitch is used to provide virtual network, you need to install the Open vSwitch network virtualization component. + +1. Install the Open vSwitch component. + + ```shell + yum install -y openvswitch + ``` + +2. Start the Open vSwitch service. + + ```shell + systemctl start openvswitch + ``` + +**2. Check whether the installation is successful.** + +1. Check whether the openvswitch component is successfully installed. If the installation is successful, the software package information is displayed. The command and output are as follows: + + ```shell + $ rpm -qi openvswitch + Name : openvswitch + Version : 2.12.4 + Release : 3.oe2203SP3 + Architecture: x86_64 + Install Date: Tue 09 May 2023 10:58:53 AM CST + Group : Unspecified + Size : 7920016 + License : ASL 2.0 and ISC + Signature : RSA/SHA256, Wed 19 Apr 2023 09:40:31 AM CST, Key ID 007fb747fb37bc6f + Source RPM : openvswitch-2.12.4-3.oe2203SP3.src.rpm + Build Date : Wed 19 Apr 2023 09:39:49 AM CST + Build Host : dc-64g.compass-ci + Packager : http://openeuler.org + URL : http://www.openvswitch.org/ + Summary : Production Quality, Multilayer Open Virtual Switch + Description : + Open vSwitch is a production quality, multilayer virtual switch licensed under + the open source Apache 2.0 license. + ``` + +2. Check whether the Open vSwitch service is started successfully. If the service is in the **Active** state, the service is started successfully. You can use the command line tool provided by the Open vSwitch. The command and output are as follows: + + ```shell + $ systemctl status openvswitch + ● openvswitch.service - LSB: Open vSwitch switch + Loaded: loaded (/etc/rc.d/init.d/openvswitch; generated) + Active: active (running) since Sat 2019-08-17 09:47:14 CST; 4min 39s ago + Docs: man:systemd-sysv-generator(8) + Process: 54554 ExecStart=/etc/rc.d/init.d/openvswitch start (code=exited, status=0/SUCCESS) + Tasks: 4 (limit: 9830) + Memory: 22.0M + CGroup: /system.slice/openvswitch.service + ├─54580 ovsdb-server: monitoring pid 54581 (healthy) + ├─54581 ovsdb-server /etc/openvswitch/conf.db -vconsole:emer -vsyslog:err -vfile:info --remote=punix:/var/run/openvswitch/db.sock --private-key=db:Open_vSwitch,SSL,private_key --certificate> + ├─54602 ovs-vswitchd: monitoring pid 54603 (healthy) + └─54603 ovs-vswitchd unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/open> + ``` + +**3. Set up an Open vSwitch bridge** + +The following describes how to set up an Open vSwitch layer-1 bridge br0. + +1. Create the Open vSwitch bridge br0. + + ```shell + ovs-vsctl add-br br0 + ``` + +2. Add the physical NIC eth0 to br0. + + ```shell + ovs-vsctl add-port br0 eth0 + ``` + +3. After eth0 is connected to the bridge, the IP address of eth0 is set to 0.0.0.0. + + ```shell + ifconfig eth0 0.0.0.0 + ``` + +4. Assign an IP address to OVS bridge br0. + - If a DHCP server is available, set a dynamic IP address through the dhclient. + + ```shell + dhclient br0 + ``` + + - If no DHCP server is available, configure a static IP address for br0, for example, 192.168.1.2. + + ```shell + ifconfig br0 192.168.1.2 + ``` + +## Preparing Boot Firmware + +### Overview + +The boot mode varies depending on the architecture. x86 servers support the Unified Extensible Firmware Interface \(UEFI\) and legacy boot modes, and AArch64 servers support only the UEFI boot mode. By default, boot files corresponding to the BIOS mode have been installed on openEuler. No additional operations are required. This section describes how to install boot files corresponding to the UEFI mode. + +The Unified Extensible Firmware Interface \(UEFI\) is a new interface standard used for power-on auto check and OS boot. It is an alternative to the traditional BIOS. EDK II is a set of open source code that implements the UEFI standard. In virtualization scenarios, the EDK II tool set is used to start a VM in UEFI mode. Before using the EDK II tool, you need to install the corresponding software package before starting a VM. This section describes how to install the EDK II tool. + +### Installation Methods + +If the UEFI mode is used, the tool set EDK II needs to be installed. The installation package for the AArch64 architecture is **edk2-aarch64**, and that for the x86 architecture is **edk2-ovmf**. This section uses the AArch64 architecture as an example to describe the installation method. For the x86 architecture, you only need to replace **edk2-aarch64** with **edk2-ovmf**. + +1. Run the following command to install the **edk** software package: + + In the AArch64 architecture, the **edk2** package name is **edk2-aarch64**. + + ```shell + yum install -y edk2-aarch64 + ``` + + In the x86\_64 architecture, the **edk2** package name is **edk2-ovmf**. + + ```shell + yum install -y edk2-ovmf + ``` + +2. Run the following command to check whether the **edk** software package is successfully installed: + + In the AArch64 architecture, the command is as follows: + + ```shell + rpm -qi edk2-aarch64 + ``` + + If information similar to the following is displayed, the **edk** software package is successfully installed: + + ```console + Name : edk2-aarch64 + Version : 202011 + Release : 11.oe2203SP3 + Architecture: noarch + Install Date: Tue 09 May 2023 11:28:22 AM CST + Group : Unspecified + ``` + + In the x86\_64 architecture, the command is as follows: + + ```shell + rpm -qi edk2-ovmf + ``` + + If information similar to the following is displayed, the **edk** software package is successfully installed: + + ```console + Name : edk2-ovmf + Version : 202011 + Release : 11.oe2203SP3 + Architecture: noarch + Install Date: Tue 09 May 2023 11:06:06 AM CST + ``` + +## Configuring as a Non-Root User + +### Overview + +openEuler uses the `virsh` command to manage VMs. If you want to use `virsh` as a non-root user, you need to perform some configurations. + +### Non-Root User Configurations + +In the following commands, replace _userName_ with the actual user name. + +1. Log in to the host as the **root** user. + +2. Add the non-root user t the **libvirt** user group. + + ```shell + usermod -a -G libvirt userName + ``` + +3. Switch to the non-root user. + + ```shell + su userName + ``` + +4. Configure the environment variables. Open the **~/.bashrc** file. + + ```shell + vim ~/.bashrc + ``` + + Add the following content to the end of the file. + + ```text + export LIBVIRT_DEFAULT_URI="qemu:///system" + ``` + + Run the following command for the configuration to take effect. + + ```shell + source ~/.bashrc + ``` + +5. Add the following content to the domain root element in the VM XML configuration file to allow qemu-kvm to access the drive image. + + ```xml + + ``` diff --git a/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP1.png b/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP1.png new file mode 100644 index 0000000000000000000000000000000000000000..536e0618a3ab5b70937292205242a08237e34712 Binary files /dev/null and b/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP1.png differ diff --git a/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP2.png b/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP2.png new file mode 100644 index 0000000000000000000000000000000000000000..0557c8782960188dbe9d84a1d0e66c9b45d2b303 Binary files /dev/null and b/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP2.png differ diff --git a/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP3.png b/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP3.png new file mode 100644 index 0000000000000000000000000000000000000000..326fcf1e8d5e3c795ebcde286d8e0fef14bec7d1 Binary files /dev/null and b/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP3.png differ diff --git a/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP4.png b/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP4.png new file mode 100644 index 0000000000000000000000000000000000000000..bc77c038e1e3a5ec30d7ba4f805ca937792e9327 Binary files /dev/null and b/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP4.png differ diff --git a/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP5.png b/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP5.png new file mode 100644 index 0000000000000000000000000000000000000000..0f22b3cbd84f7c93f74898a926bc3e32f231667f Binary files /dev/null and b/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP5.png differ diff --git a/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP6.png b/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP6.png new file mode 100644 index 0000000000000000000000000000000000000000..08235013ca71f1ec51e9af2f143629d1a6132fe9 Binary files /dev/null and b/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP6.png differ diff --git a/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP7.png b/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP7.png new file mode 100644 index 0000000000000000000000000000000000000000..f934521d59dd4a75449fcb2ca8abc54045b9102b Binary files /dev/null and b/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP7.png differ diff --git a/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP8.png b/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP8.png new file mode 100644 index 0000000000000000000000000000000000000000..9a8158e3378bf25dee05b892cc60f424542455d7 Binary files /dev/null and b/docs/en/virtualization/virtualization_platform/virtualization/figures/CertEnrollP8.png differ diff --git a/docs/en/virtualization/virtualization_platform/virtualization/figures/OSBootFlow.png b/docs/en/virtualization/virtualization_platform/virtualization/figures/OSBootFlow.png new file mode 100644 index 0000000000000000000000000000000000000000..f496c5675c72359e5160384c766a11399b04bfa6 Binary files /dev/null and b/docs/en/virtualization/virtualization_platform/virtualization/figures/OSBootFlow.png differ diff --git a/docs/en/virtualization/virtualization_platform/virtualization/figures/SecureBootFlow.png b/docs/en/virtualization/virtualization_platform/virtualization/figures/SecureBootFlow.png new file mode 100644 index 0000000000000000000000000000000000000000..d639975800752c6eca6765a416c256a4752fb590 Binary files /dev/null and b/docs/en/virtualization/virtualization_platform/virtualization/figures/SecureBootFlow.png differ diff --git a/docs/en/virtualization/virtualization_platform/virtualization/figures/en-us_image_0218587435.png b/docs/en/virtualization/virtualization_platform/virtualization/figures/en-us_image_0218587435.png new file mode 100644 index 0000000000000000000000000000000000000000..a6107f2308d194c92ebe75b58e9125819e7fe9eb Binary files /dev/null and b/docs/en/virtualization/virtualization_platform/virtualization/figures/en-us_image_0218587435.png differ diff --git a/docs/en/virtualization/virtualization_platform/virtualization/figures/en-us_image_0218587436.png b/docs/en/virtualization/virtualization_platform/virtualization/figures/en-us_image_0218587436.png new file mode 100644 index 0000000000000000000000000000000000000000..28a8d25b19c5a5ed043a8f4701b8f920de365ea2 Binary files /dev/null and b/docs/en/virtualization/virtualization_platform/virtualization/figures/en-us_image_0218587436.png differ diff --git a/docs/en/virtualization/virtualization_platform/virtualization/figures/kvm-architecture.png b/docs/en/virtualization/virtualization_platform/virtualization/figures/kvm-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..74cc91f2944b4ed5404edf036b1d71cd84df7e29 Binary files /dev/null and b/docs/en/virtualization/virtualization_platform/virtualization/figures/kvm-architecture.png differ diff --git a/docs/en/virtualization/virtualization_platform/virtualization/figures/status-transition-diagram.png b/docs/en/virtualization/virtualization_platform/virtualization/figures/status-transition-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..acbf4df149f57f43fbbcbb746980bd4748fb71d9 Binary files /dev/null and b/docs/en/virtualization/virtualization_platform/virtualization/figures/status-transition-diagram.png differ diff --git a/docs/en/virtualization/virtualization_platform/virtualization/figures/virtual-network-structure.png b/docs/en/virtualization/virtualization_platform/virtualization/figures/virtual-network-structure.png new file mode 100644 index 0000000000000000000000000000000000000000..4d57a184352c1a3558eeac56499888b2b98b31f1 Binary files /dev/null and b/docs/en/virtualization/virtualization_platform/virtualization/figures/virtual-network-structure.png differ diff --git a/docs/en/virtualization/virtualization_platform/virtualization/figures/virtualization-architecture.png b/docs/en/virtualization/virtualization_platform/virtualization/figures/virtualization-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..2e8b01628fb51bb6cc1162d6158259192506bc3a Binary files /dev/null and b/docs/en/virtualization/virtualization_platform/virtualization/figures/virtualization-architecture.png differ diff --git a/docs/en/virtualization/virtualization_platform/virtualization/introduction_to_virtulization.md b/docs/en/virtualization/virtualization_platform/virtualization/introduction_to_virtulization.md new file mode 100644 index 0000000000000000000000000000000000000000..e8a663bcab95c37fe2596208c4e3c71c23dffa0a --- /dev/null +++ b/docs/en/virtualization/virtualization_platform/virtualization/introduction_to_virtulization.md @@ -0,0 +1,80 @@ +# Introduction to Virtualization + +## Overview + +In computer technologies, virtualization is a resource management technology that abstracts various physical resources \(such as processors, memory, drives, and network adapters\) of a computer, converts the resources, and presents the resources for segmentation and combination into one or more computer configuration environments. This resource management technology breaks the inseparable barrier of the physical structure, and makes these resources not restricted by the architecture, geographical or physical configuration of the existing resources after virtualization. In this way, users can better leverage the computer hardware resources and maximize the resource utilization. + +Virtualization enables multiple virtual machines \(VMs\) to run on a physical server. The VMs share the processors, memory, and I/O device resources of the physical server, but are logically isolated from each other. In the virtualization technology, the physical server is called a host machine, the VM running on the host machine is called a guest, and the operating system \(OS\) running on the VM is called a guest OS. A layer of software, called the virtualization layer, exists between a host machine and a VM to simulate virtual hardware. This virtualization layer is called a VM monitor, as shown in the following figure. + +**Figure 1** Virtualization architecture +![](./figures/virtualization-architecture.png) + +## Virtualization Architecture + +Currently, mainstream virtualization technologies are classified into two types based on the implementation structure of the Virtual Machine Monitor \(VMM\): + +- Hypervisor model + + In this model, VMM is considered as a complete operating system \(OS\) and has the virtualization function. VMM directly manages all physical resources, including processors, memory, and I/O devices. + +- Host model + + In this model, physical resources are managed by a host OS, which is a traditional OS, such as Linux and Windows. The host OS does not provide the virtualization capability. The VMM that provides the virtualization capability runs on the host OS as a driver or software of the system. The VMM invokes the host OS service to obtain resources and simulate the processor, memory, and I/O devices. The virtualization implementation of this model includes KVM and Virtual Box. + +Kernel-based Virtual Machine \(KVM\) is a kernel module of Linux. It makes Linux a hypervisor. [Figure 2](#fig310953013541) shows the KVM architecture. KVM does not simulate any hardware device. It is used to enable virtualization capabilities provided by the hardware, such as Intel VT-x, AMD-V, Arm virtualization extensions. The user-mode QEMU simulates the mainboard, memory, and I/O devices. The user-mode QEMU works with the kernel KVM module to simulate VM hardware. The guest OS runs on the hardware simulated by the QEMU and KVM. + +**Figure 2** KVM architecture +![](./figures/kvm-architecture.png) + +## Virtualization Components + +Virtualization components provided in the openEuler software package: + +- KVM: provides the core virtualization infrastructure to make the Linux system a hypervisor. Multiple VMs can run on the same host at the same time. +- QEMU: simulates a processor and provides a set of device models to work with KVM to implement hardware-based virtualization simulation acceleration. +- Libvirt: provides a tool set for managing VMs, including unified, stable, and open application programming interfaces \(APIs\), daemon process \(libvirtd\), and default command line management tool \(virsh\). +- Open vSwitch: provides a virtual network tool set for VMs, supports programming extension and standard management interfaces and protocols \(such as NetFlow, sFlow, IPFIX, RSPAN, CLI, LACP, and 802.1ag\). + +## Virtualization Characteristics + +Virtualization has the following characteristics: + +- Partition + + Virtualization can logically divide software on a physical server to run multiple VMs \(virtual servers\) with different specifications. + +- Isolation + + Virtualization can simulate virtual hardware and provide hardware conditions for VMs to run complete OSs. The OSs of each VM are independent and isolated from each other. For example, if the OS of a VM breaks down due to a fault or malicious damage, the OSs and applications of other VMs are not affected. + +- Encapsulation + + Encapsulation is performed on a per VM basis. The excellent encapsulation capability makes VMs more flexible than physical machines. Functions such as live migration, snapshot, and cloning of VMs can be realized, implementing quick deployment and automatic O&M of data centers. + +- Hardware-irrelevant + + After being abstracted by the virtualization layer, VMs are not directly bound to underlying hardware and can run on other servers without being modified. + +## Virtualization Advantages + +Virtualization brings the following benefits to infrastructure of the data center: + +- Flexibility and scalability + + Users can dynamically allocate and reclaim resources based to meet dynamic service requirements. In addition, users can plan different VM specifications based on product requirements and adjust the scale without changing the physical resource configuration. + +- Higher availability and better O&M methods + + Virtualization provides O&M methods such as live migration, snapshot, live upgrade, and automatic DR. Physical resources can be deleted, upgraded, or changed without affecting users, improving service continuity and implementing automatic O&M. + +- Security hardening + + Virtualization provides OS-level isolation and hardware-based processor operation privilege-level control. Compared with simple sharing mechanisms, virtualization provides higher security and implements controllable and secure access to data and services. + +- High resource utilization + + Virtualization supports dynamic sharing of physical resources and resource pools, improving resource utilization. + +## openEuler Virtualization + +openEuler provides KVM virtualization components that support the AArch64 and x86\_64 processor architectures. diff --git a/docs/en/virtualization/virtualization_platform/virtualization/libcareplus.md b/docs/en/virtualization/virtualization_platform/virtualization/libcareplus.md new file mode 100644 index 0000000000000000000000000000000000000000..f1f66a219c59a5fd0a5f944af340ed769a94974f --- /dev/null +++ b/docs/en/virtualization/virtualization_platform/virtualization/libcareplus.md @@ -0,0 +1,380 @@ +# LibcarePlus + +## Overview + +LibcarePlus is a hot patch framework for user-mode processes. It can perform hot patch operations on target processes running on the Linux system without restarting the processes. Hot patches can be used to fix CVEs and urgent bugs that do not interrupt application services. + +## Hardware and Software Requirements + +The following software and hardware requirements must be met to use LibcarePlus on openEuler: + +- Currently, the x86 and ARM64 architectures are supported. + +- LibcarePlus can run on any Linux distribution that supports **libunwind**, **elfutils**, and **binutils**. +- LibcarePlus uses the **ptrace()** system call, which requires the kernel configuration option enabled for the corresponding Linux distribution. +- LibcarePlus needs the symbol table of the original executable file when creating a hot patch. Do not strip the symbol table too early. +- On the Linux OS where SELinux is enabled, manually adapt the SELinux policies. + +## Precautions and Constraints + +When using LibcarePlus, comply with the following hot patch specifications and constraints: + +- Only the code written in the C language is supported. The assembly language is not supported. +- Only user-mode programs are supported. Dynamic library patches are not supported. +- The code file name must comply with the C language identifier naming specifications. That is, the code file name consists of letters (A-Z and a-z), digits (0-9), and underscores (_) but the first character cannot be a digit. Special characters such as hyphens (-) and dollar signs ($) are not allowed. +- Incremental patches are supported. Multiple patches can be installed on a process. However, you need to design the patch installation and uninstallation management. Generally, the installation and uninstallation comply with the first-in, last-out (FILO) rule. +- Automatic patch loading is not natively supported. You can design an automatic patch loading method for a specific process. +- Patch query is supported. +- The static function patch is restricted by the symbol table that can find the function in the system. +- Hot patches are process-specific. That is, a hot patch of a dynamic library can be applied only to process that invoke the dynamic library. +- The number of patches that can be applied to a process is limited by the range of the jump instruction and the size of the hole in the virtual memory address space. Generally, up to 512 patches can be applied to a process. +- Thread local storage (TLS) variables of the initial executable (IE) model can be modified. +- Symbols defined in a patch cannot be used in subsequent patches. +- Hot patches are not supported in the following scenarios: + - Infinite loop function, non-exit function, inline function, initialization function, and non-maskable interrupt (NMI) function + - Replacing global variables + - Functions less than 5 bytes + - Modifying the header file + - Adding or deleting the input and output parameters of the target function + - Changing (adding, deleting, or modifying) data structure members + - Modifying the C files that contain GCC macros such as __LINE__ and __FILE__ + - Modifying the Intel vector assembly instruction + +## Installing LibcarePlus + +### Software Installation Dependencies + +The LibcarePlus running depends on **libunwind**, **elfutils**, and **binutils**. On the openEuler system configured with the Yum repo, you can run the following commands to install the software on which LibcarePlus depends: + +``` shell +# yum install -y binutils elfutils elfutils-libelf-devel libunwind-devel +``` + +#### Installing LibcarePlus + +```shell +# yum install libcareplus libcareplus-devel -y +``` + +Check whether LibcarePlus is installed. + +``` shell +# libcare-ctl -h +usage: libcare-ctl [options] [args] + +Options: + -v - verbose mode + -h - this message + +Commands: + patch - apply patch to a user-space process + unpatch- unapply patch from a user-space process + info - show info on applied patches +``` + +## Creating LibcarePlus Hot Patches + +### Introduction + +LibcarePlus hot patch creation methods: + +- Manual creation +- Creation through a script + +The process of manually creating a hot patch is complex. For a project with a large amount of code, for example, QEMU, it is extremely difficult to manually create a hot patch. You are advised to use the script provided by LibcarePlus to generate a hot patch file with one click. + +#### Manual Creation + +The following takes the original file **foo.c** and the patch file **bar.c** as examples to describe how to manually create a hot patch. + +1. Prepare the original file and patch file written in the C language. For example, **foo.c** and **bar.c**. + +
    + Expand foo.c +

    + + ``` c + // foo.c + #include + #include + + void print_hello(void) + { + printf("Hello world!\n"); + } + + int main(void) + { + while (1) { + print_hello(); + sleep(1); + } + } + ``` + +

    +
    + +
    + Expand bar.c +

    + + ``` c + // bar.c + #include + #include + + void print_hello(void) + { + printf("Hello world %s!\n", "being patched"); + } + + int main(void) + { + while (1) { + print_hello(); + sleep(1); + } + } + ``` + +

    +
    + +2. Build the original file and patch file to obtain the assembly files **foo.s** and **bar.s**. + + ``` shell + # gcc -S foo.c + # gcc -S bar.c + # ls + bar.c bar.s foo.c foo.s + ``` + +3. Run `kpatch_gensrc` to compare **foo.s** and **bar.s** and generate the **foobar.s** file that contains the assembly content of the original file and the differences. + + ``` shell + # sed -i 's/bar.c/foo.c/' bar.s + # kpatch_gensrc --os=rhel6 -i foo.s -i bar.s -o foobar.s --force-global + ``` + + By default, `kpatch_gensrc` compares the original files in the same C language. Therefore, before the comparison, you need to run the `sed` command to change the file name **bar.c** in the patch assembly file **bar.s** to the original file name **foo.c**. Call `kpatch_gensrc` to specify the input files as **foo.s** and **bar.s** and the output file as **foobar.s**. + +4. Build the assembly file **foo.s** in the original file and the generated assembly file **foobar.s** to obtain the executable files **foo** and **foobar**. + + ``` shell + # gcc -o foo foo.s + # gcc -o foobar foobar.s -Wl,-q + ``` + + The **-Wl, -q** linker options reserve the relocation sections in **foobar**. + +5. Use `kpatch_strip` to remove the duplicate content from the executables **foo** and **foobar** and reserve the content required for creating hot patches. + + ``` shell + # kpatch_strip --strip foobar foobar.stripped + # kpatch_strip --rel-fixup foo foobar.stripped + # strip --strip-unneeded foobar.stripped + # kpatch_strip --undo-link foo foobar.stripped + ``` + + The options in the preceding command are described as follows: + + - **--strip** removes useless sections for patch creation from **foobar**. + - **--rel-fixup** repairs the address of the variables and functions accessed in the patch. + - **strip --strip-unneeded** removes the useless symbol information for hot patch relocation. + - **--undo-link** changes the symbol address in a patch from absolute to relative. + +6. Create a hot patch file. + + After the preceding operations, the contents required for creating the hot patch are obtained. Run the `kpatch_make` command to input parameters Build ID of the original executable file and **foobar.stripped** (output file of `kpatch_strip`) to `kpatch_make` to generate a hot patch file. + + ``` shell + # str=$(readelf -n foo | grep 'Build ID') + # substr=${str##* } + # kpatch_make -b $substr -i 0001 foobar.stripped -o foo.kpatch + # ls + bar.c bar.s foo foobar foobar.s foobar.stripped foo.c foo.kpatch foo.s + ``` + + The final hot patch file **foo.kpatch** whose patch ID is **0001** is obtained. + +#### Creation Through a Script + +This section describes how to use LibcarePlus built-in **libcare-patch-make** script to create a hot patch file. The original file **foo.c** and patch file **bar.c** are used as an example. + +1. Run the `diff` command to generate the comparison file of **foo.c** and **bar.c**. + + ``` shell + # diff -up foo.c bar.c > foo.patch + ``` + + The content of the **foo.patch** file is as follows: + +
    + Expand foo.patch +

    + + ``` diff + --- foo.c 2020-12-09 15:39:51.159632075 +0800 + +++ bar.c 2020-12-09 15:40:03.818632220 +0800 + @@ -1,10 +1,10 @@ + -// foo.c + +// bar.c + #include + #include + + void print_hello(void) + { + - printf("Hello world!\n"); + + printf("Hello world %s!\n", "being patched"); + } + + int main(void) + ``` + +

    +
    + +2. Write the **makefile** for building **foo.c** as follows: + +
    + Expand makefile +

    + + ``` makefile + all: foo + + foo: foo.c + $(CC) -o $@ $< + + clean: + rm -f foo + + install: foo + mkdir $$DESTDIR || : + cp foo $$DESTDIR + ``` + +

    +
    + +3. After the **makefile** is done, directly call `libcare-patch-make`. If `libcare-patch-make` asks you which file to install the patch, enter the original file name, as shown in the following: + + ```shell + # libcare-patch-make --clean -i 0001 foo.patch + rm -f foo + BUILDING ORIGINAL CODE + /usr/local/bin/libcare-cc -o foo foo.c + INSTALLING ORIGINAL OBJECTS INTO /libcareplus/test/lpmake + mkdir $DESTDIR || : + cp foo $DESTDIR + applying foo.patch... + can't find file to patch at input line 3 + Perhaps you used the wrong -p or --strip option? + The text leading up to this was: + -------------------------- + |--- foo.c 2020-12-10 09:43:04.445375845 +0800 + |+++ bar.c 2020-12-10 09:48:36.778379648 +0800 + -------------------------- + File to patch: foo.c + patching file foo.c + BUILDING PATCHED CODE + /usr/local/bin/libcare-cc -o foo foo.c + INSTALLING PATCHED OBJECTS INTO /libcareplus/test/.lpmaketmp/patched + mkdir $DESTDIR || : + cp foo $DESTDIR + MAKING PATCHES + Fixing up relocation printf@@GLIBC_2.2.5+fffffffffffffffc + Fixing up relocation print_hello+0 + patch for /libcareplus/test/lpmake/foo is in /libcareplus/test/patchroot/700297b7bc56a11e1d5a6fb564c2a5bc5b282082.kpatch + ``` + + After the command is executed, the output indicates that the hot patch file is in the **patchroot** directory of the current directory, and the executable file is in the **lpmake** directory. By default, the Build ID is used to name a hot patch file generated by a script. + +## Applying the LibcarePlus Hot Patch + +This following uses the original file **foo.c** and patch file **bar.c** as an example to describe how to use the LibcarePlus hot patch. + +### Preparation + +Before using the LibcarePlus hot patch, prepare the original executable file **foo** and hot patch file **foo.kpatch**. + +### Loading the Hot Patch + +The procedure for applying the LibcarePlus hot patch is as follows: + +1. In the first shell window, run the executable file to be patched: + + ``` shell + # ./lpmake/foo + Hello world! + Hello world! + Hello world! + ``` + +2. In the second shell window, run the `libcare-ctl` command to apply the hot patch: + + ``` shell + # libcare-ctl -v patch -p $(pidof foo) ./patchroot/BuildID.kpatch + ``` + + If the hot patch is applied successfully, the following information is displayed in the second shell window: + + ``` shell + 1 patch hunk(s) have been successfully applied to PID '10999' + ``` + + The following information is displayed for the target process running in the first shell window: + + ``` shell + Hello world! + Hello world! + Hello world being patched! + Hello world being patched! + ``` + +### Querying a Hot Patch + +The procedure for querying a LibcarePlus hot patch is as follows: + +1. Run the following command in the second shell window: + + ```shell + # libcare-ctl info -p $(pidof foo) + + ``` + + If a hot patch is installed, the following information is displayed in the second shell window: + + ```shell + Pid: 551763 + Target: foo + Build id: df05a25bdadd282812d3ee5f0a460e69038575de + Applied patch number: 1 + Patch id: 0001 + ``` + +### Uninstalling the Hot Patch + +The procedure for uninstalling the LibcarePlus hot patch is as follows: + +1. Run the following command in the second shell window: + + ``` shell + # libcare-ctl unpatch -p $(pidof foo) -i 0001 + ``` + + If the hot patch is uninstalled successfully, the following information is displayed in the second shell window: + + ``` shell + 1 patch hunk(s) were successfully cancelled from PID '10999' + ``` + +2. The following information is displayed for the target process running in the first shell window: + + ``` shell + Hello world being patched! + Hello world being patched! + Hello world! + Hello world! + ``` diff --git a/docs/en/virtualization/virtualization_platform/virtualization/managing_devices.md b/docs/en/virtualization/virtualization_platform/virtualization/managing_devices.md new file mode 100644 index 0000000000000000000000000000000000000000..c3cf43a17cc241cf13061c1c497b78554b26eea7 --- /dev/null +++ b/docs/en/virtualization/virtualization_platform/virtualization/managing_devices.md @@ -0,0 +1,853 @@ +# Managing Devices + +## Configuring a PCIe Controller for a VM + +### Overview + +The NIC, disk controller, and PCIe pass-through devices in a VM must be mounted to a PCIe root port. Each root port corresponds to a PCIe slot. The devices mounted to the root port support hot swap, but the root port does not support hot swap. Therefore, users need to consider the hot swap requirements and plan the maximum number of PCIe root ports reserved for the VM. Before the VM is started, the root port is statically configured. + +### Configuring the PCIe Root, PCIe Root Port, and PCIe-PCI-Bridge + +The VM PCIe controller is configured using the XML file. The **model** corresponding to PCIe root, PCIe root port, and PCIe-PCI-bridge in the XML file are **pcie-root**, **pcie-root-port**, and **pcie-to-pci-bridge**, respectively. + +- Simplified configuration method + + Add the following contents to the XML file of the VM. Other attributes of the controller are automatically filled by libvirt. + + ```xml + + + + + + + ``` + + The **pcie-root** and **pcie-to-pci-bridge** occupy one **index** respectively. Therefore, the final **index** is the number of required **root ports + 1**. + +- Complete configuration method + + Add the following contents to the XML file of the VM: + + ```xml + + + + +
    + + + +
    + + + + +
    + + + ``` + + In the preceding contents: + + - The **chassis** and **port** attributes of the root port must be in ascending order. Because a PCIe-PCI-bridge is inserted in the middle, the **chassis** number skips **2**, but the **port** numbers are still consecutive. + - The **address function** of the root port ranges from **0\*0** to **0\*7**. + - A maximum of eight functions can be mounted to each slot. When the slot is full, the slot number increases. + + The complete configuration method is complex. Therefore, the simplified one is recommended. + +## Managing Virtual Disks + +### Overview + +Virtual disk types include virtio-blk, virtio-scsi, and vhost-scsi. virtio-blk simulates a block device, and virtio-scsi and vhost-scsi simulate SCSI devices. + +- virtio-blk: It can be used for common system disk and data disk. In this configuration, the virtual disk is presented as **vd\[a-z\]** or **vd\[a-z\]\[a-z\]** in the VM. +- virtio-scsi: It is recommended for common system disk and data disk. In this configuration, the virtual disk is presented as **sd\[a-z\]** or **sd\[a-z\]\[a-z\]** in the VM. +- vhost-scsi: It is recommended for the virtual disk that has high performance requirements. In this configuration, the virtual disk is presented as **sd\[a-z\]** or **sd\[a-z\]\[a-z\]** on the VM. + +### Procedure + +For details about how to configure a virtual disk, see [Storage Devices](./vm_configuration.md#storage-devices). This section uses the virtio-scsi disk as an example to describe how to attach and detach a virtual disk. + +- Attach a virtio-scsi disk. + + Run the **virsh attach-device** command to attach the virtio-scsi virtual disk. + + ```shell + virsh attach-device + ``` + + The preceding command can be used to attach a disk to a VM online. The disk information is specified in the **attach-device.xml** file. The following is an example of the **attach-device.xml** file: + + ```xml + ### attach-device.xml ### + + + + + +
    + + ``` + + The disk attached by running the preceding commands becomes invalid after the VM is shut down and restarted. If you need to permanently attach a virtual disk to a VM, run the **virsh attach-device** command with the **--config** parameter. + +- Detach a virtio-scsi disk. + + If a disk attached online is no longer used, run the **virsh detach-device** command to dynamically detach it. + + ```shell + virsh detach-device + ``` + + **detach-device.xml** specifies the XML information of the disk to be detached, which must be the same as the XML information during dynamic attachment. + +## Managing vNICs + +### Overview + +The vNIC types include virtio-net, vhost-net, and vhost-user. After creating a VM, you may need to attach or detach a vNIC. openEuler supports NIC hot swap, which can change the network throughput and improve system flexibility and scalability. + +### Procedure + +For details about how to configure a virtual NIC, see **VM Configuration** > **Network Devices**. This section uses the vhost-net NIC as an example to describe how to attach and detach a vNIC. + +- Attach the vhost-net NIC. + + Run the **virsh attach-device** command to attach the vhost-net vNIC. + + ```shell + virsh attach-device + ``` + + The preceding command can be used to attach a vhost-net NIC to a running VM. The NIC information is specified in the **attach-device.xml** file. The following is an example of the **attach-device.xml** file: + + ```xml + ### attach-device.xml ### + + + + + + + + ``` + + The vhost-net NIC attached using the preceding commands becomes invalid after the VM is shut down and restarted. If you need to permanently attach a vNIC to a VM, run the **virsh attach-device** command with the **--config** parameter. + +- Detach the vhost-net NIC. + + If a NIC attached online is no longer used, run the **virsh detach** command to dynamically detach it. + + ```shell + virsh detach-device + ``` + + **detach-device.xml** specifies the XML information of the vNIC to be detached, which must be the same as the XML information during dynamic attachment. + +## Configuring a Virtual Serial Port + +### Overview + +In a virtualization environment, VMs and host machines need to communicate with each other to meet management and service requirements. However, in the complex network architecture of the cloud management system, services running on the management plane and VMs running on the service plane cannot communicate with each other at layer 3. As a result, service deployment and information collection are not fast enough. Therefore, a virtual serial port is required for communication between VMs and host machines. You can add serial port configuration items to the XML configuration file of a VM to implement communication between VMs and host machines. + +### Procedure + +The Linux VM serial port console is a pseudo terminal device connected to the host machine through the serial port of the VM. It implements interactive operations on the VM through the host machine. In this scenario, the serial port needs to be configured in the pty type. This section describes how to configure a pty serial port. + +- Add the following virtual serial port configuration items under the **devices** node in the XML configuration file of the VM: + + ```xml + + + + + + ``` + +- Run the **virsh console** command to connect to the pty serial port of the running VM. + + ```shell + virsh console + ``` + +- To ensure that no serial port message is missed, use the **--console** option to connect to the serial port when starting the VM. + + ```shell + virsh start --console + ``` + +## Managing Device Passthrough + +The device passthrough technology enables VMs to directly access physical devices. The I/O performance of VMs can be improved in this way. + +Currently, the VFIO passthrough is used. It can be classified into PCI passthrough and SR-IOV passthrough based on device type. + +### PCI Passthrough + +PCI passthrough directly assigns a physical PCI device on the host to a VM. The VM can directly access the device. PCI passthrough uses the VFIO device passthrough mode. The PCI passthrough configuration file in XML format for a VM is as follows: + +```xml + + + +
    + + +
    + +``` + +**Table 1** Device configuration items for PCI passthrough + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Parameter

    +

    Description

    +

    Value

    +

    hostdev.source.address.domain

    +

    Domain ID of the PCI device on the host OS.

    +

    ≥ 0

    +

    hostdev.source.address.bus

    +

    Bus ID of the PCI device on the host OS.

    +

    ≥ 1

    +

    hostdev.source.address.slot

    +

    Device ID of the PCI device on the host OS.

    +

    ≥ 0

    +

    hostdev.source.address.function

    +

    Function ID of the PCI device on the host OS.

    +

    ≥ 0

    +

    hostdev.driver.name

    +

    Backend driver of PCI passthrough. This parameter is optional.

    +

    vfio (default value)

    +

    hostdev.rom

    +

    Specifies whether the VM can access the ROM of the passthrough device.

    +

    This parameter can be set to on or off. The default value is on.

    +
    • on: indicates that the VM can access the ROM of the passthrough device. For example, if a VM with a passthrough NIC needs to boot from the preboot execution environment (PXE), or a VM with a passthrough Host Bus Adapter (HBA) card needs to boot from the ROM, you can set this parameter to on.
    • off: indicates that the VM cannot access the ROM of the passthrough device.
    +

    hostdev.address type

    +

    Bus, Device, and Function (BDF) IDs on the guest OS displayed on the PCI device.

    +

    [0x03–0x1e] (range of slot ID)

    +

    Note:

    +
    • domain indicates the domain information, bus indicates the bus ID, slot indicates the slot ID, and function indicates the function.
    • Except for slot, default values of these parameters are 0.
    • The first slot 0x00 is occupied by the system, the second slot 0x01 is occupied by the IDE controller and USB controller, and the third slot 0x02 is occupied by the video.
    • The last slot 0x1f is occupied by the PV channel.
    +
    + +>[!NOTE] **NOTE:** +>VFIO passthrough is implemented by IOMMU group. Devices are divided to IOMMU groups based on access control services (ACS) on hardware. Devices in the same IOMMU group can be assigned to only one VM. If multiple functions on a PCI device belong to the same IOMMU group, they can be directly assigned to only one VM as well. + +### SR-IOV Passthrough + +#### Overview + +Single Root I/O Virtualization (SR-IOV) is a hardware-based virtualization solution. With the SR-IOV technology, a physical function (PF) can provide multiple virtual functions (VFs), and each VF can be directly assigned to a VM. This greatly improves hardware resource utilization and I/O performance of VMs. A typical application scenario is SR-IOV passthrough for NICs. With the SR-IOV technology, a physical NIC (PF) can function as multiple VF NICs, and then the VFs can be directly assigned to VMs. + +>[!NOTE] **NOTE:** +> +>- SR-IOV requires the support of physical hardware. Before using SR-IOV, ensure that the hardware device to be directly assigned supports SR-IOV and the device driver on the host OS works in SR-IOV mode. +>- The following describes how to query the NIC model: +>In the following command output, values in the first column indicate the PCI numbers of NICs, and **19e5:1822** indicates the vendor ID and device ID of the NIC. +> +>```shell +>$ lspci | grep Ether +>05:00.0 Ethernet controller: Device 19e5:1822 (rev 45) +>07:00.0 Ethernet controller: Device 19e5:1822 (rev 45) +>09:00.0 Ethernet controller: Device 19e5:1822 (rev 45) +>0b:00.0 Ethernet controller: Device 19e5:1822 (rev 45) +>81:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) +>81:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) +>``` + +#### Procedure + +To configure SR-IOV passthrough for a NIC, perform the following steps: + +1. Enable the SR-IOV mode for the NIC. + 1. Ensure that VF driver support provided by the NIC supplier exists on the guest OS. Otherwise, VFs in the guest OS cannot work properly. + 2. Enable the SMMU/IOMMU support in the BIOS of the host OS. The enabling method varies depending on the servers of different vendors. For details, see the help documents of the servers. + 3. Configure the host driver to enable the SR-IOV VF mode. The following uses the Hi1822 NIC as an example to describe how to enable 16 VFs. + + ```shell + echo 16 > /sys/class/net/ethX/device/sriov_numvfs + ``` + +2. Obtain the PCI BDF information of PFs and VFs. + 1. Run the following command to obtain the NIC resource list on the current board: + + ```shell + $ lspci | grep Eth + 03:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45) + 04:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45) + 05:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45) + 06:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45) + 7d:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Device a222 (rev 20) + 7d:00.1 Ethernet controller: Huawei Technologies Co., Ltd. Device a222 (rev 20) + 7d:00.2 Ethernet controller: Huawei Technologies Co., Ltd. Device a221 (rev 20) + 7d:00.3 Ethernet controller: Huawei Technologies Co., Ltd. Device a221 (rev 20) + ``` + + 2. Run the following command to view the PCI BDF information of VFs: + + ```shell + $ lspci | grep "Virtual Function" + 03:00.1 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) + 03:00.2 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) + 03:00.3 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) + 03:00.4 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) + 03:00.5 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) + 03:00.6 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) + 03:00.7 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) + 03:01.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) + 03:01.1 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) + 03:01.2 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) + ``` + + 3. Select an available VF and write its configuration to the VM configuration file based on its BDF information. For example, the bus ID of the device **03:00.1** is **03**, its slot ID is **00**, and its function ID is **1**. + +3. Identify and manage the mapping between PFs and VFs. + 1. Identify VFs corresponding to a PF. The following uses PF 03.00.0 as an example: + + ```shell + ls -l /sys/bus/pci/devices/0000\:03\:00.0/ + ``` + + The following symbolic link information is displayed. You can obtain the VF IDs (virtfnX) and PCI BDF IDs based on the information. + + 2. Identify the PF corresponding to a VF. The following uses VF 03:00.1 as an example: + + ```shell + ls -l /sys/bus/pci/devices/0000\:03\:00.1/ + ``` + + The following symbolic link information is displayed. You can obtain PCI BDF IDs of the PF based on the information. + + ```console + lrwxrwxrwx 1 root root 0 Mar 28 22:44 physfn -> ../0000:03:00.0 + ``` + + 3. Obtain names of NICs corresponding to the PFs or VFs. For example: + + ```shell + $ ls /sys/bus/pci/devices/0000:03:00.0/net + eth0 + ``` + + 4. Set the MAC address, VLAN, and QoS information of VFs to ensure that the VFs are in the **Up** state before passthrough. The following uses VF 03:00.1 as an example. The PF is eth0 and the VF ID is **0**. + + ```shell + ip link set eth0 vf 0 mac 90:E2:BA:21:XX:XX # Sets the MAC address. + ifconfig eth0 up + ip link set eth0 vf 0 rate 100 # Sets the VF outbound rate, in Mbit/s. + ip link show eth0 # Views the MAC address, VLAN ID, and QoS information to check whether the configuration is successful. + ``` + +4. Mount the SR-IOV NIC to the VM. + + When creating a VM, add the SR-IOV passthrough configuration item to the VM configuration file. + + ```xml + + + +
    + + + + + + ``` + + **Table 2** SR-IOV configuration options + + + + + + + + + + + + + + + + + + + + + + + +

    Parameter

    +

    Description

    +

    Value

    +

    hostdev.managed

    +

    Two modes for libvirt to process PCI devices.

    +

    no: default value. The passthrough device is managed by the user.

    +

    yes: The passthrough device is managed by libvirt. Set this parameter to yes in the SR-IOV passthrough scenario.

    +

    hostdev.source.address.bus

    +

    Bus ID of the PCI device on the host OS.

    +

    ≥ 1

    +

    hostdev.source.address.slot

    +

    Device ID of the PCI device on the host OS.

    +

    ≥ 0

    +

    hostdev.source.address.function

    +

    Function ID of the PCI device on the host OS.

    +

    ≥ 0

    +
    + +Disabling the SR-IOV function: +To disable the SR-IOV function after the VM is stopped and no VF is in use, run the following command: +The following uses the Hi1822 NIC (corresponding network interface name: eth0) as an example: + +```sh +echo 0 > /sys/class/net/eth0/device/sriov_numvfs + ``` + +#### SR-IOV Passthrough for the HPRE Accelerator + +The accelerator engine is a hardware acceleration solution provided by TaiShan 200 server based on the Kunpeng 920 processor. The HPRE accelerator is used to accelerate SSL/TLS applications. It significantly reduces processor consumption and improves processor efficiency. +On the Kunpeng server, the VF of the HPRE accelerator on the host needs to be passed through to the VM for internal services of the VM. + +**Table 3** HPRE accelerator description + +| Item | Description | +|-------------|-----------------------------------------------------------------------------------------------------| +| Device name | Hi1620 on-chip RSA/DH security algorithm accelerator (HPRE engine) | +| Function | Modular exponentiation, RSA key pair operation, DH calculation, and auxiliary operations of large numbers (modular exponentiation, modular multiplication, modulo, modular inverse, primality test, and co-prime test) | +| VendorID | 0x19E5 | +| PF DeviceID | 0xA258 | +| VF DeviceID | 0xA259 | +| Maximum number of VF | A maximum of 63 VFs can be created for an HPRE PF | + +>[!NOTE] **Note** +>When a VM is using a VF device, the driver on the host cannot be uninstalled, and the accelerator does not support hot swap. +>VF operation (If VFNUMS is 0, the VF is disabled. hpre_num is used to identify a specific accelerator device): +> +>```shell +>echo $VFNUMS > /sys/class/uacce/hisi_hpre-$hpre_num/device/sriov_numvfs +>``` + +### vDPA Passthrough + +#### Overview + +vDPA passthrough connects a device on a host to the vDPA framework, uses the vhost-vdpa driver to present a character device, and configures the character device for VMs to use. + +vDPA passthrough provides the similar I/O performance as VFIO passthrough, provides flexibility of VirtIO devices, and supports live migration of vDPA passthrough devices. + +With the SR-IOV solution, vDPA passthrough can virtualize a physical NIC (PF) into multiple NICs (VFs), and then connect the VFs to the vDPA framework for VMs to use. + +#### Procedure + +To configure vDPA passthrough, perform the following steps as user **root**: + +1. Create and configure VFs. For details, see steps 1 to 3 in SR-IOV passthrough. The following uses **virtio-net** devices as an example (**08:00.6** and **08:00.7** are PFs, and the others are created VFs): + + ```shell + # lspci | grep -i Eth | grep Virtio + 08:00.6 Ethernet controller: Virtio: Virtio network device + 08:00.7 Ethernet controller: Virtio: Virtio network device + 08:01.1 Ethernet controller: Virtio: Virtio network device + 08:01.2 Ethernet controller: Virtio: Virtio network device + 08:01.3 Ethernet controller: Virtio: Virtio network device + 08:01.4 Ethernet controller: Virtio: Virtio network device + 08:01.5 Ethernet controller: Virtio: Virtio network device + 08:01.6 Ethernet controller: Virtio: Virtio network device + 08:01.7 Ethernet controller: Virtio: Virtio network device + 08:02.0 Ethernet controller: Virtio: Virtio network device + 08:02.1 Ethernet controller: Virtio: Virtio network device + 08:02.2 Ethernet controller: Virtio: Virtio network device + ``` + +2. Unbind the VF drivers and bind the vDPA driver of the hardware vendor. + + ```shell + echo 0000:08:01.1 > /sys/bus/pci/devices/0000\:08\:01.1/driver/unbind + echo 0000:08:01.2 > /sys/bus/pci/devices/0000\:08\:01.2/driver/unbind + echo 0000:08:01.3 > /sys/bus/pci/devices/0000\:08\:01.3/driver/unbind + echo 0000:08:01.4 > /sys/bus/pci/devices/0000\:08\:01.4/driver/unbind + echo 0000:08:01.5 > /sys/bus/pci/devices/0000\:08\:01.5/driver/unbind + echo -n "1af4 1000" > /sys/bus/pci/drivers/vender_vdpa/new_id + ``` + +3. After vDPA devices are bound, you can run the `vdpa` command to query the list of devices managed by vDPA. + + ```shell + # vdpa mgmtdev show + pci/0000:08:01.1: + supported_classes net + pci/0000:08:01.2: + supported_classes net + pci/0000:08:01.3: + supported_classes net + pci/0000:08:01.4: + supported_classes net + pci/0000:08:01.5: + supported_classes net + ``` + +4. After the vDPA devices are created, create the vhost-vDPA devices. + + ```shell + vdpa dev add name vdpa0 mgmtdev pci/0000:08:01.1 + vdpa dev add name vdpa1 mgmtdev pci/0000:08:01.2 + vdpa dev add name vdpa2 mgmtdev pci/0000:08:01.3 + vdpa dev add name vdpa3 mgmtdev pci/0000:08:01.4 + vdpa dev add name vdpa4 mgmtdev pci/0000:08:01.5 + ``` + +5. After the vhost-vDPA devices are created, you can run the `vdpa` command to query the vDPA device list or run the `libvirt` command to query the vhost-vDPA device information. + + ```shell + # vdpa dev show + vdpa0: type network mgmtdev pci/0000:08:01.1 vendor_id 6900 max_vqs 3 max_vq_size 256 + vdpa1: type network mgmtdev pci/0000:08:01.2 vendor_id 6900 max_vqs 3 max_vq_size 256 + vdpa2: type network mgmtdev pci/0000:08:01.3 vendor_id 6900 max_vqs 3 max_vq_size 256 + vdpa3: type network mgmtdev pci/0000:08:01.4 vendor_id 6900 max_vqs 3 max_vq_size 256 + vdpa4: type network mgmtdev pci/0000:08:01.5 vendor_id 6900 max_vqs 3 max_vq_size 256 + + # virsh nodedev-list vdpa + vdpa_vdpa0 + vdpa_vdpa1 + vdpa_vdpa2 + vdpa_vdpa3 + vdpa_vdpa4 + + # virsh nodedev-dumpxml vdpa_vdpa0 + + vdpa_vdpa0 + /sys/devices/pci0000:00/0000:00:0c.0/0000:08:01.1/vdpa0 + pci_0000_08_01_1 + + vhost_vdpa + + + /dev/vhost-vdpa-0 + + + ``` + +6. Mount a vDPA device to the VM. + + When creating a VM, add the item for the vDPA passthrough device to the VM configuration file: + + ```xml + + + + + + ``` + + **Table 4** vDPA configuration description + + | Parameter | Description | Value | + | ------------------ | ---------------------------------------------------- | ----------------- | + | hostdev.source.dev | Path of the vhost-vDPA character device on the host. | /dev/vhost-vdpa-x | + + >[!NOTE] **NOTE:** + >The procedures of creating and configuring VFs and binding the vDPA drivers vary with the design of hardware vendors. Follow the procedure of the corresponding vendor. + +## Managing VM USB + +To facilitate the use of USB devices such as USB key devices and USB mass storage devices on VMs, openEuler provides the USB device passthrough function. Through USB passthrough and hot-swappable interfaces, you can configure USB passthrough devices for VMs, or hot swap USB devices when VMs are running. + +### Configuring USB Controllers + +#### Overview + +A USB controller is a virtual controller that provides specific USB functions for USB devices on VMs. To use USB devices on a VM, you must configure USB controllers for the VM. Currently, openEuler supports the following types of USB controllers: + +- Universal host controller interface (UHCI): also called the USB 1.1 host controller specification. +- Enhanced host controller interface (EHCI): also called the USB 2.0 host controller specification. +- Extensible host controller interface (xHCI): also called the USB 3.0 host controller specification. + +#### Precautions + +- The host server must have USB controller hardware and modules that support USB 1.1, USB 2.0, and USB 3.0 specifications. +- You need to configure USB controllers for the VM by following the order of USB 1.1, USB 2.0, and USB 3.0. +- An xHCI controller has eight ports and can be mounted with a maximum of four USB 3.0 devices and four USB 2.0 devices. An EHCI controller has six ports and can be mounted with a maximum of six USB 2.0 devices. A UHCI controller has two ports and can be mounted with a maximum of two USB 1.1 devices. +- On each VM, only one USB controller of the same type can be configured. +- USB controllers cannot be hot swapped. +- If the USB 3.0 driver is not installed on a VM, the xHCI controller may not be identified. For details about how to download and install the USB 3.0 driver, refer to the official description provided by the corresponding OS distributor. +- To ensure the compatibility of the OS, set the bus ID of the USB controller to **0** when configuring a USB tablet for the VM. The tablet is mounted to the USB 1.1 controller by default. + +#### Configuration Methods + +The following describes the configuration items of USB controllers for a VM. You are advised to configure USB 1.1, USB 2.0, and USB 3.0 to ensure the VM is compatible with three types of devices. + +The configuration item of the USB 1.1 controller (UHCI) in the XML configuration file is as follows: + +```xml + + +``` + +The configuration item of the USB 2.0 controller (EHCI) in the XML configuration file is as follows: + +```xml + + +``` + +The configuration item of the USB 3.0 controller (xHCI) in the XML configuration file is as follows: + +```xml + + +``` + +### Configuring a USB Passthrough Device + +#### Overview + +After USB controllers are configured for a VM, a physical USB device on the host can be mounted to the VM through device passthrough for the VM to use. In the virtualization scenario, in addition to static configuration, hot swapping the USB device is supported. That is, the USB device can be mounted or unmounted when the VM is running. + +#### Precautions + +- A USB device can be assigned to only one VM. +- A VM with a USB passthrough device does not support live migration. +- VM creation fails if no USB passthrough devices exist in the VM configuration file. +- Forcibly hot removing a USB storage device that is performing read or write operation may damage files in the USB storage device. + +#### Configuration Description + +The following describes the configuration items of a USB device for a VM. + +Description of the USB device in the XML configuration file: + +```xml + + +
    + +
    + +``` + +- **
    **: _m_ indicates the USB bus address on the host, and _n_ indicates the device ID. +- **
    **: indicates that the USB device is to be mounted to the USB controller specified on the VM. _x_ indicates the controller ID, which corresponds to the index number of the USB controller configured on the VM. _y_ indicates the port address. When configuring a USB passthrough device, you need to set this parameter to ensure that the controller to which the device is mounted is as expected. + +#### Configuration Methods + +To configure USB passthrough, perform the following steps: + +1. Configure USB controllers for the VM. For details, see [Configuring USB Controllers](#configuring-usb-controllers). +2. Query information about the USB device on the host. + + Run the **lsusb** command (the **usbutils** software package needs to be installed) to query the USB device information on the host, including the bus address, device address, device vendor ID, device ID, and product description. For example: + + ```shell + lsusb + ``` + + ```console + Bus 008 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub + Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub + Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub + Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub + Bus 006 Device 002: ID 0bda:0411 Realtek Semiconductor Corp. + Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub + Bus 005 Device 003: ID 136b:0003 STEC + Bus 005 Device 002: ID 0bda:5411 Realtek Semiconductor Corp. + Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub + Bus 001 Device 003: ID 12d1:0003 Huawei Technologies Co., Ltd. + Bus 001 Device 002: ID 0bda:5411 Realtek Semiconductor Corp. + Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub + Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub + ``` + +3. Prepare the XML description file of the USB device. Before hot removing the device, ensure that the USB device is not in use. Otherwise, data may be lost. +4. Run the hot swapping commands. + + Take a VM whose name is **openEulerVM** as an example. The corresponding configuration file is **usb.xml**. + + - Hot adding of the USB device takes effect only for the current running VM. After the VM is restarted, hot add the USB device again. + + ```shell + virsh attach-device openEulerVM usb.xml --live + ``` + + - Complete persistency configurations for hot adding of the USB device. After the VM is restarted, the USB device is automatically assigned to the VM. + + ```shell + virsh attach-device openEulerVM usb.xml --config + ``` + + - Hot removing of the USB device takes effect only for the current running VM. After the VM is restarted, the USB device with persistency configurations is automatically assigned to the VM. + + ```shell + virsh detach-device openEulerVM usb.xml --live + ``` + + - Complete persistency configurations for hot removing of the USB device. + + ```shell + virsh detach-device openEulerVM usb.xml --config + ``` + +## Storing Snapshots + +### Overview + +The VM system may be damaged due to virus damage, system file deletion by mistake, or incorrect formatting. As a result, the system cannot be started. To quickly restore a damaged system, openEuler provides the storage snapshot function. openEuler can create a snapshot that records the VM status at specific time points without informing users (usually within a few seconds). The snapshot can be used to restore the VM to the status when the snapshots were taken. For example, a damaged system can be quickly restored with the help of snapshots, which improves system reliability. + +>[!NOTE] **NOTE:** +>Currently, storage snapshots can be QCOW2 and RAW images only. Block devices are not supported. + +### Procedure + +To create VM storage snapshots, perform the following steps: + +1. Log in to the host and run the **virsh domblklist** command to query the disk used by the VM. + + ```shell + $ virsh domblklist openEulerVM + Target Source + --------------------------------------------- + vda /mnt/openEuler-image.qcow2 + ``` + +2. Run the following command to create the VM disk snapshot **openEuler-snapshot1.qcow2**: + + ```shell + $ virsh snapshot-create-as --domain openEulerVM --disk-only --diskspec vda,snapshot=external,file=/mnt/openEuler-snapshot1.qcow2 --atomic + Domain snapshot 1582605802 created + ``` + +3. Run the following command to query disk snapshots: + + ```shell + $ virsh snapshot-list openEulerVM + Name Creation Time State + --------------------------------------------------------- + 1582605802 2020-02-25 12:43:22 +0800 disk-snapshot + ``` + +## Configuring Disk I/O Suspension + +### Introduction + +#### Overview + +When a storage fault occurs (for example, the storage link is disconnected), the I/O error of the physical disk is sent to the VM front end through the virtualization layer. After the VM receives the I/O error, the user file system in the VM may change to the read-only state. In this case, the VM needs to be restarted or the user needs to manually recover the file system, which brings extra workload. + +In this case, the virtualization platform provides the disk I/O suspension capability. When a storage fault occurs, the VM I/O being delivered to the host is suspended. During the suspension period, no I/O error is returned to the VM. In this way, the VM file system will not be in read-only state but is hung. At the same time, the VM backend retries I/Os based on the specified suspension interval. If the storage fault is rectified within the suspension time, the suspended I/O can be written to the disk. The internal file system of the VM automatically recovers and the VM does not need to be restarted. If the storage fault is not rectified within the suspension time, an error is reported to the VM and the user is notified. + +#### Applicable Scenario + +The cloud that may be disconnected from the storage plane is used as the backend of a virtual disk. + +#### Precautions and Restrictions + +- Only virtio-blk and virtio-scsi virtual drives support disk I/O suspension. + +- The backend of virtual disks suspended by disk I/O is usually the cloud drive that may cause storage plane link disconnection. + +- The disk I/O suspension can be enabled for read and write I/O errors. The retry interval and timeout interval for read and write I/O errors of the same disk are the same. + +- The disk I/O suspension retry interval does not include the actual I/O overhead on the host. That is, the actual interval between two I/O retry operations is greater than the configured I/O error retry interval. + +- The disk I/O suspension cannot identify the I/O error type (such as storage link disconnection, bad disk, and reservation conflict). As long as the hardware returns an I/O error, the disk I/O suspension is performed. + +- When the disk I/O is suspended, the internal I/O of the VM is not returned. The system commands for accessing the disk, such as fdisk, are suspended. The services that depend on the returned command are also suspended. + +- When the disk I/O is suspended, the I/O cannot be written to the disk. As a result, the VM may fail to be gracefully shut down. In this case, you need to forcibly shut down the VM. + +- When the disk I/O is suspended, the disk data cannot be read. As a result, the VM cannot be restarted. You need to forcibly shut down the VM, wait until the storage fault is rectified, and then restart the VM. + +- After a storage fault occurs, the following problems cannot be solved even though disk I/O suspension exists: + + 1. Failed to execute advanced storage features. + + Advanced features include virtual disk hot swapping, virtual disk creation, VM startup, VM shutdown, forcible VM shutdown, VM hibernation and wakeup, VM storage hot migration, VM storage hot migration cancellation, VM storage snapshot creation, VM storage snapshot combination, and VM disk capacity query, VM online scale-out, virtual CD-ROM drive insertion and ejection. + + 2. Failed to execute the VM life cycle. + +- When a VM configured with disk I/O suspension initiates hot migration, the XML configuration of the destination disk must contain the same disk I/O suspension configuration as that of the source disk. + +### Disk I/O Suspension Configuration + +#### Qemu Command Line Configuration + +The disk I/O suspension function is enabled by specifying `werror=retry` and `rerror=retry` on the virtual disk device and using `retry_interval` and `retry_timeout` to configure the retry policy. `retry_interval` indicates the I/O error retry interval. The value ranges from 0 to MAX_LONG, in milliseconds. If this parameter is not set, the default value 1000 ms is used. `retry_timeout` indicates the I/O retry timeout interval. The value ranges from 0 to MAX_LONG. The value 0 indicates that no timeout occurs. The unit is millisecond. If this parameter is not set, the default value is 0. + +The I/O suspension configuration of the virtio-blk disk is as follows: + +```shell +-drive file=/path/to/your/storage,format=raw,if=none,id=drive-virtio-disk0,cache=none,aio=native \ +-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,\ +drive=drive-virtio-disk0,id=virtio-disk0,write-cache=on,\ +werror=retry,rerror=retry,retry_interval=2000,retry_timeout=10000 +``` + +The I/O suspension configuration of the virtio-scsi disk is as follows: + +```shell +-drive file=/path/to/your/storage,format=raw,if=none,id=drive-scsi0-0-0-0,cache=none,aio=native \ +-device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=0,\ +device_id=drive-scsi0-0-0-0,drive=drive-scsi0-0-0-0,id=scsi0-0-0-0,write-cache=on,\ +werror=retry,rerror=retry,retry_interval=2000,retry_timeout=10000 +``` + +#### XML Configuration + +The disk I/O suspension function is enabled by specifying `error_policy='retry'` and `rerror_policy='retry'`in the disk XML configuration file. Configure the values of `retry_interval` and `retry_timeout`. `retry_interval` indicates the I/O error retry interval. The value ranges from 0 to MAX_LONG, in milliseconds. If this parameter is not set, the default value 1000 ms is used. `retry_timeout` indicates the I/O retry timeout interval. The value ranges from 0 to MAX_LONG. The value 0 indicates that no timeout occurs. The unit is millisecond. If this parameter is not set, the default value is 0. + +The disk I/O suspension XML configuration of the virtio-blk disk is as follows: + +```xml + + + + + + +``` + +The disk I/O suspension XML configuration of the virtio-scsi disk is as follows: + +```xml + + + + + +
    + +``` diff --git a/docs/en/virtualization/virtualization_platform/virtualization/managing_vms.md b/docs/en/virtualization/virtualization_platform/virtualization/managing_vms.md new file mode 100644 index 0000000000000000000000000000000000000000..742c8dab7837668c172252a5f6c50db23d797b43 --- /dev/null +++ b/docs/en/virtualization/virtualization_platform/virtualization/managing_vms.md @@ -0,0 +1,790 @@ +# Managing VMs + +## VM Life Cycle + +### Introduction + +#### Overview + +To leverage hardware resources and reduce costs, users need to properly manage VMs. This section describes basic operations during the VM lifecycle, such as creating, using, and deleting VMs. + +#### VM Status + +A VM can be in one of the following status: + +- **undefined**: The VM is not defined or created. That is, libvirt considers that the VM does not exist. +- **shut off**: The VM has been defined but is not running, or the VM is terminated. +- **running**: The VM is running. +- **paused**: The VM is suspended and its running status is temporarily stored in the memory. The VM can be restored to the running status. +- **saved**: Similar to the **paused** status, the running state is stored in a persistent storage medium and can be restored to the running status. +- **crashed**: The VM crashes due to an internal error and cannot be restored to the running status. + +#### Status Transition + +VMs in different status can be converted, but certain rules must be met. [Figure 1](#fig671014583483) describes the common rules for transiting the VM status. + +**Figure 1** Status transition diagram +![](./figures/status-transition-diagram.png) + +#### VM ID + +In libvirt, a created VM instance is called a **domain**, which describes the configuration information of resources such as the CPU, memory, network device, and storage device of the VM. On a host, each domain has a unique ID, which is represented by the VM **Name**, **UUID**, and **Id**. For details, see [Table 1](#table84397266483). During the VM lifecycle, an operation can be performed on a specific VM by using a VM ID. + +**Table 1** Domain ID description + + + + + + + + + + + + + + + + +

    ID

    +

    Description

    +

    Name

    +

    VM name

    +

    UUID

    +

    Universally unique identifier

    +

    Id

    +

    VM running ID

    +
    NOTE:

    The ID is not displayed for a powered off VM.

    +
    +
    + +>[!NOTE] **NOTE:** +>Run the **virsh** command to query the VM ID and UUID. For details, see [Querying VM Information](#querying-vm-information). + +### Management Commands + +#### Overview + +You can use the **virsh** command tool to manage the VM lifecycle. This section describes the commands related to the lifecycle. + +#### Prerequisites + +- Before performing operations on a VM, you need to query the VM status to ensure that the operations can be performed. For details about the conversion between status, see [Status Transition](#status-transition). +- You have administrator rights. +- The VM XML configuration files are prepared. + +#### Command Usage + +You can run the **virsh** command to manage the VM lifecycle. The command format is as follows: + +```shell +virsh +``` + +The parameters are described as follows: + +- _operate_: manages VM lifecycle operations, such as creating, deleting, and starting VMs. +- _obj_: specifies the operation object, for example, the VM to be operated. +- _options_: command option. This parameter is optional. + +[Table 2](#table389518422611) describes the commands used for VM lifecycle management. _VMInstance_ indicates the VM name, VM ID, or VM UUID, _XMLFile_ indicates the XML configuration file of the VM, and _DumpFile_ indicates the dump file. Change them based on the site requirements. + +**Table 2** VM Lifecycle Management Commands + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Command

    +

    Description

    +

    virsh define <XMLFile>

    +

    Define a persistent VM. After the definition is complete, the VM is shut down and is considered as a domain instance.

    +

    virsh create <XMLFile>

    +

    Create a temporary VM. After the VM is created, it is in the running status.

    +

    virsh start <VMInstance>

    +

    Start the VM.

    +

    virsh shutdown <VMInstance>

    +

    Shut down the VM. Start the VM shutdown process. If the VM fails to be shut down, forcibly stop it.

    +

    virsh destroy <VMInstance>

    +

    Forcibly stop the VM.

    +

    virsh reboot <VMInstance>

    +

    Reboot the VM.

    +

    virsh save <VMInstance> <DumpFile>

    +

    Dump the VM running status to a file.

    +

    virsh restore <DumpFile>

    +

    Restore the VM from the VM status dump file.

    +

    virsh suspend <VMInstance>

    +

    Suspend the VM to make the VM in the paused status.

    +

    virsh resume <VMInstance>

    +

    Resume the VM and restore the VM in the paused status to the running status.

    +

    virsh undefine <VMInstance>

    +

    After a persistent VM is destroyed, the VM lifecycle ends and no more operations can be performed on the VM.

    +
    + +### Example + +This section provides examples of commands related to VM life cycle management. + +- Create a VM. + + The VM XML configuration file is **openEulerVM.xml**. The command and output are as follows: + + ```shell + $ virsh define openEulerVM.xml + Domain openEulerVM defined from openEulerVM.xml + ``` + +- Start a VM. + + Run the following command to start the _openEulerVM_: + + ```shell + $ virsh start openEulerVM + Domain openEulerVM started + ``` + +- Reboot a VM. + + Run the following command to reboot the _openEulerVM_: + + ```shell + $ virsh reboot openEulerVM + Domain openEulerVM is being rebooted + ``` + +- Shut down a VM. + + Run the following command to shut down the _openEulerVM_: + + ```shell + $ virsh shutdown openEulerVM + Domain openEulerVM is being shutdown + ``` + +- Destroy a VM. + - If the **nvram** file is not used during the VM startup, run the following command to destroy the VM: + + ```shell + virsh undefine + ``` + + - If the **nvram** file is used during the VM startup, run the following command to specify the **nvram** processing policy when destroying the VM: + + ```shell + virsh undefine + ``` + + _strategy_ indicates the policy for destroying a VM. The values can be: + + --**nvram**: delete the corresponding **nvram** file when destroying a VM. + + --**keep-nvram**: destroy a VM but retain the corresponding **nvram** file. + + For example, to delete the _openEulerVM_ and its **nvram** file, run the following command: + + ```shell + $ virsh undefine openEulerVM --nvram + Domain openEulerVM has been undefined + ``` + +## Modifying VM Configurations Online + +### Overview + +After a VM is created, users can modify VM configurations. This process is called online modification of VM configuration. After the configuration is modified online, the new VM configuration file is persistent and takes effect after the VM is shut down and restarted. + +The format of the command for modifying VM configuration is as follows: + +```shell +virsh edit +``` + +The **virsh edit** command is used to edit the XML configuration file corresponding to **domain** to update VM configuration. **virsh edit** uses the **vi** program as the default editor. You can specify the editor type by modifying the environment variable _EDITOR_ or _VISUAL_. By default, **virsh edit** preferentially uses the text editor specified by the environment variable _VISUAL_. + +### Procedure + +1. \(Optional\) Set the editor of the **virsh edit** command to **vim**. + + ```shell + export VISUAL=vim + ``` + +2. Run the **virsh edit** command to open the XML configuration file of the _openEulerVM_. + + ```shell + virsh edit openEulerVM + ``` + +3. Modify the VM configuration file. +4. Save the VM configuration file and exit. +5. Shut down the VM. + + ```shell + virsh shutdown openEulerVM + ``` + +6. Start the VM for the modification to take effect. + + ```shell + virsh start openEulerVM + ``` + +## Querying VM Information + +### Overview + +The libvirt provides a set of command line tools to query VM information. This section describes how to use commands to obtain VM information. + +### Prerequisites + +To query VM information, the following requirements must be met: + +- The libvirtd service is running. + +- Only the administrator has the permission to execute command line. + +### Querying VM Information on a Host + +- Query the list of running and paused VMs on a host. + + ```shell + virsh list + ``` + + For example, the following command output indicates that three VMs exist on the host. **openEulerVM01** and **openEulerVM02** are running, and **openEulerVM03** is paused. + + ```text + Id Name State + ---------------------------------------------------- + 39 openEulerVM01 running + 40 openEulerVM02 running + 69 openEulerVM03 paused + ``` + +- Query the list of VM information defined on a host. + + ```shell + virsh list --all + ``` + + For example, the following command output indicates that four VMs are defined on the current host. **openEulerVM01** is running, **openEulerVM02** is paused, and **openEulerVM03** and **openEulerVM04** are shut down. + + ```text + Id Name State + ---------------------------------------------------- + 39 openEulerVM01 running + 69 openEulerVM02 paused + - openEulerVM03 shut off + - openEulerVM04 shut off + ``` + +### Querying Basic VM Information + +Libvirt component provides a group of commands for querying the VM status, including the VM running status, device information, and scheduling attributes. For details, see [Table 3](#table10582103963816). + +**Table 3** Querying basic VM information + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Information to be queried

    +

    Command line

    +

    Description

    +

    Basic information

    +

    virsh dominfo <VMInstance>

    +

    The information includes the VM ID, UUID, and VM specifications.

    +

    Current status

    +

    virsh domstate <VMInstance>

    +

    You can use the --reason option to query the reason why the VM changes to the current status.

    +

    Scheduling information

    +

    virsh schedinfo <VMInstance>

    +

    The information includes the vCPU share.

    +

    Number of vCPUs

    +

    virsh vcpucount <VMInstance>

    +

    Number of vCPUs of the VM.

    +

    Virtual block device status

    +

    virsh domblkstat <VMInstance>

    +

    To query the name of a block device, run the virsh domblklist command.

    +

    vNIC status

    +

    virsh domifstat <VMInstance> <interface>

    +

    To query the NIC name, run the virsh domiflist command.

    +

    I/O thread

    +

    virsh iothreadinfo <VMInstance>

    +

    VM I/O thread and CPU affinity.

    +
    + +### Example + +- Run the **virsh dominfo** command to query the basic information about a created VM. The query result shows that the VM ID is **5**, UUID is **ab472210-db8c-4018-9b3e-fc5319a769f7**, memory size is 8 GiB, and the number of vCPUs is 4. + + ```shell + $ virsh dominfo openEulerVM + Id: 5 + Name: openEulerVM + UUID: ab472210-db8c-4018-9b3e-fc5319a769f7 + OS Type: hvm + State: running + CPU(s): 4 + CPU time: 6.8s + Max memory: 8388608 KiB + Used memory: 8388608 KiB + Persistent: no + Autostart: disable + Managed save: no + Security model: none + Security DOI: 0 + ``` + +- Run the **virsh domstate** command to query the VM status. The query result shows that VM **openEulerVM** is running. + + ```shell + $ virsh domstate openEulerVM + running + ``` + +- Run **virsh schedinfo** to query the VM scheduling information. The query result shows that the CPU reservation share of the VM is 1024. + + ```shell + $ virsh schedinfo openEulerVM + Scheduler : posix + cpu_shares : 1024 + vcpu_period : 100000 + vcpu_quota : -1 + emulator_period: 100000 + emulator_quota : -1 + global_period : 100000 + global_quota : -1 + iothread_period: 100000 + iothread_quota : -1 + ``` + +- Run the **virsh vcpucount** command to query the number of vCPUs. The query result shows that the VM has four CPUs. + + ```shell + $ virsh vcpucount openEulerVM + maximum live 4 + current live 4 + ``` + +- Run the **virsh domblklist** command to query the VM disk information. The query result shows that the VM has two disks. sda is a virtual disk in qcow2 format, and sdb is a cdrom device. + + ```shell + $ virsh domblklist openEulerVM + Target Source + --------------------------------------------------------------------- + sda /home/openeuler/vm/openEuler_aarch64.qcow2 + sdb /home/openeuler/vm/openEuler-22.03-LTS-SP4-aarch64-dvd.iso + ``` + +- Run the **virsh domiflist** command to query the VM NIC information. The query result shows that the VM has one NIC, the backend is vnet0, which is on the br0 bridge of the host. The MAC address is 00:05:fe:d4:f1:cc. + + ```shell + $ virsh domiflist openEulerVM + Interface Type Source Model MAC + ------------------------------------------------------- + vnet0 bridge br0 virtio 00:05:fe:d4:f1:cc + ``` + +- Run the **virsh iothreadinfo** command to query the VM I/O thread information. The query result shows that the VM has five I/O threads, which are scheduled on physical CPUs 7-10. + + ```shell + $ virsh iothreadinfo openEulerVM + IOThread ID CPU Affinity + --------------------------------------------------- + 3 7-10 + 4 7-10 + 5 7-10 + 1 7-10 + 2 7-10 + ``` + +## Logging In to a VM + +This section describes how to log in to a VM using VNC. + +### Logging In Using VNC Passwords + +#### Overview + +After the OS is installed on a VM, you can remotely log in to the VM using VNC to manage the VM. + +#### Prerequisites + +Before logging in to a VM using a client, such as RealVNC or TightVNC, ensure that: + +- You have obtained the IP address of the host where the VM resides. +- The environment where the client resides can access the network of the host. +- You have obtained the VNC listening port of the VM. This port is automatically allocated when the client is started. Generally, the port number is **5900 + x** \(_x_ is a positive integer and increases in ascending order based on the VM startup sequence. **5900** is invisible to users.\) +- If a password has been set for the VNC, you also need to obtain the VNC password of the VM. + + >[!NOTE] **NOTE:** + >To set a password for the VM VNC, edit the XML configuration file of the VM. That is, add the **passwd** attribute to the **graphics** element and set the attribute value to the password to be configured. For example, to set the VNC password of the VM to **n8VfjbFK**, configure the XML file as follows: + > + >```xml + > + > + > + >``` + +#### Procedure + +#### Procedure + +1. Query the VNC port number used by the VM. For example, if the VM name is _openEulerVM_, run the following command: + + ```shell + $ virsh vncdisplay openEulerVM + :3 + ``` + + >[!NOTE] **NOTE:** + >To log in to the VNC, you need to configure firewall rules to allow the connection of the VNC port. The reference command is as follows, where _X_ is **5900 + Port number**, for example, **5903**. + > + >```shell + >firewall-cmd --zone=public --add-port=X/tcp + >``` + +2. Start the VncViewer software and enter the IP address and port number of the host. The format is **host IP address:port number**, for example, **10.133.205.53:3**. +3. Click **OK** and enter the VNC password \(optional\) to log in to the VM VNC. + +### Configuring VNC TLS Login + +#### Overview + +By default, the VNC server and client transmit data in plaintext. Therefore, the communication content may be intercepted by a third party. To improve security, openEuler allows the VNC server to configure the Transport Layer Security \(TLS\) mode for encryption and authentication. TLS implements encrypted communication between the VNC server and client to prevent communication content from being intercepted by third parties. + +>[!NOTE] **NOTE:** +> +>- To use the TLS encryption authentication mode, the VNC client must support the TLS mode \(for example, TigerVNC\). Otherwise, the VNC client cannot be connected. +>- The TLS encryption authentication mode is configured at the host level. After this feature is enabled, the TLS encryption authentication mode is enabled for the VNC clients of all VMs running on the host. + +#### Procedure + +To enable the TLS encryption authentication mode for the VNC, perform the following steps: + +1. Log in to the host where the VNC server resides, and edit the corresponding configuration items in the **/etc/libvirt/qemu.conf** configuration file of the server. The configuration is as follows: + + ```text + vnc_listen = "x.x.x.x" # "x.x.x.x" indicates the listening IP address of the VNC. Set this parameter based on the site requirements. The VNC server allows only the connection requests from clients whose IP addresses are in this range. + vnc_tls = 1 # If this parameter is set to 1, VNC TLS is enabled. + vnc_tls_x509_cert_dir = "/etc/pki/libvirt-vnc" # Specify /etc/pki/libvirt-vnc as the path for storing the certificate. + vnc_tls_x509_verify = 1 #If this parameter is set to 1, the X509 certificate is used for TLS authentication. + ``` + +2. Create a certificate and a private key file for the VNC. The following uses GNU TLS as an example. + + >[!NOTE] **NOTE:** + >To use GNU TLS, install the gnu-utils software package in advance. + + 1. Create a certificate file issued by the Certificate Authority \(CA\). + + ```shell + certtool --generate-privkey > ca-key.pem + ``` + + 2. Create a self-signed public and private key for the CA certificate. _Your organization name_ indicates the organization name, which is specified by the user. + + ```shell + $ cat > ca.info< server.info< server-key.pem + certtool --generate-certificate \ + --load-ca-certificate ca-cert.pem \ + --load-ca-privkey ca-key.pem \ + --load-privkey server-key.pem \ + --template server.info \ + --outfile server-cert.pem + ``` + + In the preceding generated file, **server-key.pem** is the private key of the VNC server, and **server-cert.pem** is the public key of the VNC server. + + 4. Issue a certificate to the VNC client. + + ```shell + $ cat > client.info< client-key.pem + certtool --generate-certificate \ + --load-ca-certificate ca-cert.pem \ + --load-ca-privkey ca-key.pem \ + --load-privkey client-key.pem \ + --template client.info \ + --outfile client-cert.pem + ``` + + In the preceding generated file, **client-key.pem** is the private key of the VNC client, and **client-cert.pem** is the public key of the VNC client. The generated public and private key pairs need to be copied to the VNC client. + +3. Shut down the VM to be logged in to and restart the libvirtd service on the host where the VNC server resides. + + ```shell + systemctl restart libvirtd + ``` + +4. Save the generated server certificate to the specified directory on the VNC server and grant the read and write permissions on the certificate only to the current user. + + ```shell + sudo mkdir -m 750 /etc/pki/libvirt-vnc + cp ca-cert.pem /etc/pki/libvirt-vnc/ca-cert.pem + cp server-cert.pem /etc/pki/libvirt-vnc/server-cert.pem + cp server-key.pem /etc/pki/libvirt-vnc/server-key.pem + chmod 0600 /etc/pki/libvirt-vnc/* + ``` + +5. Copy the generated client certificates **ca-cert.pem**, **client-cert.pem**, and **client-key.pem** to the VNC client. After the TLS certificate of the VNC client is configured, you can use VNC TLS to log in to the VM. + + >[!NOTE] **NOTE:** + >- For details about how to configure the VNC client certificate, see the usage description of each client. + >- For details about how to log in to the VM, see Logging In Using VNC Passwords. + +## VM Secure Boot + +### General Introduction + +#### Overview + +Secure boot uses public and private key pairs to sign and validate boot components. During the startup, the previous component validates the digital signature of the next component. If the validation is successful, the next component starts. If the validation fails, the startup fails. Secure boot is used to detect whether the firmware and software during startup of the device are tampered with to prevent malware from intrusion and modification. Secure boot ensures the integrity of each component during system startup and prevents unauthorized components from being loaded and running, thereby preventing security threats to the system and user data. Secure boot is implemented based on the UEFI boot mode. It is not supported by the legacy boot mode. According to UEFI specifications, some reliable public keys can be built in the mainboard before delivery. Any operating system or hardware drivers that you want to load on this mainboard must be authenticated by these public keys. The secure boot of a physical machine is implemented by the physical BIOS, while the secure boot of a VM is simulated by software. The process of the VM secure boot is the same as that of the host secure boot, both complying with the open-source UEFI specifications. The UEFI on the virtualization platform is provided by the edk component. When a VM starts, QEMU maps the UEFI image to the memory to simulate the firmware startup process for the VM. Secure boot is a security protection capability provided by edk during the VM startup to protect the OS kernel of the VM from being tampered with. The sequence of signature validation for the secure boot is as follows: UEFI BIOS->shim->GRUB->vmlinuz (signature validation is passed and loaded in sequence). + +| English | Acronyms and Abbreviations | Description | +| :----- | :----- | :----- | +| Secure boot | - | Secure boot indicates that a component validates the digital signature of the next component during startup. If the validation is successful, the component runs. If the validation fails, the component stops running. It ensures the integrity of each component during system startup. | +| Platform key | PK | Platform key is owned by the OEM vendor and must be RSA2048 or stronger. The PK establishes a trusted relationship between the platform owner and the platform firmware. The platform owner registers the PKpub, public key of the PK, with the platform firmware. The platform owner can use the PKpriv, private part of the PK, to change the ownership of the platform or register the KEK key. | +| Key exchange key | KEK | Key exchange key creates a trusted relationship between the platform firmware and the OS. Each OS and third-party application that communicates with the platform firmware register the KEKpub, public part of the KEK key, in the platform firmware. | +| Database trustlist | DB | Database trustlist stores and validates the keys of components such as shim, GRUB, and vmlinuz. | +| Database blocklist | DBx | Database blocklist stores revoked keys. | + +#### Function Description + +The VM secure boot feature is implemented based on the edk open-source project. In non-secure boot mode, the basic Linux process is as follows: + +**Figure 1** System startup process + +![](./figures/OSBootFlow.png) + +In secure boot mode, the first component loaded after UEFI BIOS starts is shim in the system image. By interacting with UEFI BIOS, shim obtains the key stored in the variable DB of UEFI BIOS to validate GRUB. After GRUB is loaded, the key and the authentication API are also called to validate the kernel. The Linux boot process is as follows: + +**Figure 2** Secure boot process + +![](./figures/SecureBootFlow.png) + +The secure boot feature involves multiple key scenarios. Based on the scenario analysis and system breakdown, the secure boot feature involves the following subsystems: UEFI BIOS validating shim, shim validating GRUB, and GRUB validating kernel. When UEFI BIOS validates shim, if the validation is successful, shim is started. If the validation fails, an error message is displayed and shim fails to start. Shim needs to use the private key for signature during image compilation and creation, and the public key certificate needs to be imported to the variable area DB of UEFI BIOS. After shim is started, validate the startup of GRUB. If the validation is successful, GRUB is started. If the validation fails, an error message is displayed and GRUB fails to start. GRUB needs to be signed during image compilation and creation. The public and private key pairs are the same as those of shim. After GRUB is started, it calls the key and the authentication API key registered in UEFI BIOS to validate the kernel. If the validation is successful, GRUB starts the kernel. If the validation fails, an error message is displayed. GRUB needs to sign the image during compilation and creation and uses the public and private key pair that is the same as that of shim. + +#### Constraints + +- Running on the UEFI BIOS that does not support secure boot does not affect existing functions and services. +- The secure boot feature depends on the UEFI BIOS and takes effect only when the UEFI supports this feature. +- When secure boot is enabled in the UEFI BIOS, the system cannot be started if the related components have no signature or the signature is incorrect. +- If secure boot is disabled in the UEFI BIOS, the validation function during the boot process is disabled. +- The second half of the secure boot validation chain, that is, shim->GRUB->kernel, guides the kernel to start. This part of the validation chain is implemented by the OS image. If the OS does not support guiding the kernel for secure boot, the VM secure boot fails. +- Currently, the x86 architecture do not provide nvram file configuration to configure VM secure boot. + +### Secure Boot Practice + +VM secure boot depends on UEFI BIOS. The UEFI BIOS image is installed using the edk rpm package. This section uses AArch64 as an example to describe how to configure VM secure boot. + +#### Configuring VM + +The components in the edk rpm package are installed in the /usr/share/edk2/aarch64 directory, including `QEMU_EFI-pflash.raw` and `vars-template-pflash.raw`. The following describes the XML configuration of the UEFI BIOS during VM startup. + +```xml + + hvm + /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw + /path/to/QEMU-VARS.fd + +``` + +In the preceding configuration, /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw indicates the path of the UEFI BIOS image. /usr/share/edk2/aarch64/vars-template-pflash.raw is the path of the NVRAM image template, and /path/to/QEMU-VARS.fd is the path of the NVRAM image file of the current VM, which is used to store environment variables in the UEFI BIOS. + +#### Importing Certificate + +The certificate for VM secure boot is imported from the BIOS page. Before importing the certificate, you need to import the certificate file to the VM. You can mount the directory where the certificate file is located to the VM by mounting a disk. For example, you can create an image that contains the certificate and mount the image in the XML configuration file of the VM. + +Create a certificate file image. + +```shell +dd of='/path/to/data.img' if='/dev/zero' bs=1M count=64 +mkfs.vfat -I /path/to/data.img +mkdir /path/to/mnt +mount path/to/data.img /path/to/mnt/ +cp -a /path/to/certificates/* /path/to/mnt/ +umount /path/to/mnt/ +``` + +In the preceding command, /path/to/certificates/ indicates the path where the certificate file is located, /path/to/data.img indicates the path where the certificate file image is located, and /path/to/mnt/ indicates the image mounting path. + +Mount the image in the XML file of the VM. + +```xml + + + + + + + + + +``` + +Start the VM and import the PK certificate. The procedure is as follows (the procedure for importing the KEK certificate is the same as that for importing the DB certificate): + +After the VM is started, press F2 to go to the BIOS screen. + +**Figure 1** BIOS screen + +![](./figures/CertEnrollP1.png) + +**Figure 2** Device Manager + +![](./figures/CertEnrollP2.png) + +**Figure 3** Custom Secure Boot Options + +![](./figures/CertEnrollP3.png) + +**Figure 4** PK Options + +![](./figures/CertEnrollP4.png) + +**Figure 5** Enrolling PK + +![](./figures/CertEnrollP5.png) + +In the File Explorer window, many disk directories are displayed, including the certificate file directory mounted through the disk. + +**Figure 6** File Explorer + +![](./figures/CertEnrollP6.png) + +Select the PK certificate to be imported in the disk directory. + +**Figure 7** Disk where the certificate is stored + +![](./figures/CertEnrollP7.png) + +**Figure 8** Selecting Commit Changes and Exit to save the imported certificate + +![](./figures/CertEnrollP8.png) + +After the certificate is imported, the UEFI BIOS writes the certificate information and secure boot attributes to the NVRAM configuration file /path/to/QEMU-VARS.fd. Upon the next startup, the VM reads related configurations from the /path/to/QEMU-VARS.fd file, initializes certificate information and secure boot attributes, automatically imports the certificate, and enables secure boot. Similarly, you can use /path/to/QEMU-VARS.fd as the UEFI BIOS boot configuration template file of other VMs with the same configuration. Modify the nvram template field so that the certificate is automatically imported and the secure boot option is enabled when other VMs are started. The VM XML configuration is modified as follows: + +```xml + + hvm + /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw + + +``` + +#### Secure Boot Observation + +After the VM is correctly configured and the PK, KEK, and DB certificates are imported, the VM runs in secure boot mode. You can configure the serial port log file in the VM configuration file in XML format to check whether the VM is in the secure boot mode. The following figure shows how to configure the serial port log file. + +```xml + + + +``` + +After the OS image is successfully loaded to the VM, if "UEFI Secure Boot is enabled" is displayed in the serial port log file, the VM is in the secure boot state. diff --git a/docs/en/virtualization/virtualization_platform/virtualization/skylark.md b/docs/en/virtualization/virtualization_platform/virtualization/skylark.md new file mode 100644 index 0000000000000000000000000000000000000000..b91dbdcb3a0589e70fff28b97c34723da61e5e93 --- /dev/null +++ b/docs/en/virtualization/virtualization_platform/virtualization/skylark.md @@ -0,0 +1,190 @@ +# Skylark + +## Skylark Introduction + +### Scenario + +With the rapid growth of the cloud computing market, cloud vendors are increasing their investment in cloud infrastructure. However, the industry still faces the problem of low resource utilization. Improving resource utilization has become an important technical subject. This document describes openEuler Skylark, as well as how to install and use it. + +### Overview + +Hybrid deployment of services of different priorities is a typical and effective method to improve resource utilization. Services can be classified into high-priority and low-priority services based on latency sensitivity. When high-priority services compete with low-priority services for resources, resources are preferentially provided for high-priority services. Therefore, the core technology of service hybrid deployment is resource isolation control, which involves kernel-mode basic resource isolation and user-mode QoS control. + +This document describes the user-mode QoS control technology provided by Skylark of openEuler 22.09. In Skylark, the priority granularity is VMs. That is, a priority attribute is added to each VM. Resources are isolated and controlled based on VMs. Skylark is a QoS-aware resource scheduler in hybrid deployment scenarios. It improves physical machine resource utilization while ensuring the QoS of high-priority VMs. + +For details about how to better use the priority feature of Skylark in actual application scenarios, see [Best Practices](#best-practices). + +## Architecture and Features + +### Overall Architecture + +The core class of Skylark is `QoSManager`. Class members include data collection class instances, QoS analysis class instances, QoS control class instances, and task scheduling class instances. + +- `DataCollector`: data collection class. It has the `HostInfo` and `GuestInfo` members, which collect host information and VM information, respectively. +- `PowerAnalyzer`: power consumption analysis class, which analyzes power consumption interference and low-priority VMs to be restricted. +- `CpuController`: CPU bandwidth control class, which limits the CPU bandwidth of low-priority VMs. +- `CacheMBWController`: last-level cache (LLC) and memory bandwidth control class, which limits the LLC and memory bandwidth of low-priority VMs. +- `BackgroundScheduler`: task scheduling class, which periodically drives the preceding modules to continuously manage QoS. + +After checking the host environment, Skylark creates a daemon process. The daemon has a main scheduling thread and one or more job threads. + +- The main scheduling thread is unique. It connects to libvirt, creates and initializes the `QosManager` class instance, and then starts to drive the Job threads. +- Each Job thread periodically executes a QoS management task. + +### Power Consumption Interference Control + +Compared with non-hybrid deployment, host resource utilization is higher in hybrid deployment scenarios. High utilization means high power consumption. When the power consumption exceeds the thermal design power (TDP) of the server, CPU frequency reduction is triggered. When the power consumption exceeds the preset TDP (that is, a TDP hotspot occurs), Skylark limits the CPU bandwidth of low-priority VMs to reduce the power consumption of the entire system and ensure the QoS of high-priority VMs. + +During initialization, Skylark sets the power consumption interference control attributes based on the related configuration values in [Skylark Configuration](#skylark-configuration). In each control period, host information and control attributes are comprehensively analyzed to determine whether TDP hotspots occur. If a hotspot occurs, Skylark analyzes the low-priority VMs whose CPU bandwidth needs to be limited based on the VM information. + +### LLC/MB Interference Control + +Skylark can limit the LLC and memory bandwidth of low-priority VMs. Currently, only static allocation is supported. Skylark uses the **/sys/fs/resctrl** interface provided by the OS to implement the limitation. + +1. Skylark creates the **low_prio_machine** folder in the **/sys/fs/resctrl** directory and writes the PID of the low-priority VM to the **/sys/fs/resctrl/low_prio_machine/tasks** file. +2. Skylark allocates LLC ways and memory bandwidth for low-priority VMs based on the LLC/MB configuration items in [Skylark Configuration](#skylark-configuration). The configuration items are written into the **/sys/fs/resctrl/low_prio_machine/schemata** file. + +### CPU Interference Control + +In hybrid deployment scenarios, low-priority VMs generate CPU time slice interference and hardware hyper-threading (SMT) interference on high-priority VMs. + +- When threads of high- and low-priority VMs are running on the same minimum CPU topology unit (core or SMT execution unit), they compete for CPU time slices. +- When threads of high- and low-priority VMs are running on different SMT execution units of the same CPU core at the same time, they compete for resources in the core shared by the SMT execution units. + +CPU interference control includes CPU time slice interference control and SMT interference control, which are implemented based on the **QOS_SCHED** and **SMT_EXPELLER** features provided by the kernel, respectively. + +- The **QOS_SCHED** feature enables high-priority VM threads on a single CPU core or SMT execution unit to suppress low-priority VM threads, eliminating CPU time slice interference. +- The **SMT_EXPELLER** feature enables high-priority VM threads to suppress low-priority VM threads on different SMT execution units of the same CPU core, eliminating SMT interference. + +During initialization, Skylark sets the **cpu.qos_level** field of the slice level corresponding to the low-priority VM under the cgroup CPU subcontroller to -1 to enable the preceding kernel features. By doing this, the kernel controls CPU-related interference without the intervention of Skylark. + +## Skylark Installation + +### Hardware Requirements + +Processor architecture: AArch64 or x86_64 + +- For Intel processors, the RDT function must be supported. +- For the AArch64 architecture, only Kunpeng 920 processor is supported, and the BIOS must be upgraded to 1.79 or later to support the MPAM function. + +### Software Requirements + +- python3, python3-APScheduler, and python3-libvirt +- systemd 249-32 or later +- libvirt 1.0.5 or later +- openEuler kernel 5.10.0 or later. + +### Installation Procedure + +You are advised to install the Skylark component using Yum for automatic processing of the software dependencies: + +```shell +# yum install -y skylark +``` + +Check whether the Skylark is successfully installed. If the installation is successful, the skylarkd background service status is displayed: + +```shell +# systemctl status skylarkd +``` + +(Optional) Enable the Skylark service to automatically start upon system startup: + +```shell +# systemctl enable skylarkd +``` + +## Skylark Configuration + +After the Skylark component is installed, you can modify the configuration file if the default configuration does not meet your requirements. The Skylark configuration file is stored in **/etc/sysconfig/skylarkd**. The following describes the configuration items in the configuration file. + +### Logs + +- The **LOG_LEVEL** parameter is a character string used to set the minimum log level. The supported log levels are **critical > error > warning > info > debug**. Logs whose levels are lower than **LOG_LEVEL** are not recorded in the log file **/var/log/skylark.log**. Skylark backs up logs every seven days for a maximum of four times. (When the number of backup times reaches the limit, the oldest logs are deleted.) The backup log is saved as **/var/log/skylark.log. %Y- %m- %d**. + +### Power Consumption Interference Control + +- **POWER_QOS_MANAGEMENT** is a boolean value used to control whether to enable power consumption QoS management. Only x86 processors support this function. This function is useful if the CPU usage of VMs on the host can be properly limited. + +- **TDP_THRESHOLD** is a floating point number used to control the maximum power consumption of a VM. When the power consumption of the host exceeds **TDP * TDP_THRESHOLD**, a TDP hotspot occurs, and a power consumption control operation is triggered. The value ranges from 0.8 to 1, with the default value being 0.98. + +- **FREQ_THRESHOLD** is a floating point number used to control the minimum CPU frequency when a TDP hotspot occurs on the host. The value ranges from 0.8 to 1, with the default value being 0.98. + 1. When the frequency of some CPUs is lower than **max_freq * FREQ_THRESHOLD**, Skylark limits the CPU bandwidth of low-priority VMs running on these CPUs. + 2. If such a CPU does not exist, Skylark limits the CPU bandwidth of some low-priority VMs based on the CPU usage of low-priority VMs. + +- **QUOTA_THRESHOLD** is a floating point number used to control the CPU bandwidth that a restricted low-priority VM can obtain (CPU bandwidth before restriction x **QUOTA_THRESHOLD**). The value ranges from 0.8 to 1, with the default value being 0.9. + +- **ABNORMAL_THRESHOLD** is an integer used to control the number of low-priority VM restriction periods. The value ranges from 1 to 5, with the default value being 3. + 1. In each power consumption control period, if a low-priority VM is restricted, its number of remaining restriction periods is updated to **ABNORMAL_THRESHOLD**. Otherwise, its number of remaining restriction periods decreases by 1. + 2. When the number of remaining restriction periods of the VM is 0, the CPU bandwidth of the VM is restored to the value before the restriction. + +### LLC/MB Interference Control + +Skylark's interference control on LLC/MB depends on the RDT/MPAM function provided by hardware. For Intel x86_64 processors, **rdt=cmt,mbmtotal,mbmlocal,l3cat,mba** needs to be added to kernel command line parameters. For Kunpeng920 processors, **mpam=acpi** needs to be added to kernel command line parameters. + +- **MIN_LLC_WAYS_LOW_VMS** is an integer used to control the number of LLC ways that can be accessed by low-priority VMs. The value ranges from 1 to 3, with the default value being 2. During initialization, Skylark limits the numfer of accessible LLC ways for low-priority VMs to this value. + +- **MIN_MBW_LOW_VMS** is a floating point number used to control the memory bandwidth ratio available to low-priority VMs. The value ranges from 0.1 to 0.2, with the default value being 0.1. Skylark limits the memory bandwidth of low-priority VMs based on this value during initialization. + +## Skylark Usage + +### Starting the Service + +Start Skylark for the first time: + +```shell +# systemctl start skylarkd +``` + +Restart Skylark (a service restart is required after modifying the configuration file): + +```shell +# systemctl restart skylarkd +``` + +### Creating VMs + +Skylark uses the **partition** tag in the XML configuration file of a VM to identify the VM priority. + +To create a low-priority VM, configure the XML file as follows: + +```xml + + ... + + /low_prio_machine + + ... + +``` + +To create a high-priority VM, configure the XML file as follows: + +```xml + + ... + + /high_prio_machine + + ... + +``` + +The subsequent VM creation process is the same as the normal process. + +### Running VMs + +Skylark detects VM creation events, manages VMs of different priorities, and performs automatic QoS management based on CPU, power consumption, and LLC/MB resources. + +## Best Practices + +### VM Service Recommendation + +- High-priority VMs are suitable for latency-sensitive services, such as web services, high-performance databases, real-time rendering, and AI inference. +- Low-priority VMs are suitable for non-latency-sensitive services, such as video encoding, big data processing, offline rendering, and AI training. + +### CPU Binding Configuration + +To ensure optimal performance of high-priority VMs, you are advised to bind each vCPU of high-priority VMs to a physical CPU. To enable low-priority VMs to make full use of idle physical resources, you are advised to bind vCPUs of low-priority VMs to CPUs that are bound to high-priority VMs. + +To ensure that low-priority VMs are scheduled when high-priority VMs occupy CPU resources for a long time, you are advised to reserve a small number of for low-priority VMs. diff --git a/docs/en/virtualization/virtualization_platform/virtualization/system_resource_management.md b/docs/en/virtualization/virtualization_platform/virtualization/system_resource_management.md new file mode 100644 index 0000000000000000000000000000000000000000..a193972631fe36cef6506bdf2bdb6b8e7ac5984c --- /dev/null +++ b/docs/en/virtualization/virtualization_platform/virtualization/system_resource_management.md @@ -0,0 +1,454 @@ +# System Resource Management + +The **libvirt** command manages VM system resources, such as vCPU and virtual memory resources. + +Before you start: + +- Ensure that the libvirtd daemon is running on the host. +- Run the **virsh list --all** command to check that the VM has been defined. + +## Managing vCPU + +### CPU Shares + +#### Overview + +In a virtualization environment, multiple VMs on the same host compete for physical CPUs. To prevent some VMs from occupying too many physical CPU resources and affecting the performance of other VMs on the same host, you need to balance the vCPU scheduling of VMs to prevent excessive competition for physical CPUs. + +The CPU share indicates the total capability of a VM to compete for physical CPU computing resources. You can set **cpu\_shares** to specify the VM capacity to preempt physical CPU resources. The value of **cpu\_shares** is a relative value without a unit. The CPU computing resources obtained by a VM are the available computing resources of physical CPUs \(excluding reserved CPUs\) allocated to VMs based on the CPU shares. Adjust the CPU shares to ensure the service quality of VM CPU computing resources. + +#### Procedure + +Change the value of **cpu\_shares** allocated to the VM to balance the scheduling between vCPUs. + +- Check the current CPU share of the VM. + + ```shell + # virsh schedinfo + Scheduler : posix + cpu_shares : 1024 + vcpu_period : 100000 + vcpu_quota : -1 + emulator_period: 100000 + emulator_quota : -1 + global_period : 100000 + global_quota : -1 + iothread_period: 100000 + iothread_quota : -1 + ``` + +- Online modification: Run the **virsh schedinfo** command with the **--live** parameter to modify the CPU share of a running VM. + + ```shell + # virsh schedinfo --live cpu_shares= + ``` + + For example, to change the CPU share of the running _openEulerVM_ from **1024** to **2048**, run the following commands: + + ```shell + # virsh schedinfo openEulerVM --live cpu_shares=2048 + Scheduler : posix + cpu_shares : 2048 + vcpu_period : 100000 + vcpu_quota : -1 + emulator_period: 100000 + emulator_quota : -1 + global_period : 100000 + global_quota : -1 + iothread_period: 100000 + iothread_quota : -1 + ``` + + The modification of the **cpu\_shares** value takes effect immediately. The running time of the _openEulerVM_ is twice the original running time. However, the modification will become invalid after the VM is shut down and restarted. + +- Permanent modification: Run the **virsh schedinfo** command with the **--config** parameter to change the CPU share of the VM in the libvirt internal configuration. + + ```shell + # virsh schedinfo --config cpu_shares= + ``` + + For example, run the following command to change the CPU share of _openEulerVM_ from **1024** to **2048**: + + ```shell + # virsh schedinfo openEulerVM --config cpu_shares=2048 + Scheduler : posix + cpu_shares : 2048 + vcpu_period : 0 + vcpu_quota : 0 + emulator_period: 0 + emulator_quota : 0 + global_period : 0 + global_quota : 0 + iothread_period: 0 + iothread_quota : 0 + ``` + + The modification on **cpu\_shares** does not take effect immediately. Instead, the modification takes effect after the _openEulerVM_ is started next time and takes effect permanently. The running time of the _openEulerVM_ is twice that of the original VM. + +### Binding the QEMU Process to a Physical CPU + +#### Overview + +You can bind the QEMU main process to a specific physical CPU range, ensuring that VMs running different services do not interfere with adjacent VMs. For example, in a typical cloud computing scenario, multiple VMs run on one physical machine, and they carry diversified services, causing different degrees of resource occupation. To avoid interference of a VM with dense-storage I/O to an adjacent VM, storage processes that process I/O of different VMs need to be completely isolated. The QEMU main process handles frontend and backend services. Therefore, isolation needs to be implemented. + +#### Procedure + +Run the **virsh emulatorpin** command to bind the QEMU main process to a physical CPU. + +- Check the range of the physical CPU bound to the QEMU process: + + ```shell + # virsh emulatorpin openEulerVM + emulator: CPU Affinity + ---------------------------------- + *: 0-63 + ``` + + This indicates that the QEMU main process corresponding to VM **openEulerVM** can be scheduled on all physical CPUs of the host. + +- Online binding: Run the **vcpu emulatorpin** command with the **--live** parameter to modify the binding relationship between the QEMU process and the running VM. + + ```shell + # virsh emulatorpin openEulerVM --live 2-3 + + # virsh emulatorpin openEulerVM + emulator: CPU Affinity + ---------------------------------- + *: 2-3 + ``` + + The preceding commands bind the QEMU process corresponding to VM **openEulerVM** to physical CPUs **2** and **3**. That is, the QEMU process is scheduled only on the two physical CPUs. The binding relationship takes effect immediately but becomes invalid after the VM is shut down and restarted. + +- Permanent binding: Run the **virsh emulatorpin** command with the **--config** parameter to modify the binding relationship between the VM and the QEMU process in the libvirt internal configuration. + + ```shell + # virsh emulatorpin openEulerVM --config 0-3,^1 + + # virsh emulatorpin euler + emulator: CPU Affinity + ---------------------------------- + *: 0,2-3 + ``` + + The preceding commands bind the QEMU process corresponding to VM **openEulerVM** to physical CPUs **0**, **2** and **3**. That is, the QEMU process is scheduled only on the three physical CPUs. The modification of the binding relationship does not take effect immediately. Instead, the modification takes effect after the next startup of the VM and takes effect permanently. + +### Adjusting the vCPU Binding Relationship + +#### Overview + +The vCPU of a VM is bound to a physical CPU. That is, the vCPU is scheduled only on the bound physical CPU to improve VM performance in specific scenarios. For example, in a NUMA system, vCPUs are bound to the same NUMA node to prevent cross-node memory access and VM performance deterioration. If the vCPU is not bound, by default, the vCPU can be scheduled on any physical CPU. The specific binding policy is determined by the user. + +#### Procedure + +Run the **virsh vcpupin** command to adjust the binding relationship between vCPUs and physical CPUs. + +- View the vCPU binding information of the VM. + + ```shell + # virsh vcpupin openEulerVM + VCPU CPU Affinity + ---------------------- + 0 0-63 + 1 0-63 + 2 0-63 + 3 0-63 + ``` + + This indicates that all vCPUs of VM **openEulerVM** can be scheduled on all physical CPUs of the host. + +- Online adjustment: Run the **vcpu vcpupin** command with the **--live** parameter to modify the vCPU binding relationship of a running VM. + + ```shell + # virsh vcpupin openEulerVM --live 0 2-3 + + # virsh vcpupin euler + VCPU CPU Affinity + ---------------------- + 0 2-3 + 1 0-63 + 2 0-63 + 3 0-63 + ``` + + The preceding commands bind vCPU **0** of VM **openEulerVM** to pCPU **2** and pCPU **3**. That is, vCPU **0** is scheduled only on the two physical CPUs. The binding relationship takes effect immediately but becomes invalid after the VM is shut down and restarted. + +- Permanent adjustment: Run the **virsh vcpupin** command with the **--config** parameter to modify the vCPU binding relationship of the VM in the libvirt internal configuration. + + ```shell + # virsh vcpupin openEulerVM --config 0 0-3,^1 + + # virsh vcpupin openEulerVM + VCPU CPU Affinity + ---------------------- + 0 0,2-3 + 1 0-63 + 2 0-63 + 3 0-63 + ``` + + The preceding commands bind vCPU **0** of VM **openEulerVM** to physical CPUs **0**, **2**, and **3**. That is, vCPU **0** is scheduled only on the three physical CPUs. The modification of the binding relationship does not take effect immediately. Instead, the modification takes effect after the next startup of the VM and takes effect permanently. + +### CPU Hot Add + +#### Overview + +This feature allows users to hot add CPUs to a running VM without affecting its normal running. When the internal service pressure of a VM keeps increasing, all CPUs will be overloaded. To improve the computing capability of the VM, you can use the CPU hot add function to increase the number of CPUs on the VM without stopping it. + +#### Constraints + +- For processors using the AArch64 architecture, the specified VM chipset type \(machine\) needs to be virt-4.1 or a later version when a VM is created. For processors using the x86\_64 architecture, the specified VM chipset type \(machine\) needs to be pc-i440fx-1.5 or a later version when a VM is created. +- When configuring Guest NUMA, you need to configure the vCPUs that belong to the same socket in the same vNode. Otherwise, the VM may be soft locked up after the CPU is hot added, which may cause the VM panic. +- VMs do not support CPU hot add during migration, hibernation, wake-up, or snapshot. +- Whether the hot added CPU can automatically go online depends on the VM OS logic rather than the virtualization layer. +- CPU hot add is restricted by the maximum number of CPUs supported by the Hypervisor and GuestOS. +- When a VM is being started, stopped, or restarted, the hot added CPU may become invalid. However, the hot added CPU takes effect after the VM is restarted. +- During VM CPU hot add, if the number of added CPUs is not an integer multiple of the number of cores in the VM CPU topology configuration item, the CPU topology displayed in the VM may be disordered. You are advised to add CPUs whose number is an integer multiple of the number of cores each time. +- If the hot added CPU needs to take effect online and is still valid after the VM is restarted, the --config and --live options need to be transferred to the virsh setvcpus API to persist the hot added CPU. + +#### Procedure + +**VM XML Configuration** + +1. To use the CPU hot add function, configure the number of CPUs, the maximum number of CPUs supported by the VM, and the VM chipset type when creating the VM. (For the AArch64 architecture, the virt-4.1 or a later version is required. For the x86\_64 architecture, the pc-i440fx-1.5 or later version is required. The AArch64 VM is used as an example. The configuration template is as follows: + + ```xml + + ... + n + + hvm + + ... + + ``` + + >[!NOTE] **Note** + >- The value of placement must be static. + >- m indicates the current number of CPUs on the VM, that is, the default number of CPUs after the VM is started. n indicates the maximum number of CPUs that can be hot added to a VM. The value cannot exceed the maximum CPU specifications supported by the Hypervisor or GuestOS. n is greater than or equal to m. + + For example, if the current number of CPUs of a VM is 4 and the maximum number of hot added CPUs is 64, the XML configuration is as follows: + + ```xml + + ... + 64 + + hvm + + ... + ``` + +**Hot Adding and Bringing CPUs Online** + +1. If the hot added CPU needs to be automatically brought online, create the udev rules file **/etc/udev/rules.d/99-hotplug-cpu.rules** in the VM as user root and define the udev rules in the file. The following is an example: + + ```text + ### automatically online hot-plugged cpu + ACTION=="add", SUBSYSTEM=="cpu", ATTR{online}="1" + ``` + + >[!NOTE] **Note** + >If you do not use the udev rules, you can use the root permission to manually bring the hot added CPU online by running the following commands: + > + >```shell + >for i in `grep -l 0 /sys/devices/system/cpu/cpu*/online` + >do + > echo 1 > $i + >done + >``` + +2. Use the virsh tool to hot add CPUs to the VM. For example, to set the number of CPUs after hot adding to 6 on the VM named openEulerVM and make the hot add take effect online, run the following command: + + ```shell + virsh setvcpus openEulerVM 6 --live + ``` + + >[!NOTE] **Note** + >The format for running the virsh setvcpus command to hot add a VM CPU is as follows: + > + >```shell + >virsh setvcpus [--config] [--live] + >``` + > + >- domain: Parameter, which is mandatory. Specifies the name of a VM. + >- count: Parameter, which is mandatory. Specifies the number of target CPUs, that is, the number of CPUs after hot adding. + >- --config: Option, which is optional. This parameter is still valid when the VM is restarted. + >- --live: Option, which is optional. The configuration takes effect online. + +## Managing Virtual Memory + +### Introduction to NUMA + +Traditional multi-core computing uses the symmetric multi-processor \(SMP\) mode. Multiple processors are connected to a centralized memory and I/O bus. All processors can access only the same physical memory. Therefore, the SMP system is also referred to as a uniform memory access \(UMA\) system. Uniformity means that a processor can only maintain or share a unique value for each data record in memory at any time. Obviously, the disadvantage of SMP is its limited scalability, because when the memory and the I/O interface are saturated, adding a processor cannot obtain higher performance. + +The non-uniform memory access architecture \(NUMA\) is a distributed memory access mode. In this mode, a processor can access different memory addresses at the same time, which greatly improves concurrency. With this feature, a processor is divided into multiple nodes, each of which is allocated a piece of local memory space. The processors of all nodes can access all physical memories, but the time required for accessing the memory on the local node is much shorter than that on a remote node. + +### Configuring Host NUMA + +To improve VM performance, you can specify NUMA nodes for a VM using the VM XML configuration file before the VM is started so that the VM memory is allocated to the specified NUMA nodes. This feature is usually used together with the vCPU to prevent the vCPU from remotely accessing the memory. + +#### Procedure + +- Check the NUMA topology of the host. + + ```shell + # numactl -H + available: 4 nodes (0-3) + node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + node 0 size: 31571 MB + node 0 free: 17095 MB + node 1 cpus: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 + node 1 size: 32190 MB + node 1 free: 28057 MB + node 2 cpus: 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 + node 2 size: 32190 MB + node 2 free: 10562 MB + node 3 cpus: 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 + node 3 size: 32188 MB + node 3 free: 272 MB + node distances: + node 0 1 2 3 + 0: 10 15 20 20 + 1: 15 10 20 20 + 2: 20 20 10 15 + 3: 20 20 15 10 + ``` + +- Add the **numatune** field to the VM XML configuration file to create and start the VM. For example, to allocate NUMA node 0 on the host to the VM, configure parameters as follows: + + ```xml + + + + ``` + + If the vCPU of the VM is bound to the physical CPU of **node 0**, the performance deterioration caused by the vCPU accessing the remote memory can be avoided. + + >[!NOTE] **NOTE:** + >- The sum of memory allocated to the VM cannot exceed the remaining available memory of the NUMA node. Otherwise, the VM may fail to start. + >- You are advised to bind the VM memory and vCPU to the same NUMA node to avoid the performance deterioration caused by vCPU access to the remote memory. For example, bind the vCPU to NUMA node 0 as well. + +### Configuring Guest NUMA + +Many service software running on VMs is optimized for the NUMA architecture, especially for large-scale VMs. openEuler provides the Guest NUMA feature to display the NUMA topology in VMs. You can identify the structure to optimize the performance of service software and ensure better service running. + +When configuring guest NUMA, you can specify the location of vNode memory on the host to implement memory block binding and vCPU binding so that the vCPU and memory on the vNode are on the same physical NUMA node. + +#### Procedure + +After Guest NUMA is configured in the VM XML configuration file, you can view the NUMA topology on the VM. **** is mandatory for Guest NUMA. + +```xml + + + + + + + + + + + [...] + + + + + + +``` + +>[!NOTE] **NOTE:** +> +>- **** provides the NUMA topology function for VMs. **cell id** indicates the vNode ID, **cpus** indicates the vCPU ID, and **memory** indicates the memory size on the vNode. +>- If you want to use Guest NUMA to provide better performance, configure <**numatune\>** and **** so that the vCPU and memory are distributed on the same physical NUMA node. +>- **cellid** in **** corresponds to **cell id** in ****. **mode** can be set to **strict** \(apply for memory from a specified node strictly. If the memory is insufficient, the application fails.\), **preferred** \(apply for memory from a node first. If the memory is insufficient, apply for memory from another node\), or **interleave** \(apply for memory from a specified node in cross mode\).; **nodeset** indicates the specified physical NUMA node. +>- In ****, you need to bind the vCPU in the same **cell id** to the physical NUMA node that is the same as the **memnode**. + +### Memory Hot Add + +#### Overview + +In virtualization scenarios, the memory, CPU, and external devices of VMs are simulated by software. Therefore, the memory can be adjusted online for VMs at the virtualization bottom layer. In the current openEuler version, memory can be added to a VM online. If the physical memory of a VM is insufficient and the VM cannot be shut down, you can use this feature to add physical memory resources to the VM. + +#### Constraints + +- For processors using the AArch64 architecture, the specified VM chipset type \(machine\) needs to be virt-4.1 or a later version when a VM is created.For processors using the x86 architecture, the specified VM chipset type \(machine\) needs to be a later version than pc-i440fx-1.5 when a VM is created. +- Guest NUMA on which the memory hot add feature depends needs to be configured on the VM. Otherwise, the memory hot add process cannot be completed. +- When hot adding memory, you need to specify the ID of Guest NUMA node to which the new memory belongs. Otherwise, the memory hot add fails. +- The VM kernel should support memory hot add. Otherwise, the VM cannot identify the newly added memory or the memory cannot be brought online. +- For a VM that uses hugepages, the capacity of the hot added memory should be an integral multiple of hugepagesz. Otherwise, the hot add fails. +- The hot added memory size should be an integral multiple of the Guest physical memory block size (block\_size\_bytes). Otherwise, the VM cannot go online. The value of block\_size\_bytes can be obtained using the lsmem command in Guest. +- After n pieces of virtio-net NICs are configured, the maximum number of hot add times is set to min\{max\_slot, 64 - n\} to reserve slots for NICs. +- The vhost-user device and the memory hot add feature are mutually exclusive. A VM configured with the vhost-user device does not support memory hot add. After the memory is hot added to a VM, the vhost-user device cannot be hot added. +- If the VM OS is Linux, ensure that the initial memory is greater than or equal to 4 GB. +- If the VM OS is Windows, the first hot added memory needs to be specified to Guest NUMA node0. Otherwise, the hot added memory cannot be identified by the VM. +- In passthrough scenarios, memory needs to be allocated in advance. Therefore, it is normal that the startup and hot add of memory are slower than those of common VMs (especially large-specification VMs). +- It is recommended that the ratio of the available memory to the hot added memory be at least 1:32. That is, at least 1 GB available memory is required for the VM with 32 GB hot added memory. If the ratio is less than 1:32, the VM may be suspended. +- Whether the hot added memory can automatically go online depends on the VM OS logic. You can manually bring the memory online or configure the udev rules to automatically bring the memory online. + +#### Procedure + +**VM XML Configuration** + +1. To use the memory hot add function, configure the maximum hot add memory size and reserved slot number, and configure the Guest NUMA topology when creating a VM. + + For example, run the following command to configure 32 GB initial memory for a VM, reserve 256 slots, set the memory upper limit to 1 TB, and configure two NUMA nodes: + + ```xml + + 32 + 1024 + + + + + + + + .... + ``` + +>[!NOTE] **Note** +>In the preceding information, +>the value of slots in the maxMemory field indicates the reserved memory slots. The maximum value is 256. +>maxMemory indicates the maximum physical memory supported by the VM. +>For details about how to configure Guest NUMA, see "Configuring Guest NUMA." + +**Hot Adding and Bringing Memory Online** + +1. If the hot added memory needs to be automatically brought online, create the udev rules file /etc/udev/rules.d/99-hotplug-memory.rules in the VM as user root and define the udev rules in the file. The following is an example: + + ```text + ### automatically online hot-plugged memory + ACTION=="add", SUBSYSTEM=="memory", ATTR{state}="online" + ``` + +2. Create a memory description XML file based on the size of the memory to be hot added and the Guest NUMA node of the VM. + + For example, to hot add 1 GB memory to NUMA node0, run the following command: + + ```xml + + + 1024 + 0 + + + ``` + +3. Run the virsh attach-device command to hot add memory to the VM. In the command, openEulerVM indicates the VM name, memory.xml indicates the description file of the hot added memory, and --live indicates that the hot added memory takes effect online. You can also run the --config command to persist the hot added memory to the VM XML file. + + ```shell + ### virsh attach-device openEulerVM memory.xml --live + ``` + + >[!NOTE] **Note** + >If you do not use the udev rules, you can use the root permission to manually bring the hot added memory online by running the following command: + > + >```shell + >for i in `grep -l offline /sys/devices/system/memory/memory*/state` + >do + > echo online > $i + >done + >``` diff --git a/docs/en/virtualization/virtualization_platform/virtualization/tool_guide.md b/docs/en/virtualization/virtualization_platform/virtualization/tool_guide.md new file mode 100644 index 0000000000000000000000000000000000000000..aecca3d63a94c825cb0dbf1cccc2d45d8ff87bba --- /dev/null +++ b/docs/en/virtualization/virtualization_platform/virtualization/tool_guide.md @@ -0,0 +1,3 @@ +# Tool Guide + +To help users better use virtualization, openEuler provides a set of tools, including vmtop and LibcarePlus. This section describes how to install and use these tools. diff --git a/docs/en/virtualization/virtualization_platform/virtualization/virtualization_installation.md b/docs/en/virtualization/virtualization_platform/virtualization/virtualization_installation.md new file mode 100644 index 0000000000000000000000000000000000000000..649979e4c601d32f0db03ec765b63219b12c6f86 --- /dev/null +++ b/docs/en/virtualization/virtualization_platform/virtualization/virtualization_installation.md @@ -0,0 +1,136 @@ +# Installing Virtualization Components + +This chapter describes how to install virtualization components in openEuler. + +## Minimum Hardware Requirements + +The minimum hardware requirements for installing virtualization components on openEuler are as follows: + +- AArch64 processor architecture: ARMv8 or later, supporting virtualization expansion +- x86\_64 processor architecture, supporting VT-x +- 2-core CPU +- 4 GB memory +- 16 GB available disk space + +## Installing Core Virtualization Components + +### Installation Methods + +#### Prerequisites + +- The Yum source has been configured. For details, see the _openEuler 22.03 LTS SP4 Administrator Guide_. +- Only the administrator has permission to perform the installation. + +#### Procedure + +1. Install the QEMU component. + + ```shell + yum install -y qemu + ``` + +2. Install the libvirt component. + + ```shell + yum install -y libvirt + ``` + +3. Start the libvirtd service. + + ```shell + systemctl start libvirtd + ``` + +>[!NOTE] **NOTE:** +>The KVM module is integrated in the openEuler kernel and does not need to be installed separately. + +### Verifying the Installation + +1. Check whether the kernel supports KVM virtualization, that is, check whether the **/dev/kvm** and **/sys/module/kvm** files exist. The command and output are as follows: + + ```shell + $ ls /dev/kvm + /dev/kvm + ``` + + ```shell + $ ls /sys/module/kvm + parameters uevent + ``` + + If the preceding files exist, the kernel supports KVM virtualization. If the preceding files do not exist, KVM virtualization is not enabled during kernel compilation. In this case, you need to use the Linux kernel that supports KVM virtualization. + +2. Check whether QEMU is successfully installed. If the installation is successful, the QEMU software package information is displayed. The command and output are as follows: + + ``` shell + $ rpm -qi qemu + Name : qemu + Epoch : 10 + Version : 6.2.0 + Release : 76.oe2203SP3 + Architecture: aarch64 + Install Date: Tue 15 Aug 2023 09:04:47 PM CST + Group : Unspecified + Size : 26733299 + License : GPLv2 and BSD and MIT and CC-BY-SA-4.0 + Signature : RSA/SHA256, Tue 01 Aug 2023 09:28:19 PM CST, Key ID 007fb747fb37bc6f + Source RPM : qemu-6.2.0-76.oe2203SP3.src.rpm + Build Date : Tue 01 Aug 2023 09:24:00 PM CST + Build Host : localhost + Relocations : (not relocatable) + URL : http://www.qemu.org + Summary : QEMU is a generic and open source machine emulator and virtualizer + Description : + QEMU is a generic and open source processor emulator which achieves a good + emulation speed by using dynamic translation. QEMU has two operating modes: + + * Full system emulation. In this mode, QEMU emulates a full system (for + example a PC), including a processor and various peripherals. It can be + used to launch different Operating Systems without rebooting the PC or + to debug system code. + * User mode emulation. In this mode, QEMU can launch Linux processes compiled + for one CPU on another CPU. + + As QEMU requires no host kernel patches to run, it is safe and easy to use. + ``` + +3. Check whether libvirt is successfully installed. If the installation is successful, the libvirt software package information is displayed. The command and output are as follows: + + ``` shell + $ rpm -qi libvirt + Name : libvirt + Version : 6.2.0 + Release : 57.oe2203SP3 + Architecture: aarch64 + Install Date: Tue 30 Jul 2023 04:56:21 PM CST + Group : Unspecified + Size : 0 + License : LGPLv2+ + Signature : RSA/SHA256, Tue 01 Aug 2023 09:28:19 PM CST, Key ID 007fb747fb37bc6f + Source RPM : libvirt-6.2.0-57.oe2203SP3.src.rpm + Build Date : Tue 01 Aug 2023 09:24:00 PM CST + Build Host : 71e8c1ce149f + Relocations : (not relocatable) + URL : https://libvirt.org/ + Summary : Library providing a simple virtualization API + Description : + Libvirt is a C toolkit to interact with the virtualization capabilities + of recent versions of Linux (and other OSes). The main package includes + the libvirtd server exporting the virtualization support. + ``` + +4. Check whether the libvirt service is started successfully. If the service is in the **active** state, the service is started successfully. You can use the virsh command line tool provided by the libvirt. The command and output are as follows: + + ``` shell + $ systemctl status libvirtd + ● libvirtd.service - Virtualization daemon + Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled) + Active: active (running) since Tue 2019-08-06 09:36:01 CST; 5h 12min ago + Docs: man:libvirtd(8) + https://libvirt.org + Main PID: 40754 (libvirtd) + Tasks: 20 (limit: 32768) + Memory: 198.6M + CGroup: /system.slice/libvirtd.service + ─40754 /usr/sbin/libvirtd + ``` diff --git a/docs/en/virtualization/virtualization_platform/virtualization/vm_configuration.md b/docs/en/virtualization/virtualization_platform/virtualization/vm_configuration.md new file mode 100644 index 0000000000000000000000000000000000000000..a53ce65a173f8955719307ddf38a461fc4050151 --- /dev/null +++ b/docs/en/virtualization/virtualization_platform/virtualization/vm_configuration.md @@ -0,0 +1,813 @@ +# VM Configuration + +## Introduction + +### Overview + +Libvirt tool uses XML files to describe a VM feature, including the VM name, CPU, memory, disk, NIC, mouse, and keyboard. You can manage a VM by modifying configuration files. This section describes the elements in the XML configuration file to help users configure VMs. + +### Format + +The VM XML configuration file uses domain as the root element, which contains multiple other elements. Some elements in the XML configuration file can contain corresponding attributes and attribute values to describe VM information in detail. Different attributes of the same element are separated by spaces. + +The basic format of the XML configuration file is as follows. In the format, **label** indicates the label name, **attribute** indicates the attribute, and **value** indicates the attribute value. Change them based on the site requirements. + +```xml + + VMName + 8 + 4 + + + + + +``` + +### Process + +1. Create an XML configuration file with domain root element. +2. Use the name tag to specify a unique VM name based on the naming rule. +3. Configure system resources such as the virtual CPU \(vCPU\) and virtual memory. +4. Configure virtual devices. + 1. Configure storage devices. + 2. Configure network devices. + 3. Configure the external bus structure. + 4. Configure external devices such as the mouse. + +5. Save the XML configuration file. + +## VM Description + +### Overview + +This section describes how to configure the VM **domain** root element and VM name. + +### Elements + +- **domain**: Root element of a VM XML configuration file, which is used to configure the type of the hypervisor that runs the VM. + + **type**: Type of a domain in virtualization. In the openEuler virtualization, the attribute value is **kvm**. + +- **name**: VM name. + + The VM name is a unique character string on the same host. The VM name can contain only digits, letters, underscores \(\_\), hyphens \(-\), and colons \(:\), but cannot contain only digits. The VM name can contain a maximum of 64 characters. + +### Configuration Example + +For example, if the VM name is **openEuler**, the configuration is as follows: + +```xml + + openEuler + ... + +``` + +## vCPU and Virtual Memory + +### Overview + +This section describes how to configure the vCPU and virtual memory. + +### Elements + +- **vcpu**: The number of virtual processors. +- **memory**: The size of the virtual memory. + + **unit**: The memory unit. The value can be KiB \(210 bytes\), MiB \(220 bytes\), GiB \(230 bytes\), or TiB \(240 bytes\). + +- **cpu**: The mode of the virtual processor. + + **mode**: The mode of the vCPU. + + - **host-passthrough**: indicates that the architecture and features of the virtual CPU are the same as those of the host. + + - **custom**: indicates that the architecture and features of the virtual CPU are configured by the **cpu** element. + + Sub-element **topology**: A sub-element of the element cpu, used to describe the topology structure of a vCPU mode. + + - The attributes **socket**, **cores**, and **threads** of the sub-element topology describe the number of CPU sockets of a VM, the number of processor cores included in each CPU socket, and the number of threads included in each processor core, respectively. The attribute value is a positive integer, and the product of the three values equals the number of vCPUs. + - The ARM architecture supports the virtual hyper-threading function. The virtual CPU hot add and the virtual hyper-threading function are mutually exclusive. + Sub-element **model**: A sub-element of the element cpu, used to describe the CPU model when **mode** is custom. + + Sub-element **feature**: A sub-element of the element cpu, used to enable/disable a CPU feature when **mode** is custom. The attribute **name** describes the name of the CPU feature. And whether enable the CPU feature is controlled by the attribute **policy**: + + - **force**: force enable the CPU feature regardless of it being supported by host CPU. + + - **require**: enable the CPU feature. + + - **optional**: the CPU feature will be enabled if and only if it is supported by host CPU. + + - **disable**: disable the CPU feature. + + - **forbid**: disable the CPU feature and guest creation will fail if the feature is supported by host CPU. + +### Configuration Example + +For example, if the number of vCPUs is 4, the processing mode is host-passthrough, the virtual memory is 8 GiB, the four CPUs are distributed in two CPU sockets, and hyperthreading is not supported, the configuration is as follows: + +```xml + + ... + 4 + 8 + + + +... + +``` + +If the virtual memory is 8 GiB, the number of vCPUs is 4, the processing mode is custom, the CPU model is Kunpeng-920, and pmull is disabled, the configuration is as follows: + +```xml + + ... + 4 + 8 + + Kunpeng-920 + + + ... + +``` + +## Virtual Device Configuration + +The VM XML configuration file uses the **devices** elements to configure virtual devices, including storage devices, network devices, buses, and mouse devices. This section describes how to configure common virtual devices. + +### Storage Devices + +#### Overview + +This section describes how to configure virtual storage devices, including floppy disks, disks, and CD-ROMs and their storage types. + +#### Elements + +The XML configuration file uses the **disk** element to configure storage devices. [Table 1](#table14200183410353) describes common **disk** attributes. [Table 2](#table4866134925114) describes common subelements and their attributes. + +**Table 1** Common attributes of the **disk** element + + + + + + + + + + + + + + + + + + + + +
    ElementAttributeDescriptionAttribute Value and Description
    disktypeSpecifies the type of the backend storage medium.block: block device
    file: file device
    dir: directory path
    network: network disk
    deviceSpecifies the storage medium to be presented to the VM.disk: disk (default)
    floppy: floppy disk
    cdrom: CD-ROM
    + +**Table 2** Common subelements and attributes of the **disk** element + + + +| Subelement | Subelement Description | Attribute Description | +| ---------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| source | Specifies the backend storage medium, which corresponds to the type specified by the **type** attribute of the **disk** element. | **file**: file type. The value is the fully qualified path of the corresponding file.
    **dev**: block type. The value is the fully qualified path of the corresponding host device.
    **dir**: directory type. The value is the fully qualified path of the disk directory.
    **protocol**: protocol in use.
    **name**: RBD disk name. The format is as follows: $pool/$volume .**host name**: mon address.
    **port**: port of the mon address.
    | +| driver | Details about the specified backend driver | **type**: disk format type. The value can be **raw** or **qcow2**, which must be the same as that of source.
    **io**: disk I/O mode. The options are **native** and **threads**.
    **cache**: disk cache mode. The value can be **none**, **writethrough**, **writeback**, or **directsync**.
    **iothread**: I/O thread allocated to the disk.
    **error_policy**: processing policy when an I/O write error occurs. The value can be stop, report, ignore, enospace, or retry.
    **rerror_policy**: processing policy when an I/O read error occurs. The value can be stop, report, ignore, enospac, or retry.
    **retry_interval**: I/O retry interval. The value ranges from 0 to MAX_INT, in milliseconds. This parameter can be set only when error_policy or rerror_policy is set to retry.
    **retry_timeout**: I/O retry timeout interval. The value ranges from 0 to MAX_INT, in milliseconds. This parameter can be set only when error_policy or rerror_policy is set to retry. | +| target | The bus and device that a disk presents to a VM. | **dev**: specifies the logical device name of a disk, for example, sd\[a-p] for SCSI, SATA, and USB buses and hd\[a-d] for IDE disks.

    **bus**: specifies the type of a disk. Common types include scsi, usb, sata, and virtio. | +| boot | The disk can be used as the boot disk. | **order**: specifies the disk startup sequence. | +| readonly | The disk is read-only and cannot be modified by the VM. Generally, it is used together with the CD-ROM drive. | - | + +#### Configuration Example + +After the VM image is prepared according to [Preparing a VM Image](./environment_preparation.md#preparing-a-vm-image), you can use the following XML configuration file to configure the virtual disk for the VM. + +For example, this example configures two I/O threads for the virtual machine, one for a block disk device, one for an optical disc device, and one for an RBD disk, and the first I/O thread is allocated to the block disk device for use. The backend medium of the disk device is in qcow2 format and is used as the preferred boot disk. +Before using an RBD disk, ensure that the qemu-block-rbd driver is installed. Run the following command as the **root** user to install the driver: + +```sh +yum install qemu-block-rbd +``` + +Configuration example: + +```xml + + ... + 2 + + + + + + + + + + + + + + + + + + + + + + ... + + +``` + +### Network Devices + +#### Overview + +The XML configuration file can be used to configure virtual network devices, including the ethernet mode, bridge mode, and vhostuser mode. This section describes how to configure vNICs. + +#### Elements + +In the XML configuration file, the element **interface** is used, and its attribute **type** indicates the mode of the vNIC. The options are **ethernet**, **bridge**, and **vhostuser**. The following uses the vNIC in bridge mode as an example to describe its subelements and attributes. + +**Table 1** Common subelements of a vNIC in bridge mode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Subelement

    +

    Subelement Description

    +

    Attribute and Description

    +

    mac

    +

    The mac address of the vNIC.

    +

    address: specifies the mac address. If this parameter is not set, the system automatically generates a mac address.

    +

    target

    +

    Name of the backend vNIC.

    +

    dev: name of the created backend tap device.

    +

    source

    +

    Specify the backend of the vNIC.

    +

    bridge: used together with the bridge mode. The value is the bridge name.

    +

    boot

    +

    The NIC can be used for remote startup.

    +

    order: specifies the startup sequence of NICs.

    +

    model

    +

    Indicates the type of a vNIC.

    +

    type: virtio is usually used for the NIC in bridge mode.

    +

    virtualport

    +

    Port type

    +

    type: If an OVS bridge is used, set this parameter to openvswitch.

    +

    driver

    +

    Backend driver type

    +

    name: driver name. The value is vhost.

    +

    queues: the number of NIC queues.

    +
    + +#### Configuration Example + +- After creating the Linux bridge br0 by referring to [Preparing a VM Image](./environment_preparation.md#preparing-a-vm-image), configure a vNIC of the VirtIO type bridged on the br0 bridge. The corresponding XML configuration is as follows: + + ```xml + + ... + + + + + + ... + + + ``` + +- After an OVS network bridge is created according to [Preparing a VM Image](./environment_preparation.md#preparing-a-vm-image), configure a VirtIO vNIC device that uses the vhost driver and has four queues. + + ```xml + + ... + + + + + + + + ... + + + ``` + +### Bus Configuration + +#### Overview + +The bus is a channel for information communication between components of a computer. An external device needs to be mounted to a corresponding bus, and each device is assigned a unique address \(specified by the subelement **address**\). Information exchange with another device or a central processing unit \(CPU\) is completed through the bus network. Common device buses include the ISA bus, PCI bus, USB bus, SCSI bus, and PCIe bus. + +The PCIe bus is a typical tree structure and has good scalability. The buses are associated with each other by using a controller. The following uses the PCIe bus as an example to describe how to configure a bus topology for a VM. + +>[!NOTE] **NOTE:** +>The bus configuration is complex. If the device topology does not need to be precisely controlled, the default bus configuration automatically generated by libvirt can be used. + +#### Elements + +In the XML configuration of libvirt, each controller element \(**controller**\) represents a bus, and one or more controllers or devices can be mounted to one controller depending on the VM architecture. This topic describes common attributes and subelements. + +**controller**: controller element, which indicates a bus. + +- Attribute **type**: bus type, which is mandatory for the controller. The common values are **pci**, **usb**, **scsi**, **virtio-serial**, **fdc**, and **ccid**. +- Attribute **index**: bus number of the controller \(the number starts from 0\), which is mandatory for the controller. This attribute can be used in the **address** element. +- Attribute **model**: specific model of the controller, which is mandatory for the controller. The available values are related to the value of **type**. For details about the mapping and description, see [Table 4](#table191911761111). +- Subelement **address**: mount location of a device or controller on the bus network. + - Attribute **type**: device address type. The common values are **pci**, **usb**, or **drive**. The attribute varies according to the **type** of the **address**. For details about the common **type** attribute value and the corresponding **address** attribute, see [Table 5](#table1200165711314). + +- Subelement **model**: name of a controller model. + - Attribute **name**: name of a controller model, which corresponds to the **model** attribute in the parent element controller. + +**Table 4** Mapping between the common values of **type** and **model** for the controller. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Value of Type

    +

    Value of Model

    +

    Introduction

    +

    pci

    +

    pcie-root

    +

    PCIe root node, which can be used to mount PCIe devices or controllers.

    +

    pcie-root-port

    +

    Only one slot can be used to mount a PCIe device or controller.

    +

    pcie-to-pci-bridge

    +

    PCIe-to-PCI bridge controller, which can be used to mount PCI devices.

    +

    usb

    +

    ehci

    +

    USB 2.0 controller, which can be used to mount USB 2.0 devices.

    +

    nec-xhci

    +

    USB 3.0 controller, which can be used to mount USB 3.0 devices.

    +

    scsi

    +

    virtio-scsi

    +

    VirtIO SCSI controller, which can be used to mount block devices, such as disks and CD-ROMs.

    +

    virtio-serial

    +

    virtio-serial

    +

    VirtIO serial port controller, which can be used to mount serial port devices, such as a pty serial port.

    +
    + +**Table 5** Attributes of the **address** element in different devices. + + + + + + + + + + + + + + + + + + + + +

    Value of Type

    +

    Description

    +

    Address

    +

    pci

    +

    The address type is PCI address, indicating the mount location of the device on the PCI bus network.

    +

    domain: domain ID of the PCI device.

    +

    bus: bus number of the PCI device.

    +

    slot: device number of the PCI device.

    +

    function: function number of the PCI device.

    +

    multifunction: (optional) specifies whether to enable the multifunction function.

    +

    usb

    +

    The address type is USB address, indicating the location of the device on the USB bus.

    +

    bus: bus number of the USB device.

    +

    port: port number of the USB device.

    +

    drive

    +

    The address type is storage device address, indicating the owning disk controller and its position on the bus.

    +

    controller: the number of the owning controller.

    +

    bus: channel number of the device output.

    +

    target: target number of the storage device.

    +

    unit: lun number of the storage device.

    +
    + +#### Configuration Example + +This example shows the topology of a PCIe bus. Three PCIe-Root-Port controllers are mounted to the PCIe root node \(BUS 0\). The multifunction function is enabled for the first PCIe-Root-Port controller \(BUS 1\). A PCIe-to-PCI-bridge controller is mounted to the first PCIe-Root-Port controller to form a PCI bus \(BUS 3\). A virtio-serial device and a USB 2.0 controller are mounted to the PCI bus. A SCSI controller is mounted to the second PCIe-Root-Port controller \(BUS 2\). No device is mounted to the third PCIe-Root-Port controller \(BUS 0\). The configuration details are as follows: + +```xml + + ... + + + +
    + + +
    + + + +
    + + +
    + + +
    + + +
    + + +
    + + ... + + +``` + +### Other Common Devices + +#### Overview + +In addition to storage devices and network devices, some external devices need to be specified in the XML configuration file. This section describes how to configure these elements. + +#### Elements + +- **serial**: serial port device + + Attribute **type**: specifies the serial port type. The common attribute values are **pty**, **tcp**, **pipe**, and **file**. + +- **video**: media device + + Attribute **type**: media device type. The common attribute value of the AArch64 architecture is **virtio**, and that of the x86\_64 architecture is **vga** or **cirrus**. + + Subelement **model**: subelement of **video**, which is used to specify the media device type. + + In the subelement **model**, if **type** is set to **vga**, a Video Graphics Array \(VGA\) video card is configured. **vram** indicates the size of the video RAM, in KB by default. + + For example, if a 16 MB VGA video card is configured for an x86\_64 VM, configuration in the XML file is as follows. In the example, the value of **vram** is the size of video RAM, in KB by default. + + ```xml + + ``` + +- **input**: input device + + **type** attribute: specifies the type of the input device. The common attribute values are **tablet** and **keyboard**, indicating that the output device is the tablet and keyboard respectively. + + **bus**: specifies the bus to be mounted. The common attribute value is **USB**. + +- **emulator**: emulator application path +- **graphics**: graphics device + + **type** attribute: specifies the type of a graphics device. The common attribute value is **vnc**. + + **listen** attribute: specifies the IP address to be listened to. + +#### Configuration Example + +For example, in the following example, the VM emulator path, pty serial port, VirtIO media device, USB tablet, USB keyboard, and VNC graphics device are configured. + +>[!NOTE] **NOTE:** +>When **type** of **graphics** is set to **VNC**, you are advised to set the **passwd** attribute, that is, the password for logging in to the VM using VNC. + +```xml + + ... + + /usr/libexec/qemu-kvm + + + + + + ... + + +``` + +## Configurations Related to the System Architecture + +### Overview + +The XML configuration file contains configurations related to the system architecture, which cover the mainboard, CPU, and some features related to the architecture. This section describes meanings of these configurations. + +### Elements + +- **os**: defines VM startup parameters. + + Subelement **type**: specifies the VM type. The attribute **arch** indicates the architecture type, for example, AArch64. The attribute **machine** indicates the type of VM chipset. Supported chipset type can be queried by running the **qemu-kvm -machine ?** command. For example, the AArch64 architecture supports the **virt** type. + + Subelement **loader**: specifies the firmware to be loaded, for example, the UEFI file provided by the EDK. The **readonly** attribute indicates whether the file is read-only. The value can be **yes** or **no**. The **type** attribute indicates the **loader** type. The common values are **rom** and **pflash**. + + Subelement **nvram**: specifies the path of the **nvram** file, which is used to store the UEFI startup configuration. + +- **features**: Hypervisor controls some VM CPU/machine features, such as the advanced configuration and power interface \(ACPI\) and the GICv3 interrupt controller specified by the ARM processor. + +### Example for AArch64 Architecture + +The VM is of the **aarch64** type and uses **virt** chipset. The VM configuration started using UEFI is as follows: + +```xml + + ... + + hvm + /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw + /var/lib/libvirt/qemu/nvram/openEulerVM.fd + + ... + +``` + +Configure ACPI and GIC V3 interrupt controller features for the VM. + +```xml + + + + +``` + +### Example for x86\_64 Architecture + +The x86\_64 architecture supports both BIOS and UEFI boot modes. If **loader** is not configured, the default BIOS boot mode is used. The following is a configuration example in which the UEFI boot mode and Q35 chipsets are used. + +```xml + + ... + + hvm + /usr/share/edk2/ovmf/OVMF.fd + + ... + +``` + +## Other Common Configuration Items + +### Overview + +In addition to system resources and virtual devices, other elements need to be configured in the XML configuration file. This section describes how to configure these elements. + +### Elements + +- **iothreads**: specifies the number of **iothread**, which can be used to accelerate storage device performance. + +- **on\_poweroff**: action taken when a VM is powered off. +- **on\_reboot**: action taken when a VM is rebooted. +- **on\_crash**: action taken when a VM is on crash. +- **clock**: indicates the clock type. + + **offset** attribute: specifies the VM clock synchronization type. The value can be **localtime**, **utc**, **timezone**, or **variable**. + +### Configuration Example + +Configure two **iothread** for the VM to accelerate storage device performance. + +```xml +2 +``` + +Destroy the VM when it is powered off. + +```xml +destroy +``` + +Restart the VM. + +```xml +restart +``` + +Restart the VM when it is crashed. + +```xml +restart +``` + +The clock uses the **utc** synchronization mode. + +```xml + +``` + +## XML Configuration File Example + +### Overview + +This section provides XML configuration files of a basic AArch64 VM and a x86\_64 VM as two examples for reference. + +### Example 1 + +An XML configuration file of AArch64 VM, which contains basic elements. The following is a configuration example: + +```xml + + openEulerVM + 8 + 4 + + hvm + /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw + /var/lib/libvirt/qemu/nvram/openEulerVM.fd + + + + + + + + + 1 + + destroy + restart + restart + + /usr/libexec/qemu-kvm + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` + +### Example 2 + +An XML configuration file of x86\_64 VM, which contains basic elements and bus elements. The following is a configuration example: + +```xml + + openEulerVM + 8388608 + 8388608 + 4 + 1 + + hvm + + + + + + + + + destroy + restart + restart + + /usr/libexec/qemu-kvm + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + + + + + +