diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..234e066aac4be1416c86c84b5deddd72ef65791b --- /dev/null +++ b/.gitignore @@ -0,0 +1,122 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# mac +.DS_Store + +temp-docs +app/**/* diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..3b7b82d0da2db857eda1a798dbd908ea136f07b5 --- /dev/null +++ b/LICENSE @@ -0,0 +1,427 @@ +Attribution-ShareAlike 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More_considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-ShareAlike 4.0 International Public +License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-ShareAlike 4.0 International Public License ("Public +License"). To the extent this Public License may be interpreted as a +contract, You are granted the Licensed Rights in consideration of Your +acceptance of these terms and conditions, and the Licensor grants You +such rights in consideration of benefits the Licensor receives from +making the Licensed Material available under these terms and +conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + l. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + m. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + + including for purposes of Section 3(b); and + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/README.en.md b/README.en.md deleted file mode 100644 index 57d177c634f69207c69c906247eac259c560241f..0000000000000000000000000000000000000000 --- a/README.en.md +++ /dev/null @@ -1,36 +0,0 @@ -# docs - -#### Description -To build and enrich documentation for openEuler project. - -#### Software Architecture -Software architecture description - -#### Installation - -1. xxxx -2. xxxx -3. xxxx - -#### Instructions - -1. xxxx -2. xxxx -3. xxxx - -#### Contribution - -1. Fork the repository -2. Create Feat_xxx branch -3. Commit your code -4. Create Pull Request - - -#### Gitee Feature - -1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md -2. Gitee blog [blog.gitee.com](https://blog.gitee.com) -3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) -4. The most valuable open source project [GVP](https://gitee.com/gvp) -5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) -6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/README.md b/README.md deleted file mode 100644 index f4e13b3549095a827c5f9e3fcc431f6cf1cd3d11..0000000000000000000000000000000000000000 --- a/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# docs - -#### 介绍 -To build and enrich documentation for openEuler project. - -#### 软件架构 -软件架构说明 - - -#### 安装教程 - -1. xxxx -2. xxxx -3. xxxx - -#### 使用说明 - -1. xxxx -2. xxxx -3. xxxx - -#### 参与贡献 - -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 -3. 提交代码 -4. 新建 Pull Request - - -#### 特技 - -1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md -2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) -3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 -4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 -5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) -6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/_redirect.yaml b/_redirect.yaml new file mode 100644 index 0000000000000000000000000000000000000000..41bccc5b14273508c03b85855e504c19ddc40380 --- /dev/null +++ b/_redirect.yaml @@ -0,0 +1,483 @@ +/zh/docs/24.03_LTS_SP1/docs/Kubernetes/Kubernetes.html: /zh/docs/24.03_LTS_SP1/cloud/cluster_deployment/kubernetes/overview.html +/zh/docs/24.03_LTS_SP1/docs/Kubernetes/准备虚拟机.html: /zh/docs/24.03_LTS_SP1/cloud/cluster_deployment/kubernetes/preparing_vms.html +/zh/docs/24.03_LTS_SP1/docs/Kubernetes/手动部署集群.html: >- + /zh/docs/24.03_LTS_SP1/cloud/cluster_deployment/kubernetes/deploying_a_kubernetes_cluster_manually.html +/zh/docs/24.03_LTS_SP1/docs/Kubernetes/安装Kubernetes软件包.html: >- + /zh/docs/24.03_LTS_SP1/cloud/cluster_deployment/kubernetes/installing_the_kubernetes_software_package.html +/zh/docs/24.03_LTS_SP1/docs/Kubernetes/准备证书.html: >- + /zh/docs/24.03_LTS_SP1/cloud/cluster_deployment/kubernetes/preparing_certificates.html +/zh/docs/24.03_LTS_SP1/docs/Kubernetes/安装etcd.html: >- + /zh/docs/24.03_LTS_SP1/cloud/cluster_deployment/kubernetes/installing_etcd.html +/zh/docs/24.03_LTS_SP1/docs/Kubernetes/部署控制面组件.html: >- + /zh/docs/24.03_LTS_SP1/cloud/cluster_deployment/kubernetes/deploying_control_plane_components.html +/zh/docs/24.03_LTS_SP1/docs/Kubernetes/部署Node节点组件.html: >- + /zh/docs/24.03_LTS_SP1/cloud/cluster_deployment/kubernetes/deploying_a_node_component.html +/zh/docs/24.03_LTS_SP1/docs/Kubernetes/eggo自动化部署.html: >- + /zh/docs/24.03_LTS_SP1/cloud/cluster_deployment/kubernetes/eggo_automatic_deployment.html +/zh/docs/24.03_LTS_SP1/docs/Kubernetes/eggo工具介绍.html: >- + /zh/docs/24.03_LTS_SP1/cloud/cluster_deployment/kubernetes/eggo_tool_introduction.html +/zh/docs/24.03_LTS_SP1/docs/Kubernetes/eggo部署集群.html: >- + /zh/docs/24.03_LTS_SP1/cloud/cluster_deployment/kubernetes/eggo_deploying_a_cluster.html +/zh/docs/24.03_LTS_SP1/docs/Kubernetes/eggo拆除集群.html: >- + /zh/docs/24.03_LTS_SP1/cloud/cluster_deployment/kubernetes/eggo_dismantling_a_cluster.html +/zh/docs/24.03_LTS_SP1/docs/Kubernetes/运行测试pod.html: >- + /zh/docs/24.03_LTS_SP1/cloud/cluster_deployment/kubernetes/running_the_test_pod.html +/zh/docs/24.03_LTS_SP1/docs/Kubernetes/Kubernetes集群部署指南-containerd.html: >- + /zh/docs/24.03_LTS_SP1/cloud/cluster_deployment/kubernetes/kubernetes_containerd.html +/zh/docs/24.03_LTS_SP1/docs/Container/iSula容器引擎.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/overview.html +/zh/docs/24.03_LTS_SP1/docs/Container/安装-升级与卸载.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/installation_upgrade_uninstallation.html +/zh/docs/24.03_LTS_SP1/docs/Container/安装与配置.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/installation_configuration.html +/zh/docs/24.03_LTS_SP1/docs/Container/升级.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/upgrade_methods.html +/zh/docs/24.03_LTS_SP1/docs/Container/卸载.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/uninstallation.html +/zh/docs/24.03_LTS_SP1/docs/Container/使用指南.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/application_scenarios.html +/zh/docs/24.03_LTS_SP1/docs/Container/容器管理.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/container_management.html +/zh/docs/24.03_LTS_SP1/docs/Container/支持CNI网络.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/interconnection_with_the_cni_network.html +/zh/docs/24.03_LTS_SP1/docs/Container/容器资源管理.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/container_resource_management.html +/zh/docs/24.03_LTS_SP1/docs/Container/特权容器.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/privileged_container.html +/zh/docs/24.03_LTS_SP1/docs/Container/CRI-v1alpha2接口.html: /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/cri.html +/zh/docs/24.03_LTS_SP1/docs/Container/CRI-v1接口.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/cri_2.html +/zh/docs/24.03_LTS_SP1/docs/Container/镜像管理.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/image_management.html +/zh/docs/24.03_LTS_SP1/docs/Container/容器健康状态检查.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/checking_the_container_health_status.html +/zh/docs/24.03_LTS_SP1/docs/Container/查询信息.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/querying_information.html +/zh/docs/24.03_LTS_SP1/docs/Container/安全特性.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/security_features.html +/zh/docs/24.03_LTS_SP1/docs/Container/支持OCI-hooks.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/supporting_oci_hooks.html +/zh/docs/24.03_LTS_SP1/docs/Container/本地卷管理.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/local_volume_management.html +/zh/docs/24.03_LTS_SP1/docs/Container/iSula-shim-v2对接stratovirt.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/interconnecting_isula_shim_v2_with_stratovirt.html +/zh/docs/24.03_LTS_SP1/docs/Container/iSulad支持cgroup-v2.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/isulad_support_cgroup_v2.html +/zh/docs/24.03_LTS_SP1/docs/Container/iSulad支持CDI.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/isulad_support_cdi.html +/zh/docs/24.03_LTS_SP1/docs/Container/附录.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/isula_container_engine/appendix.html +/zh/docs/24.03_LTS_SP1/docs/Container/Docker容器.html: /zh/docs/24.03_LTS_SP1/cloud/container_engine/docker_engine/overview.html +/zh/docs/24.03_LTS_SP1/docs/Container/安装配置-3.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/docker_engine/installation_and_configuration_3.html +/zh/docs/24.03_LTS_SP1/docs/Container/容器管理-3.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/docker_engine/container_management_1.html +/zh/docs/24.03_LTS_SP1/docs/Container/镜像管理-3.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/docker_engine/image_management_1.html +/zh/docs/24.03_LTS_SP1/docs/Container/命令行参考.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/docker_engine/command_reference.html +/zh/docs/24.03_LTS_SP1/docs/Container/容器引擎-4.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/docker_engine/container_engine.html +/zh/docs/24.03_LTS_SP1/docs/Container/容器管理-4.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/docker_engine/container_management_2.html +/zh/docs/24.03_LTS_SP1/docs/Container/镜像管理-4.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_engine/docker_engine/image_management_2.html +/zh/docs/24.03_LTS_SP1/docs/Container/统计信息-4.html: /zh/docs/24.03_LTS_SP1/cloud/container_engine/docker_engine/statistics.html +/zh/docs/24.03_LTS_SP1/docs/Container/安全容器.html: /zh/docs/24.03_LTS_SP1/cloud/container_form/secure_container/overview.html +/zh/docs/24.03_LTS_SP1/docs/Container/安装与配置-2.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_form/secure_container/installation_and_deployment_2.html +/zh/docs/24.03_LTS_SP1/docs/Container/使用方法-1.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_form/secure_container/application_scenarios_2.html +/zh/docs/24.03_LTS_SP1/docs/Container/管理安全容器的生命周期.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_form/secure_container/managing_the_lifecycle_of_a_secure_container.html +/zh/docs/24.03_LTS_SP1/docs/Container/为安全容器配置资源.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_form/secure_container/configuring_resources_for_a_secure_container.html +/zh/docs/24.03_LTS_SP1/docs/Container/监控安全容器.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_form/secure_container/monitoring_secure_containers.html +/zh/docs/24.03_LTS_SP1/docs/Container/附录-3.html: /zh/docs/24.03_LTS_SP1/cloud/container_form/secure_container/appendix_2.html +/zh/docs/24.03_LTS_SP1/docs/Container/系统容器.html: /zh/docs/24.03_LTS_SP1/cloud/container_form/system_container/overview.html +/zh/docs/24.03_LTS_SP1/docs/Container/安装指导.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_form/system_container/installation_guideline.html +/zh/docs/24.03_LTS_SP1/docs/Container/使用指南-1.html: /zh/docs/24.03_LTS_SP1/cloud/container_form/system_container/usage_guide.html +/zh/docs/24.03_LTS_SP1/docs/Container/指定rootfs创建容器.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_form/system_container/specifying_rootfs_to_create_a_container.html +/zh/docs/24.03_LTS_SP1/docs/Container/通过systemd启动容器.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_form/system_container/using_systemd_to_start_a_container.html +/zh/docs/24.03_LTS_SP1/docs/Container/容器内reboot-shutdown.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_form/system_container/reboot_or_shutdown_in_a_container.html +/zh/docs/24.03_LTS_SP1/docs/Container/cgroup路径可配置.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_form/system_container/configurable_cgroup_path.html +/zh/docs/24.03_LTS_SP1/docs/Container/namespace化内核参数可写.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_form/system_container/writable_namespace_kernel_parameters.html +/zh/docs/24.03_LTS_SP1/docs/Container/共享内存通道.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_form/system_container/shared_memory_channels.html +/zh/docs/24.03_LTS_SP1/docs/Container/动态加载内核模块.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_form/system_container/dynamically_loading_the_kernel_module.html +/zh/docs/24.03_LTS_SP1/docs/Container/环境变量持久化.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_form/system_container/environment_variable_persisting.html +/zh/docs/24.03_LTS_SP1/docs/Container/最大句柄数限制.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_form/system_container/maximum_number_of_handles.html +/zh/docs/24.03_LTS_SP1/docs/Container/安全性和隔离性.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_form/system_container/security_and_isolation.html +/zh/docs/24.03_LTS_SP1/docs/Container/容器资源动态管理.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_form/system_container/dynamically_managing_container_resources_syscontainer_tools.html +/zh/docs/24.03_LTS_SP1/docs/Container/附录-2.html: /zh/docs/24.03_LTS_SP1/cloud/container_form/system_container/appendix_1.html +/zh/docs/24.03_LTS_SP1/docs/Container/kuasar多沙箱运行时.html: /zh/docs/24.03_LTS_SP1/cloud/container_runtime/kuasar/overview.html +/zh/docs/24.03_LTS_SP1/docs/Container/kuasar安装与配置.html: >- + /zh/docs/24.03_LTS_SP1/cloud/container_runtime/kuasar/kuasar_install_config.html +/zh/docs/24.03_LTS_SP1/docs/Container/kuasar使用指南.html: /zh/docs/24.03_LTS_SP1/cloud/container_runtime/kuasar/kuasar_usage.html +/zh/docs/24.03_LTS_SP1/docs/Container/kuasar附录.html: /zh/docs/24.03_LTS_SP1/cloud/container_runtime/kuasar/kuasar_appendix.html +/zh/docs/24.03_LTS_SP1/docs/Container/isula-build构建工具.html: /zh/docs/24.03_LTS_SP1/cloud/image_builder/isula_build/overview.html +/zh/docs/24.03_LTS_SP1/docs/Container/isula-build使用指南.html: /zh/docs/24.03_LTS_SP1/cloud/image_builder/isula_build/isula_build.html +/zh/docs/24.03_LTS_SP1/docs/Container/isula-build附录.html: >- + /zh/docs/24.03_LTS_SP1/cloud/image_builder/isula_build/isula_build_appendix.html +/zh/docs/24.03_LTS_SP1/docs/KubeOS/overview.html: /zh/docs/24.03_LTS_SP1/cloud/kubeos/kubeos/overview.html +/zh/docs/24.03_LTS_SP1/docs/KubeOS/认识容器OS升级.html: /zh/docs/24.03_LTS_SP1/cloud/kubeos/kubeos/about_kubeos.html +/zh/docs/24.03_LTS_SP1/docs/KubeOS/安装与部署.html: /zh/docs/24.03_LTS_SP1/cloud/kubeos/kubeos/installation_and_deployment.html +/zh/docs/24.03_LTS_SP1/docs/KubeOS/使用方法.html: /zh/docs/24.03_LTS_SP1/cloud/kubeos/kubeos/usage_instructions.html +/zh/docs/24.03_LTS_SP1/docs/KubeOS/容器OS镜像制作指导.html: /zh/docs/24.03_LTS_SP1/cloud/kubeos/kubeos/kubeos_image_creation.html +/zh/docs/24.03_LTS_SP1/docs/NestOS/overview.html: /zh/docs/24.03_LTS_SP1/cloud/nestos/nestos/overview.html +/zh/docs/24.03_LTS_SP1/docs/NestOS/NestOS-For-Container用户指南.html: /zh/docs/24.03_LTS_SP1/cloud/nestos/nestos/nestos_for_container.html +/zh/docs/24.03_LTS_SP1/docs/NestOS/功能特性描述.html: /zh/docs/24.03_LTS_SP1/cloud/nestos/nestos/feature_description.html +/zh/docs/24.03_LTS_SP1/docs/rubik/overview.html: /zh/docs/24.03_LTS_SP1/cloud/hybrid_deployment/rubik/overview.html +/zh/docs/24.03_LTS_SP1/docs/rubik/安装与部署.html: >- + /zh/docs/24.03_LTS_SP1/cloud/hybrid_deployment/rubik/installation_and_deployment.html +/zh/docs/24.03_LTS_SP1/docs/rubik/modules.html: /zh/docs/24.03_LTS_SP1/cloud/hybrid_deployment/rubik/feature_introduction.html +/zh/docs/24.03_LTS_SP1/docs/rubik/配置文档.html: /zh/docs/24.03_LTS_SP1/cloud/hybrid_deployment/rubik/configuration.html +/zh/docs/24.03_LTS_SP1/docs/rubik/混部隔离示例.html: >- + /zh/docs/24.03_LTS_SP1/cloud/hybrid_deployment/rubik/example_of_isolation_for_hybrid_deployed_services.html +/zh/docs/24.03_LTS_SP1/docs/rubik/附录.html: /zh/docs/24.03_LTS_SP1/cloud/hybrid_deployment/rubik/appendix.html +/zh/docs/24.03_LTS_SP1/docs/Kmesh/Kmesh.html: /zh/docs/24.03_LTS_SP1/cloud/kmesh/kmesh/overview.html +/zh/docs/24.03_LTS_SP1/docs/Kmesh/认识Kmesh.html: /zh/docs/24.03_LTS_SP1/cloud/kmesh/kmesh/getting_to_know_kmesh.html +/zh/docs/24.03_LTS_SP1/docs/Kmesh/安装与部署.html: /zh/docs/24.03_LTS_SP1/cloud/kmesh/kmesh/installation_and_deployment.html +/zh/docs/24.03_LTS_SP1/docs/Kmesh/使用方法.html: /zh/docs/24.03_LTS_SP1/cloud/kmesh/kmesh/usage.html +/zh/docs/24.03_LTS_SP1/docs/Kmesh/附录.html: /zh/docs/24.03_LTS_SP1/cloud/kmesh/kmesh/appendixes.html +/zh/docs/24.03_LTS_SP1/docs/StratoVirt/StratoVirt介绍.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/stratovirt/stratovirt_introduction.html +/zh/docs/24.03_LTS_SP1/docs/StratoVirt/安装StratoVirt.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/stratovirt/install_stratovirt.html +/zh/docs/24.03_LTS_SP1/docs/StratoVirt/准备使用环境.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/stratovirt/prepare_env.html +/zh/docs/24.03_LTS_SP1/docs/StratoVirt/虚拟机配置.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/stratovirt/vm_configuration.html +/zh/docs/24.03_LTS_SP1/docs/StratoVirt/虚拟机管理.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/stratovirt/vm_management.html +/zh/docs/24.03_LTS_SP1/docs/StratoVirt/对接iSula安全容器.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/stratovirt/interconnect_isula.html +/zh/docs/24.03_LTS_SP1/docs/StratoVirt/对接libvirt.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/stratovirt/interconnect_libvirt.html +/zh/docs/24.03_LTS_SP1/docs/StratoVirt/StratoVirt-VFIO使用说明.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/stratovirt/stratovirt_vfio_instructions.html +/zh/docs/24.03_LTS_SP1/docs/Virtualization/认识虚拟化.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/virtualization/introduction_to_virtualization.html +/zh/docs/24.03_LTS_SP1/docs/Virtualization/安装虚拟化组件.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/virtualization/virtualization_installation.html +/zh/docs/24.03_LTS_SP1/docs/Virtualization/准备使用环境.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/virtualization/environment_preparation.html +/zh/docs/24.03_LTS_SP1/docs/Virtualization/虚拟机配置.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/virtualization/vm_configuration.html +/zh/docs/24.03_LTS_SP1/docs/Virtualization/管理虚拟机.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/virtualization/managing_vms.html +/zh/docs/24.03_LTS_SP1/docs/Virtualization/热迁移虚拟机.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/virtualization/vm_live_migration.html +/zh/docs/24.03_LTS_SP1/docs/Virtualization/管理系统资源.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/virtualization/system_resource_management.html +/zh/docs/24.03_LTS_SP1/docs/Virtualization/管理设备.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/virtualization/managing_devices.html +/zh/docs/24.03_LTS_SP1/docs/Virtualization/管理虚拟机可维护性.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/virtualization/vm_maintainability_management.html +/zh/docs/24.03_LTS_SP1/docs/Virtualization/最佳实践.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/virtualization/best_practices.html +/zh/docs/24.03_LTS_SP1/docs/Virtualization/工具使用指南.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/virtualization/tool_guide.html +/zh/docs/24.03_LTS_SP1/docs/Virtualization/vmtop.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/virtualization/vmtop.html +/zh/docs/24.03_LTS_SP1/docs/Virtualization/LibcarePlus.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/virtualization/libcareplus.html +/zh/docs/24.03_LTS_SP1/docs/Virtualization/Skylark.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/virtualization/skylark.html +/zh/docs/24.03_LTS_SP1/docs/Virtualization/附录.html: >- + /zh/docs/24.03_LTS_SP1/virtualization/virtualization_platform/virtualization/appendix.html +/embedded/docs/build/html/openEuler-24.03-LTS/index.html: /embedded/docs/build/html/master/index.html +/zh/docs/24.03_LTS_SP1/docs/Embedded/UniProton/UniProton用户指南-概述.html: /zh/docs/24.03_LTS_SP1/embedded/uniproton/overview.html +/zh/docs/24.03_LTS_SP1/docs/Embedded/UniProton/UniProton功能设计.html: /zh/docs/24.03_LTS_SP1/embedded/uniproton/uniproton_functions.html +/zh/docs/24.03_LTS_SP1/docs/Embedded/UniProton/UniProton接口说明.html: /zh/docs/24.03_LTS_SP1/embedded/uniproton/uniproton_apis.html +/zh/docs/24.03_LTS_SP1/docs/Releasenotes/release_notes.html: /zh/docs/24.03_LTS_SP1/server/releasenotes/releasenotes/release_notes.html +/zh/docs/24.03_LTS_SP1/docs/Releasenotes/简介.html: /zh/docs/24.03_LTS_SP1/server/releasenotes/releasenotes/introduction.html +/zh/docs/24.03_LTS_SP1/docs/Releasenotes/法律声明.html: /zh/docs/24.03_LTS_SP1/server/releasenotes/releasenotes/terms_of_use.html +/zh/docs/24.03_LTS_SP1/docs/Releasenotes/用户须知.html: /zh/docs/24.03_LTS_SP1/server/releasenotes/releasenotes/user_notice.html +/zh/docs/24.03_LTS_SP1/docs/Releasenotes/帐号清单.html: /zh/docs/24.03_LTS_SP1/server/releasenotes/releasenotes/account_list.html +/zh/docs/24.03_LTS_SP1/docs/Releasenotes/系统安装.html: /zh/docs/24.03_LTS_SP1/server/releasenotes/releasenotes/os_installation.html +/zh/docs/24.03_LTS_SP1/docs/Releasenotes/关键特性.html: /zh/docs/24.03_LTS_SP1/server/releasenotes/releasenotes/key_features.html +/zh/docs/24.03_LTS_SP1/docs/Releasenotes/已知问题.html: /zh/docs/24.03_LTS_SP1/server/releasenotes/releasenotes/known_issues.html +/zh/docs/24.03_LTS_SP1/docs/Releasenotes/已修复问题.html: /zh/docs/24.03_LTS_SP1/server/releasenotes/releasenotes/resolved_issues.html +/zh/docs/24.03_LTS_SP1/docs/Releasenotes/CVE漏洞.html: /zh/docs/24.03_LTS_SP1/server/releasenotes/releasenotes/cve.html +/zh/docs/24.03_LTS_SP1/docs/Releasenotes/源代码.html: /zh/docs/24.03_LTS_SP1/server/releasenotes/releasenotes/source_code.html +/zh/docs/24.03_LTS_SP1/docs/Releasenotes/参与贡献.html: /zh/docs/24.03_LTS_SP1/server/releasenotes/releasenotes/contribution.html +/zh/docs/24.03_LTS_SP1/docs/Releasenotes/致谢.html: /zh/docs/24.03_LTS_SP1/server/releasenotes/releasenotes/acknowledgment.html +/zh/docs/24.03_LTS_SP1/docs/Quickstart/quick-start.html: /zh/docs/24.03_LTS_SP1/server/quickstart/quickstart/quick_start.html +/zh/docs/24.03_LTS_SP1/docs/Installation/安装在服务器.html: >- + /zh/docs/24.03_LTS_SP1/server/installation_upgrade/installation/installation_on_servers.html +/zh/docs/24.03_LTS_SP1/docs/Installation/安装准备.html: >- + /zh/docs/24.03_LTS_SP1/server/installation_upgrade/installation/installation_preparations.html +/zh/docs/24.03_LTS_SP1/docs/Installation/安装方式介绍.html: >- + /zh/docs/24.03_LTS_SP1/server/installation_upgrade/installation/installation_modes.html +/zh/docs/24.03_LTS_SP1/docs/Installation/安装指导.html: >- + /zh/docs/24.03_LTS_SP1/server/installation_upgrade/installation/installation_guide.html +/zh/docs/24.03_LTS_SP1/docs/Installation/使用kickstart自动化安装.html: >- + /zh/docs/24.03_LTS_SP1/server/installation_upgrade/installation/using_kickstart_for_automatic_installation.html +/zh/docs/24.03_LTS_SP1/docs/Installation/安装在树莓派.html: >- + /zh/docs/24.03_LTS_SP1/server/installation_upgrade/installation/install_pi.html +/zh/docs/24.03_LTS_SP1/docs/Installation/安装准备-1.html: >- + /zh/docs/24.03_LTS_SP1/server/installation_upgrade/installation/installation_preparations_1.html +/zh/docs/24.03_LTS_SP1/docs/Installation/安装方式介绍-1.html: >- + /zh/docs/24.03_LTS_SP1/server/installation_upgrade/installation/installation_modes_1.html +/zh/docs/24.03_LTS_SP1/docs/Installation/安装指导-1.html: >- + /zh/docs/24.03_LTS_SP1/server/installation_upgrade/installation/installation_guide_1.html +/zh/docs/24.03_LTS_SP1/docs/Installation/更多资源.html: >- + /zh/docs/24.03_LTS_SP1/server/installation_upgrade/installation/more_resources.html +/zh/docs/24.03_LTS_SP1/docs/Installation/安装在RISC-V.html: /zh/docs/24.03_LTS_SP1/server/installation_upgrade/installation/risc_v.html +/zh/docs/24.03_LTS_SP1/docs/Installation/RISC-V-QEMU.html: >- + /zh/docs/24.03_LTS_SP1/server/installation_upgrade/installation/risc_v_qemu.html +/zh/docs/24.03_LTS_SP1/docs/Installation/RISC-V-Pioneer1.3.html: >- + /zh/docs/24.03_LTS_SP1/server/installation_upgrade/installation/risc_v_pioneer1.3.html +/zh/docs/24.03_LTS_SP1/docs/Installation/RISC-V-LicheePi4A.html: >- + /zh/docs/24.03_LTS_SP1/server/installation_upgrade/installation/risc_v_licheepi4a.html +/zh/docs/24.03_LTS_SP1/docs/Installation/RISCV-OLK6.6同源版本指南.html: >- + /zh/docs/24.03_LTS_SP1/server/installation_upgrade/installation/riscv_olk6.6_homologous_version.html +/zh/docs/24.03_LTS_SP1/docs/os_upgrade_and_downgrade/升降级指导.html: >- + /zh/docs/24.03_LTS_SP1/server/installation_upgrade/upgrade/openeuler_22.03_lts_upgrade_and_downgrade_guide.html +/zh/docs/24.03_LTS_SP1/docs/Administration/查看系统信息.html: >- + /zh/docs/24.03_LTS_SP1/server/administration/administrator/viewing_system_information.html +/zh/docs/24.03_LTS_SP1/docs/Administration/基础配置.html: >- + /zh/docs/24.03_LTS_SP1/server/administration/administrator/basic_configuration.html +/zh/docs/24.03_LTS_SP1/docs/Administration/管理用户和用户组.html: >- + /zh/docs/24.03_LTS_SP1/server/administration/administrator/user_and_user_group_management.html +/zh/docs/24.03_LTS_SP1/docs/Administration/使用DNF管理软件包.html: >- + /zh/docs/24.03_LTS_SP1/server/administration/administrator/using_dnf_to_manage_software_packages.html +/zh/docs/24.03_LTS_SP1/docs/Administration/管理服务.html: >- + /zh/docs/24.03_LTS_SP1/server/administration/administrator/service_management.html +/zh/docs/24.03_LTS_SP1/docs/Administration/管理进程.html: >- + /zh/docs/24.03_LTS_SP1/server/administration/administrator/process_management.html +/zh/docs/24.03_LTS_SP1/docs/Administration/搭建服务.html: >- + /zh/docs/24.03_LTS_SP1/server/administration/administrator/configuring_services.html +/zh/docs/24.03_LTS_SP1/docs/sysMaster/overview.html: /zh/docs/24.03_LTS_SP1/server/administration/sysmaster/overview.html +/zh/docs/24.03_LTS_SP1/docs/sysMaster/服务管理.html: /zh/docs/24.03_LTS_SP1/server/administration/sysmaster/service_management.html +/zh/docs/24.03_LTS_SP1/docs/sysMaster/sysmaster安装与部署.html: >- + /zh/docs/24.03_LTS_SP1/server/administration/sysmaster/sysmaster_install_deploy.html +/zh/docs/24.03_LTS_SP1/docs/sysMaster/sysmaster使用说明.html: /zh/docs/24.03_LTS_SP1/server/administration/sysmaster/sysmaster_usage.html +/zh/docs/24.03_LTS_SP1/docs/sysMaster/设备管理简介.html: /zh/docs/24.03_LTS_SP1/server/administration/sysmaster/device_management.html +/zh/docs/24.03_LTS_SP1/docs/sysMaster/devmaster安装与部署.html: >- + /zh/docs/24.03_LTS_SP1/server/administration/sysmaster/devmaster_install_deploy.html +/zh/docs/24.03_LTS_SP1/docs/sysMaster/devmaster使用说明.html: /zh/docs/24.03_LTS_SP1/server/administration/sysmaster/devmaster_usage.html +/zh/docs/24.03_LTS_SP1/docs/memsafety/overview.html: /zh/docs/24.03_LTS_SP1/server/administration/compa_command/overview.html +/zh/docs/24.03_LTS_SP1/docs/memsafety/utshell/utshell_guide.html: /zh/docs/24.03_LTS_SP1/server/administration/compa_command/utshell_guide.html +/zh/docs/24.03_LTS_SP1/docs/memsafety/utsudo/utsudo-用户指南.html: >- + /zh/docs/24.03_LTS_SP1/server/administration/compa_command/utsudo_user_guide.html +/zh/docs/24.03_LTS_SP1/docs/ops_guide/信息收集.html: >- + /zh/docs/24.03_LTS_SP1/server/maintenance/common_skills/information_collection.html +/zh/docs/24.03_LTS_SP1/docs/ops_guide/故障应急处理.html: /zh/docs/24.03_LTS_SP1/server/maintenance/troubleshooting/troubleshooting.html +/zh/docs/24.03_LTS_SP1/docs/ops_guide/常用工具.html: >- + /zh/docs/24.03_LTS_SP1/server/maintenance/common_tools/commonly_used_tools.html +/zh/docs/24.03_LTS_SP1/docs/ops_guide/常用技能.html: >- + /zh/docs/24.03_LTS_SP1/server/maintenance/common_skills/common_configurations.html +/zh/docs/24.03_LTS_SP1/docs/A-Ops/AOps部署指南.html: /zh/docs/24.03_LTS_SP1/server/maintenance/aops/deploying_aops.html +/zh/docs/24.03_LTS_SP1/docs/A-Ops/AOps智能定位框架使用手册.html: >- + /zh/docs/24.03_LTS_SP1/server/maintenance/aops/aops_intelligent_positioning_framework_user_manual.html +/zh/docs/24.03_LTS_SP1/docs/A-Ops/AOps漏洞管理模块使用手册.html: >- + /zh/docs/24.03_LTS_SP1/server/maintenance/aops/aops_vulnerability_management_module_user_manual.html +/zh/docs/24.03_LTS_SP1/docs/A-Ops/dnf插件命令使用手册.html: /zh/docs/24.03_LTS_SP1/server/maintenance/aops/dnf_command_usage.html +/zh/docs/24.03_LTS_SP1/docs/A-Ops/社区热补丁制作发布流程.html: >- + /zh/docs/24.03_LTS_SP1/server/maintenance/aops/community_hotpatch_creation_and_release_process.html +/zh/docs/24.03_LTS_SP1/docs/A-Ops/gala-anteater使用手册.html: /zh/docs/24.03_LTS_SP1/server/maintenance/gala/using_gala_anteater.html +/zh/docs/24.03_LTS_SP1/docs/A-Ops/gala-gopher使用手册.html: /zh/docs/24.03_LTS_SP1/server/maintenance/gala/using_gala_gopher.html +/zh/docs/24.03_LTS_SP1/docs/A-Ops/gala-spider使用手册.html: /zh/docs/24.03_LTS_SP1/server/maintenance/gala/using_gala_spider.html +/zh/docs/24.03_LTS_SP1/docs/KernelLiveUpgrade/KernelLiveUpgrade.html: >- + /zh/docs/24.03_LTS_SP1/server/maintenance/kernel_live_upgrade/kernel_live_upgrade.html +/zh/docs/24.03_LTS_SP1/docs/KernelLiveUpgrade/安装与部署.html: >- + /zh/docs/24.03_LTS_SP1/server/maintenance/kernel_live_upgrade/installation_and_deployment.html +/zh/docs/24.03_LTS_SP1/docs/KernelLiveUpgrade/使用方法.html: /zh/docs/24.03_LTS_SP1/server/maintenance/kernel_live_upgrade/usage_guide.html +/zh/docs/24.03_LTS_SP1/docs/SysCare/认识SysCare.html: /zh/docs/24.03/server/maintenance/syscare/syscare_introduction.html +/zh/docs/24.03_LTS_SP1/docs/SysCare/安装SysCare.html: /zh/docs/24.03_LTS_SP1/server/maintenance/syscare/installing_syscare.html +/zh/docs/24.03_LTS_SP1/docs/SysCare/使用SysCare.html: /zh/docs/24.03_LTS_SP1/server/maintenance/syscare/using_syscare.html +/zh/docs/24.03_LTS_SP1/docs/SysCare/约束限制.html: /zh/docs/24.03_LTS_SP1/server/maintenance/syscare/constraints.html +/zh/docs/24.03_LTS_SP1/docs/sysmonitor/sysmonitor-使用手册.html: /zh/docs/24.03/server/maintenance/sysmonitor/sysmonitor_user_guide.html +/zh/docs/24.03_LTS_SP1/docs/Administration/可信计算.html: >- + /zh/docs/24.03_LTS_SP1/server/security/trusted_computing/trusted_computing.html +/zh/docs/24.03_LTS_SP1/docs/Administration/内核完整性度量IMA.html: /zh/docs/24.03_LTS_SP1/server/security/trusted_computing/ima.html +/zh/docs/24.03_LTS_SP1/docs/Administration/动态完整性度量DIM.html: /zh/docs/24.03_LTS_SP1/server/security/trusted_computing/dim.html +/zh/docs/24.03_LTS_SP1/docs/Administration/远程证明鲲鹏安全库.html: >- + /zh/docs/24.03_LTS_SP1/server/security/trusted_computing/remote_attestation_kunpeng_security_library.html +/zh/docs/24.03_LTS_SP1/docs/Administration/可信平台控制模块TPCM.html: /zh/docs/24.03_LTS_SP1/server/security/trusted_computing/tpcm.html +/zh/docs/24.03_LTS_SP1/docs/Administration/解释器类应用程序完整性保护用户文档.html: >- + /zh/docs/24.03_LTS_SP1/server/security/trusted_computing/protection_for_interpreted_applications.html +/zh/docs/24.03_LTS_SP1/docs/Administration/内核可信根框架用户文档.html: >- + /zh/docs/24.03_LTS_SP1/server/security/trusted_computing/kernel_root_of_trust_framework.html +/zh/docs/24.03_LTS_SP1/docs/SecHarden/操作系统加固概述.html: /zh/docs/24.03_LTS_SP1/server/security/secharden/os_hardening_overview.html +/zh/docs/24.03_LTS_SP1/docs/SecHarden/安全配置规范基线.html: >- + /zh/docs/24.03_LTS_SP1/server/security/secharden/security_configuration_benchmark.html +/zh/docs/24.03_LTS_SP1/docs/SecHarden/加固指导.html: /zh/docs/24.03_LTS_SP1/server/security/secharden/secharden.html +/zh/docs/24.03_LTS_SP1/docs/SecHarden/账户口令.html: /zh/docs/24.03_LTS_SP1/server/security/secharden/account_passwords.html +/zh/docs/24.03_LTS_SP1/docs/SecHarden/授权认证.html: >- + /zh/docs/24.03_LTS_SP1/server/security/secharden/authentication_and_authorization.html +/zh/docs/24.03_LTS_SP1/docs/SecHarden/系统服务.html: /zh/docs/24.03_LTS_SP1/server/security/secharden/system_services.html +/zh/docs/24.03_LTS_SP1/docs/SecHarden/文件权限.html: /zh/docs/24.03_LTS_SP1/server/security/secharden/file_permissions.html +/zh/docs/24.03_LTS_SP1/docs/SecHarden/内核参数.html: /zh/docs/24.03_LTS_SP1/server/security/secharden/kernel_parameters.html +/zh/docs/24.03_LTS_SP1/docs/SecHarden/SELinux配置.html: /zh/docs/24.03_LTS_SP1/server/security/secharden/selinux_configuration.html +/zh/docs/24.03_LTS_SP1/docs/SecHarden/安全加固工具.html: /zh/docs/24.03_LTS_SP1/server/security/secharden/security_hardening_tools.html +/zh/docs/24.03_LTS_SP1/docs/SecHarden/安全配置加固工具.html: >- + /zh/docs/24.03_LTS_SP1/server/security/secharden/security_configuration_hardening_tool.html +/zh/docs/24.03_LTS_SP1/docs/SecHarden/附录.html: /zh/docs/24.03_LTS_SP1/server/security/secharden/appendix.html +/zh/docs/24.03_LTS_SP1/docs/secGear/secGear.html: /zh/docs/24.03_LTS_SP1/server/security/secgear/secgear.html +/zh/docs/24.03_LTS_SP1/docs/secGear/认识secGear.html: /zh/docs/24.03_LTS_SP1/server/security/secgear/introduction_to_secGear.html +/zh/docs/24.03_LTS_SP1/docs/secGear/安装secGear.html: /zh/docs/24.03_LTS_SP1/server/security/secgear/secgear_installation.html +/zh/docs/24.03_LTS_SP1/docs/secGear/接口参考.html: /zh/docs/24.03_LTS_SP1/server/security/secgear/api_reference.html +/zh/docs/24.03_LTS_SP1/docs/secGear/开发secGear应用程序.html: /zh/docs/24.03_LTS_SP1/server/security/secgear/developer_guide.html +/zh/docs/24.03_LTS_SP1/docs/CVE-ease/CVE-ease设计介绍.html: >- + /zh/docs/24.03_LTS_SP1/server/security/cve_ease/cve_ease_design_introduction.html +/zh/docs/24.03_LTS_SP1/docs/CVE-ease/CVE-ease介绍和安装说明.html: >- + /zh/docs/24.03_LTS_SP1/server/security/cve_ease/cve_ease_introduction_and_installation_instructions.html +/zh/docs/24.03_LTS_SP1/docs/CertSignature/总体概述.html: >- + /zh/docs/24.03_LTS_SP1/server/security/cert_signature/overview_of_certificates_and_signatures.html +/zh/docs/24.03_LTS_SP1/docs/CertSignature/签名证书介绍.html: >- + /zh/docs/24.03_LTS_SP1/server/security/cert_signature/introduction_to_signature_certificates.html +/zh/docs/24.03_LTS_SP1/docs/CertSignature/安全启动.html: /zh/docs/24.03_LTS_SP1/server/security/cert_signature/secure_boot.html +/zh/docs/24.03_LTS_SP1/docs/ShangMi/概述.html: /zh/docs/24.03_LTS_SP1/server/security/shangmi/overview.html +/zh/docs/24.03_LTS_SP1/docs/ShangMi/磁盘加密.html: /zh/docs/24.03_LTS_SP1/server/security/shangmi/drive_encryption.html +/zh/docs/24.03_LTS_SP1/docs/ShangMi/内核模块签名.html: /zh/docs/24.03_LTS_SP1/server/security/shangmi/kernel_module_signing.html +/zh/docs/24.03_LTS_SP1/docs/ShangMi/算法库.html: /zh/docs/24.03_LTS_SP1/server/security/shangmi/algorithm_library.html +/zh/docs/24.03_LTS_SP1/docs/ShangMi/文件完整性保护.html: /zh/docs/24.03_LTS_SP1/server/security/shangmi/file_integrity_protection.html +/zh/docs/24.03_LTS_SP1/docs/ShangMi/用户身份鉴别.html: >- + /zh/docs/24.03_LTS_SP1/server/security/shangmi/user_identity_authentication.html +/zh/docs/24.03_LTS_SP1/docs/ShangMi/证书.html: /zh/docs/24.03_LTS_SP1/server/security/shangmi/certificates.html +/zh/docs/24.03_LTS_SP1/docs/ShangMi/安全启动.html: /zh/docs/24.03_LTS_SP1/server/security/shangmi/secure_boot.html +/zh/docs/24.03_LTS_SP1/docs/ShangMi/SSH协议栈.html: /zh/docs/24.03_LTS_SP1/server/security/shangmi/ssh_stack.html +/zh/docs/24.03_LTS_SP1/docs/ShangMi/TLCP协议栈.html: /zh/docs/24.03_LTS_SP1/server/security/shangmi/tlcp_stack.html +/zh/docs/24.03_LTS_SP1/docs/ShangMi/RPM签名验签.html: /zh/docs/24.03_LTS_SP1/server/security/shangmi/rpm_signature_verification.html +/zh/docs/24.03_LTS_SP1/docs/secDetector/认识secDetector.html: >- + /zh/docs/24.03_LTS_SP1/server/security/secdetector/introduction_to_secdetector.html +/zh/docs/24.03_LTS_SP1/docs/secDetector/安装secDetector.html: >- + /zh/docs/24.03_LTS_SP1/server/security/secdetector/secdetector_installation.html +/zh/docs/24.03_LTS_SP1/docs/secDetector/接口参考.html: /zh/docs/24.03_LTS_SP1/server/security/secdetector/api_reference.html +/zh/docs/24.03_LTS_SP1/docs/secDetector/使用secDetector.html: /zh/docs/24.03_LTS_SP1/server/security/secdetector/using_secdetector.html +/zh/docs/24.03_LTS_SP1/docs/Administration/overview.html: /zh/docs/24.03_LTS_SP1/server/memory_storage/memory/overview.html +/zh/docs/24.03_LTS_SP1/docs/Administration/memory-management.html: /zh/docs/24.03_LTS_SP1/server/memory_storage/etmem/etmem_user_guide.html +/zh/docs/24.03_LTS_SP1/docs/GMEM/认识GMEM.html: /zh/docs/24.03_LTS_SP1/server/memory_storage/gmem/introduction_to_gmem.html +/zh/docs/24.03_LTS_SP1/docs/GMEM/安装与部署.html: >- + /zh/docs/24.03_LTS_SP1/server/memory_storage/gmem/installation_and_deployment.html +/zh/docs/24.03_LTS_SP1/docs/GMEM/使用说明.html: /zh/docs/24.03_LTS_SP1/server/memory_storage/gmem/usage_instructions.html +/zh/docs/24.03_LTS_SP1/docs/Administration/使用LVM管理硬盘.html: >- + /zh/docs/24.03_LTS_SP1/server/memory_storage/lvm/managing_drives_through_lvm.html +/zh/docs/24.03_LTS_SP1/docs/HSAK/introduce_hsak.html: /zh/docs/24.03_LTS_SP1/server/memory_storage/hsak/hsak_developer_guide.html +/zh/docs/24.03_LTS_SP1/server/memory_storage/hsak/development_with_hsak.html: /zh/docs/24.03_LTS_SP1/server/memory_storage/hsak/development_with_hsak.html +/zh/docs/24.03_LTS_SP1/server/memory_storage/hsak/hsak_tool_usage.html: /zh/docs/24.03_LTS_SP1/server/memory_storage/hsak/hsak_tools_usage.html +/zh/docs/24.03_LTS_SP1/server/memory_storage/hsak/hsak_c_apis.html: /zh/docs/24.03_LTS_SP1/server/memory_storage/hsak/hsak_c_apis.html +/zh/docs/24.03_LTS_SP1/docs/Administration/配置网络.html: >- + /zh/docs/24.03_LTS_SP1/server/network/network_config/network_configuration.html +/zh/docs/24.03_LTS_SP1/docs/Gazelle/Gazelle.html: /zh/docs/24.03_LTS_SP1/server/network/gazelle/gazelle_user_guide.html +/zh/docs/24.03_LTS_SP1/docs/ops_guide/系统资源与性能.html: >- + /zh/docs/24.03_LTS_SP1/server/performance/overall/system_resource/system_resources_and_performance.html +/zh/docs/24.03_LTS_SP1/docs/Administration/使用KAE加速引擎.html: >- + /zh/docs/24.03_LTS_SP1/server/performance/cpu_optimization/kae/using_the_kae.html +/zh/docs/24.03_LTS_SP1/docs/A-Tune/认识A-Tune.html: >- + /zh/docs/24.03_LTS_SP1/server/performance/system_optimization/atune/getting_to_know_a_tune.html +/zh/docs/24.03_LTS_SP1/docs/A-Tune/安装与部署.html: >- + /zh/docs/24.03_LTS_SP1/server/performance/system_optimization/atune/installation_and_deployment.html +/zh/docs/24.03_LTS_SP1/docs/A-Tune/使用方法.html: >- + /zh/docs/24.03_LTS_SP1/server/performance/system_optimization/atune/usage_instructions.html +/zh/docs/24.03_LTS_SP1/docs/A-Tune/native-turbo.html: >- + /zh/docs/24.03_LTS_SP1/server/performance/system_optimization/atune/native_turbo.html +/zh/docs/24.03_LTS_SP1/docs/A-Tune/附录.html: >- + /zh/docs/24.03_LTS_SP1/server/performance/system_optimization/atune/appendix.html +/zh/docs/24.03_LTS_SP1/docs/sysBoost/认识sysBoost.html: >- + /zh/docs/24.03_LTS_SP1/server/performance/cpu_optimization/sysboost/getting_to_know_sysboost.html +/zh/docs/24.03_LTS_SP1/docs/sysBoost/安装与部署.html: >- + /zh/docs/24.03_LTS_SP1/server/performance/cpu_optimization/sysboost/installation_and_deployment.html +/zh/docs/24.03_LTS_SP1/docs/sysBoost/使用方法.html: >- + /zh/docs/24.03_LTS_SP1/server/performance/cpu_optimization/sysboost/usage_instructions.html +/zh/docs/24.03_LTS_SP1/docs/oeAware/oeAware用户指南.html: >- + /zh/docs/24.03_LTS_SP1/server/performance/tuning_framework/oeaware/oeaware_user_guide.html +/zh/docs/24.03_LTS_SP1/docs/ApplicationDev/application-development.html: >- + /zh/docs/24.03_LTS_SP1/server/development/application_dev/application_development.html +/zh/docs/24.03_LTS_SP1/docs/ApplicationDev/开发环境准备.html: >- + /zh/docs/24.03_LTS_SP1/server/development/application_dev/preparations_for_development_environment.html +/zh/docs/24.03_LTS_SP1/docs/ApplicationDev/使用GCC编译.html: >- + /zh/docs/24.03_LTS_SP1/server/development/application_dev/using_gcc_for_compilation.html +/zh/docs/24.03_LTS_SP1/docs/ApplicationDev/使用Clang编译.html: >- + /zh/docs/24.03_LTS_SP1/server/development/application_dev/using_clang_for_compilation.html +/zh/docs/24.03_LTS_SP1/docs/ApplicationDev/使用make编译.html: >- + /zh/docs/24.03_LTS_SP1/server/development/application_dev/using_make_for_compilation.html +/zh/docs/24.03_LTS_SP1/docs/ApplicationDev/使用JDK编译.html: >- + /zh/docs/24.03_LTS_SP1/server/development/application_dev/using_jdk_for_compilation.html +/zh/docs/24.03_LTS_SP1/docs/ApplicationDev/构建RPM包.html: >- + /zh/docs/24.03_LTS_SP1/server/development/application_dev/building_an_rpm_package.html +/zh/docs/24.03_LTS_SP1/docs/GCC/内核反馈优化特性用户指南.html: /zh/docs/24.03_LTS_SP1/server/development/gcc/kernel_fdo_user_guide.html +/zh/docs/24.03_LTS_SP1/docs/Pin/插件框架特性用户指南.html: /zh/docs/24.03_LTS_SP1/server/development/gcc/pin_user_guide.html +/zh/docs/24.03_LTS_SP1/docs/AI4C/AI4C用户使用指南.html: /zh/docs/24.03_LTS_SP1/server/development/ai4c/ai4c_user_manual.html +/zh/docs/24.03_LTS_SP1/docs/FangTian/overview.html: /zh/docs/24.03_LTS_SP1/server/development/fangtian/overview.html +/zh/docs/24.03_LTS_SP1/docs/FangTian/FangTian环境配置.html: >- + /zh/docs/24.03_LTS_SP1/server/development/fangtian/fangtian_environment_configuration.html +/zh/docs/24.03_LTS_SP1/docs/FangTian/FangTian支持Wayland应用及鸿蒙应用.html: >- + /zh/docs/24.03_LTS_SP1/server/development/fangtian/fangtian_for_linux_waylan_and_openharmony_applications.html +/zh/docs/24.03_LTS_SP1/docs/thirdparty_migration/installha.html: >- + /zh/docs/24.03_LTS_SP1/server/high_availability/ha/ha_installation_and_deployment.html +/zh/docs/24.03_LTS_SP1/docs/thirdparty_migration/usecase.html: /zh/docs/24.03_LTS_SP1/server/high_availability/ha/ha_usecase_examples.html +/zh/docs/24.03_LTS_SP1/docs/DPUOffload/libvirt直连聚合环境搭建.html: >- + /zh/docs/24.03_LTS_SP1/server/diversified_computing/dpu_offload/libvirt_direct_connection_aggregation_environment_establishment.html +/zh/docs/24.03_LTS_SP1/docs/DPUOffload/qtfs共享文件系统架构及使用手册.html: >- + /zh/docs/24.03_LTS_SP1/server/diversified_computing/dpu_offload/qtfs_architecture_and_usage.html +/zh/docs/24.03_LTS_SP1/docs/DPUOffload/overview.html: /zh/docs/24.03_LTS_SP1/server/diversified_computing/dpu_offload/overview.html +/zh/docs/24.03_LTS_SP1/docs/DPUOffload/容器管理面无感卸载.html: >- + /zh/docs/24.03_LTS_SP1/server/diversified_computing/dpu_offload/imperceptible_container_management_plane_offload.html +/zh/docs/24.03_LTS_SP1/docs/DPUOffload/无感卸载部署指导.html: >- + /zh/docs/24.03_LTS_SP1/server/diversified_computing/dpu_offload/offload_deployment_guide.html +/zh/docs/24.03_LTS_SP1/docs/desktop/安装UKUI.html: /zh/docs/24.03_LTS_SP1/tools/desktop/ukui/ukui_installation.html +/zh/docs/24.03_LTS_SP1/docs/desktop/UKUIuserguide.html: /zh/docs/24.03_LTS_SP1/tools/desktop/ukui/ukui_user_guide.html +/zh/docs/24.03_LTS_SP1/docs/desktop/安装DDE.html: /zh/docs/24.03_LTS_SP1/tools/desktop/dde/dde_installation.html +/zh/docs/24.03_LTS_SP1/docs/desktop/DDE-User-Manual.html: /zh/docs/24.03_LTS_SP1/tools/desktop/dde/dde_user_guide.html +/zh/docs/24.03_LTS_SP1/docs/desktop/Install_GNOME.html: /zh/docs/24.03_LTS_SP1/tools/desktop/gnome/gnome_installation.html +/zh/docs/24.03_LTS_SP1/docs/desktop/Gnome_userguide.html: /zh/docs/24.03_LTS_SP1/tools/desktop/gnome/gnome_user_guide.html +/zh/docs/24.03_LTS_SP1/docs/desktop/kiran安装手册.html: /zh/docs/24.03_LTS_SP1/tools/desktop/kiran/kiran_installation.html +/zh/docs/24.03_LTS_SP1/docs/desktop/Kiran_userguide.html: /zh/docs/24.03_LTS_SP1/tools/desktop/kiran/kiran_user_guide.html +/zh/docs/24.03_LTS_SP1/docs/TailorCustom/isocut使用指南.html: /zh/docs/24.03_LTS_SP1/tools/community_tools/isocut/isocut_user_guide.html +/zh/docs/24.03_LTS_SP1/docs/TailorCustom/imageTailor使用指南.html: >- + /zh/docs/24.03_LTS_SP1/tools/community_tools/image_tailor/imagetailor_user_guide.html +/zh/docs/24.03_LTS_SP1/docs/Migration-tools/用户指南.html: >- + /zh/docs/24.03_LTS_SP1/tools/community_tools/migration_tools/migration_tools_user_guide.html +/zh/docs/24.03_LTS_SP1/docs/EulerLauncher/overall.html: >- + /zh/docs/24.03_LTS_SP1/tools/community_tools/virtualization/euler_launcher/overall.html +/zh/docs/24.03_LTS_SP1/docs/EulerLauncher/win-user-manual.html: >- + /zh/docs/24.03_LTS_SP1/tools/community_tools/virtualization/euler_launcher/win_user_manual.html +/zh/docs/24.03_LTS_SP1/docs/EulerLauncher/mac-user-manual.html: >- + /zh/docs/24.03_LTS_SP1/tools/community_tools/virtualization/euler_launcher/mac_user_manual.html +/zh/docs/24.03_LTS_SP1/docs/epkg/epkg使用指南.html: >- + /zh/docs/24.03_LTS_SP1/tools/community_tools/epkg_use/epkg_package_manager_usage_guide.html +/zh/docs/24.03_LTS_SP1/docs/userguide/patch-tracking.html: /zh/docs/24.03_LTS_SP1/tools/devops/patch_tracking/patch_tracking.html +/zh/docs/24.03_LTS_SP1/docs/userguide/pkgship.html: /zh/docs/24.03_LTS_SP1/tools/devops/pkgship/pkgship.html +/zh/docs/24.03_LTS_SP1/docs/EulerMaker/EulerMaker用户指南.html: /zh/docs/24.03_LTS_SP1/tools/devops/eulermaker/eulermaker_user_guide.html +/zh/docs/24.03_LTS_SP1/docs/EulerMaker/merge-configs.html: /zh/docs/24.03_LTS_SP1/tools/devops/eulermaker/merge_configs.html +/zh/docs/24.03_LTS_SP1/docs/EulerPipeline/EulerPipeline用户指南.html: >- + /zh/docs/24.03_LTS_SP1/tools/devops/eulerpipeline/eulerpipeline_user_guide.html +/zh/docs/24.03_LTS_SP1/docs/EulerPipeline/grammar/v1/v1.0_grammar.html: /zh/docs/24.03_LTS_SP1/tools/devops/eulerpipeline/v1.0_grammar.html +/zh/docs/24.03_LTS_SP1/docs/EulerPipeline/grammar/v1.1/v1.1_grammar.html: /zh/docs/24.03_LTS_SP1/tools/devops/eulerpipeline/v1.1_grammar.html +/zh/docs/24.03_LTS_SP1/docs/EulerPipeline/kernel-ci-guide.html: /zh/docs/24.03_LTS_SP1/tools/devops/eulerpipeline/kernel_ci_guide.html +/zh/docs/24.03_LTS_SP1/docs/AI/openEuler_Copilot_System/部署指南/无网络环境下部署指南.html: >- + /zh/docs/24.03_LTS_SP1/tools/ai/euler-copilot-framework/openEuler_intelligence/intelligent_assistant/quick_start/smart_web/deploy_guide/offline.html +/zh/docs/24.03_LTS_SP1/docs/AI/openEuler_Copilot_System/部署指南/插件部署指南/智能调优/插件智能调优部署指南.html: >- + /zh/docs/24.03_LTS_SP1/tools/ai/euler_copilot/deployment_guide/intelligent_tune/intelligent_tune_deployment_guide.html +/zh/docs/24.03_LTS_SP1/tools/ai/euler-copilot-framework/openEuler_intelligence/intelligent_assistant/advance/smart_tuning/deploy_guide/tune_deployment.html: >- + /zh/docs/24.03_LTS_SP1/tools/ai/euler-copilot-framework/openEuler_intelligence/intelligent_assistant/advance/smart_diagnosis/deploy_guide/diagnosis_deployment.html +/zh/docs/24.03_LTS_SP1/docs/AI/AI大模型服务镜像使用指南.html: >- + /zh/docs/24.03_LTS_SP1/tools/ai/euler-copilot-framework/ai_full_stack/ai_large_model_service_images_userguide/llm-service-image-user-guide.html +/zh/docs/24.03_LTS_SP1/docs/AI/AI容器镜像用户指南.html: >- + /zh/docs/24.03_LTS_SP1/tools/ai/euler-copilot-framework/ai_full_stack/ai_container_image_userguide/ai-container-image-user-guide.html +/zh/docs/24.03_LTS_SP1/docs/AI/oeDeploy使用指南.html: /zh/docs/24.03_LTS_SP1/devstation/oedeploy/oedeploy_user_guide.html +/zh/docs/24.03_LTS_SP1/docs/KubeEdge/KubeEdge使用文档.html: /zh/docs/24.03_LTS_SP1/edge_computing/kube_edge/kube_edge_usage_guide.html +/zh/docs/24.03_LTS_SP1/docs/KubeEdge/KubeEdge部署指南.html: >- + /zh/docs/24.03_LTS_SP1/edge_computing/kube_edge/kube_edge_deployment_guide.html +/zh/docs/24.03_LTS_SP1/docs/K3s/K3s部署指南.html: /zh/docs/24.03_LTS_SP1/edge_computing/k3s/k3s_deployment_guide.html +/zh/docs/24.03_LTS_SP1/docs/ROS/ROS用户指南.html: /zh/docs/24.03_LTS_SP1/edge_computing/ros/ros_user_guide.html +/zh/docs/24.03_LTS_SP1/docs/ROS/认识ROS.html: /zh/docs/24.03_LTS_SP1/edge_computing/ros/getting_to_know_ros.html +/zh/docs/24.03_LTS_SP1/docs/ROS/安装与部署.html: /zh/docs/24.03_LTS_SP1/edge_computing/ros/installation_and_deployment.html +/zh/docs/24.03_LTS_SP1/docs/ROS/使用方法.html: /zh/docs/24.03_LTS_SP1/edge_computing/ros/usage_guide.html +/zh/docs/24.03_LTS_SP1/docs/ROS/附录.html: /zh/docs/24.03_LTS_SP1/edge_computing/ros/appendix.html diff --git a/docs/en/contribute/_toc.yaml b/docs/en/contribute/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1612af25e99080e47b659683b200193b6d04c578 --- /dev/null +++ b/docs/en/contribute/_toc.yaml @@ -0,0 +1,11 @@ +label: Documentation Development Guide +isManual: true +sections: + - label: Overview + href: ./directory_structure_introductory.md + - label: Quick Start + href: ./contribution_process.md + - label: Tutorials + sections: + - label: Documentation Writing Specifications + href: ./documentation_writing_specifications.md diff --git a/docs/en/contribute/contribution_process.md b/docs/en/contribute/contribution_process.md new file mode 100644 index 0000000000000000000000000000000000000000..d18cbda7209eef2097c14da0473befc93f92af97 --- /dev/null +++ b/docs/en/contribute/contribution_process.md @@ -0,0 +1,171 @@ +# Quick Start + +## Overview + +This guide provides a structured approach to documentation development, covering three primary tasks: adding, modifying, and deleting documents. + +**Required Skills:** + +- Knowledge of the [openEuler documentation structure](./directory_structure_introductory.md) +- Proficiency in [Markdown writing specifications](./documentation_writing_specifications.md) + +## Standard Workflow + +Begin by determining the repository where the target document resides. Use the manual name to find the relevant [repository and directory path](./directory_structure_introductory.md#document-storage-locations). Below is a step-by-step workflow for document operations, illustrated using modifications to the _Installation Guide_ for server environments. + +1. Clone the repository. + + Fork the remote repository, clone it locally, and establish an upstream connection. + + ```bash + git clone https://gitee.com/wu-donger/docs.git + git remote add upstream https://gitee.com/openeuler/docs.git + ``` + +2. Switch to the target branch. + + Select the appropriate version branch (typically named `stable2-`). For version 25.03: + + ```bash + git fetch upstream + git checkout stable2-25.03 + git rebase upstream/stable2-25.03 + git checkout -b work25.03 + ``` + +3. Commit changes. + + Apply changes following the dedicated sections for [adding](#adding-documents), [editing](#editing-documents), or [removing](#removing-documents) documents. + + ```bash + git add . + git commit -m "Brief description of changes" + ``` + +4. Push changes to the remote repository and create a pull request (PR). + + Push changes and initiate a pull request: + + ```bash + git push origin work25.03 + ``` + +## Adding Documents + +This section guides developers through adding complete manuals. To add content to existing manuals (such as adding a "Common Tools" chapter to the _Upgrade Guide_), refer to [Editing Documents](#editing-documents). + +The following example demonstrates adding an _Upgrade Guide_ for server environments: + +1. Create a storage directory. + + Identify the scenario for your _Upgrade Guide_ and locate its [storage path](./directory_structure_introductory.md#document-storage-locations). Create a new folder to store all .md files for this guide: + + ```text{7-9} + ├─docs + | ├─en + | └─zh + | └─Server # Scenario: Server + | └─InstallationUpgrade # First-level directory: Installation and Upgrade + | ├─Installation # Manual: Installation Guide + | └─Upgrade # New folder: Upgrade Guide + | ├─openEuler_22.03_LTS_upgrade_and_downgrade.md # Content file + | └─_toc.yaml # Table of contents file + ``` + +2. Edit **_toc.yaml**. + + Create a **_toc.yaml** file in your new directory to maintain chapter display logic: + + ```yaml + label: Upgrade Guide # Manual: Upgrade Guide // [!code ++] + isManual: true # Identifies this as a manual TOC file // [!code ++] + description: Upgrade the openEuler OS. # Manual description // [!code ++] + sections: // [!code ++] + - label: Upgrade and Downgrade Guide # Chapter: Upgrade and Downgrade Guide // [!code ++] + href: ./openEuler_22.03_LTS_upgrade_and_downgrade.md # Content file reference // [!code ++] + ``` + +3. Link the manual to the scenario. + + Add a reference to your Upgrade Guide in the Server scenario's [_toc.yaml](https://gitee.com/openeuler/docs/blob/25.03/docs/en/server/_toc.yaml): + + ```yaml + label: Server # Scenario: Server + sections: + - label: Start Here # First-level directory: Start Here + sections: + - href: ./releasenotes/releasenotes/_toc.yaml # Manual: Release Notes + - href: ./quickstart/quickstart/_toc.yaml # Manual: Quick Start + - label: Installation and Upgrade # First-level directory: Installation and Upgrade + sections: + - href: ./installation_upgrade/installation/_toc.yaml # Manual: Installation Guide + ``` + +## Editing Documents + +Document modifications fall into three categories: + +- Content-only changes: Modify existing manual content without altering the TOC structure. For example, adding a new installation method to the "Installation Methods" chapter of the Installation Guide. + +- Adding/removing chapters: Create or delete content files and update **_toc.yaml** of the manual. + + Example: to add a "Common Upgrade Tools" chapter to the _Upgrade Guide_, first create **software.md** in the _Upgrade Guide_ directory, then update [**_toc.yaml**](https://gitee.com/openeuler/docs/blob/25.03/docs/zh/server/installation_upgrade/upgrade/_toc.yaml) to reference **software.md**. + + ```yaml + label: Upgrade Guide # Manual: Upgrade Guide + isManual: true # Identifies this as a manual TOC file + description: Upgrade the openEuler OS # Manual description + sections: + - label: Upgrade and Downgrade Guide # Chapter: Upgrade and Downgrade Guide + href: ./openEuler_22.03_LTS_upgrade_and_downgrade.md # Content file path + - label: Common Upgrade Tools # New chapter: Common Upgrade Tools // [!code ++] + href: ./software.md # New content file path // [!code ++] + ``` + +- Manual display position changes: Modify the scenario **_toc.yaml** file to adjust manual ordering. + + Example: To move the _Upgrade Guide_ above the _Installation Guide_ in the server scenario, edit [**_toc.yaml**](https://gitee.com/openeuler/docs/blob/25.03/docs/zh/server/_toc.yaml). + + ```yaml + label: Server # Scenario: Server + sections: + - label: Start Here # First-level directory: Start Here + sections: + - href: ./releasenotes/releasenotes/_toc.yaml # Manual: Release Notes + - href: ./quickstart/quickstart/_toc.yaml # Manual: Quick Start + - label: 'Installation and Upgrade' # First-level directory: Installation and Upgrade + sections: + - href: ./installation_upgrade/upgrade/_toc.yaml' # Upgrade Guide now appears first // [!code ++] + - href: ./installation_upgrade/installation/_toc.yaml' # Manual: Installation Guide // [!code ++] + - href: ./installation_upgrade/upgrade/_toc.yaml' // [!code --] + - label: 'System Administration' + sections: + - href: './administration/administrator/_toc.yaml' + - href: './administration/sysmaster/_toc.yaml' + - href: './administration/compa_command/_toc.yaml' + ``` + +## Removing Documents + +This section guides complete manual removal. To remove content from existing manuals (such as deleting the "Process Management" chapter from the _Administrator Guide_), refer to [Editing Documents](#editing-documents). + +Example workflow for removing the _Virtualization User Guide_ from the virtualization scenario: + +1. Locate and delete the manual directory at the [storage location](./directory_structure_introductory.md#document-storage-locations). + +2. Remove the manual reference from the virtualization scenario [**_toc.yaml**](https://gitee.com/openeuler/docs/blob/25.03/docs/zh/virtualization/_toc.yaml) file. + + ```yaml + label: Virtualization # Scenario: Virtualization + sections: + - label: Virtualization Platforms # First-level directory: Virtualization Platforms + sections: + - href: ./virtualization_platform/virtualization/_toc.yaml # Removed reference to the Virtualization User Guide // [!code --] + - href: ./virtualization_platform/stratovirt/_toc.yaml + ``` + +## Temporary Documentation Storage + +For documentation not yet ready for publication (under development or not mature enough for promotion), store files in the [**archive**](https://gitee.com/openeuler/docs/tree/25.03/Archive) directory. These documents must still follow writing conventions and can be moved to appropriate directories when ready for publication. + +> Note: Documents submitted to the **archive** directory are scheduled for future publication. Unmaintained documents will be purged. diff --git a/docs/en/contribute/directory_structure_introductory.md b/docs/en/contribute/directory_structure_introductory.md new file mode 100644 index 0000000000000000000000000000000000000000..65cb85ff663af0dba08244d541ced9f400450427 --- /dev/null +++ b/docs/en/contribute/directory_structure_introductory.md @@ -0,0 +1,799 @@ +# Overview + +## Introduction + +This document describes the development and release workflow for openEuler documents, along with the structure of the documentation repository. It also specifies the exact locations of each manual within the repository. + +![image](figures/architecture.png) + +The diagram above illustrates the documentation development and release process for openEuler. + +- The Document Center organizes community content into service scenarios and tools: + - Service scenarios: server, virtualization, cloud, edge computing, and embedded. + - Tools: community tools, DevOps, AI, graphical desktops, cloud-native tools, O&M, and security. +- Release process: + - Each scenario and tool has an associated directory structure file (**_toc.yaml**). These files reside in the **openEuler/docs** repository and are managed centrally by the Doc SIG. + - The SIG responsible for a document must link its directory structure file to the directory structure file of the relevant scenario or tool to ensure the document appears under the correct module. +- Documentation development: + - Documents are created in the **openEuler/docs** repository and the **docs** repositories of individual SIGs. + - Core feature documentation (such as release notes, quick start guides, installation, upgrades, administrator guides, configuration and logical volumes, network setup, and troubleshooting) is housed in the **openEuler/docs** repository and maintained by the Doc SIG. + - Feature-specific documentation, like the A-Tune User Guide, x2openEuler USer Guide, and oeAware User Guide, falls under the purview of the respective SIGs and is stored in their **docs** repositories. + - Each SIG maintains two types of files in the documentation repository: content files and directory structure files (**_toc.yaml**). Content files store the actual documentation, while directory structure files define the chapter hierarchy. + +The **docs** directory in the repository contains content published on the official website. It includes **en** and **zh** subdirectories for English and Chinese documentation, respectively, mirroring the website structure. The repository also features an **archive** directory for documents not yet ready for publication. Once finalized, these documents are moved to the **docs** directory for website display. + +```text +├─docs +│ ├─en +│ └─zh +├─archive +``` + +## Document Repository Structure Overview + +### Scenarios + +The Document Center organizes content into five business scenarios: server, virtualization, cloud, edge computing, and embedded. Each scenario maps to a specific subdirectory under **docs/{zh|en}** in the repository: **server**, **virtualization**, **cloud**, **edge_computing**, and **embedded**. The tools module is represented by the **tools** subdirectory. + +Below is the scenario-related directory structure (the following directory structures use **zh** as an example): + +```text +├─Archive +├─docs +│ ├─en +│ └─zh +│ ├─server +│ ├─virtualization +│ ├─cloud +│ ├─edge_computing +│ ├─embedded +│ └─tools +``` + +The tools module is further divided into submodules: community tools, DevOps, AI, desktop, cloud-native tools, O&M, and security. These are organized under the **tools** directory with corresponding subdirectories: **community_tools**, **devops**, **ai**, **desktop**, **cloud**, **maintenance**, and **security**. + +Below is the tool-related directory structure: + +```text{9-16} +├─docs +│ ├─en +│ └─zh +│ ├─server +│ ├─virtualization +│ ├─cloud +│ ├─edge_computing +│ ├─embedded +│ └─tools +│ ├─community_tools +│ ├─devops +│ ├─ai +│ ├─desktop +│ ├─cloud +│ ├─maintenance +│ └─security +``` + +### Directories + +Each scenario is organized into specific directories. For instance, the server scenario includes first-level directories like release notes, quick start, installation and upgrade, system administration, O&M, and security. + +Directory structure for the server scenario: + +```text{4-17} +├─docs +│ ├─en +│ └─zh +│ ├─server +│ │ ├─releasenotes +│ │ ├─quickstart +│ │ ├─installation_upgrade +│ │ ├─administration +│ │ ├─maintenance +| | ├─security +│ │ ├─memory_storage +│ │ ├─network +│ │ ├─performance +│ │ ├─development +│ │ ├─high_availability +│ │ ├─diversified_computing +│ │ └─_toc.yaml +│ ├─virtualization +│ ├─cloud +│ ├─edgecomputing +│ ├─embedded +│ └─tools +``` + +Some first-level directories are further divided into second-level directories. For example, the performance tuning directory under the server scenario includes subdirectories for overview, CPU tuning, system tuning, and tuning framework. + +Example directory structure for performance tuning: + +```text{13-22} +├─docs +│ ├─en +│ └─zh +│ ├─server +│ │ ├─releasenotes +│ │ ├─quickstart +│ │ ├─installation_upgrade +│ │ ├─administration +│ │ ├─maintenance +| | ├─security +│ │ ├─memory_storage +│ │ ├─network +│ │ ├─performance +│ │ │ ├─overall +│ │ │ │ └─system_resource +│ │ │ ├─cpu_optimization +│ │ │ │ ├─kae +│ │ │ │ └─sysboost +│ │ │ ├─system_optimization +│ │ │ │ └─atune +│ │ │ └─tuning_framework +│ │ │ └─oeaware +│ │ ├─development +│ │ ├─high_availability +│ │ ├─diversified_computing +│ │ └─_toc.yaml +│ ├─virtualization +│ ├─cloud +│ ├─edge_computing +│ ├─embedded +│ └─tools +``` + +### Manuals + +The directories contains various manuals. Taking the O&M directory under the server scenario as an example, it includes eight manuals, each corresponding to a directory in the documentation repository. + +Here is the directory structure for O&M under the server scenario: + +```text{9-17} +├─docs +│ ├─en +│ └─zh +│ ├─server +│ │ ├─releasenotes +│ │ ├─quickstart +│ │ ├─installation_upgrade +│ │ ├─administration +│ │ ├─maintenance +│ │ │ ├─aops +│ │ │ ├─common_skills +│ │ │ ├─common_tools +│ │ │ ├─gala +│ │ │ ├─kernel_live_upgrade +│ │ │ ├─syscare +│ │ │ ├─sysmonitor +│ │ │ └─trouble_shooting +| | ├─security +│ │ ├─memory_storage +│ │ ├─network +│ │ ├─performance +│ │ ├─development +│ │ ├─high_availability +│ │ ├─diversified_computing +│ │ └─_toc.yaml +│ ├─virtualization +│ ├─cloud +│ ├─edge_computing +│ ├─embedded +│ └─tools +``` + +Each manual includes one or more content files (.md files) corresponding to one or more chapters, along with a directory structure file (**_toc.yaml**). For example, the *Kernel Live Upgrade Guide* manual consists of three chapters: Installation and Deployment, Usage Guide, and Common Problems and Solutions. + +```text{14-18} +├─docs +│ ├─en +│ └─zh +│ ├─server +│ │ ├─quickstart +│ │ ├─releasenotes +│ │ ├─installation_upgrade +│ │ ├─administration +│ │ ├─maintenance +│ │ │ ├─aops +│ │ │ ├─common_skills +│ │ │ ├─common_tools +│ │ │ ├─gala +│ │ │ ├─kernel_live_upgrade +│ | │ │ ├─installation-and-deployment.md +│ | │ │ ├─usage-guide.md +│ | │ │ ├─common-problems-and-solutions.md +│ | │ │ └─_toc.yaml +| | ├─security +│ │ ├─memory_storage +│ │ ├─network +│ │ ├─performance +│ │ ├─development +│ │ ├─high_availability +│ │ ├─diversified_computing +│ │ └─_toc.yaml│ +│ ├─cloud +│ ├─edge_computing +│ ├─embedded +│ ├─tools +│ └─virtualization +``` + +## Directory Structure File Format + +Every scenario and manual includes an **_toc.yaml** file to organize the directory structure. The example below illustrates the placement of the **_toc.yaml** file for the virtualization scenario, with other scenarios adhering to the same logic. + +```text +├─docs +│ └─zh +│ ├─virtualization +│ │ ├─vitualization_platform +│ │ | ├─stratovirt +│ │ | | └─_toc.yaml // [!code highlight] +│ │ | ├─virtualization +│ │ | | └─_toc.yaml // [!code highlight] +│ │ └─_toc.yaml // [!code highlight] +``` + +### Manual Directory Structure File + +Each manual must have an **_toc.yaml** file to define the logical relationships among its chapters. + +Here is the **_toc.yaml** file for the *Kernel Live Upgrade Guide* manual: + +```yaml +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 + - label: Common Problems and Solutions + href: ./common-problems-and-solutions.md +``` + +- **label**: The manual title. +- **isManual**: Flags this file as a manual directory structure file, differentiating it from scenario files. +- **description**: A concise overview of the manual. +- **sections**: + - **label**: The chapter title. + - **href**: Path to the document file (preferably relative). + +### Scenario Directory Structure File + +Every scenario includes a **_toc.yaml** file that references the **_toc.yaml** files of its associated manuals. For example, here is the structure for the server scenario: + +```yaml +label: Server +sections: + - label: Release Notes + sections: + - href: ./releasenotes/releasenotes/_toc.yaml + - label: Quick Start + sections: + - href: ./quickstart/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/cve-ease/_toc.yaml + - href: ./security/cert_signature/_toc.yaml + - href: ./security/sbom/_toc.yaml + - href: ./security/shangmi/_toc.yaml + - label: Memory and Storage + sections: + - href: ./memory_storage/lvm/_toc.yaml + - href: ./memory_storage/etmem/_toc.yaml + - href: ./memory_storage/gmem/_toc.yaml + - href: ./memory_storage/hsak/_toc.yaml + - label: Network + sections: + - href: ./network/network_config/_toc.yaml + - href: ./network/gazelle/_toc.yaml + - label: Performance Optimization + sections: + - label: Overview + sections: + - href: ./system_resource/_toc.yaml + - label: Tuning Framework + sections: + - href: ./oeaware/_toc.yaml + - label: CPU Tuning + sections: + - href: ./sysboost/_toc.yaml + - href: ./kae/_toc.yaml + - label: System Tuning + sections: + - href: ./atune/_toc.yaml + - label: Application Development + sections: + - href: ./development/application_dev/_toc.yaml + - href: ./development/gcc/_toc.yaml + - label: High Availability + sections: + - href: ./high_availability/ha/_toc.yaml + - label: Diversified Computing + sections: + - href: ./diversified_computing/dpu_offload/_toc.yaml + - href: ./diversified_computing/dpu_os/_toc.yaml +``` + +- **label**: The scenario title. +- **description**: A short description of the scenario. +- **sections**: + - **label**: The name of the first-level directory. + - **sections**: + - **href**: A reference to the manual directory structure file. + +## Document Storage Locations + +openEuler documentation is hosted in the [openEuler/docs](https://gitee.com/openeuler/docs) repository and the documentation repositories of each SIG. The tables below list the specific storage paths for each manual. + +### Server + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ScenarioTypeManualLocation
ServerRelease NotesRelease Notesdocs/en/server/releasenotes/releasenotes
Quick StartQuick Startdocs/en/server/quickstart/quickstart
Installation and UpgradeInstallation Guidedocs/en/server/installation_upgrade/installation
Upgrade Guidedocs/en/server/installation_upgrade/upgrade
OS Administrationadministrator Guidedocs/en/server/administration/administrator
sysMaster User Guidedocs/en/server/administration/sysmaster
Compatibility Commandsdocs/en/server/administration/compa_command
O&MA-Ops User Guidedocs/en/server/maintenance/aops
gala User Guidedocs/en/server/maintenance/gala
sysmonitor User Guidedocs/en/server/maintenance/sysmonitor
Kernel Live Upgrade Guidedocs/en/server/maintenance/kernel_live_upgrade
SysCare User Guidedocs/en/server/maintenance/syscare
Common Skillsdocs/en/server/maintenance/common_skills
Commonly Used Tools for Location and Demarcationdocs/en/server/maintenance/common_tools
Troubleshootingdocs/en/server/maintenance/troubleshooting
SecuritySecurity Hardening Guidedocs/en/server/security/secharden
Trusted Computingdocs/en/server/security/trusted_computing
secGear Developer Guidedocs/en/server/security/secgear
CVE-ease Design Overviewdocs/en/server/security/cve-ease
Overview of Certificates and Signaturesdocs/en/server/security/cert_signature
SBOM User Guidedocs/en/server/security/sbom
ShangMi Overviewdocs/en/server/security/shangmi
Memory and StorageLogical Volume Configuration and Managementdocs/en/server/memory_storage/lvm
etmem User Guidedocs/en/server/memory_storage/etmem
GMEM User Guidedocs/en/server/memory_storage/gmem
HSAK Developer Guidedocs/en/server/memory_storage/hsak
NetworkNetwork Configurationdocs/en/server/network/network_config
Gazelle User Guidedocs/en/server/network/gazelle
Performance OptimizationSystem Resources and Performancedocs/en/server/performance/overall/system_resource
oeAware User Guidedocs/en/server/performance/tuning_framework/oeaware
sysBoost User Guidedocs/en/server/performance/cpu_optimization/sysboost
Using the Kunpeng Accelerator Engine (KAE)docs/en/server/performance/cpu_optimization/kae
A-Tune User Guidedocs/en/server/performance/system_optimization/atune
APplication DevelopmentApplication Development Guidedocs/en/server/development/application_dev
GCC User Guidedocs/en/server/development/gcc
High AvailabilityHA User Guidedocs/en/server/high_availability/ha
Diversified ComputingDirect Connection Aggregation User Guidedocs/en/server/diversified_computing/dpu_offload
DPU-OSdocs/en/server/diversified_computing/dpu_os
+ +### Virtualization + + + + + + + + + + + + + + + + + + + + + + +
ScenarioTypeManualLocation
VirtualizationVirtualization PlatformsVirtualization User Guidedocs/en/virtualization/virtualization_platform/virtualization
StratoVirt User Guidedocs/en/virtualization/virtualization_platform/stratovirt
OpenStack User Guideopenstack-docs/docs/zh
+ +### Cloud + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ScenarioTypeManualLocation
CloudContainer EnginesiSula Container Enginedocs/en/cloud/container_engine/isula_container_engine
Docker Containerdocs/en/cloud/container_engine/docker_engine
Container FormsSecure Containerdocs/en/cloud/container_form/secure_container
System Containerdocs/en/cloud/container_form/system_container
Container RuntimesKuasar Multi-Sandbox Container Runtimedocs/en/cloud/container_runtime/kuasar
Container Image BuildingContainer Image Buildingdocs/en/cloud/image_builder/isula-build
Cloud-Native OSKubeOS User Guidedocs/en/cloud/kubeos/kubeos
Cloud Base OSNestOS User Guidedocs/en/cloud/nestosS/nestos
Hybrid DeploymentRubik User Guidedocs/en/cloud/hybrid_deployment/rubik
oncn-bwm User Guidedocs/en/cloud/hybrid_deployment/oncn-bwm
Cluster DeploymentKubernetes Cluster Deployment Guidedocs/en/cloud/cluster_deployment/kubernetes
iSulad + Kubernetes Cluster Deployment Guidedocs/en/cloud/cluster_deployment/isulad+k8s
Service MeshKmesh User Guidedocs/en/cloud/kmesh/kmesh
+ +### Edge Computing + + + + + + + + + + + + + + + + + + +
ScenarioTypeManualLocation
Edge Computing / KubeEdge User Guidedocs/en/edge_computing/kube_edge
K3s Deployment Guidedocs/en/edge_computing/k3s
+ +### Embedded + + + + + + + + + + + + + + + + + + +
ScenarioTypeManualLocation
Embedded / openEuler Embedded User Guideyocto-meta-openeuler/docs
UniProton User Guidedocs/en/embedded/uniproton
+ +### Tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ToolTypeManualLocation
Community ToolsImage Creationisocut User Guidedocs/en/tools/community_tools/image_custom/isocut
imageTailor User Guidedocs/en/tools/community_tools/image_custom/image_tailor
CompilationGCC User Guidedocs/en/server/development/gcc
Performance OptimizationA-Tune User Guidedocs/en/server/performance/system_optimization/atune
oeAware User Guidedocs/en/server/performance/tuning_framework/oeaware
Migrationmigration-tools User Guidedocs/en/tools/community_tools/migration/migration_tools
VirtualizationEulerLauncher User Guidedocs/en/tools/community_tools/virtualization/euler_launcher
epkgepkg User Guidedocs/en/tools/community_tools/epkg/epkg_use
autopkg User Guidedocs/en/tools/community_tools/epkg/autopkg
Community ServicesSource Code Managementpatch-trackingdocs/en/tools/devops/code_manage/patch_tracking
Package Managementpkgshipdocs/en/tools/devops/package_manage/pkgship
AI / openEuler Copilot Systemdocs/en/tools/ai/openeuler_copilot_system
LLM Service Image User Guidedocs/en/tools/ai/ai_large_model_service_images_userguide
AI Container Image User Guidedocs/en/tools/ai/ai_container_image_userguide
Graphical Desktops / GNOME User Guidedocs/en/tools/desktop/gnome
UKUI User Guidedocs/en/tools/desktop/ukui
DDE User Guidedocs/en/tools/desktop/dde
Kiran User Guidedocs/en/tools/desktop/kiran
Xfce User Guidedocs/en/tools/desktop/xfce
Cloud Native / CTinspector User Guidedocs/en/tools/cloud/ctinspector
CPDS User Guidedocs/en/tools/cloud/cpds
PilotGo User Guidedocs/en/tools/cloud/pilotgo
O&MHot Patch CreationSysCare User Guidedocs/en/server/maintenance/syscare
System Monitoringsysmonitor User Guidedocs/en/server/maintenance/sysmonitor
Security / secGear User Guidedocs/en/server/security/secgear
diff --git a/docs/en/contribute/documentation_writing_specifications.md b/docs/en/contribute/documentation_writing_specifications.md new file mode 100644 index 0000000000000000000000000000000000000000..0793364707306d024d784d2f2d3addc134251dd2 --- /dev/null +++ b/docs/en/contribute/documentation_writing_specifications.md @@ -0,0 +1,310 @@ +# Documentation Writing Specifications + +This writing specification outlines the requirements for the structure, content elements, and language style of documents in the openEuler docs repository to ensure a consistent style across openEuler documentation. + +Before starting to write openEuler documentation, familiarize yourself with this specification. **Improvement suggestions are welcome**. + +## Document Structure Specifications + +Feature manuals typically include an overview, background introduction, operational documentation (installation, deployment, and usage guide), frequently asked questions, and appendix. Developers may add or remove sections based on project needs. +For reference, see the [A-Tune example](https://docs.openeuler.org/en/docs/22.03_LTS_SP2/docs/A-Tune/A-Tune.html), which includes the content below. + +### Overview + +Provide a brief introduction to the feature definition and functionality, followed by a description of the target audience. + +**Example**: + +```markdown +This document describes how to install and use A-Tune, which is a performance self-optimization software for openEuler. + +This document is intended for developers, open-source enthusiasts, and partners who use the openEuler system and want to know and use A-Tune. You need to have basic knowledge of the Linux OS. +``` + +### Background Introduction + +Background documentation should cover the feature context, introduction, and architecture. Common titles include: `Understanding xxx`. + +### Operational Documentation + +- Requirements + Specify the hardware and software environment, permissions, and other prerequisites needed to perform the operations. + + **Example**: + + ```markdown + Hardware requirements: xxx processor. + Software requirements: openEuler version xx, root privileges. + ``` + +- Steps + Operational steps include **installation and deployment** and **usage instructions**. + + Guidelines for writing steps: + - Each step should describe a single action. Avoid combining multiple actions into one step. + - Clearly indicate optional conditions if steps are optional. + - For steps involving interface calls (such as tools or SQL statements), provide explanations for the interfaces used. + +- Result Verification + Describe how to verify the correctness of the operation results. If verification is closely tied to a step, include it within that step. For example, the return information from executing an SQL statement. + +### Appendix + +The appendix can provide definitions for terms and abbreviations. + +## Content Element Specifications + +### Naming + +When creating new documents, add a MarkDown file (with the `.md` extension) to the appropriate directory. + +- **Rule**: Ensure the document name is unique and does not conflict with existing files. Rename if necessary. +- **Rule**: Use **English** for all document names. +- **Rule**: Avoid parentheses in file names, as they can disrupt directory display. Replace them with underscores (`_`) or hyphens (`-`). + +**Example**: + +```text +installation_and_deployment.md # Document for "Installation and Deployment" +``` + +### Headings + +- **Rule**: Headings should clearly and concisely summarize the section content without omitting key details. +- **Rule**: For procedural documents, use verb-object structures (for example, "Requesting Permissions"). Ensure consistency in heading structures for the same level and type. +- **Rule**: Avoid ending headings with punctuation. Use parentheses for additional context and exclude special characters like `?`. +- **Rule**: Separate headings from body text with a blank line. +- **Rule**: Format headings with `#` followed by a space and the heading text. Increment heading levels one at a time, starting with the top-level heading. + +**Example**: + +```markdown +# Level 1 Heading +## Level 2 Heading +### Level 3 Heading +#### Level 4 Heading +##### Level 5 Heading +###### Level 6 Heading +``` + +### Body + +**Formatting instructions**: + +- *Italic*: Enclose text in single asterisks (`*`) for italic formatting. + + ```txt + *italic text* + ``` + +- **Bold**: Enclose text in double asterisks (`**`) for bold formatting. + + ```txt + **bold text** + ``` + +- ***Bold italic***: Enclose text in triple asterisks (`***`) for bold italic formatting. + + ```txt + ***bold italic text*** + ``` + +- Escape: Use a backslash (`\`) to escape special characters. + + ```txt + \ + ``` + +**Rule**: Always use the backslash (`\`) to escape characters as required. + +**Rule**: Separate consecutive escape characters with a space, for example, `\{ \}`. + +**Rule**: Maintain both Chinese and English versions of documentation. For translation support, contact or . + +### Images + +**Usage**: + +```bash +![alt text](./path/to/image.png) + +![alt text](./path/to/image.png "optional title") +``` + +**Rule**: Place all images in the **figures** subdirectory of the document folder. For example, the [A-Tune User Guide](https://docs.openeuler.org/en/docs/22.03_LTS_SP2/docs/A-Tune/A-Tune.html) stores its images in [this directory](https://gitee.com/openeuler/docs/tree/stable2-22.03_LTS_SP2/docs/en/docs/A-Tune/figures). Always use **relative paths** for references. + +**Rule**: Only use original or properly licensed images to avoid copyright issues. + +**Rule**: Position images adjacent to their relevant text sections. + +**Rule**: The preferred image format is PNG, with JPG as an alternative. Images must not exceed 640 pixels in height or 393 pixels in width, and should ideally be under 150 KB in file size. + +**Rule**: For screenshots, crop to focus on essential content within these dimensions. Use red borders or text labels to emphasize important details in graphics. + +**Example**: + +```markdown +![](./figures/ci_check_result.jpg) +``` + +The `./` prefix in the path is mandatory for proper online display. + +### Code Blocks + +Code examples illustrate how to implement specific features, serving as references for developers during coding and debugging. + +**Rule**: Ensure the code is logically and syntactically correct. +**Rule**: Clearly separate input and output sections where applicable. +**Rule**: Include comments to explain critical steps in the code. +**Rule**: Enclose inline code and commands in single backticks (for example, `code snippet`). +**Rule**: Format block code with either triple backquotes or four-space indentation (no TABs), preceded and followed by blank lines. + +**Examples** + +- Inline code + + ```markdown + The `printf()` function + ``` + +- Block code + + ```python + #!/usr/bin/env python3 + print("Hello, World!") + ``` + + ```c + #include + int main(void) + { + printf("Hello world\n"); + } + ``` + +### Lists + +- **Unordered lists**: Represented by asterisks (`*`), plus signs (`+`), or hyphens (`-`), each followed by a space. Maintain uniform markers within a list. + + ```markdown + * First item + * Second item + * Third item + + + First item + + Second item + + Third item + + + - First item + - Second item + - Third item + ``` + +- **Ordered lists**: Numbered items with a trailing period (`.`). + + ```markdown + 1. First item + 2. Second item + 3. Third item + ``` + +- **Nested lists**: Sub-items indented by four spaces (no TABs). + + ```markdown + 1. First item: + - Sub-item A + - Sub-item B + 2. Second item: + - Sub-item A + - Sub-item B + ``` + +**Rule**:Use ordered lists when items follow a clear sequence or logical order. + +**Rule**:Use unordered lists for parallel relationships or multiple-choice options. + +**Rule**:Omit punctuation for terms or phrases in list items. + +**Rule**:Include periods for complete sentences in list items. + +**Rule**:If mixing phrases and sentences is unavoidable, apply periods to all items. + +**Rule**:Alternatively, separate items with semicolons, ending the final item with a period. + +### Annotation Symbols + +The following annotation symbols may appear in documentation to indicate different scenarios and levels of importance. Select the appropriate symbol based on the significance of the information being highlighted. + +| Symbol | Purpose/Meaning | Usage | +|--------|----------------|-------| +| **Warning** | Failure to follow this warning may cause task interruption or unexpected results, though recovery is possible. | `> [!WARNING]Warning`
`> Content` | +| **Note** | Provides helpful tips or useful reference information. | `> [!NOTE]Note`
`> Content` | + +> [!NOTE]Note +> +> - Choose the appropriate annotation symbol based on the documentation context and apply the correct styling. +> - Notes/Warnings can contain nested ordered/unordered lists, but avoid tables and code blocks. +> - To prevent style breaks, ensure `>` remains continuous. +> - Keep note/warning content concise. Consider placing lengthy explanations in the main text or splitting them into sections. Avoid excessive empty lines within styled blocks. + +### Links + +**Rule**: Verify link destinations exist to prevent navigation errors. Use standard Markdown syntax instead of HTML. + +**Examples**: + +```markdown +- Website link +This is the link to the [openEuler website](https://www.openeuler.org/en/). + +- Relative path +[CI Pipeline Rules](./ci_rules.md) +``` + +### Tables + +**Rule:** Use standard Markdown table syntax in documentation. Avoid HTML table formatting. + +**Example:** + +```markdown +| Header 1 | Header 2 | +| -------- | -------- | +| Cell 1 | Cell 2 | +| Cell 3 | Cell 4 | +``` + +**Alignment options:** + +- `-:` Right-aligned content +- `:-` Left-aligned content +- `:-:` Centered content + +**Rule**: Omit punctuation when all cells in a column contain terms/phrases. + +**Rule**: Use periods when all cells contain complete sentences. + +**Rule**: Apply periods uniformly if mixed content cannot be avoided. + +### Punctuation + +**Rule:** For numbered/bulleted lists, use periods consistently if items are complete sentences. Omit punctuation if all items are phrases. **Maintain uniformity: either apply punctuation throughout or omit it entirely.** + +**Rule:** Always use half-width (ASCII) numerals. + +**Rule:** Reserve exclamation marks exclusively for warnings about critical consequences involving equipment safety or personal harm. Avoid exclamation marks in all other contexts. + +## Language Style Specifications + +**Rule:** Submissions must exclusively pertain to openEuler features. + +**Rule:** Content must not include sensitive information or material exhibiting strong racial/gender discrimination. + +**Rule:** All submissions must be original work without intellectual property infringement. + +**Rule:** Content must remain factual and objective. Avoid exaggerated promotional language. + +**Unacceptable documentation practices** + +Submitting excessive pull requests in a short timeframe via automated tools to address trivial issues (such as typos, grammar errors, date inaccuracies, and awkward phrasing) without substantive value. diff --git a/docs/en/contribute/figures/architecture.png b/docs/en/contribute/figures/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..313320989fcc7510ddf12483f81d3a6ac4e11d90 Binary files /dev/null and b/docs/en/contribute/figures/architecture.png differ diff --git a/docs/en/faq/_toc.yaml b/docs/en/faq/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1458aeecc0f5e856573225f8aca85ff9b336dc60 --- /dev/null +++ b/docs/en/faq/_toc.yaml @@ -0,0 +1,65 @@ +label: Frequently Asked Questions (FAQ) +isManual: true +sections: + - label: General + sections: + - label: Community FAQ + href: ./general/general_faq.md + - label: Feature FAQ + href: ./general/project_intro_faq.md + - label: Server + sections: + - label: System Administration + href: ./server/administration_faqs.md + - label: System Performance + href: ./server/system_management_faq.md + - label: Installation (Server) + href: ./server/installation_faq1.md + - label: Installation (Raspberry Pi) + href: ./server/installation_faq2.md + - label: Migration + href: ./server/migration_faqs.md + - label: Trusted Computing + href: ./server/trusted_computing_faqs.md + - label: A-Tune + href: ./server/atune_faqs.md + - label: Kernel Live Upgrade + href: ./server/kernel_faqs.md + - label: SysCare + href: ./server/syscare_faqs.md + - label: Application Development + href: ./server/applicationdev_faqs.md + - label: Cloud + sections: + - label: iSulad + href: ./cloud/isula_faqs.md + - label: Docker + href: ./cloud/docker_faqs.md + - label: Container Image Building + href: ./cloud/isula_build_faqs.md + - label: Kubernetes + href: ./cloud/kubernetes_faqs.md + - label: Kmesh + href: ./cloud/kmesh_faqs.md + - label: Virtualization + sections: + - label: Virtualization + href: ./virtualization/virt_faq.md + - label: Community Tools + sections: + - label: AI + href: ./community_tools/deployment-guide-for-network-environment-faqs.md + - label: AI (Offline Environment) + href: ./community_tools/deployment-guide-for-offline-environment-faqs.md + - label: isocut + href: ./community_tools/isocut_faqs.md + - label: DDE + href: ./community_tools/dde_faqs.md + - label: Patch Tracking + href: ./community_tools/patch_tracking_faqs.md + - label: Xfce + href: ./community_tools/xfce_faq.md + - label: Case Library + sections: + - label: Case Collection + href: ./caselibrary/caselibrary_menu.md diff --git a/docs/en/faq/caselibrary/anaconda.md b/docs/en/faq/caselibrary/anaconda.md new file mode 100644 index 0000000000000000000000000000000000000000..46f24ea20a1b7dab7e25961dc744e02303172285 --- /dev/null +++ b/docs/en/faq/caselibrary/anaconda.md @@ -0,0 +1,49 @@ +# Common Drive Issues in the Anaconda Installer + +## 1. Missing System Drives During Installation + +### Context + +The installation interface fails to display available drives for OS installation. + +![](./figures/drives_missing.png) + +### Symptom + +- The installation wizard shows no available drives. +- Drive partitions remain visible via `lsblk` in the terminal (**Ctrl+Alt+F2**) + +![](./figures/drives_missing_lsblk.png) + +### Possible Causes + +System logs at **/tmp/storage.log** indicate drive scanning failures, typically caused by residual partition metadata. + +### Solution + +1. Access the terminal (**Ctrl+Alt+F2**). +2. Use `fdisk` to remove existing partitions. +3. Reformat the drive. + +## 2. Installation Hangs on Drive Scan + +### Context + +Installation process freezes during drive scanning. + +### Symptom + +The system becomes unresponsive at drive scanning stage. + +![](./figures/drive_scanning_stuck.png) + +### Possible Causes + +1. System logs at **/tmp/storage.log** show frozen drive scanning operation. +2. Manual drive scan commands fail to complete, indicating drive corruption or invalid sector data. + +### Solution + +1. Force reboot the system. +2. Reformat affected drive. +3. Restart the installation process. diff --git a/docs/en/faq/caselibrary/audit.md b/docs/en/faq/caselibrary/audit.md new file mode 100644 index 0000000000000000000000000000000000000000..5bb6e07529d1baa8125648ebe7e9a4d6927c6973 --- /dev/null +++ b/docs/en/faq/caselibrary/audit.md @@ -0,0 +1,60 @@ +# System Halt Caused by Audit Logs Consuming Drive Space + +## Context + +An unplanned system halt occurred, necessitating diagnosis. + +## Symptom + +Audit service logs confirmed it initiated the halt, contrary to configured log rotation settings. +The audit log directory contained excessive files occupying full drive capacity: + +```txt +-r--------. 1 root root 6291639 May 14 04:10 audit.log.968 +-r--------. 1 root root 6291629 May 14 03:28 audit.log.969 +-r--------. 1 root root 6291630 May 14 02:45 audit.log.970 +-r--------. 1 root root 6291627 May 14 02:03 audit.log.971 +-r--------. 1 root root 6291546 May 14 01:20 audit.log.972 +-r--------. 1 root root 6291689 May 14 00:38 audit.log.973 +-r--------. 1 root root 6291705 May 13 23:57 audit.log.974 +-r--------. 1 root root 6291528 May 13 23:14 audit.log.975 +... +``` + +## Possible Causes + +The issue appears to stem from failed audit log rotation. The **auditd.conf** settings is as follows: + +```txt +... +max_log_file = 6 // 6 MB log file size limit +num_logs = 5 // Maximum of 5 log files +... +admin_space_left = 50 +admin_space_left_action = halt // System halts if space drops below the threshold +... +``` + +The configuration allows only 5 log files, but the actual count exceeded this limit. The system halt was expected behavior. + +Message logs revealed: + +```txt +... +2024-06-09T04:59:46.424433+08:00 localhost auditd[21699]: Audit daemon rotating long files with keep option +... +``` + +The logs show rotation used the "keep option." The **auditd.conf** setting is as follows: + +```txt +... +max_log_file_action = keep_logs // Similar to rotate but overrides num_logs setting. +... +``` + +The root cause is that `max_log_file_action = keep_logs` disabled the `num_logs = 5` limit, allowing logs to accumulate. + +## Solution + +Change `max_log_file_action` to `rotate`. diff --git a/docs/en/faq/caselibrary/caselibrary_menu.md b/docs/en/faq/caselibrary/caselibrary_menu.md new file mode 100644 index 0000000000000000000000000000000000000000..afd1cbce3e567f415edc104089448f54c7ba0618 --- /dev/null +++ b/docs/en/faq/caselibrary/caselibrary_menu.md @@ -0,0 +1,19 @@ +# openEuler Case Collection + +| No. | Source | Category | Keywords | Title | +| --- | ------------------ | --------------- | ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 1 | Developer feedback | Core services | systemd-logind, NIS | [systemd-logind.service Failed to Retrieve NIS User Information](https://gitee.com/openeuler/docs/blob/common/docs/en/faq/caselibrary/systemd-logind.md) | +| 2 | Developer feedback | Storage | Mount, sysroot, cryptography | [/sysroot Mount Failure](https://gitee.com/openeuler/docs/blob/common/docs/en/faq/caselibrary/mountsysroot.md) | +| 3 | Developer feedback | Core services | Audit, Logs | [System Halt Caused by Audit Logs Consuming Drive Space](https://gitee.com/openeuler/docs/blob/common/docs/en/faq/caselibrary/audit.md) | +| 4 | Developer feedback | Containers | Docker, umask | [Configuring Container umask Values in Docker](https://gitee.com/openeuler/docs/blob/common/docs/en/faq/caselibrary/umask.md) | +| 5 | Developer feedback | Containers | Docker, container termination | [Docker Container Terminates After a Certain Period](https://gitee.com/openeuler/docs/blob/common/docs/en/faq/caselibrary/docker.md) | +| 6 | Developer feedback | Core services | kpatch, hot patch error | [Kernel Hot patch Creation Issue: dmesg Reporting Missing sssnic Module](https://gitee.com/openeuler/docs/blob/common/docs/en/faq/caselibrary/sssnic.md) | +| 7 | Developer feedback | Compute | 22.03-LTS, Zabbix setup | [Zabbix Installation Guide for openEuler 22.03 LTS](https://gitee.com/openeuler/docs/blob/common/docs/en/faq/caselibrary/zabbix.md) | +| 8 | Developer feedback | Containers | iSulad, gRPC, Rest | [Accessing iSulad Services Through gRPC and REST Protocols](https://gitee.com/openeuler/docs/blob/common/docs/en/faq/caselibrary/isulad.md) | +| 9 | Developer feedback | Storage/Compute | LVM, storage | [LVM Label Corruption](https://gitee.com/openeuler/docs/blob/common/docs/en/faq/caselibrary/lvm.md) | +| 10 | Developer feedback | Containers | pvs, vgs | ["Unknown" Errors in pvs or vgs](https://gitee.com/openeuler/docs/blob/common/docs/en/faq/caselibrary/pvs_vgs.md) | +| 11 | Developer feedback | Storage/Compute | kdump, vmcore | [kump FAQ](https://gitee.com/openeuler/docs/blob/common/docs/en/faq/caselibrary/crash.md) | +| 12 | Developer feedback | Installation | efivars | [EFI Variables Installation Errors](https://gitee.com/openeuler/docs/blob/common/docs/en/faq/caselibrary/efivars.md) | +| 13 | Developer feedback | Installation | Rebranding | [Rebranding FAQ](https://gitee.com/openeuler/docs/blob/common/docs/en/faq/caselibrary/rebanding.md) | +| 14 | Developer feedback | Installation | Anaconda | [Common Drive Issues in the Anaconda Installer](https://gitee.com/openeuler/docs/blob/common/docs/en/faq/caselibrary/anaconda.md) | +| 15 | Developer feedback | Installation | System files | [System File Recovery FAQ](https://gitee.com/openeuler/docs/blob/common/docs/en/faq/caselibrary/sysfile.md) | \ No newline at end of file diff --git a/docs/en/faq/caselibrary/crash.md b/docs/en/faq/caselibrary/crash.md new file mode 100644 index 0000000000000000000000000000000000000000..c8e79e0ec25392d37f1deb54f386d96d9cd98a12 --- /dev/null +++ b/docs/en/faq/caselibrary/crash.md @@ -0,0 +1,138 @@ +# kump FAQ + +## 1. kdump Service Startup Failure + +### Symptom + +The `systemctl status kdump` command reports the service status as "failed." + +### Possible Causes and Solutionss + +1. The `crashkernel` parameter fails to reserve memory. + + The error log from `systemctl status kdump` includes: + + ```bash + Aug 10 15:26:20 localhost.localdomain kdumpctl[772]: No memory reserved for crash kernel + Aug 10 15:26:20 localhost.localdomain kdumpctl[772]: Starting kdump: [FAILED] + ``` + + The `crashkernel` parameter typically reserves memory in low memory (below 4 GB). Under heavy memory usage, this reservation may fail, preventing kdump from starting. + + **Solution**: Modify the boot parameter to `crashkernel=size,high`, enabling memory reservation from high memory. + +### Possible Causes and Solutionss + +1. The `crashkernel` parameter fails to reserve memory. + + The error log from `systemctl status kdump` includes: + + ```bash + Aug 10 15:26:20 localhost.localdomain kdumpctl[772]: No memory reserved for crash kernel + Aug 10 15:26:20 localhost.localdomain kdumpctl[772]: Starting kdump: [FAILED] + ``` + + The `crashkernel` parameter typically reserves memory in low memory (below 4 GB). Under heavy memory usage, this reservation may fail, preventing kdump from starting. + + **Solution**: Modify the boot parameter to `crashkernel=size,high`, enabling memory reservation from high memory. + +2. Kernel configuration mismatch prevents `dracut` from creating `kdump.img`. + + `systemctl status kdump` shows errors similar to the follows: + + ```bash + Aug 10 16:25:52 localhost.localdomain kdumpctl[3972]: dracut-install: ERROR: installing 'loop' + Aug 10 16:25:52 localhost.localdomain kdumpctl[2225]: dracut: FAILED: /usr/lib/dracut/dracut-install -D /var/tmp/dracut.a9swIC/initramfs -N mdio_gpi|usb_8d> + Aug 10 16:25:52 localhost.localdomain dracut[2271]: FAILED: /usr/lib/dracut/dracut-install -D /var/tmp/dracut.a9swIC/initramfs -N mdio_gpi|usb_8dev|et1011c> + Aug 10 16:25:52 localhost.localdomain kdumpctl[2225]: dracut: installkernel failed in module squash + Aug 10 16:25:52 localhost.localdomain dracut[2271]: installkernel failed in module squash + Aug 10 16:25:53 localhost.localdomain kdumpctl[1541]: mkdumprd: failed to make kdump initrd + Aug 10 16:25:53 localhost.localdomain kdumpctl[1541]: Starting kdump: [FAILED] + ``` + + This error occurs because `dracut` requires **squashfs.ko**, **loop.ko**, and **delay.ko**. If any of these modules are missing, `dracut` fails. + + This issue is unlikely in official openEuler LTS versions, as they include these .ko files. If you compiled the kernel, verify these configuration options: + + ```bash + CONFIG_SQUASHFS=m + + CONFIG_BLK_DEV_LOOP=m + + CONFIG_OVERLAY_FS=m + ``` + + These options must be set to `m` to build the .ko files, not `y`. + +3. KASLR is enabled and `/proc/sys/kernel/kptr_restrict` is set to 2. + + `systemctl status kdump` returns these errors: + + ```bash + Aug 10 14:55:04 localhost.localdomain kdumpctl[637422]: Can't find kernel text map area from kcore + Aug 10 14:55:04 localhost.localdomain kdumpctl[637422]: Cannot load /boot/vmlinuz-4.18.0-147.5.2.1.h579.hugetlb.eulerosv2r10.x86_64+ + Aug 10 14:55:04 localhost.localdomain kdumpctl[637001]: kexec: failed to load kdump kernel + Aug 10 14:55:04 localhost.localdomain kdumpctl[637001]: Starting kdump: [FAILED] + ``` + + This typically occurs on x86 systems, as Address Space Layout Randomization (KASLR) is not yet enabled on AArch64. + + With KASLR enabled, kdump cannot retrieve kernel layout information from **/proc/kcore**. Additionally, if **/proc/sys/kernel/kptr_restrict** is set to 2, information in **/proc/kallsyms** is hidden. These combined factors prevent kdump from starting. + + **Solution**: Set **/proc/sys/kernel/kptr_restrict** to 1, which allows only the root user to view **/proc/kallsyms**. Then, start kdump as **root**. + +## 2. kdump Service Active, But vmcore Generation Fails + +### Symptom + +`systemctl status kdump` indicates the service is active, but no vmcore file is generated after a system crash and reboot. + +### Possible Causes and Solutions + +1. Insufficient memory is reserved for `crashkernel`, resulting in out-of-memory (OOM). + + The crash kernel requires sufficient memory to launch. An OOM error likely occurs because a kernel object consumes excessive memory. Official openEuler versions generally avoid this issue, but self-compiled kernels require careful attention. Check serial port logs to confirm if an OOM error occurred. + + **Solution**: Increase the value of the `crashkernel` boot parameter. If memory reservation fails after the increase, use `crashkernel=size,high` to reserve memory. + +2. `SECTIONS_SIZE_BITS` is incompatible. + + The `makedumpfile` tool (invoked by the kdump service) completes the vmcore dump. The `SECTIONS_SIZE_BITS` definition within `makedumpfile` must match the kernel. `SECTIONS_SIZE_BITS` is defined in the kernel file **arch/arm64/include/asm/sparsemem.h**. Official openEuler AArch64 versions define it as 27, and the `SECTIONS_SIZE_BITS` in kdump is modified to 27 to match. However, the community source code sets `SECTIONS_SIZE_BITS` to 30, which is incompatible with kdump and causes `makedumpfile` to fail vmcore generation. + + **Solution**: Modify `SECTIONS_SIZE_BITS` in the kernel source code **arch/arm64/include/asm/sparsemem.h** to 27. + +3. Out-of-band hardware watchdog resets, interrupting the vmcore dump. + + kdump vmcore dumps can be time-consuming, depending on system memory usage and drive write speeds. An out-of-band hardware watchdog might interrupt the vmcore dump process. + + **Solution**: Disable the out-of-band hardware watchdog or reset its timeout value in kdump. + +4. Drive reporting is abnormal. + + Improper drive reporting can prevent vmcore from being saved correctly. Check serial port logs to confirm these issues. + +## 3. crash Tool Fails to Parse the Generated vmcore + +### Symptom + +Parsing the generated vmcore with `crash vmcore vmlinux` results in an error, preventing normal parsing. + +### Possible Causes and Solutions + +1. vmcore and vmlinux versions do not match. + + `crash` requires a vmlinux file compiled from the kernel source code to parse a vmcore. The vmlinux version must match the system version that dumped the vmcore for successful parsing. + + **Solution**: Use a vmlinux file with the same version as the vmcore. + +2. Missing `strings` Command + + `crash` relies on the `strings` command for vmcore parsing. Its absence causes parsing failures. + + **Solution**: The `binutils` package provides the `strings` command. Install binutils or manually copy the `strings` command and its dependencies. + +3. vmcore is corrupted. + + Check **kdump_status.log** to determine if the kdump vmcore dump process completed successfully. + + **Solution**: Trigger a system panic again to generate a new vmcore. diff --git a/docs/en/faq/caselibrary/docker.md b/docs/en/faq/caselibrary/docker.md new file mode 100644 index 0000000000000000000000000000000000000000..ba23393f606f1ee37fe478a1425a8b8628b2a1a9 --- /dev/null +++ b/docs/en/faq/caselibrary/docker.md @@ -0,0 +1,47 @@ +# Docker Container Terminates After a Certain Period + +## Context + +A Docker container launches successfully but unexpectedly stops after operating for a duration without other observable errors. + +## Symptom + +When a Docker container image is executed, the CLI remains inactive before automatically closing after prolonged idleness. This behavior persists even for containers launched in background via `docker run -d`. + +![image](./figures/docker-container-auto-exit5.PNG) + +## Root Cause + +The container image includes a predefined 300-second timeout (TMOUT) setting in **/etc/profile**. When users access the container via SSH and maintain terminal inactivity beyond this threshold, the system forcibly terminates the session. + +![image](./figures/docker-container-auto-exit1.PNG) + +## Resolution + +1. Deploy the container with existing TMOUT configuration. + + ```shell + docker run -itd XXX bash + ``` + +2. Adjust container settings through interactive execution. + + ```shell + docker exec -it $container_id bash + ``` + + 1. Disable the timeout by setting `TMOUT=0` in **/etc/profile**: + + ![image](./figures/docker-container-auto-exit2.PNG) + + 2. Ensure profile loading by adding `source /etc/profile` to **/root/.bashrc**: + + ![image](./figures/docker-container-auto-exit3.PNG) + +3. Reinitialize the container to apply permanent changes: + + ```shell + docker restart $container_id + ``` + + ![image](./figures/docker-container-auto-exit4.PNG) diff --git a/docs/en/faq/caselibrary/efivars.md b/docs/en/faq/caselibrary/efivars.md new file mode 100644 index 0000000000000000000000000000000000000000..54e13c6029722f3a794d62e299817accf13f74b0 --- /dev/null +++ b/docs/en/faq/caselibrary/efivars.md @@ -0,0 +1,53 @@ +# EFI Variables Installation Errors + +## 1. Failed to Create EFI Boot Entry + +### Context + +The installer displays a warning about being unable to create an EFI boot entry, though installation can continue after dismissing the alert. +![image](./figures/installation_unable_to_add_bootloader.png) + +### Symptom + +1. Access the terminal (**Ctrl+Alt+F2**) and examine **/tmp** logs. +2. **storage.log** reports "no space left" errors. + + ![image](./figures/installation_no_bootloader_space.png) + +3. The **/sys/firmware/efi/efivars/** directory contains an excessive number of boot entries. + ![image](./figures/installation_ls_bootloader.png) + +### Possible Causes + +The BIOS variable storage area has reached capacity, preventing new EFI boot entries. + +### Resolution + +Clear the BIOS variable cache. + +## 2. Mount Error 32 + +### Context + +The installer fails with "mount failed: error 32" during operation. + +![image](./figures/installation_bootloader_error.png) + +### Symptom + +The error occurs when **/sys/firmware/efi/efivars/** is mounted. + +1. Access the terminal (**Ctrl+Alt+F2**) and examine **/tmp** logs. +2. **storage.log** reports space allocation failures. + + ![image](./figures/installation_bootloader_mount32.png) + +Error messages suggest potential file system corruption (bad superblock) in efivarfs, requiring BIOS-level investigation. + +### Possible Causes + +Hardware-related BIOS abnormalities or corrupted variable storage in flash memory cause UEFI variable service failures, leading to mount errors during OS installation. + +### Resolution + +Re-flash the BIOS firmware. diff --git a/docs/en/faq/caselibrary/figures/22e3a767-9e64-4561-be56-76b92e3c17ad.png b/docs/en/faq/caselibrary/figures/22e3a767-9e64-4561-be56-76b92e3c17ad.png new file mode 100644 index 0000000000000000000000000000000000000000..7cd251e9dcf8f1834a0bac93b8ec46bcb7a8a165 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/22e3a767-9e64-4561-be56-76b92e3c17ad.png differ diff --git a/docs/en/faq/caselibrary/figures/3c883235-950a-45d1-b10d-3ee4cbda5cd2.png b/docs/en/faq/caselibrary/figures/3c883235-950a-45d1-b10d-3ee4cbda5cd2.png new file mode 100644 index 0000000000000000000000000000000000000000..5249d972acc38eefa0357ed1e654ed7856e49523 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/3c883235-950a-45d1-b10d-3ee4cbda5cd2.png differ diff --git a/docs/en/faq/caselibrary/figures/50c5f99c-f86d-4e23-bd4e-36b536837312.png b/docs/en/faq/caselibrary/figures/50c5f99c-f86d-4e23-bd4e-36b536837312.png new file mode 100644 index 0000000000000000000000000000000000000000..fab992d1e6f263c9d76ea6695474e19d394ad787 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/50c5f99c-f86d-4e23-bd4e-36b536837312.png differ diff --git a/docs/en/faq/caselibrary/figures/64f55b4f-466f-4e56-86bc-c8714c3a1e22.png b/docs/en/faq/caselibrary/figures/64f55b4f-466f-4e56-86bc-c8714c3a1e22.png new file mode 100644 index 0000000000000000000000000000000000000000..502951ecd117d96499d68cd89ea1be95c8d9b819 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/64f55b4f-466f-4e56-86bc-c8714c3a1e22.png differ diff --git a/docs/en/faq/caselibrary/figures/7be4d825-680e-4dc0-989c-ae01843f90be.png b/docs/en/faq/caselibrary/figures/7be4d825-680e-4dc0-989c-ae01843f90be.png new file mode 100644 index 0000000000000000000000000000000000000000..07c835efde8b17240ed96ba783658ada94683192 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/7be4d825-680e-4dc0-989c-ae01843f90be.png differ diff --git a/docs/en/faq/caselibrary/figures/8df63e36-e202-4d8b-b477-4bd0c1d9d826.png b/docs/en/faq/caselibrary/figures/8df63e36-e202-4d8b-b477-4bd0c1d9d826.png new file mode 100644 index 0000000000000000000000000000000000000000..23c548b2c70f6650efa0754a7c38d09dc878fbf9 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/8df63e36-e202-4d8b-b477-4bd0c1d9d826.png differ diff --git a/docs/en/faq/caselibrary/figures/98bb38d3-bbbf-475c-b78d-bf4b2bf08528.png b/docs/en/faq/caselibrary/figures/98bb38d3-bbbf-475c-b78d-bf4b2bf08528.png new file mode 100644 index 0000000000000000000000000000000000000000..2c7602261dbe9cd0807f74d2505c20fea55eae40 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/98bb38d3-bbbf-475c-b78d-bf4b2bf08528.png differ diff --git a/docs/en/faq/caselibrary/figures/c2b268e3-78f1-4d7c-b459-50b90e73c5b2.png b/docs/en/faq/caselibrary/figures/c2b268e3-78f1-4d7c-b459-50b90e73c5b2.png new file mode 100644 index 0000000000000000000000000000000000000000..4b7180a219b359848591ddcf9d962331fa2c5b03 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/c2b268e3-78f1-4d7c-b459-50b90e73c5b2.png differ diff --git a/docs/en/faq/caselibrary/figures/cda96442-d6ba-4ab0-8d56-87b248b0ef41.png b/docs/en/faq/caselibrary/figures/cda96442-d6ba-4ab0-8d56-87b248b0ef41.png new file mode 100644 index 0000000000000000000000000000000000000000..8df6f79395f00713658566cdf1037945eb8eba2e Binary files /dev/null and b/docs/en/faq/caselibrary/figures/cda96442-d6ba-4ab0-8d56-87b248b0ef41.png differ diff --git a/docs/en/faq/caselibrary/figures/docker-container-auto-exit1.PNG b/docs/en/faq/caselibrary/figures/docker-container-auto-exit1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..3a5203b400ef481090c2e3d1f36e8b207ae7b5eb Binary files /dev/null and b/docs/en/faq/caselibrary/figures/docker-container-auto-exit1.PNG differ diff --git a/docs/en/faq/caselibrary/figures/docker-container-auto-exit2.PNG b/docs/en/faq/caselibrary/figures/docker-container-auto-exit2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b597d7f646c3b8d7f169be5a6a8a1667dee51328 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/docker-container-auto-exit2.PNG differ diff --git a/docs/en/faq/caselibrary/figures/docker-container-auto-exit3.PNG b/docs/en/faq/caselibrary/figures/docker-container-auto-exit3.PNG new file mode 100644 index 0000000000000000000000000000000000000000..d9add3629a3f41f35e42b21f0fb430b73956967b Binary files /dev/null and b/docs/en/faq/caselibrary/figures/docker-container-auto-exit3.PNG differ diff --git a/docs/en/faq/caselibrary/figures/docker-container-auto-exit4.PNG b/docs/en/faq/caselibrary/figures/docker-container-auto-exit4.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ad1b3d50c3fb75d5daa1bdf7101f0583e0ab31ac Binary files /dev/null and b/docs/en/faq/caselibrary/figures/docker-container-auto-exit4.PNG differ diff --git a/docs/en/faq/caselibrary/figures/docker-container-auto-exit5.PNG b/docs/en/faq/caselibrary/figures/docker-container-auto-exit5.PNG new file mode 100644 index 0000000000000000000000000000000000000000..5bf5df749f898082221639700d92a94f8ebb58d0 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/docker-container-auto-exit5.PNG differ diff --git a/docs/en/faq/caselibrary/figures/docker_umask_config_1.PNG b/docs/en/faq/caselibrary/figures/docker_umask_config_1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..172c147765edaccc9dfa224d7409ca09cfc3c542 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/docker_umask_config_1.PNG differ diff --git a/docs/en/faq/caselibrary/figures/docker_umask_config_2.PNG b/docs/en/faq/caselibrary/figures/docker_umask_config_2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..16d134bf702f18c315c33c5002990be5f0ed3db2 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/docker_umask_config_2.PNG differ diff --git a/docs/en/faq/caselibrary/figures/docker_umask_config_3.PNG b/docs/en/faq/caselibrary/figures/docker_umask_config_3.PNG new file mode 100644 index 0000000000000000000000000000000000000000..7dd9ee67d001efa52279eb03cf65a70a83726188 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/docker_umask_config_3.PNG differ diff --git a/docs/en/faq/caselibrary/figures/drive_scanning_stuck.png b/docs/en/faq/caselibrary/figures/drive_scanning_stuck.png new file mode 100644 index 0000000000000000000000000000000000000000..1d138a7dbb46ec64331c77a4c621600c4b56ca40 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/drive_scanning_stuck.png differ diff --git a/docs/en/faq/caselibrary/figures/drives_missing.png b/docs/en/faq/caselibrary/figures/drives_missing.png new file mode 100644 index 0000000000000000000000000000000000000000..b7869a374cc7db7b9a6eb247f528ef2ac698c5e3 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/drives_missing.png differ diff --git a/docs/en/faq/caselibrary/figures/drives_missing_lsblk.png b/docs/en/faq/caselibrary/figures/drives_missing_lsblk.png new file mode 100644 index 0000000000000000000000000000000000000000..2be183319fbacbc242f9b2090f7564d556b50704 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/drives_missing_lsblk.png differ diff --git a/docs/en/faq/caselibrary/figures/f1269fd0-7fb4-462c-a21c-043778edace0.png b/docs/en/faq/caselibrary/figures/f1269fd0-7fb4-462c-a21c-043778edace0.png new file mode 100644 index 0000000000000000000000000000000000000000..53fa9ac65ed26de2e2ed417333246a63daaf0b8b Binary files /dev/null and b/docs/en/faq/caselibrary/figures/f1269fd0-7fb4-462c-a21c-043778edace0.png differ diff --git a/docs/en/faq/caselibrary/figures/fd22e53b-5775-40ac-b194-6932ad81958e.png b/docs/en/faq/caselibrary/figures/fd22e53b-5775-40ac-b194-6932ad81958e.png new file mode 100644 index 0000000000000000000000000000000000000000..30b860e2486368eb68142d3ed348ff9a9ef9893a Binary files /dev/null and b/docs/en/faq/caselibrary/figures/fd22e53b-5775-40ac-b194-6932ad81958e.png differ diff --git a/docs/en/faq/caselibrary/figures/ff7fd456-3f56-4e1c-9bd6-ace9565c271f.png b/docs/en/faq/caselibrary/figures/ff7fd456-3f56-4e1c-9bd6-ace9565c271f.png new file mode 100644 index 0000000000000000000000000000000000000000..d8042ecd383ca947b6a07fd93a758af842bb309b Binary files /dev/null and b/docs/en/faq/caselibrary/figures/ff7fd456-3f56-4e1c-9bd6-ace9565c271f.png differ diff --git a/docs/en/faq/caselibrary/figures/installation_bootloader_error.png b/docs/en/faq/caselibrary/figures/installation_bootloader_error.png new file mode 100644 index 0000000000000000000000000000000000000000..35b37440c71bac2d8ea6084c37503cf7ad5df88b Binary files /dev/null and b/docs/en/faq/caselibrary/figures/installation_bootloader_error.png differ diff --git a/docs/en/faq/caselibrary/figures/installation_bootloader_mount32.png b/docs/en/faq/caselibrary/figures/installation_bootloader_mount32.png new file mode 100644 index 0000000000000000000000000000000000000000..a5e99d4b0e0ca5f068847313b24b58376b8529ef Binary files /dev/null and b/docs/en/faq/caselibrary/figures/installation_bootloader_mount32.png differ diff --git a/docs/en/faq/caselibrary/figures/installation_ls_bootloader.png b/docs/en/faq/caselibrary/figures/installation_ls_bootloader.png new file mode 100644 index 0000000000000000000000000000000000000000..9fdf82b84ce63b5ae13696ba6b57403cd4ac0421 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/installation_ls_bootloader.png differ diff --git a/docs/en/faq/caselibrary/figures/installation_no_bootloader_space.png b/docs/en/faq/caselibrary/figures/installation_no_bootloader_space.png new file mode 100644 index 0000000000000000000000000000000000000000..d9a502e0ea85dc18702a1cd18bb5e0474a3bdf1c Binary files /dev/null and b/docs/en/faq/caselibrary/figures/installation_no_bootloader_space.png differ diff --git a/docs/en/faq/caselibrary/figures/installation_unable_to_add_bootloader.png b/docs/en/faq/caselibrary/figures/installation_unable_to_add_bootloader.png new file mode 100644 index 0000000000000000000000000000000000000000..9c3c1e70241fce562516ebae6e9e4558a0a357f1 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/installation_unable_to_add_bootloader.png differ diff --git a/docs/en/faq/caselibrary/figures/lvm-1.png b/docs/en/faq/caselibrary/figures/lvm-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7f0b30deac8111cbc77658595b827825c3f45ce4 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/lvm-1.png differ diff --git a/docs/en/faq/caselibrary/figures/lvm-2.png b/docs/en/faq/caselibrary/figures/lvm-2.png new file mode 100644 index 0000000000000000000000000000000000000000..fae687b735dd83fe8b6cdc487bbbd089b5e77c18 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/lvm-2.png differ diff --git a/docs/en/faq/caselibrary/figures/lvm-3.png b/docs/en/faq/caselibrary/figures/lvm-3.png new file mode 100644 index 0000000000000000000000000000000000000000..87860adf7a715315df669d5ab8d9f5a3c78b891e Binary files /dev/null and b/docs/en/faq/caselibrary/figures/lvm-3.png differ diff --git a/docs/en/faq/caselibrary/figures/lvm-4.png b/docs/en/faq/caselibrary/figures/lvm-4.png new file mode 100644 index 0000000000000000000000000000000000000000..314b5435915fdeeb31722326ac6f3b24a7376c46 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/lvm-4.png differ diff --git a/docs/en/faq/caselibrary/figures/lvm-5.png b/docs/en/faq/caselibrary/figures/lvm-5.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ff4d2a9e20e5f988877d3589cbf567ba1fe140 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/lvm-5.png differ diff --git a/docs/en/faq/caselibrary/figures/pvs-1.png b/docs/en/faq/caselibrary/figures/pvs-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c97a4effc7aa8b4b3a530c529ab33dbfe221568c Binary files /dev/null and b/docs/en/faq/caselibrary/figures/pvs-1.png differ diff --git a/docs/en/faq/caselibrary/figures/pvs-2.png b/docs/en/faq/caselibrary/figures/pvs-2.png new file mode 100644 index 0000000000000000000000000000000000000000..58628ea86f389d04be8dc4317ae5d60450eda370 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/pvs-2.png differ diff --git a/docs/en/faq/caselibrary/figures/rebranding_config.png b/docs/en/faq/caselibrary/figures/rebranding_config.png new file mode 100644 index 0000000000000000000000000000000000000000..5f7c9067bb6794be47f15984f3ad5fde20091a78 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/rebranding_config.png differ diff --git a/docs/en/faq/caselibrary/figures/rebranding_config_check.png b/docs/en/faq/caselibrary/figures/rebranding_config_check.png new file mode 100644 index 0000000000000000000000000000000000000000..35e57761aabf68ebb0ce9e81f301f2adb964638b Binary files /dev/null and b/docs/en/faq/caselibrary/figures/rebranding_config_check.png differ diff --git a/docs/en/faq/caselibrary/figures/rebranding_config_log.png b/docs/en/faq/caselibrary/figures/rebranding_config_log.png new file mode 100644 index 0000000000000000000000000000000000000000..b61a8a77b39d081d759cb9e9ac0e340fd9a1d5a2 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/rebranding_config_log.png differ diff --git a/docs/en/faq/caselibrary/figures/rebranding_config_modification.png b/docs/en/faq/caselibrary/figures/rebranding_config_modification.png new file mode 100644 index 0000000000000000000000000000000000000000..dcd05097682d09f9312be29d509c2cc1b69978b6 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/rebranding_config_modification.png differ diff --git a/docs/en/faq/caselibrary/figures/rebranding_incomplete.png b/docs/en/faq/caselibrary/figures/rebranding_incomplete.png new file mode 100644 index 0000000000000000000000000000000000000000..5431d35c6c1df7b289d68f670b65260eef62e7e4 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/rebranding_incomplete.png differ diff --git a/docs/en/faq/caselibrary/figures/rebranding_incomplete_configuration.png b/docs/en/faq/caselibrary/figures/rebranding_incomplete_configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..4987ebe76ca3fda6e8df77be78b2661f9424e1f2 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/rebranding_incomplete_configuration.png differ diff --git a/docs/en/faq/caselibrary/figures/rebranding_kernel_build_error.png b/docs/en/faq/caselibrary/figures/rebranding_kernel_build_error.png new file mode 100644 index 0000000000000000000000000000000000000000..1f648fb27dde4307bb5d456f53fc46a11a9552e8 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/rebranding_kernel_build_error.png differ diff --git a/docs/en/faq/caselibrary/figures/rebranding_script_error.png b/docs/en/faq/caselibrary/figures/rebranding_script_error.png new file mode 100644 index 0000000000000000000000000000000000000000..75456042ff8446b363366e2b47af5d0e782d4e3b Binary files /dev/null and b/docs/en/faq/caselibrary/figures/rebranding_script_error.png differ diff --git a/docs/en/faq/caselibrary/figures/rebranding_script_post.png b/docs/en/faq/caselibrary/figures/rebranding_script_post.png new file mode 100644 index 0000000000000000000000000000000000000000..4d4c6e553b45a0d76d5f4f5b0db3fd85683876d3 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/rebranding_script_post.png differ diff --git a/docs/en/faq/caselibrary/figures/rebranding_tk_error.png b/docs/en/faq/caselibrary/figures/rebranding_tk_error.png new file mode 100644 index 0000000000000000000000000000000000000000..da68c4ed2e2be393e3cb43987cd6ced1b5a3561e Binary files /dev/null and b/docs/en/faq/caselibrary/figures/rebranding_tk_error.png differ diff --git a/docs/en/faq/caselibrary/figures/rebranding_tk_install_failure.png b/docs/en/faq/caselibrary/figures/rebranding_tk_install_failure.png new file mode 100644 index 0000000000000000000000000000000000000000..dde8a3b9045bf6473b514d46e54ecaf82e890651 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/rebranding_tk_install_failure.png differ diff --git a/docs/en/faq/caselibrary/figures/system_recovery_activate.png b/docs/en/faq/caselibrary/figures/system_recovery_activate.png new file mode 100644 index 0000000000000000000000000000000000000000..41e8dd4da6ac4e54cd86969b842cf087b5c540e6 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/system_recovery_activate.png differ diff --git a/docs/en/faq/caselibrary/figures/system_recovery_inactive.png b/docs/en/faq/caselibrary/figures/system_recovery_inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..968a6f07c35faf4e7750117a049522a989d0c35f Binary files /dev/null and b/docs/en/faq/caselibrary/figures/system_recovery_inactive.png differ diff --git a/docs/en/faq/caselibrary/figures/system_recovery_mount_boot.png b/docs/en/faq/caselibrary/figures/system_recovery_mount_boot.png new file mode 100644 index 0000000000000000000000000000000000000000..56ec18d7605604ead16c3c71153c4046a3f78d76 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/system_recovery_mount_boot.png differ diff --git a/docs/en/faq/caselibrary/figures/system_recovery_mount_root.png b/docs/en/faq/caselibrary/figures/system_recovery_mount_root.png new file mode 100644 index 0000000000000000000000000000000000000000..c7ed2b47edc96d245d87d0026c30b384d19b5853 Binary files /dev/null and b/docs/en/faq/caselibrary/figures/system_recovery_mount_root.png differ diff --git a/docs/en/faq/caselibrary/isulad.md b/docs/en/faq/caselibrary/isulad.md new file mode 100644 index 0000000000000000000000000000000000000000..b138c89bcd87b3cd80aa5a8c245719cc9f485a09 --- /dev/null +++ b/docs/en/faq/caselibrary/isulad.md @@ -0,0 +1,39 @@ +# Accessing iSulad Services Through gRPC and REST Protocols + +## gRPC Service Access + +The default communication protocol between iSula and iSulad is gRPC, which is mandatory for CRI implementations in Kubernetes environments. + +Developers integrating with iSulad via gRPC should consult the protocol buffer definitions at , organized by functional modules. + +For debugging gRPC interactions, install the community-developed grpcurl utility: + +```sh +go get github.com/fullstorydev/grpcurl +go install github.com/fullstorydev/grpcurl/cmd/grpcurl +``` + +Sample debugging command: + +```sh +grpcurl -plaintext -H 'tls_mode:0' -proto=api.proto -import-path=../ -unix=true /var/run/isulad.sock runtime.v1alpha2.ImageService.ListImages +``` + +## REST Service Access + +To configure REST-based communication: + +1. Clone the [iSulad repository](https://gitee.com/openeuler/iSulad). +2. Follow the [build instructions](https://gitee.com/openeuler/iSulad/blob/master/docs/build_docs/README.md). + +Enable REST mode during compilation: + +```sh +cmake -DENABLE_GRPC=OFF .../ +``` + +Test REST endpoints using `curl`: + +```sh +curl -d "{}" --unix-socket /var/run/isulad.sock http://localhost/ContainerService/Version +``` diff --git a/docs/en/faq/caselibrary/lvm.md b/docs/en/faq/caselibrary/lvm.md new file mode 100644 index 0000000000000000000000000000000000000000..d98424f4c6d3b7b7cbe791a914483f4833ec9925 --- /dev/null +++ b/docs/en/faq/caselibrary/lvm.md @@ -0,0 +1,44 @@ +# LVM Label Corruption + +## Symptom + +The `pvs` utility fails to show physical volume details, and `blkid` cannot recognize the `LVM2_member` label. +Expected output: + +![](./figures/lvm-1.png) + +Error state: + +![](./figures/lvm-2.png) + +## Possible Causes + +Analysis of the metadata region with `hexdump` confirms label corruption. + +![](./figures/lvm-3.png) + +![](./figures/lvm-4.png) + +## Solution + +1. Check the backup files in **/etc/lvm/backup** to find the PV UUID, then restore using `pvcreate`: + + ![](./figures/lvm-5.png) + + Command: + + ```shell + pvcreate --uuid D8v9Qw-1EJw-cmRc-nY2y-AZbC-8eLd-5Cpi2s --restorefile /etc/lvm/backup/vg /dev/sdb + ``` + +2. Restore the volume group configuration: + + ```shell + vgcfgrestore --file /etc/lvm/backup/vg vg + ``` + +3. Complete the recovery by activating the volume group: + + ```shell + vgchange -ay vg + ``` diff --git a/docs/en/faq/caselibrary/mountsysroot.md b/docs/en/faq/caselibrary/mountsysroot.md new file mode 100644 index 0000000000000000000000000000000000000000..161caf48b4c796ed74d3bf2bf002298ee1cfb1d1 --- /dev/null +++ b/docs/en/faq/caselibrary/mountsysroot.md @@ -0,0 +1,111 @@ +# /sysroot Mount Failure + +## Context + +### System Specifications + +Hardware platform: TaiShan200 (model 1280V2) +Kernel version: 5.10.0-153.1.0.81.oe2203sp2.aarch64 + +### Software Version + +openEuler 22.03-LTS-SP2 + +## Symptom + +During repeated power cycling tests, intermittent mount failures occur when the system fails to load ext4 or VFAT driver into the kernel during boot. + +![](./figures/fd22e53b-5775-40ac-b194-6932ad81958e.png) + +## Possible Causes + +This low-probability boot-time issue requires meticulous investigation. The diagnostic process follows a progressive elimination approach. + +### 1. Mount Operation Failure + +![](./figures/8df63e36-e202-4d8b-b477-4bd0c1d9d826.png) + +Debugging with `udev.log_priority=debug rd.debug=1` reveals: + +![](./figures/cda96442-d6ba-4ab0-8d56-87b248b0ef41.png) + +The system call fails during mount. Additional kernel logging shows: + +![](./figures/98bb38d3-bbbf-475c-b78d-bf4b2bf08528.png) + +Critical findings regarding VFAT mounting: + +1. The kernel attempts to load the required module via `request_module1` when `get_fs_type1` detects its absence. +2. Though the execution path reaches user-space modprobe invocation (`call_modprobe->call_usermodehelper_exec`), it returns error code 256. + +**Diagnosis**: User-space module loading fails with exit code 256, warranting investigation into the modprobe failure mechanism. + +### 2. Module Load Failure + +Because user-space logs are directed to the command line and unavailable in emergency mode, kernel-level debug prints were implemented: + +![image](./figures/f1269fd0-7fb4-462c-a21c-043778edace0.png) + +![image](./figures/3c883235-950a-45d1-b10d-3ee4cbda5cd2.png) + +Log analysis confirms that the driver failed to load during kernel execution via `modprobe`. + +**DIagnosis**: Either `module_sig_check` or `setup_load_info` returned error -129, causing the failure. + +### 3. Signature Verification Failure + +The verification process fails with error code -129, occurring through the following call chain: + +```txt +load_module->module_sig_check->mod_verify_sig->verify_pkcs7_signature->verify_pkcs7_message_sig->pkcs7_validate_trust->pkcs7_validate_trust_one->verify_signature->public_key_verify_signature->crypto_akcipher_verify->pkcs1pad_verify->pkcs1pad_verify_complete +``` + +![image](./figures/7be4d825-680e-4dc0-989c-ae01843f90be.png) +![image](./figures/50c5f99c-f86d-4e23-bd4e-36b536837312.png) + +Log analysis shows that while `out_buf` remains unchanged in both successful and failed verifications, the values of `req_ctx->out_buf + ctx->key_size` differ, indicating an anomaly in the data. +The problematic data is retrieved via `sg_pcopy_to_buffer` and corresponds to the digest portion of the signature. This digest is produced by hashing the original data and encrypting it with a private key. During verification, the public key decrypts the signature to extract the digest, while the system independently recalculates the digest from the original data. A mismatch between these values suggests either data corruption or tampering. + +Additional logging confirmed that `pkcs7->data` remains consistent in both passing and failing cases, narrowing the issue to the digest comparison phase. +![image](./figures/64f55b4f-466f-4e56-86bc-c8714c3a1e22.png) + +Further investigation revealed that all failures occurred when using the `sha256-ce` cryptographic driver, which employs ARMv8 CPU instructions for accelerated hashing. Since the issue could not be reproduced on other systems with the same kernel version, the problem appears to be hardware-specific. + +![image](./figures/c2b268e3-78f1-4d7c-b459-50b90e73c5b2.png) + +A test script repeatedly loading and unloading the kernel module successfully reproduced the error in the affected environment. + +![image](./figures/ff7fd456-3f56-4e1c-9bd6-ace9565c271f.png) + +**Diagnosis**: The evidence points to a CPU hardware issue. + +### 4. CPU Hardware Defect + +The failure does not occur in standard test environments. +Hardware diagnostics revealed: + +1. The affected processor is from an early engineering sample batch. +2. Specific Arm instruction executions fail on: + + ```txt + AdvsimdLoadStore + LCRTSveVectorMove + ``` + +3. Diagnostic tests confirm failures exclusively on CPU cores 130 and 131. + + When the kernel module stress test script is pinned to cores 130/131, the signature verification failure consistently occurs. The same test passes when restricted to core 129. + +![image](./figures/22e3a767-9e64-4561-be56-76b92e3c17ad.png) + +**Diagnosis**: Defective CPU silicon in cores 130/131 causes cryptographic instruction failures. + +## Solution + +**Hardware replacement**: + +Physically replacing the faulty CPU with a production-qualified unit provides a permanent solution. + +**Software mitigation**: + +Implement CPU affinity controls to exclude the malfunctioning cores from critical operations as a temporary mitigation. diff --git a/docs/en/faq/caselibrary/pvs_vgs.md b/docs/en/faq/caselibrary/pvs_vgs.md new file mode 100644 index 0000000000000000000000000000000000000000..82380630cbd6035624d8f55a2dc40fde4ebda01d --- /dev/null +++ b/docs/en/faq/caselibrary/pvs_vgs.md @@ -0,0 +1,34 @@ +# "Unknown" Errors in pvs or vgs + +## Symptom + +When running `pvs` or `vgs` commands, physical volumes (PVs) or volume groups (VGs) may display "unknown" status. + +![](./figures/pvs-1.png) + +![](./figures/pvs-2.png) + +## Possible Causes + +This issue typically occurs due to corrupted metadata, preventing the system from reading complete information about the storage components. The affected PV or VG becomes unusable until repaired. For verification, you can examine raw disk data using the `hexdump` utility (see [LVM Label Corruption](./lvm.md) for details). + +## Solution + +### Fixing Unrecognized VGs + +```bash +pvck --repair --file /etc/lvm/backup/vg /dev/sdb +``` + +VG backup files are stored in `/etc/lvm/backup`. + +### Repairing Unrecognized PVs + +```bash +pvcreate --uuid xxx --restorefile /etc/lvm/backup/vg /dev/sdc +vgcfgrestore --file /etc/lvm/backup/vg vg +vgchange -ay vg +``` + +The UUID can be found in the backup files located at `/etc/lvm/backup`. +After performing these repairs, verify the fix by running `pvs` or `vgs` again. Normal output indicates successful restoration. diff --git a/docs/en/faq/caselibrary/rebranding.md b/docs/en/faq/caselibrary/rebranding.md new file mode 100644 index 0000000000000000000000000000000000000000..efd6838a672a127432166675294f49a1e5c4a5e1 --- /dev/null +++ b/docs/en/faq/caselibrary/rebranding.md @@ -0,0 +1,101 @@ +# Rebranding FAQ + +## 1. Installation Failure with Boot Loader Configuration Write Error + +### Context + +The installation fails when rebranding operations are performed using openEuler system packages. + +### Symptom + +Image installation fails with error "Unable to write boot loader configuration." + +![image](./figures/rebranding_config.png) + +### Possible Causes + +Switching to the background terminal with **Ctrl+Alt+F2** reveals the following in **/tmp/anaconda.log**: + +![image](./figures/rebranding_config_log.png) + +The logs indicate the bootloader configuration file cannot be found. +This occurs because the installation process verifies the `ID` and `VARIANT_ID` values in the **/etc/os-release** file. + +![image](./figures/rebranding_config_check.png) + +### Solution + +Modify the `os_id` and `variant_id` parameters under `Profile Detection` in the **openEuler.conf** file of Anaconda to match those in the **os-release** file of the rebranded system. + +![image](./figures/rebranding_config_modification.png) + +## 2. Installation Completes but System Fails to Boot + +### Context + +Following rebranding, the system image installs correctly but becomes unbootable post-installation. + +### Symptom + +Startup fails with an "EFI boot file not found" error. + +![image](./figures/rebranding_incomplete.png) + +### Possible Causes + +Rebranding of software packages is incomplete, particularly affecting the GRUB bootloader configuration. + +### Resolution + +1. Verify boot entries for configuration errors: + + ![image](./figures/rebranding_incomplete_configuration.png) + +2. See [System File Recovery FAQ](./sysfile.md) for adjusting boot configurations after entering the system. +3. Permanently fix it by updating **grub.cfg** in the build environment. + +## 3. tk Installation Fails During Post-Rebranding Kernel Build + +### Context + +After rebranding, building the openEuler kernel via OBS triggers a tk installation failure. + +![image](./figures/rebranding_kernel_build_error.png) + +### Symptom + +Installation verification of the tk package fails, and standalone installation also results in an error. The issue occurs during the `%post` phase of the component. + +![image](./figures/rebranding_tk_install_failure.png) + +### Possible Causes + +Unrecognized `%ldconfig_post` or `%ldconfig_postun` macros in the spec file are being incorrectly processed as executable scripts. + +![image](./figures/rebranding_tk_error.png) + +### Resolution + +Update macro definitions in the `rpm-config` configuration of the project. + +## 4. POSTTRANS Scriptlet Execution Failure During Installation + +### Context + +`POSTTRANS` script errors occur when either rebranded software packages or locally built software images are installed. + +![image](./figures/rebranding_script_error.png) + +### Symptom + +1. Switch to the background console using **Ctrl+Alt+F2** and change root into **/mnt/sysroot**. +2. Run `dnf history info 1` to identify the failing `POST` operation. + ![image](./figures/rebranding_script_post.png) + +### Possible Causes + +The `%POSTTRANS` script fails during package installation due to missing .gz files. + +### Solution + +Analyze the `%post` script in the package `spec` file. After local verification of the modified script, retry the installation. diff --git a/docs/en/faq/caselibrary/sssnic.md b/docs/en/faq/caselibrary/sssnic.md new file mode 100644 index 0000000000000000000000000000000000000000..e2b94a9dcc17c29538805704d7eb8280f3f28b18 --- /dev/null +++ b/docs/en/faq/caselibrary/sssnic.md @@ -0,0 +1,77 @@ +# Kernel Hot patch Creation Issue: dmesg Reporting Missing sssnic Module + +## Context + +During kernel hot patch creation for openEuler LTS SP3, an unexpected dependency on the unmodified sssnic driver module caused activation failures. System logs indicate the livepatch system cannot find the required sssdk module, though the patch never intentionally modified this network driver module. + +### Version Information + +- Kernel: 5.10.0-182.0.0.95.oe2203sp3.aarch64 +- kpatch: 0.9.5-7.oe2203sp3.aarch64 + +### Symptom + +The hot patch creation command `./make_hotpatch -d .new -i procversion` executed successfully but produced a non-functional patch. Diagnostic logs showed the system incorrectly marked the sssnic driver as modified, creating an unnecessary module dependency. Since this network driver is not loaded by default, the hot patch fails to activate with a missing module error. + +```shell +[166439.721426] klp_procversion: tainting kernel with TAINT_LIVEPATCH +[166439.760137] livepatch: module 'sssdk' not loaded +``` + +## Possible Causes + +1. The hot patch tool incorrectly identified changes in two driver components (`sss_tool_nic_func.c` and `sss_tool_sdk.c`) during ELF section comparison, despite no intentional modifications. + +2. Investigation revealed the build system always recompiles the sssnic module during incremental builds. kpatch detects binary differences between these compiled objects, erroneously including them in the hot patch. + +## Solution + +**Option 1:** +When creating hot patches not related to the sssnic module, you can exclude this module during difference detection by modifying the **/usr/libexec/kpatch/kpatch-cc** file. Add the sssnic source code path to the ignore list, then rebuild the hot patch to eliminate sssnic module dependencies and ensure proper hot patch functionality. + +```shell +diff --git a/kpatch-build/kpatch-cc b/kpatch-build/kpatch-cc +index 80d310c...688d92b 100755 +--- a/kpatch-build/kpatch-cc ++++ b/kpatch-build/kpatch-cc +@@ -49,7 +49,8 @@ if [[ "$TOOLCHAINCMD" =~ ^(.*-)?gcc$ || + arch/powerpc/kernel/prom_init.o|\ + lib/*|\ + .*.o|\ +- */.lib_exports.o) ++ */.lib_exports.o|\ ++ drivers/net/ethernet/3snic/sssnic/*) + break + ;; + *.o) +``` + +**Option 2:** +When compiler optimizations cause unmodified functions to be mistakenly flagged as changed, use the `KPATCH_IGNORE_FUNCTION` macro to exclude these functions from hot patch generation. + +The build log reveals two modified functions in the sssnic module: + +```txt +Testing patch file(s) +Reading special section data +Building original source +Building patched source +Extracting new and modified ELF sections +sss_tool_nic_func.o: changed function: sss_tool_ioctl +sss_tool_sdk.o: changed function: sss_tool_get_hw_drv_version +version.o: changed function: version_proc_show +``` + +Add the following statements after the function declarations in their respective files (note: place `KPATCH_IGNORE_FUNCTION` after function declarations to avoid symbol lookup errors): + +```c +#include "/usr/share/kpatch/patch/kpatch-macros.h" +KPATCH_IGNORE_FUNCTION(sss_tool_ioctl); +``` + +```c +#include "/usr/share/kpatch/patch/kpatch-macros.h" +KPATCH_IGNORE_FUNCTION(sss_tool_get_hw_drv_version); +``` + +Re-run the command `./make_hotpatch -d .new -i procversion` to rebuild the hot patch. This will resolve errors related to the unloaded sssnic module. diff --git a/docs/en/faq/caselibrary/sysfile.md b/docs/en/faq/caselibrary/sysfile.md new file mode 100644 index 0000000000000000000000000000000000000000..0909947c288d6e29062a0705790a632001aeed45 --- /dev/null +++ b/docs/en/faq/caselibrary/sysfile.md @@ -0,0 +1,43 @@ +# System File Recovery FAQ + +## Context + +During normal system usage, accidental deletion of system files or unintended modifications may prevent successful system boot. This requires file system recovery/repair or backup of critical data. + +## Symptom + +Missing or modified system files causing boot failure, requiring system file restoration. + +## Solution + +1. Mount the installation image and switch to the background console with **Ctrl+Alt+F2**. + + The drive will initially show as inactive and unavailable for direct operations. + + ![image](./figures/system_recovery_inactive.png) + +2. Configure network and enable SSH service: + + ```txt + ifconfig eth0 xx.xx.xx.xx netmask 255.255.255.0 up + route add default gw xx.xx.xx.xx + cp /etc/ssh/sshd_config.anaconda /etc/ssh/sshd_config + systemctl restart sshd + ``` + +3. Activate the system volume group: + + Use `vgchange -ay` to activate detected file systems. + + ![image](./figures/system_recovery_activate.png) + +4. Mount partitions for system operations: + 1. Create a temporary directory `test` and mount the root partition **/dev/oprnruler/root** to it: + + ![image](./figures/system_recovery_mount_root.png) + + 2. Mount the boot partition `/dev/sda2` to the temporary system's boot directory: + + ![image](./figures/system_recovery_mount_boot.png) + + 3. The file system and data are now accessible for modifications. diff --git a/docs/en/faq/caselibrary/systemd-logind.md b/docs/en/faq/caselibrary/systemd-logind.md new file mode 100644 index 0000000000000000000000000000000000000000..c2017da2a74f4dabe985bb72e9bea91db865495f --- /dev/null +++ b/docs/en/faq/caselibrary/systemd-logind.md @@ -0,0 +1,96 @@ +# systemd-logind.service Failed to Retrieve NIS User Information + +## Context + +When using NIS-synchronized users with the systemd-pam package installed, systemd fails to create corresponding UID files under **/run/systemd/users/** during user login, resulting in gnome-shell errors. + +NIS provides centralized network resource management including users, passwords, home directories, and group information across multiple systems. + +Related issue: + +### Version Information + +systemd version: systemd-249-75.oe2203sp1.aarch64 +systemd-pam version: systemd-pam-249-75.oe2203sp1.aarch64 + +## Symptom + +A **ylp** NIS user (UID 1015) can be identified through the `id` command but lacks corresponding UID file creation in **/run/systemd/users/** after login: + +```txt +[root@server1 ~]# id ylp +uid=1015(ylp) gid=1015(ylp) groups=1015(ylp) +[root@server1 ~]# ll /run/systemd/users/ +total 16 +-rw-r--r-- 1 root root 345 May 13 17:23 0 +-rw-r--r-- 1 root root 243 May 10 17:40 1002 +-rw-r--r-- 1 root root 252 May 13 17:20 1004 +-rw-r--r-- 1 root root 274 May 10 18:12 971 +``` + +## Possible Causes + +1. Network connectivity issues preventing NIS server communication, as shown in error logs: + + ```txt + systemd-logind[2989387]: yp_bind_client_create_v3: RPC: Remote system error - Address family not supported by protocol + server1 sshd[2989498]: pam_systemd(sshd:session): Failed to create session: No such process + server1 sshd[2989498]: pam_unix(sshd:session): session opened for user ylp(uid=1015) by (uid=0) + server1 sshd[2989498]: pam_systemd(sshd:session): Failed to create session: Transport endpoint is not connected + ``` + +2. Compatibility changes in systemd versions based on community discussions: + + - Version 235 added `IPAddressDeny=any` to services like systemd-logind.service, blocking external IP communication: + + + - Version 239 further restricted network protocols (`AF_INET`/`AF_INET6`) for systemd-logind.service: + + +3. Systemd community's official stance on compatibility: + + - Compatibility notice added to NEWS documentation: + + + - Maintainers recommend using NSCD/SSSD instead of direct NIS integration for security reasons: + + +## Solution + +### Option 1 + +Add NSCD or SSSD services to access local cached data. + +### Option 2 + +Manually enable network access for systemd-logind.service. + +1. Check configuration files in **/usr/lib/systemd/system/systemd-logind.service.d/** on client machines for existing `IPAddressAllow` and `RestrictAddressFamilies` parameters. Use these commands to verify: + + ```bash + grep -rn "IPAddressAllow" + grep -rn "RestrictAddressFamilies" + ``` + + **Scenario 1**: If parameters do not exist, create a configuration file **systemd-logind-nis.conf** (with same permissions as other files in directory) containing: + + ```ini + IPAddressAllow=NIS_server_IP_address_to_be_allowed + RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6 + ``` + + **Scenario 2**: If parameters exist, append configurations to existing files: + + ```ini + IPAddressAllow=Original_configuration Additional_NIS_server_IP + RestrictAddressFamilies=Original_configuration AF_UNIX AF_NETLINK AF_INET AF_INET6 + ``` + + **Scenario 3**: If a file contains only one of the parameters, append the configuration to the existing parameter in that file, and write the missing parameter to **/usr/lib/systemd/system/systemd-logind.service.d/systemd-logind-nis.conf** (refer to Scenarios 1 and 2). + +2. Restart the service after configuration changes: + + ```bash + systemctl daemon-reload + systemctl restart systemd-logind.service + ``` diff --git a/docs/en/faq/caselibrary/umask.md b/docs/en/faq/caselibrary/umask.md new file mode 100644 index 0000000000000000000000000000000000000000..1bcb861e5206fe5fecb045ddbd895675bf2f91f4 --- /dev/null +++ b/docs/en/faq/caselibrary/umask.md @@ -0,0 +1,40 @@ +# Configuring Container umask Values in Docker + +## Context + +Container umask configuration directly impacts file/directory permissions of newly created resources, affecting container security posture. + +## Symptom + +Standard openEuler containers initialize with default umask 0027. After modification, the **others** group loses access permissions to newly created files/directories. + +![image](./figures/docker_umask_config_1.PNG) + +## Possible Causes + +The default umask was intentionally set to 0027 in runc implementation to enhance container security and mitigate potential attacks. This modification intentionally restricts **others** group access to new resources. + +## Solution + +**Option 1:** + +Modify Docker service configuration file **/etc/sysconfig/docker**: + +Add `--exec-opt native.umask=normal` parameter to OPTIONS line, then restart dockerd: + +```bash +systemctl restart docker +``` + +![image](./figures/docker_umask_config_2.PNG) + +**Option 2:** + +Include `--annotation native.umask=normal` parameter when executing `docker run|exec` commands: + +```bash +docker run --annotation native.umask=normal XXX +docker exec --annotation native.umask=normal XXX +``` + +![image](./figures/docker_umask_config_3.PNG) diff --git a/docs/en/faq/caselibrary/zabbix.md b/docs/en/faq/caselibrary/zabbix.md new file mode 100644 index 0000000000000000000000000000000000000000..9f14b19acbbe6d076d501ab7d3977afd27ebf0d4 --- /dev/null +++ b/docs/en/faq/caselibrary/zabbix.md @@ -0,0 +1,100 @@ +# Zabbix Installation Guide for openEuler 22.03 LTS + +## Minimal openEuler Setup + +Disable the system firewall: + +```shell +systemctl stop firewalld +systemctl disable firewalld +``` + +## MySQL Installation and Setup + +1. Install MySQL components. + + ```shell + dnf install mysql mysql-server mysql-common mysql-libs mysql-devel mysql-selinux --nogpgcheck + ``` + +2. Configure MySQL service. + + ```shell + systemctl enable mysqld + systemctl start mysqld + systemctl status mysqld + ``` + +3. Set **root** password. + + ```mysql + mysql -uroot -p + > Press Enter when prompted + ALTER USER 'root'@'localhost' IDENTIFIED BY 'secure_password'; + ``` + +## Zabbix Service Installation + +```shell +dnf config-manager --add-repo https://repo.oepkgs.net/openeuler/rpm/openEuler-22.03-LTS/contrib/others/aarch64/ +dnf clean all && dnf makecache +dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent --nogpgcheck +``` + +## Zabbix Environment Configuration + +1. Prepare the database. + + ```mysql + mysql -uroot -p + > Enter your password + create database zabbix character set utf8mb4 collate utf8mb4_bin; + create user zabbix@localhost identified by 'zabbix_password'; + grant all privileges on zabbix.* to zabbix@localhost; + set global log_bin_trust_function_creators = 1; + quit; + ``` + +2. Import initial data. + + ```shell + zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix + ``` + + Disable the temporary MySQL setting. + + ```mysql + mysql -uroot -p + > Enter your password + set global log_bin_trust_function_creators = 0; + quit; + ``` + +3. Update configuration files. + + ```shell + vi /etc/zabbix/zabbix_server.conf + --- + DBPassword=zabbix_password + --- + vi /etc/nginx/conf.d/zabbix.conf + --- + listen 8080; # Uncomment + server_name example.com; # Uncomment + --- + ``` + +4. Update net-snmp. + + ```shell + dnf install net-snmp net-snmp-devel net-snmp-utils --nogpgcheck + ``` + +5. Launch zabbix services. + + ```shell + systemctl restart zabbix-server zabbix-agent nginx php-fpm + systemctl enable zabbix-server zabbix-agent nginx php-fpm + ``` + +6. Access the web interface using port 8080. diff --git a/docs/en/faq/cloud/docker_faqs.md b/docs/en/faq/cloud/docker_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..82b569d99e775cc17c73deaa05a4f6f0435b8c54 --- /dev/null +++ b/docs/en/faq/cloud/docker_faqs.md @@ -0,0 +1,5 @@ +# Docker FAQ + +## 1. Additional Mount Point in Docker v18.09.9 Compared to v19.03.0 and Later + +In Docker version 18.09.9, containers have an extra mount point compared to those launched in Docker v19.03.0 and later. This is because the default `ipcmode` in v18.09 is set to `shareable`, which creates an additional `shmpath` mount point. To resolve this, either update the `ipcmode` option to `private` in the Docker configuration file or upgrade to a newer Docker version. diff --git a/docs/en/faq/cloud/figures/get_kubeconfig_error.png b/docs/en/faq/cloud/figures/get_kubeconfig_error.png new file mode 100644 index 0000000000000000000000000000000000000000..99087b68c6fafea1506e5f8bd862c371e93bdc97 Binary files /dev/null and b/docs/en/faq/cloud/figures/get_kubeconfig_error.png differ diff --git a/docs/en/faq/cloud/figures/kmesh-arch.png b/docs/en/faq/cloud/figures/kmesh-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..000ec80ff35556199caef6ce78953599c1c52312 Binary files /dev/null and b/docs/en/faq/cloud/figures/kmesh-arch.png differ diff --git a/docs/en/faq/cloud/figures/not_set_cluster_ip.png b/docs/en/faq/cloud/figures/not_set_cluster_ip.png new file mode 100644 index 0000000000000000000000000000000000000000..9c879f37fa93c0f4fe0ab0f6220beff174e5f436 Binary files /dev/null and b/docs/en/faq/cloud/figures/not_set_cluster_ip.png differ diff --git a/docs/en/faq/cloud/isula_build_faqs.md b/docs/en/faq/cloud/isula_build_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..594ddb0623bcb077fe309529cbaef84d796218f0 --- /dev/null +++ b/docs/en/faq/cloud/isula_build_faqs.md @@ -0,0 +1,9 @@ +# isual-build FAQ + +## 1. isula-build Image Pull Error: Connection Refused + +When pulling an image, isula-build encounters the error: `pinging container registry xx: get xx: dial tcp host:repo: connect: connection refused`. + +This occurs because the image is sourced from an untrusted registry. + +To resolve this, edit the isula-build registry configuration file located at **/etc/isula-build/registries.toml**. Add the untrusted registry to the `[registries.insecure]` section and restart isula-build. diff --git a/docs/en/faq/cloud/isula_faqs.md b/docs/en/faq/cloud/isula_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..61e49a0ed74c227ad65ba9a5c6e919b7c3fa94f6 --- /dev/null +++ b/docs/en/faq/cloud/isula_faqs.md @@ -0,0 +1,21 @@ +# iSula FAQ + +## 1. Changing iSulad Default Runtime to `lxc` Causes Container Startup Error: Failed to Initialize Engine or Runtime + +**Cause**: iSulad uses `runc` as its default runtime. Switching to `lxc` without the required dependencies causes this issue. + +**Solution**: To set `lxc` as the default runtime, install the `lcr` and `lxc` packages. Then, either configure the `runtime` field in the iSulad configuration file to `lcr` or use the `--runtime lcr` flag when launching containers. Avoid uninstalling `lcr` or `lxc` after starting containers, as this may leave behind residual resources during container deletion. + +## 2. Error When Using iSulad CRI V1 Interface: rpc error: code = Unimplemented desc = + +**Cause**: iSulad supports both CRI V1alpha2 and CRI V1 interfaces, with CRI V1alpha2 enabled by default. Using CRI V1 requires explicit configuration. + +**Solution**: Enable the CRI V1 interface by modifying the iSulad configuration file at **/etc/isulad/daemon.json**. + +```json +{ + "enable-cri-v1": true, +} +``` + +When compiling iSulad from source, include the `cmake` option `-D ENABLE_CRI_API_V1=ON` to enable CRI V1 support. diff --git a/docs/en/faq/cloud/kmesh_faqs.md b/docs/en/faq/cloud/kmesh_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..c67b1a7a4a3c4aed99c9c43d8e9d710ad20c99fe --- /dev/null +++ b/docs/en/faq/cloud/kmesh_faqs.md @@ -0,0 +1,23 @@ +# Kmesh FAQ + +## 1. Kmesh Service Exits with an Error When Started in Cluster Mode without Control Plane IP Address Configuration + +![](./figures/not_set_cluster_ip.png) + +Cause: When operating in cluster mode, Kmesh requires communication with the control plane to fetch configuration details. Without the correct control plane IP address, the service cannot proceed and exits with an error. + +Solution: Follow the cluster mode setup instructions in the Kmesh installation and deployment guide to properly configure the control plane IP address. + +## 2. Kmesh Service Displays "Get Kube Config Error!" during Startup + +![](./figures/get_kubeconfig_error.png) + +Cause: In cluster mode, Kmesh attempts to retrieve the control plane IP address from the k8s configuration. If the kubeconfig file path is not set in the environment, the service cannot access the kubeconfig and throws this error. (Note: This issue does not occur if the control plane IP address is manually specified in the Kmesh configuration file.) + +Solution: Set up kubeconfig using the following commands: + +```shell +mkdir -p $HOME/.kube +sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config +sudo chown $(id -u):$(id -g) $HOME/.kube/config +``` diff --git a/docs/en/faq/cloud/kubernetes_faqs.md b/docs/en/faq/cloud/kubernetes_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..e0146b39a612b19cd1c978a9c8c32c6c5cd564b5 --- /dev/null +++ b/docs/en/faq/cloud/kubernetes_faqs.md @@ -0,0 +1,13 @@ +# Kubernetes FAQ + +## 1. Kubernetes + Docker Deployment Failure + +Reason: Kubernetes dropped support for Kubernetes + Docker cluster deployments starting from version 1.21. + +Solution: Use cri-dockerd + Docker for cluster deployment, or consider alternatives like containerd or iSulad. + +## 2. Unable to Install Kubernetes RPM Packages via yum on openEuler + +Reason: Installing Kubernetes-related RPM packages requires proper configuration of the EPOL repository in yum. + +Solution: Follow the repository configuration guide provided in [this link](https://forum.openeuler.org/t/topic/768) to set up the EPOL repository in your environment. diff --git a/docs/en/faq/community_tools/dde_faqs.md b/docs/en/faq/community_tools/dde_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..f5400f98b4efba696c7dfb1aa24d993efac10324 --- /dev/null +++ b/docs/en/faq/community_tools/dde_faqs.md @@ -0,0 +1,19 @@ +# DDE FAQ + +## 1. After DDE Is Installed, Why Are the Computer and Recycle Bin Icons Not Displayed on the Desktop When I Log in as the **root** User + +### Issue + +After the DDE is installed, the computer and recycle bin icon is not displayed on the desktop when a user logs in as the **root** user. + +![img](./figures/dde-1.png) + +### Cause + +The **root** user is created before the DDE is installed. During the installation, the DDE does not add desktop icons for existing users. This issue does not occur if the user is created after the DDE is installed. + +### Solution + +Right-click the icon in the launcher and choose **Send to Desktop**. The icon functions the same as the one added by DDE. + +![img](./figures/dde-2.png) diff --git a/docs/en/faq/community_tools/deployment-guide-for-network-environment-faqs.md b/docs/en/faq/community_tools/deployment-guide-for-network-environment-faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..f01b9e3657b468680352ce739b345ecd9e6a83a5 --- /dev/null +++ b/docs/en/faq/community_tools/deployment-guide-for-network-environment-faqs.md @@ -0,0 +1,143 @@ +# openEuler Copilot System FAQ (Network Environment) + +## 1. HuggingFace Connection Issue + +```text +File "/usr/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn +raise NewConnectionError( +urllib3.exceptions.eanconectionError: : Failed to establish a new conmection: [Errno 101] Network is unreachable +``` + +- Solution + +```bash +pip3 install -U huggingface_hub +export HF_ENDPOINT=https://hf-mirror.com +``` + +## 2. Querying the RAG Service API + +- Enter the pod for RAG. + +```bash +curl -k -X POST "http://localhost:8005/kb/get_answer" -H "Content-Type: application/json" -d '{ \ + "question": "", \ + "kb_sn": "default_test", \ + "fetch_source": true }' +``` + +## 3. Helm Upgrade Cluster Errors + +```text +Error: INSTALLATI0N FAILED: Kubernetes cluster unreachable: Get "http:/localhost:880/version": dial tcp [:1:8089: connect: connection refused +``` + +or + +```text +Error: UPGRADE FAILED: Kubernetes cluster unreachable: the server could not find the requested resource +``` + +- Solution + +```bash +export KUBECONFIG=/etc/rancher/k3s/k3s.yaml +``` + +## 4. Pod Log Access Issues + +```text +[root@localhost euler-copilot]# kubectl logs rag-deployservice65c75c48d8-44vcp-n euler-copilotDefaulted container "rag" out of: rag.rag-copy secret (init)Error from server: Get "https://172.21.31.11:10250/containerlogs/euler copilot/rag deploy"service 65c75c48d8-44vcp/rag": Forbidden +``` + +- Solution + +Ensure the local Kubernetes node IP address is excluded from proxy settings: + +```bash +cat /etc/systemd/system/k3s.service.env +http_proxy="http://172.21.60.51:3128" +https_proxy="http://172.21.60.51:3128" +no_proxy=172.21.31.10 # Add the node IP address. +``` + +## 5. Streaming Response Issues in LLM API in the GPU environment + +Curl requests fail when `"stream": true` but succeed with `"stream": false`. + +```bash +curl http://localhost:30000/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer sk-123456" -d '{ +"model": "qwen1.5", +"messages": [ +{ +"role": "system", +"content": "You are an sentiment analysis expert..." +}, +{ +"role": "user", +"content": "Hello" +} +], +"stream": true, +"n": 1, +"max_tokens": 32768 +}' +``` + +- Solution: + +```bash +pip install Pydantic=1.10.13 +``` + +## 6. SGLang Deployment + +```bash +# 1. Activate the Conda environment (assuming the name is "myenv"). +conda activate myenv + +# 2. Install sglang[all] and flashinfer. +pip install sglang[all]==0.3.0 +pip install flashinfer -i https://flashinfer.ai/whl/cu121/torch2.4/ + +# 3. Launch the server. +python -m sglang.launch_server --served-model-name Qwen2.5-32B --model-path Qwen2.5-32B-Instruct-AWQ --host 0.0.0.0 --port 8001 --api-key sk-12345 --mem-fraction-static 0.5 --tp 8 +``` + +- Verification: + +```bash +pip show sglang +pip show flashinfer +``` + +- Note: + +1. API key: Ensure the `--api-key` value is valid. +2. Model path: Verify the `--model-path` points to an existing model directory. +3. CUDA version: `flashinfer` requires CUDA 12.1 and PyTorch 2.4. +4. Thread pool size: Adjust `--tp` (for example, `--tp 8` for 8 GPUs) based on available resources. + +## 7. Embedding API Request + +```bash +curl -k -X POST http://$IP:8001/embedding \ + -H "Content-Type: application/json" \ + -d '{"texts": ["sample text 1", "sample text 2"]}' +# Replace $IP with the internal network address of the vectorize embedding service. +``` + +## 8. Certificate Generation + +```bash +# Download mkcert: https://github.com/FiloSottile/mkcert/releases +# x86_64 +wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64 +# arm64 +wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-arm64 +# 2. Generate keys. +mkcert -install +mkcert example.com # Supports domains or IP addresses. +# 3. Copy certificates and keys to /home/euler-copilot-framework_openeuler/euler-copilot-helm/chart_ssl/traefik-secret.yaml, then apply: +kubectl apply -f traefik-secret.yaml +``` diff --git a/docs/en/faq/community_tools/deployment-guide-for-offline-environment-faqs.md b/docs/en/faq/community_tools/deployment-guide-for-offline-environment-faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..f01b9e3657b468680352ce739b345ecd9e6a83a5 --- /dev/null +++ b/docs/en/faq/community_tools/deployment-guide-for-offline-environment-faqs.md @@ -0,0 +1,143 @@ +# openEuler Copilot System FAQ (Network Environment) + +## 1. HuggingFace Connection Issue + +```text +File "/usr/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn +raise NewConnectionError( +urllib3.exceptions.eanconectionError: : Failed to establish a new conmection: [Errno 101] Network is unreachable +``` + +- Solution + +```bash +pip3 install -U huggingface_hub +export HF_ENDPOINT=https://hf-mirror.com +``` + +## 2. Querying the RAG Service API + +- Enter the pod for RAG. + +```bash +curl -k -X POST "http://localhost:8005/kb/get_answer" -H "Content-Type: application/json" -d '{ \ + "question": "", \ + "kb_sn": "default_test", \ + "fetch_source": true }' +``` + +## 3. Helm Upgrade Cluster Errors + +```text +Error: INSTALLATI0N FAILED: Kubernetes cluster unreachable: Get "http:/localhost:880/version": dial tcp [:1:8089: connect: connection refused +``` + +or + +```text +Error: UPGRADE FAILED: Kubernetes cluster unreachable: the server could not find the requested resource +``` + +- Solution + +```bash +export KUBECONFIG=/etc/rancher/k3s/k3s.yaml +``` + +## 4. Pod Log Access Issues + +```text +[root@localhost euler-copilot]# kubectl logs rag-deployservice65c75c48d8-44vcp-n euler-copilotDefaulted container "rag" out of: rag.rag-copy secret (init)Error from server: Get "https://172.21.31.11:10250/containerlogs/euler copilot/rag deploy"service 65c75c48d8-44vcp/rag": Forbidden +``` + +- Solution + +Ensure the local Kubernetes node IP address is excluded from proxy settings: + +```bash +cat /etc/systemd/system/k3s.service.env +http_proxy="http://172.21.60.51:3128" +https_proxy="http://172.21.60.51:3128" +no_proxy=172.21.31.10 # Add the node IP address. +``` + +## 5. Streaming Response Issues in LLM API in the GPU environment + +Curl requests fail when `"stream": true` but succeed with `"stream": false`. + +```bash +curl http://localhost:30000/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer sk-123456" -d '{ +"model": "qwen1.5", +"messages": [ +{ +"role": "system", +"content": "You are an sentiment analysis expert..." +}, +{ +"role": "user", +"content": "Hello" +} +], +"stream": true, +"n": 1, +"max_tokens": 32768 +}' +``` + +- Solution: + +```bash +pip install Pydantic=1.10.13 +``` + +## 6. SGLang Deployment + +```bash +# 1. Activate the Conda environment (assuming the name is "myenv"). +conda activate myenv + +# 2. Install sglang[all] and flashinfer. +pip install sglang[all]==0.3.0 +pip install flashinfer -i https://flashinfer.ai/whl/cu121/torch2.4/ + +# 3. Launch the server. +python -m sglang.launch_server --served-model-name Qwen2.5-32B --model-path Qwen2.5-32B-Instruct-AWQ --host 0.0.0.0 --port 8001 --api-key sk-12345 --mem-fraction-static 0.5 --tp 8 +``` + +- Verification: + +```bash +pip show sglang +pip show flashinfer +``` + +- Note: + +1. API key: Ensure the `--api-key` value is valid. +2. Model path: Verify the `--model-path` points to an existing model directory. +3. CUDA version: `flashinfer` requires CUDA 12.1 and PyTorch 2.4. +4. Thread pool size: Adjust `--tp` (for example, `--tp 8` for 8 GPUs) based on available resources. + +## 7. Embedding API Request + +```bash +curl -k -X POST http://$IP:8001/embedding \ + -H "Content-Type: application/json" \ + -d '{"texts": ["sample text 1", "sample text 2"]}' +# Replace $IP with the internal network address of the vectorize embedding service. +``` + +## 8. Certificate Generation + +```bash +# Download mkcert: https://github.com/FiloSottile/mkcert/releases +# x86_64 +wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64 +# arm64 +wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-arm64 +# 2. Generate keys. +mkcert -install +mkcert example.com # Supports domains or IP addresses. +# 3. Copy certificates and keys to /home/euler-copilot-framework_openeuler/euler-copilot-helm/chart_ssl/traefik-secret.yaml, then apply: +kubectl apply -f traefik-secret.yaml +``` diff --git a/docs/en/faq/community_tools/figures/dde-1.png b/docs/en/faq/community_tools/figures/dde-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fb1d5177c39262ed182f10a57fdae850d007eeb1 Binary files /dev/null and b/docs/en/faq/community_tools/figures/dde-1.png differ diff --git a/docs/en/faq/community_tools/figures/dde-2.png b/docs/en/faq/community_tools/figures/dde-2.png new file mode 100644 index 0000000000000000000000000000000000000000..be5d296937bd17b9646b32c80934aa76738027af Binary files /dev/null and b/docs/en/faq/community_tools/figures/dde-2.png differ diff --git a/docs/en/faq/community_tools/figures/lack_pack.png b/docs/en/faq/community_tools/figures/lack_pack.png new file mode 100644 index 0000000000000000000000000000000000000000..a4b7f1da15da70f63a86aae360e89017c2b98f2d Binary files /dev/null and b/docs/en/faq/community_tools/figures/lack_pack.png differ diff --git a/docs/en/faq/community_tools/isocut_faqs.md b/docs/en/faq/community_tools/isocut_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..f935e7656a000e03e7aa6f336e35135bda7f9870 --- /dev/null +++ b/docs/en/faq/community_tools/isocut_faqs.md @@ -0,0 +1,43 @@ +# isocut FAQ + +## 1. Default RPM Package List Causes System Installation Failure + +### Context + +When using isocut to trim ISO images, users specify required software packages via the configuration file **/etc/isocut/rpmlist**. + +Since different OS versions may have reduced package sets, the default configuration only includes the kernel package to ensure successful ISO trimming. This guarantees the default configuration always produces a valid ISO image. + +### Symptom + +The trimmed ISO image created with default settings may be successfully generated but fail during system installation. + +The installation reports missing packages as shown in the error screenshot: + +![](./figures/lack_pack.png) + +### Possible Causes + +The default RPM package list lacks essential packages required for system installation. The specific missing packages vary across OS versions, as shown in the error message during installation. + +### Solution + +1. Add missing packages: + + 1. Identify required RPM packages from the installation error message. + 2. Append these packages to **/etc/isocut/rpmlist**. + 3. Rebuild the ISO image. + + Example modified **rpmlist** configuration based on the reported error: + + ```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/faq/community_tools/patch_tracking_faqs.md b/docs/en/faq/community_tools/patch_tracking_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..be09243780182afa5ea164b1f2d5155b62967af1 --- /dev/null +++ b/docs/en/faq/community_tools/patch_tracking_faqs.md @@ -0,0 +1,19 @@ +# patch-tracking FAQ + +## 1. Connection Refused When Accessing api.github.com + +### Context + +The following error may occur during patch-tracking execution: + +```sh +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 Causes + +Unstable network connectivity between patch-tracking and GitHub API services + +### Solution + +Run patch-tracking in a network-stable environment that can reliably access GitHub API services, such as using [Huawei Cloud ECS](https://console.huaweicloud.com/). diff --git a/docs/en/faq/community_tools/xfce_faq.md b/docs/en/faq/community_tools/xfce_faq.md new file mode 100644 index 0000000000000000000000000000000000000000..96855e1db59bda683cd60dfbd50a64d0d5a82338 --- /dev/null +++ b/docs/en/faq/community_tools/xfce_faq.md @@ -0,0 +1,7 @@ +# Xfce FAQ + +## 1. 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/faq/general/general_faq.md b/docs/en/faq/general/general_faq.md new file mode 100644 index 0000000000000000000000000000000000000000..da62013465c63bf03ffa14d5164ca1cafeffa04a --- /dev/null +++ b/docs/en/faq/general/general_faq.md @@ -0,0 +1,83 @@ +# General Community Questions + +## What is openEuler + +The OpenAtom openEuler project, short for openEuler, is an open-source OS project incubated and operated by the OpenAtom Foundation. +It started as a simple server OS but has now blossomed into a full-blown digital infrastructure OS, supporting server, cloud, edge, and embedded deployments. This Linux distribution is compatible with multiple instruction set architectures and ideal for a wide range of operational technology applications, enabling OT-ICT convergence. + +## What is the openEuler community like + +Established officially on December 31, 2019, the openEuler community operates as a global hub for developers worldwide, aiming to foster an open, diverse, and architecture-inclusive software ecosystem tailored for wide-ranging digital infrastructure needs. openEuler collaborates closely with both upstream and downstream communities to ensure continuous tech improvement and timely release of new versions. + +## What instruction set architectures does openEuler support + +With active collaboration from leading chip vendors like Intel and AMD, openEuler supports multiple processor architectures, including **x86**, **Arm**, **SW64**, **RISC-V**, and **LoongArch**, with plans to expand to PowerPC. + +openEuler is optimized for a wide range of CPU chips, such as Loongson 3 series, Zhaoxin KaiXian and KaiSheng, Intel Sierra Forest and Granite Rapids, and AMD EPYC Milan and Genoa. openEuler's compatibility extends beyond the CPU, encompassing NIC, RAID, Fibre Channel, GPU & AI, DPU, SSD, and security cards. + +By offering a unified OS that can run on various devices, openEuler facilitates streamlined application development, allowing developers to target a wide range of hardware without significant code modification. + +## How often does openEuler release a new version + +openEuler releases two types of community versions: long-term support (LTS) and innovation versions. + +LTS versions, like openEuler 20.03 LTS and openEuler 22.03 LTS, are released every two years and provide community support for four years. This includes two years of maintenance support and two years of extended support. + +Innovation versions are released every six months, with each receiving community support for six months. + +Prior to the end of any version's lifecycle, users will receive notifications from our [mailing lists](https://www.openeuler.org/en/community/mailing-list/) three months in advance. + +## What are openEuler's special interest groups all about and How can I join one + +The openEuler community is home to 100+ SIGs, each dedicated to a specific project or topic. These groups drive innovation in areas like toolchains, architectures, desktop environments, universal middleware, cloud-native infrastructure, and more! Our SIGs are hot on the heels of trends like AI, embedded systems, RISC-V, security, and compliance. They manage repositories, contribute to code, and even help shape community governance & operations. + +You can find the full list of openEuler SIGs and their descriptions [here](https://www.openeuler.org/en/sig/sig-list/). + +- Interested in joining an existing SIG? Send an email to the group's email address or contact the maintainers directly. + +- Can I start my own SIG? Absolutely! We have a simple and easy process for [setting up a new SIG](https://www.openeuler.org/en/sig/sig-guidance/). + +## How can I contribute to openEuler + +Whether you're a coding whiz or an enthusiastic non-coder, there's a place for you in our community. Here's how to get started: + +1. Sign the [CLA](https://clasign.osinfra.cn/sign/gitee_openeuler-1611298811283968340) as an individual, employee or corporation. +2. Head over to our [SIG List](https://www.openeuler.org/en/sig/sig-list/) to see ongoing projects and discussions. Join an existing SIG or [start a new one](https://www.openeuler.org/en/sig/sig-guidance/). +3. Submit/address issues, contribute code/packages/ projects, and participate in non-code contributions. + - Submit/Address issues on the [QuickIssue](https://quickissue.openeuler.org/en/issues/) page where you can sign in with your Gitee, GitHub, email, or other account. + - Contribute code to our **source code repository** on [Gitee](https://gitee.com/openeuler) or our mirrored repository on [GitHub](https://github.com/openeuler-mirror). Rest assured, we review PRs regularly. + - Contribute packages/projects to our **software package repository** on [Gitee](https://gitee.com/src-openeuler) or visit our website's [Contribute Software Package](https://software-pkg.openeuler.org/en/package) page. +4. Join in our community activities. We host a wide range of activities, including meetings, summits, live streams, and meetups. + +Every contribution, big or small, is valued! Check out our [contribution guide](https://www.openeuler.org/en/community/contribution/detail.html) to learn more. + +## How can I stay informed about openEuler and chat with fellow users + +Here's how to stay informed about our developments and chat with fellow users: + +- Visit our official website for usage guides and white papers. +- Explore our [MOOCs](https://www.openeuler.org/en/learn/mooc/) for in-depth tutorials. +- Follow us on social media ([LinkedIn](https://www.linkedin.com/company/openeuler/posts/?feedView=all), [X](https://x.com/openEuler), and [YouTube](https://www.youtube.com/@openeuler)) for the latest news on open source & OS industry events, partnerships, and technical solutions. +- Subscribe to our [mailing lists](https://www.openeuler.org/en/community/mailing-list/) to receive updates on SIG news. +- Engage in discussions and ask questions on the [openEuler Forum](https://forum.openeuler.org/) or join the [r/openEuler](https://www.reddit.com/r/openEuler/) subreddit on Reddit for real-time communication. While the openEuler Forum's official English version is under construction, feel free to post in English on the existing forum and connect with other users! + +## Hmm, openEuler... Who's using it + +openEuler isn't just open-source — it's powering real innovation from semiconductors to a wide range of industries like operating systems, Internet, finance, carrier, electric power, manufacturing, energy, education, transportation, healthcare, and other fields. Companies tailor openEuler to their needs, creating commercial and enterprise distributions for both internal and external usage, and some of these companies have implemented large-scale deployments of these distributions. + +We're all about making the future brighter and more open-source! Check out our [success stories](https://www.openeuler.org/en/showcase/). + +## What does "noise" in the openEuler refer to + +OS noise includes non-application computing tasks executed during service running, such as: + +- System/User-mode daemon processes +- Interrupt processing +- Processes in user mode or kernel +- Memory management and scheduling overhead +- Non-computing tasks in service applications (e.g., monitoring logs and thread communication) +- Resource competition (e.g., cache misses and page faults) + +## Where can I find common repositories for openEuler + +You can find sorted and classified repositories for various openEuler versions on the [openEuler Forum](https://forum.openeuler.org/t/topic/768). diff --git a/docs/en/faq/general/project_intro_faq.md b/docs/en/faq/general/project_intro_faq.md new file mode 100644 index 0000000000000000000000000000000000000000..823d511d37fe793e031d31ee75ced75464106cf6 --- /dev/null +++ b/docs/en/faq/general/project_intro_faq.md @@ -0,0 +1,56 @@ +# General Feature Questions + +## What can I implement using openEuler WSL + +You can implement the following using openEuler WSL: + +- Deploy and use an openEuler LTS version on Windows. +- Create a smooth cross-platform development experience leveraging Visual Studio Code and openEuler WSL. +- Build a Kubernetes cluster in openEuler WSL. +- Use openEuler command-line programs or scripts to process files in Windows or WSL. + +## What does the hmdfs of openEuler do + +hmdfs stands for HarmonyOS Distributed File System. It is a soft bus-based distributed file system ported from the OpenHarmony community. hmdfs provides a globally consistent access view for each device dynamically connected to a network via the distributed soft bus (DSoftBus). It allows you to implement high-performance read and write operations on files using basic file system APIs, achieving low latency. + +## What is the SysCare of openEuler + +SysCare is a system-level hotfix software that provides security patches and hotfixes for OSs. It can fix system errors without requiring host restarts. SysCare combines kernel-mode and user-mode hot patching to manage system repairs, saving time for users to focus on other aspects of their business. In the future, live OS upgrades will be provided to enhance O&M efficiency. + +## What is A-Ops + +A-Ops is an OS-oriented O&M platform that provides intelligent O&M solutions covering data collection, health check, fault diagnosis, and fault rectification. The A-Ops project includes the following sub-projects: Gala (fault detection), X-diagnosis (fault locating), and Apollo (vulnerability rectification). + +## What capabilities does secGear provide + +secGear provides: + +- Architecture compatibility: It masks differences between various SDK APIs by sharing the same set of source code across multiple architectures. +- Easy development: The development tools and general-purpose security components allow users to focus on services, significantly improving development efficiency. +- High performance: The switchless feature improves interaction performance between the rich execution environment (REE) and trusted execution environment (TEE) by more than 10-fold in typical scenarios, such as frequent REE-TEE interactions and big data interaction. + +## What security technologies are used in AI for OS + +Vulnerability discovery: Automatic vulnerability discovery is crucial to OS security. It identifies defects using code analysis, fuzz testing, or both. Traditional fuzz testing tools are often both random and blind when it comes to generating and selecting seeds, mutations, testing, and feedback. In addition, code analysis relies on defect pattern libraries, which need to manually be built by experts. AI improves this by detecting patterns in defect code datasets to enhance the precision and efficiency of vulnerability identification. + +Intrusion detection: Modern security threats, such as Advanced Persistent Threats (APT), are sophisticated and persistent. Traditional security defenses often fail against unknown threats. AI enhances security by deeply analyzing data, extracting key features from high-dimensional datasets, and identifying system abnormalities effectively. This improves the accuracy and timeliness of attack blocking methods, such as in abnormal traffic and side-channel attack detection. + +## What are the advantages of the multi-level scheduling framework provided by openEuler + +openEuler's multi-level scheduling framework allows you to choose the most suitable scheduling model for your needs and provides the following advantages: + +- Higher flexibility and portability compared to traditional process/thread scheduling models. +- Faster model switching and scheduling thanks to the use of lightweight scheduling models. + +## How does openEuler ensure security + +openEuler ensures security by providing the following comprehensive security features: + +- Authenticity protection +- Integrity protection +- Confidentiality protection + +## What security isolation technologies does openEuler provide for the industrial sector + +- Service isolation: Isolates potentially vulnerable services from known sources to minimize the impact of attacks on other system components. +- Code restriction: Limits code from untrusted sources to reduce potential harm to other system components. diff --git a/docs/en/faq/server/administration_faqs.md b/docs/en/faq/server/administration_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..776385a295bf6f8623b192b7fc6f9777f95fc21c --- /dev/null +++ b/docs/en/faq/server/administration_faqs.md @@ -0,0 +1,395 @@ +# System ADministration FAQ + +## 1. Why Is the Memory Usage of the libvirtd Service Queried by Running the systemctl and top Commands Different + +### Symptom + +The output of the **systemctl** and **systemd-cgtop** commands shows that the libvirtd service occupies more than 1.5 GB memory, but the output of the **top** command shows that the libvirtd service occupies about 70 MB memory. + +### Possible Cause + +The memory displayed in the services \(including systemctl and systemd-cgtop\) managed by systemd can be obtained from **memory.usage\_in\_bytes** in Cgroup. Running the **top** command is to query the memory information in the **/proc** directory. The query results are different because the statistical method varies. + +Generally, the memory used by service processes has the following types: + +- anon\_rss: anonymous pages in user mode address spaces, for example, memory allocated by calling the malloc function or the mmap function with configured **MAP\_ANONYMOUS**. When the system memory is insufficient, this type of memory can be swapped by the kernel. +- file\_rss: mapped pages in user mode address spaces, including map file \(such as mmap of a specified file\) and map tmpfs \(such as IPC shared memory\). When the system memory is insufficient, the kernel can reclaim these pages. Data may need to be synchronized between the kernel and map file before reclamation. +- file\_cache: file cache \(page in page cache of disk file\), which is generated when a file is read or written. When the system memory is insufficient, the kernel can reclaim these pages. Data may need to be synchronized between the kernel and map file before reclamation. +- buffer pages: belongs to page cache, for example, cache generated when block device files are read. + +anon\_rss and file\_rss belong to the resident set size \(RSS\) of processes, and file\_cache and buffer pages belong to page cache. In brief: + +RSS in the output of the **top** command = anon\_rss + file\_rss; Shared memory \(SHR\) = file\_rss + +**memory.usage\_in\_bytes** in Cgroup = cache + RSS + swap + +In conclusion, the definition of memory usage obtained by running the **systemd** command is different from that obtained by running the **top** command. Therefore, the query results are different. + +## 2. An Error Occurs When stripsize Is Set to 4 During RAID 0 Volume Configuration + +### Symptom + +An error occurs when the **stripsize** parameter is set to **4** during RAID 0 volume configuration. + +### Possible Cause + +The 64 KB page table can be enabled only in the scenario where **stripsize** is set to **64**. + +### Solution + +You do not need to modify the configuration file. When running the **lvcreate** command on openEuler, set **stripesize** to **64** because the minimum supported stripe size is 64 KB. + +## 3. Failed to Compile MariaDB Using rpmbuild + +### Symptom + +When you log in to the system as user **root** and run the **rpmbuild** command to compile the MariaDB source code, the compilation fails and the following information is displayed: + +```text ++ echo 'mysql can'\''t run test as root' +mysql can't run test as root ++ exit 1 +``` + +### Possible Cause + +The MariaDB does not allow user **root** to execute test cases. However, test cases are automatically executed during compilation. As a result, the compilation process is blocked. + +### Solution + +Use a text editor, such as vi, to modify the value of the **runtest** variable in the **mariadb.spec** file. + +Before the modification: + +```text +%global runtest 1 +``` + +After the modification: + +```text +%global runtest 0 +``` + +The modification disables the function of executing test cases during compilation, which does not affect the compilation and the RPM package content after compilation. + +## 4. Failed to Start the SNTP Service Using the Default Configuration + +### Symptom + +The SNTP service fails to be started with the default configuration. + +### Possible Cause + +The domain name of the NTP server is not added to the default configuration. + +### Solution + +Modify the **/etc/sysconfig/sntp** file and add the domain name of the NTP server in China: **0.generic.pool.ntp.org**. + +## 5. Installation Failure Caused by Software Package Conflict, File Conflict, or Missing Software Package + +### Symptom + +Software package conflict, file conflict, or missing software packages may occur during software package installation. As a result, the upgrade is interrupted and the installation fails. The error information about software package conflict, file conflict, and missing software packages is as follows: + +The following is an example of software package conflict error information \(the conflict between **libev-libevent-devel-4.24-11.oe1.aarch64** and **libevent-devel-2.1.11-2.oe1.aarch64** is used as an example\): + +```text +package libev-libevent-devel-4.24-11.oe1.aarch64 conflicts with libevent-devel provided by libevent-devel-2.1.11-2.oe1.aarch64 + - cannot install the best candidate for the job + - conflicting requests +``` + +The following is an example of file conflict error information \(the **/usr/bin/containerd** file conflict is used as an example\): + +```text +Error: Transaction test error: + file /usr/bin/containerd from install of containerd-1.2.0-101.oe1.aarch64 conflicts with file from package docker-engine-18.09.0-100.aarch64 + file /usr/bin/containerd-shim from install of containerd-1.2.0-101.oe1.aarch64 conflicts with file from package docker-engine-18.09.0-100.aarch64 +``` + +The following is an example of the error message indicating that the **blivet-data** software package is missing: + +```text +Error: + Problem: cannot install both blivet-data-1:3.1.1-6.oe1.noarch and blivet-data-1:3.1.1-5.noarch + - package python2-blivet-1:3.1.1-5.noarch requires blivet-data = 1:3.1.1-5, but none of the providers can be installed + - cannot install the best update candidate for package blivet-data-1:3.1.1-5.noarch + - problem with installed package python2-blivet-1:3.1.1-5.noarch(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages) +``` + +### Possible Cause + +- In the software packages provided by openEuler, some software packages have different names but the same functions. As a result, the software packages cannot be installed at the same time. +- In the software packages provided by openEuler, some software packages have different names but the same functions. As a result, the files after installation are the same, causing file conflict. +- Some software packages are depended on by other software packages before the upgrade. After the software packages are upgraded, the software packages that depend on them may fail to be installed due to lack of software packages. + +### Solution + +If a software package conflict occurs, perform the following steps \(the software package conflict in "Symptom" is used as an example\): + +1. According to the error message displayed during the installation, the software package that conflicts with the to-be-installed software package **libev-libevent-devel-4.24-11.oe1.aarch64** is **libevent-devel-2.1.11-2.oe1.aarch64**. +2. Run the **dnf remove** command to uninstall the software package that conflicts with the software package to be installed. + + ```shell + dnf remove libevent-devel-2.1.11-2.oe1.aarch64 + ``` + +3. Perform the installation again. + +If a file conflict occurs, perform the following steps \(the file conflict in "Symptom" is used as an example\): + +1. According to the error message displayed during the installation, the names of the software packages that cause the file conflict are **containerd-1.2.0-101.oe1.aarch64** and **docker-engine-18.09.0-100.aarch64**. +2. Record the names of the software packages that do not need to be installed. The following uses **docker-engine-18.09.0-100.aarch64** as an example. +3. Run the **dnf remove** command to uninstall the software package that does not need to be installed. + + ```shell + dnf remove docker-engine-18.09.0-100.aarch64 + ``` + +4. Perform the installation again. + +If a software package is missing, perform the following steps \(the missed software package in "Symptom" is used as an example\): + +1. Determine the name of the software package to be upgraded \(**blivet-data-1:3.1.1-5.noarch**\) and the name of the dependent software package \(**python2-blivet-1:3.1.1-5.noarch**\) based on the error information displayed during the upgrade. +2. Run the **dnf remove** command to uninstall the software package that depends on the upgrade package or add the **\-\-allowerasing** parameter when upgrading the software package. + - Run the **dnf remove** command to uninstall the software package that depends on the **blivet-data-1:3.1.1-5.noarch** software package. + + ```shell + dnf remove python2-blivet-1:3.1.1-5.noarch + ``` + + - Add the **\-\-allowerasing** parameter when upgrading the software package. + + ```shell + yum update blivet-data-1:3.1.1-5.noarch -y --allowerasing + ``` + +3. Perform the upgrade again. + +### Installing Conflicting Instances + +- A file conflict occurs. + + The **python3-edk2-devel.noarch** file conflicts with the **build.noarch** file due to duplicate file names. + + ```shell + $ yum install python3-edk2-devel.noarch build.noarch + ... + Error: Transaction test error: + file /usr/bin/build conflicts between attempted installs of python3-edk2-devel-202002-3.oe1.noarch and build-20191114-324.4.oe1.noarch + ``` + +## 6. Failed to Downgrade libiscsi + +### Symptom + +libiscsi-1.19.0-4 or later fails to be downgraded to libiscsi-1.19.0-3 or earlier. + +```text +Error: +Problem: problem with installed package libiscsi-utils-1.19.0-4.oe1.x86_64 +- package libiscsi-utils-1.19.0-4.oe1.x86_64 requires libiscsi(x86-64) = 1.19.0-4.oe1, but none of the providers can be installed +- cannot install both libiscsi-1.19.0-3.oe1.x86_64 and libiscsi-1.19.0-4.oe1.x86_64 +- cannot install both libiscsi-1.19.0-4.oe1.x86_64 and libiscsi-1.19.0-3.oe1.x86_64 +- conflicting requests +(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages) +``` + +### Possible Cause + +In libiscsi-1.19.0-3 or earlier, binary files named **iscsi-xxx** are packed into the main package **libiscsi**. However, these binary files introduce improper dependency CUnit. To solve this problem, in libiscsi-1.19.0-4, these binary files are separated into the **libiscsi-utils** subpackage. The main package is weakly dependent on the subpackage. You can integrate or uninstall the subpackage during image building based on product requirements. If the subpackage is not integrated or is uninstalled, the functions of the **libiscsi** main package are not affected. +When libiscsi-1.19.0-4 or later is downgraded to libiscsi-1.19.0-3 or earlier and the **libiscsi-utils** subpackage is installed in the system, because libiscsi-1.19.0-3 or earlier does not contain **libiscsi-utils**, **libiscsi-utils** will fail to be downgraded. Due to the fact that **libiscsi-utils** depends on the **libiscsi** main package before the downgrade, a dependency problem occurs and the libiscsi downgrade fails. + +### Solution + +Run the following command to uninstall the **libiscsi-utils** subpackage and then perform the downgrade: + +```shell +yum remove libiscsi-utils +``` + +## 7. Failed to Downgrade xfsprogs + +### Symptom + +xfsprogs-5.6.0-2 or later fails to be downgraded to xfsprogs-5.6.0-1 or earlier. + +```text +Error: +Problem: problem with installed package xfsprogs-xfs_scrub-5.6.0-2.oe1.x86_64 +- package xfsprogs-xfs_scrub-5.6.0-2.oe1.x86_64 requires xfsprogs = 5.6.0-2.oe1, but none of the providers can be installed +- cannot install both xfsprogs-5.6.0-1.oe1.x86_64 and xfsprogs-5.6.0-2.oe1.x86_64 +- cannot install both xfsprogs-5.6.0-2.oe1.x86_64 and xfsprogs-5.6.0-1.oe1.x86_64 +- conflicting requests +``` + +### Possible Cause + +In xfsprogs-5.6.0-2, to reduce improper dependencies of the **xfsprogs** main package and separate experimental commands from the main package, the `xfs_scrub*` commands are separated into the **xfsprogs-xfs_scrub** subpackage. The **xfsprogs** main package is weakly dependent on the **xfsprogs-xfs_scrub** sub-package. You can integrate or uninstall the subpackage during image creation based on product requirements. If the subpackage is not integrated or is uninstalled, the functions of the **xfsprogs** main package are not affected. + +When xfsprogs-5.6.0-2 or later is downgraded to xfsprogs-5.6.0-1 or earlier and the **xfsprogs-xfs_scrub** subpackage is installed in the system, because xfsprogs-5.6.0-1 or earlier does not contain **xfsprogs-xfs_scrub**, **xfsprogs-xfs_scrub** will fail to be downgraded. Due to the fact that **xfsprogs-xfs_scrub** depends on the **xfsprogs** main package before the downgrade, a dependency problem occurs and the xfsprogs downgrade fails. + +### Solution + +Run the following command to uninstall the **xfsprogs-xfs_scrub** subpackage and then perform the downgrade: + +```shell +yum remove xfsprogs-xfs_scrub +``` + +## 8. Failed to Downgrade elfutils + +### Symptom + +The dependency is missing. As a result, elfutils failed to be downgraded. + +![](figures/1665628542704.png) + +### Possible Cause + +22.03-LTS, 22.03-LTS-Next: elfutils-0.185-12 + +master: elfutils-0.187-7 + +20.03-LTS-SP1: elfutils-0.180-9 + +In the preceding versions, the **eu-objdump**, **eu-readelf**, and **eu-nm** commands provided by the elfutils main package are split into the elfutils-extra subpackage. When elfutils-extra has been installed in the system and elfutils is downgraded, because an earlier version (such as the version of an earlier branch) cannot provide the corresponding elfutils-extra package, the elfutils-extra subpackage is not downgraded. However, the elfutils-extra subpackage depends on the elfutils package before the downgrade. As a result, the dependency problem cannot be resolved, and the elfutils subpackage fails to be downgraded. + +### Solution + +Run the following command to uninstall the elfutils-extra subpackage and then perform the downgrade: + +```shell +yum remove -y elfutils-extra +``` + +## 9. CPython/Lib Detects CVE-2019-9674: Zip Bomb + +### Symptom + +**Lib/zipfile.py** in Python 3.7.2 or earlier allows remote attackers to create DoS requests using zip bombs, resulting in high resource consumption. + +### Possible Cause + +Remote attackers use zip bombs to cause denial of service, affecting target system services or even crashing the system. A zip bomb is a zip file with a high compression ratio. It may be several MB or dozens of MB in size. However, after decompression, a large amount of data is generated, consuming a large amount of resources. + +### Solution + +Add the alarm information to **zipfile** at . + +## 1.: ReDoS Attack Occurs Due to Improper Use of glibc Regular Expressions + +### Symptom + +The regcomp/regexec interface of glibc is used for programming, or the glibc regular expressions, such as grep/sed, are used in shell commands. Improper regular expressions or inputs cause ReDoS attacks (CVE-2019-9192/CVE-2018-28796). +The typical regular expression pattern is the combination of the"reverse reference (\1)" with the "asterisk (*)" (zero match or multiple matches), "plus sign (+)" (one match or multiple matches), or "{m,n}" (minimum match: m; maximum match: n); or the combination of ultra-long character strings with regular expressions. The following is an example: + +```shell +$ echo D | grep -E "$(printf '(\0|)(\\1\\1)*')"Segmentation fault (core dumped) +$ grep -E "$(printf '(|)(\\1\\1)*')" +Segmentation fault (core dumped) +$ echo A | sed '/\(\)\(\1\1\)*/p' +Segmentation fault (core dumped) +$ time python -c 'print "a"*40000' | grep -E "a{1,32767}" +Segmentation fault (core dumped) +$ time python -c 'print "a"*40900' | grep -E "(a)\\1" +Segmentation fault (core dumped) +``` + +### Possible Cause + +A core dump occurs on the process that uses the regular expression. The glibc regular expression is implemented using the NFA/DFA hybrid algorithm. The internal principle is to use a greedy algorithm for recursive query to match as many character strings as possible. The greedy algorithm causes the ReDoS attack when processing the recursive regular expression. + +### Solution + +1. Strict permission control is required to reduce the attack surface. + +2. Ensure that the regular expression is correct. Do not enter an invalid regular expression or a combination of ultra-long character strings with regular expressions (references or asterisks) that may trigger infinite recursion. + + ```text + # ()(\1\1)* + # "a"*400000 + ``` + +3. After a user program detects a process exception, the user program can restart the process to restore services, improving program reliability. + +## 1.: An Error Is Reported When gdbm-devel Is Installed or Uninstalled During the Installation and Uninstallation of httpd-devel and apr-util-devel + +### Symptom + +1. An error is reported when gdbm-devel-1.18.1-1 is installed or uninstalled. +2. After the error is rectified, gdbm and gdbm-devel are upgraded to the 1.18.1-2 version. However, the default version of gdbm-devel is still 1.18.1-1 when httpd-devel and apr-util-devel (dependent on gdbm-devel) are installed. As a result, the error persists. + +### Possible Cause + +1. The gdbm-devel-1.18.1-1 package does not contain the help package that provides `info`. As a result, the help package cannot be introduced when gdbm-devel is installed independently, and the following alarm information is displayed: + + ```text + install-info: No such file or directory for /usr/share/info/gdbm.info.gz + ``` + +2. By default, the gdbm-1.18.1-1 main package is installed in the system, but the gdbm-devel package is not installed. The software packages depending on gdbm-devel still match the version of the gdbm main package and install gdbm-devel-1.18.1-1. As a result, the error persists. + +### Solution + +1. Install gdbm-1.18.1-2 to upgrade gdbm. The error is rectified. +2. Upgrade gdbm, and then install gdbm-devel to make it depend on the gdbm of the later version. The error is rectified. + +## 1.: An rpmdb Error Is Reported When Running the yum or dnf Command After the System Is Rebooted + +### Symptom + +1. After the system is rebooted, an error is reported when running an RPM-related command `yum` or `dnf` as follows: + error: db5 error(-30973) from dbenv->open: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery + error: cannot open Packages index using db5 - (-30973) + error: cannot open Packages database in /var/lib/rpm + Error: Error: rpmdb open failed + +### Possible Cause + +1. During an installation or upgrade, read and write operations are performed on the **/var/lib/rpm/__db.00\*** file. If an unexpected interruption occurs, such as forced power-off, drive space full, or `kill -9`, the **_db** file will be damaged. An error will be reported when a `dnf` or `yum` command is executed. + +### Solution + +Step 1 Run the `kill -9` command to terminate all running RPM-related commands. +Step 2 Run `rm -rf /var/lib/rpm/__db.00*` to delete all db.00 files. +Step 3 Run the `rpmdb --rebuilddb` command to rebuild the RPM database. + +## 1.: Failed to Run `rpmrebuild -d /home/test filesystem` to Rebuild the filesystem Package + +### Symptom + +Failed to run the `rpmrebuild --comment-missing=y --keep-perm -b -d /home/test filesystem-3.16-3.oe1.aarch64` command to rebuild the **filesystem** package. The following information is displayed: + +```text +/usr/lib/rpmrebuild/rpmrebuild.sh:Error:(RpmBuild) Package 'filesystem-3.16-3.oe1.aarch64' build failed. +/usr/lib/rpmrebuild/rpmrebuild.sh:Error: RpmBuild +``` + +### Possible Cause + +The software package creates the directory in the **%pretrans -p** phase, and modify the directory in the **%ghost** phase. If you create a file or directory in the directory and use `rpmrebuild` to build the package, the created file or directory will be included in the package. + +The root cause of the symptom is that **filesystem** creates the **/proc** directory in the **%pretrans** phase and modifies the directory in the **%ghost** phase, but some small processes are dynamically created during system running. As a result, `rpmrebuild` cannot include the processes in the package because they are not files or directories and fails to rebuild the package. + +### Solution + +Do not use `rpmrebuild` to rebuild the **filesystem** package. + +## 1.: An Error Is Reported When modprobe or `insmod` Is Executed With the `-f` Option + +### Symptom + +An error is reported when `modprobe -f ` or `insmod -f .ko.xz` is executed. For example, when `insmod -f xfs.ko.xz` is executed, error message **modprobe: ERROR: could not insert 'xfs': Key was rejected by service** is displayed. + +Up till now (2022.09.20, kmod v30), this issue has not been fixed by the kmod community.Linux v5.17 [b1ae6dc](https://github.com/torvalds/linux/commit/b1ae6dc41eaaa98bb75671e0f3665bfda248c3e7) introduced support for compressed kernel modules, which is not supported by kmod. + +### Possible Cause + +`modprobe` and `insmod` use the `finit_module()` system call to load uncompressed ko files. For compressed ko files, kmod uses the `init_module()` system call to decompress them. `init_module()` does not take the ignore check flag. As a result, `mod_verify_sig()` is always executed by the kernel. the `-f` option of `modprobe` and `insmod` changes verification information about the ko file, resulting in verification failure of `mod_verify_sig()`. + +### Solution + +Do not use the `-f` option when running `insmod` or `modprobe` on compressed ko files. diff --git a/docs/en/faq/server/applicationdev_faqs.md b/docs/en/faq/server/applicationdev_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..293f524750eb8f4eb50f45526a635b4681263b51 --- /dev/null +++ b/docs/en/faq/server/applicationdev_faqs.md @@ -0,0 +1,20 @@ +# Application Development FAQ + +## 1. Self-compilation of Some Applications Depending on the **java-devel** Package Fails + +### Symptom + +The self-compilation of some applications that depend on java-devel fails when the rpmbuild command is executed. + +### Possible Causes + +To provide OpenJDK features that are updated and compatible with Java applications, the openEuler provides OpenJDK of multiple versions, such as OpenJDK 1.8.0 and OpenJDK 11. The compilation of some applications depends on the **java-devel** package. When the **java-devel** package is installed, the system installs java-11-openjdk of a later version by default. As a result, the compilation of these applications fails. + +### Solution + +You need to run the following command to install java-1.8.0-openjdk and then run the **rpmbuild** command to perform self-compilation: + +```shell +# yum install java-1.8.0-openjdk + +``` diff --git a/docs/en/faq/server/atune_faqs.md b/docs/en/faq/server/atune_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..016dda96a3420468a1e2f041d71cf7a9add240d6 --- /dev/null +++ b/docs/en/faq/server/atune_faqs.md @@ -0,0 +1,52 @@ +# A-Tune FAQ + +## 1: An error occurs when the **train** command is used to train a model, and the message "training data failed" is displayed + +Cause: Only one type of data is collected by using the **collection**command. + +Solution: Collect data of at least two data types for training. + +## 2: atune-adm cannot connect to the atuned service + +Possible cause: + +1. Check whether the atuned service is started and check the atuned listening address. + + ```shell + systemctl status atuned + netstat -nap | grep atuned + ``` + +2. The firewall blocks the atuned listening port. +3. The HTTP proxy is configured in the system. As a result, the connection fails. + +Solution: + +1. If the atuned service is not started, run the following command to start the service: + + ```shell + systemctl start atuned + ``` + +2. Run the following command on the atuned and atune-adm servers to allow the listening port to receive network packets. In the command, **60001** is the listening port number of the atuned server. + + ```shell + iptables -I INPUT -p tcp --dport 60001 -j ACCEPT + iptables -I INPUT -p tcp --sport 60001 -j ACCEPT + ``` + +3. Run the following command to delete the HTTP proxy or disable the HTTP proxy for the listening IP address without affecting services: + + ```shell + no_proxy=$no_proxy, Listening_IP_address + ``` + +## 3: The atuned service cannot be started, and the message "Job for atuned.service failed because a timeout was exceeded." is displayed + +Cause: The hosts file does not contain the localhost information. + +Solution: Add localhost to the line starting with **127.0.0.1** in the **/etc/hosts** file. + +```text +127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 +``` diff --git a/docs/en/faq/server/figures/1665628542704.png b/docs/en/faq/server/figures/1665628542704.png new file mode 100644 index 0000000000000000000000000000000000000000..58907e0ed31c79b260be80480d4fd4c27e4e2e24 Binary files /dev/null and b/docs/en/faq/server/figures/1665628542704.png differ diff --git a/docs/en/faq/server/figures/BIOS.png b/docs/en/faq/server/figures/BIOS.png new file mode 100644 index 0000000000000000000000000000000000000000..d5a96738001c5a910174c030af583bb09ff29ce6 Binary files /dev/null and b/docs/en/faq/server/figures/BIOS.png differ diff --git a/docs/en/faq/server/figures/Configuration_error_prompt.png b/docs/en/faq/server/figures/Configuration_error_prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..a4eb734b3b84247bb2aa897e74898e8b5375aec8 Binary files /dev/null and b/docs/en/faq/server/figures/Configuration_error_prompt.png differ diff --git a/docs/en/faq/server/figures/Megaraid_IO_Request_uncompleted.png b/docs/en/faq/server/figures/Megaraid_IO_Request_uncompleted.png new file mode 100644 index 0000000000000000000000000000000000000000..9f5a9e0f03055c59148830c8f8894196acd6861f Binary files /dev/null and b/docs/en/faq/server/figures/Megaraid_IO_Request_uncompleted.png differ diff --git a/docs/en/faq/server/figures/No-bootable-device.png b/docs/en/faq/server/figures/No-bootable-device.png new file mode 100644 index 0000000000000000000000000000000000000000..944c658d621f00b18e4aa75eaca420d76c08715c Binary files /dev/null and b/docs/en/faq/server/figures/No-bootable-device.png differ diff --git a/docs/en/faq/server/figures/cancle_drive.png b/docs/en/faq/server/figures/cancle_drive.png new file mode 100644 index 0000000000000000000000000000000000000000..ff0e9a143fc14dc725d0b1e770bd54ce874aeec6 Binary files /dev/null and b/docs/en/faq/server/figures/cancle_drive.png differ diff --git a/docs/en/faq/server/figures/custom_paratition.png b/docs/en/faq/server/figures/custom_paratition.png new file mode 100644 index 0000000000000000000000000000000000000000..0f46bc9fcfbf57cd986661029c6b2c037dac2919 Binary files /dev/null and b/docs/en/faq/server/figures/custom_paratition.png differ diff --git a/docs/en/faq/server/figures/dde-1.png b/docs/en/faq/server/figures/dde-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fb1d5177c39262ed182f10a57fdae850d007eeb1 Binary files /dev/null and b/docs/en/faq/server/figures/dde-1.png differ diff --git a/docs/en/faq/server/figures/dde-2.png b/docs/en/faq/server/figures/dde-2.png new file mode 100644 index 0000000000000000000000000000000000000000..be5d296937bd17b9646b32c80934aa76738027af Binary files /dev/null and b/docs/en/faq/server/figures/dde-2.png differ diff --git a/docs/en/faq/server/figures/en-us_image_0229291264.jpg b/docs/en/faq/server/figures/en-us_image_0229291264.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f0a0658e08010f4f453e558a41e31257783b416 Binary files /dev/null and b/docs/en/faq/server/figures/en-us_image_0229291264.jpg differ diff --git a/docs/en/faq/server/figures/en-us_image_0229291272.png b/docs/en/faq/server/figures/en-us_image_0229291272.png new file mode 100644 index 0000000000000000000000000000000000000000..e0ad8102bddd886c3bd7a306b088e8a52e2b99c9 Binary files /dev/null and b/docs/en/faq/server/figures/en-us_image_0229291272.png differ diff --git a/docs/en/faq/server/figures/en-us_image_0229291280.png b/docs/en/faq/server/figures/en-us_image_0229291280.png new file mode 100644 index 0000000000000000000000000000000000000000..5754e734c48b23ace2a4fbf1302b820077cd7b71 Binary files /dev/null and b/docs/en/faq/server/figures/en-us_image_0229291280.png differ diff --git a/docs/en/faq/server/figures/en-us_image_0231657950.png b/docs/en/faq/server/figures/en-us_image_0231657950.png new file mode 100644 index 0000000000000000000000000000000000000000..bea985ef710c57aeba16600067304b1005ad92e8 Binary files /dev/null and b/docs/en/faq/server/figures/en-us_image_0231657950.png differ diff --git a/docs/en/faq/server/figures/reset_devices.png b/docs/en/faq/server/figures/reset_devices.png new file mode 100644 index 0000000000000000000000000000000000000000..70cc2e0138dd48950f4704bd3f1160448d5058a1 Binary files /dev/null and b/docs/en/faq/server/figures/reset_devices.png differ diff --git a/docs/en/faq/server/figures/security.png b/docs/en/faq/server/figures/security.png new file mode 100644 index 0000000000000000000000000000000000000000..59ac7bfcef796fc32d0127a9d6095d32cb282fb2 Binary files /dev/null and b/docs/en/faq/server/figures/security.png differ diff --git a/docs/en/faq/server/figures/select.png b/docs/en/faq/server/figures/select.png new file mode 100644 index 0000000000000000000000000000000000000000..0e40f5fd8d73dbcbad6bdcec5d56d3883d54023a Binary files /dev/null and b/docs/en/faq/server/figures/select.png differ diff --git a/docs/en/faq/server/installation_faq1.md b/docs/en/faq/server/installation_faq1.md new file mode 100644 index 0000000000000000000000000000000000000000..fcf353ec8cfdcf556f58dd91e980a7c137650f53 --- /dev/null +++ b/docs/en/faq/server/installation_faq1.md @@ -0,0 +1,302 @@ +# OS Installation FAQ 1 + +## 1. 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. openEuler installed on the first drive is loaded and started if it is complete. +2. openEuler installed on the first drive fails to be started from hard drives if it is incomplete. + +The preceding two situations occur because the first drive **sda** is booted by default to start openEuler in the BIOS window. If openEuler is not installed on the **sda** drive, system restart fails. + +### 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**. +- After installing openEuler, restart it by modifying the boot option in the BIOS window. + +## 2. openEuler Enters Emergency Mode After It Is Started + +### Symptom + +openEuler enters emergency mode after it is powered on. + +![fig](./figures/en-us_image_0229291264.jpg) + +### Possible Causes + +Damaged OS files result in drive mounting failure, or overpressured I/O results in drive mounting timeout \(threshold: 90s\). + +An unexpected system power-off and low I/O performance of drives may also cause the problem. + +### 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. + + > ![fig](./public_sys-resources/icon-note.gif) **NOTE:** + > The fsck tool checks and maintains inconsistent file systems. If the system is powered off 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 method 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: + +```sh +# +# /etc/fstab +# Created by anaconda on Mon Sep 14 17:25:48 2015 +# +# Accessible filesystems, by reference, are maintained under '/dev/disk' +# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info +# +/dev/mapper/openEuler-root / ext4 defaults,x-systemd.device-timeout=0 0 0 +UUID=afcc811f-4b20-42fc-9d31-7307a8cfe0df /boot ext4 defaults,x-systemd.device-timeout=0 0 0 +/dev/mapper/openEuler-home /home ext4 defaults 0 0 +/dev/mapper/openEuler-swap swap swap defaults 0 0 +``` + +## 3. openEuler Fails to Be Reinstalled When an Unactivated Logical Volume Group Exists + +### Symptom + +After a drive fails, openEuler fails to be reinstalled because a logical volume group that cannot be activated exists in openEuler. + +### Possible Causes + +During the installation of openEuler, a logical volume group cannot be activated. + +### Solutions + +Before reinstalling openEuler, restore the abnormal logical volume group to the normal status or clear it. For example: + +- Restore the logical volume group. + 1. Run the following command to clear the active status of the abnormal logical volume group to ensure that the error message "Can't open /dev/sdc exclusively mounted filesystem" is not displayed: + + ```sh + vgchange -a n testvg32947 + ``` + + 2. Run the following command to recreate a physical volume based on the backup file: + + ```sh + pvcreate --uuid JT7zlL-K5G4-izjB-3i5L-e94f-7yuX-rhkLjL --restorefile /etc/lvm/backup/testvg32947 /dev/sdc + ``` + + 3. Run the following command to restore the logical volume group information: + + ```sh + vgcfgrestore testvg32947 + ``` + + 4. Run the following command to reactivate the logical volume group: + + ```sh + vgchange -ay testvg32947 + ``` + +- Run the following commands to clear the logical volume group: + + ```sh + vgchange -a n testvg32947 + vgremove -y testvg32947 + ``` + +## 4. 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 + +This is because the software package dependency in the installation source is abnormal. + +### Solutions + +Check whether the installation source is abnormal. Use the new installation source. + +## 5. kdump Service Fails to Be Enabled + +### Symptom + +Run the **systemctl status kdump** command. The following information is displayed, indicating that no memory is reserved. + +![fig](./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 + +For the scenario where the OS has been installed + +1. Add **crashkernel=1024M,high** to **/boot/efi/EFI/openEuler/grub.cfg**. +2. Restart the system for configuration to take effect. +3. Run the following command to check the kdump status: + + ```sh + 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. + + ![fig](./figures/en-us_image_0229291272.png) + +### Parameter Description + +The following table describes the parameters of 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 configuration method is used only when the memory is less than 4 GB. Ensure that the continuous available memory is sufficient. | +| 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, and 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 the memory is reserved for continuous use when the physical memory is less than 4 GB and X of the memory is reserved when the physical memory is greater than or equal to 4 GB. The actual reserved memory size equals 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 and 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 the memory is reserved for continuous use when the physical memory is less than 4 GB and Y of the memory is reserved when the physical memory is greater than or equal to 4 GB. The actual reserved memory size equals X plus Y. | + +## 6. Fails to Select Only One Drive for Reinstallation When openEuler Is Installed on a Logical Volume Consisting of Multiple Drives + +### Symptom + +If openEuler is installed on a logical volume consisting of multiple drives, an error message will be displayed as shown in [Figure 1](#fig115949762617) when you attempt to select one of the drives for reinstallation. + +**Figure 1** Error message +![fig](./figures/Configuration_error_prompt.png) + +### Possible Causes + +The previous logical volume 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: + + ```sh + vgs + ``` + + ![fig](./figures/en-us_image_0231657950.png) + +2. Run the following command to delete the volume group: + + ```sh + vgremove euleros + ``` + +3. Run the following command to restart the installation program for the modification to take effect: + + ```sh + systemctl restart anaconda + ``` + + > ![fig](./public_sys-resources/icon-note.gif) **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. + +## 7. openEuler Fails to Be Installed on an x86 PM in UEFI Mode due to Secure Boot Option 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 set to **disabled**), as shown in [Figure 2](#fig115949762618). + +**Figure 2** Dialog box showing "No bootable device" +![fig](./figures/No-bootable-device.png) + +### Possible Causes + +After **Secure Boot** is set to **Enabled**, the mainboard verifies the boot program and OS. If the boot program 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 + +Access the BIOS, set **Secure Boot** to **Disabled**, and reinstall the openEuler. + +1. During the system startup, press **F11** and enter the password **Admin@9000** to access the BIOS. + + ![fig](./figures/BIOS.png) + +2. Choose **Administer Secure Boot**. + + ![fig](./figures/security.png) + +3. Set **Enforce Secure Boot** to **Disabled**. + + ![fig](./figures/select.png) + + > ![fig](./public_sys-resources/icon-note.gif) **NOTE:** + > After **Enforce Secure Boot** is set to **Disabled**, save the settings and exit. Then, reinstall the system. + +## 8. pmie_check 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 does not support the installation of 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 OS is installed and restarted, perform either of the following two operations: + +1. Install SElinux policy module pcpupstream. + + ```sh + /usr/libexec/pcp/bin/selinux-setup /var/lib/pcp/selinux install "pcpupstream" + + ```sh + +2. Reinstall pcp-selinux + + ```sh + sudo dnf reinstall pcp-selinux + + ```sh + +## 9. Installation Fails when a User Selects Two Drives with OS Installed and Customizes Partitioning + +### Symptom + +During the OS installation, the OS has been installed on two drives. In this case, if you select one drive for custom partitioning, and click **Cancel** to perform custom partitioning on the other drive, the installation fails. + +![fig](./figures/cancle_drive.png) + +![fig](./figures/custom_paratition.png) + +### Possible Causes + +A user selects a drive for partitioning twice. After the user clicks **Cancel** and then selects the other drive, the drive information is incorrect. As a result, the installation fails. + +### Solutions + +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 reinstall the OS. + +### Learn More About the Issue at + + + +## 10. vmcore Fails to Be Generated by Kdump on the PM with LSI MegaRAID 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 enables second kernel, an error "BRCM Debug mfi stat 0x2d, data len requested/completed 0x200/0x0" is reported in 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** parameter is configured by default and is enabled during second kernel startup, making MegaRAID driver or drive faulty. An error is reported when the vmcore file is dumped ana accesses the MegaRAID card. As a result, vmcore fails to be generated. + +### Solutions + +Delete the **reset_devices** parameter in the **etc/sysconfig/kdump** file on a PM, as shown in the following figure. Therefore, 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/faq/server/installation_faq2.md b/docs/en/faq/server/installation_faq2.md new file mode 100644 index 0000000000000000000000000000000000000000..106b6d9c69b311d1a469da81af064ecf1a31ee83 --- /dev/null +++ b/docs/en/faq/server/installation_faq2.md @@ -0,0 +1,66 @@ +# OS Installation FAQ 2 + +## 1. Failed to Start the Raspberry Pi + +### Symptom + +After the Raspberry Pi image released by the openEuler is written to the SD card, the Raspberry Pi fails to be started. + +### Possible Causes + +The possible causes are as follows: + +1. The downloaded image file is incomplete. To avoid this problem, ensure that the image passes the integrity verification. +2. An error occurs when the image is written to the SD card. In most cases, the error occurs when the image is written to the SD card in the Windows environment using the application software. + +### Solution + +Re-write the complete image to the SD card. + +## 2. Failed to Connect to Wi-Fi by Running the nmcli Command + +### Symptom + +Failed to connect to the Wi-Fi network by running the `nmcli dev wifi connect SSID password PWD` command. An error message, for example, `Error: Connection activation failed: (7) Secrets were required, but not provided.`, is displayed. + +### Possible Causes + +The command to be executed does not have a password. Note that if the password contains special characters, use single quotation marks to quote the password. If you fail to connect to the Wi-Fi network by running the `nmcli` command line, you are advised to use the nmtui utility for connection. + +### Solution + +Run the `nmtui` command to enter the nmtui utility. Perform the following steps to connect to the Wi-Fi network: + +1. Select **Edit a connection** and press **Enter**. The window for editing network connections is displayed. +2. Press the right arrow key on the keyboard to select **Add**, and then press **Enter**. The window for creating a network connection is displayed. +3. Set the connection type to **Wi-Fi**, press the right arrow key on the keyboard to select **Create**, and press **Enter**. The page for editing Wi-Fi connection information is displayed. +4. On the Wi-Fi connection information page, edit the following information. Other information depends on the specific requirements. After the editing is complete, select **OK** and press **Enter** to return to the window for editing network connections. + 1. Enter the name of the Wi-Fi connection in the **Profile name** text box. You can use the default name, for example, **Wi-Fi connection 1**. + 2. Enter **wlan0** in the **Device** text box. + 3. Enter the SSID of the Wi-Fi network to be connected in the **SSID** text box. + 4. In the **Security** area, select the Wi-Fi password encryption mode as required, for example, **WPA & WPA2 Personal**. + 5. Enter the Wi-Fi password in the **Password** text box. + +5. Select **Back** to return to the home screen of the nmtui utility. +6. Select **Activate a connection** and press **Enter**. The window for activating network connections is displayed. +7. Check whether the added Wi-Fi connection is activated. The name of an activated Wi-Fi connection is marked with an asterisk (*). If the Wi-Fi connection is not activated, select the Wi-Fi connection, press the right arrow key on the keyboard to select **Activate**, and press **Enter** to activate the connection. After the activation is complete, select **Back** and press **Enter** to return to the home screen of the nmtui utility. +8. Select **Quit**, press the right arrow key on the keyboard to select **OK**, and press **Enter** to exit the nmtui utility. + +## 3. Failed to Install the TensorFlow and Related Packages + +### Symptom + +Failed to install the TensorFlow and related packages using **yum**. + +### Possible Causes + +The dependencies of TensorFlow have not been upgraded to the version that adapts to TensorFlow 2.12.1. You need to manually install the dependencies using **pip**. + +### Solution + +1. Run `yumdownloader python3-tensorflow` to download the TensorFlow RPM package. +2. Run `rpm -ivh --nodeps python3-tensorflow` to install the package. +3. Install TensorFlow dependencies. + 1. Use **pip** to install dependencies: `pip3 install tensorflow-estimator==2.12.0 keras==2.12.0 protobuf==3.20.3` + 2. Use **yum** to install other dependencies: `yum install python3-termcolor python3-future python3-numpy python3-six python3-astunparse python3-google-pasta python3-opt-einsum python3-typing-extensions python3-wrapt python3-h5py python3-grpcio python3-absl-py python3-flatbuffers python3-gast` +4. Use **yum** to install related packages. For example, run `yum install python-keras-rl2` to install python-keras-rl2. diff --git a/docs/en/faq/server/kernel_faqs.md b/docs/en/faq/server/kernel_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..e667abd4dcb700e838e208d72906da5aa4695d84 --- /dev/null +++ b/docs/en/faq/server/kernel_faqs.md @@ -0,0 +1,29 @@ +# nvwa FAQ + +## 1. After the `nvwa Update` Command Is Executed, the System Is Not Upgraded + +Cause: An error occurs when the running information is retained or the kernel is replaced. + +Solution: View logs to find the error cause. + +## 2. After the Acceleration Feature Is Enabled, the `nvwa` Command Fails to Be Executed + +Cause: NVWA provides many acceleration features, including quick kexec, pin memory, and cpu park. These features involve the cmdline configuration and memory allocation. When selecting the memory, run cat /proc/iomemory to ensure that the selected memory does not conflict with that of other programs. If necessary, run the dmesg command to check whether error logs exist after the feature is enabled. + +## 3. After the Hot Upgrade, the Related Process Is Not Recovered + +Cause: Check whether the nvwa service is running. If the nvwa service is running, the service or process may fail to be recovered. + +Solution: Run the service `nvwa status` command to view the NVWA logs. If the service fails to be started, check whether the service is enabled, and then run the `systemd` command to view the logs of the corresponding service. Further logs are stored in the process or service folder named after the path specified by **criu_dir**. The dump.log file stores the logs generated when the running information is retained, and the restore.log file restores the logs generated for process recovery. + +## 4. The Recovery Fails, and the Log Displays "Can't fork for 948: File exists" + +Cause: The kernel hot upgrade tool finds that the PID of the program is occupied during program recovery. + +Solution: The current kernel does not provide a mechanism for retaining PIDs. Related policies are being developed. This restriction will be resolved in later kernel versions. Currently, you can only manually restart related processes. + +## 5. When the `nvwa` Command Is Used to save and Recover a Simple Program (Hello World), the System Displays a Message Indicating That the Operation Fails or the Program Is Not Running + +Cause: There are many restrictions on the use of CRIU. + +Solution: View the NVWA logs. If the error is related to the CRIU, check the dump.log or restore.log file in the corresponding directory. For details about the usage restrictions related to the CRIU, see [CRIU WiKi](https://criu.org/What_cannot_be_checkpointed). diff --git a/docs/en/faq/server/migration_faqs.md b/docs/en/faq/server/migration_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..5ac3070286adc36d169f22452b16750d8e1b6843 --- /dev/null +++ b/docs/en/faq/server/migration_faqs.md @@ -0,0 +1,70 @@ +# Migration FAQ + +## What guidelines and resources can I refer to during migration + +You can refer to the following resources to help you migrate to openEuler: + +- [x2openEuler document](https://docs.openeuler.org/zh/docs/20.03_LTS_SP1/docs/x2openEuler/x2openEuler.html) +- [x2openEuler download](https://repo.oepkgs.net/openEuler/rpm/openEuler-22.03-LTS/contrib/x2openEuler/noarch/Packages) +- [openEuler repositories](https://forum.openeuler.org/t/topic/768) +- [x2openEuler compatibility database (CentOS 7/8 to openEuler 22.03 LTS)](https://repo.oepkgs.net/openEuler/rpm/openEuler-22.03-LTS/contrib/x2openEuler/noarch/Packages) + +## Why does openEuler have less available memory than CentOS even when the amount of allocated physical memory is the same + +The difference in available memory is due to the difference in the amount of memory allocated for the crashkernel (memory area used during kernel crashes). For instance, with 4 GB of physical memory: + +- CentOS: 3.7 GB available (161 MB reserved for crashkernel) +- openEuler: 3.3 GB available (512 MB reserved for crashkernel) + +To match CentOS's memory availability, you can reduce openEuler's crashkernel reservation to 256 MB in the GRUB configuration file (/boot/grub2/grub.cfg). + +## What do I do if software packages cannot be parsed by macros during migration + +This issue often occurs during the migration from CentOS or Fedora to other systems and is caused by different operating systems having different macro definitions. + +There are two solutions to this issue: + +1. Query the specific meaning of the macros and replace them in the SPEC file with their expanded values. +2. Introduce the software packages that provide the macro definitions into the corresponding repository and add them to **BuildRequires**. This allows the software packages that fail to run to be parsed by macros. + +## How do I prepare the environment and check the prerequisites for VM live migration + +Before performing a VM live migration, it is essential to prepare two PMs (source and destination) and check necessary conditions to ensure a smooth migration process. These checks include: + +Permission check: ensures that the current user has permission to perform live migration. + +Network check: verifies network connectivity between the source and destination PMs, ensuring they are in the same network segment. + +Storage resource check: verifies that the source and destination PMs can access the same storage resources and ensures that the destination PM has sufficient CPU, memory, and storage resources. + +VM state check: confirms that the VM to be migrated is running. + +Additionally, you need to set live migration parameters such as maximum downtime and bandwidth during migration as required. You also need to identify whether shared or non-shared storage is being used. If the storage mode is non-shared, you may need to perform additional operations such as using NFS to achieve shared storage. + +## What is VM live migration and how does it differ from cold migration + +Virtual machine (VM) live migration is a technology that enables the seamless migration of a running VM, including its in-memory and on-drive data, to another physical server without shutting down the VM. This process is transparent to users, meaning that there is no perceived service interruption or performance degradation. Live migration is typically used for hardware maintenance, upgrades, load balancing, and ensuring high availability of critical services. + +In contrast, VM cold migration (also known as static migration) requires VM shutdown before migration. This means services on the VM are unavailable during the migration process. Cold migration is suitable for scenarios where downtime is acceptable, such as batch processing jobs or migrating non-critical services. + +## How to migrate SQL Server data from Windows to openEuler + +To migrate SQL Server data from Windows to openEuler, follow these steps: + +1. Back up the SQL Server database on Windows. You can use SQL Server Management Studio (SSMS) or SQL statements to perform the backup. +2. Once the backup is complete, transfer the backup file to openEuler using the SCP command or any other relevant method. +3. Create a new backup directory on openEuler and move the backup file into this directory. +4. Use the sqlcmd utility to execute SQL statements for restoring the database. If the database includes auxiliary files, make sure to add the **MOVE** option for these files in the **RESTORE DATABASE** statement. +5. Finally, verify the success of the data migration by listing all databases. + +## Why is hardware compatibility testing necessary during the migration from CentOS to openEuler + +Migrating from CentOS to openEuler involves not only changing the OS but also replacing, adapting, migrating, and re-building the application software and service systems running on the OS. Ensuring hardware compatibility is essential to guarantee system stability and service continuity during the migration and to prevent application failures or performance degradation afterward. Therefore, hardware compatibility testing is a key part of OS migration. + +## What can x2openEuler migration tool do and how is it used for migration assessment + +The x2openEuler migration tool provided by the openEuler community is primarily used for migration assessment and has the following functions: + +- Software assessment: It assesses applications in various formats, including RPM, TAR, ZIP, GIP, and JAR packages, Python scripts, shell scripts, and binary files by scanning the dependent software package list, and generates assessment reports in HTML format. +- Configuration collection and assessment: It supports the collection of user environment data and generates JSON files. This includes hardware configurations, configuration interfaces, kernel option configurations, system configurations (**sysctl**, **proc**, and **sys**), environment variables, services, processes, ports, command interfaces, system call items, and device driver interfaces. Then, it completes configuration analysis and assessment. +- Hardware assessment: It evaluates the compatibility of the server and boards (such as RAID, NIC, FC, IB, GPU, SSD, TPM, etc.) with openEuler's compatibility list. These functions help you identify potential compatibility issues before migration to ensure a smooth migration process. diff --git a/docs/en/faq/server/public_sys-resources/icon-caution.gif b/docs/en/faq/server/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/faq/server/public_sys-resources/icon-caution.gif differ diff --git a/docs/en/faq/server/public_sys-resources/icon-danger.gif b/docs/en/faq/server/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/faq/server/public_sys-resources/icon-danger.gif differ diff --git a/docs/en/faq/server/public_sys-resources/icon-note.gif b/docs/en/faq/server/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/en/faq/server/public_sys-resources/icon-note.gif differ diff --git a/docs/en/faq/server/public_sys-resources/icon-notice.gif b/docs/en/faq/server/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/en/faq/server/public_sys-resources/icon-notice.gif differ diff --git a/docs/en/faq/server/public_sys-resources/icon-tip.gif b/docs/en/faq/server/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/en/faq/server/public_sys-resources/icon-tip.gif differ diff --git a/docs/en/faq/server/public_sys-resources/icon-warning.gif b/docs/en/faq/server/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/en/faq/server/public_sys-resources/icon-warning.gif differ diff --git a/docs/en/faq/server/syscare_faqs.md b/docs/en/faq/server/syscare_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..4fd1c00510fd6e282e8b57c1dfe44f2b20da326e --- /dev/null +++ b/docs/en/faq/server/syscare_faqs.md @@ -0,0 +1,19 @@ +# SysCare FAQ + +## 1. "alloc upatch module memory failed" + +Possible cause: The SELinux constraint is triggered. + +Solution: Manually add policies according to the error. The policies to be added vary according to the actual situation. For details, see . + +## 2. "patch file error 2" + +Possible cause: The patch cannot be detected. + +Solution: Use another patch. + +## 3. "build project error 11" + +Possible cause: The source package fails to be compiled. + +Solution: Run `rpmbuild -ra *.src.rpm` to check if the source package can be compiled and the compilation dependencies are satisfied. diff --git a/docs/en/faq/server/system_management_faq.md b/docs/en/faq/server/system_management_faq.md new file mode 100644 index 0000000000000000000000000000000000000000..960eb60cbe823b6e925caa4f85c47c0842c801dc --- /dev/null +++ b/docs/en/faq/server/system_management_faq.md @@ -0,0 +1,28 @@ +# System Performance FAQ + +## When the NFS service is enabled on openEuler 22.03 SP1, why does the server response speed drop sharply from more than a gigabit to around 2 MB/s after less than a day of write operations + +The performance drops sharply when the NFS server's cache uses more than 50% memory. This is mainly due to issues with memory allocation and reclamation mechanisms. The system reclaims memory in the background rather than during the memory allocation process. This is slower and will increase the waiting time (e.g., 500 ms latency) when the system cannot allocate enough memory in time. This issue is particularly pronounced under heavy loads since the NFS server requires substantial memory to process client requests. As the service runtime increases, the reduction in available memory leads to a dramatic performance drop, especially when there are intensive write operations. + +## What do I do if a file fails to be created on openEuler due to an inode error of the Ext4 file system + +Set the **rec_len** field of the **dx_node** block as follows: + +Use `ext4_rec_len_from_disk()` to convert **rec_len** to **65536** and then perform a comparison. This ensures that the **rec_len** field is correctly set when a new **dx_node** block is added. +Calculate and set a correct checksum for the node. This correction will prevent the inode error caused by incorrect checksums and thus allow the system to create and manage a large number of files correctly. + +## How to reduce the excessive memory usage of service processes on openEuler due to the use of glibc tcache + +Disable the tcache feature by setting the environment variables before starting the program. Specifically, add **GLIBC_TUNABLES=glibc.malloc.tcache_count=0** to **bash_profile** to disable tcache. After the process starts, verify the process environment variables in **/proc/pid/environ** to ensure that the variable has been successfully added. Once tcache is disabled, the memory of this process will be managed in accordance with glibc 2.17, without any additional side effects. According to user feedback, this solution significantly reduces the memory usage of services on openEuler, resulting in lower memory usage than CentOS. + +## When performing a fio multi-drive stress test, why is the performance of the Arm architecture only half that of the x86 architecture + +The lower performance of the Arm architecture in the fio stress testing is due to differences in interrupt handling mechanisms. x86 achieves interrupt load balancing through APIC, while Arm's locality-specific peripheral interrupts (LPIs) are managed by Interrupt Translation Service (ITS), which by default assigns interrupts to the lowest-numbered core of each CPU. Therefore, performance bottlenecks occur on these cores during the multi-drive stress test. + +## After the server is powered off and restarted, why does an I/O error occur when I run ls in the XFS file system + +This error usually indicates that parts of the XFS file system failed to be loaded or read, possibly due to damaged file system metadata or incomplete write operations. If a power outage occurs during write operations, data may not be fully written to XFS, causing the XFS data to be inconsistent after the server reboots. Running a command such as ls at this time will result in an input/output error. + +## What do I do if the new kernel is not used upon system boot + +Replace the contents of the **/boot/grub2/grub.cfg** file with those of the **/boot/efi/EFI/xxxx/grub.cfg** file. This ensures that the system reads the correct configuration file containing the new kernel information upon system boot. In addition, check the system boot mode and confirm that UEFI is being used. diff --git a/docs/en/faq/server/trusted_computing_faqs.md b/docs/en/faq/server/trusted_computing_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..b2cd5976a343eb9e355ccf54d935941c6f3c8f41 --- /dev/null +++ b/docs/en/faq/server/trusted_computing_faqs.md @@ -0,0 +1,252 @@ +# Trusted Computing FAQ + +## 1. System Fails to Boot After IMA Appraisal Enforce Mode Is Enabled with the Default Policy + +### Possible Causes + +The default IMA policy may include checks for critical file access processes such as application execution and kernel module loading. If access to these critical files fails, the system may fail to boot. Common causes include: + +1. The IMA verification certificate is not imported into the kernel, causing the digest list to fail verification. +2. The digest list file is not correctly signed, leading to verification failure. +3. The digest list file is not imported into the initrd, preventing the digest list from being loaded during the boot process. +4. The digest list file does not match the application, causing the application to fail matching the imported digest list. + +### Solution + +Enter the system in log mode to locate and fix the issue. Reboot the system, enter the GRUB menu, and modify the boot parameters to start in log mode: + +```ini +ima_appraise=log +``` + +After the system boots, follow the steps below to troubleshoot. + +**Step 1:** Check the IMA certificates in the key ring. + +```shell +keyctl show %:.builtin_trusted_keys +``` + +For openEuler LTS versions, at least the following kernel certificates should exist (for other versions, reference based on their release dates): + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VersionCertificate
openEuler 22.03 LTSprivate OBS b25e7f66
openEuler 22.03 LTS SP1/2/3private OBS b25e7f66
openeuler <openeuler@compass-ci.com> b675600b
openEuler 22.03 LTS SP4private OBS b25e7f66
openeuler <openeuler@compass-ci.com> b675600b
openeuler <openeuler@compass-ci.com> fb37bc6f
openEuler 24.03openEuler kernel ICA 1: 90bb67eb4b57eb62bf6f867e4f56bd4e19e7d041
+ +If you have imported other kernel root certificates, use the `keyctl` command to confirm whether the certificates were successfully imported. By default, openEuler does not use the IMA key ring. If you are using it, check whether the user certificates exist in the IMA key ring with the following command: + +```shell +keyctl show %:.ima +``` + +If the issue is that the certificate was not correctly imported, refer to _User Certificate Import_ for troubleshooting. + +**Step 2:** Check if the digest list contains signature information. + +Query the digest list files in the current system with the following command: + +```shell +ls /etc/ima/digest_lists | grep '_list-compact-' +``` + +For each digest list file, ensure that **one of the following three** signature conditions is met: + +1. The digest list file has a corresponding **RPM digest list file**, and the `security.ima` extended attribute of the **RPM digest list file** contains a signature value. For example, for the bash package digest list, the digest list file path is: + + ```text + /etc/ima/digest_lists/0-metadata_list-compact-bash-5.1.8-6.oe2203sp1.x86_64 + ``` + + The RPM digest list path is: + + ```text + /etc/ima/digest_lists/0-metadata_list-rpm-bash-5.1.8-6.oe2203sp1.x86_64 + ``` + + Check the RPM digest list signature by ensuring the `security.ima` extended attribute is not empty: + + ```shell + getfattr -n security.ima /etc/ima/digest_lists/0-metadata_list-rpm-bash-5.1.8-6.oe2203sp1.x86_64 + ``` + +2. The `security.ima` extended attribute of the digest list file is not empty: + + ```shell + getfattr -n security.ima /etc/ima/digest_lists/0-metadata_list-compact-bash-5.1.8-6.oe2203sp1.x86_64 + ``` + +3. The digest list file contains signature information at the end. Verify if the file content ends with the `~Module signature appended~` magic string (supported in openEuler 24.03 LTS and later versions): + + ```shell + tail -c 28 /etc/ima/digest_lists/0-metadata_list-compact-kernel-6.6.0-28.0.0.34.oe2403.x86_64 + ``` + +If the issue is that the digest list does not contain signature information, refer to _Digest List File Signing Methods_ for troubleshooting. + +**Step 3:** Verify the correctness of the digest list signature. + +After ensuring that the digest list contains signature information, also ensure that the digest list is signed with the correct private key, meaning the signing private key matches the certificate in the kernel. In addition to manually checking the private key, users can check the dmesg logs or audit logs (default path: **/var/log/audit/audit.log**) for signature verification failures. A typical log output is as follows: + +```ini +type=INTEGRITY_DATA msg=audit(1722578008.756:154): pid=3358 uid=0 auid=0 ses=1 subj=unconfined_u:unconfined_r:haikang_t:s0-s0:c0.c1023 op=appraise_data cause=invalid-signature comm="bash" name="/root/0-metadata_list-compact-bash-5.1.8-6.oe2203sp1.x86_64" dev="dm-0" ino=785161 res=0 errno=0UID="root" AUID="root" +``` + +If the issue is incorrect signature information, refer to _Digest List File Signing Methods_ for troubleshooting. + +**Step 4:** Check if the digest list file is imported into the initrd. + +Query whether the digest list file exists in the current initrd with the following command: + +```shell +lsinitrd | grep 'etc/ima/digest_lists' +``` + +If no digest list file is found, users need to recreate the initrd and verify that the digest list is successfully imported: + +```shell +dracut -f -e xattr +``` + +**Step 5:** Verify that the IMA digest list matches the application. + +Refer to [Question 2](#2-file-execution-fails-after-ima-appraisal-enforce-mode-is-enabled). + +## 2. File Execution Fails After IMA Appraisal Enforce Mode Is Enabled + +### Possible Causes + +After IMA appraisal enforce mode is enabled, if the content or extended attributes of a file configured with IMA policies are incorrect (for example, they do not match the imported digest list), file access may be denied. Common causes include: + +1. The digest list was not successfully imported (refer to [Question 1](#1-system-fails-to-boot-after-ima-appraisal-enforce-mode-is-enabled-with-the-default-policy). +2. The file content or attributes have been tampered with. + +### Solution + +For scenarios where file execution fails, first ensure that the digest list file has been successfully imported into the kernel. Check the number of digest lists to determine the import status: + +```shell +cat /sys/kernel/security/ima/digests_count +``` + +Next, use the audit logs (default path: **/var/log/audit/audit.log**) to identify which file failed verification and the reason. A typical log output is as follows: + +```ini +type=INTEGRITY_DATA msg=audit(1722811960.997:2967): pid=7613 uid=0 auid=0 ses=1 subj=unconfined_u:unconfined_r:haikang_t:s0-s0:c0.c1023 op=appraise_data cause=IMA-signature-required comm="bash" name="/root/test" dev="dm-0" ino=814424 res=0 errno=0UID="root" AUID="root" +``` + +After identifying the file that failed verification, compare it with the TLV digest list to determine the cause of tampering. For scenarios where extended attribute verification is not enabled, only compare the SHA256 hash value of the file with the `IMA digest` entry in the TLV digest list. For scenarios where extended attribute verification is enabled, also compare the current file attributes with the extended attributes displayed in the TLV digest list. + +Once the cause of the issue is determined, resolve it by restoring the file content and attributes or regenerating the digest list for the file, signing it, and importing it into the kernel. + +## 3. Errors Occur During Packages Installation Across openEuler 22.03 LTS SP Versions After IMA Appraisal Mode Is Enabled + +### Possible Causes + +After IMA appraisal mode is enabled, installing packages from different SP versions of openEuler 22.03 LTS triggers the import of IMA digest lists. This process includes a signature verification step, where the kernel uses its certificates to verify the digest list signatures. Due to changes in signing certificates during the evolution of openEuler, backward compatibility issues may arise in certain cross-SP-version installation scenarios (there are no forward compatibility issues, meaning newer kernels can verify older IMA digest list files without problems). + +### Solution + +You are advised to ensure that the following signing certificates are present in the current kernel: + +```shell +# keyctl show %:.builtin_trusted_keys +Keyring + 566488577 ---lswrv 0 0 keyring: .builtin_trusted_keys + 383580336 ---lswrv 0 0 \_ asymmetric: openeuler b675600b + 453794670 ---lswrv 0 0 \_ asymmetric: private OBS b25e7f66 + 938520011 ---lswrv 0 0 \_ asymmetric: openeuler fb37bc6f +``` + +If any certificates are missing, you are advised to upgrade the kernel to the latest version: + +```shell +yum update kernel +``` + +openEuler 24.03 LTS and later versions include dedicated IMA certificates and support certificate chain verification, ensuring the certificate lifecycle covers the entire LTS version. + +## 4. IMA Digest List Import Fails Despite Correct Signatures After IMA Digest List Appraisal Mode Is Enabled + +### Possible Causes + +The IMA digest list import process includes a verification mechanism. If a digest list fails signature verification during import, the digest list import functionality is disabled, preventing even correctly signed digest lists from being imported afterward. Check the dmesg logs for the following message to confirm if this is the cause: + +```shell +# dmesg +ima: 0-metadata_list-compact-bash-5.1.8-6.oe2203sp1.x86_64 not appraised, disabling digest lists lookup for appraisal +``` + +If such a log is present, a digest list file with an incorrect signature was imported while IMA digest list appraisal mode was enabled, causing the functionality to be disabled. + +### Solution + +Reboot the system and fix the incorrect digest list signature information. + +## 5. Importing User-Defined IMA Certificates Fails in openEuler 24.03 LTS and Later Versions + +Linux kernel 6.6 introduced additional field validation restrictions for importing certificates. Certificates imported into the IMA key ring must meet the following constraints (following the X.509 standard format): + +- It must be a digital signature certificate, meaning the `keyUsage=digitalSignature` field must be set. +- It must not be a CA certificate, meaning the `basicConstraints=CA:TRUE` field must not be set. +- It must not be an intermediate certificate, meaning the `keyUsage=keyCertSign` field must not be set. + +## 6. kdump Service Fails to Start After IMA Appraisal Mode Is Enabled + +After IMA appraisal enforce mode is enabled, if the IMA policy includes the following `KEXEC_KERNEL_CHECK` rule, the kdump service may fail to start: + +```shell +appraise func=KEXEC_KERNEL_CHECK appraise_type=imasig +``` + +The reason is that in this scenario, all files loaded via `kexec` must undergo integrity verification. As a result, the kernel restricts the loading of kernel image files by kdump to the `kexec_file_load` system call. This can be enabled by modifying the **/etc/sysconfig/kdump** configuration file: + +```shell +KDUMP_FILE_LOAD="on" +``` + +Additionally, the `kexec_file_load` system call itself performs signature verification on the files. Therefore, the kernel image file being loaded must contain a valid secure boot signature, and the current kernel must include the corresponding verification certificate. + +## 7. RAS Fails to Start After Installation + +### Possible Causes + +In the current RAS design logic, the program requires an `ecdsakey.pub` file in its working directory upon startup. This file serves as an authentication key for subsequent access. If the file is missing, RAS will fail to start. + +### Solution + +- Run `ras -T` to generate a test token—this will automatically create `ecdsakey.pub`. +- Alternatively, if deploying a custom OAuth2 service, save the corresponding JWT token verification public key as `ecdsakey.pub`. + +## 8. RAS REST API Unreachable After Startup + +By default, RAS starts in HTTPS mode, requiring a valid certificate for proper access. If it runs in HTTP mode, no certificate is needed. diff --git a/docs/en/faq/virtualization/virt_faq.md b/docs/en/faq/virtualization/virt_faq.md new file mode 100644 index 0000000000000000000000000000000000000000..864293ac32f1e2de52ef41c7dbd9dfcc2008b4fe --- /dev/null +++ b/docs/en/faq/virtualization/virt_faq.md @@ -0,0 +1,13 @@ +# Virtualization FAQ + +## 1. Why is the QEMU hot patch created with the libcareplus tool unable to be loaded + +This issue occurs because the QEMU version is inconsistent with the hot patch version. You can download the source code of the corresponding QEMU version and use the buildID to ensure that the environment for creating a hot patch matches the environment for creating a QEMU package. If you do not have the environment for making the QEMU version, you can compile and install the QEMU version and use the buildID of **`/usr/libexec/qemu-kvm`** in the self-compiled package. + +## 2. Why is the hot patch made using the libcareplus tool loaded but not working + +Check whether the functions of the patch are infinite loop, non-exit, and recursive functions or initialization functions, inline functions, and short functions that are shorter than 5 bytes. These functions are within the constraints. + +## 3. Why does the initial display of kvmtop show high variability from two samples taken 0.05 seconds apart + +This occurs due to a known limitation in the open source top framework, with no current resolution available. diff --git a/docs/zh/contribute/_toc.yaml b/docs/zh/contribute/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4a6a8fdaabeb385daa28af14c46b845d846a1158 --- /dev/null +++ b/docs/zh/contribute/_toc.yaml @@ -0,0 +1,13 @@ +label: 文档开发指南 +isManual: true +sections: + - label: 概述 + href: ./directory_structure_introductory.md + - label: 快速入门 + href: ./contribution_process.md + - label: 规范与门禁 + sections: + - label: 文档写作规范 + href: ./documentation_writing_specifications.md + - label: 文档发布流水线门禁 + href: ./ci_rules.md diff --git a/docs/zh/contribute/ci_rules.md b/docs/zh/contribute/ci_rules.md new file mode 100644 index 0000000000000000000000000000000000000000..190f68aa9368783d7d9f01afe5ea5dd00c699d1e --- /dev/null +++ b/docs/zh/contribute/ci_rules.md @@ -0,0 +1,93 @@ +# 文档开发流水线门禁 + +为提升文档质量,openEuler docs 仓引入了自动化动检视工具,对文档中低错问题进行排查。 + +开发者提交PR后,会自动触发门禁进行检查。当返回如下结果时表示已经通过了工具检查: + +![](./figures/ci门禁检查结果.png) + +通过门禁检查是PR合入的必要条件之一,检查项提示错误可在`Build Details`查看错误详细信息。 + +下面将对各个检查项进行介绍: + +## Markdown Lint + +Markdown Lint 对markdown文档的格式进行检视。markdownlint规则介绍及本仓规则设置,请参考[**检查规则**](https://gitee.com/openeuler/docs/blob/common/docs/zh/contribute/markdownlint_rules.md)。可使用[**工具**](https://gitee.com/openeuler/docs/blob/common/docs/zh/contribute/markdownlint_tools.md)对 markdownlint 进行批量修复。 + +## Tag Closed Check + +Tag Closed Check将检查文档里HTML标签闭合问题。请注意,代码块里的HTML标签将不会扫描。 + +反例: + + ```html + + + + + +
Header 1 + Header 2
Data 1 + Data 2
+ ``` + +正例: + + ```html + + + + + + + + + +
Header 1Header 2
Data 1Data 2
+ ``` + +## Link Validity Check + +Link Validity Check 将检查文档中出现的所有链接是否有效。 + +反例: + + ```text + ![错误官网](https://doc.openeuler.org/zh/) + ``` + +正例: + + ```text + ![正确官网](https://docs.openeuler.org/zh/) + ``` + +## Resource Existence Check + +此检查项将确认本地图片或者链接是否有效。 + +反例: + + ```text + ![ci图片](./ci检查结果.jpg) + ``` + +正例: + + ```text + ![ci图片](./figures/ci检查结果.jpg) + ``` + +## Toc Check + +- 新增文档为确保能在 openEuler 文档官网展示,需要在对应`_toc.yaml`文件增加所在章节位置,否则此检查项报错。新增文档场景写作流程可参考快速入门的[指导](./contribution_process.md#新增文档),`toc.yaml`文件写作可参考[_toc.yaml文件写作规范](./directory_structure_introductory.md#目录结构文件格式)。 + +- 变更文档名称时,File Exist Check会检查对应`_toc.yaml`文件是否同步修改文档名称。 + +- 在进行File Exist Check检查时,门禁会对文档进行全量检查,检查每个`_toc.yaml`文件中所有的文件是否存在于文档对应的路径下,若`_toc.yaml`文件中记录的文件不存在,则会报错。 + +## CodeSpell Check + +Codespell 主要用于检查文档中的单词拼写错误,详细信息可参考。 + +如果有特殊单词需要加入忽略清单,可联系[ECHO](https://gitee.com/echo10111111)和[wu-donger](https://gitee.com/wu-donger)。 diff --git a/docs/zh/contribute/contribution_process.md b/docs/zh/contribute/contribution_process.md new file mode 100644 index 0000000000000000000000000000000000000000..6a76b93b03dc14e339246369f8880f5a39576e2d --- /dev/null +++ b/docs/zh/contribute/contribution_process.md @@ -0,0 +1,175 @@ +# 快速入门 + +## 概述 + +本文档围绕新增文档,修改文档,删除文档三个任务场景,为开发者明确文档开发流程。 + +**开发需要具备以下经验和技能:** + +- 了解 [openEuler 文档组织架构](./directory_structure_introductory.md) +- 了解 [markdown 写作规范](./documentation_writing_specifications.md) +- 了解 [开源社区贡献流程](https://gitee.com/openeuler/docs/blob/common/docs/zh/contribute/openEuler%E5%BC%80%E6%BA%90%E7%A4%BE%E5%8C%BA%E8%B4%A1%E7%8C%AE%E6%8C%87%E5%8D%97.md) + +## 通用流程 + +首先,要明确待修改文档所在的仓库。可依据手册名称,定位对应的[文档仓库及具体存放目录](./directory_structure_introductory.md#文档存放地址)。下面以服务器场景《安装指南》的修改为例,介绍新增文档,修改文档,删除文档三个任务场景的通用流程。 + +1. 克隆仓库。 + + fork 远程仓库,克隆 fork 仓库到本地,并将本地仓库与远程仓库关联。 + + ```bash + git clone https://gitee.com/wu-donger/docs.git + + git remote add upstream https://gitee.com/openeuler/docs.git + ``` + +2. 切换分支。 + + 依据所需修改文档的版本,切换到对应的分支。通常情况下,分支命名规则为`stable2-版本号`。此处以25.03版本为例。 + + ```bash + git fetch upstream + + git checkout stable2-25.03 + + git rebase upstream/stable2-25.03 + + git checkout -b work25.03 + ``` + +3. 提交变更。 + + 文档变更具体操作参考[新增文档](#新增文档)、[修改文档](#修改文档)、[删除文档](#删除文档)章节。 + + ```bash + git add . + + git commit -m "提交原因" + ``` + +4. 推送到远程仓库,并创建 PR。 + + ```bash + git push origin work25.03 + ``` + +## 新增文档 + +新增文档章节旨在指导开发者新增一本完整的手册。若要在现有手册中添加内容,比如在《升级指南》中增加“常用工具”章节,则参考[修改文档](#修改文档)。 + +以在服务器场景下新增《升级指南》为例,可参考以下操作步骤: + +1. 创建存放文件夹 + + 首先确定《升级指南》的所属场景,进而找到其在文档仓的[存放位置](./directory_structure_introductory.md#文档存放地址),在此处新建一个文件夹,用于存放该指南下所有的`.md`文件。 + + ```text{7-9} + ├─docs + | ├─en + | └─zh + | └─Server # 场景:服务器 + | └─InstallationUpgrade # 一级目录:安装升级 + | ├─Installation # 手册:《安装指南》 + | └─Upgrade # 新建文件夹:《升级指南》 + | ├─openEuler_22.03_LTS_upgrade_and_downgrade.md # 文档内容文件 + | └─_toc.yaml # 文档目录结构文件 + ``` + +2. 编辑目录结构文件`_toc.yaml` + + 在步骤 1 所创建的文件夹中,新建一个`_toc.yaml`文件,以维护手册内各章节的展示逻辑。 + + ```yaml + label: 升级指南 # 手册名:《升级指南》 // [!code ++] + isManual: true # isManual:标识此文件是手册的目录结构文件,与场景的目录结构文件作区分 // [!code ++] + description: 升级 openEuler 操作系统 # 手册简介 // [!code ++] + sections: // [!code ++] + - label: 升降级指导 # 章节名:升降级指导 // [!code ++] + href: ./openEuler_22.03_LTS_upgrade_and_downgrade.md # 文档内容文件引用 // [!code ++] + ``` + +3. 关联手册至对应场景 + + 在服务器场景的 [_toc.yaml](https://gitee.com/openeuler/docs/blob/25.03/docs/zh/server/_toc.yaml) 文件中,添加对《升级指南》的引用。 + + ```yaml + label: 服务器 # 场景名:服务器 + sections: + - label: 从这里开始 # 一级目录:从这里开始 + sections: + - href: ./releasenotes/releasenotes/_toc.yaml # 手册:《发行说明》 + - href: ./quickstart/quickstart/_toc.yaml # 手册:《快速入门》 + - label: 安装升级 # 一级目录:安装升级 + sections: + - href: ./installation_upgrade/installation/_toc.yaml # 手册:《安装指南》 + ``` + +## 修改文档 + +文档修改分为以下三种情况: + +- 仅内容修改:在现有手册章节中修改文档内容,例如,在《安装指南》的“安装方式介绍”章节中,添加一种新的安装方式。找到文档的[存放位置](./directory_structure_introductory.md#文档存放地址),并对其内容进行相应调整,仅内容修改无需改动目录结构文件(_toc.yaml)。 + +- 新增、删除章节:找到手册的[存放位置](./directory_structure_introductory.md#文档存放地址),新增或删除章节对应的内容文件,并修改手册的目录结构文件`_toc.yaml`。 + + 以在《升级指南》中增加“常用升级软件”章节为例,首先在《升级指南》的存放目录下,新增文档内容文件`software.md`,并在《升级指南》的 [_toc.yaml](https://gitee.com/openeuler/docs/blob/25.03/docs/zh/server/installation_upgrade/upgrade/_toc.yaml) 下,增加对`software.md`的引用: + + ```yaml + label: 升级指南 # 手册名:《升级指南》 + isManual: true # ismanual:识此文件是手册的目录结构文件,与场景的目录结构文件作区分 + description: 升级 openEuler 操作系统 # 手册说明 + sections: + - label: 升降级指导 # 章节名:升降级指导 + href: ./openEuler_22.03_LTS_upgrade_and_downgrade.md # 文档内容文件地址 + - label: 常用升级软件 # 新增章节名:常用升级软件 // [!code ++] + href: ./software.md # 新增章节的内容文件地址 // [!code ++] + ``` + +- 手册在文档中心呈现位置修改:找到所属场景的`_toc.yaml`并修改。 + + 例如,在服务器场景下,若开发者希望将《升级指南》调整至《安装指南》前面显示,需找到服务器场景的 [_toc.yaml](https://gitee.com/openeuler/docs/blob/25.03/docs/zh/server/_toc.yaml) 文件并加以修改: + + ```yaml + label: 服务器 # 场景名:服务器 + sections: + - label: 从这里开始 # 一级目录:从这里开始 + sections: + - href: ./releasenotes/releasenotes/_toc.yaml # 手册:《发行说明》 + - href: ./quickstart/quickstart/_toc.yaml # 手册:《快速入门》 + - label: '安装升级' # 一级目录:安装升级 + sections: + - href: ./installation_upgrade/upgrade/_toc.yaml' # 《升级指南》放在《安装指南》上面 // [!code ++] + - href: ./installation_upgrade/installation/_toc.yaml' # 手册:《安装指南》 // [!code ++] + - href: ./installation_upgrade/upgrade/_toc.yaml' // [!code --] + - label: '系统管理' + sections: + - href: './administration/administrator/_toc.yaml' + - href: './administration/sysmaster/_toc.yaml' + - href: './administration/compa_command/_toc.yaml' + ``` + +## 删除文档 + +删除文档章节旨在指导开发者删除一本完整的手册。若要在现有手册中删除内容,比如在《管理员指南》中删除“管理进程”章节,则参考[修改文档](#修改文档)。 + +以在虚拟化场景下删除《虚拟化用户指南》为例,可参考以下操作步骤: + +1. 首先,确定想要删除手册的[存放位置](./directory_structure_introductory.md#文档存放地址),将其删除。 + +2. 在虚拟化场景的 [_toc.yaml](https://gitee.com/openeuler/docs/blob/25.03/docs/zh/virtualization/_toc.yaml) 文件中,删除对《OpenStack 用户手册》的引用。 + + ```yaml + label: 虚拟化 # 场景:虚拟化 + sections: + - label: 虚拟化平台 # 一级目录:虚拟化平台 + sections: + - href: ./virtualization_platform/virtualization/_toc.yaml # 删除对《OpenStack 用户手册》目录结构文件的引用 // [!code --] + - href: ./virtualization_platform/stratovirt/_toc.yaml + ``` + +## 文档暂不在文档中心发布 + +如果开发者所创作的文档内容,暂时不适合推广或尚不成熟,目前无需发布在文档中心,可在文档仓的 [archive](https://gitee.com/openeuler/docs/tree/25.03/archive) 目录中进行增删改。等到需要发布时,再将其移至合适的目录,注意这类文档同样需要遵循写作规范。 + +> 注意:提交至 archive 目录的文档,按计划未来会发布到文档中心,若长时间无人维护,将会被清理。 diff --git a/docs/zh/contribute/directory_structure_introductory.md b/docs/zh/contribute/directory_structure_introductory.md new file mode 100644 index 0000000000000000000000000000000000000000..c3419fab06921696b42e87fadd0a58f1497d7fa4 --- /dev/null +++ b/docs/zh/contribute/directory_structure_introductory.md @@ -0,0 +1,810 @@ +# 概述 + +## 介绍 + +本文介绍 openEuler 文档的生产发布流程与文档仓的组织架构,同时提供每本手册在文档仓中的具体存放位置。 + +![image](figures/架构图.png) + +openEuler 文档的生产发布机制如上图所示。 + +- 文档中心将社区文档按业务场景和工具模块进行划分: + - 业务场景:服务器、虚拟化、云原生、边缘计算、嵌入式。 + - 工具:社区工具、DevOps、AI、图形桌面使用、云原生工具、系统运维、安全。 +- 发布机制: + - 每个场景及工具模块均有对应目录结构文件(_toc.yaml)。这些配置文件均存于 openEuler/docs 仓,由 DOC SIG 集中管理。 + - 各文档的责任 SIG 需将文档目录结构文件引用,添加到所属场景或工具模块的目录结构文件中,使文档可在对应模块下呈现。 +- 文档生产: + - openEuler的文档生产在 openEuler/docs 仓以及各 SIG 组的 docs 仓中进行。 + - 基础特性文档,如发行说明、快速入门、安装、升级、管理员指南、配置与逻辑卷、配置网络、故障处理等,均存在 openEuler/docs 仓,由 DOC SIG 生产并维护。 + - 增量特性文档,如 A-Tune 用户指南、x2openEuler 特性指南、oeAware 用户指南等,责任主体为特性所属的 SIG 组,分别存放在各 SIG 组的 docs 仓内。 + - 各 SIG 在文档仓中维护的文件包括:文档内容文件和目录结构文件(_toc.yaml)。其中,文档内容文件用来存放文档实际内容,文档目录结构文件用来维护文档章节呈现结构。 + +在文档仓中,docs 目录下的内容会展示于官网,其下设有 zh 和 en 两个子目录,分别用以存放中文文档与英文文档,文档目录结构严格参照官网呈现的目录层级规划设置。此外,文档仓还设有 archive 目录,用来存放暂不适合推广,或尚不成熟的文档。待文档完善且满足发布需求时,再将其移至 docs 目录,以便在官网展示。 + +```text +├─docs +│ ├─en +│ └─zh +├─archive +``` + +## 文档仓目录结构说明 + +### 场景 + +文档中心有五个业务场景,服务器、虚拟化、云原生、边缘计算和嵌入式,分别对应 docs 仓内 docs/zh 目录下的 server、virtualization、cloud、edge_computing 和 embedded 子目录,工具模块对应 tools 子目录。 + +文档仓场景相关目录结构示例如下: + +```text +├─Archive +├─docs +│ ├─en +│ └─zh +│ ├─server +│ ├─virtualization +│ ├─cloud +│ ├─edge_computing +│ ├─embedded +│ └─tools +``` + +工具模块下的子模块包括社区工具、DevOps、AI、图形桌面使用、云原生工具、系统运维和安全,分别对应 tools 目录下的 community_tools、devops、ai、desktop、cloud、maintenance 和 security 子目录。 + +文档仓工具相关目录结构示例如下: + +```text{9-16} +├─docs +│ ├─en +│ └─zh +│ ├─server +│ ├─virtualization +│ ├─cloud +│ ├─edge_computing +│ ├─embedded +│ └─tools +│ ├─community_tools +│ ├─devops +│ ├─ai +│ ├─desktop +│ ├─cloud +│ ├─maintenance +│ └─security + +``` + +### 目录 + +各业务场景下均有具体的目录划分。以服务器场景为例,其进一步细分为发行说明、快速入门、安装升级、系统管理、系统运维等一级目录。 + +文档仓服务器场景目录结构示例如下: + +```text{4-17} +├─docs +│ ├─en +│ └─zh +│ ├─server +│ │ ├─releasenotes +│ │ ├─quickstart +│ │ ├─installation_upgrade +│ │ ├─administration +│ │ ├─maintenance +| | ├─security +│ │ ├─memory_storage +│ │ ├─network +│ │ ├─performance +│ │ ├─development +│ │ ├─high_availability +│ │ ├─diversified_computing +│ │ └─_toc.yaml +│ ├─virtualization +│ ├─cloud +│ ├─edgecomputing +│ ├─embedded +│ └─tools + +``` + +部分一级目录会进一步细分出二级目录,以服务器场景中的性能调优目录为例,其下进一步划分出二级目录,分别为概述、CPU调优、系统调优、调优框架。 + +文档仓服务器下性能调优的目录结构示例如下: + +```text{13-22} +├─docs +│ ├─en +│ └─zh +│ ├─server +│ │ ├─releasenotes +│ │ ├─quickstart +│ │ ├─installation_upgrade +│ │ ├─administration +│ │ ├─maintenance +| | ├─security +│ │ ├─memory_storage +│ │ ├─network +│ │ ├─performance +│ │ │ ├─overall +│ │ │ │ └─system_resource +│ │ │ ├─cpu_optimization +│ │ │ │ ├─kae +│ │ │ │ └─sysboost +│ │ │ ├─system_optimization +│ │ │ │ └─atune +│ │ │ └─tuning_framework +│ │ │ └─oeaware +│ │ ├─development +│ │ ├─high_availability +│ │ ├─diversified_computing +│ │ └─_toc.yaml +│ ├─virtualization +│ ├─cloud +│ ├─edge_computing +│ ├─embedded +│ └─tools +``` + +### 手册 + +目录下存放手册。以服务器场景中的系统运维目录为例,其中包含八本手册,每本手册分别对应文档仓的一个文件夹。 + +文档仓服务器下系统运维的目录结构示例如下: + +```text{9-17} +├─docs +│ ├─en +│ └─zh +│ ├─server +│ │ ├─releasenotes +│ │ ├─quickstart +│ │ ├─installation_upgrade +│ │ ├─administration +│ │ ├─maintenance +│ │ │ ├─aops +│ │ │ ├─common_skills +│ │ │ ├─common_tools +│ │ │ ├─gala +│ │ │ ├─kernel_live_upgrade +│ │ │ ├─syscare +│ │ │ ├─sysmonitor +│ │ │ └─trouble_shooting +| | ├─security +│ │ ├─memory_storage +│ │ ├─network +│ │ ├─performance +│ │ ├─development +│ │ ├─high_availability +│ │ ├─diversified_computing +│ │ └─_toc.yaml +│ ├─virtualization +│ ├─cloud +│ ├─edge_computing +│ ├─embedded +│ └─tools +``` + +每本手册包含一个或多个文档内容文件(`.md`文件)对应一个或多个章节,及一个目录结构文件(`_toc.yaml`文件)。例如,《内核热升级指南》手册中包括三个章节,包括安装与部署、使用方法、常用问题与解决办法。 + +```text{14-18} +├─docs +│ ├─en +│ └─zh +│ ├─server +│ │ ├─quickstart +│ │ ├─releasenotes +│ │ ├─installation_upgrade +│ │ ├─administration +│ │ ├─maintenance +│ │ │ ├─aops +│ │ │ ├─common_skills +│ │ │ ├─common_tools +│ │ │ ├─gala +│ │ │ ├─kernel_live_upgrade +│ | │ │ ├─installation-and-deployment.md +│ | │ │ ├─how-to-run.md +│ | │ │ ├─common-problems-and-solutions.md +│ | │ │ └─_toc.yaml +| | ├─security +│ │ ├─memory_storage +│ │ ├─network +│ │ ├─performance +│ │ ├─development +│ │ ├─high_availability +│ │ ├─diversified_computing +│ │ └─_toc.yaml +│ ├─cloud +│ ├─edge_computing +│ ├─embedded +│ ├─tools +│ └─virtualization +``` + +## 目录结构文件格式 + +各个场景、每本手册均配置一个`_toc.yaml`文件,以维护目录结构。下面以虚拟化场景为例展示`_toc.yaml`的存放位置,其他场景的存放逻辑类似。 + +```text +├─docs +│ └─zh +│ ├─virtualization +│ │ ├─vitualization_platform +│ │ | ├─stratovirt +│ │ | | └─_toc.yaml // [!code highlight] +│ │ | ├─virtualization +│ │ | | └─_toc.yaml // [!code highlight] +│ │ └─_toc.yaml // [!code highlight] +``` + +### 手册的目录结构文件 + +每本手册都需要维护一个目录结构文件`_toc.yaml`来维护该本手册中各章节间的逻辑关系。 + +《内核热升级指南》手册的`_toc.yaml`文件示例如下: + +```yaml +label: 内核热升级指南 +isManual: true +description: 使用用户态自动化工具快速重启内核和程序热迁移实现内核热替换特性 +sections: + - label: 安装与部署 + href: ./installation-and-deployment.md + - label: 使用方法 + href: ./how-to-run.md + - label: 常见问题与解决方法 + href: ./common-problems-and-solutions.md +``` + +- label:手册名称。 +- isManual:标识手册的目录结构文件,与场景的目录结构文件作区分。 +- description:手册的简介说明。 +- sections: + - label:章节名称。 + - href:文档内容文件地址(建议使用相对路径)。 + +### 场景的目录结构文件 + +各业务场景下也要维护`_toc.yaml`文件,其中引用手册的`_toc.yaml`文件。以服务器场景为例,其`_toc.yaml`文件示例如下: + +```yaml +label: 服务器 +sections: + - label: 发行说明 + sections: + - href: ./releasenotes/releasenotes/_toc.yaml + - label: 快速入门 + sections: + - href: ./quickstart/quickstart/_toc.yaml + - label: 安装升级 + sections: + - href: ./installation_upgrade/installation/_toc.yaml + - href: ./installation_upgrade/upgrade/_toc.yaml + - label: 系统管理 + sections: + - href: ./administration/administrator/_toc.yaml + - href: ./administration/sysmaster/_toc.yaml + - href: ./administration/compa_command/_toc.yaml + - label: 系统运维 + 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/trouble_shooting/_toc.yaml + - label: 安全 + sections: + - href: ./security/secharden/_toc.yaml + - href: ./security/trusted_computing/_toc.yaml + - href: ./security/secgear/_toc.yaml + - href: ./security/cve-ease/_toc.yaml + - href: ./security/cert_signature/_toc.yaml + - href: ./security/sbom/_toc.yaml + - href: ./security/shangmi/_toc.yaml + - label: 内存与存储 + sections: + - href: ./memory_storage/lvm/_toc.yaml + - href: ./memory_storage/etmem/_toc.yaml + - href: ./memory_storage/gmem/_toc.yaml + - href: ./memory_storage/hsak/_toc.yaml + - label: 网络 + sections: + - href: ./network/network_config/_toc.yaml + - href: ./network/gazelle/_toc.yaml + - label: 性能调优 + sections: + - label: 概述 + sections: + - href: ./system_resource/_toc.yaml + - label: 调优框架 + sections: + - href: ./oeaware/_toc.yaml + - label: cpu调优 + sections: + - href: ./sysboost/_toc.yaml + - href: ./kae/_toc.yaml + - label: 系统调优 + sections: + - href: ./atune/_toc.yaml + - label: 应用开发 + sections: + - href: ./development/applicationdev/_toc.yaml + - href: ./development/gcc/_toc.yaml + - label: ha高可用 + sections: + - href: ./high_availability/ha/_toc.yaml + - label: 多样性算力 + sections: + - href: ./diversified_computing/dpu_offload/_toc.yaml + - href: ./diversified_computing/dpu_os/_toc.yaml +``` + +- label:场景名称。 +- description:场景的简介说明。 +- sections: + - label: 一级目录名称。 + - sections: + - href:手册的目录结构文件引用。 + +## 文档存放地址 + +openEuler 文档存储于 [openEuler/docs](https://gitee.com/openeuler/docs) 仓和各 SIG 的文档仓。以下为您提供每本手册在文档仓中的具体存放地址。 + +### 服务器 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
场景类别手册存放地址
服务器发行说明发行说明docs/zh/server/releasenotes/releasenotes
快速入门快速入门docs/zh/server/quickstart/quickstart
安装升级安装指南docs/zh/server/installation_upgrade/installation
升级指南docs/zh/server/installation_upgrade/upgrade
系统管理管理员指南docs/zh/server/administration/administrator
sysMaster用户指南docs/zh/server/administration/sysmaster
兼容性命令docs/zh/server/administration/compa_command
系统运维A-Ops用户指南docs/zh/server/maintenance/aops
gala用户指南docs/zh/server/maintenance/gala
sysmonitor用户指南docs/zh/server/maintenance/sysmonitor
内核热升级指南docs/zh/server/maintenance/kernel_live_upgrade
SysCare用户指南docs/zh/server/maintenance/syscare
常用技能docs/zh/server/maintenance/common_skills
常用定位定界工具docs/zh/server/maintenance/common_tools
故障应急处理docs/zh/server/maintenance/troubleshooting
安全安全加固指南docs/zh/server/security/secharden
可信计算docs/zh/server/security/trusted_computing
secGear开发指南docs/zh/server/security/secgear
CVE-ease设计指南docs/zh/server/security/cve-ease
证书签名docs/zh/server/security/cert_signature
SBOM用户指南docs/zh/server/security/sbom
国密docs/zh/server/security/shangmi
内存与存储配置和管理逻辑卷docs/zh/server/memory_storage/lvm
etmem用户指南docs/zh/server/memory_storage/etmem
GMEM用户指南docs/zh/server/memory_storage/gmem
HSAK开发指南docs/zh/server/memory_storage/hsak
网络配置网络docs/zh/server/network/network_config
Gazelle用户指南docs/zh/server/network/gazelle
性能调优系统资源与性能docs/zh/server/performance/overall/system_resource
oeAware用户指南docs/zh/server/performance/tuning_framework/oeaware
sysBoost用户指南docs/zh/server/performance/cpu_optimization/sysboost
使用KAE加速引擎docs/zh/server/performance/cpu_optimization/kae
A-Tune用户指南docs/zh/server/performance/system_optimization/atune
应用开发应用开发指南docs/zh/server/development/application_dev
GCC用户指南docs/zh/server/development/gcc
HA高可用HA用户指南docs/zh/server/high_availability/ha
多样性算力直连聚合用户指南docs/zh/server/diversified_computing/dpu_offload
DPU-OSdocs/zh/server/diversified_computing/dpu_os
+ +### 虚拟化 + + + + + + + + + + + + + + + + + + + + + + +
场景类别手册存放地址
虚拟化虚拟化平台虚拟化用户指南docs/zh/virtualization/virtualization_platform/virtualization
StratoVirt用户指南docs/zh/virtualization/virtualization_platform/stratovirt
OpenStack用户手册openstack-docs/docs/zh
+ +### 云原生 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
场景类别手册存放地址
云原生容器引擎iSula容器引擎docs/zh/cloud/container_engine/isula_container_engine
Docker容器docs/zh/cloud/container_engine/docker_engine
容器形态安全容器docs/zh/cloud/container_form/secure_container
系统容器docs/zh/cloud/container_form/system_container
容器运行时Kuasar多沙箱容器运行时docs/zh/cloud/container_runtime/kuasar
容器镜像构建工具容器镜像构建docs/zh/cloud/image_builder/isula-build
云原生操作系统容器OS升级用户指南docs/zh/cloud/kubeos/kubeos
云底座操作系统NestOS用户指南docs/zh/cloud/nestosS/nestos
混合部署云原生混合部署rubik用户指南docs/zh/cloud/hybrid_deployment/rubik
oncn-bwm用户指南docs/zh/cloud/hybrid_deployment/oncn-bwm
集群部署Kubernetes集群部署指南docs/zh/cloud/cluster_deployment/kubernetes
iSulad+k8s集群部署指南docs/zh/cloud/cluster_deployment/isulad+k8s
服务网格Kmesh用户指南docs/zh/cloud/kmesh/kmesh
+ +### 边缘计算 + + + + + + + + + + + + + + + + + + +
场景类别手册存放地址
边缘计算 / KubeEdge部署指南docs/zh/edge_computing/kube_edge
K3s部署指南docs/zh/edge_computing/k3s
+ +### 嵌入式 + + + + + + + + + + + + + + + + + + +
场景类别手册存放地址
嵌入式 / openEuler Embedded用户指南yocto-meta-openeuler/docs
UniProton用户指南docs/zh/embedded/uniproton
+ +### 工具 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
工具模块类别手册存放地址
社区工具镜像构建isocut使用指南docs/zh/tools/community_tools/image_custom/isocut
imageTailor使用指南docs/zh/tools/community_tools/image_custom/image_tailor
编译GCC用户指南docs/zh/server/development/gcc
性能优化A-Tune用户指南docs/zh/server/performance/system_optimization/atune
oeAware用户指南docs/zh/server/performance/tuning_framework/oeaware
迁移Migration-tools用户指南docs/zh/tools/community_tools/migration/migration_tools
虚拟化EulerLauncher用户指南docs/zh/tools/community_tools/virtualization/euler_launcher
epkg软件包epkg包管理器使用指南docs/zh/tools/community_tools/epkg/epkg_use
autopkg用户指南docs/zh/tools/community_tools/epkg/autopkg
社区服务源码管理patch-trackingdocs/zh/tools/devops/code_manage/patch_tracking
包管理pkgshipdocs/zh/tools/devops/package_manage/pkgship
AI 智能应用 openEuler大模型智能交互平台 docs/zh/tools/ai/intelligent_application/euler_copilot
智能化漏洞修补用户指南 docs/zh/tools/ai/intelligent_application/intelligent_vulnerability_patching
智能底座 sysHAX用户指南 docs/zh/tools/ai/intelligent_foundation/sysHAX
AI全栈 AI容器镜像用户指南 docs/zh/tools/ai/ai_full_stack/ai_container_image_userguide
AI大模型服务镜像使用指南 docs/zh/tools/ai/ai_full_stack/ai_large_model_service_images_userguide
图形桌面使用 / Gnome用户指南docs/zh/tools/desktop/gnome
UKUI用户指南docs/zh/tools/desktop/ukui
DDE用户指南docs/zh/tools/desktop/dde
Kiran用户指南docs/zh/tools/desktop/kiran
XFCE用户指南docs/zh/tools/desktop/xfce
云原生工具 / CTinspector用户指南docs/zh/tools/cloud/ctinspector
CPDS用户指南docs/zh/tools/cloud/cpds
PilotGo用户指南docs/zh/tools/cloud/pilotgo
系统运维热补丁制作SysCare用户指南docs/zh/server/maintenance/syscare
系统监控sysmonitor用户指南docs/zh/server/maintenance/sysmonitor
安全 / secGear开发指南docs/zh/server/security/secgear
diff --git a/docs/zh/contribute/docs_decentralized.md b/docs/zh/contribute/docs_decentralized.md new file mode 100644 index 0000000000000000000000000000000000000000..9559159ded2c1907257be493cd7ef0fff585a42f --- /dev/null +++ b/docs/zh/contribute/docs_decentralized.md @@ -0,0 +1,86 @@ +# 文档生产下沉至SIG组 + +## 重要事项 + +- 文档生产下沉至各 SIG 组后,各 SIG 组需重视文档质量,更新内容时请通知 doc-sig 成员检视(测试人员测试),通过后再合入。 +- 文件名和文件夹名请使用英文小写字母、并用下划线连接(同一篇文档的中英文名保持一致),文档发布至官网后不可更改存放路径,如需更改需评审。 + +## 概述 + +之前所有文档都集中存于 docs 仓。改版后,基础特性文档依旧存放在 docs 仓,由 doc-sig 集中管理,增量特性文档在各特性 SIG 的代码仓维护。分散在各特性代码仓的文档,需通过在 docs 仓的配置文件(_toc.yaml)中添加引用,实现发布至官网。 + +![image](figures/架构图.png) + +## 约束 + +- 分版本写文档,openEuler 各版本均有独立配套文档。 +- 文档发布后仍会持续更新,如修正低级错误、内容错漏等问题。 +- 各 SIG 组负责维护特性文档,要求各 SIG 清晰掌握特性在各版本中的分布情况。 +- 各 SIG 组自主规划文档,明确区分发布至官网的文档和仅在代码仓展示的文档。 +- SIG 组维护文档以手册为最小单元(如服务器场景《A-Ops用户指南》),单本手册不得拆分存储,同一仓库可容纳多本手册。 +- 所见即所得,在 gitee 仓库可直接查看文档内容,呈现效果与最终展示一致。 + + ![image](figures/手册是最小粒度.png) + +## 要求 + +无论各 SIG 如何组织文档,如果文档要发布至官网,需要满足如下条件: + +- 在仓库根目录下创建 docs 目录,并在 docs 目录下的 zh/ 和 en/ 目录中存放需发布至官网的中英文文档,结构如下: + + ```text + ├─docs/ + | ├─zh/ + | └─en/ + ``` + + 注明:存放于 docs/zh 和 docs/en 下的文档均为发布至官网文档中心的文档,必须通过文档流水线,才能合入;若文档仅在仓库内展示、无需发布至官网,不建议存放于上述目录,可在 docs/ 下创建其他目录存放。 + +- 在 openeuler/docs 仓库中,找到对应场景的 _toc.yaml 文件,并按照指定格式添加文档的索引地址: + + upstream: 填写手册的目录结构文件(_toc.yaml)索引地址 + path(可选,默认值是“./仓库名”): 设置手册的url访问路径 + + 示例: + upstream: + path: ./openstack + +- 文档须严格对应当前版本特性,禁止包含未发布的特性或功能。 +- 支持文档的长期更新维护,确保 openEuler 新版本发布后,历史版本文档仍保持准确完整。 + +## 方案 + +为满足上述条件,建议的实现方案如下: + +- 每个 SIG 组特性应该有自己的独立代码仓库,该仓库承载该SIG的特性文档、readme、contribute等内容。 +- 在不同分支下维护对应版本的文档或创建目录维护不同版本的文档。 +- 若选择创建目录维护不同版本的文档,其内容如下: + + ```text{7-9} + ├─docs/ + | ├─zh/ + | | ├─2409/ + | | | ├─_toc.yaml + | | | ├─xxx.md + | | | └─xxx/ + | | | └─xxx.md + | | └─2503/ + | | ├─_toc.yaml + | | ├─xxx.md + | | └─xxx/ + | | └─xxx.md + | └─en/ + | ├─2409/ + | └─2503/ + ``` + +## 文档下沉流程 + +1. SIG 组确定方案,明确文档存放仓库及版本区分方式。 +2. 为仓库配置文档流水线。 +3. 将相关文档从 openeuler/docs 仓库迁移至目标仓库。 +4. 待 doc-sig 成员检视通过后,由SIG组自行安排合入。 + +## 英文翻译 + +合入中文文档 PR 后,系统将自动生成翻译 issue 并排入处理队列,翻译人员会按顺序完成英文翻译并提交PR,需各 SIG 组 Maintainer 审核合入。如需加急翻译,请将对应中文文档 PR 链接同步至 doc-sig 协调优先处理。 diff --git a/docs/zh/contribute/documentation_writing_specifications.md b/docs/zh/contribute/documentation_writing_specifications.md new file mode 100644 index 0000000000000000000000000000000000000000..8e6937a10212703adc708f36f55110a048ebe265 --- /dev/null +++ b/docs/zh/contribute/documentation_writing_specifications.md @@ -0,0 +1,342 @@ +# 写作规范 + +本写作规范针对openEuler docs 仓的文档结构、内容元素和语言风格提出规范要求,确保openEuler文档具备一致风格。 + +开发者开始openEuler文档写作前,建议先了解本规范内容,**欢迎提出改进意见**。 + +## 文档结构规范 + +特性手册内容一般包括概述、背景介绍、操作类文档(安装与部署、使用指南)、常见问题和附录,开发者可以根据项目实际情况增加或删减。 +以[A-Tune 项目](https://docs.openeuler.org/zh/docs/22.03_LTS_SP2/docs/A-Tune/A-Tune.html)为例,可以参考如下内容: + +### 概述 + +一句话介绍特性定义与功能,一句话说明读者对象。 + +【举例】 + +```markdown +本文档介绍openEuler系统性能自优化软件A-Tune的安装部署和使用方法,以指导开发者快速了解并使用A-Tune。 +本文档适用于使用openEuler系统并希望了解和使用A-Tune的社区开发者、开源爱好者以及相关合作伙伴,使用人员需要具备基本的Linux操作系统知识。 +``` + +### 背景介绍 + +背景介绍类文档写明特性背景与简介、架构说明等。常见文档标题:`认识xxx`。 + +### 操作类文档 + +- 环境要求 + +执行此操作需要准备的软硬件环境、权限以及其它约束条件。 + +【举例】 + +```markdown +硬件要求:xxx处理器。 +软件要求:openEuler xx版本、root权限。 +``` + +- 操作步骤 + +操作步骤文档包含**安装与部署**、**使用方法**等说明内容。 + +具体的操作步骤,需要注意如下事项: + + - 建议一步一个操作步骤,不建议多个操作步骤合并在一个步骤中描写。 + - 如果操作可选,要明确可选条件。 + - 开发步骤中,涉及调用接口(例如使用了工具或者 SQL 语句),需要对使用的接口进行说明。 + +- 结果验证 + +说明如何验证操作结果正确。如果验证操作与步骤强相关,可以在步骤中描述。例如,执行 SQL 语句的返回信息。 + +### 附录 + +附录可包含术语与缩略语介绍。 + +## 内容元素规范 + +### 命名 + +对于新增文档,请在对应的文件目录下新增 MarkDown 文档(即以 .md 结尾的文件)。 + +【规则】zh/en目录下,新增文档名称不能与已有文档重名,如果有请重新命名。 + +【规则】文件名需要以**英文**小写命名。 + +【规则】若文件名有多个单词,请以下划线(_)连接。 + +【规则】同一篇文档,中英文文档文件名保持一致。 + +【举例】 + +```text +installation_and_deployment.md #新增‘安装与部署’文档 +``` + +### 标题 + +【规则】标题尽量采用简洁的语句概况反映章节的中心内容,注意不要省略必要的信息。 + +【规则】操作类文档标题尽量用动宾结构(例如:申请权限);相同级别,相同类型的标题结构保持一致。 + +【规则】标题不使用标点符号结尾,标题中尽量采用圆括号来表示补充说明,标题中不能出现特殊字符,如“?”。 + +【规则】标题与正文使用 1 整行换行隔开。 + +【规则】标题使用 “#” 空格连接标题名,标题级别一次只能增加一个级别且第一个标题应该是顶层标题。 + +【举例】 + +```markdown +# 一级标题 +## 二级标题 +### 三级标题 +#### 四级标题 +##### 五级标题 +###### 六级标题 +``` + +### 正文 + +【使用方法】 + +- 斜体:使用一个星号(\*)表示斜体。 + + ```txt + *斜体文本* + ``` + +- 粗体:使用两个星号(\*\*)表示粗体。 + + ```txt + **粗体文本** + ``` + +- 粗斜体:使用3个星号(\*\*\*)表示粗斜体。 + + ```txt + ***粗斜体文本*** + ``` + +- 转义:对特定内容使用转义符 \。 + + ```txt + \<转义的标记符号> + ``` + +【规则】该转义的字符必须严格用转义符 \ 。 + +【规则】如果有连续两个转义符,转义符之间要有空格 \{ \}。 + +【规则】国际化:需同时提供中英文文档,可联系[ECHO](https://gitee.com/echo10111111)和[wu-donger](https://gitee.com/wu-donger)协助翻译;如需参与英文文档贡献,可参考[指南](./english_doc_contribute.md)。 + +### 空格 + +【规则】编辑文档时中文和英文之间**建议**加空格,页面展示更美观,请保持全文一致。如果是产品名词如 “豆瓣FM”,请按照官方定义格式书写。 + + 例如:openEuler 是一款开源操作系统。当前 openEuler 内核源于 Linux ,支持鲲鹏及其它多种处理器。 + +【规则】中文和数字之间加空格。 + +【规则】数字和单位之间不加空格。 + +【规则】全角标点与其他字符之间不加空格。 + + 例如:刚刚成为了 openEuler 的 maintainer,好开心。 + +### 图片 + +【使用方法】 + +```bash +![alt 属性文本](图片地址) + +![alt 属性文本](图片地址 "可选标题") +``` + +【规则】图片统一存放到文档同级目录下的 figures 文件夹中。例如,[《A-Tune用户指南》](https://docs.openeuler.org/zh/docs/22.03_LTS_SP2/docs/A-Tune/A-Tune.html)中的手册中使用的图片,统一存储在 [A-Tune](https://gitee.com/openeuler/docs/tree/stable2-22.03_LTS_SP2/docs/zh/docs/A-Tune/figures) 路径下。该文件夹下的文件引用图片时,使用相对引用。 + +【规则】请使用原创图片,避免存在知识产权侵权风险。 + +【规则】图文配合使用,切忌图文分离。 + +【规则】图片格式首选 png,此外也接受 jpg。图片的高不超过 640px,宽不超过 393px,图片大小建议不超过 150K。 + +【规则】中文用中文插图,英文用英文插图。 + +【规则】图片路径不能包含中文。 + +【规则】如果是截图,请在允许的范围内只保留有用的信息。图形中需要突出的关键信息,可增加红色框线或者文字备注说明。 + +【举例】 +​图片以 `![](./figures/ci检查结果.jpg)` 格式书写,“./” 不可少,否则图片无法显示到现网。 + +### 代码块 + +代码示例说明了如何实现特定功能,开发人员使用代码示例来编写和调试代码。 + +【规则】代码的逻辑和语法正确。 + +【规则】代码的输入和输出尽可能的分开。 + +【规则】保证代码中关键步骤要有注释说明。 + +【规则】文中行内代码和命令行使用 1 对反引号,如: `代码块`。 + +【规则】块级代码使用 3 个顿号或 4 个空格(不能用 TAB 键)缩进,且上下均用整行隔开。 + +【举例】 + +- 行内代码 + + ```txt + `printf()` 函数 + ``` + +- 块级代码 + + ```python + #!/usr/bin/env python3 + print("Hello, World!"); + ``` + + ```c + #include + int main(void) + { + printf("Hello world\n"); + } + ``` + +### 列表 + +- 无序列表:无序列表使用星号(**\***)、加号(**+**)或是减号(**-**)作为列表标记,这些标记后面要添加一个空格,然后再填写内容。同一个无序列表,建议使用同一个符号。 + + ```txt + * 第一项 + * 第二项 + * 第三项 + + + 第一项 + + 第二项 + + 第三项 + + + - 第一项 + - 第二项 + - 第三项 + ``` + +- 有序列表:有序列表使用数字并加上 **.** 号来表示。 + + ```txt + 1. 第一项 + 2. 第二项 + 3. 第三项 + ``` + +- 嵌套列表:列表嵌套只需在子列表中的选项前面添加四个空格(注意不是Tab键)即可。 + + ```txt + 1. 第一项: + - 第一项嵌套的第一个元素 + - 第一项嵌套的第二个元素 + 2. 第二项: + - 第二项嵌套的第一个元素 + - 第二项嵌套的第二个元素 + ``` + +【规则】有明显先后逻辑顺序情况请使用有序列表,并列关系、多选一情况请使用无序列表。 + +【规则】当项目列表是术语、短语时,统一不加标点符号。 + +【规则】当项目列表是句子时,统一加句号。 + +【规则】特殊情况下如果不能避免出现短语和句子混合的情况,统一加句号。 + +【规则】项目列表前几项以分号结尾,最后一项以句号结尾的形式也可以接受。 + +### 注释符号 + +文档中会出现以下注释符号,代表不同的使用场景和提示程度。如果需要提示用户注意的信息,可以根据重要程度选择对应的注释符号。 + +| 注释符号 | 用途/含义 | 使用方法 | +|--------|------------------------------------------------------------------|-----------------------------------------------------------------------------| +| 注意 | 如未按该注意事项操作,可能会导致任务中断或结果异常,但是可恢复。 | `> [!WARNING]注意`
`> 正文内容` | +| 说明 | 提供帮助提示或有用的参考信息。 | `> [!NOTE]说明`
`> 正文内容` | + +> [!NOTE]说明 +> +> - 请根据文档具体场景选择对应的注释符号,并按照使用方法正确使用样式。方括号内是英文感叹号。 +> - 说明/注意样式内可嵌套有序/无需列表,但不建议表格和代码块。 +> - 为避免样式断开,需要保证 `>`连续。 +> - 说明/注意内容避免过长,可考虑写在正文或者分段,请不要添加过多样式内空行。 + +### 链接 + +【规则】链接需要确保指向的目标文件存在,否则会造成链接跳转不正常,不建议使用 HTML 的链接样式。 + +【举例】 + +```markdown +- 网站链接 +这是一个链接 [菜鸟教程](https://www.runoob.com)。 + +- 相对路径 + [文档开发流水线门禁](./ci_rules.md) +``` + +### 表格 + +【规则】markdown 文档中请使用以下方式创建表格,不建议使用 HTML 的表格样式。 + +【举例】 + +| 表头1 | 表头2 | +| ---------- | -------- | +| 单元格1 | 单元格2 | +| 单元格4 | 单元格4 | + +【使用方法】 +设置表格的对齐方式: + +- -: 设置内容和标题栏居右对齐。 +- :- 设置内容和标题栏居左对齐。 +- :-: 设置内容和标题栏居中对齐。 + +【规则】当表格内一列全部是术语、短语时,统一不加标点符号。 + +【规则】当表格内一列全部是句子时,统一加句号。 + +【规则】特殊情况下如果不能避免出现短语和句子混合的情况,统一加句号。 + +### 标点符号 + +【规则】单位与数字之间不建议加空格,比如 50m,10kg,64Kbit/s。 + +【规则】对于有序/无序列表,如果是长句子,建议统一以句号结尾,如果是短语,结尾可不用标点。**重点是前后一致,要么都加,要么都不加**。 + +【规则】中文文档使用全角标点。 + +【规则】数字使用半角字符。 + +【规则】感叹号使用场景为可能引发严重后果的操作或设备安全、人身安全的警告。其他场景不允许使用感叹号。 + +【规则】文内引用其他文档时添加书名号,同时建议增加引用文档的跳转链接。例如:安装 openEuler 系统,安装方法参考《[openEuler 22.03 LTS SP2 安装指南](https://docs.openeuler.org/zh/docs/22.03_LTS_SP2/docs/Installation/installation.html)》。 + +## 语言风格规范 + +【规则】提交内容必须是与 openEuler 特性相关内容。 + +【规则】内容不能包含敏感信息、有强烈的种族歧视或性别歧视的内容。 + +【规则】提交的内容必须是原创内容,不得侵犯他人知识产权。 + +【规则】提交的内容必须客观、真实,不允许使用夸大宣传等词汇。 + +**文档贡献中不受欢迎的行为** + +短时间内通过自动化工具,提交大量的PR,提交大量的处理诸如拼写错误,语法错误,日期错误,语句不通顺等“无害的错误”的修正。 +具体内容以及处理措施详见 [openEuler社区开发行为规范 V1.0](https://gitee.com/openeuler/community/blob/master/zh/technical-committee/governance/openEuler%E7%A4%BE%E5%8C%BA%E5%BC%80%E5%8F%91%E8%A1%8C%E4%B8%BA%E8%A7%84%E8%8C%83.md)。 diff --git a/docs/zh/contribute/english_doc_contribute.md b/docs/zh/contribute/english_doc_contribute.md new file mode 100644 index 0000000000000000000000000000000000000000..4e8d626b40fd1528d78225b2788fbd397893738d --- /dev/null +++ b/docs/zh/contribute/english_doc_contribute.md @@ -0,0 +1,97 @@ +# 英文文档贡献指导 + +## 概述 + +本文旨在指导英文开发者贡献英文文档,相关规范与中文类似,均可参考[文档贡献流程](./contribution_process.md),[文档仓库目录结构说明](./directory_structure_introductory.md),[_toc.yaml文件写作规范](./directory_structure_introductory.md#目录结构文件格式)。 + +## 英文文档目录结构 + +在 openEuler/docs 仓和 openEuler/SIG组名-docs 仓中,docs 目录下的 en 子目录,用于存放英文文档。docs/en 子目录下的目录结构与 docs/zh 子目录下目录结构相同: + +docs/en下目录结构示例如下: + +```text +├─docs +│ ├─en +│ └─zh +│ ├─cloud +│ ├─EdgeComputing +│ ├─embedded +│ ├─Server +│ │ ├─Administration +│ │ ├─Development +│ │ ├─DiversifiedComputing +│ │ ├─HighAvailability +│ │ ├─InstallationUpgrade +│ │ ├─Maintenance +│ │ │ ├─A-Ops +│ │ │ ├─CommonSkills +│ │ │ ├─CommonTools +│ │ │ ├─Gala +│ │ │ ├─KernelLiveUpgrade +│ │ │ ├─SysCare +│ │ │ ├─sysmonitor +│ │ │ └─Troubleshooting +│ │ ├─MemoryandStorage +│ │ ├─Network +│ │ ├─Performance +│ │ │ ├─CPUOptimization +│ │ │ │ ├─KAE +│ │ │ │ └─sysBoost +│ │ │ ├─Overall +│ │ │ │ └─systemResource +│ │ │ ├─SystemOptimization +│ │ │ │ └─A-Tune +│ │ │ └─TuningFramework +│ │ │ └─oeAware +│ │ ├─Quickstart +│ │ ├─Releasenotes +| | ├─Security +│ │ └─_toc.yaml +│ ├─Tools +│ │ ├─AI +│ │ ├─Cloud +│ │ ├─CommunityTools +│ │ ├─desktop +│ │ ├─DevOps +│ │ ├─Maintenance +│ │ └─Security +│ └─virtualization +``` + +以手册《Kernel Live Upgrade Guide》手册为例,该手册包括三篇文档,存放在 Server/Maintenance/KernelLiveUpgrade 目录下: + +- Installation and Deployment,对应路径 /KernelLiveUpgrade/installation-and-deployment.md +- How to Run,对应路径 /KernelLiveUpgrade/how-to-run.md +- Common Problems and Solutions,对应路径 /KernelLiveUpgrade/common-problems-and-solutions.md +- _toc.yaml 文件,对应路径 /KernelLiveUpgrade/_toc.yaml + +> 注意:在 docs 仓存放的英文文档名和对应的中文文档名要保持一致。 + +## _toc.yaml文件写作规范 + +英文文档与中文文档的`_toc.yaml`文件在格式设定和内容编排逻辑上保持一致,但需留意,“label” 和 “description” 这两项内容需依据语言不同分别采用英文和中文填写。 + +《Kernel Live Upgrade Guide》手册的`_toc.yaml`文件示例如下: + +```yaml +--- +label: 'Kernel Live Upgrade Guide' +ismanual: 'Y' +description: 'Implement the kernel hot replacement feature by using user-space automation tools to quickly restart the kernel and perform program hot migration' +children: + - label: 'Installation and Deployment' + href: './installation-and-deployment.md' + - label: 'How to Run' + href: './how-to-run.md' + - label: 'Common Problems and Solutions' + href: './common-problems-and-solutions.md' +--- +``` + +- 顶层 label 指定手册名为“Kernel Live Upgrade Guide”。 +- ismanual 设为Y,标识这是一本手册。 +- description 指定该手册的简介说明。 +- children 下配置手册中的文档信息: + - children 下的 label 指定文档的英文名称。 + - children 下的 href 指定文档地址。 diff --git a/docs/zh/contribute/figures/.keep b/docs/zh/contribute/figures/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/zh/contribute/figures/SafetyAlert.png b/docs/zh/contribute/figures/SafetyAlert.png new file mode 100644 index 0000000000000000000000000000000000000000..0f672abbd6d2bba5621632e953d423f06db72789 Binary files /dev/null and b/docs/zh/contribute/figures/SafetyAlert.png differ diff --git "a/docs/zh/contribute/figures/ci\351\227\250\347\246\201\346\243\200\346\237\245\347\273\223\346\236\234.png" "b/docs/zh/contribute/figures/ci\351\227\250\347\246\201\346\243\200\346\237\245\347\273\223\346\236\234.png" new file mode 100644 index 0000000000000000000000000000000000000000..4a79d658d170bf4237c5ebadb9cd20f6b8b308d6 Binary files /dev/null and "b/docs/zh/contribute/figures/ci\351\227\250\347\246\201\346\243\200\346\237\245\347\273\223\346\236\234.png" differ diff --git a/docs/zh/contribute/figures/contribution-guide-01.png b/docs/zh/contribute/figures/contribution-guide-01.png new file mode 100644 index 0000000000000000000000000000000000000000..2ad19522b9bf642d7c3a27c81a9c3154ad048b77 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-01.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-02.png b/docs/zh/contribute/figures/contribution-guide-02.png new file mode 100644 index 0000000000000000000000000000000000000000..a9775df9ba55e3f53269f6c78f77e79c8c0accba Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-02.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-03.png b/docs/zh/contribute/figures/contribution-guide-03.png new file mode 100644 index 0000000000000000000000000000000000000000..02898d896379d795780ab3a7bd3a8c79e6e487eb Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-03.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-04.png b/docs/zh/contribute/figures/contribution-guide-04.png new file mode 100644 index 0000000000000000000000000000000000000000..93be094648fa16b428d8a039559a1f7184f07194 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-04.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-05.png b/docs/zh/contribute/figures/contribution-guide-05.png new file mode 100644 index 0000000000000000000000000000000000000000..7bf60faa4259ff400d77adbbdc39ecb7322f90d9 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-05.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-06.png b/docs/zh/contribute/figures/contribution-guide-06.png new file mode 100644 index 0000000000000000000000000000000000000000..c4889bdd53677788a0b64ec2c983ed8961a6f293 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-06.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-07.png b/docs/zh/contribute/figures/contribution-guide-07.png new file mode 100644 index 0000000000000000000000000000000000000000..b9ca9e9fa8ff5872e172708569a5cd8955228962 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-07.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-08.png b/docs/zh/contribute/figures/contribution-guide-08.png new file mode 100644 index 0000000000000000000000000000000000000000..f6c7a896888ca96333e3f4a01c933e634b1f21cc Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-08.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-09.png b/docs/zh/contribute/figures/contribution-guide-09.png new file mode 100644 index 0000000000000000000000000000000000000000..21f1fd57b726f69ac410e2aff7e3a27cb387d6b6 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-09.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-10.png b/docs/zh/contribute/figures/contribution-guide-10.png new file mode 100644 index 0000000000000000000000000000000000000000..9fed4d0f83d628ce4ed85315503b32fac9d820d1 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-10.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-11.png b/docs/zh/contribute/figures/contribution-guide-11.png new file mode 100644 index 0000000000000000000000000000000000000000..4f0e23e5979a3faf8d32d66238e155a70ad96e83 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-11.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-12.png b/docs/zh/contribute/figures/contribution-guide-12.png new file mode 100644 index 0000000000000000000000000000000000000000..89f2bec0589bd42440bac3f6aed80fa95303b027 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-12.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-13.png b/docs/zh/contribute/figures/contribution-guide-13.png new file mode 100644 index 0000000000000000000000000000000000000000..c78ce807e8f792b952d76f2623dedc1ff7644c42 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-13.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-14.png b/docs/zh/contribute/figures/contribution-guide-14.png new file mode 100644 index 0000000000000000000000000000000000000000..543f802aaf77a0bb65b652e3085679bf2b94c3e3 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-14.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-15.png b/docs/zh/contribute/figures/contribution-guide-15.png new file mode 100644 index 0000000000000000000000000000000000000000..f8131b37b5a2fdae87f7d1e3e9167fe4ba85afde Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-15.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-16.png b/docs/zh/contribute/figures/contribution-guide-16.png new file mode 100644 index 0000000000000000000000000000000000000000..846634a554924f23aaee75e4c5980489c6560f1b Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-16.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-17.png b/docs/zh/contribute/figures/contribution-guide-17.png new file mode 100644 index 0000000000000000000000000000000000000000..41c280e710f013e6e999a3ac75972d8cf1fd5223 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-17.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-18.png b/docs/zh/contribute/figures/contribution-guide-18.png new file mode 100644 index 0000000000000000000000000000000000000000..e51d3f035c62a8b2858241a2ee5141f274a62c99 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-18.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-19.png b/docs/zh/contribute/figures/contribution-guide-19.png new file mode 100644 index 0000000000000000000000000000000000000000..a915b5f2c10bd3041026f880d801abbaa2337c1b Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-19.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-20.png b/docs/zh/contribute/figures/contribution-guide-20.png new file mode 100644 index 0000000000000000000000000000000000000000..50c4232d3627ab5defd611720dcd2a041cb44de3 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-20.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-21.png b/docs/zh/contribute/figures/contribution-guide-21.png new file mode 100644 index 0000000000000000000000000000000000000000..ec9aed28e184756a148d55ead2aee24780bf04e2 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-21.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-22.png b/docs/zh/contribute/figures/contribution-guide-22.png new file mode 100644 index 0000000000000000000000000000000000000000..9475425420ce3ccd94f36976663a7bfc594a8ec7 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-22.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-23.png b/docs/zh/contribute/figures/contribution-guide-23.png new file mode 100644 index 0000000000000000000000000000000000000000..97385ffda8e525b64ed1ad4c029c9c6db9c204f4 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-23.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-24.png b/docs/zh/contribute/figures/contribution-guide-24.png new file mode 100644 index 0000000000000000000000000000000000000000..1e04cc65be7482df0ae31b04733cb2fcc8099b3b Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-24.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-25.png b/docs/zh/contribute/figures/contribution-guide-25.png new file mode 100644 index 0000000000000000000000000000000000000000..6079cb41f4ec425228cc917ae63895bb5d2a1be1 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-25.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-26.png b/docs/zh/contribute/figures/contribution-guide-26.png new file mode 100644 index 0000000000000000000000000000000000000000..63ea42aa75ccbba99aa8a9e40a944a02294b395a Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-26.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-27.png b/docs/zh/contribute/figures/contribution-guide-27.png new file mode 100644 index 0000000000000000000000000000000000000000..fa5eeea822d4f892806e886bce391d252c593f46 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-27.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-28.png b/docs/zh/contribute/figures/contribution-guide-28.png new file mode 100644 index 0000000000000000000000000000000000000000..fad03464ba7479339a6906e016c764e6e3722757 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-28.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-29.png b/docs/zh/contribute/figures/contribution-guide-29.png new file mode 100644 index 0000000000000000000000000000000000000000..fe77620e2b9d79b7cb9a7df21715f515c0f82844 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-29.png differ diff --git a/docs/zh/contribute/figures/contribution-guide-30.png b/docs/zh/contribute/figures/contribution-guide-30.png new file mode 100644 index 0000000000000000000000000000000000000000..28721c35270222f1c3460341d0ae361469eaa524 Binary files /dev/null and b/docs/zh/contribute/figures/contribution-guide-30.png differ diff --git a/docs/zh/contribute/figures/doccenter-modules.png b/docs/zh/contribute/figures/doccenter-modules.png new file mode 100644 index 0000000000000000000000000000000000000000..307644ef6e67e75680d50d411984e891d9462120 Binary files /dev/null and b/docs/zh/contribute/figures/doccenter-modules.png differ diff --git a/docs/zh/contribute/figures/docs-server-cloud-etc.png b/docs/zh/contribute/figures/docs-server-cloud-etc.png new file mode 100644 index 0000000000000000000000000000000000000000..dc65aab430b357c988d277f842c9837ad1ff8d78 Binary files /dev/null and b/docs/zh/contribute/figures/docs-server-cloud-etc.png differ diff --git a/docs/zh/contribute/figures/docs-zh-en.png b/docs/zh/contribute/figures/docs-zh-en.png new file mode 100644 index 0000000000000000000000000000000000000000..c7ffa94f0ffaeeae49a2e16df93b9c8f2c722f4e Binary files /dev/null and b/docs/zh/contribute/figures/docs-zh-en.png differ diff --git a/docs/zh/contribute/figures/kernelliveupgrade.png b/docs/zh/contribute/figures/kernelliveupgrade.png new file mode 100644 index 0000000000000000000000000000000000000000..ce0f2f2be2d17412acd49dabe90d93f147e39f6f Binary files /dev/null and b/docs/zh/contribute/figures/kernelliveupgrade.png differ diff --git a/docs/zh/contribute/figures/maintenance-manual.png b/docs/zh/contribute/figures/maintenance-manual.png new file mode 100644 index 0000000000000000000000000000000000000000..4b434a36d5226a1e2132dabcf7ed31c592896b6f Binary files /dev/null and b/docs/zh/contribute/figures/maintenance-manual.png differ diff --git a/docs/zh/contribute/figures/openstackgitee.jpg b/docs/zh/contribute/figures/openstackgitee.jpg new file mode 100644 index 0000000000000000000000000000000000000000..abf6e87c05d355e822a004955965c4795a8651a5 Binary files /dev/null and b/docs/zh/contribute/figures/openstackgitee.jpg differ diff --git "a/docs/zh/contribute/figures/openstack\346\230\276\347\244\272.jpg" "b/docs/zh/contribute/figures/openstack\346\230\276\347\244\272.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..ed1ec0c21bb5e7f23c451a942bfce5ff883bc409 Binary files /dev/null and "b/docs/zh/contribute/figures/openstack\346\230\276\347\244\272.jpg" differ diff --git a/docs/zh/contribute/figures/performance-menu.png b/docs/zh/contribute/figures/performance-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..abe5f93dcf56f28e720a40a505f4245581372633 Binary files /dev/null and b/docs/zh/contribute/figures/performance-menu.png differ diff --git a/docs/zh/contribute/figures/server-admin-quickstart-etc.png b/docs/zh/contribute/figures/server-admin-quickstart-etc.png new file mode 100644 index 0000000000000000000000000000000000000000..d753a07cb9dbfc6e4cd49c5daee0aaffa3886f01 Binary files /dev/null and b/docs/zh/contribute/figures/server-admin-quickstart-etc.png differ diff --git a/docs/zh/contribute/figures/server-menu.png b/docs/zh/contribute/figures/server-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..36c3e17b43f90b28fd75b118e0806e2756044051 Binary files /dev/null and b/docs/zh/contribute/figures/server-menu.png differ diff --git a/docs/zh/contribute/figures/tools-devops-ai-etc.png b/docs/zh/contribute/figures/tools-devops-ai-etc.png new file mode 100644 index 0000000000000000000000000000000000000000..3b782fe1cd2ac2c2546b86deada529d71a9f8131 Binary files /dev/null and b/docs/zh/contribute/figures/tools-devops-ai-etc.png differ diff --git "a/docs/zh/contribute/figures/\345\206\205\346\240\270\347\203\255\345\215\207\347\272\247\346\214\207\345\215\227menu.png" "b/docs/zh/contribute/figures/\345\206\205\346\240\270\347\203\255\345\215\207\347\272\247\346\214\207\345\215\227menu.png" new file mode 100644 index 0000000000000000000000000000000000000000..5c97ddadebd36e5b53be49d273623b1fd398e4ed Binary files /dev/null and "b/docs/zh/contribute/figures/\345\206\205\346\240\270\347\203\255\345\215\207\347\272\247\346\214\207\345\215\227menu.png" differ diff --git "a/docs/zh/contribute/figures/\345\215\207\347\272\247\346\214\207\345\215\227gitee.jpg" "b/docs/zh/contribute/figures/\345\215\207\347\272\247\346\214\207\345\215\227gitee.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..08f908ea27faa6f49e5efa3af5c83c36ddaf175c Binary files /dev/null and "b/docs/zh/contribute/figures/\345\215\207\347\272\247\346\214\207\345\215\227gitee.jpg" differ diff --git "a/docs/zh/contribute/figures/\345\215\207\347\272\247\346\214\207\345\215\227\346\230\276\347\244\272.jpg" "b/docs/zh/contribute/figures/\345\215\207\347\272\247\346\214\207\345\215\227\346\230\276\347\244\272.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..7d6514b55e0a0303c7e0fb65deaae49acd1d35aa Binary files /dev/null and "b/docs/zh/contribute/figures/\345\215\207\347\272\247\346\214\207\345\215\227\346\230\276\347\244\272.jpg" differ diff --git "a/docs/zh/contribute/figures/\345\256\211\350\243\205\345\215\207\347\272\247.jpg" "b/docs/zh/contribute/figures/\345\256\211\350\243\205\345\215\207\347\272\247.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..f76220c0c4bfd59a6acff7940d756bc7f1b6d65a Binary files /dev/null and "b/docs/zh/contribute/figures/\345\256\211\350\243\205\345\215\207\347\272\247.jpg" differ diff --git "a/docs/zh/contribute/figures/\345\256\211\350\243\205\345\234\250\346\234\215\345\212\241\345\231\250.jpg" "b/docs/zh/contribute/figures/\345\256\211\350\243\205\345\234\250\346\234\215\345\212\241\345\231\250.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..90977793c851947e8e3c8b1dbe7339536943adb0 Binary files /dev/null and "b/docs/zh/contribute/figures/\345\256\211\350\243\205\345\234\250\346\234\215\345\212\241\345\231\250.jpg" differ diff --git "a/docs/zh/contribute/figures/\345\256\211\350\243\205\346\214\207\345\215\227gitee.jpg" "b/docs/zh/contribute/figures/\345\256\211\350\243\205\346\214\207\345\215\227gitee.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..8486eeb321335042484d96b2ad75ec6996ad4d39 Binary files /dev/null and "b/docs/zh/contribute/figures/\345\256\211\350\243\205\346\214\207\345\215\227gitee.jpg" differ diff --git "a/docs/zh/contribute/figures/\345\256\211\350\243\205\346\214\207\345\215\227\346\230\276\347\244\272.jpg" "b/docs/zh/contribute/figures/\345\256\211\350\243\205\346\214\207\345\215\227\346\230\276\347\244\272.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..795048c577020455011005576fa5cc0d43af4f8c Binary files /dev/null and "b/docs/zh/contribute/figures/\345\256\211\350\243\205\346\214\207\345\215\227\346\230\276\347\244\272.jpg" differ diff --git "a/docs/zh/contribute/figures/\346\211\213\345\206\214\346\230\257\346\234\200\345\260\217\347\262\222\345\272\246.png" "b/docs/zh/contribute/figures/\346\211\213\345\206\214\346\230\257\346\234\200\345\260\217\347\262\222\345\272\246.png" new file mode 100644 index 0000000000000000000000000000000000000000..801ea57bc3f0ab03f07bd80e01d6ba9d823f13dc Binary files /dev/null and "b/docs/zh/contribute/figures/\346\211\213\345\206\214\346\230\257\346\234\200\345\260\217\347\262\222\345\272\246.png" differ diff --git "a/docs/zh/contribute/figures/\346\236\266\346\236\204\345\233\276.png" "b/docs/zh/contribute/figures/\346\236\266\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..5f86ee849a811e2960a42e73230d49092b24b5a6 Binary files /dev/null and "b/docs/zh/contribute/figures/\346\236\266\346\236\204\345\233\276.png" differ diff --git a/docs/zh/contribute/markdownlint_rules.md b/docs/zh/contribute/markdownlint_rules.md new file mode 100644 index 0000000000000000000000000000000000000000..df88ad9804e0c92e74cd3bedc09c53ee41b8f290 --- /dev/null +++ b/docs/zh/contribute/markdownlint_rules.md @@ -0,0 +1,922 @@ +# markdownlint 检查规则 + +本文介绍了 markdownlint v0.12.0 版本规则以及 openEuler Docs 仓的规则设置,参照依据 。对 markdownlint 规则有任何疑问或交流,请联系 ECHO[@ECHO](https://gitee.com/echo10111111)。 + +## markdownlint 介绍 + +markdownlint 是一款检查 Markdown 文件格式的工具,可以根据设置的规则对 Markdown 文件进行全面的检查。文档写作时可以借助 VSCode 等工具的 markdownlint 插件修复格式问题。 + +## openEuler docs 仓规则设置 + +- openEuler 规则采用如下方案: + + - MD003 (标题样式) 规则将参数 `style`设置为`atx`。 + - MD029(有序列表的前缀序号)规则将参数`style`设置为`ordered`。 + - 屏蔽 MD004(无序列表)这条规则。 + - 屏蔽 MD007(无序列表缩进)这条规则。 + - 屏蔽 MD009(行尾空格)这条规则。 + - 屏蔽 MD013(行的长度)这条规则。 + - 屏蔽 MD014(命令前使用\$而不显示输出)这条规则。 + - 屏蔽 MD020(closed atx样式的标题内没有空格)这条规则。 + - 屏蔽 MD021(closed atx样式的标题内有多个空格)这条规则。 + - 屏蔽 MD024(不能有重复内容的标题)这条规则。 + - 屏蔽 MD025 (文档中有多个顶级标题)这条规则。 + - 屏蔽 MD027(块引用符号后的多个空格)这条规则。 + - 屏蔽 MD033(内联HTML)这条规则。 + - 屏蔽 MD036(使用强调标记代替标题)这条规则。 + - 屏蔽 MD046(代码块样式)这条规则。 + +- ruby 文件的书写方式如下: + + ```bash + all + rule 'MD003', :style => :atx + rule 'MD029', :style => :ordered + exclude_rule 'MD004' + exclude_rule 'MD007' + exclude_rule 'MD009' + exclude_rule 'MD013' + exclude_rule 'MD014' + exclude_rule 'MD020' + exclude_rule 'MD021' + exclude_rule 'MD024' + exclude_rule 'MD025' + exclude_rule 'MD027' + exclude_rule 'MD033' + exclude_rule 'MD036' + exclude_rule 'MD046' + ``` + +## 规则介绍 + +### MD001 - 标题级别一次只能增加一个级别 + +- **错误示例** + + ```text + # Header1 + + ### Header3 + ``` + +- **正确示例** + + ```text + # Header1 + + ## Header2 + + ### Header3 + + #### Header4 + ``` + +### MD002 - 第一个标题应该是顶层标题 + +- **参数** + + - `level`:指定最高级标题的级数,默认值是1。 +- **错误示例** + + ```text + ## This is not a H1 header + + ### Another header + ``` + +- **正确示例** + + ```text + # Start with a H1 header + + ## Then use a H2 for subsections + ``` + +### MD003 - 标题样式 + +- **参数** + + - `style`:指定文档标题的样式,有 `consistent`、`atx`、`atx_closed`、`setext`、`setext_with_atx`五种。**本仓已设置为 `atx`**。 + +- **错误示例** + + ```text + # ATX style H1 + + ## Closed ATX style H2 ## + + Setext style H1 + =============== + ``` + +- **正确示例** + + ```text + # ATX style H1 + + ## ATX style H2 + ``` + +### MD004 - 无序列表样式 + +**本仓已屏蔽这条规则。** + +- **参数** + + - `style`:指定无序列表的样式,有 `consistent(定义时符号前后保持一致)`、`astrisk(用星号定义)`、`plus(用加号定义)`、`dash(用减号定义)`、`sublist(定义多重列表的时候用不同的符号定义)`五种,默认为 `consistent`。 +- **错误示例** + + ```text + * Item 1 + + Item 2 + ``` + +- **正确示例** + + ```text + * Item 1 + * Item 2 + ``` + +### MD005 - 同一级别的列表项缩进不一致 + +- **错误示例** + + ```text + * Item1 + * nested item 1 + * nested item 2 + * A misaligned item + ``` + +- **正确示例** + + ```text + * Item1 + * nested item 1 + * nested item 2 + * nested item 3 + ``` + +### MD006 - 一级列表不能缩进 + +- **错误示例** + + ```text + Some text + + * List item + * List item + ``` + +- **正确示例** + + ```text + Some text + + * List item + * List item + ``` + +### MD007 - 无序列表缩进 + +**本仓已屏蔽这条规则。** + +- **参数** + + - `ident`:指定无序列表嵌套时缩进的空格数,默认值是2。 +- **错误示例** + + ```text + * List item + * Nested list item indented by 4 spaces + ``` + +- **正确示例** + + ```text + * List item + * Nested list item indented by 2 spaces + ``` + +### MD009 - 行尾空格 + +**本仓已屏蔽这条规则。** + +- **参数** + - `br_spaces`:指定在行尾可以添加的空格的数目,默认值为0,空格数目建议大于等于2,如果小于2,会默认为0。 + +### MD010 - 不能使用tab键缩进,要使用空格 + +- **参数** + + - `code_blocks`:指定本条规则在代码块里是否 (true or false) 生效,默认是 true。 +- **错误示例** + + ```text + Some text + + * hard tab character used to indent the list item + ``` + +- **正确示例** + + ```text + Some text + + * Spaces used to indent the list item instead + ``` + +### MD011 - 反向链接语法 + +- **错误示例** + + ```text + (Incorrect link syntax)[http://www.example.com] + ``` + +- **正确示例** + + ```text + [Correct link syntax](http://www.example.com) + ``` + +### MD012 - 多个连续的空行 + +- **参数** + + - `maximum`:指定文档中可以连续的最多的空行数,默认值是1。 +- **错误示例** + + ```text + Some text here + + + Some more text here + ``` + +- **正确示例** + + ```text + Some text here + + Some more text here + ``` + +> [!NOTE]说明 +> 如果代码块内有多个连续的空行,将不会触发此规则。 + +### MD013 - 行的长度 + +**本仓已屏蔽这条规则。** + +- **参数** + + - `line_length`:指定行的最大长度,默认是80。 + - `heading_line_length`:指定标题行的最大的长度,默认是80。 + - `code_blocks`:指定规则是否(true or false)对代码块生效,默认是true。 + - `tables`:指定规则是否(true or false)对表格生效,默认是true。 + - `headings`:指定规则是否(true or false)对标题生效,默认是true。 + +### MD014 - 命令前使用$而不显示输出 + +**本仓已屏蔽这条规则。** + +- **错误示例** + + ```text + sl + cat foo + less bar + ``` + +- **正确示例** + + ```text + ls + cat foo + less bar + ``` + + ```text + $ ls + foo bar + $ cat foo + Hello world + $ cat bar + baz + ``` + + 在代码块中,终端命令前不需要要有\$,但是如果代码中既有终端命令,也有命令的输出,则终端前可以有\$。 + +### MD018 - atx样式的标题后没有空格 + +- **错误示例** + + ```text + #Header1 + + ##Header2 + ``` + +- **正确示例** + + ```text + # Header1 + + ## Header2 + ``` + +### MD019 - atx样式的标题后有多个空格 + +- **错误示例** + + ```text + # Header1 + + ## Header2 + ``` + +- **正确示例** + + ```text + # Header1 + + ## Header2 + ``` + +### MD020 - closed atx样式的标题内没有空格 + +**本仓已屏蔽这条规则。** + +- **错误示例** + + ```text + #Header1# + + ##Header2## + ``` + +- **正确示例** + + ```text + # Header1 # + + ## Header2 ## + ``` + +### MD021 - closed atx样式的标题内有多个空格 + +**本仓已屏蔽这条规则。** + +- **错误示例** + + ```text + # Header1 # + + ## Header2 ## + ``` + +- **正确示例** + + ```text + # Header1 # + + ## Header2 ## + ``` + +### MD022 - 标题行的上下行应该都是空行 + +- **参数** + + - `lines_above`:指定标题行上方的空行数,默认值是1。 + - `lines_below`:指定标题行方的空行数,默认值是1。 +- **错误示例** + + ```text + # Header1 + Some text + + Some more text + ## Header2 + ``` + +- **正确示例** + + ```text + # Header1 + + Some text + + Some more text + + ## Header2 + ``` + +### MD023 - 标题必须从行首开始 + +- **错误示例** + + ```text + Some text + ## Indented header + ``` + +- **正确示例** + + ```text + Some text + + ## Header + ``` + +### MD024 - 不能有重复内容的标题 + +**本仓已屏蔽这条规则。** + +- **错误示例** + + ```text + # Some text + + ## Some text + ``` + +- **正确示例** + + ```text + # Some text + + ## Some more text + ``` + +### MD025 - 文档中有多个顶级标题 + +**本仓已屏蔽这条规则。** + +- **参数** + + - `level`:指定文档最高级的标题,默认值是1。 +- **错误示例** + + ```text + # Top level header + + # Another top level header + ``` + +- **正确示例** + + ```text + # Title + + ## Header + + ### Another header + ``` + +### MD026 - 标题行尾的标点符号 + +- **参数** + + - `punctuation`:指定标题行尾不能有的标点符号,默认值是".,;:!?"。 +- **错误示例** + + ```text + # This is a header. + ``` + +- **正确示例** + + ```text + # This is a header + ``` + +### MD027 - 块引用符号后的多个空格 + +**本仓已屏蔽这条规则。** + +- **错误示例** + + ```text + > This is a block quote with bad indentation + > there should only be one + ``` + +- **正确示例** + + ```text + > This is a block quote with bad indentation + > there should only be one + ``` + +### MD028 - 块引用内的空行 + +- **错误示例** + + ```text + > This is a blockquote + > which is immediately followed by + + > this blockquote. Unfortunately + > in some parsers, this are treated as the same blockquote. + ``` + +- **正确示例** + + ```text + > This is a blockquote. + > + > This is the same blockquote. + ``` + +### MD029 - 有序列表的前缀序号 + +- **参数** + + - `style`:指定前缀序号的格式,有 `one`(只用1做前缀),`ordered`(从1开始的加1递增数字做前缀)两种,默认值是 `one`。**本仓设置为`ordered`**。 +- **错误示例** + + ```text + 1. Do this + 1. Do that + 1. Done + ``` + +- **正确示例** + + ```text + 1. Do this + 2. Do that + 3. Done + ``` + +### MD030 - 列表标记后的空格 + +- **参数** + + - `ul_single`:无序列表单个段落的前缀符号和文字之间的空格数,默认值是1。 + - `ol_single`:有序列表单个段落的前缀符号和文字之间的空格数,默认值是1。 + - `ul_multi`:无序列表多个段落的前缀符号和文字之间的空格数,默认值是1。 + - `ol_multi`:有序列表单个段落的前缀符号和文字之间的空格数,默认值是1。 +- **错误示例** + + ```text + * Foo + * Bar + * Baz + ``` + +- **正确示例** + + ```text + * Foo + * Bar + * Baz + ``` + +### MD031 - 单独的代码块前后需要用空格隔开(除非是在文档的开头或者结尾) + +- **错误示例** + + ````text + Some text + ``` + + Code block + + ``` + + ``` + + Another code block + + ``` + Some more text + ```` + +- **正确示例** + + ````text + Some text + + ``` + + Code block + + ``` + + ``` + + Another code block + + ``` + + Some more text + ```` + +### MD032 - 列表前后需要用空格隔开(除非是在文档的开头或者结尾) + +- **错误示例** + + ```text + Some text + * Some + * List + + 1. Some + 2. List + Some text + ``` + +- **正确示例** + + ```text + Some text + + * Some + * List + + 1. Some + 2. List + + Some text + ``` + +### MD033 - 内联HTML + +**本仓已屏蔽这条规则。** + +- **错误示例** + + ```text +

Inline HTML header

+ ``` + +- **正确示例** + + ```text + # Markdown header + ``` + +### MD034 - 使用纯URL + +- **错误示例** + + ```text + For more information, see http://www.example.com/. + ``` + +- **正确示例** + + ```text + For more information, see . + ``` + +### MD035 - 水平线样式 + +- **参数** + + - `style`:指定创建水平线的方式,有 `consistent`、`***`、`---`或其他指定水平线的字符串,默认值是 `consistent`。 + +### MD036 - 使用强调标记代替标题 + +**本仓已屏蔽这条规则。** + +- **参数** + + - `punctuation`:指定用于结尾的标点符号,以此符号结尾的强调不会被视为以强调代替标题,默认值是".,;:!?" +- **错误示例** + + ```text + **My document** + + Lorem ipsum dolor sit amet... + + _Another section_ + + Consectetur adipiscing elit, sed to eiusmd + ``` + +- **正确示例** + + ```text + # My document + + Lorem ipsum dolor sit amet... + + ## Another section + + Consectetur adipiscing elit, sed to eiusmd + ``` + +### MD037 - 强调标记内强调的符号和强调的文字之间不能有空格 + +- **错误示例** + + ```text + Here is some ** bold ** text + + Here is some * italic * text + + Here is some more __ bold __ text + + Here is some more _ italic _ text + ``` + +- **正确示例** + + ```text + Here is some **bold** text + + Here is some *italic* text + + Here is some more __bold__ text + + Here is some more _italic_ text + ``` + +### MD038 - 单反引号和之间的内容不能有空格 + +- **错误示例** + + ```text + ` some text ` + `some text ` + ` some text` + ``` + +- **正确示例** + + ```text + `some text` + ``` + +### MD039 - 链接文本和包围它的中括号之间内容不能有空格 + +- **错误示例** + + ```text + [ a link ](http://www.example.com/) + ``` + +- **正确示例** + + ```text + [a link](http://www.example.com/) + ``` + +### MD040 - 代码块应指定代码块的编程语言 + +- **错误示例** + + ````text + ``` + #!/bin/bash + echo Hello world + ``` + ```` + +- **正确示例** + + ````text + ```bash + #!/bin/bash + echo Hello world + ``` + ```` + +- **常用的代码块编程语音** + + | 语言支持 | 关键字 | + | ---------------- | -------- | + | Python | python | + | C | cpp | + | Java | java | + | Shell | bash | + | Markdown | markdown | + | JavaScript | js | + | CSS | css | + | SQL | sql | + | PHP | php | + | Text | text | + | XML | html | + | Bat | bat | + | Protocol Buffers | protobuf | + +### MD041 - 文件中的第一行应该是顶级标题 + +- **参数** + + - `level`:指定文档最高级的标题,默认值是1。 +- **错误示例** + + ```text + This is a file without a header + ``` + +- **正确示例** + + ```text + # File with header + + This is a file with a top level header + ``` + +### MD046 - 代码块样式 + +**本仓已屏蔽这条规则。** + +- **参数** + + - `style`:指定代码块定义格式,有 `fenced(使用三个反引号)`,`indented(使用缩进)`,`consistent(上下文一致)`三种,默认值是 `fenced`。 +- **错误示例** + + ```text + Some text. + + Code block + + Some more text. + ``` + +- **正确示例** + + ````text + Some text. + + ```ruby + Code block + ``` + + Some more text. + ```` + +### MD047 - 文件应以单个换行符结尾 + +- **错误示例** + + ```text + # Header + + This file ends without a newline.[EOF] + ``` + +- **正确示例** + + ````text + # Header + + This file ends with a newline. + [EOF] + ```` + +## VSCode 中 Markdown 插件 + +markdownlint 扩展库包含 markdown 文件规则库,以保证 markdown 文件与其标准保持一致。添加配置后,markdownlint 可以自动检查文档错误。 + +### 安装 + +- 按下 `Ctrl_Shift+X`以打开扩展选项卡。 +- 输入 `markdownlint` 以找到扩展。 +- 点击 `Install` 按钮,然后再点击`Enable`按钮。 + +### 配置 + +注意:VSCode 中 markdownlint 参照的版本是 David Anson 拟定的,与 openEuler 仓使用的 markdownlint 官方 v0.12.0 版本有差异。为了与 openEuler 仓配置的规则保持一致,可参考下方配置项。 + +- 在命令面板(`Ctrl+Shift+P`)中输入`Open Settings (JSON)`命令。 +- 在 Json 对象中添加如下配置: + + ```bash + "markdownlint.config":{ + "default":true, + "MD003":{"style":"atx"}, + "MD029":{"style":"ordered"}, + "MD004":false, + "MD007":false, + "MD009":false, + "MD013":false, + "MD014":false, + "MD020":false, + "MD021":false, + "MD024":false, + "MD025":false, + "MD033":false, + "MD036":false, + "MD042":false, + "MD043":false, + "MD044":false, + "MD045":false, + "MD046":false, + "MD048":false, + "MD049":false, + "MD050":false, + "MD051":false, + "MD052":false, + "MD053":false, + "MD055":false, + "MD056":false, + "MD057":false + } + ``` diff --git a/docs/zh/contribute/markdownlint_tools.md b/docs/zh/contribute/markdownlint_tools.md new file mode 100644 index 0000000000000000000000000000000000000000..7759dddea275eab99a026a0fd677900e5bc12e03 --- /dev/null +++ b/docs/zh/contribute/markdownlint_tools.md @@ -0,0 +1,94 @@ +# markdownlint 错误修复工具 + +markdownlint-cli2 适用于批量修改 markdownlint 低错问题,如空行、缩进等,大大提高文档开发效率,但是复杂问题仍需要手动修复。 + +## 安装与配置 + +### 安装 Node.js + npm + +进入 [Node.js](https://nodejs.org/zh-cn)官网下载 Node.js,并按照提示完成安装。 + +分别执行如下两条命令,如果显示版本号,则说明安装成功。 + +```shell +node -v +npm -v +``` + +### 安装 markdownlint-cli2 + +执行如下命令,安装 markdownlint-cli2。 + +```shell +npm install markdownlint-cli2 --global +``` + +如果遇到类似以下错误,可能权限问题导致的。 + +```txt +npm error code EACCES +npm error syscall mkdir +npm error path /usr/local/lib/node_modules/markdownlint-cli2 +npm error errno -13 +``` + +以管理员身份解决该问题:如果是 Mac 或 Linux 系统,可以在命令前加 `sudo`;如果是 `Windows` 系统,在命令提示符或者Powershell中以管理员身份运行命令。 + +### 配置 markdownlint-cli2 + +markdownlint-cli2支持指定检查项,配置文件默认名为.markdownlint.json。将配置文件与待检查的 markdown 文件放在同一文件夹(如果要检查多个文件,则放在其共同的最上级文件夹),markdownlint-cli2就会自动读取并执行。 + +./markdownlint.json 文件示例如下: + +```bash +{ + "MD003":{"style":"atx"}, + "MD029":{"style":"ordered"}, + "MD004":false, + "MD007":false, + "MD009":false, + "MD013":false, + "MD014":false, + "MD020":false, + "MD021":false, + "MD024":false, + "MD025":false, + "MD027":false, + "MD033":false, + "MD036":false, + "MD042":false, + "MD043":false, + "MD044":false, + "MD045":false, + "MD046":false, + "MD048":false, + "MD049":false, + "MD050":false, + "MD051":false, + "MD052":false, + "MD053":false, + "MD055":false, + "MD056":false, + "MD057":false +} +``` + +## 检查与修复 + +### 检查 + +执行如下命令,检查指定的 markdown 文件或文件夹。 + +```bash +markdownlint-cli2 "**/*.md" +``` + +其中,文件路径可以是一个或多个文件名,也可以是通配符,或是文件夹。注意当被检测的文件夹中包含非.md格式的文件时,可能出现错误,导致检测失败。 + +### 修正 + +修正markdownlint的错误,可以使用`--fix`参数。将在源文件上直接修正错误语法,不创建备份。执行如下命令: + +```bash +markdownlint-cli2 --fix "**/*.md" +``` diff --git "a/docs/zh/contribute/openEuler\345\274\200\346\272\220\347\244\276\345\214\272\350\264\241\347\214\256\346\214\207\345\215\227.md" "b/docs/zh/contribute/openEuler\345\274\200\346\272\220\347\244\276\345\214\272\350\264\241\347\214\256\346\214\207\345\215\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..e2db405b65d0eea22701c7e6f73736cf74db9574 --- /dev/null +++ "b/docs/zh/contribute/openEuler\345\274\200\346\272\220\347\244\276\345\214\272\350\264\241\347\214\256\346\214\207\345\215\227.md" @@ -0,0 +1,515 @@ +# openEuler开源社区贡献指南 + +# 前言 + +openEuler 是一款由全球开源贡献者构建的高效、稳定、安全的开源操作系统。同时, openEuler 是一个面向全球的操作系统开源社区,通过社区合作,打造创新平台。本文以贡献Gitee平台上的openEuler 社区为例,为开源社区贡献者提供详细的贡献指导,从基础介绍到网页操作到工具使用再到贡献流程,全方位推动开源社区繁荣。 + +# 开源基础 + +## 初识开源社区 + +### 介绍 + +开源即开放源代码(Open Source Code),也称为源代码公开,指的是一种软件发布模式。开源社区又称开放源代码社区(Open Source Code Community or Open Source Community),一般由拥有共同兴趣爱好的人所组成,根据相应的开源软件许可证协议公布软件源代码的网络平台,同时也为网络成员提供一个自由学习交流的空间。从一定程度上讲,开源社区与开源产品的边界较为模糊,如Linux既指开源社区,由参与者共同管理,同时又指一套性能稳健的操作系统,其内核(Linux kernel)成为许多派生操作系统如Ubuntu的搭建基础。(百度百科) +开源社区发展迅速,贡献者遍布全球且呈高速增长之势。据全球最大开源项目托管平台 GitHub 统计,2020年较上一年新增了1600万开发者用户,预计2025年开发者用户的数量将达到1亿。这其中,在 GitHub 的中国开发者数量及开源贡献度增长已成为全球最快。GitHub 预测到2030年中国开发者将成为全球最大的开源群体。(电子信息产业网) + +### 主流开源社区 + +| 名称 | 简述 | 网址 | +| :------------ | :----------------------------------------------------------- | :----------------------------------------------------------- | +| Linux内核社区 | 由全球不同地方的开发人员组成,它以代码、风格、开发流程的高质量标准著称。 | [https://www.kernel.org/](https://www.kernel.org/) | +| Alpha | Alpha处理器在Linux领域中很受欢迎,尤其用以处理高性能计算。 | [https://www.alpha.org/](https://www.alpha.org/) | +| PowerPC | 提供对使用PowerPC微处理器的Mac计算机的支持,同时也会支持一些IBM的系统。 | [https://www.powerprogress.org/en/](https://www.powerprogress.org/en/) | +| Apache | 以讨论Linux/Unix类操作系统技术、软件开发技术、数据库技术和网络应用技术等为主的开源技术社区网站。其宗旨是给所有爱好Linux/Unix技术、开源技术的朋友提供一个自由、开放、免费的交流空间。 | [https://community.apache.org/](https://community.apache.org/) | +| SourceForge | SourceForge.net (SF.net)是开源软件的开发者进行开发管理的集中式场所,也是全球最大开源软件开发平台和仓库,由VA Software提供主机,并运行SourceForge软件。 | [https://sourceforge.net/](https://sourceforge.net/) | +| Google Source | 谷歌的android代码开源网站,包含了谷歌的各代nexus的源码,这些源码都是跟随android的版本演进。 | [https://android.googlesource.com](https://android.googlesource.com); [https://github.com/android/](https://github.com/android/) | + +### 开源社区的角色 + +>![image](figures/contribution-guide-01.png) + +### 贡献开源的意义 + +**巩固现有技能**:无论是撰写代码、设计用户界面、图形设计、撰写文档、亦或是组织活动,假如你有实践的愿望,你总能在开源项目中找到自己的位置。 +**建立声誉(职业口碑)**:由于开源下所有工作都是公开的,开源项目会是一个很好展示你实力的地方。 +**遇见知己**:开源项目一般都会有一个和谐、热心的社区。很多人便是通过技术研讨会亦或是聊天室的深入探讨建立起深厚友谊。 +**学习领导和管理的艺术**:开源为实践领导力和管理技能提供了很好的机会,比如解决冲突、组织团队、工作的优先级排列。 +**寻找导师/帮助他人**:和他人在一个共享的项目下工作,这意味着需要向他人解释清楚自己是如何做的,同理,也需要向他人求助,询问别人是如何做的。相互学习和彼此教学对于每位参与者都能满载而归。 +**鼓励做出改变**:在开源的世界里,贡献者不一定非得是拥有大量经验的人。在开源的项目中,没有那么多的顾忌,你只需要做就可以了,哪怕只是纠正网站一个小小的拼写错误。开源让人们在很舒服的状态做事,而这才是这个世界应有的体验。(开源社) + +### 开源软件许可证协议 + +开源许可协议(License)是指开源社区为了维护作者和贡献者的合法权利,保证软件不被一些商业机构或个人窃取,影响软件的发展而开发的协议。License的条款由权利、义务、限制三种组成: +● 权利:你可以使用该软件做什么事情 +● 义务:你使用这个软件时必须履行什么样的义务 +● 限制:你不能够做什么事情 +开源许可证是一类组合。对于大部分开源许可证,权利(红框)均授予,著作权人几乎不承担任何义务(蓝框),只是被授权人承担的义务又较多不同(绿框)。 (License遵从性指导书) +![iamge](figures/contribution-guide-02.png) + +以下为openEuler docs SIG的许可证实例: +![image](figures/contribution-guide-03.png) + +## 初识openEuler + +### 介绍 + +openEuler 是一个开源、免费的 Linux 发行版平台,通过开放的社区形式与全球的开发者共同构建一个开放、多元和架构包容的软件生态体系。同时,openEuler也是一个创新平台,鼓励任何人在该平台上提出新想法、开拓新思路、实践新方案。 +openEuler的愿景是:通过社区合作,打造创新平台,构建支持多处理器架构、统一和开放的操作系统openEuler,推动软硬件生态繁荣发展。 + +### openEuler组织架构 + +![image](figures/contribution-guide-04.png) + +### openEuler贡献流程 + +![image](figures/contribution-guide-05.png) + +(openEuler官网) + +# Gitee基础 + +Gitee 是开源中国社区2013年推出的基于 Git 的代码托管服务,目前已经成为国内知名的代码托管平台,致力于为国内开发者提供优质稳定的托管服务。Gitee 除了提供最基础的Git代码托管之外,还提供代码在线查看、历史版本查看、Fork、Pull Request(PR)、打包下载任意版本、Issue、Wiki 、保护分支、代码质量检测、PaaS项目演示等方便管理、开发、协作、共享的功能。本章介绍Gitee贡献相关概念和操作。 (Gitee网站) + +## Issue提交指南 + +### Issue简介 + +**名词解释**:Issue是指一项待完成的工作,这个工作可以是问题、事务、需求和建议等。每一个Issue都包含该工作的所有信息和历史,便于后来的人了解该项工作的所有方面和过程。 +**来源和作用**:Issue的概念起源于客服部门,用户打电话反馈问题,客服就创建一个工单(ticket),后继每一个处理步骤、每一次和用户的交流都要更新到工单内,记录全部的过程信息,这就是Issue的前身。随着后来的不断扩展,逐步演变成制定和实施软件开发计划的全功能项目管理工具。 +openEuler社区直接使用Gitee提供的Issue跟踪和管理系统。 + +### Issue基本功能 + +Gitee的每一个仓库内都有一个Issue面板。 + +![image](figures/contribution-guide-06.png) + +进入该面板,点击“+新建Issue”,就可以新建一个Issue,可以选择需求的类别。目前openEuler有任务、需求、缺陷、版本、翻译、CVE和安全问题等类别,每个类别对应一个提交模板,如下图所示。 + +![image](figures/contribution-guide-07.png) + +### 需求类Issue提交和处理指导 + +不同类型的Issue都有各自完整的提交和处理流程,下面以需求类Issue为例。参考以下流程图。 +![image](figures/contribution-guide-08.png) + +**步骤 1** 新建需求类Issue(Issue状态:待办) +请进入需求对应的团队或项目的repository内,选择Issue面板,点击“新建Issue”。 +如果不确定该需求对应的团队或项目,请在community-issue中创建,会有社区的开发者帮助进行归属等信息的确认。 +在标题栏的单选下拉框将Issue类型设置成“需求”,系统会自动调出需求模板。 +在标题栏**简要描述需求的要点**。 +在详细说明框内说明需求的场景和价值。 +*请注意:清晰完整的描述有助于团队成员理解,并被更快的接受和排入开发计划。* + +**步骤 2** 团队成员审核Issue(Issue状态——通过:进行中;拒绝:已拒绝 ) +**2.1** 审核后接纳 +团队成员(maintainer或者committer)审核后认为可以接纳该需求,则由审核人补充接纳需求的相关信息,并包含: +● 检查并设置该需求所属的项目。 +● 设置该需求建议合入的里程碑信息(规划版本信息)。 +● 设置该需求的优先级标签,请在标签栏选择“feature:High”、“feature:Medium”或者"feature:Low"。 +完成以上的信息以后,请将该Issue的“当前状态”调整成“进行中”(**进入步骤3**)。 +**2.2** 描述不清晰挂起 +团队成员审核后认为描述的信息不清晰,可以在该Issue的评论区留言或在邮件列表中讨论,让提交人继续补充相关信息。 +● 如果在一个月内提交人未及时补充相关信息,则系统会自动关闭该问题(**跳到步骤4**)。 +● Issue提交人补充信息后,可以通过评论让团队成员审核(**跳到步骤2**)。 +**2.3** 审核后不接纳 +团队成员审核后,由于需求价值不高等原因认为暂不接纳,可以在评论区留言或在邮件列表中讨论说明原因。确认后将Issue的“当前状态”调整成“已拒绝”(**跳到步骤4**)。 + +**步骤 3** 认领或分派Issue(Issue状态:开启) +已经进入开发阶段的需求,可以主动认领,也可以由团队成员分配。可以在评论框内输入/assign来把Issue分配给自己,或分配给其他人。 + +**步骤 4** **关闭Issue**,关闭Issue有三种情况: +需求完成后关闭,可以由认领人手工修改状态,也可以通过关联PR后,由PR审核通过后系统自动关闭。 +需求被拒接关闭,由审核人手工修改状态。 +需求超期后关闭,由系统自动根据需求停滞的时间进行超期关闭的操作。 +(openEuler Issue提交指南) + +## PR提交指南 + +Pull Request(PR)是贡献者修改源代码后,请求目标仓库采纳该修改时提交的一种请求。 + +### PR提交前验证 + +提交PR是对项目上的master主干的一次合入申请,为保证合入质量,这个动作是需要小心谨慎的。在提交PR之前,请先完成本地验证,以便在一定程度上保证在提交PR后的持续集成测试的通过。由于不同项目的本地验证方法不同,可以参考此章节内容以获取帮助。 + +### PR提交 + +**步骤 1** 提交PR请求。 +在Gitee上提交PR的具体操作,请参考下文Gitee工作流说明。为了更快得到响应,可以给PR添加标签,或提供更详细的信息,这里需要特别提示的是: +● **关联Issue**:如果提交的PR是针对某个Issue的,请在提交的描述框内添加“#”字符,此时机器人会自动关联出当前存在的Issue,你可以通过此种方式快速链接到关联的Issue。 +● **标注优先级**:可以在创建PR的时候,选择PR的优先级。或者在评论区通过/priority high给PR添加高优先级标签。 +● **标注是解决bug的合入**:可以在描述框通过输入/kind bug来标注该PR是合入解决问题的代码,以便于大家更快的回应你的PR请求。 +● **标注所属SIG**:为了方便查找,也可以在描述框通过输入sig sig-name来标识该PR所属的SIG。 + +**步骤 2** 分配评审人。 +提交PR以后,社区机器人会自动分配评审人,你也可以指定评审人。指定评审人有两种方式,可以在创建PR的时候,在右侧的下拉框中选择评审人。也可以在评论框中输入/assign @reviewer把该PR分配给对应的人。如果想把PR提交给项目的核心成员评审,以便于更快的获得批准,可以有两种方式获取到核心成员的信息: +**方式一**:该Repository的owners文件(该文件通常在该repository的根目录下)中查看,此文件保存的是所有该Repository的评审人列表。 +**方式二**:可以到该项目所属的SIG的首页内查看README.md文件,此文件会列出该SIG的负责人,所有项目以及项目的负责人。 + +**步骤 3** 自动化测试。 +如果您提交成功以后,看到PR上有openeuler-cla/no的标签,说明您还未和社区签署贡献者协议,请您先按照社区机器人的提示,完成贡献者协议的签署。具体操作详见后文。 +提交成功以后,社区机器人会启动自动化测试,为了避免浪费评审人时间,通常只有自动化测试通过的PR,评审人才会参与评审。你可以在PR的下方看到自动化测试的结果。 +如果自动化测试失败,您可以通过“Build Details”查看失败的原因。 +>![image](figures/contribution-guide-09.png) + +点击“Build Details”,可以看到具体的log信息。然后可以在里面搜索“Error”,快速的定位到错误的信息。 +修改后,你可以在评论框输入/retest命令,让社区机器人重新发起一次自动化测试。 + +**步骤 4** PR审核。 +如果审核人通过你的PR,会在评论区添加/lgtm和/approve,以表示对本次PR提交的认同。 +审核人可以在评论区发表意见,也可以在审核文件的时候,在发现问题处添加审核意见。无论哪种方式,都会在评论区显示出来。区别是,后者的评论会显示出“代码评论”,你可以通过“详情”查看评论具体指向的出处。 +为了表示对评审人意见的尊重,如果对意见有异议,请回复该意见说明原因;如果接纳评审人意见,也请做出简单的回应,便于确认后继的提交是否已按照所有接纳意见完成修改。 +**请注意,在使用/approve前至少要有一个/lgtm。** + +### 未完成PR标记 + +如果想在PR请求完成之前先征求大家的意见,有两种方法可以实现此目的: + +1. 可以在评论区添加hold或hold-cancel标签 +2. 可以在PR请求的标题中添加WIP或[WIP]前缀 + +当存在这两个标签时,将不会考虑合并你的PR请求。 + +(openEuler PR提交指南) + +## Gitee贡献工作流 + +>![image](figures/contribution-guide-10.png) + +**步骤 1** 开展工作流前的准备。 +安装Git:请先确保你的电脑上已经安装了Git软件。 +在开展Gitee的工作流之前,需要先在openEuler的代码托管平台的上找到感兴趣的Repository。如果还未找到对应的Repository,请参考此章节的内容。 + +**步骤 2** 从云上fork代码分支。 +找到并打开对应的Repository的首页。 +点击右上角的 Fork 按钮,按照指引,建立一个属于个人的云上fork分支。 +>![image](figures/contribution-guide-11.png) +>![image](figures/contribution-guide-12.png) + +**步骤 3** 把fork分支复制到本地。 +请按照以下的复制过程将Repository内的代码下载到你的在计算机上。 + +1. 创建本地工作目录:需要创建本地工作目录,以便于本地代码的查找和管理。 +```mkdir /YOUR_PATH/src/gitee.com/${your_working_dir}``` +2. 完成git上用户名和邮箱的全局配置(如果之前已经完成过此项配置,请忽略)。 +把git上的 user 设置成你gitee的个人名称: +```git config --global user.name "your Gitee Name"``` +配置你的git邮箱: +```git config --global user.mail "email@your_Gitee_email"``` +3. 完成SSH公钥注册(如果没有完成此注册,每次都要重新输入账户和密码)。 +① 生成ssh公钥。 +```ssh-keygen -t rsa -C "email@your_Gitee_email"``` +```cat ~/.ssh/id_rsa.pub``` +② 登录你个人的远程仓库网站Gitee账户并添加你的ssh公钥。 +请在Gitee网页点击右上角的“个人头像”进入个人Gitee账户,并点击个人头像下的“个人设置”,进入个人设置页面。在“个人设置->安全设置”下,点击“SSH公钥”,在“添加公钥”内把cat命令获取到的ssh公钥添加进去。 +③ 在个人电脑上完成gitee在SSH上的登记。 +```ssh -T git@gitee.com``` + +>![image](figures/contribution-guide-13.png) + +**步骤 4** 克隆远程仓库到本地。 +● 请注意openEuler有几个组织,请确认你所下载的远程仓库的组织名称 +● 可以在repository内复制远程仓库的拷贝地址,得到$remote_link: +>![image](figures/contribution-guide-14.png) + +● 在本地电脑执行拷贝命令: +把远程 fork 仓库克隆到本地 +```git clone https://gitee.com/$user_name/$repository_name``` +设置本地工作目录的 upstream 源(被 fork 的上游仓库) +```git remote add upstream https://gitee.com/openeuler/$repository_name``` +设置同步方式 +```git remote set-url --push upstream no_push``` + +**步骤 5** 拉分支(可选)。 +```git fetch upstream``` +```git checkout master``` +```git rebase upstream/master``` +从这里拉分支: +```git checkout -b work``` +然后在 work 分支上编辑和修改代码。 + +**步骤 6** 保持你的分支与master同步。 +```While on your work branch``` +```git fetch upstream``` +```git rebase upstream/master``` +执行merge的时候,请不要使用 git pull 替代上面的 fetch/rebase。因为这种方式会使提交历史变得混乱,并使代码难以理解。 +**步骤 7** 在本地工作目录提交变更。 + +提交你的变更 +```git add .``` +```git commit -m "提交原因"``` +**步骤 8** 在Gitee上创建一个 pull request。 + +1. 访问你在 的页面。 +2. 把你的分支选到提交使用的 work 分支上,点击+ Pull Request 。具体位置如下图所示: +3. 在创建新PR界面,确认源分支和目标分支,选择创建。 + +>![image](figures/contribution-guide-15.png) + +**步骤 9** 查看和回应代码审查意见。 +你提交PR申请后,PR被分配给一个或多个检视者。这些检视者将进行检视,以确保提交的正确性,不仅包括代码的正确,也包括注释和文档等。 +(Gitee工作流说明) + +## Git与 VSCode基础 + +### Git + +Git是一个免费的、开源的分布式版本控制系统,可以有效、高速地处理项目版本管理。 + +#### 基本概念 + +**工作区**:就是你在电脑里能看到的目录。 +**暂存区**:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。 +**版本库**:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。 +>![image](figures/contribution-guide-16.png) + +● 图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage/index),标记为 "master" 的是 master 分支所代表的目录树。 +● 图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。 +● 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。 +● 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。 +● 当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。 +● 当执行 git rm --cached \ 命令时,会直接从暂存区删除文件,工作区则不做出改变。 + +#### Git 创建仓库 + +● Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。在执行完成 git init 命令后,Git仓库会生成一个.git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。 +如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉Git开始对这些文件进行跟踪,然后提交: +```$ git add *.c``` + +```$ git add README``` + +```$ git commit -m '初始化项目版本'``` + +以上命令将目录下以 .c 结尾及README文件提交到仓库中。 +>注: 在Linux系统中,commit 信息使用单引号 ',在Windows系统,commit信息使用双引号 "。 + +所以在 git bash 中 git commit -m '提交说明' 这样是可以的,在Windows命令行中就要使用双引号 git commit -m "提交说明"。 +● 我们使用 git clone 从现有 Git 仓库中拷贝项目。 +克隆仓库的命令格式为: +```git clone ``` +如果我们需要克隆到指定的目录,可以使用以下命令格式: +```git clone ``` +参数说明: +repo: Git 仓库。 +directory: 本地目录。 +比如,要克隆 Ruby 语言的 Git 代码仓库 Grit,可以用下面的命令: +```$ git clone git://github.com/schacon/grit.git``` +执行该命令后,会在当前目录下创建一个名为grit的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录。 +如果要自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字: +```$ git clone git://github.com/schacon/grit.git mygrit``` + +● 我们使用如下命令设置提交代码时的用户信息。 +```$ git config --global user.name xxx``` + +```$ git config --global user.email xxx@xxx``` + +如果去掉 --global 参数只对当前仓库有效。 + +#### Git 基本操作 + +Git常用的是以下6个命令:**git clone**、**git push**、**git add** 、**git commit**、**git checkout**、**git pull** +>![image](figures/contribution-guide-17.png) + +一个简单的操作步骤: +```$ git init``` + +```$ git add .``` + +```$ git commit``` +● git init - 初始化仓库。 +● git add . - 添加文件到暂存区。 +● git commit - 将暂存区内容添加到仓库中。 +(Git菜鸟教程) + +#### Git常用命令 + +##### 创建仓库命令 + +| 命令 | 说明 | +| :-------- | :------------------------------------- | +| git init | 初始化仓库 | +| git clone | 拷贝一份远程仓库,也就是下载一个项目。 | + +##### 提交与修改命令 + +| 命令 | 说明 | +| :--------- | :--------------------------------------- | +| git add | 添加文件到暂存区。 | +| git status | 查看仓库当前的状态,显示有变更的文件。 | +| git diff | 比较文件的不同,即暂存区和工作区的差异。 | +| git commit | 提交暂存区到本地仓库。 | +| git reset | 回退版本。 | +| git rm | 将文件从暂存区和工作区中删除。 | +| git mv | 移动或重命名工作区文件。 | + +##### 提交日志 + +| 命令 | 说明 | +| :--------------- | :------------------------------------- | +| git log | 查看历史提交记录。 | +| git blame \ | 以列表形式查看指定文件的历史修改记录。 | + +##### 远程操作 + +| 命令 | 说明 | +| :--------- | :------------------- | +| git remote | 远程仓库操作。 | +| git fetch | 从远程获取代码库。 | +| git pull | 下载远程代码并合并。 | +| git push | 上传远程代码并合并。 | + +#### Git 特殊操作 + +##### 处理冲突提交 + +如果发现提交的PR带有以下的标记,说明你提交的PR和本地存在冲突,需要处理冲突。 +>![image](figures/contribution-guide-18.png) + +**步骤 1** 先将分支切换到master上,并完成master的rebase。 +```git checkout master``` +```git fetch upstream``` +```git rebase upstream/master``` + +**步骤 2** 再将分支切换到您使用的分支上,并开始rebase。 +```git checkout yourbranch``` +```git rebase master``` + +**步骤 3** 此时你可以在git上看到冲突的提示,你可以通过vi等工具查看冲突。 + +**步骤 4** 解决冲突以后,再把修改提交上去。 +```git add .``` +```git rebase --continue``` +```git push -f origin yourbranch``` + +##### 合并提交 + +如果你提交了一个PR以后,根据检视意见完成修改并再次提交了PR,不想让审阅者看到多次提交的PR,因为这不便于继续在检视中修改,那么可以合并提交的PR。合并提交的PR是通过压缩Commit来实现的。 +**步骤 1** 现在本地分支上查看日志。 +```git log``` + +**步骤 2** 然后把顶部的n个提交记录聚合到一起进入,注意n是一个数字。 +```git rebase -i HEAD~n``` +把需求压缩的日志前面的pick都改成s,s是squash的缩写。注意必须保留一个pick,如果将所有的pick都改成了s就没有合并的目标了,会发生错误。 + +**步骤 3** 修改完成以后,按ESC键,再输入:wq,会跳出一个界面,问你是否进入编辑提交备注的页面,输入e以后,进入合并提交备注的页面。请把需要合并的备注都删掉,只保留合并目标的备注,再按ESC键,输入:wq保存退出即可。 + +**步骤 4** 最后完成提交。 +```git push -f origin yourbranch``` + +**步骤 5** 回到gitee上的PR提交页面查看,您就可以看到之前的提交已经合并了。 +详细请见:。 +(Gitee工作流说明) + +### VS Code + +Visual Studio Code(简称 VS Code)是由微软开发的轻量级代码编辑器,支持包括 Markdown 在内的多种语言和格式,内置了命令行工具和 Git 版本控制系统。VSCode 中很多操作可以通过软件内命令行来使用,呼出软件内命令行的默认快捷键是 F1 或 Ctrl+Shift+P,请牢记。本文内有>前缀的命令是 VS Code 命令行的命令,否则是 Git Bash 命令。 +>![image](figures/contribution-guide-19.png) + +#### 软件与扩展安装 + +1. 安装并配置好 Git。 +2. 下载安装 VS Code。 +3. 可安装中文语言包,语言包在扩展商店中以扩展的形式提供。要打开扩展商店:点击左侧边栏的扩展图标,或快捷键 Ctrl+Shift+X,或呼出命令行,输入>extensions: install extensions 以命令打开。 +注:VSCode 软件内命令行一般不需要输入完整命令,可输入>extensions 或 >install extensions 之后用键盘上下键选择命令补全。可以输入中文命令描述。 +点击[安装]按钮即可安装,点击项目可进入商店页面查看详情。 +4. 安装 GitLens 扩展,用于 Git 相关操作。 + +>![image](figures/contribution-guide-20.png) + +#### VSCode界面和Git + +为方便解说UI内容,先将Gitee仓库用VS Code打开,这里假定你已经把 openEuler/docs仓fork到了自己的远程仓,并且 >git: clone 或用 git bash clone 到了本地计算机上: +打开本地仓:在 VS Code 中用 >git: clone 克隆完成后会提示是否打开。如果是用 Git Bash 克隆的本地仓:在Windows资源管理器中打开本地仓所在文件夹,右键菜单通过Code打开,或在VSCode中点击文件>打开文件夹,或 >File: Open Folder。打开界面如下图。 +>![image](figures/contribution-guide-21.png) + +图中已经点击预览 README\.md。单击是预览文件,文件名在打开的编辑器中显示为斜体;双击是打开文件,文件名不显示斜体。预览时做任何改动也会打开文件。 +右下角显示 Markdown 处可以点击更改语言模式,如果编辑器没有自动检测到Markdown语法可以手动选择。 +查看(预览或打开)文件时,时间线会显示当前文件的提交历史,底栏会显示光标当前所在行的作者和提交时间。点击时间线中任意提交历史可以比较查看当前文件在本次提交中的改动。 +>![image](figures/contribution-guide-22.png) + +上图在 README\.md 中做了改动但没有保存,文件名前会加上圆点图标,并且有文字提示 1 个未保存。 +如要对比本地的两个文件,在文件树(即图中 DOCS)或打开的编辑器中右键点击一个文件选择以进行比较,再右键另一个文件与已选项目进行比较,或者按住 Ctrl 选择两个文件将已选项进行比较。改动后未保存的文件也可以与已保存的版本比较。 +文件树中可以进行新建文件/文件夹、复制粘贴、重命名等常规操作。在资源管理器页,按 Ctrl+E 可以在文件树中以文件名或路径进行搜索。 +在编辑器中更改并保存文件后,有改动的文件会出现在更改中。点击这里的文件可以显示对比,即本地最新的文件与最后一次拉取的文件对比。 +在更改文件树中的文件名右侧点击 + 号将文件放入暂存区。等效于对当前文件使用 >git: stage changes 命令。 +也可以 Ctrl+左键多选文件后点击 + 批量放入暂存区。命令 >git:stage all changes 可以把所有更改的文件放入暂存区。 +点击暂存区中文件名右侧的 - 可以移出暂存区。 +要提交暂存区中的文件,按源代码管理项下输入框中的提示,输入提交信息按 Ctrl+Enter 提交。等效于 >git: commit staged。 +未暂存的文件可以使用 >git: commit 或 >git: commit all 提交,确认后文件可跳过暂存直接提交。 +提交的文件存放于本地库中,还未发布到远端库。可以使用 >git: undo last commit 撤消最后一次提交。 +提交后,窗口左下角会显示提交的数量,可以点击此处发布到远端库(同时会拉取远端库的新提交)。如果要只发布而不拉取,可以使用 >git: push。如果显示远端库有新提交,先拉取至本地,以免提交后产生冲突。 +>![image](figures/contribution-guide-23.png) + +**COMMITS** 项显示当前分支中的所有提交历史。点击提交项可以展开显示更改的文件,点击文件可以显示与上个版本比较的改动。 +>![image](figures/contribution-guide-24.png) + +FILE HISTORY 即编辑器中当前打开文件的提交历史,类似于资源管理器页中的时间线。 +BRANCHES 显示本地分支中的提交。参见下文 REMOTES。 +REMOTES 显示远端库中所有分支的提交。右键选择 Switch to Branch... 切换到另一分支,并将这个分支保存到本地,显示在 BRANCHES 中。点击左下此处也可以切换分支。 +>![image](figures/contribution-guide-25.png) +>STASHES 储藏区。修改后的文件如果不满意,不想放在本次提交里,或者有未提交的更改但想要切换到其他分支进行操作,可以 >git: stash 先放入储藏区。 +>TAGS 列出每个标签对应的提交。 +>SEARCH & COMPARE 提供搜索提交和比较分支的功能。Search Commits... 可以选择按消息内容、作者、文件等搜索。Compare References... 可以选中两个分支进行比较,提交比较和文件树比较。文件树比较会显示文件路径变化,以及内容有差异的同名文件。 +>![image](figures/contribution-guide-26.png) + +创建图中的比较时,先选择了 master 分支(显示在右侧),后选择了 stable2-21.09 分支(显示在左侧)。 +文件树中 - 号表示在右侧分支中缺少的文件,+ 号表示右侧分支中多出的文件,± 表示同名文件内容有差异,点击打开对比视图。 + +#### 保持本地提交记录和远端上游仓同步 + +为防止创建的Pull Request与上游仓内容冲突,强烈建议每次提交前将上游仓的 commit 拉取到当前分支。 + +**步骤 1** 在VS Code中添加上游仓。以主仓openEuler/docs为例,在网页端克隆/下载按钮复制SSH地址 git\@gitee.com:xxxx.git。运行以下命令添加主仓,显示在源代码管理页的REMOTE下: +```git remote add upstream git@gitee.com:xxxx.git``` +upstream 为自定义名称 + +**步骤 2** 抓取主仓的commits。 +```git fetch upstream``` +```git fetch upstream``` + +**步骤 3** 将主仓的commits合并到本地的分支。以 master 分支为例: +```git checkout master``` +↑切换到 master 分支,如已在 VS Code 中切换则省略 +```git merge upstream/master``` + +**步骤 4** 解决源代码管理中提示的冲突(如有),然后提交自己的改动。 + +#### 合并commits + +为保持提交记录简洁(以及满足部分仓库的要求),一个 PR 应当只包含一个 commit。如果多个 commits已经提交到远端库,靠回退版本 (git reset)来合并 commits。 +假设**源代码管理 > COMMITS** 当前的 commit 记录如下: + +```text + YOUR_COMMIT_3 + YOUR_COMMIT_2 + YOUR_COMMIT_1 + OTHERS_COMMIT_2 + OTHERS_COMMIT_1 +``` + +要合并 YOUR_COMMIT_,(记录下 commit message)右键点击 OTHERS_COMMIT_2 选择 Reset Current Branch to Commit...,然后选择 Soft Reset,即可回退到 OTHERS_COMMIT_2 的版本,三个 YOUR_COMMIT_ 的改动会回到上方更改区域,重新填写commit message 强制提交即可。 +版本回退后,因为本地的版本早于远端库的版本,必须**使用 force push 覆盖远端库**:打开 VS Code 选项,搜索 Allow Force Push 项并勾选,然后按 F1 呼出命令行,输入 push force 等类似关键字,选择相关选项。 + +#### 推荐扩展 + +● Markdown Editor (zaaack.markdown-editor),支持所见即所得模式和分屏预览模式的 Markdown 编辑器。 +● Markdown Preview Enhanced (shd101wyy.markdown-preview-enhanced),增强 Markdown 预览功能,包含 TOC 自动生成功能。快捷方式同样为 Ctrl+Shift+V,覆盖 VSCode 自带的预览查看器。安装后如果需要使用自带的预览查看器,在编辑器窗口顶端的文件标签上右键 -> 打开预览。自带的查看器中,双击句段可以跳转到原文相应句子。 +自动生成 TOC:>markdown preview enhanced: create toc (需要保持预览窗口打开)。保存时自动更新 TOC。 +● GitHub Markdown Preview (bierner.github-markdown-preview),或仅安装其中的核心扩展 Markdown Preview Github Styling (bierner.markdown-preview-github-styles),以 GitHub 格式显示 Markdown 预览,效果接近Gitee网页。 +● Code Spell Checker (streetsidesoftware.code-spell-checker),自然语言拼写检查扩展,除英语外还有多种语言可选。 +● CJK Word Handler (sharzyl.cjk-word-handler)。VSCode 默认以空格、","、"." 等英文符号作为分隔符,导致整句中文被识别为一个整词,使用 Ctrl+←/→ 相关操作时非常不便。这个扩展可以让 VSCode 支持中文分词逻辑。 +● Bookmarks (alefragnani.bookmarks),以行为坐标添加书签。 +(VSCode for openEuler Docs Globalization)。 + +## 参考链接 + +[https://kaiyuanshe.cn/article/github/how-to-participate-in-open-source/](https://kaiyuanshe.cn/article/github/how-to-participate-in-open-source/) +[https://docs.qq.com/doc/DSnJVSmhDcHhrV25L](https://docs.qq.com/doc/DSnJVSmhDcHhrV25L) +[https://www.openeuler.org/zh/](https://www.openeuler.org/zh/) +[https://gitee.com/openeuler/community/blob/master/zh/contributors/issue-submit.md](https://gitee.com/openeuler/community/blob/master/zh/contributors/issue-submit.md) +[https://gitee.com/openeuler/community/blob/master/zh/contributors/pull-request.md](https://gitee.com/openeuler/community/blob/master/zh/contributors/pull-request.md) +[https://gitee.com/openeuler/community/blob/master/zh/contributors/Gitee-workflow.md](https://gitee.com/openeuler/community/blob/master/zh/contributors/Gitee-workflow.md) +[https://www.runoob.com/git/git-tutorial.html](https://www.runoob.com/git/git-tutorial.html) +[https://gitee.com/openeuler/G11N/blob/master/learning-materials/open-source-basics/vscode-for-g11n.md](https://gitee.com/openeuler/G11N/blob/master/learning-materials/open-source-basics/vscode-for-g11n.md) +[https://gitee.com/openeuler/globalization/blob/master/openeuler-g11n-contribution-guide.md](https://gitee.com/openeuler/globalization/blob/master/openeuler-g11n-contribution-guide.md) +[https://gitee.com/openeuler/G11N/blob/master/learning-materials/open-source-basics/markdown-basics.md](https://gitee.com/openeuler/G11N/blob/master/learning-materials/open-source-basics/markdown-basics.md) diff --git a/docs/zh/contribute/public_sys-resources/icon-caution.gif b/docs/zh/contribute/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/contribute/public_sys-resources/icon-caution.gif differ diff --git a/docs/zh/contribute/public_sys-resources/icon-danger.gif b/docs/zh/contribute/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/contribute/public_sys-resources/icon-danger.gif differ diff --git a/docs/zh/contribute/public_sys-resources/icon-note.gif b/docs/zh/contribute/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/contribute/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/contribute/public_sys-resources/icon-notice.gif b/docs/zh/contribute/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/contribute/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/contribute/public_sys-resources/icon-tip.gif b/docs/zh/contribute/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/zh/contribute/public_sys-resources/icon-tip.gif differ diff --git a/docs/zh/contribute/public_sys-resources/icon-warning.gif b/docs/zh/contribute/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/contribute/public_sys-resources/icon-warning.gif differ diff --git "a/docs/zh/contribute/\346\226\207\346\241\243\344\270\255\345\277\203\346\224\271\347\211\210\345\215\207\347\272\247.md" "b/docs/zh/contribute/\346\226\207\346\241\243\344\270\255\345\277\203\346\224\271\347\211\210\345\215\207\347\272\247.md" new file mode 100644 index 0000000000000000000000000000000000000000..f9f0cfe8aa94fd174ddbc5a6e8c61f8bb87ffc7d --- /dev/null +++ "b/docs/zh/contribute/\346\226\207\346\241\243\344\270\255\345\277\203\346\224\271\347\211\210\345\215\207\347\272\247.md" @@ -0,0 +1,26 @@ +# 文档中心升级指南 + +## 资料发布流程整改 + +![image](figures/contribution-guide-27.png) + +特性文档生产下沉到各SIG组,通过文档模版和写作规范,保障文档质量。 + +## 各SIG组创建自己的docs仓 + +![image](figures/contribution-guide-28.png) + +以CloudNative SIG组为例,新建openeuler/CloudNative-docs仓库来维护云原生的相关文档。仓库命名规范:openeuler/SIG组名-docs + +## 在docs仓中维护文档 + +### 原本存放在docs仓的文档,直接移动到SIG组的docs仓下 + +![image](figures/contribution-guide-29.png) + +[docs仓](https://gitee.com/openeuler/docs/tree/test/docs/zh/docs/1newStruct)的存量文档已按照最新的目录设计整理划分,各SIG组只需将整理好的文件夹移到新建的SIG组doc仓。 + +### 游离在docs仓外的文档,新增到SIG组的docs仓下 + +1. 文档转成md格式,进行[markdownlint检查](./markdownlint检查规则.md),自动化问题修复可参考[markdownlint 错误修复工具](./markdownlint错误修复工具.md)。 +2. 添加index文件,指明文档目录结构。 diff --git a/docs/zh/faq/_toc.yaml b/docs/zh/faq/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1f480d7debbea8b157cbe29665124c16616b3540 --- /dev/null +++ b/docs/zh/faq/_toc.yaml @@ -0,0 +1,65 @@ +label: 常见问题 +isManual: true +sections: + - label: 通用 + sections: + - label: 社区通用 + href: ./general/general_faq.md + - label: 特性通用 + href: ./general/project_intro_faq.md + - label: 服务器 + sections: + - label: 系统管理 + href: ./server/administration_faqs.md + - label: 系统性能 + href: ./server/system_management_faq.md + - label: 系统安装(服务器) + href: ./server/installation_faq1.md + - label: 系统安装(树莓派) + href: ./server/installation_faq2.md + - label: 迁移 + href: ./server/migration_faqs.md + - label: 可信计算 + href: ./server/trusted_computing_faqs.md + - label: A-Tune + href: ./server/atune_faqs.md + - label: 内核热升级 + href: ./server/kernel_faqs.md + - label: SysCare + href: ./server/syscare_faqs.md + - label: 应用开发 + href: ./server/applicationdev_faqs.md + - label: 云原生 + sections: + - label: iSulad + href: ./cloud/isula_faqs.md + - label: Docker + href: ./cloud/docker_faqs.md + - label: 容器镜像构建 + href: ./cloud/isula_build_faqs.md + - label: Kubernetes + href: ./cloud/kubernetes_faqs.md + - label: Kmesh + href: ./cloud/kmesh_faqs.md + - label: 虚拟化 + sections: + - label: 虚拟化 + href: ./virtualization/virt_faq.md + - label: 社区工具 + sections: + - label: AI + href: ./community_tools/deployment-guide-for-network-environment-faqs.md + - label: AI(无网络环境) + href: ./community_tools/deployment-guide-for-offline-environment-faqs.md + - label: isocut + href: ./community_tools/isocut_faqs.md + - label: DDE + href: ./community_tools/dde_faqs.md + - label: patch-tracking + href: ./community_tools/patch_tracking_faqs.md + - label: xfce + href: ./community_tools/xfce_faq.md + - label: 技术案例 + sections: + - label: 案例汇总 + href: ./caselibrary/caselibrary_menu.md diff --git a/docs/zh/faq/caselibrary/anaconda.md b/docs/zh/faq/caselibrary/anaconda.md new file mode 100644 index 0000000000000000000000000000000000000000..e08dfe8d415ab75d04f59b1c71b7fb7626c8cfa4 --- /dev/null +++ b/docs/zh/faq/caselibrary/anaconda.md @@ -0,0 +1,42 @@ +# anaconda安装常见磁盘问题 + +## 场景1:安装系统找不到系统盘 + +### 问题背景 + +机器出现安装界面中找不到磁盘进行安装。 +![image](./figures/磁盘消失.png) + +### 现象描述 + +1.安装界面上无法查看到磁盘; +2.CTRL+ALT+F2切换后台查看使用lsblk可以看到磁盘,并且有相关的分区信息。 + ![image](./figures/磁盘消失_lsblk.png) + +### 原因分析 + +CTRL+ALT+F2切换后台查看/tmp/storage.log日志,看到扫描磁盘时出现报错,可能是存在分区残留信息导致。 + +### 解决方案 + +使用fdisk命令删除分区删除,格式化磁盘。 + +## 场景2:安装界面卡在磁盘扫描 + +### 问题背景 + +在安装系统的时候发现系统一直卡在扫盘导致无法点击选择硬盘的按钮。 + +### 现象描述 + +安装界面卡在磁盘扫描,等待一直无法成功。 +![image](./figures/920b卡在扫盘.png) + +### 原因分析 + +1. CTRL+ALT+F2切换后台查看/tmp/storage.log日志,看到扫描磁盘一直卡住。 +2. 在后台输出相同命令,也同样无法执行完成,磁盘上有脏数据导致扫盘的时候获取不到数据导致的,需要进行格式化硬盘。 + +### 解决方案 + +格式化磁盘后重新进行安装。 diff --git a/docs/zh/faq/caselibrary/audit.md b/docs/zh/faq/caselibrary/audit.md new file mode 100644 index 0000000000000000000000000000000000000000..885332f1e18da1fd9f6d66551d297b5bce984fdc --- /dev/null +++ b/docs/zh/faq/caselibrary/audit.md @@ -0,0 +1,60 @@ +# audit写日志占满分区空间出现系统停机 + +## 问题背景 + +系统异常停机,需要排查停机原因。 + +## 现象描述 + +查看日志记录是由audit执行停机动作,按照预期已配置日志回滚,不应该停机。 +查看audit日志目录,存在记录大量日志且已占满空间,如下: + +```txt +-r--------. 1 root root 6291639 May 14 04:10 audit.log.968 +-r--------. 1 root root 6291629 May 14 03:28 audit.log.969 +-r--------. 1 root root 6291630 May 14 02:45 audit.log.970 +-r--------. 1 root root 6291627 May 14 02:03 audit.log.971 +-r--------. 1 root root 6291546 May 14 01:20 audit.log.972 +-r--------. 1 root root 6291689 May 14 00:38 audit.log.973 +-r--------. 1 root root 6291705 May 13 23:57 audit.log.974 +-r--------. 1 root root 6291528 May 13 23:14 audit.log.975 +... +``` + +## 原因分析 + +从现象上看,疑似audit日志回滚能力失效,检查auditd.conf配置: + +```txt +... +max_log_file = 6 // 日志文件大小6MB +num_logs = 5 // 最大日志文件数5 +... +admin_space_left = 50 +admin_space_left_action = halt //空间小于admin_space_left执行停机 +... +``` + +按照上述配置,最多出现5个日志文件,但实际超过设定值,不符合预期;系统停机是配置的默认动作,符合预期。 + +检查message日志,排查audit是否出现异常信息: + +```txt +... +2024-06-09T04:59:46.424433+08:00 localhost auditd[21699]: Audit daemon rotating long files with keep option +... +``` + +从日志来看,触发了audit日志回滚,但是使用“keep option”选项,查看auditd.conf配置: + +```txt +... +max_log_file_action = keep_logs //keep_logs 与rotate相似,但忽略num_logs选项 +... +``` + +综上所述,此案例下audit写日志占满空间是由于配置“max_log_file_action = keep_logs”导致"num_logs = 5"参数失效。 + +## 解决方案 + +将max_log_file_action设置为rotate即可。 diff --git a/docs/zh/faq/caselibrary/caselibrary_menu.md b/docs/zh/faq/caselibrary/caselibrary_menu.md new file mode 100644 index 0000000000000000000000000000000000000000..b3665eca17101e1bca9519565555bb64c37d0790 --- /dev/null +++ b/docs/zh/faq/caselibrary/caselibrary_menu.md @@ -0,0 +1,19 @@ +# openEuler 案例汇总 + +| 序号 | 问题来源 | 特性分类 | 关键字 | 标题 | +|---|---|---|---|---| +| 1 | 开发者反馈 | 基础服务 | systemd-logind,NIS | [systemd-logind服务无法获取NIS服务器上的用户信息](https://gitee.com/openeuler/docs/blob/common/docs/zh/faq/caselibrary/systemd-logind.md) | +| 2 | 开发者反馈 | storage | mount,sysroot,crypto | [mount/sysroot失败的问题](https://gitee.com/openeuler/docs/blob/common/docs/zh/faq/caselibrary/mountsysroot.md) | +| 3 | 开发者反馈 | 基础服务 | audit,log | [audit写日志占满分区空间出现系统停机](https://gitee.com/openeuler/docs/blob/common/docs/zh/faq/caselibrary/audit.md) | +| 4 | 开发者反馈 | 容器 | docker,umask | [docker配置容器umask值](https://gitee.com/openeuler/docs/blob/common/docs/zh/faq/caselibrary/umask.md) | +| 5 | 开发者反馈 | 容器 | docker,容器运行退出 | [docker容器运行一定时间后自动退出](https://gitee.com/openeuler/docs/blob/common/docs/zh/faq/caselibrary/docker.md) | +| 6 | 开发者反馈 | 基础服务 | kpatch,热补丁激活失败 | [制作内核热补丁,插入时dmesg提示缺少sssnic模块](https://gitee.com/openeuler/docs/blob/common/docs/zh/faq/caselibrary/sssnic.md) | +| 7 | 开发者反馈 | 计算 | 22.03-LTS,安装zabbix教程 | [openEuler-22.03-LTS安装zabbix教程](https://gitee.com/openeuler/docs/blob/common/docs/zh/faq/caselibrary/zabbix.md) | +| 8 | 开发者反馈 | 容器 | isulad,grpc,restful | [isulad使用grpc与rest直接调用服务方法](https://gitee.com/openeuler/docs/blob/common/docs/zh/faq/caselibrary/isulad.md) | +| 9 | 开发者反馈 | 存算 | lvm,存算 | [LVM标签损坏](https://gitee.com/openeuler/docs/blob/common/docs/zh/faq/caselibrary/lvm.md) | +| 10 | 开发者反馈 | 容器 | pvs、vgs | [pvs或vgs出现Unknown问题](https://gitee.com/openeuler/docs/blob/common/docs/zh/faq/caselibrary/pvs_vgs.md) | +| 11 | 开发者反馈 | 存算 | kdump、kexe-tools,vmcore | [kdump常见问题](https://gitee.com/openeuler/docs/blob/common/docs/zh/faq/caselibrary/crash.md) | +| 12 | 开发者反馈 | 安装 | efivars | [安装出现efivars报错](https://gitee.com/openeuler/docs/blob/common/docs/zh/faq/caselibrary/efivars.md) | +| 13 | 开发者反馈 | 安装 | 换标 | [换标常见问题](https://gitee.com/openeuler/docs/blob/common/docs/zh/faq/caselibrary/rebranding.md) | +| 14 | 开发者反馈 | 安装 | anaconda | [anaconda安装常见磁盘问题](https://gitee.com/openeuler/docs/blob/common/docs/zh/faq/caselibrary/anaconda.md) | +| 15 | 开发者反馈 | 安装 | 系统文件 | [系统文件恢复问题](https://gitee.com/openeuler/docs/blob/common/docs/zh/faq/caselibrary/sysfile.md) | diff --git a/docs/zh/faq/caselibrary/crash.md b/docs/zh/faq/caselibrary/crash.md new file mode 100644 index 0000000000000000000000000000000000000000..97c47312bfe56e1b3df1e4d0de745b6811e17d17 --- /dev/null +++ b/docs/zh/faq/caselibrary/crash.md @@ -0,0 +1,123 @@ +# kump 常见问题 + +## 场景一:kdump服务启动失败 + +### 问题现象 + +systemctl status kdump查看状态为failed + +### 原因分析及解决方案 + +1. crashkernel启动参数预留内存失败 + + systemctl status kdump有以下报错: + + ```bash + Aug 10 15:26:20 localhost.localdomain kdumpctl[772]: No memory reserved for crash kernel + Aug 10 15:26:20 localhost.localdomain kdumpctl[772]: Starting kdump: [FAILED] + ``` + + crashkernel默认在低端内存(4G)预留,系统内存紧张时,可能会导致预留内存失败,进而导致kdump服务启动失败。 + + **解决方案**:crashkernel=size,high,允许内核从高端内存预留。 + +2. 内核CONFIG不匹配导致dracut裁剪kdump.img失败 + + systemctl status kdump有以下报错: + + ```bash + Aug 10 16:25:52 localhost.localdomain kdumpctl[3972]: dracut-install: ERROR: installing 'loop' + Aug 10 16:25:52 localhost.localdomain kdumpctl[2225]: dracut: FAILED: /usr/lib/dracut/dracut-install -D /var/tmp/dracut.a9swIC/initramfs -N mdio_gpi|usb_8d> + Aug 10 16:25:52 localhost.localdomain dracut[2271]: FAILED: /usr/lib/dracut/dracut-install -D /var/tmp/dracut.a9swIC/initramfs -N mdio_gpi|usb_8dev|et1011c> + Aug 10 16:25:52 localhost.localdomain kdumpctl[2225]: dracut: installkernel failed in module squash + Aug 10 16:25:52 localhost.localdomain dracut[2271]: installkernel failed in module squash + Aug 10 16:25:53 localhost.localdomain kdumpctl[1541]: mkdumprd: failed to make kdump initrd + Aug 10 16:25:53 localhost.localdomain kdumpctl[1541]: Starting kdump: [FAILED] + ``` + + 报错的原因是dracut会依赖squashfs.ko、loop.ko和delay.ko,如果缺失,就会导致dracut失败。 + + 这个问题一般不会在正式的openEuler LTS版本上出现,因为正式版本都包含这三个ko。如果是自行编译的内核,注意以下CONFIG的取值: + + ```bash + CONFIG_SQUASHFS=m + + CONFIG_BLK_DEV_LOOP=m + + CONFIG_OVERLAY_FS=m + ``` + + 另外,设置为y也是不行的,必须设置为m,编译出ko才可以。 + +3. KASLR生效且/proc/sys/kernel/kptr_restrict设置为2 + + systemctl status kdump有以下报错: + + ```bash + Aug 10 14:55:04 localhost.localdomain kdumpctl[637422]: Can't find kernel text map area from kcore + Aug 10 14:55:04 localhost.localdomain kdumpctl[637422]: Cannot load /boot/vmlinuz-4.18.0-147.5.2.1.h579.hugetlb.eulerosv2r10.x86_64+ + Aug 10 14:55:04 localhost.localdomain kdumpctl[637001]: kexec: failed to load kdump kernel + Aug 10 14:55:04 localhost.localdomain kdumpctl[637001]: Starting kdump: [FAILED] + ``` + + 一般出现在x86上,目前arm64的KASLR未生效。 + + 在KASLR生效时,kdump无法从/proc/kcore中获取内核的布局信息;如果同时设置/proc/sys/kernel/kptr_restrict为2,/proc/kallsyms中的信息也会被隐藏。两者同时发生导致kdump启动失败。 + + **解决方案**:设置/proc/sys/kernel/kptr_restrict为1,仅允许root用户查看/proc/kallsyms,以root用户启动kdump可以成功。 + +## 场景二:kdump服务正常但无法生成vmcore + +### 问题现象 + +systemctl status kdump查看状态为active,但是系统挂掉重启之后,没有生成vmcore。 + +### 原因分析及解决方案 + +1. crashkernel预留内存太小,导致crash内核oom + + crash内核启动需要足够的内存,oom大概率是由于ko耗内存较多,正式的openEuler版本一般没有类似问题,自行编译的内核需要特别注意这种可能。另外,可以查看串口日志确认是否是发生了oom的问题。 + + **解决方案**:crashkernel启动参数调大,如果调大后预留内存失败,可以使用crashkernel=size,high的方式预留内存。 + +2. SECTIONS_SIZE_BITS未适配 + + vmcore的转储由makedumpfile工具(由kdump服务调用)来完成,makedumpfile中的SECTIONS_SIZE_BITS定义需要和内核保持一致。SECTIONS_SIZE_BITS定义在内核文件arch/arm64/include/asm/sparsemem.h中,正式的openEuler arm64版本定义为27,kdump中的SECTIONS_SIZE_BITS也适配修改为27。但是在社区源码中SECTIONS_SIZE_BITS的值为30,和kdump不匹配,就会导致makedumpfile生成vmcore失败。 + + **解决方案**:内核源码arch/arm64/include/asm/sparsemem.h中的SECTIONS_SIZE_BITS修改为27 + +3. 带外硬件狗复位,导致转储vmcore的过程中断 + + 受系统使用内存大小以及落盘速度的影响,kdump转储vmcore耗时可能较长,如果存在带外硬件狗时,有可能中断vmcore的转储流程。 + + **解决方案**:关闭带外硬件狗或者在kdump中重置带外硬件狗超时时间。 + +4. 磁盘上报有问题 + + vmcore没有正常保存可能是因为保存vmcore的磁盘没有正常上报,可以通过串口日志来确认此类问题。 + +## 场景三:生成的vmcore,crash工具无法正常解析 + +### 问题现象 + +在生成vmcore之后,使用crash vmcore vmlinux解析时出错,无法正常解析 + +### 原因分析及解决方案 + +1. vmcore和vmlinux版本不匹配 + + crash在解析vmcore时需要有内核源码编译出的vmlinux,同时,vmlinux的版本需要和转储vmcore的系统版本一致,crash才能正常解析。 + + **解决方案**:使用和vmcore版本一致的vmlinux。 + +2. 环境缺少strings命令 + + crash解析vmcore时需要依赖strings命令,缺少该命令会导致crash解析失败。 + + **解决方案**:strings命令由binutils包提供,可以安装binutils包或者手动拷贝strings命令以及依赖库。 + +3. 原因三:vmcore有损坏 + + 可以查看kdump_status.log获取kdump转储vmcore时的流程,是否完整执行结束。 + + **解决方案**:重新触发系统panic生成vmcore。 diff --git a/docs/zh/faq/caselibrary/docker.md b/docs/zh/faq/caselibrary/docker.md new file mode 100644 index 0000000000000000000000000000000000000000..ae7587236dc5cda33f4bbbf2823ee328d102c176 --- /dev/null +++ b/docs/zh/faq/caselibrary/docker.md @@ -0,0 +1,47 @@ +# docker容器运行一定时间后退出 + +## 问题背景 + +docker正常启动容器,容器运行一段时间后,在无其他异常的情况下,容器会退出。 + +## 现象描述 + +运行docker容器镜像,字符界面长时间处于空闲状态,一段时间后字符界面会自动退出,包括docker run -d后台启动运行容器,也会有一段时间后自动退出现象。 + + ![image](./figures/docker容器运行自动退出5.PNG) + +## 原因分析 + +运行容器镜像,当开发者通过ssh登陆且字符界面长时间处于空闲状态,字符界面会自动退出。这是由于容器镜像在制作时在/etc/profile文件中设置了TMOUT字段,当前此值默认为300S。 + + ![image](./figures/docker容器运行自动退出1.PNG) + +## 解决方案 + +1. 首先运行一个设置了TMOUT环境变量的容器 + + ```shell + docker run -itd XXX bash + ``` + +2. 执行exec命令修改容器内配置 + + ```` shell + docker exec -it $container_id bash + ```` + + 1. 先修改/etc/profile中的TMOUT环境变量值为0 + + ![image](./figures/docker容器运行自动退出2.PNG) + + 2. 再在/root/.bashrc中增加一行source /etc/profile + + ![image](./figures/docker容器运行自动退出3.PNG) + +3. 最终重启容器,TMOUT已经被设置为0,此时容器就不会再因为超时退出 + + ```shell + docker restart $container_id + ``` + + ![image](./figures/docker容器运行自动退出4.PNG) diff --git a/docs/zh/faq/caselibrary/efivars.md b/docs/zh/faq/caselibrary/efivars.md new file mode 100644 index 0000000000000000000000000000000000000000..e56d7fb8700a8a2cb5ac5fa6e42c66f9b637d005 --- /dev/null +++ b/docs/zh/faq/caselibrary/efivars.md @@ -0,0 +1,49 @@ +# 安装出现efivars报错 + +## 场景1:无法增加efi boot标签 + +### 问题背景 + +安装界面出现告警,提示无法增加efi boot标签告警,进行忽略正常安装。 +![image](./figures/安装_无法增加bootloader.png) + +### 现象描述 + +1. CTRL+ALT+F2切换后台,查看/tmp下的日志信息。 +2. 在storage.log日志中,错误提示无可用空间。 + ![image](./figures/安装_无bootloader空间.png) +3. 执行ls /sys/firmware/efi/efivars/命令,看到当前存在过多的efi boot。 + ![image](./figures/安装_ls_bootloader.png) + +### 原因分析 + +bios缓存空间被占满,无可用空间导致无法增加新的efi boot标签。 + +### 解决方案 + +需要清理bios缓存数据。 + +## 场景2:mount 错误 32 + +### 问题背景 + +安装界面出现错误,界面报mount failed:32。 +![image](./figures/安装_bootloader出错.png) + +### 现象描述 + +在安装时出现,挂载目录/sys/firmware/efi/efivars时报错。 + +1. CTRL+ALT+F2切换后台,查看/tmp下的日志信息。 +2. 在storage.log日志中,错误提示无可用空间。 + ![image](./figures/安装_bootloader_mount32.png) + +报错里提示efivarfs里可能有bad superblock,需要BIOS进一步排查。 + +### 原因分析 + +bios相关的硬件异常,flash上bios的变量区数据异常,导致bios变量相关服务异常,os下mount映射uefi变量服务时报错,导致安装os失败,需要重新刷新bios固件。 + +### 解决方案 + +重新刷新bios固件。 diff --git a/docs/zh/faq/caselibrary/figures/22e3a767-9e64-4561-be56-76b92e3c17ad.png b/docs/zh/faq/caselibrary/figures/22e3a767-9e64-4561-be56-76b92e3c17ad.png new file mode 100644 index 0000000000000000000000000000000000000000..7cd251e9dcf8f1834a0bac93b8ec46bcb7a8a165 Binary files /dev/null and b/docs/zh/faq/caselibrary/figures/22e3a767-9e64-4561-be56-76b92e3c17ad.png differ diff --git a/docs/zh/faq/caselibrary/figures/3c883235-950a-45d1-b10d-3ee4cbda5cd2.png b/docs/zh/faq/caselibrary/figures/3c883235-950a-45d1-b10d-3ee4cbda5cd2.png new file mode 100644 index 0000000000000000000000000000000000000000..5249d972acc38eefa0357ed1e654ed7856e49523 Binary files /dev/null and b/docs/zh/faq/caselibrary/figures/3c883235-950a-45d1-b10d-3ee4cbda5cd2.png differ diff --git a/docs/zh/faq/caselibrary/figures/50c5f99c-f86d-4e23-bd4e-36b536837312.png b/docs/zh/faq/caselibrary/figures/50c5f99c-f86d-4e23-bd4e-36b536837312.png new file mode 100644 index 0000000000000000000000000000000000000000..fab992d1e6f263c9d76ea6695474e19d394ad787 Binary files /dev/null and b/docs/zh/faq/caselibrary/figures/50c5f99c-f86d-4e23-bd4e-36b536837312.png differ diff --git a/docs/zh/faq/caselibrary/figures/64f55b4f-466f-4e56-86bc-c8714c3a1e22.png b/docs/zh/faq/caselibrary/figures/64f55b4f-466f-4e56-86bc-c8714c3a1e22.png new file mode 100644 index 0000000000000000000000000000000000000000..502951ecd117d96499d68cd89ea1be95c8d9b819 Binary files /dev/null and b/docs/zh/faq/caselibrary/figures/64f55b4f-466f-4e56-86bc-c8714c3a1e22.png differ diff --git a/docs/zh/faq/caselibrary/figures/7be4d825-680e-4dc0-989c-ae01843f90be.png b/docs/zh/faq/caselibrary/figures/7be4d825-680e-4dc0-989c-ae01843f90be.png new file mode 100644 index 0000000000000000000000000000000000000000..07c835efde8b17240ed96ba783658ada94683192 Binary files /dev/null and b/docs/zh/faq/caselibrary/figures/7be4d825-680e-4dc0-989c-ae01843f90be.png differ diff --git a/docs/zh/faq/caselibrary/figures/8df63e36-e202-4d8b-b477-4bd0c1d9d826.png b/docs/zh/faq/caselibrary/figures/8df63e36-e202-4d8b-b477-4bd0c1d9d826.png new file mode 100644 index 0000000000000000000000000000000000000000..23c548b2c70f6650efa0754a7c38d09dc878fbf9 Binary files /dev/null and b/docs/zh/faq/caselibrary/figures/8df63e36-e202-4d8b-b477-4bd0c1d9d826.png differ diff --git "a/docs/zh/faq/caselibrary/figures/920b\345\215\241\345\234\250\346\211\253\347\233\230.png" "b/docs/zh/faq/caselibrary/figures/920b\345\215\241\345\234\250\346\211\253\347\233\230.png" new file mode 100644 index 0000000000000000000000000000000000000000..1d138a7dbb46ec64331c77a4c621600c4b56ca40 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/920b\345\215\241\345\234\250\346\211\253\347\233\230.png" differ diff --git a/docs/zh/faq/caselibrary/figures/98bb38d3-bbbf-475c-b78d-bf4b2bf08528.png b/docs/zh/faq/caselibrary/figures/98bb38d3-bbbf-475c-b78d-bf4b2bf08528.png new file mode 100644 index 0000000000000000000000000000000000000000..2c7602261dbe9cd0807f74d2505c20fea55eae40 Binary files /dev/null and b/docs/zh/faq/caselibrary/figures/98bb38d3-bbbf-475c-b78d-bf4b2bf08528.png differ diff --git a/docs/zh/faq/caselibrary/figures/c2b268e3-78f1-4d7c-b459-50b90e73c5b2.png b/docs/zh/faq/caselibrary/figures/c2b268e3-78f1-4d7c-b459-50b90e73c5b2.png new file mode 100644 index 0000000000000000000000000000000000000000..4b7180a219b359848591ddcf9d962331fa2c5b03 Binary files /dev/null and b/docs/zh/faq/caselibrary/figures/c2b268e3-78f1-4d7c-b459-50b90e73c5b2.png differ diff --git a/docs/zh/faq/caselibrary/figures/cda96442-d6ba-4ab0-8d56-87b248b0ef41.png b/docs/zh/faq/caselibrary/figures/cda96442-d6ba-4ab0-8d56-87b248b0ef41.png new file mode 100644 index 0000000000000000000000000000000000000000..8df6f79395f00713658566cdf1037945eb8eba2e Binary files /dev/null and b/docs/zh/faq/caselibrary/figures/cda96442-d6ba-4ab0-8d56-87b248b0ef41.png differ diff --git "a/docs/zh/faq/caselibrary/figures/docker\345\256\271\345\231\250\350\277\220\350\241\214\350\207\252\345\212\250\351\200\200\345\207\2721.PNG" "b/docs/zh/faq/caselibrary/figures/docker\345\256\271\345\231\250\350\277\220\350\241\214\350\207\252\345\212\250\351\200\200\345\207\2721.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..3a5203b400ef481090c2e3d1f36e8b207ae7b5eb Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/docker\345\256\271\345\231\250\350\277\220\350\241\214\350\207\252\345\212\250\351\200\200\345\207\2721.PNG" differ diff --git "a/docs/zh/faq/caselibrary/figures/docker\345\256\271\345\231\250\350\277\220\350\241\214\350\207\252\345\212\250\351\200\200\345\207\2722.PNG" "b/docs/zh/faq/caselibrary/figures/docker\345\256\271\345\231\250\350\277\220\350\241\214\350\207\252\345\212\250\351\200\200\345\207\2722.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..b597d7f646c3b8d7f169be5a6a8a1667dee51328 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/docker\345\256\271\345\231\250\350\277\220\350\241\214\350\207\252\345\212\250\351\200\200\345\207\2722.PNG" differ diff --git "a/docs/zh/faq/caselibrary/figures/docker\345\256\271\345\231\250\350\277\220\350\241\214\350\207\252\345\212\250\351\200\200\345\207\2723.PNG" "b/docs/zh/faq/caselibrary/figures/docker\345\256\271\345\231\250\350\277\220\350\241\214\350\207\252\345\212\250\351\200\200\345\207\2723.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..d9add3629a3f41f35e42b21f0fb430b73956967b Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/docker\345\256\271\345\231\250\350\277\220\350\241\214\350\207\252\345\212\250\351\200\200\345\207\2723.PNG" differ diff --git "a/docs/zh/faq/caselibrary/figures/docker\345\256\271\345\231\250\350\277\220\350\241\214\350\207\252\345\212\250\351\200\200\345\207\2724.PNG" "b/docs/zh/faq/caselibrary/figures/docker\345\256\271\345\231\250\350\277\220\350\241\214\350\207\252\345\212\250\351\200\200\345\207\2724.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..ad1b3d50c3fb75d5daa1bdf7101f0583e0ab31ac Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/docker\345\256\271\345\231\250\350\277\220\350\241\214\350\207\252\345\212\250\351\200\200\345\207\2724.PNG" differ diff --git "a/docs/zh/faq/caselibrary/figures/docker\345\256\271\345\231\250\350\277\220\350\241\214\350\207\252\345\212\250\351\200\200\345\207\2725.PNG" "b/docs/zh/faq/caselibrary/figures/docker\345\256\271\345\231\250\350\277\220\350\241\214\350\207\252\345\212\250\351\200\200\345\207\2725.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..5bf5df749f898082221639700d92a94f8ebb58d0 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/docker\345\256\271\345\231\250\350\277\220\350\241\214\350\207\252\345\212\250\351\200\200\345\207\2725.PNG" differ diff --git "a/docs/zh/faq/caselibrary/figures/docker\351\205\215\347\275\256umask\345\200\2741.PNG" "b/docs/zh/faq/caselibrary/figures/docker\351\205\215\347\275\256umask\345\200\2741.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..172c147765edaccc9dfa224d7409ca09cfc3c542 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/docker\351\205\215\347\275\256umask\345\200\2741.PNG" differ diff --git "a/docs/zh/faq/caselibrary/figures/docker\351\205\215\347\275\256umask\345\200\2742.PNG" "b/docs/zh/faq/caselibrary/figures/docker\351\205\215\347\275\256umask\345\200\2742.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..16d134bf702f18c315c33c5002990be5f0ed3db2 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/docker\351\205\215\347\275\256umask\345\200\2742.PNG" differ diff --git "a/docs/zh/faq/caselibrary/figures/docker\351\205\215\347\275\256umask\345\200\2743.PNG" "b/docs/zh/faq/caselibrary/figures/docker\351\205\215\347\275\256umask\345\200\2743.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..7dd9ee67d001efa52279eb03cf65a70a83726188 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/docker\351\205\215\347\275\256umask\345\200\2743.PNG" differ diff --git a/docs/zh/faq/caselibrary/figures/f1269fd0-7fb4-462c-a21c-043778edace0.png b/docs/zh/faq/caselibrary/figures/f1269fd0-7fb4-462c-a21c-043778edace0.png new file mode 100644 index 0000000000000000000000000000000000000000..53fa9ac65ed26de2e2ed417333246a63daaf0b8b Binary files /dev/null and b/docs/zh/faq/caselibrary/figures/f1269fd0-7fb4-462c-a21c-043778edace0.png differ diff --git a/docs/zh/faq/caselibrary/figures/fd22e53b-5775-40ac-b194-6932ad81958e.png b/docs/zh/faq/caselibrary/figures/fd22e53b-5775-40ac-b194-6932ad81958e.png new file mode 100644 index 0000000000000000000000000000000000000000..30b860e2486368eb68142d3ed348ff9a9ef9893a Binary files /dev/null and b/docs/zh/faq/caselibrary/figures/fd22e53b-5775-40ac-b194-6932ad81958e.png differ diff --git a/docs/zh/faq/caselibrary/figures/ff7fd456-3f56-4e1c-9bd6-ace9565c271f.png b/docs/zh/faq/caselibrary/figures/ff7fd456-3f56-4e1c-9bd6-ace9565c271f.png new file mode 100644 index 0000000000000000000000000000000000000000..d8042ecd383ca947b6a07fd93a758af842bb309b Binary files /dev/null and b/docs/zh/faq/caselibrary/figures/ff7fd456-3f56-4e1c-9bd6-ace9565c271f.png differ diff --git a/docs/zh/faq/caselibrary/figures/lvm-1.png b/docs/zh/faq/caselibrary/figures/lvm-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7f0b30deac8111cbc77658595b827825c3f45ce4 Binary files /dev/null and b/docs/zh/faq/caselibrary/figures/lvm-1.png differ diff --git a/docs/zh/faq/caselibrary/figures/lvm-2.png b/docs/zh/faq/caselibrary/figures/lvm-2.png new file mode 100644 index 0000000000000000000000000000000000000000..fae687b735dd83fe8b6cdc487bbbd089b5e77c18 Binary files /dev/null and b/docs/zh/faq/caselibrary/figures/lvm-2.png differ diff --git a/docs/zh/faq/caselibrary/figures/lvm-3.png b/docs/zh/faq/caselibrary/figures/lvm-3.png new file mode 100644 index 0000000000000000000000000000000000000000..87860adf7a715315df669d5ab8d9f5a3c78b891e Binary files /dev/null and b/docs/zh/faq/caselibrary/figures/lvm-3.png differ diff --git a/docs/zh/faq/caselibrary/figures/lvm-4.png b/docs/zh/faq/caselibrary/figures/lvm-4.png new file mode 100644 index 0000000000000000000000000000000000000000..314b5435915fdeeb31722326ac6f3b24a7376c46 Binary files /dev/null and b/docs/zh/faq/caselibrary/figures/lvm-4.png differ diff --git a/docs/zh/faq/caselibrary/figures/lvm-5.png b/docs/zh/faq/caselibrary/figures/lvm-5.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ff4d2a9e20e5f988877d3589cbf567ba1fe140 Binary files /dev/null and b/docs/zh/faq/caselibrary/figures/lvm-5.png differ diff --git a/docs/zh/faq/caselibrary/figures/pvs-1.png b/docs/zh/faq/caselibrary/figures/pvs-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c97a4effc7aa8b4b3a530c529ab33dbfe221568c Binary files /dev/null and b/docs/zh/faq/caselibrary/figures/pvs-1.png differ diff --git a/docs/zh/faq/caselibrary/figures/pvs-2.png b/docs/zh/faq/caselibrary/figures/pvs-2.png new file mode 100644 index 0000000000000000000000000000000000000000..58628ea86f389d04be8dc4317ae5d60450eda370 Binary files /dev/null and b/docs/zh/faq/caselibrary/figures/pvs-2.png differ diff --git "a/docs/zh/faq/caselibrary/figures/\345\256\211\350\243\205_bootloader_mount32.png" "b/docs/zh/faq/caselibrary/figures/\345\256\211\350\243\205_bootloader_mount32.png" new file mode 100644 index 0000000000000000000000000000000000000000..a5e99d4b0e0ca5f068847313b24b58376b8529ef Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\345\256\211\350\243\205_bootloader_mount32.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\345\256\211\350\243\205_bootloader\345\207\272\351\224\231.png" "b/docs/zh/faq/caselibrary/figures/\345\256\211\350\243\205_bootloader\345\207\272\351\224\231.png" new file mode 100644 index 0000000000000000000000000000000000000000..35b37440c71bac2d8ea6084c37503cf7ad5df88b Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\345\256\211\350\243\205_bootloader\345\207\272\351\224\231.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\345\256\211\350\243\205_ls_bootloader.png" "b/docs/zh/faq/caselibrary/figures/\345\256\211\350\243\205_ls_bootloader.png" new file mode 100644 index 0000000000000000000000000000000000000000..9fdf82b84ce63b5ae13696ba6b57403cd4ac0421 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\345\256\211\350\243\205_ls_bootloader.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\345\256\211\350\243\205_\346\227\240bootloader\347\251\272\351\227\264.png" "b/docs/zh/faq/caselibrary/figures/\345\256\211\350\243\205_\346\227\240bootloader\347\251\272\351\227\264.png" new file mode 100644 index 0000000000000000000000000000000000000000..d9a502e0ea85dc18702a1cd18bb5e0474a3bdf1c Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\345\256\211\350\243\205_\346\227\240bootloader\347\251\272\351\227\264.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\345\256\211\350\243\205_\346\227\240\346\263\225\345\242\236\345\212\240bootloader.png" "b/docs/zh/faq/caselibrary/figures/\345\256\211\350\243\205_\346\227\240\346\263\225\345\242\236\345\212\240bootloader.png" new file mode 100644 index 0000000000000000000000000000000000000000..9c3c1e70241fce562516ebae6e9e4558a0a357f1 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\345\256\211\350\243\205_\346\227\240\346\263\225\345\242\236\345\212\240bootloader.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_config.png" "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_config.png" new file mode 100644 index 0000000000000000000000000000000000000000..5f7c9067bb6794be47f15984f3ad5fde20091a78 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_config.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_config_\344\277\256\346\224\271.png" "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_config_\344\277\256\346\224\271.png" new file mode 100644 index 0000000000000000000000000000000000000000..dcd05097682d09f9312be29d509c2cc1b69978b6 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_config_\344\277\256\346\224\271.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_config_\346\227\245\345\277\227.png" "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_config_\346\227\245\345\277\227.png" new file mode 100644 index 0000000000000000000000000000000000000000..b61a8a77b39d081d759cb9e9ac0e340fd9a1d5a2 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_config_\346\227\245\345\277\227.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_config_\346\243\200\346\237\245.png" "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_config_\346\243\200\346\237\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..35e57761aabf68ebb0ce9e81f301f2adb964638b Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_config_\346\243\200\346\237\245.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_script_post.png" "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_script_post.png" new file mode 100644 index 0000000000000000000000000000000000000000..4d4c6e553b45a0d76d5f4f5b0db3fd85683876d3 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_script_post.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_script_\346\212\245\351\224\231.png" "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_script_\346\212\245\351\224\231.png" new file mode 100644 index 0000000000000000000000000000000000000000..75456042ff8446b363366e2b47af5d0e782d4e3b Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_script_\346\212\245\351\224\231.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_tk_\345\256\211\350\243\205\345\244\261\350\264\245.png" "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_tk_\345\256\211\350\243\205\345\244\261\350\264\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..dde8a3b9045bf6473b514d46e54ecaf82e890651 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_tk_\345\256\211\350\243\205\345\244\261\350\264\245.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_tk_\346\212\245\351\224\231.png" "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_tk_\346\212\245\351\224\231.png" new file mode 100644 index 0000000000000000000000000000000000000000..da68c4ed2e2be393e3cb43987cd6ced1b5a3561e Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_tk_\346\212\245\351\224\231.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_\346\234\252\345\256\214\345\205\250.png" "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_\346\234\252\345\256\214\345\205\250.png" new file mode 100644 index 0000000000000000000000000000000000000000..5431d35c6c1df7b289d68f670b65260eef62e7e4 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_\346\234\252\345\256\214\345\205\250.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_\346\234\252\345\256\214\345\205\250_\351\205\215\347\275\256.png" "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_\346\234\252\345\256\214\345\205\250_\351\205\215\347\275\256.png" new file mode 100644 index 0000000000000000000000000000000000000000..4987ebe76ca3fda6e8df77be78b2661f9424e1f2 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_\346\234\252\345\256\214\345\205\250_\351\205\215\347\275\256.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_\346\236\204\345\273\272kernel_\346\212\245\351\224\231.png" "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_\346\236\204\345\273\272kernel_\346\212\245\351\224\231.png" new file mode 100644 index 0000000000000000000000000000000000000000..1f648fb27dde4307bb5d456f53fc46a11a9552e8 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\346\215\242\346\240\207_\346\236\204\345\273\272kernel_\346\212\245\351\224\231.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\347\243\201\347\233\230\346\266\210\345\244\261.png" "b/docs/zh/faq/caselibrary/figures/\347\243\201\347\233\230\346\266\210\345\244\261.png" new file mode 100644 index 0000000000000000000000000000000000000000..b7869a374cc7db7b9a6eb247f528ef2ac698c5e3 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\347\243\201\347\233\230\346\266\210\345\244\261.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\347\243\201\347\233\230\346\266\210\345\244\261_lsblk.png" "b/docs/zh/faq/caselibrary/figures/\347\243\201\347\233\230\346\266\210\345\244\261_lsblk.png" new file mode 100644 index 0000000000000000000000000000000000000000..2be183319fbacbc242f9b2090f7564d556b50704 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\347\243\201\347\233\230\346\266\210\345\244\261_lsblk.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\347\263\273\347\273\237\346\201\242\345\244\215_\346\214\202\350\275\275boot.png" "b/docs/zh/faq/caselibrary/figures/\347\263\273\347\273\237\346\201\242\345\244\215_\346\214\202\350\275\275boot.png" new file mode 100644 index 0000000000000000000000000000000000000000..56ec18d7605604ead16c3c71153c4046a3f78d76 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\347\263\273\347\273\237\346\201\242\345\244\215_\346\214\202\350\275\275boot.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\347\263\273\347\273\237\346\201\242\345\244\215_\346\214\202\350\275\275\346\240\271.png" "b/docs/zh/faq/caselibrary/figures/\347\263\273\347\273\237\346\201\242\345\244\215_\346\214\202\350\275\275\346\240\271.png" new file mode 100644 index 0000000000000000000000000000000000000000..c7ed2b47edc96d245d87d0026c30b384d19b5853 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\347\263\273\347\273\237\346\201\242\345\244\215_\346\214\202\350\275\275\346\240\271.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\347\263\273\347\273\237\346\201\242\345\244\215_\346\234\252\346\277\200\346\264\273.png" "b/docs/zh/faq/caselibrary/figures/\347\263\273\347\273\237\346\201\242\345\244\215_\346\234\252\346\277\200\346\264\273.png" new file mode 100644 index 0000000000000000000000000000000000000000..968a6f07c35faf4e7750117a049522a989d0c35f Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\347\263\273\347\273\237\346\201\242\345\244\215_\346\234\252\346\277\200\346\264\273.png" differ diff --git "a/docs/zh/faq/caselibrary/figures/\347\263\273\347\273\237\346\201\242\345\244\215_\346\277\200\346\264\273.png" "b/docs/zh/faq/caselibrary/figures/\347\263\273\347\273\237\346\201\242\345\244\215_\346\277\200\346\264\273.png" new file mode 100644 index 0000000000000000000000000000000000000000..41e8dd4da6ac4e54cd86969b842cf087b5c540e6 Binary files /dev/null and "b/docs/zh/faq/caselibrary/figures/\347\263\273\347\273\237\346\201\242\345\244\215_\346\277\200\346\264\273.png" differ diff --git a/docs/zh/faq/caselibrary/isulad.md b/docs/zh/faq/caselibrary/isulad.md new file mode 100644 index 0000000000000000000000000000000000000000..a3fd70be7f2737e14fd7df66881d41961e08adda --- /dev/null +++ b/docs/zh/faq/caselibrary/isulad.md @@ -0,0 +1,36 @@ +# isulad使用grpc与rest直接调用服务方法 + +## isulad使用grpc直接调用服务方法 + +isula与isulad之间的通信默认使用grpc,且k8s场景CRI接口调用只能使用grpc。 + +若用户想在第三方组件中直接通过gRPC连接向iSulad请求服务,可参照不同功能模块目录下的proto文件获取gRPC请求格式。 + +调试grpc调用可使用grpcurl工具,grpcurl 是 Go 语言开源社区开发的工具,需要手工安装: + +```sh +$ go get github.com/fullstorydev/grpcurl +$ go install github.com/fullstorydev/grpcurl/cmd/grpcurl +``` + +调试grpc调用时可参照以下命令: + +```sh +grpcurl -plaintext -H 'tls_mode:0' -proto=api.proto -import-path=../ -unix=true /var/run/isulad.sock runtime.v1alpha2.ImageService.ListImages +``` + +## isulad使用rest直接调用服务方法 + +若isula与isulad之间想要使用更轻量级的rest进行通信,需要在[iSulad](https://gitee.com/openeuler/iSulad) 仓库获取iSulad源码进行源码编译,源码编译的教程可参照: + +在源码编译时使用如下编译选项可更换isula与isulad的交互方式为rest: + +```sh +cmake -DENABLE_GRPC=OFF …/ +``` + +调试rest调用可直接使用curl工具,调试的具体方式可参照以下命令: + +```sh +curl -d "{}" --unix-socket /var/run/isulad.sock http://localhost/ContainerService/Version +``` diff --git a/docs/zh/faq/caselibrary/lvm.md b/docs/zh/faq/caselibrary/lvm.md new file mode 100644 index 0000000000000000000000000000000000000000..a84f311062cf2475531a4c7e8d0705b1e2ef0a94 --- /dev/null +++ b/docs/zh/faq/caselibrary/lvm.md @@ -0,0 +1,44 @@ +# LVM标签损坏 + +## 现象描述 + +pvs查询不到pv,blkid查询不到LVM2_member标签。 +正常情况: + +![](./figures/lvm-1.png) + +异常情况: + +![](./figures/lvm-2.png) + +## 原因分析 + +hexdump查看元数据区域,发现标签损坏。 + +![](./figures/lvm-3.png) + +![](./figures/lvm-4.png) + +## 解决方法 + +1. 在/etc/lvm/backup目录查询卷组备份信息,获取pv的uuid,使用pvcreate命令恢复。 + + ![](./figures/lvm-5.png) + + 命令如下: + + ``` + pvcreate --uuid D8v9Qw-1EJw-cmRc-nY2y-AZbC-8eLd-5Cpi2s --restorefile /etc/lvm/backup/vg /dev/sdb + ``` + +2. pv复之后,再恢复卷组。 + + ``` + vgcfgrestore --file /etc/lvm/backup/vg vg + ``` + +3. 最后激活卷组 + + ``` + vgchange -ay vg + ``` diff --git a/docs/zh/faq/caselibrary/mountsysroot.md b/docs/zh/faq/caselibrary/mountsysroot.md new file mode 100644 index 0000000000000000000000000000000000000000..22057b9650642179d1c6d70ac86de7d5be46a517 --- /dev/null +++ b/docs/zh/faq/caselibrary/mountsysroot.md @@ -0,0 +1,118 @@ +# 出现mount/sysroot失败的问题 + +## 问题背景 + +### 硬软件信息 + +硬件环境:TaiShan200 (Model1280V2) + +内核版本:5.10.0-153.1.0.81.oe2203sp2.aarch64 + +### 版本信息 + +openEuler 22.03-LTS-SP2 + +## 现象描述 + +重复多次上下电测试,mount时偶现`ext4/vfat`驱动没加载到内核,导致mount文件系统失败。 + +![image](./figures/fd22e53b-5775-40ac-b194-6932ad81958e.png) + +## 原因分析 + +这个问题出现的概率低,现象表现又在启动过程,这个给定位分析带来了一些额外的工作量,分析的过程也是按抽丝剥茧的方式层层递进。 + +### 1. mount失败问题 + +![image](./figures/8df63e36-e202-4d8b-b477-4bd0c1d9d826.png) + +Mount失败,打开调试后`udev.log_priority=debug rd.debug=1`,获取详细信息: + +![image](./figures/cda96442-d6ba-4ab0-8d56-87b248b0ef41.png) + +可以看到问题点是执行mount系统调用时失败,进一步增加内核打印。 + +![image](./figures/98bb38d3-bbbf-475c-b78d-bf4b2bf08528.png) + +从上面截图里的信息可以看出,当前内核在挂载vfat文件系统时: + +1. `get_fs_type1`,由于对应ko还未加载,所以调用`request_module1`去加载模块。 +2. 根据图片中`request_module1`返回值 "大于" 0,可以看到,应该已经走到`call_modprobe->call_usermodehelper_exec`,用户态执行了请求,但是返回了256。 + +**分析结论**:用户态在执行modprobe时,返回错误码256,下面分析为什么会load module失败。 + +### 2. load module失败问题 + +用户态的日志由于输出到命令行,在紧急模式阶段无法输出,选择在内核态增加打印: + +![image](./figures/f1269fd0-7fb4-462c-a21c-043778edace0.png) +![image](./figures/3c883235-950a-45d1-b10d-3ee4cbda5cd2.png) + +根据日志能确认,是modprobe加载驱动时,在内核里失败了。 + +**分析结论**:`module_sig_check/setup_load_info`这两个函数其中一个失败了,返回-129。 + +### 3. 验签失败问题 + +返回-129,调用链为: + +```txt +load_module->module_sig_check->mod_verify_sig->verify_pkcs7_signature->verify_pkcs7_message_sig->pkcs7_validate_trust->pkcs7_validate_trust_one->verify_signature->public_key_verify_signature ->crypto_akcipher_verify->pkcs1pad_verify->pkcs1pad_verify_complete +``` + +![image](./figures/7be4d825-680e-4dc0-989c-ae01843f90be.png) + +![image](./figures/50c5f99c-f86d-4e23-bd4e-36b536837312.png) + +从log中可以看出验签通过和验签失败时`out_buf`的数值都一致。而`req_ctx->out_buf + ctx->key_size`前后数值不一样。因此优先分析异常数值的来源。 + +从代码可以看出异常的数据由`sg_pcopy_to_buffer`进行获取发现异常数据为 签名数据中的digest部分,这数值是由签名数据的原始数据经过哈希算法生成digest,然后使用私钥对digest进行加密。 + +在验签的时候使用公钥对数据进行解密得到digest,并且对收到的原始数据重新计算digest,然后将计算得到的digest与解析得到的digest进行比较,以验证签名的有效性。异常的位置便发生在这个比较中,说明签名数据可能不完整或者被篡改。 + +通过添加log发现digest由`crypto_shash_digest(desc, pkcs7->data, pkcs7->data_len, sig->digest)`;验签通过和验签失败时的pkcs7->data进行打印,发现数据一致 + +![image](./figures/64f55b4f-466f-4e56-86bc-c8714c3a1e22.png) + +将怀疑点放到了使用的算法驱动,于是将算法驱动的名字进行打印: + +![image](./figures/c2b268e3-78f1-4d7c-b459-50b90e73c5b2.png) +结果发现所有返回-129时候使用的都是sha256-ce这个加密驱动。 + +该加密驱动有使用到armv8的加密扩展,使用了cpu的特殊指令进行加解密。使用同样的内核进行复现,未能复现出问题。怀疑是硬件问题。 + +在异常环境上,使用以下脚本反复加载卸载ko可以复现出-129的问题。 + +![image](./figures/ff7fd456-3f56-4e1c-9bd6-ace9565c271f.png) + +**分析结论**:怀疑是CPU问题。 + +### 4. CPU 问题 + +在正常环境中则无法复现。 + +经过硬件排查,得到以下结论: + +1. 是早期工程的芯片。 +2. 这些指令里有测试异常的: + + ```txt + AdvsimdLoadStore + LCRTSveVectorMove + ``` + +3. 使用测试套测试cpu130和131有问题。 + +根据硬件的结论,将反复加载ko的脚本绑定在130和131核心上运行,问题必现,绑定在129问题则不出现。 + +![image](./figures/22e3a767-9e64-4561-be56-76b92e3c17ad.png) + +**至此,可以锁定为CPU故障。** + +## 解决方案 + +**方案一:更换CPU** +由于cpu核130,131上的指令处理异常,硬件上替换正常CPU后可以解决该问题。 + +**方案二:隔离CPU核130,131** +软件上通过CPU核隔离设置,可以隔离出异常的CPU核,作为规避方案。 diff --git a/docs/zh/faq/caselibrary/pvs_vgs.md b/docs/zh/faq/caselibrary/pvs_vgs.md new file mode 100644 index 0000000000000000000000000000000000000000..53002d4928ab317c0e39a29ba9de5520933133dd --- /dev/null +++ b/docs/zh/faq/caselibrary/pvs_vgs.md @@ -0,0 +1,35 @@ +# pvs或vgs出现Unknown问题 + +## 现象描述 + +pvs或vgs的回显中,pv或vg报unknown错误。 + +![](./figures/pvs-1.png) + +![](./figures/pvs-2.png) + +## 原因分析 + +通常为元数据损坏,导致命令读取到不完整的信息,需要进行修复,否则无法正常使用pv或vg。可使用hexdump读取裸盘数据验证,见[LVM标签损坏](./lvm.md)。 + +## 解决方法 + +问题一:vg无法识别,报错unknown + +```bash +pvck --repair --file /etc/lvm/backup/vg /dev/sdb +``` + +vg为卷组备份信息,保存在/etc/lvm/backup目录。 + +问题二:pv无法识别,报错unknown + +```bash +pvcreate --uuid xxx --restorefile /etc/lvm/backup/vg /dev/sdc +vgcfgrestore --file /etc/lvm/backup/vg vg +vgchange -ay vg +``` + +uuid在备份文件/etc/lvm/backup中获取。 + +执行完修复步骤后,输入pvs或vgs命令,可看到正常回显则说明修复成功。 diff --git a/docs/zh/faq/caselibrary/rebranding.md b/docs/zh/faq/caselibrary/rebranding.md new file mode 100644 index 0000000000000000000000000000000000000000..be5c68a60b0a4fa40146d11fdad04630955f189d --- /dev/null +++ b/docs/zh/faq/caselibrary/rebranding.md @@ -0,0 +1,94 @@ +# 换标常见问题 + +## 场景1:安装失败,提示无法写入boot loader配置 + +### 问题背景 + +使用openEuler系统软件包,进行对应的换标替换,但在进行安装中出现安装失败。 + +### 现象描述 + +在进行镜像安装时,安装失败,提示无法写入boot loader配置信息。 + +![image](./figures/换标_config.png) + +### 原因分析 + +CTRL+ALT+F2切换后台查看/tmp/anaconda.log日志。 + +![image](./figures/换标_config_日志.png) + +从日志中看到并未找到对应的bootloader配置文件。 +主要原因是安装中会去检查/etc/os-release文件对应的"ID"和"VARIANT_ID"。 + +![image](./figures/换标_config_检查.png) + +### 解决方案 + +修改anaconda中的openEuler.conf的"Profile Detection"下的"os_id"和"variant_id"与换标系统中的os-release文件保持一致。 + ![image](./figures/换标_config_修改.png) + +## 场景2:安装成功,无法正常进入系统 + +### 问题背景 + +换标后能进行正常的镜像安装,但安装后无法正常启动。 + +### 现象描述 + +启动时提示无法正常找到efi启动文件。 + ![image](./figures/换标_未完全.png) + +### 原因分析 + +存在部分软件包未完全换标,grub软件包换标存在遗漏情况。 + +### 解决方案 + +1.查看启动项是否存在不正确的情况。 + ![image](./figures/换标_未完全_配置.png) +2. 参考[系统文件恢复问题](./sysfile.md)文档,可以进入系统后调整对应的启动配置文件。 +3. 完全解决换标问题,需要修改构建工程中的grub.cfg。 + +## 场景3:换标后构建kernel,安装依赖tk组件失败 + +### 问题背景 + +换标使用obs构建openEuler的同源包,出现tk安装出现错误。 + +![image](./figures/换标_构建kernel_报错.png) + +### 现象描述 + +对tk软件包进行安装检查,单独安装同样存在报错现象。错误为组件的%post阶段。 +![image](./figures/换标_tk_安装失败.png) + +### 原因分析 + +spec中的%ldconfig_post、%ldconfig_postun未识别,导致安装软件中带入误认为脚本,并报错。 +![image](./figures/换标_tk_报错.png) + +### 解决方案 + +需要修改换标工程中的rpm-config宏定义。 + +## 场景4:安装中报POSTTRANS scriptlet错误 + +### 问题背景 + +换标或者自构建软件镜像,在安装时出现 POSTTRANS scriptlet错误。 +![image](./figures/换标_script_报错.png) + +### 现象描述 + +1. CTRL+ALT+F2切换后台,进入/mnt/sysroot目录,切根。 +2. 执行dnf history info 1,可以看到post哪边执行出错。 + ![image](./figures/换标_script_post.png) + +### 原因分析 + +软件安装后执行%POSTTRANS出错,未能找到相关的gz文件。 + +### 解决方案 + +分析软件包spec文件的%post脚本,修改后本地安装无问题后可以再次进行安装。 diff --git a/docs/zh/faq/caselibrary/sssnic.md b/docs/zh/faq/caselibrary/sssnic.md new file mode 100644 index 0000000000000000000000000000000000000000..d95f63ad02caaff8d18b60a86432cb8b878088b6 --- /dev/null +++ b/docs/zh/faq/caselibrary/sssnic.md @@ -0,0 +1,80 @@ +# 制作内核热补丁,插入时dmesg提示缺少sssnic模块 + +## 问题背景 + +在使用openEuler-LTS-SP3版本制作内核热补丁时,补丁并没有修改sssnic驱动模块,但是制作出来的热补丁激活失败,使用dmesg命令后提示:livepatch: module 'sssdk' not loaded。(sssnic是网卡驱动模块,源码位于内核drivers/net/ethernet/sssnic目录下) + +### 版本信息 + +内核版本:5.10.0-182.0.0.95.oe2203sp3.aarch64 + +kpatch版本:kpatch-0.9.5-7.oe2203sp3.aarch64 + +### 现象描述 + +使用命令`./make_hotpatch -d .new -i procversion`制作内核热补丁,能够正常制作,但是制作完成后发现sssnic模块的函数有修改,导致热补丁依赖sssnic模块,实际补丁并未对该驱动模块源码进行修改;热补丁依赖sssnic模块会导致补丁激活失败,会报错未加载sssnic模块(sssnic模块为sss网卡驱动模块,默认不加载),制作出来的热补丁无法正常使用。 + +```shell +[166439.721426] klp_procversion: tainting kernel with TAINT_LIVEPATCH +[166439.760137] livepatch: module 'sssdk' not loaded +``` + +## 原因分析 + +1.根据日志可以发现,在提取新的修改后的elf段时,`sss_tool_nic_func.c`和`sss_tool_sdk.c`两个文件的确被识别出有差异,并被当做差异段。 + +2.进一步排查后发现,增量编译时sssnic模块不论是否被修改,sssnic模块都会重新被编译,且增量编译前后的二进制.o文件会被kpatch识别存在变化,被制作成热补丁。 + +## 解决方案 + +方案一: + +若制作的热补丁并非sssnic模块,可以在识别差异段时尝试屏蔽该模块,修改`/usr/libexec/kpatch/kpatch-cc`文件,在忽略文件列表中增加sssnic源码路径,再次制作热补丁就可以看到不会再依赖sssnic模块,热补丁正常使用。 + +```shell +diff --git a/kpatch-build/kpatch-cc b/kpatch-build/kpatch-cc +index 80d310c...688d92b 100755 +--- a/kpatch-build/kpatch-cc ++++ b/kpatch-build/kpatch-cc +@@ -49,7 +49,8 @@ if [[ "$TOOLCHAINCMD" =~ ^(.*-)?gcc$ || + arch/powerpc/kernel/prom_init.o|\ + lib/*|\ + .*.o|\ +- */.lib_exports.o) ++ */.lib_exports.o|\ ++ drivers/net/ethernet/3snic/sssnic/*) + break + ;; + *.o) +``` + +方案二: + +有时未作出修改的函数被识别为变化函数可能是编译器优化后导致汇编结果发生了变化,这种场景下可以使用`KPATCH_IGNORE_FUNCTION`宏忽略该函数,在制作热补丁时就不会将该函数做到热补丁中。 + +查看热补丁制作时屏幕输出的日志可以发现sssnic模块对应有两个函数发生了变化: + +```txt +Testing patch file(s) +Reading special section data +Building original source +Building patched source +Extracting new and modified ELF sections +sss_tool_nic_func.o: changed function: sss_tool_ioctl +sss_tool_sdk.o: changed function: sss_tool_get_hw_drv_version +version.o: changed function: version_proc_show +``` + +在sssnic模块显示变化的函数后,分别在对应函数发生修改的文件里增加以下两句(注意宏`KPATCH_IGNORE_FUNCTION`在函数声明后再使用,否则会报错找不到符号): + +```c +#include "/usr/share/kpatch/patch/kpatch-macros.h" +KPATCH_IGNORE_FUNCTION(sss_tool_ioctl); +``` + +```c +#include "/usr/share/kpatch/patch/kpatch-macros.h" +KPATCH_IGNORE_FUNCTION(sss_tool_get_hw_drv_version); +``` + +重新执行命令`./make_hotpatch -d .new -i procversion`制作热补丁就不会再报关于sssnic模块未加载的错误。 diff --git a/docs/zh/faq/caselibrary/sysfile.md b/docs/zh/faq/caselibrary/sysfile.md new file mode 100644 index 0000000000000000000000000000000000000000..eabc9f9245e66f502822e4366d31100942b79e8d --- /dev/null +++ b/docs/zh/faq/caselibrary/sysfile.md @@ -0,0 +1,36 @@ +# 系统文件恢复问题 + +## 问题背景 + +在正常使用中常会出现误删系统文件或其他系统修改无法正常进入系统的问题,需要进行磁盘系统的恢复或修改,或者之前有重要数据需要备份保存。 + +## 现象描述 + +系统文件丢失或修改,导致无法正常进入系统,需要恢复系统文件。 + +## 解决方案 + +1. 挂载镜像,CTRL+ALT+F2切换后台。 + 进入后台可以查看当前磁盘的状态,处于未激活状态,不能直接操作磁盘。 + ![image](./figures/系统恢复_未激活.png) +2. 配置网络,开启ssh服务。 + + ```txt + ifconfig eth0 xx.xx.xx.xx netmask 255.255.255.0 up + route add default gw xx.xx.xx.xx + cp /etc/ssh/sshd_config.anaconda /etc/ssh/sshd_config + systemctl restart sshd + ``` + +3. 激活系统卷组。 + 使用命令vgchange -ay对磁盘存在的系统进行激活操作。 + ![image](./figures/系统恢复_激活.png) +4. 通过挂载的方式挂载上各个分区,挂载后可进行系统操作。 + + 1) 创建临时目录test,将激活后的系统的进行挂载,挂载根/dev/oprnruler/root到临时目录test。 + ![image](./figures/系统恢复_挂载根.png) + + 2) 挂载激活后的boot(/dev/sda2)到临时系统的boot上。 + ![image](./figures/系统恢复_挂载boot.png) + + 3) 在此基础上就可以操作磁盘系统以及系统数据了。 diff --git a/docs/zh/faq/caselibrary/systemd-logind.md b/docs/zh/faq/caselibrary/systemd-logind.md new file mode 100644 index 0000000000000000000000000000000000000000..423fc195487589937db864453d882ce41b84946a --- /dev/null +++ b/docs/zh/faq/caselibrary/systemd-logind.md @@ -0,0 +1,91 @@ +# systemd-logind.service无法获取NIS服务器上的用户信息的解决方法 + +## 问题背景 + +在systemd-pam软件包已安装的前提下,使用NIS服务同步过来的用户登录时, /run/systemd/users/下面没有创建对应的uid文件,导致gnome-shell报错。 + +NIS(Network Information Service)是一种为网络中所有的机器提供网络信息的系统,包括用户名、密码、主目录、组信息等。NIS服务主要用于集中控制多个系统管理数据库的网络用品,其全称是Network Information Service。 + +相关issue: + +### 版本信息 + +systemd版本: systemd-249-75.oe2203sp1.aarch64 + +systemd-pam版本: systemd-pam-249-75.oe2203sp1.aarch64 + +## 现象描述 + +NIS服务器上创建了一个1015(ylp)用户,用户信息可以使用id命令查询到,但是登录1015用户后 /run/systemd/users/ 目录下没有uid对应的文件。 + +```txt +[root@server1 ~]# id ylp +uid=1015(ylp) gid=1015(ylp) groups=1015(ylp) +[root@server1 ~]# ll /run/systemd/users/ +total 16 +-rw-r--r-- 1 root root 345 May 13 17:23 0 +-rw-r--r-- 1 root root 243 May 10 17:40 1002 +-rw-r--r-- 1 root root 252 May 13 17:20 1004 +-rw-r--r-- 1 root root 274 May 10 18:12 971 +``` + +## 原因分析 + +1. 根据错误打印可以看出来是网络不通导致的连接不上NIS服务器。 + + ```txt + systemd-logind[2989387]: yp_bind_client_create_v3: RPC: Remote system error - Address family not supported by protocol + server1 sshd[2989498]: pam_systemd(sshd:session): Failed to create session: No such process + server1 sshd[2989498]: pam_unix(sshd:session): session opened for user ylp(uid=1015) by (uid=0) + server1 sshd[2989498]: pam_systemd(sshd:session): Failed to create session: Transport endpoint is not connected + ``` + +2. 查找systemd社区, 发现了类似的提交和讨论。以下两个提交都可能会导致systemd-logind无法与NIS服务器建立通信: + + - systemd在235版本对许多常驻的service(比如:systemd-logind.service)增加了`IPAddressDeny=any`,防止了与外部ip通信: + - systemd在239版本对systemd-logind.service的通信做了进一步的限制:禁止了`AF_INET` 和 `AF_INET6` 协议: + +3. 最终systemd社区对systemd-logind.service的兼容性变更做了一些解释以及文档承载: + + - NWES文档中增加了不兼容说明: + - systemd的开发者认为类似NIS的网络通信会增加遭受网络攻击的风险,最好使用 NSCD 或 SSSD (缓存远程用户信息的服务),systemd不会去改变这个默认的策略: + +## 解决方案 + +方案一: + +添加NSCD或SSSD服务,以访问本地缓存数据。 + +方案二: + +用户自行开启systemd-logind.service网络访问。 + +1. 首先在客户端的/usr/lib/systemd/system/systemd-logind.service.d/目录下查找 `IPAddressAllow`、`RestrictAddressFamilies`字段,保证这两个字段没有被其他服务重新设置。 + + ```bash + grep -rn "IPAddressAllow" + grep -rn "RestrictAddressFamilies" + ``` + + **场景1**:如果有字段不存在,则在/usr/lib/systemd/system/systemd-logind.service.d/目录下新增配置文件systemd-logind-nis.conf(权限与其他文件保持一致),并在文件中新增`IPAddressAllow`和`RestrictAddressFamilies`中不存在的字段,IPAddressAllow字段增加`NIS服务器的IP地址`,RestrictAddressFamilies字段增加`AF_UNIX AF_NETLINK AF_INET AF_INET6`。如下所示: + + ```bash + IPAddressAllow=需增加的NIS服务器的IP地址 + RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6 + ``` + + **场景2**:如果有文件中存在这两个字段,则在包含该字段的文件中追加配置。IPAddressAllow字段追加`NIS服务器的IP地址`,RestrictAddressFamilies字段追加`AF_UNIX AF_NETLINK AF_INET AF_INET6`。如下所示: + + ```bash + IPAddressAllow=原配置 需增加的NIS服务器的IP地址 + RestrictAddressFamilies=原配置 AF_UNIX AF_NETLINK AF_INET AF_INET6 + ``` + + **场景3**:如果有文件中只配置了其中一个字段,则在包含该字段的文件中追加配置,并将不存在的字段写入到/usr/lib/systemd/system/systemd-logind.service.d/systemd-logind-nis.conf中(参考场景1和场景2)。 + +2. 修改后需要在客户端重启systemd-logind.service服务。 + + ```bash + systemctl daemon-reload + systemctl restart systemd-logind.service + ``` diff --git a/docs/zh/faq/caselibrary/umask.md b/docs/zh/faq/caselibrary/umask.md new file mode 100644 index 0000000000000000000000000000000000000000..80f9f8db1a942da6fcc5fc7434999a5031dbfdf5 --- /dev/null +++ b/docs/zh/faq/caselibrary/umask.md @@ -0,0 +1,37 @@ +# docker配置容器umask值 + +## 问题背景 + +容器的umask配置成不同的值会影响到容器中新创建的文件和目录的权限,影响容器使用的安全性。 + +## 现象描述 + +正常openeuler容器启动,容器默认的umask值为0027,修改后others群组将无法访问新建文件或目录。 + +![image](./figures/docker配置umask值1.PNG) + +## 原因分析 + +为了容器使用安全性,避免容器受到攻击,修改runc的实现,将默认umask修改为0027,修改后others群组将无法访问新建文件或目录。 + +## 解决方案 + +方案一: +可以修改docker服务启动配置文件/etc/sysconfig/docker, 在OPTIONS行添加--exec-opt native.umask=normal参数,并重启dockerd服务。 + +```bash +systemctl restart docker +``` + +![image](./figures/docker配置umask值2.PNG) + +方案二: + +使用docker run/exec命令行时增加--annotation native.umask=normal参数。 + +```bash +docker run --annotation native.umask=normal XXX +docker exec --annotation native.umask=normal XXX +``` + +![image](./figures/docker配置umask值3.PNG) diff --git a/docs/zh/faq/caselibrary/zabbix.md b/docs/zh/faq/caselibrary/zabbix.md new file mode 100644 index 0000000000000000000000000000000000000000..805822bcae1815f1f53a0732fcae4c8da2839879 --- /dev/null +++ b/docs/zh/faq/caselibrary/zabbix.md @@ -0,0 +1,102 @@ +# 22.03 LTS 安装zabbix 教程 + +## openEuler 最小安装 + + 关闭防火墙 + + ```text + systemctl stop firewalld + systemctl disable firewalld + ``` + +## MYSQL服务安装配置 + +1. 安装mysql + + ```text + dnf install mysql mysql-server mysql-common mysql-libs mysql-devel mysql-selinux --nogpgcheck + ``` + +2. 启动mysql服务 + + ```text + systemctl enable mysqld + systemctl start mysqld + systemctl status mysqld + ``` + +3. 配置密码 + + ```mysql + mysql -uroot -p + > password 回车 + ALTER USER 'root'@'localhost' IDENTIFIED BY '密码'; + ``` + +## 安装ZABBIX服务 + + ```text + dnf config-manager --add-repo https://repo.oepkgs.net/openeuler/rpm/openEuler-22.03-LTS/contrib/others/aarch64/ + dnf clean all && dnf makecache + dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent --nogpgcheck + ``` + +## 配置和启动zabbix进程 + +1. 配置zabbix + + ```mysql + mysql -uroot -p + > password + create database zabbix character set utf8mb4 collate utf8mb4_bin; + create user zabbix@localhost identified by '密码'; + grant all privileges on zabbix.* to zabbix@localhost; + set global log_bin_trust_function_creators = 1; + quit; + ``` + +2. 初始化架构和数据 + + ```text + zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix + ``` + + Disable log_bin_trust_function_creators option after importing database schema. + + ```mysql + mysql -uroot -p + > password + set global log_bin_trust_function_creators = 0; + quit; + ``` + +3. 修改zabbix server配置数据库和PHP + + ```text + vi /etc/zabbix/zabbix_server.conf + --- + DBPassword=密码 + --- + vi /etc/nginx/conf.d/zabbix.conf + --- + listen 8080;#取消注释 + server_name example.com;#取消注释 + --- + ``` + +4. 升级net-snmp + + ```text + dnf install net-snmp net-snmp-devel net-snmp-utils --nogpgcheck + ``` + +5. 启动zabbix进程 + + ```text + systemctl restart zabbix-server zabbix-agent nginx php-fpm + systemctl enable zabbix-server zabbix-agent nginx php-fpm + ``` + +6. 访问zabbix首页 + + 默认端口是8080 diff --git a/docs/zh/faq/cloud/docker_faqs.md b/docs/zh/faq/cloud/docker_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..9d7aec5ac4aced1046df0f36127fb6f7ed14317b --- /dev/null +++ b/docs/zh/faq/cloud/docker_faqs.md @@ -0,0 +1,6 @@ +# Docker常见问题与解决方法 + +## **问题1:docker v18.09.9拉起的容器挂载点相比docker v19.03.0及以后的版本多一个** + +原因:18.09版本的docker,默认ipcmode为shareable,该配置会多挂载一个shmpath挂载点。 +解决方法:结合实际情况修改docker配置文件中的ipcmode选项为private,或者使用新版本的docker。 diff --git a/docs/zh/faq/cloud/figures/get_kubeconfig_error.png b/docs/zh/faq/cloud/figures/get_kubeconfig_error.png new file mode 100644 index 0000000000000000000000000000000000000000..99087b68c6fafea1506e5f8bd862c371e93bdc97 Binary files /dev/null and b/docs/zh/faq/cloud/figures/get_kubeconfig_error.png differ diff --git a/docs/zh/faq/cloud/figures/kmesh-arch.png b/docs/zh/faq/cloud/figures/kmesh-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..000ec80ff35556199caef6ce78953599c1c52312 Binary files /dev/null and b/docs/zh/faq/cloud/figures/kmesh-arch.png differ diff --git a/docs/zh/faq/cloud/figures/not_set_cluster_ip.png b/docs/zh/faq/cloud/figures/not_set_cluster_ip.png new file mode 100644 index 0000000000000000000000000000000000000000..9c879f37fa93c0f4fe0ab0f6220beff174e5f436 Binary files /dev/null and b/docs/zh/faq/cloud/figures/not_set_cluster_ip.png differ diff --git a/docs/zh/faq/cloud/isula_build_faqs.md b/docs/zh/faq/cloud/isula_build_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..efaf164fd34852e0d83051dad4f3f6d5f920aafa --- /dev/null +++ b/docs/zh/faq/cloud/isula_build_faqs.md @@ -0,0 +1,7 @@ +# isual-build常见问题与解决方法 + +## **问题1:isula-build拉取镜像报错:pinging container registry xx: get xx: dial tcp host:repo: connect: connection refused** + +原因:拉取的镜像来源于非授信仓库。 + +解决方法:修改isula-build镜像仓库的配置文件/etc/isula-build/registries.toml,将该非授信仓库加入[registries.insecure],重启isula-build。 diff --git a/docs/zh/faq/cloud/isula_faqs.md b/docs/zh/faq/cloud/isula_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..c3751ff6293a893d71e497916cd8bb62c02a9626 --- /dev/null +++ b/docs/zh/faq/cloud/isula_faqs.md @@ -0,0 +1,22 @@ +# iSulad常见问题与解决方法 + +## **问题1:修改`iSulad`默认运行时为`lxc`,启动容器报错:Failed to initialize engine or runtime** + +原因:`iSulad`默认运行时为`runc`,设置默认运行时为`lxc`时缺少依赖。 + +解决方法:若需修改`iSulad`默认运行时为`lxc`,需要安装`lcr`、`lxc`软件包依赖,且配置`iSulad`配置文件中`runtime`为`lcr` +或者启动容器时指定`--runtime lcr`。启动容器后不应该随意卸载`lcr`、`lxc`软件包,否则可能会导致删除容器时的资源残留。 + +## **问题2:使用`iSulad` `CRI V1`接口,报错:rpc error: code = Unimplemented desc =** + +原因:`iSulad`同时支持`CRI V1alpha2`和`CRI V1`接口,默认使用`CRI V1alpha2`,若使用`CRI V1`,需要开启相应的配置。 + +解决方法:在`iSulad`配置文件`/etc/isulad/daemon.json`中开启`CRI V1`的配置。 + +```json +{ + "enable-cri-v1": true, +} +``` + +若使用源码编译`iSulad`,还需在编译时增加`cmake`编译选项`-D ENABLE_CRI_API_V1=ON`。 diff --git a/docs/zh/faq/cloud/kmesh_faqs.md b/docs/zh/faq/cloud/kmesh_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..8e9e4c7f3137b7297a83cb1838ac38febcc95ffc --- /dev/null +++ b/docs/zh/faq/cloud/kmesh_faqs.md @@ -0,0 +1,23 @@ +# Kmesh常见问题与解决方法 + +## **问题1:在使用集群启动模式时,若没有配置控制面程序ip信息,Kmesh服务启动后会报错退出** + +![](./figures/not_set_cluster_ip.png) + +原因:集群启动模式下,Kmesh服务需要跟控制面程序通信,然后从控制面获取配置信息,因此需要设置正确的控制面程序ip信息。 + +解决方法:参考Kmesh安装与部署章节中集群启动模式,设置正确的控制面程序ip信息。 + +## **问题2:Kmesh服务在启动时,提示"get kube config error!"** + +![](./figures/get_kubeconfig_error.png) + +原因:集群启动模式下,Kmesh服务会根据k8s的配置,自动获取控制面程序ip信息,若环境中没有配置k8s的kubeconfig路径,会导致获取kubeconfig失败,然后提示上述信息。(若已经手动修改Kmesh的配置文件,正确配置控制面程序ip信息,该问题可忽略) + +解决方法:按如下方式配置kubeconfig: + +```shell +mkdir -p $HOME/.kube +sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config +sudo chown $(id -u):$(id -g) $HOME/.kube/config +``` diff --git a/docs/zh/faq/cloud/kubernetes_faqs.md b/docs/zh/faq/cloud/kubernetes_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..93e711ace96ed7dd19a283c7641d56cdd064ec20 --- /dev/null +++ b/docs/zh/faq/cloud/kubernetes_faqs.md @@ -0,0 +1,13 @@ +# Kubernetes常见问题与解决方法 + +## **问题1:Kubernetes + docker为什么无法部署** + +原因:Kubernetes自1.21版本开始不再支持Kubernetes + docker部署Kubernetes集群。 + +解决方法:改为使用cri-dockerd+docker部署集群,也可以使用containerd或者iSulad部署集群。 + +## **问题2:openEuler无法通过yum直接安装Kubernetes相关的rpm包** + +原因:Kubernetes相关的rpm包需要配置yum的repo源有关EPOL的部分。 + +解决方法:[参考链接](https://forum.openeuler.org/t/topic/768)中repo源,重新配置环境中的EPOL源。 diff --git a/docs/zh/faq/community_tools/dde_faqs.md b/docs/zh/faq/community_tools/dde_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..0b453c061595e5fe874ab9623da5be9acfd3f483 --- /dev/null +++ b/docs/zh/faq/community_tools/dde_faqs.md @@ -0,0 +1,19 @@ +# DDE常见问题与解决方法 + +## **问题1:安装DDE后,root帐户登录桌面无计算机和回收站图标** + +### 问题描述 + + 安装DDE后,root帐户登录桌面无计算机和回收站图标 + +![img](./figures/dde-1.png) + +### 问题原因 + + 由于root用户在安装DDE前已创建,而DDE在安装时不会对已经创建的用户进行新增桌面图标操作。DDE安装后新建用户无此问题。 + +### 解决方法 + + 用户可通过启动器中右键对应图标发送到桌面即可,无任何功能差异。 + + ![img](./figures/dde-2.png) diff --git a/docs/zh/faq/community_tools/deployment-guide-for-network-environment-faqs.md b/docs/zh/faq/community_tools/deployment-guide-for-network-environment-faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..6ce8069222d3ac34d2703fd778c15801d0273a24 --- /dev/null +++ b/docs/zh/faq/community_tools/deployment-guide-for-network-environment-faqs.md @@ -0,0 +1,144 @@ +# openEuler Copilot System常见问题与解决方法-网络环境下部署 + +## 问题1:huggingface 使用报错 + +```text +File "/usr/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn +raise NewConnectionError( +urllib3.exceptions.eanconectionError: : Failed to establish a new conmection: [Errno 101] Network is unreachable +``` + +- 解决办法 + +```bash +pip3 install -U huggingface_hub +export HF_ENDPOINT=https://hf-mirror.com +``` + +## 问题2:如何在 RAG 容器中调用获取问答结果的接口 + +- 请先进入到 RAG 对应 Pod + +```bash +curl -k -X POST "http://localhost:8005/kb/get_answer" -H "Content-Type: application/json" -d '{ \ + "question": "", \ + "kb_sn": "default_test", \ + "fetch_source": true }' +``` + +## 问题3:执行 `helm upgrade` 报错 + +```text +Error: INSTALLATI0N FAILED: Kubernetes cluster unreachable: Get "http:/localhost:880/version": dial tcp [:1:8089: connect: connection refused +``` + +或者 + +```text +Error: UPGRADE FAILED: Kubernetes cluster unreachable: the server could not find the requested resource +``` + +- 解决办法 + +```bash +export KUBECONFIG=/etc/rancher/k3s/k3s.yaml +``` + +## 问题4:无法查看 Pod 日志 + +```text +[root@localhost euler-copilot]# kubectl logs rag-deployservice65c75c48d8-44vcp-n euler-copilotDefaulted container "rag" out of: rag.rag-copy secret (init)Error from server: Get "https://172.21.31.11:10250/containerlogs/euler copilot/rag deploy"service 65c75c48d8-44vcp/rag": Forbidden +``` + +- 解决办法 + 如果设置了代理,需要将本机的网络 IP 从代理中剔除 + +```bash +cat /etc/systemd/system/k3s.service.env +http_proxy="http://172.21.60.51:3128" +https_proxy="http://172.21.60.51:3128" +no_proxy=172.21.31.10 # 代理中剔除本机IP +``` + +## 问题5:GPU环境部署大模型时出现无法流式回复 + +在服务执行 curl 大模型失败,但是将 `"stream": true` 改为 `"stream": false`就可以 curl 通? + +```bash +curl http://localhost:30000/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer sk-123456" -d '{ +"model": "qwen1.5", +"messages": [ +{ +"role": "system", +"content": "你是情感分析专家,你的任务是xxxx" +}, +{ +"role": "user", +"content": "你好" +} +], +"stream": true, +"n": 1, +"max_tokens": 32768 +}' +``` + +- 解决办法: + +```bash +pip install Pydantic=1.10.13 +``` + +## 问题6:如何部署sglang + +```bash +# 1. 激活 Conda 环境, 并激活 Python 3.10 的 Conda 环境。假设你的环境名为 `myenv`: +conda activate myenv + +# 2. 在激活的环境中,安装 sglang[all] 和 flashinfer +pip install sglang[all]==0.3.0 +pip install flashinfer -i https://flashinfer.ai/whl/cu121/torch2.4/ + +# 3. 启动服务器 +python -m sglang.launch_server --served-model-name Qwen2.5-32B --model-path Qwen2.5-32B-Instruct-AWQ --host 0.0.0.0 --port 8001 --api-key sk-12345 --mem-fraction-static 0.5 --tp 8 +``` + +- 验证安装 + +```bash +pip show sglang +pip show flashinfer +``` + +- 注意: + +1. API Key:请确保 `--api-key` 参数中的 API 密钥是正确的 +2. 模型路径: 确保 `--model-path` 参数中的路径是正确的,并且模型文件存在于该路径下。 +3. CUDA 版本:确保你的系统上安装了 CUDA 12.1 和 PyTorch 2.4,因为 `flashinfer` 包依赖于这些特定版本。 +4. 线程池大小:根据你的GPU资源和预期负载调整线程池大小。如果你有 8 个 GPU,那么可以选择 --tp 8 来充分利用这些资源。 + +## 问题7:如何 curl embedding + +```bash +curl -k -X POST http://$IP:8001/embedding \ + -H "Content-Type: application/json" \ + -d '{"texts": ["sample text 1", "sample text 2"]}' +# $IP为vectorize的Embedding的内网地址 +``` + +## 问题8:如何生成证书 + +```bash +下载地址: https://github.com/FiloSottile/mkcert/releases +# 1. 下载 mkcert +# x86_64 +wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64 +# arm64 +wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-arm64 +# 2. 执行下面的命令生成秘钥 +mkcert -install +# mkcert 可直接接域名或 IP, 生成证书和秘钥 +mkcert example.com +# 3. 将证书和秘钥拷贝到 `/home/euler-copilot-framework_openeuler/euler-copilot-helm/chart_ssl/traefik-secret.yaml` 中, 并执行下面命令使其生效。 +kubectl apply -f traefik-secret.yaml +``` diff --git a/docs/zh/faq/community_tools/deployment-guide-for-offline-environment-faqs.md b/docs/zh/faq/community_tools/deployment-guide-for-offline-environment-faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..5460f436b04667a1d674cfb71d1eb73a939c5aac --- /dev/null +++ b/docs/zh/faq/community_tools/deployment-guide-for-offline-environment-faqs.md @@ -0,0 +1,152 @@ +# openEuler Copilot System常见问题与解决方法-无网络环境下部署 + +## 问题1:huggingface 使用报错 + +```text +File "/usr/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn +raise NewConnectionError( +urllib3.exceptions.eanconectionError: : Failed to establish a new conmection: [Errno 101] Network is unreachable +``` + +- 解决办法 + +```bash +pip3 install -U huggingface_hub +``` + +```bash +export HF_ENDPOINT=https://hf-mirror.com +``` + +## 问题2:如何在 RAG 容器中调用获取问答结果的接口 + +- 请先进入到 RAG 对应 Pod + +```bash +curl -k -X POST "http://localhost:8005/kb/get_answer" -H "Content-Type: application/json" -d '{ \ + "question": "", \ + "kb_sn": "default_test", \ + "fetch_source": true }' +``` + +## 问题3:执行 `helm upgrade` 报错 + +```text +Error: INSTALLATI0N FAILED: Kubernetes cluster unreachable: Get "http:/localhost:880/version": dial tcp [:1:8089: connect: connection refused +``` + +或者 + +```text +Error: UPGRADE FAILED: Kubernetes cluster unreachable: the server could not find the requested resource +``` + +- 解决办法 + +```bash +export KUBECONFIG=/etc/rancher/k3s/k3s.yaml +``` + +## 问题4:无法查看 Pod 日志 + +```text +[root@localhost euler-copilot]# kubectl logs rag-deployservice65c75c48d8-44vcp-n euler-copilotDefaulted container "rag" out of: rag.rag-copy secret (init)Error from server: Get "https://172.21.31.11:10250/containerlogs/euler copilot/rag deploy"service 65c75c48d8-44vcp/rag": Forbidden +``` + +- 解决办法 + 如果设置了代理,需要将本机的网络 IP 从代理中剔除 + +```bash +cat /etc/systemd/system/k3s.service.env +``` + +```text +http_proxy="http://172.21.60.51:3128" +https_proxy="http://172.21.60.51:3128" +no_proxy=172.21.31.10 # 代理中剔除本机IP +``` + +## 问题5:GPU环境部署大模型时出现无法流式回复 + +在服务执行 curl 大模型失败,但是将 `"stream": true` 改为 `"stream": false`就可以 curl 通? + +```bash +curl http://localhost:30000/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer sk-123456" -d '{ +"model": "qwen1.5", +"messages": [ +{ +"role": "system", +"content": "你是情感分析专家,你的任务是xxxx" +}, +{ +"role": "user", +"content": "你好" +} +], +"stream": true, +"n": 1, +"max_tokens": 32768 +}' +``` + +- 解决办法: + +```bash +pip install Pydantic=1.10.13 +``` + +## 问题6:如何部署sglang + +```bash +# 1. 激活 Conda 环境, 并激活 Python 3.10 的 Conda 环境。假设你的环境名为 `myenv`: +conda activate myenv + +# 2. 在激活的环境中,安装 sglang[all] 和 flashinfer +pip install sglang[all]==0.3.0 +pip install flashinfer -i https://flashinfer.ai/whl/cu121/torch2.4/ + +# 3. 启动服务器 +python -m sglang.launch_server --served-model-name Qwen2.5-32B --model-path Qwen2.5-32B-Instruct-AWQ --host 0.0.0.0 --port 8001 --api-key sk-12345 --mem-fraction-static 0.5 --tp 8 +``` + +- 验证安装 + +```bash +pip show sglang +pip show flashinfer +``` + +- 注意: + +1. API Key:请确保 `--api-key` 参数中的 API 密钥是正确的 +2. 模型路径: 确保 `--model-path` 参数中的路径是正确的,并且模型文件存在于该路径下。 +3. CUDA 版本:确保你的系统上安装了 CUDA 12.1 和 PyTorch 2.4,因为 `flashinfer` 包依赖于这些特定版本。 +4. 线程池大小:根据你的GPU资源和预期负载调整线程池大小。如果你有 8 个 GPU,那么可以选择 --tp 8 来充分利用这些资源。 + +## 问题7:如何 curl embedding + +```bash +curl -k -X POST http://$IP:8001/embedding \ + -H "Content-Type: application/json" \ + -d '{"texts": ["sample text 1", "sample text 2"]}' +# $IP为vectorize的Embedding的内网地址 +``` + +## 问题8:如何生成证书 + +```bash +下载地址: https://github.com/FiloSottile/mkcert/releases +# 1. 下载 mkcert +# x86_64 +wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64 +# arm64 +wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-arm64 + +# 2. 执行下面的命令生成秘钥 +mkcert -install +# mkcert 可直接接域名或 IP, 生成证书和秘钥 +mkcert example.com + +# 3. 将证书和秘钥拷贝到 /home/euler-copilot-framework_openeuler/euler-copilot-helm/chart_ssl/traefik-secret.yaml 中, 并执行下面命令使其生效。 +kubectl apply -f traefik-secret.yaml +``` diff --git a/docs/zh/faq/community_tools/figures/dde-1.png b/docs/zh/faq/community_tools/figures/dde-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fb1d5177c39262ed182f10a57fdae850d007eeb1 Binary files /dev/null and b/docs/zh/faq/community_tools/figures/dde-1.png differ diff --git a/docs/zh/faq/community_tools/figures/dde-2.png b/docs/zh/faq/community_tools/figures/dde-2.png new file mode 100644 index 0000000000000000000000000000000000000000..be5d296937bd17b9646b32c80934aa76738027af Binary files /dev/null and b/docs/zh/faq/community_tools/figures/dde-2.png differ diff --git a/docs/zh/faq/community_tools/figures/lack_pack.png b/docs/zh/faq/community_tools/figures/lack_pack.png new file mode 100644 index 0000000000000000000000000000000000000000..a4b7f1da15da70f63a86aae360e89017c2b98f2d Binary files /dev/null and b/docs/zh/faq/community_tools/figures/lack_pack.png differ diff --git a/docs/zh/faq/community_tools/isocut_faqs.md b/docs/zh/faq/community_tools/isocut_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..ad2aa3accc3155813e2425b83570a0727d65c1a7 --- /dev/null +++ b/docs/zh/faq/community_tools/isocut_faqs.md @@ -0,0 +1,46 @@ +# isocut常见问题与解决方法 + +## **问题1:默认 rpm 包列表安装系统失败** + +### 背景描述 + +用户使用 isocut 裁剪镜像时通过配置文件 /etc/isocut/rpmlist 指定需要安装的软件包。 + +由于不同版本会有软件包减少,可能导致裁剪镜像时出现缺包等问题。 +因此 /etc/isocut/rpmlist 中默认只包含 kernel 软件包。 +保证默认配置裁剪镜像必定成功。 + +### 问题描述 + +使用默认配置裁剪出来的 iso 镜像,能够裁剪成功,但是安装可能失败。 + +安装报错缺包,报错截图如下: + +![](./figures/lack_pack.png) + +### 原因分析 + +使用默认配置的 RPM 软件包列表,裁剪的 iso 镜像在安装时缺少必要的 RPM 包。 +缺少的包如报错的图示,并且在不同版本中,缺少的 RPM 包也可能是不同的,以安装时实际报错为准。 + +### 解决方案 + +1. 增加缺少的包 + + 1. 根据报错的提示整理缺少的 RPM 包列表 + 2. 将上述 RPM 包列表添加到配置文件 /etc/isocut/rpmlist 中。 + 3. 再次裁剪安装 iso 镜像 + + 以问题描述中的缺包情况为例,修改 rpmlist 配置文件如下: + + ```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/zh/faq/community_tools/patch_tracking_faqs.md b/docs/zh/faq/community_tools/patch_tracking_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..f92f09d93d1f25a957eeef6894eebe1ef03fd614 --- /dev/null +++ b/docs/zh/faq/community_tools/patch_tracking_faqs.md @@ -0,0 +1,19 @@ +# patch-tracking常见问题与解决方法 + +## **问题1:访问 api.github.com Connection refused 异常** + +## 问题描述 + +patch-tracking 运行过程中,可能会出现如下报错: + +```sh + 9月 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')) +``` + +## 原因分析 + +以上问题是 patch-tracking 与 GitHub API 服务之间网络访问不稳定导致。 + +## 解决方法 + +请确保在与 GitHub API 服务之间网络稳定的环境中(如使用[华为云ECS弹性云服务器](https://console.huaweicloud.com/))运行 patch-tracking。 diff --git a/docs/zh/faq/community_tools/xfce_faq.md b/docs/zh/faq/community_tools/xfce_faq.md new file mode 100644 index 0000000000000000000000000000000000000000..dbe92b5837917a996af96f92bea51f3c42451fbb --- /dev/null +++ b/docs/zh/faq/community_tools/xfce_faq.md @@ -0,0 +1,8 @@ +# xfce常见问题与解决方法 + +## **问题1:lightdm登录界面背景是黑色的** + +原因: 登录界面是黑色的是因为lightdm-gtk默认配置文件/etc/lightdm/lightdm-gtk-greeter.conf中没有设置background。 + +解决方法:可以在该配置文件最后的[greeter]段中设置 background=/usr/share/backgrounds/xfce/xfce-blue.jpg +然后使用“systemctl restart lightdm”命令就可以看到背景了。 diff --git a/docs/zh/faq/general/general_faq.md b/docs/zh/faq/general/general_faq.md new file mode 100644 index 0000000000000000000000000000000000000000..b5399fb1fa8f11534538f176093c4629d1f66fc3 --- /dev/null +++ b/docs/zh/faq/general/general_faq.md @@ -0,0 +1,79 @@ +# 社区通用问题 + +## openEuler 是什么? + +OpenAtom openEuler(简称“openEuler”)是开放原子开源基金会孵化及运营的开源项目。 +它是一个面向数字基础设施的开源操作系统,支持服务器、云计算、边缘计算、嵌入式等应用场景,支持多样性计算,致力于提供安全、稳定、易用的操作系统。通过为应用提供确定性保障能力,支持 OT 领域应用及 OT 与 ICT 的融合。 + +## openEuler社区是怎么样的? + +2019 年 12 月 31 日,面向多样性计算的操作系统开源社区openEuler正式成立。 +openEuler社区致力于与全球的开发者共同构建一个开放、多元和架构包容的软件生态体系,孵化支持多种处理器架构、覆盖数字基础设施全场景,推动企业数字基础设施软硬件、应用生态繁荣发展。openEuler社区和上下游生态紧密连接,构建多样性的社区合作伙伴和协作模式,共同推进版本演进。 + +## openEuler支持哪些架构? + +openEuler社区当前已与多个设备厂商建立丰富的生态,包括Intel、AMD、兆芯、海光、鲲鹏、飞鹏、龙芯、申威等主流芯片厂商,支持x86、Arm、SW64、RISC-V、LoongArch等多种处理器架构,逐步扩展PowerPC 等更多芯片架构;支持多款CPU芯片,包括龙芯3号、兆芯开先和开胜系列、Intel Sierra Forest和Granite Rapids、AMD EPYC Milan和Genoa等芯片系列;支持多个硬件厂商发布的多款整机型号、板卡型号,支持网卡、RAID、FC、GPU&AI、DPU、SSD、安全卡七种类型的板卡,具备良好的兼容性。 + +## openEuler多久发布一次新版本? + +openEuler发布两种社区版本,包括长期支持版本(即“LTS版本”)和创新版本。 +LTS版本每两年发布一版,提供四年社区支持,包括两年的维护支持和两年的延长支持。LTS版本为企业级用户提供一个安全稳定可靠的操作系统。 +创新版每六个月发布一版,提供六个月社区支持。创新版本快速集成openEuler的最新技术成果,将验证成熟的特性逐步回合到发行版中。这些新特性以单个开源项目的方式存在于社区,方便开发者获得源代码,也方便用户使用。 +在单个版本生命周期结束前,用户会提前三个月在社区[邮件列表](https://www.openeuler.org/zh/community/mailing-list/)中收到公告等通知。 + +## openEuler有哪些SIG组?要如何加入? + +目前openEuler社区共有超100个SIG组(special interest group),分别针对特定的技术主题或项目成立。每个SIG在Gitee上都会拥有一个或多个项目,这些项目会拥有一个或多个仓库,SIG的交付成果会保存在这些仓库内。SIG成员可以在仓库内提交Issue、解决问题、参与评审等,推动交付成果成为openEuler社区发行的一部分。 +openEuler的SIG分为代码仓管理和社区运营治理两种类型,致力于推动工具链、架构、桌面、通用中间件、云原生基础设施等领域的技术创新,覆盖了AI、嵌入式、安全和合规等热门主题,助力openEuler社区生态构建。 +您可以通过订阅SIG邮件、参加公开例会或直接联系SIG maintainer,加入心仪的SIG。SIG全景图请见[SIG中心]( https://www.openeuler.org/zh/sig/sig-list/)。 +如果现有的SIG中没有您感兴趣的,您可以在openEuler社区中寻找两到三个具有共同目标的人讨论决定成立SIG组,维护社区中的某个技术方向的软件包或发起孵化项目。具体如何成立SIG,请见[申请流程](https://www.openeuler.org/zh/sig/sig-guidance/)。 + +## 如何贡献openEuler社区? + +openEuler社区欢迎代码类贡献和非代码类贡献。您可以按照以下步骤进行社区贡献: + +1. 在参与社区贡献之前,您需要根据自身身份(个人、员工、或企业),签署对应的[贡献者许可协议](https://clasign.osinfra.cn/sign/gitee_openeuler-1611298811283968340),即“CLA协议”。 + +2. 在[SIG中心](https://www.openeuler.org/zh/sig/sig-list/),找到您感兴趣的SIG并加入。如果您对某个方向有浓厚的兴趣,且未找到对应的SIG组,那么您可以参考[SIG组申请流程]( https://www.openeuler.org/zh/sig/sig-guidance/)来申请创建新的SIG进行维护和发展。 + +3. 贡献原创开源项目、进行代码类贡献和非代码类贡献。openEuler社区有两类代码仓库,包括存放源码类项目的[代码仓](https://gitee.com/openeuler)和存放制作发布件所需的[软件包仓](https://gitee.com/src-openeuler)。 + + - 可以直接在代码仓中创建原创项目,或者将您在其他社区开发的软件包加入到软件包仓。具体操作,请参考[新增代码包](https://gitee.com/openeuler/community/blob/master/zh/contributors/create-package.md)。 + - 可以使用Gitee、GitHub或邮箱账号登录官网的[QuickIssue](https://quickissue.openeuler.org/zh/issues/)页面,快速提交issue。 + - 如果您对非代码贡献感兴趣,也可以在[非代码贡献指南](https://gitee.com/openeuler/community/blob/master/zh/contributors/non-code-contributions.md)中找到合适的项目。 + +4. 参加社区活动:openEuler社区举办多种线上线下活动,包括主题峰会、社媒直播、meetup、SIG活动等,期待您的加入。 + +想要了解更多openEuler社区贡献途径,请访问[贡献攻略]( https://www.openeuler.org/zh/community/contribution/detail.html)。 + +## 从哪些渠道可以获取openEuler的最新资讯?可以在哪些平台和其他openEuler用户交流? + +您可以通过以下方式获取openEuler的最新资讯和进行互动交流: + +- 官方网站:通过浏览openEuler官方网站,获取文档、白皮书和用户案例等相关信息。 +- 课程中心:探索我们的[在线课程](https://www.openeuler.org/zh/learn/mooc/),深入了解openEuler的技术细节。 +- 社交媒体:关注我们的社交媒体账号,如openEuler微信公众号、B站、头条号等,获取开源行业和操作系统行业相关的最新事件、合作关系以及技术解决方案的最新资讯。 +- 邮件列表:订阅我们的[邮件列表](https://www.openeuler.org/zh/community/mailing-list/),获取openEuler各个SIG的最新动态。 +- 官方论坛:访问[openEuler论坛](https://forum.openeuler.org/)或通过添加openEuler小助手(微信号:openeuler123)微信好友加入社区交流群,进行提问和参与讨论。 + +openEuler社区欢迎您的加入,期待您能在社区中提升技能、结交朋友! + +## openEuler社区有哪些合作伙伴?应用于哪些行业? + +openEuler目前已广泛应用于各行各业,包括政务、金融、运营商、互联网、电力、制造业、能源、教育、交通和医疗等行业。 +openEuler 希望与广大生态伙伴、用户、开发者一起,通过联合创新、社区共建,不断增强场景化能力,最终实现统一操作系统支持多设备,应用一次开发覆盖全场景。 + +## openEuler操作系统噪声是指什么? + +操作系统噪声是指业务运行中执行的非应用计算任务,包括: + +- 系统/用户态守护进程。 +- 中断处理。 +- 用户态或内核中驻留的进程。 +- 内存管理、调度开销。 +- 业务应用中的非计算任务,如监控 log 线程通信等。 +- 资源竞争带来的噪声,如由共享高速缓存导致的高速缓存不命中 (Cache Miss), 以及由共享物理内存导致的页面错误 (Page Fault)。 + +## openEuler常用repo源 + +为了方便大家快速找到openEuler所需版本的repo源,现将openEuler各版本的repo源进行了整理并归类,详情可查看: diff --git a/docs/zh/faq/general/project_intro_faq.md b/docs/zh/faq/general/project_intro_faq.md new file mode 100644 index 0000000000000000000000000000000000000000..541e360c4d6aae7b865d8f9adeb68fb64b561dec --- /dev/null +++ b/docs/zh/faq/general/project_intro_faq.md @@ -0,0 +1,48 @@ +# 特性通用问题 + +## openEuler的WSL应用场景有? + +- 在 Windows 中快速部署和体验 openEuler LTS 版本。 +- 利用 vs code 和 openEuler WSL 打造流畅跨平台开发体验。 +- 在 openEuler WSL 中搭建 K8S 集群。 +- 用你喜爱的 openEuler command-line 程序或脚本处理 Windows 或 WSL 中的文件和程序。 + +## openEuler中的HMDFS是什么 ? + +HMDFS 是从 OH 社区迁移而来的在软总线生态之上的一个分布式文件系统,其在分布式软总线动态组网的基础上,为网络上各个设备结点提供一个全局一致的访问视图,支持开发者通过基础文件系统接口进行读写访问,具有高性能、低延时等优点。 + +## openEuler中的SysCare软件是什么? + +SysCare 是一个系统级热修复软件,为操作系统提供安全补丁和系统错误热修复能力,主机无需重新启动即可修复该系统问题。SysCare 将内核态热补丁技术与用户态热补丁技术进行融合统一,用户仅需聚焦在自己核心业务中,系统修复问题交予 SysCare 进行处理。后期计划根据修复组件的不同,提供系统热升级技术,进一步解放运维用户提升运维效率。 + +## 什么是A-Ops? + +A-Ops 是一款基于操作系统维度的故障运维平台,提供从数据采集、健康巡检、故障诊断、故障修复到智能运维解决方案。A-Ops 项目包括了若干子项目:覆盖故障发现(Gala)、故障定位支撑(X-diagnosis)、缺陷修复(Apollo) 等。 + +## secGear 主要提供哪三大能力? + +- 架构兼容:屏蔽不同 SDK 接口差异,提供统一开发接口,实现不同架构共源码。 +- 易开发:提供开发工具、通用安全组件等,帮助用户聚焦业务,开发效率显著提升。 +- 高性能:提供零切换特性,在 REE-TEE 频繁交互、大数据交互等典型场景下提升 REE-TEE 交互性能 10 倍 +。 + +## AI for OS 安全主要有哪些技术? + +- 漏洞挖掘:自动化漏洞挖掘是当前操作系统安全研究的热点,无论是基于代码分析的,还是模糊测试的,亦或两者结合的漏洞挖掘技术,都可以有效地识别出当前系统中存在的缺陷。传统的模糊测试工具在种子生成、选择、变异、测试、评估、反馈等多个环节都存在一定的盲目性和随机性,代码分析技术,无论是源码级,还是二进制级或者特定拓展成 DSL(Domain- Specific Language) 的 IR(Intermediate Representation) 级,都十分依赖基于专家经验构建的缺陷模式库。结合人工智能技术,可以很好地挖掘缺陷代码数据集中的模式信息,从而指导模糊测试和代码分析技术的各个过程,有效地提升识别精度和效率。 + +- 入侵检测:以 APT 威胁为代表的现代安全问题持续出现且变幻莫测,攻击组织会使用一整套大型的攻击武器库,对目标系统进行自动化、持续的攻击尝试和自反馈,并且基于固定模式的安全防御技术难以抵御未知的威胁。因此,我们需要结合人工智能技术,自动化深度挖掘其中的关键特征,支持多种高维数据的联合特征提取。这在当前大数据时代是必须具备的能力,但是对于个人来说却又是困难的。另外,结合人工智能技术可以更有效地识别出系统中的异常行为或者状态,从而更准确、更及时地进行攻击阻断。比如,在异常流量检测、侧信道攻击检测领域中,通过结合人工智能技术的入侵检测技术,都取得了很好的效果。 + +## openEuler 提供的多级调度框架有什么优势? + +openEuler 提供了多级调度框架,实现多种调度模型共存,业务可根据需要进行调度模型的选择。 + +- 相比于传统的进程/线程调度模型更为灵活,可移植性更好。 +- 新增的协程等轻量级调度模型切换更快,调度时间占比更小。 + +## 根据openEuler操作系统安全机制的作用范围,可将这些安全机制分为哪三种类型? + +真实性保护、完整性保护和机密性保护三种类型。 + +## 工业安全领域openEuler系统运用的安全隔离技术主要有哪两种范式? + +- 隔离已知来源但可能存在漏洞的服务,以削减其受到攻击后对系统其他组成部分造成的危害。 +- 限制不受信任来源的代码(可能是恶意代码或存在漏洞的组件)可能对系统其他组成部分造成的危害。 diff --git a/docs/zh/faq/server/administration_faqs.md b/docs/zh/faq/server/administration_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..433d2a1a2166f83858aa923927e88ae313d47a23 --- /dev/null +++ b/docs/zh/faq/server/administration_faqs.md @@ -0,0 +1,391 @@ +# 系统管理常见问题与解决方法 + +## **问题1:使用systemctl和top命令查询libvirtd服务占用内存不同** + +### 问题描述 + +使用systemctl和systemd-cgtop命令查询libvirtd服务占用内存超1.5G,而使用top命令查询libvirtd服务占用内存仅70M左右。 + +### 原因分析 + +systemd管理的服务(包括systemctl和systemd-cgtop)中显示的内存通过查询CGroup对应的memory.usage\_in\_bytes得到。top是直接统计/proc下内存相关信息计算得出。两者的统计方法不同,不能直接比较。 + +一般来说,业务进程使用的内存主要有以下几种情况: + +- anon\_rss:用户空间的匿名映射页(Anonymous pages in User Mode address spaces),比如调用malloc分配的内存,以及使用MAP\_ANONYMOUS的mmap。当系统内存不够时,内核可以将这部分内存交换出去。 +- file\_rss:用户空间的文件映射页(Mapped pages in User Mode address spaces),包含map file和map tmpfs,前者比如指定文件的mmap,后者比如IPC共享内存。当系统内存不够时,内核可以回收这些页,但回收之前可能需要与文件同步数据。 +- file\_cache:文件缓存(page in page cache of disk file),普通读写(read/write)文件时产生的文件缓存。当系统内存不够时,内核可以回收这些页,但回收之前可能需要与文件同步数据。 +- buffer pages:属于page cache,比如读取块设备文件时的相关缓存。 + +其中anon\_rss和file\_rss属于进程的RSS,file\_cache和buffer pages属于page cache。简单来说: + +top里的RSS = anon\_rss + file\_rss,SHR = file\_rss。 + +CGroup里的memory.usage\_in\_bytes = cache + RSS + swap。 + +由上可知,syestemd相关命令和top命令的内存占用率含义不同,所以查询结果不同。 + +## **问题2:设置RAID0卷,参数stripsize设置为4时出错** + +### 问题现象 + +设置RAID0卷,参数stripsize设置为4时出错。 + +### 原因分析 + +64K页表开启只能支持64K场景。 + +### 解决方法 + +不需要修改配置文件,openEuler执行lvcreate命令时,条带化规格支持的stripesize最小值为64KB,将参数stripesize设置为64。 + +## **问题3:使用rpmbuild编译mariadb失败** + +### 问题描述 + +如果使用root帐号登录系统,并在该帐号下使用rpmbuild命令编译mariadb源代码,会出现编译失败现象,提示: + +```shell +# echo 'mysql can'\''t run test as root' +mysql can't run test as root +# exit 1 +``` + +### 原因分析 + +mariadb数据库不允许使用root权限的帐号进行测试用例执行,所以会阻止编译过程(编译过程中会自动执行测试用例)。 + +### 解决方案 + +使用vi等文本编辑工具,修改mariadb.spec文件中runtest变量的值。 + +修改前: + +```text +%global runtest 1 +``` + +修改后: + +```text +%global runtest 0 +``` + +该修改关闭了编译阶段执行测试用例的功能,但不会影响编译和编译后的RPM包内容。 + +## **问题4:使用默认配置启动SNTP服务失败** + +### 问题现象 + +默认配置情况下SNTP服务启动失败。 + +### 原因分析 + +默认配置中未添加授时服务器域名。 + +### 解决方案 + +修改/etc/sysconfig/sntp文件 ,在文件中添加中国NTP快速授时服务器域名:0.generic.pool.ntp.org。 + +## **问题5:安装时出现软件包冲突、文件冲突或缺少软件包导致安装失败** + +### 问题现象 + +安装软件包过程中,可能出现软件包冲突、文件冲突或缺少软件包,从而导致升安装被中断,最终安装失败。软件包冲突、文件冲突和缺少软件包的报错信息分别如下所示。 + +软件包冲突报错信息示例(以 libev-libevent-devel-4.24-11.oe1.aarch64与libevent-devel-2.1.11-2.oe1.aarch64冲突为例): + +```text +package libev-libevent-devel-4.24-11.oe1.aarch64 conflicts with libevent-devel provided by libevent-devel-2.1.11-2.oe1.aarch64 + - cannot install the best candidate for the job + - conflicting requests +``` + +文件冲突报错信息示例(以/usr/bin/containerd文件冲突为例): + +```text +Error: Transaction test error: + file /usr/bin/containerd from install of containerd-1.2.0-101.oe1.aarch64 conflicts with file from package docker-engine-18.09.0-100.aarch64 + file /usr/bin/containerd-shim from install of containerd-1.2.0-101.oe1.aarch64 conflicts with file from package docker-engine-18.09.0-100.aarch64 +``` + +缺少软件包的报错信息示例(以缺失blivet-data软件包为例): + +```text +Error: + Problem: cannot install both blivet-data-1:3.1.1-6.oe1.noarch and blivet-data-1:3.1.1-5.noarch + - package python2-blivet-1:3.1.1-5.noarch requires blivet-data = 1:3.1.1-5, but none of the providers can be installed + - cannot install the best update candidate for package blivet-data-1:3.1.1-5.noarch + - problem with installed package python2-blivet-1:3.1.1-5.noarch(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages) +``` + +### 原因分析 + +- openEuler提供的软件包中,有些软件包虽然名称不同,但功能相同,导致两个软件包无法同时安装。 +- openEuler提供的软件包中,有些软件包虽然名称不同,但功能相同,导致安装时安装后的文件相同,从而产生了文件冲突。 +- 有些软件包,因在升级安装前被其他软件包所依赖,一旦该软件包升级后,可能导致依赖它的软件包因缺少软件包而不能安装。 + +### 解决方案 + +若为软件包冲突,则按如下步骤进行处理(以问题现象中示例的软件包冲突为例): + +1. 根据安装过程中的软件包冲突报错信息,确定与待安装的 libev-libevent-devel-4.24-11.oe1.aarch64软件包冲突的软件包为libevent-devel-2.1.11-2.oe1.aarch64。 +2. 执行**dnf remove**命令将与待安装软件包冲突的软件包单独卸载。 + + ```shell + # dnf remove libevent-devel-2.1.11-2.oe1.aarch64 + ``` + +3. 重新进行安装操作。 + +若为文件冲突,则按如下步骤进行处理(以问题现象中示例的文件冲突为例): + +1. 根据安装过程中的文件冲突报错信息,确定导致文件冲突的软件包名称为containerd-1.2.0-101.oe1.aarch64和docker-engine-18.09.0-100.aarch64。 +2. 将不需要安装的软件包名称记录下来,以不需要安装docker-engine-18.09.0-100.aarch64为例。 +3. 执行**dnf remove**命令将不需要安装的软件包单独卸载。 + + ```shell + # dnf remove docker-engine-18.09.0-100.aarch64 + ``` + +4. 重新进行安装操作。 + +若为缺少软件包,则按如下步骤进行处理(以问题现象中示例的缺少软件包为例): + +1. 根据升级安装过程中的缺少软件包报错信息,确定待升级的软件包名称blivet-data-1:3.1.1-5.noarch及依赖它的软件包名称python2-blivet-1:3.1.1-5.noarch。 +2. 执行dnf remove命令将依赖待升级包才能安装的软件包单独卸载或在升级软件包时加上\-\-allowerasing参数。 + - 执行**dnf remove**命令将依赖blivet-data-1:3.1.1-5.noarch软件包才能安装的软件包单独卸载。 + + ```shell + # dnf remove python2-blivet-1:3.1.1-5.noarch + ``` + + - 升级软件包时加上\-\-allowerasing参数。 + + ```shell + # yum update blivet-data-1:3.1.1-5.noarch -y --allowerasing + ``` + +3. 重新进行升级操作。 + +### 安装冲突实例 + +- 文件冲突 + + python3-edk2-devel.noarch 与 build.noarch 因文件名重复存在冲突。 + + ```shell + # yum install python3-edk2-devel.noarch build.noarch + ... + Error: Transaction test error: + file /usr/bin/build conflicts between attempted installs of python3-edk2-devel-202002-3.oe1.noarch and build-20191114-324.4.oe1.noarch + ``` + +## **问题6:libiscsi降级失败** + +### 问题现象 + +libiscsi-1.19.0-4 版本及以上降级到 libiscsi-1.19.0-3 及以下版本时失败。 + +```text +Error: +Problem: problem with installed package libiscsi-utils-1.19.0-4.oe1.x86_64 +- package libiscsi-utils-1.19.0-4.oe1.x86_64 requires libiscsi(x86-64) = 1.19.0-4.oe1, but none of the providers can be installed +- cannot install both libiscsi-1.19.0-3.oe1.x86_64 and libiscsi-1.19.0-4.oe1.x86_64 +- cannot install both libiscsi-1.19.0-4.oe1.x86_64 and libiscsi-1.19.0-3.oe1.x86_64 +- conflicting requests +(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages) +``` + +### 原因分析 + +libiscsi-1.19.0-3 之前的版本把 iscsi-xxx 等二进制文件打包进了主包 libiscsi,而这些二进制文件引入了不合理的依赖 CUnit, 为了解决这种不合理的依赖,在 libiscsi-1.19.0-4 版本把这些二进制文件单独拆分出来一个子包 libiscsi-utils,主包弱依赖于子包,产品可以根据自己的需求在做镜像时是否集成该子包;不集成或卸载子包不会影响 libiscsi 主包的功能。 +如果系统中安装了 libiscsi-utils 子包,libiscsi-1.19.0-4 及以上版本降级到 libiscsi-1.19.0-3 及以下版本时,由于 libiscsi-1.19.0-3 及以下版本无法提供对应的 libiscsi-utils,因此 libiscsi-utils 不会降级,但 libiscsi-utils 依赖于降级前的 libiscsi 主包,导致依赖问题无法解决,最终导致降级失败。 + +### 解决方案 + +执行以下命令,卸载 libiscsi-utils 子包,卸载成功后再进行降级操作。 + +```text +yum remove libiscsi-utils +``` + +## **问题7:xfsprogs降级失败** + +### 问题现象 + +xfsprogs-5.6.0-2 及以上版本降级到 xfsprogs-5.6.0-1 及以下版本时失败。 + +```text +Error: +Problem: problem with installed package xfsprogs-xfs_scrub-5.6.0-2.oe1.x86_64 +- package xfsprogs-xfs_scrub-5.6.0-2.oe1.x86_64 requires xfsprogs = 5.6.0-2.oe1, but none of the providers can be installed +- cannot install both xfsprogs-5.6.0-1.oe1.x86_64 and xfsprogs-5.6.0-2.oe1.x86_64 +- cannot install both xfsprogs-5.6.0-2.oe1.x86_64 and xfsprogs-5.6.0-1.oe1.x86_64 +- conflicting requests +``` + +### 原因分析 + +在 xfsprogs-5.6.0-2 版本中,为了减少 xfsprogs 主包的不合理依赖,同时将实验性质的命令从主包中分来,我们将 xfs_scrub* 命令拆分到单独的 xfsprogs-xfs_scrub 子包中。而 xfsprogs 主包弱依赖于 xfsprogs-xfs_scrub 子包,所以产品可以根据自己的需求在做镜像时是否集成该子包,或者是否卸载该子包。不集成或卸载该子包不会影响 xfsprogs 主包功能。 + +如果系统中安装了 xfsprogs-xfs_scrub 子包,从 xfsprogs-5.6.0-2 及以上版本降级到 xfsprogs-5.6.0-1 及以下版本时,由于 xfsprogs-5.6.0-1 及以下版本无法提供对应的 xfsprogs-xfs_scrub,因此 xfsprogs-xfs_scrub 不会降级,但 xfsprogs-xfs_scrub 依赖于降级前的 xfsprogs 主包,导致依赖问题无法解决,最终导致降级失败。 + +### 解决方案 + +执行以下命令,卸载 xfsprogs-xfs_scrub 子包,卸载成功后再进行降级操作。 + +```shell +# yum remove xfsprogs-xfs_scrub +``` + +## **问题8:elfutils降级失败** + +### 问题现象 + +elfutils降级缺少依赖,导致无法降级。 + +![](figures/1665628542704.png) + +### 原因分析 + +22.03-LTS、22.03-LTS-Next分支:elfutils-0.185-12 + +master分支:elfutils-0.187-7 + +20.03-LTS-SP1分支:elfutils-0.180-9 + +如上版本,elfutils主包提供的eu-objdump、eu-readelf、eu-nm命令拆分到elfutils-extra子包中。当系统已安装elfutils-extra,且elfutils进行降级时,由于低版本(如上分支版本)无法提供对应的elfutils-extra包,因此elfutils-extra子包不会降级(elfutils-extra依赖于降级前的elfutils包),导致依赖问题无法解决,最终elfutils降级失败。 + +### 解决方案 + +执行以下命令,先卸载elfutils-extra包,再进行降级操作。 + +```shell +# yum remove -y elfutils-extra +``` + +## **问题9:cpython/Lib发现CVE-2019-9674:Zip炸弹漏洞** + +### 问题现象 + +Python 3.7.2 及以下版本中的 Lib/zipfile.py 允许远程攻击者通过 zip 炸弹制造拒绝服务请求,从而导致资源消耗过大。 + +### 原因分析 + +远程攻击者通过 zip 炸弹导致拒绝服务,影响目标系统业务甚至达到使系统崩溃的结果。zip 炸弹就是一个高压缩比的 zip 文件,它本身可能只有几M或几十M的大小,但是解压缩之后会产生巨大的数据量,产生巨大的资源消耗。 + +### 解决方案 + +在 zipfile 文档中添加告警信息: + +## **问题10:不合理使用glibc正则表达式引起ReDoS攻击** + +### 问题现象 + +使用glibc的regcomp/regexec接口编程,或者grep/sed等应用glibc正则表达式的shell命令,不合理的正则表达式或输入会造成ReDoS攻击(CVE-2019-9192/CVE-2018-28796)。 +典型正则表达式pattern为“反向引用”(\1表示)与“*”(匹配零次或多次)、“+”(匹配一次或多次)、“{m,n}”(最小匹配m次,最多匹配n次)的组合,或者配合超长字符串输入,示例如下: + +```shell +# echo D | grep -E "$(printf '(\0|)(\\1\\1)*')"Segmentation fault (core dumped) +# grep -E "$(printf '(|)(\\1\\1)*')" +Segmentation fault (core dumped) +# echo A | sed '/\(\)\(\1\1\)*/p' +Segmentation fault (core dumped) +# time python -c 'print "a"*40000' | grep -E "a{1,32767}" +Segmentation fault (core dumped) +# time python -c 'print "a"*40900' | grep -E "(a)\\1" +Segmentation fault (core dumped) +``` + +### 原因分析 + +使用正则表达式的进程coredump。具体原因为glibc正则表达式的实现为NFA/DFA混合算法,内部原理是使用贪婪算法进行递归查找,目的是尽可能匹配更多的字符串,贪婪算法在处理递归正则表达式时会导致ReDoS。 + +### 解决方案 + +1. 需要对用户做严格的权限控制,减少攻击面。 +2. 用户需保证正则表达式的正确性,不输入无效正则表达式,或者超长字符串配合正则的“引用” “*”等容易触发无限递归的组合。 + + ```shell + # ()(\1\1)* + # "a"*400000 + ``` + +3. 用户程序在检测到进程异常之后,通过重启进程等手段恢复业务,提升程序的可靠性。 + +## **问题11:安装卸载httpd-devel和apr-util-devel软件包,其中的依赖包gdbm-devel安装、卸载有报错** + +### 问题现象 + +1. gdbm-devel-1.18.1-1包安装、卸载有报错; +2. 问题1修复后,gdbm和gdbm-devel包更新到1.18.1-2版本,但在安装httpd-devel、apr-util-devel等包(依赖关系中有gdbm-devel软件包)时,默认安装的gdbm-devel还是1.18.1-1旧版本,导致问题报错依然存在。 + +### 原因分析 + +1. gdbm-devel-1.18.1-1包中缺少提供info信息的help软件包,导致单独安装gdbm-devel并不能将help包引入进来,所以出现了如下告警信息。 + + ```text + install-info: 没有那个文件或目录 for /usr/share/info/gdbm.info.gz + ``` + +2. 由于系统默认安装的gdbm主包是1.18.1-1版本,而没有安装gdbm-devel包。依赖gdbm-devel包的相关软件包在安装gdbm-devel包的过程中,仍会匹配gdbm的主包版本,故而依然安装了gdbm-devel的旧版本1.18.1-1,导致警告信息依然存在。 + +### 解决方案 + +1. 单包升级gdbm,安装使用gdbm-1.18.1-2版本相关软件包后,告警信息消失; +2. 在单包升级gdbm后,再进行安装依赖的gdbm-devel软件包安装,让其依赖高版本gdbm软件包,告警信息消失。 + +## **问题12:系统reboot后,执行yum/dnf等命令报错,提示rpmdb error** + +### 问题现象 + +1. reboot系统,重启后,执行rpm相关命令(yum/dnf)提示: + error: db5 error(-30973) from dbenv->open: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery + error: cannot open Packages index using db5 - (-30973) + error: cannot open Packages database in /var/lib/rpm + Error: Error: rpmdb open failed + +### 原因分析 + +1. 执行安装升级动作过程中,会对/var/lib/rpm/__db.00*文件进行读写操作,如果在运行中出现强制下电、磁盘空间满或者 ‘kill -9’ 等异常中断操作,会导致对应_db文件损坏,后续执行rpm相关命令(dnf/yum)会发生报错 + +### 解决方案 + +步骤1 执行`kill -9`停止所有正在运行的rpm命令。 +步骤2 执行`rm -rf /var/lib/rpm/__db.00*`删除所有db.00的文件。 +步骤3 执行`rpmdb --rebuilddb`命令,重建rpm db后即可。 + +## **问题13:执行 rpmrebuild -d /home/test filesystem对filesystem包rebuild时,rebuild失败** + +### 问题现象 + +执行 rpmrebuild --comment-missing=y --keep-perm -b -d /home/test filesystem-3.16-3.oe1.aarch64对filesystem包rebuild时,rebuild失败. +/usr/lib/rpmrebuild/rpmrebuild.sh:Error:(RpmBuild) Package 'filesystem-3.16-3.oe1.aarch64' build failed. +/usr/lib/rpmrebuild/rpmrebuild.sh:Error: RpmBuild + +### 原因分析 + +软件包在%pretrans -p阶段创建目录,并在%ghost阶段对该目录进行修饰,如果用户在该目录下创建目录或文件,执行rpmrebuild对该包进行打包,发现创建的目录或文件也会打包到该包中。 + +上述问题的根本原因是因为filesystem在%pretrans阶段创建了/proc目录,并在%ghost阶段对该目录进行了修饰,但是该目录在系统运行时会动态的创建一些微量进程,这些进程非目录也非文件,在执行rpmrebuild的时无法对这些进程进行打包,所以rebuild失败。 + +### 解决方案 + +暂时不使用rpmrebuild命令对filesystem进行rebuild。 + +## **问题14:带参数f执行modprobe或insmod报错** + +### 问题现象 + +执行`modprobe -f `或`insmod -f .ko.xz`报错,比如`insmod -f xfs.ko.xz`报错:`modprobe: ERROR: could not insert 'xfs': Key was rejected by service`。 + +迄今为止(2022.09.20, kmod v30),该问题尚未被kmod社区修复。Linux v5.17 [b1ae6dc](https://github.com/torvalds/linux/commit/b1ae6dc41eaaa98bb75671e0f3665bfda248c3e7)添加了对压缩内核模块的支持,kmod尚未支持该特性。 + +### 原因分析 + +对于未经压缩的ko,`{modprobe, insmod}`使用`finit_module()`系统调用,而对于压缩的ko,解压由kmod完成,使用`init_module()`系统调用。系统调用`init_module()`无法传入ignore check的flag,导致内核执行路径中`mod_verify_sig()`始终进入,并且`{modprobe, insmod} -f`参数会更改ko有关的校验信息,导致`mod_verify_sig()`校验失败。 + +### 解决方案 + +对压缩了的ko不使用`{insmod, modprobe} -f`。 diff --git a/docs/zh/faq/server/applicationdev_faqs.md b/docs/zh/faq/server/applicationdev_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..9d703b4a9575b97baaf9811af2369f845361bdef --- /dev/null +++ b/docs/zh/faq/server/applicationdev_faqs.md @@ -0,0 +1,19 @@ +# 应用开发常见问题与解决方法 + +## **问题1:部分依赖java-devel的应用程序自编译失败** + +### 问题描述 + +部分依赖java-devel的应用程序会出现使用rpmbuild命令自编译失败的问题。 + +### 原因分析 + +为了提供更新的openjdk特性和对广大java应用程序的兼容,openEuler同时提供了openjdk-1.8.0、openjdk-11等多个版本的openjdk。部分应用程序在编译时需要依赖java-devel包,安装java-devel包时系统会默认安装更高版本的java-11-openjdk,从而导致这些应用的编译失败。 + +### 解决方法 + +用户需手动使用如下命令安装java-1.8.0-openjdk后再使用rpmbuild命令进行自编译。 + +```shell +# yum install java-1.8.0-openjdk +``` diff --git a/docs/zh/faq/server/atune_faqs.md b/docs/zh/faq/server/atune_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..aea5a1333def7ee11c81e96d3bc6c9888ac063e2 --- /dev/null +++ b/docs/zh/faq/server/atune_faqs.md @@ -0,0 +1,52 @@ +# A-Tune常见问题与解决方法 + +## **问题1:train命令训练模型出错,提示“training data failed”** + +原因:collection命令只采集一种类型的数据。 + +解决方法:至少采集两种数据类型的数据进行训练。 + +## **问题2:atune-adm无法连接atuned服务** + +可能原因: + +1. 检查atuned服务是否启动,并检查atuned侦听地址。 + + ```shell + # systemctl status atuned + # netstat -nap | grep atuned + ``` + +2. 防火墙阻止了atuned的侦听端口。 +3. 系统配置了http代理导致无法连接。 + +解决方法: + +1. 如果atuned没有启动,启动该服务,参考命令如下: + + ```shell + # systemctl start atuned + ``` + +2. 分别在atuned和atune-adm的服务器上执行如下命令,允许侦听端口接收网络包,其中60001为atuned的侦听端口号。 + + ```shell + # iptables -I INPUT -p tcp --dport 60001 -j ACCEPT + # iptables -I INPUT -p tcp --sport 60001 -j ACCEPT + ``` + +3. 不影响业务的前提下删除http代理,或对侦听IP不进行http代理,命令如下: + + ```shell + # no_proxy=$no_proxy,侦听地址 + ``` + +## **问题3:atuned服务无法启动,提示“Job for atuned.service failed because a timeout was exceeded.”** + +原因:hosts文件中缺少localhost配置 + +解决方法:在/etc/hosts文件中127.0.0.1这一行添加上localhost + +```ini +127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 +``` diff --git a/docs/zh/faq/server/figures/1665628542704.png b/docs/zh/faq/server/figures/1665628542704.png new file mode 100644 index 0000000000000000000000000000000000000000..58907e0ed31c79b260be80480d4fd4c27e4e2e24 Binary files /dev/null and b/docs/zh/faq/server/figures/1665628542704.png differ diff --git a/docs/zh/faq/server/figures/BIOS.png b/docs/zh/faq/server/figures/BIOS.png new file mode 100644 index 0000000000000000000000000000000000000000..d5a96738001c5a910174c030af583bb09ff29ce6 Binary files /dev/null and b/docs/zh/faq/server/figures/BIOS.png differ diff --git a/docs/zh/faq/server/figures/Configuration_error_prompt.png b/docs/zh/faq/server/figures/Configuration_error_prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..a4eb734b3b84247bb2aa897e74898e8b5375aec8 Binary files /dev/null and b/docs/zh/faq/server/figures/Configuration_error_prompt.png differ diff --git a/docs/zh/faq/server/figures/Megaraid_IO_Request_uncompleted.png b/docs/zh/faq/server/figures/Megaraid_IO_Request_uncompleted.png new file mode 100644 index 0000000000000000000000000000000000000000..9f5a9e0f03055c59148830c8f8894196acd6861f Binary files /dev/null and b/docs/zh/faq/server/figures/Megaraid_IO_Request_uncompleted.png differ diff --git a/docs/zh/faq/server/figures/No-bootable-device.png b/docs/zh/faq/server/figures/No-bootable-device.png new file mode 100644 index 0000000000000000000000000000000000000000..944c658d621f00b18e4aa75eaca420d76c08715c Binary files /dev/null and b/docs/zh/faq/server/figures/No-bootable-device.png differ diff --git a/docs/zh/faq/server/figures/cancle_disk.png b/docs/zh/faq/server/figures/cancle_disk.png new file mode 100644 index 0000000000000000000000000000000000000000..ff0e9a143fc14dc725d0b1e770bd54ce874aeec6 Binary files /dev/null and b/docs/zh/faq/server/figures/cancle_disk.png differ diff --git a/docs/zh/faq/server/figures/custom_paratition.png b/docs/zh/faq/server/figures/custom_paratition.png new file mode 100644 index 0000000000000000000000000000000000000000..0f46bc9fcfbf57cd986661029c6b2c037dac2919 Binary files /dev/null and b/docs/zh/faq/server/figures/custom_paratition.png differ diff --git a/docs/zh/faq/server/figures/dde-1.png b/docs/zh/faq/server/figures/dde-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fb1d5177c39262ed182f10a57fdae850d007eeb1 Binary files /dev/null and b/docs/zh/faq/server/figures/dde-1.png differ diff --git a/docs/zh/faq/server/figures/dde-2.png b/docs/zh/faq/server/figures/dde-2.png new file mode 100644 index 0000000000000000000000000000000000000000..be5d296937bd17b9646b32c80934aa76738027af Binary files /dev/null and b/docs/zh/faq/server/figures/dde-2.png differ diff --git a/docs/zh/faq/server/figures/reset_devices.png b/docs/zh/faq/server/figures/reset_devices.png new file mode 100644 index 0000000000000000000000000000000000000000..70cc2e0138dd48950f4704bd3f1160448d5058a1 Binary files /dev/null and b/docs/zh/faq/server/figures/reset_devices.png differ diff --git a/docs/zh/faq/server/figures/security.png b/docs/zh/faq/server/figures/security.png new file mode 100644 index 0000000000000000000000000000000000000000..59ac7bfcef796fc32d0127a9d6095d32cb282fb2 Binary files /dev/null and b/docs/zh/faq/server/figures/security.png differ diff --git a/docs/zh/faq/server/figures/select.png b/docs/zh/faq/server/figures/select.png new file mode 100644 index 0000000000000000000000000000000000000000..0e40f5fd8d73dbcbad6bdcec5d56d3883d54023a Binary files /dev/null and b/docs/zh/faq/server/figures/select.png differ diff --git a/docs/zh/faq/server/figures/zh-cn_image_0229291264.jpg b/docs/zh/faq/server/figures/zh-cn_image_0229291264.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f0a0658e08010f4f453e558a41e31257783b416 Binary files /dev/null and b/docs/zh/faq/server/figures/zh-cn_image_0229291264.jpg differ diff --git a/docs/zh/faq/server/figures/zh-cn_image_0229291272.png b/docs/zh/faq/server/figures/zh-cn_image_0229291272.png new file mode 100644 index 0000000000000000000000000000000000000000..e0ad8102bddd886c3bd7a306b088e8a52e2b99c9 Binary files /dev/null and b/docs/zh/faq/server/figures/zh-cn_image_0229291272.png differ diff --git a/docs/zh/faq/server/figures/zh-cn_image_0229291280.png b/docs/zh/faq/server/figures/zh-cn_image_0229291280.png new file mode 100644 index 0000000000000000000000000000000000000000..5754e734c48b23ace2a4fbf1302b820077cd7b71 Binary files /dev/null and b/docs/zh/faq/server/figures/zh-cn_image_0229291280.png differ diff --git a/docs/zh/faq/server/figures/zh-cn_image_0231657950.png b/docs/zh/faq/server/figures/zh-cn_image_0231657950.png new file mode 100644 index 0000000000000000000000000000000000000000..bea985ef710c57aeba16600067304b1005ad92e8 Binary files /dev/null and b/docs/zh/faq/server/figures/zh-cn_image_0231657950.png differ diff --git a/docs/zh/faq/server/installation_faq1.md b/docs/zh/faq/server/installation_faq1.md new file mode 100644 index 0000000000000000000000000000000000000000..8e5504914b3d7fdeca69763c96a72e996e6fc819 --- /dev/null +++ b/docs/zh/faq/server/installation_faq1.md @@ -0,0 +1,341 @@ +# 系统安装常见问题与解决方法-1 + +## **问题1:安装openEuler时选择第二盘位为安装目标,操作系统无法启动** + +### 问题现象 + +安装操作系统时,直接将系统安装到第二块磁盘sdb,重启系统后启动失败。 + +### 原因分析 + +当安装系统到第二块磁盘时,MBR和GRUB会默认安装到第二块磁盘sdb。这样会有下面两种情况: + +1. 如果第一块磁盘中有完整系统,则加载第一块磁盘中的系统启动。 +2. 如果第一块磁盘中没有完好的操作系统,则会导致硬盘启动失败。 + +以上两种情况都是因为BIOS默认从第一块磁盘sda中加载引导程序启动系统,如果sda没有系统,则会导致启动失败。 + +### 解决方法 + +有以下两种解决方案: + +- 当系统处于安装过程中,在选择磁盘(选择第一块或者两块都选择)后,指定引导程序安装到第一块盘sda中。 +- 当系统已经安装完成,若BIOS支持选择从哪个磁盘启动,则可以通过修改BIOS中磁盘启动顺序,尝试重新启动系统。 + +## **问题2:openEuler开机后进入emergency模式** + +### 问题现象 + +openEuler系统开机后进入emergency模式,如下图所示: + +![](./figures/zh-cn_image_0229291264.jpg) + +### 原因分析 + +操作系统文件系统损坏导致磁盘挂载失败,或者io压力过大导致磁盘挂载超时(超时时间为90秒)。 + +系统异常掉电、物理磁盘io性能低等情况都可能导致该问题。 + +### 解决方法 + +1. 用户直接输入root帐号的密码,登录系统。 +2. 使用fsck工具,检测并修复文件系统,然后重启。 + + > [!NOTE]说明 + > fsck(file system check)用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查。 用户可以通过“fsck.ext3 -h”、“fsck.ext4 -h”命令查看fsck的使用方法。 + +另外,如果用户需要取消磁盘挂载超时时间,可以直接在“/etc/fstab”文件中添加“x-systemd.device-timeout=0”。如下: + +```sh +# /etc/fstab +# Created by anaconda on Mon Sep 14 17:25:48 2015 +# +# Accessible filesystems, by reference, are maintained under '/dev/disk' +# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info +# +/dev/mapper/openEuler-root / ext4 defaults,x-systemd.device-timeout=0 0 0 +UUID=afcc811f-4b20-42fc-9d31-7307a8cfe0df /boot ext4 defaults,x-systemd.device-timeout=0 0 0 +/dev/mapper/openEuler-home /home ext4 defaults 0 0 +/dev/mapper/openEuler-swap swap swap defaults 0 0 +``` + +## **问题3:系统中存在无法激活的逻辑卷组时,重装系统失败** + +### 问题现象 + +由于磁盘故障,系统中存在无法激活的逻辑卷组,重装系统出现异常。 + +### 原因分析 + +安装时有激活逻辑卷组的操作,无法激活时会抛出异常。 + +### 解决方法 + +重装系统前如果系统中存在无法激活的逻辑卷组,为了避免重装系统过程出现异常,需在重装前将逻辑卷组恢复到正常状态或者清除这些逻辑卷组。举例如下: + +- 恢复逻辑卷组状态 + 1. 使用以下命令清除vg激活状态, 防止出现“Can't open /dev/sdc exclusively mounted filesystem”。 + + ```sh + # vgchange -a n testvg32947 + ``` + + 2. 根据备份文件重新创建pv。 + + ```sh + # pvcreate --uuid JT7zlL-K5G4-izjB-3i5L-e94f-7yuX-rhkLjL --restorefile /etc/lvm/backup/testvg32947 /dev/sdc + ``` + + 3. 恢复vg信息。 + + ```sh + # vgcfgrestore testvg32947 + ``` + + 4. 重新激活vg。 + + ```sh + # vgchange -ay testvg32947 + ``` + +- 清除逻辑卷组 + + ```sh + # vgchange -a n testvg32947 + # vgremove -y testvg32947 + ``` + +## **问题4:选择安装源出现异常** + +### 问题现象 + +选择安装源后出现:"Error checking software selection"。 + +### 原因分析 + +这种现象是由于安装源中的软件包依赖存在问题。 + +### 解决方法 + +检查安装源是否存在异常。使用新的安装源。 + +## **问题5:如何手动开启kdump服务** + +### 问题现象 + +执行systemctl status kdump命令,显示状态信息如下,提示无预留内存。 + +![](./figures/zh-cn_image_0229291280.png) + +### 原因分析 + +kdump服务需要系统预留一段内存用于运行kdump内核,而当前系统没有为kdump服务预留内存,所以无法运行kdump服务。 + +### 解决方法 + +已安装操作系统的场景 + +1. 修改/boot/efi/EFI/openEuler/grub.cfg,添加crashkernel=1024M,high。 +2. 重启系统使配置生效。 +3. 执行如下命令,检查kdump状态: + + ```sh + # systemctl status kdump + ``` + + 若回显如下,即kdump的状态为active,说明kdump已使能,操作结束。 + + ![](./figures/zh-cn_image_0229291272.png) + +### 参数说明 + +kdump内核预留内存参数说明如下: + +**表 1** crashkernel参数说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

内核启动参数

+

描述

+

缺省值

+

备注

+

crashkernel=X

+

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

+

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

+

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

+

crashkernel=X@Y

+

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

+

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

+

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

+

crashkernel=X,high

+

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

+

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

+

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

+

crashkernel=X,low

+

crashkernel=Y,high

+

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

+

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

+

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

+
+ +## **问题6:多块磁盘组成逻辑卷安装系统后,再次安装不能只选其中一块磁盘** + +### 问题现象 + +在安装系统时,如果之前的系统选择多块磁盘组成逻辑卷进行安装,再次安装时,如果只选择了其中的一块或几块磁盘,没有全部选择,在保存配置时提示配置错误,如[图1](#fig115949762617)所示。 + +**图 1** 配置错误提示 +![](./figures/Configuration_error_prompt.png) + +### 原因分析 + +之前的逻辑卷包含了多块磁盘,只在一块磁盘上安装会破坏逻辑卷。 + +### 解决方法 + +因为多块磁盘组成逻辑卷相当于一个整体,所以只需要删除对应的卷组即可。 + +1. 按“Ctrl+Alt+F2”可以切换到命令行,执行如下命令找到卷组。 + + ```sh + # vgs + ``` + + ![](./figures/zh-cn_image_0231657950.png) + +2. 执行如下命令,删除卷组。 + + ```sh + # vgremove euleros + ``` + +3. 执行如下命令,重启安装程序即可生效。 + + ```sh + # systemctl restart anaconda + ``` + + > [!NOTE]说明 + > 图形模式下也可以按“Ctrl+Alt+F6”回到图形界面,点击[图1](#fig115949762617)右下角的“Refresh”刷新存储配置生效。 + +## **问题7:x86物理机UEFI模式由于security boot安全选项问题无法安装** + +### 问题现象 + +x86物理机安装系统时,由于设置了BIOS选项security boot 为enable(默认是disable),导致系统一直停留在“No bootable device”提示界面,无法继续安装,如[图2](#fig115949762618)所示。 + +**图 2** “No bootable device”提示界面 +![](./figures/No-bootable-device.png) + +### 原因分析 + +开启security boot后,主板会验证引导程序及操作系统 ,若没有用对应的私钥进行签名,则无法通过主板上内置公钥的认证。 + +### 解决方法 + +进入BIOS,设置security boot为disable,重新安装即可。 + +1. 系统启动时,按“F11”,输入密码“Admin@9000”进入BIOS。 + + ![](./figures/BIOS.png) + +2. 选择进入Administer Secure Boot。 + + ![](./figures/security.png) + +3. 设置Enforce Secure Boot为Disabled。 + + ![](./figures/select.png) + + > [!NOTE]说明 + > 设置security boot为disable之后,保存退出,重新安装即可。 + +## **问题8:安装openEuler时,软件选择页面选择“服务器-性能工具”,安装后messages日志有pmie_check报错信息** + +### 问题现象 + +安装系统时软件选择勾选服务器-性能工具,会安装pcp相关软件包,正常安装并重启后,/var/log/messages日志文件中会产生报错:pmie_check failed in /usr/share/pcp/lib/pmie。 + +### 原因分析 + +anaconda不支持在chroot环境中安装selinux策略模块,当安装pcp-selinux时,postin脚本安装pcp相关selinux策略模块执行失败,从而导致重启后产生报错。 + +### 解决办法 + +完成安装并重启后,以下方法选择其一。 + +1. 执行如下命令,安装selinux策略模块pcpupstream + + ```sh + # /usr/libexec/pcp/bin/selinux-setup /var/lib/pcp/selinux install "pcpupstream" + ``` + +2. 重新安装pcp-selinux + + ```sh + # sudo dnf reinstall pcp-selinux + ``` + +## **问题9:在两块已经安装了系统的磁盘上进行重复选择,并自定义分区时,安装失败** + +### 问题现象 + +用户在安装操作系统过程中,存在两块都已经安装过的磁盘,此时如果先选择一块盘,进行自定义分区,然后点击取消按钮,再选择第二块盘,并进行自定义分区时,会出现安装失败。 + +![](./figures/cancle_disk.png) +![](./figures/custom_paratition.png) + +### 原因分析 + +用户存在两次选择磁盘的操作,当前点击取消后,再选择第二块磁盘,磁盘信息不正确,导致安装失败。 + +### 解决方法 + +直接选择目标磁盘进行自定义分区,请勿频繁取消操作,如果一定要进行取消重选建议重新安装。 + +### issue访问链接 + + + +## **问题10:安装LSI MegaRAID卡的物理机kdump无法生成vmcore** + +### 问题现象 + +部署好kdump服务后,手动执行`echo c > /proc/sysrq-trigger`命令或由于kernel故障导致kernel宕机,触发kdump启动second kernel过程中,MegaRAID驱动报错“BRCM Debug mfi stat 0x2d,data len requested/completed 0x200/0x0”,报错信息如下图,最终导致无法生成vmcore。 + +![](./figures/Megaraid_IO_Request_uncompleted.png) + +### 原因分析 + +由于默认配置了reset_devices启动参数,second kernel启动过程中会触发设备复位(reset_devices)操作,设备复位操作导致MegaRAID控制器或磁盘状态故障,转储vmcore文件时访问MegaRAID卡的磁盘报错,进而无法生成vmcore。 + +### 解决方法 + +在物理机`etc/sysconfig/kdump`文件中将second kernel默认启动参数`reset_devices`删除,可以规避second kernel启动过程中由于MegaRAID卡驱动复位设备所致IO请求未完成问题,以成功生成vmcore。 +![](./figures/reset_devices.png) diff --git a/docs/zh/faq/server/installation_faq2.md b/docs/zh/faq/server/installation_faq2.md new file mode 100644 index 0000000000000000000000000000000000000000..85d7b7b2457abcdda13f43a412af76163a0a43c5 --- /dev/null +++ b/docs/zh/faq/server/installation_faq2.md @@ -0,0 +1,66 @@ +# 系统安装常见问题与解决方法-2 + +## **问题1:树莓派启动失败** + +### 问题现象 + +将 openEuler 发布的树莓派镜像刷写入 SD 卡后,树莓派启动失败。 + +### 原因分析 + +刷写 openEuler 发布的树莓派镜像后,树莓派启动失败,大致有以下几种情况: + +1. 下载的镜像文件不完整,请确保该镜像通过完整性校验。 +2. 镜像写入 SD 卡过程中出现问题,多出现在 Windows 环境下使用应用软件刷写镜像到 SD 卡的情况。 + +### 解决方法 + +将完整的镜像重新刷写入 SD 卡。 + +## **问题2:nmcli 命令连接 WIFI 失败** + +### 问题现象 + +执行 `nmcli dev wifi connect SSID password PWD` 命令连接 WIFI 失败。例如提示 `Error: Connection activation failed: (7) Secrets were required, but not provided.` 等错误。 + +### 原因分析 + +执行的命令缺少密码。注意,如果密码中包含特殊字符,需要使用单引号将密码括起来。如果使用 nmcli 命令行连接 WIFI 失败,建议使用 nmtui 字符界面进行连接。 + +### 解决方法 + +执行 `nmtui` 命令进入到 nmtui 字符界面,按照以下步骤连接 WIFI。 + +1. 选择 `Edit a connection`,按 `Enter` 进入编辑网络连接窗口。 +2. 按下键盘右方向键选择 `Add`,按 `Enter` 进入新建网络连接窗口。 +3. 连接类型选择 `Wi-Fi` ,然后按下键盘右方向键选择 `Create`,按 `Enter` 进入 WIFI 编辑连接信息的界面。 +4. WIFI 连接信息界面主要需要编辑以下内容,其他信息根据实际情况而定。编辑结束后选择 `OK`,按 `Enter` 完成编辑并回退到编辑网络连接窗口。 + 1. `Profile name` 栏输入该 WIFI 连接的名称,这里可以使用默认名称,如 `Wi-Fi connection 1`; + 2. `Device` 栏输入要使用的无线网卡接口,这里输入 `wlan0`; + 3. `SSID` 栏输入要连接的 WIFI 的 SSID; + 4. `Security` 栏选择 WIFI 密码加密方式,这里根据实际情况选择,例如选择 `WPA & WPA2 Personal`; + 5. `Password` 栏输入 WIFI 密码。 + +5. 选择 `Back` 回退到最初的 nmtui 字符界面。 +6. 选择 `Activate a connection`,按 `Enter` 进入激活网络连接窗口。 +7. 查看添加的 WIFI 连接是否已激活(已激活的连接名称前有 `*` 标记)。如果未激活,选择该 WIFI 连接,然后按下键盘右方向键选择 `Activate`,按 `Enter` 激活该连接。待激活完成后,选择 `Back`,按 `Enter` 退出该激活界面,回退到最初的 nmtui 字符界面。 +8. 选择 `Quit`,然后按下键盘右方向键选择 `OK`,按 `Enter` 退出 nmtui 字符界面。 + +## **问题3:tensorflow包及相关包安装失败** + +### 问题现象 + +使用yum安装tensorflow及相关包时失败。 + +### 原因分析 + +tensorflow的依赖包暂时未升级至适配tensorflow==2.12.1的版本,因此需要通过pip手动安装其依赖软件。 + +### 解决方法 + +1. yumdownloader下载tensorflow的rpm包:yumdownloader python3-tensorflow。 +2. 使用rpm --nodeps安装这个包:rpm -ivh --nodeps python3-tensorflow。 +3. 安装tensorflow依赖包。 + 1. 使用pip安装依赖:pip3 install tensorflow-estimator==2.12.0 keras==2.12.0 protobuf==3.20.3。 + 2. 使用yum安装其他依赖软件:yum install python3-termcolor python3-future python3-numpy python3-six python3-astunparse python3-google-pasta python3-opt-einsum python3-typing-extensions python3-wrapt python3-h5py python3-grpcio python3-absl-py python3-flatbuffers python3-gast +4. 直接用yum下载相关包,例如python-keras-rl2,直接执行yum install python-keras-rl2。 diff --git a/docs/zh/faq/server/kernel_faqs.md b/docs/zh/faq/server/kernel_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..a62dab340043cd3a45c034d417188682626200d9 --- /dev/null +++ b/docs/zh/faq/server/kernel_faqs.md @@ -0,0 +1,31 @@ +# 内核热升级常见问题与解决方法 + +## **问题1:执行nvwa update后未升级** + +原因:保留现场或者内核替换过程中出现错误。 + +解决方法:查看日志,找出错误原因。 + +## **问题2:开启加速特性后,nvwa执行命令失败** + +原因:nvwa提供了诸多加速特性,包括quick kexec,pin memory,cpu park等等。这些特性都涉及到cmdline的配置和内存的分配,在选取内存时,通过cat /proc/iomemory确保选取的内存没有与其他程序冲突。 + +解决方法:必要时,通过dmesg查看使能特性后是否存在错误日志。 + +## **问题3:热升级后,相关现场未被恢复** + +原因:首先检查nvwa服务是否运行,运行情况下,可能存在两种情况:一种是服务恢复失败,一种是进程恢复失败。 + +解决方法:通过service nvwa status查看nvwa的日志,如果是服务启动失败,首先确认是否使能了该服务,再通过systemd查看对应服务的日志。进一步的日志,去criu_dir指定的路径对应命名的进程/服务文件夹中。其中dump.log为保存现场产生的日志,restore.log为恢复现场产生的。 + +## **问题4:恢复失败,日志显示Can't fork for 948: File exists** + +原因:内核热升级工具在恢复程序过程中,发现程序的pid已经被占用。 + +解决方法:当前内核没有提供保留pid的机制,相关策略正在开发,预计会在将来的内核版本中解决这一限制,当前仅能手动重启相关进程。 + +## **问题5:使用nvwa去保存和恢复简单程序(hello world),显示失败或者程序未在执行** + +原因: criu使用存在诸多限制。 + +解决办法:查看nvwa的日志,如果显示是criu相关的错误,去相应的目录下检查dump.log或者restore.log,criu相关使用限制,可以参考[criu社区wiki](https://criu.org/What_cannot_be_checkpointed)。 diff --git a/docs/zh/faq/server/migration_faqs.md b/docs/zh/faq/server/migration_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..88f27af2ae230c5ed929c65ba1ac02e0b3432476 --- /dev/null +++ b/docs/zh/faq/server/migration_faqs.md @@ -0,0 +1,64 @@ +# 迁移常见问题与解决方法 + +## 迁移过程中可能需要用到的网站链接 + +openEuler迁移专区: + +- x2openEuler官方文档 +- x2openEuler工具下载 +- x2openEuler需要用到的openEuler的源 + +- x2openEuler兼容性分析比对数据库centos7/8—>openEuler22.03-LTS下载地址 + +- x2openEuler迁移学习 + +## 为什么在同样分配的物理内存下,openEuler 显示的可用内存比 CentOS 少? + +这个问题是两个操作系统在分配给 crashkernel(内核崩溃时使用的内存区域)的内存大小不同导致的。在实验中,给两个操作系统都分配了 4G 的内存,但是 CentOS 可用内存为 3.7G,而 openEuler 可用内存只有 3.3G。通过查看系统的 dmesg 日志,发现在 CentOS 中为 crashkernel 预留的内存是 161MB,而在 openEuler 中预留的内存是 512MB。将 openEuler 的 crashkernel 内存预留修改为 256MB 后,可用内存与 CentOS 相同,从而证明了是由于 crashkernel 的内存预留差异导致的可用内存差异。 + +解决方法:在 openEuler 的 grub 配置文件(/boot/grub2/grub.cfg)中将 crashkernel 的预留内存从 512MB 修改为 256MB,可以解决这个问题。 + +## 如果在迁移软件包时遇到宏无法解析的问题,该如何解决? + +这通常发生在从CentOS或Fedora迁移到其他系统时,因为不同系统的宏定义可能不同。解决方法有两种:一是查询宏的具体含义,并在spec文件中用其实际值替换宏;二是将提供宏定义的macros软件包引入到仓库中,并在BuildRequires中添加,以确保宏能够正确解析。 + +## 在进行虚拟机热迁移时,应该如何准备环境并检查迁移前的必要条件? + +进行虚拟机热迁移前,需要准备两个物理机(源端和目的端)并进行一系列的检查来确保迁移可以顺利进行。这些检查包括: + +权限检查:确保当前用户有执行热迁移的权限。 +网络检查:检查源端和目的端主机之间的网络是否互通,并保证两个主机在相同网段。 +存储资源检查:确认两端是否可以访问相同的存储资源,并确保目的端主机有足够的CPU、内存和存储资源。 +CPU资源检查:确认两个主机的CPU资源情况。 +内存检查:核实两个主机的内存情况。 +存储检查:检查两个主机的存储配置。 +虚拟机状态检查:确认被迁移的虚拟机处于运行状态。 +此外,可根据需要设置热迁移参数,如最大停机时间和迁移过程中的最大带宽,以及确定存储方式是共享存储还是非共享存储。在非共享存储的情况下,可能还需要进行额外的配置,如通过NFS设置共享存储。 + +## 什么是虚拟机热迁移,它与虚拟机冷迁移有什么区别? + +虚拟机热迁移是一种技术,它允许在不关闭虚拟机的情况下,将整个虚拟机的运行状态(包括内存中的数据和磁盘上的数据)完整地迁移到另一台物理服务器上。这种迁移过程对用户来说是透明的,即用户不会感受到任何服务中断或性能下降。热迁移通常用于硬件维护、升级,或是负载均衡等场景,确保关键业务连续性和服务的高可用性。 + +相比之下,虚拟机冷迁移(也称为静态迁移)涉及到在迁移前关闭虚拟机。这意味着在迁移过程中,该虚拟机上的服务是不可用的。冷迁移适用于非实时或可容忍停机时间的场景,例如批量处理作业或非关键业务的迁移。 + +总结两者的主要区别: + +1. 热迁移允许在不停机的情况下迁移虚拟机,保证了业务的连续性;而冷迁移需要在迁移前关闭虚拟机,导致服务暂时不可用。 +2. 热迁移对用户透明,用户体验不会受到影响;冷迁移则可能导致服务中断。 +3. 热迁移技术复杂度较高,因为它需要同步迁移内存中的数据;而冷迁移相对简单,因为只涉及静态数据的迁移。 + +## 如何将SQL Server数据从Windows迁移到openEuler? + +首先,在Windows上备份SQL Server数据库。可以使用SQL Server Management Studio (SSMS) 或使用SQL语句的方法进行备份。备份完成后,使用scp或其他方法将备份文件传输到openEuler系统。在openEuler上,创建一个新的备份目录并将备份文件移动到该目录。使用sqlcmd工具,执行SQL语句来还原数据库。如果数据库包含辅助文件,需要在RESTORE DATABASE命令中为这些文件添加MOVE子句。最后,通过列举所有数据库来验证数据迁移是否成功。 + +## 在进行CentOS到openEuler的操作系统迁移时,为什么需要考虑硬件兼容性检测? + +硬件兼容性检测在CentOS到openEuler的迁移中至关重要,因为这不仅涉及到操作系统的更换,还包括对操作系统上运行的应用软件和业务系统的替代、适配、迁移和重构。确保硬件兼容性可以保障迁移过程中的系统稳定性和业务的连续性,防止迁移后出现硬件不兼容导致的应用故障或性能下降。 + +## openEuler社区提供的迁移工具x2openEuler具备哪些功能,它是如何应用于迁移评估? + +openEuler社区提供的迁移工具x2openEuler主要用于迁移评估,具备以下功能: + +1. 软件评估:通过扫描依赖的软件包清单信息,对各类应用(如rpm, tar, zip, gzip, jar, py, pyc, sh, bin等)进行评估,并生成HTML格式的评估报告。 +2. 配置收集与评估:支持收集用户环境数据并生成JSON格式文件,包括硬件配置、配置接口、内核选项配置参数、系统配置参数(sysctl/proc/sys)、环境变量、服务、进程、端口、命令接口、系统调用项和设备驱动接口等信息,并完成配置信息分析评估。 +3. 硬件评估:评估运行环境的整机和整机板卡(如RAID, NIC, FC, IB, GPU, SSD, TPM等)是否在openEuler的兼容性清单中。这些功能帮助用户在迁移之前识别潜在的兼容性问题,为顺利迁移提供支持。 diff --git a/docs/zh/faq/server/public_sys-resources/icon-caution.gif b/docs/zh/faq/server/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/faq/server/public_sys-resources/icon-caution.gif differ diff --git a/docs/zh/faq/server/public_sys-resources/icon-danger.gif b/docs/zh/faq/server/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/faq/server/public_sys-resources/icon-danger.gif differ diff --git a/docs/zh/faq/server/public_sys-resources/icon-note.gif b/docs/zh/faq/server/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/faq/server/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/faq/server/public_sys-resources/icon-notice.gif b/docs/zh/faq/server/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/faq/server/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/faq/server/public_sys-resources/icon-tip.gif b/docs/zh/faq/server/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/zh/faq/server/public_sys-resources/icon-tip.gif differ diff --git a/docs/zh/faq/server/public_sys-resources/icon-warning.gif b/docs/zh/faq/server/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/faq/server/public_sys-resources/icon-warning.gif differ diff --git a/docs/zh/faq/server/syscare_faqs.md b/docs/zh/faq/server/syscare_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..a77fb839dfdc483fc2d5148e476e603c63e0e22a --- /dev/null +++ b/docs/zh/faq/server/syscare_faqs.md @@ -0,0 +1,19 @@ +# SysCare常见问题与解决方法 + +## **问题1:报错:“alloc upatch module memory failed”** + + 原因:触发selinux约束。 + + 解决方法:按照报错建议命令操作,手动添加策略,由于不同情况添加策略不同,无法穷尽枚举,参考该issue: 。 + +## **问题2:报错: “patch file error 2”** + + 原因:补丁检测失败。 + + 解决方法:补丁无法正常打入,更换补丁。 + +## **问题3:报错: “build project error 11”** + + 原因:源码包编译失败。 + + 解决方法:尝试使用```rpmbuild -ra *.src.rpm```命令测试源码包是否可正常编译并满足其编译依赖。 diff --git a/docs/zh/faq/server/system_management_faq.md b/docs/zh/faq/server/system_management_faq.md new file mode 100644 index 0000000000000000000000000000000000000000..4f6bf49d95fd9ac612df76272f62a567b879c631 --- /dev/null +++ b/docs/zh/faq/server/system_management_faq.md @@ -0,0 +1,25 @@ +# 系统性能常见问题与解决方法 + +## 为什么在 openEuler 22.03 SP1 系统中,启动 NFS 服务后,尽管最初可以达到千兆网络速率,但经过不到一天的写入操作,客户端的响应速度会急剧下降到大约 2MB/s? + +这个性能下降的主要原因是 NFS 服务端的缓存上涨至 50% 时,其性能会骤降。这种现象主要是由于内存分配和回收机制的问题。在申请内存的过程中,系统不会立即同步回收内存,而是依赖于较慢的后台内存回收机制。当系统无法及时申请到足够的内存时,会导致等待时间(如 500 毫秒的延迟)。这个问题在高负载下尤为明显,因为 NFS 服务端需要大量内存来处理客户端的请求。随着服务运行时间的增长,可用内存的减少会导致性能急剧下降,特别是在密集的写入操作中。 + +## 如何解决 openEuler 系统中由于 ext4 文件系统的 inode 错误而导致的文件创建失败问题? + +为了解决这个问题,应该在处理 dx_node 块的 rec_len 字段时使用正确的方法。正确的做法是使用 ext4_rec_len_from_disk() 函数来转换 rec_len 为 65536,然后进行比较。这样可以确保在添加新的 dx_node 块时,正确地设置 rec_len 字段,并为节点计算并设置正确的校验和。这个更正将避免由于校验和不正确导致的 inode 错误,从而允许系统正常创建和管理大量文件。 + +## 如何解决 openEuler 系统中业务进程因 glibc 线程缓存特性导致的内存占用过高问题? + +解决这个问题的方法是关闭 glibc 的线程缓存特性。这可以通过在启动程序之前设置环境变量来实现。具体操作是在 bash_profile 中添加 GLIBC_TUNABLES=glibc.malloc.tcache_count=0,这样可以关闭线程缓存。在进程启动后,还需要检查进程的环境变量(/proc/pid/environ)以确保成功添加。关闭 glibc 的 tcache 之后,进程的内存管理将与 glibc 2.17 版本一致,不会有其他副作用。根据客户反馈,实施这一修改方案后,内存占用明显降低,且相比于 CentOS,openEuler 的内存占用也变得更低。 + +## 为什么在 ARM 架构上进行 fio 压测多盘场景时,性能仅为 X86 架构的一半? + +在 ARM 架构下进行 fio 压测时,性能低于 X86 架构的主要原因是中断处理机制的差异。在 ARM 环境中,8 盘同时压测时,所有盘的中断都集中在了 0、32、64 核心上,导致处理这些中断的 CPU 被压满。这个瓶颈主要是由于 ARM 架构下的 LPI (Large Payload Interface) 中断和 X86 架构下的 APIC 中断的实现机制不同。X86 架构通过 APIC 实现了中断负载均衡,而 ARM 架构的 LPI 中断主要由 ITS (Interrupt Translation Service) 驱动程序处理,它会默认将中断分配到最低编号的 CPU,导致单核处理中断出现瓶颈。 + +## 为什么在机器掉电后,系统启动时 xfs 文件系统会出现问题,执行 ls 命令时显示 input/output error? + +机器掉电可以导致 xfs 文件系统损坏,因为掉电可能发生在文件系统写入操作的过程中,导致数据未能完全写入磁盘。当系统重新启动后,xfs文件系统可能处于不一致的状态,这种状态下执行文件系统操作,如 ls 命令,可能会遇到输入/输出错误。这类错误通常表明文件系统的某些部分未能正确加载或读取,可能是由于文件系统元数据损坏或者未完成的写入操作造成的。 + +## 如何解决系统启动时未使用新内核的问题? + +要解决这个问题,用户需要将 /boot/grub2/grub.cfg 文件的内容替换为 /boot/efi/EFI/xxxx/grub.cfg 中的内容。这样做可以确保在启动时系统会读取包含新内核的正确配置文件。此外,检查并确认系统的引导模式(UEFI 或 legacy)也是解决此类问题的重要步骤。 diff --git a/docs/zh/faq/server/trusted_computing_faqs.md b/docs/zh/faq/server/trusted_computing_faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..b9382bca6f86be80994ad0240553c9e6239330a8 --- /dev/null +++ b/docs/zh/faq/server/trusted_computing_faqs.md @@ -0,0 +1,254 @@ +# 可信计算常见问题与解决方法 + +## **问题1:开启IMA评估enforce模式并配置默认策略后,系统启动失败** + +### 原因分析 + +IMA默认策略可能包含对应用程序执行、内核模块加载等关键文件访问流程的校验,如果关键文件访问失败,可能导致系统无法启动。通常原因有: + +1) IMA校验证书未导入内核,导致摘要列表无法被正确校验; +2) 摘要列表文件未正确签名,导致摘要列表校验失败; +3) 摘要列表文件未导入initrd中,导致启动过程无法导入摘要列表; +4) 摘要列表文件和应用程序不匹配,导致应用程序匹配已导入的摘要列表失败。 + +### 解决方法 + +用户需要通过log模式进入系统进行问题定位和修复。重启系统,进入grub界面修改启动参数,采用log模式启动: + +```sh +ima_appraise=log +``` + +系统启动后,可参考如下流程进行问题排查: + +**步骤1:** 检查keyring中的IMA证书: + +```sh +keyctl show %:.builtin_trusted_keys +``` + +对于openEuler LTS版本,至少应存在以下几本内核证书(其他未列出版本可根据发布时间前推参考): + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
版本证书
openEuler 22.03 LTSprivate OBS b25e7f66
openEuler 22.03 LTS SP1/2/3private OBS b25e7f66
openeuler <openeuler@compass-ci.com> b675600b
openEuler 22.03 LTS SP4private OBS b25e7f66
openeuler <openeuler@compass-ci.com> b675600b
openeuler <openeuler@compass-ci.com> fb37bc6f
openEuler 24.03openEuler kernel ICA 1: 90bb67eb4b57eb62bf6f867e4f56bd4e19e7d041
+ +如果用户导入了其他内核根证书,也同样需要通过`keyctl`命令查询确认证书是否被成功导入。openEuler默认不使用IMA密钥环,如果用户存在使用的情况,则需要通过如下命令查询IMA密钥环中是否存在用户证书: + +```sh +keyctl show %:.ima +``` + +如果排查结果为证书未正确导入,则用户需要根据*用户证书导入场景*章节进行流程排查。 + +**步骤2:** 检查摘要列表携带签名信息: + +用户可通过如下命令查询当前系统中的摘要列表文件: + +```sh +ls /etc/ima/digest_lists | grep '_list-compact-' +``` + +对于每个摘要列表文件,需要检查存在**以下三种之一**的签名信息: + +(1) 检查该摘要列表文件存在对应的**RPM摘要列表文件**,且**RPM摘要列表文件**的ima扩展属性中包含签名值。以bash软件包的摘要列表为例,摘要列表文件路径为: + +```sh +/etc/ima/digest_lists/0-metadata_list-compact-bash-5.1.8-6.oe2203sp1.x86_64 +``` + +RPM摘要列表路径为: + +```sh +/etc/ima/digest_lists/0-metadata_list-rpm-bash-5.1.8-6.oe2203sp1.x86_64 +``` + +检查RPM摘要列表签名,即文件的`security.ima`扩展属性不为空: + +```sh +getfattr -n security.ima /etc/ima/digest_lists/0-metadata_list-rpm-bash-5.1.8-6.oe2203sp1.x86_64 +``` + +(2) 检查摘要列表文件的`security.ima`扩展属性不为空: + +```sh +getfattr -n security.ima /etc/ima/digest_lists/0-metadata_list-compact-bash-5.1.8-6.oe2203sp1.x86_64 +``` + +(3) 检查摘要列表文件的末尾包含了签名信息,可通过检查文件内容末尾是否包含`~Module signature appended~`魔鬼字符串进行判断(仅openEuler 24.03 LTS及之后版本支持的签名方式): + +```sh +tail -c 28 /etc/ima/digest_lists/0-metadata_list-compact-kernel-6.6.0-28.0.0.34.oe2403.x86_64 +``` + +如果排查结果为摘要列表未包含签名信息,则用户需要根据*摘要列表签名机制说明*章节进行流程排查。 + +**步骤3:** 检查摘要列表的签名信息正确: + +在确保摘要列表已携带签名信息的情况下,用户还需要确保摘要列表采用正确的私钥签名,即签名私钥和内核中的证书匹配。除用户自行进行私钥检查外,还可通过dmesg日志或audit日志(默认路径为`/var/log/audit/audit.log`)判断是否有签名校验失败的情况发生。典型的日志输出如下: + +```sh +type=INTEGRITY_DATA msg=audit(1722578008.756:154): pid=3358 uid=0 auid=0 ses=1 subj=unconfined_u:unconfined_r:haikang_t:s0-s0:c0.c1023 op=appraise_data cause=invalid-signature comm="bash" name="/root/0-metadata_list-compact-bash-5.1.8-6.oe2203sp1.x86_64" dev="dm-0" ino=785161 res=0 errno=0UID="root" AUID="root" +``` + +如果检查结果为签名信息错误,则用户需要根据*摘要列表签名机制说明*章节进行流程排查。 + +**步骤4:** 检查initrd中是否导入摘要列表文件: + +用户需要通过如下命令查询当前initrd中是否存在摘要列表文件: + +```sh +lsinitrd | grep 'etc/ima/digest_lists' +``` + +如果未查询到摘要列表文件,则用户需要重新制作initrd,并再次检查摘要列表导入成功: + +```sh +dracut -f -e xattr +``` + +**步骤5:** 检查IMA摘要列表和应用程序是否匹配: + +参考[问题2章节](#问题2开启IMA评估enforce模式后部分文件执行失败)。 + +## **问题2:开启IMA评估enforce模式后,部分文件执行失败** + +### 原因分析 + +开启IMA评估enforce模式后,对于配置IMA策略的文件访问,如果文件的内容或扩展属性设置有误(和导入的摘要列表不匹配),则可能会导致文件访问被拒绝。通常原因有: + +(1) 摘要列表未成功导入(可参考FAQ1); + +(2) 文件内容或属性被篡改。 + +### 解决方法 + + 对于出现文件执行失败的场景,首先需要确定摘要列表文件已经成功导入内核,用户可以检查摘要列表数量判断导入情况: + +```sh +cat /sys/kernel/security/ima/digests_count +``` + +然后用户可通过audit日志(默认路径为`/var/log/audit/audit.log`)判断具体哪个文件校验失败以及原因。典型的日志输出如下: + +```sh +type=INTEGRITY_DATA msg=audit(1722811960.997:2967): pid=7613 uid=0 auid=0 ses=1 subj=unconfined_u:unconfined_r:haikang_t:s0-s0:c0.c1023 op=appraise_data cause=IMA-signature-required comm="bash" name="/root/test" dev="dm-0" ino=814424 res=0 errno=0UID="root" AUID="root" +``` + +在确定校验失败的文件后,可对比TLV摘要列表确定文件被篡改的原因。对于未开启扩展属性校验的场景,仅对比文件SHA256哈希值和TLV摘要列表中的`IMA digest`项即可,对于开启扩展属性校验的场景,则还需要对比文件当前的属性和TLV摘要列表中显示扩展属性的区别。 + +在确定问题原因后,可通过还原文件的内容及属性,或对当前文件再次生成摘要列表,签名并导入内核的方式解决问题。 + +## **问题3:开启IMA评估模式后,跨openEuler 22.03 LTS SP版本安装软件包时出现报错信息** + +### 原因分析 + +开启IMA评估模式后,当安装不同版本的openEuler 22.03 LTS的软件包时,会自动触发IMA摘要列表的导入。其中包含对摘要列表的签名验证流程,即使用内核中的证书验证摘要列表的签名。由于openEuler在演进过程中,签名证书发生变化,因此部分跨版本安装场景存在后向兼容问题(无前向兼容问题,即新版本的内核可正常校验旧版本的IMA摘要列表文件)。 + +### 解决方法 + +建议用户确认当前内核中包含以下几本签名证书: + +```sh +# keyctl show %:.builtin_trusted_keys +Keyring + 566488577 ---lswrv 0 0 keyring: .builtin_trusted_keys + 383580336 ---lswrv 0 0 \_ asymmetric: openeuler b675600b + 453794670 ---lswrv 0 0 \_ asymmetric: private OBS b25e7f66 + 938520011 ---lswrv 0 0 \_ asymmetric: openeuler fb37bc6f +``` + +如缺少证书,建议将内核升级至最新版本。 + +```sh +yum update kernel +``` + +openEuler 24.03 LTS及之后版本已具备IMA专用证书,且支持证书链校验,证书生命周期可覆盖整个LTS版本。 + +## **问题4:开启IMA摘要列表评估模式后,IMA摘要列表文件签名正确,但是导入失败** + +### 原因分析 + +IMA摘要列表导入存在检查机制,如果某次导入过程中,摘要列表的签名校验失败,则会关闭摘要列表导入功能,从而导致后续即使正确签名的摘要列表文件也无法被导入。用户可检查dmesg日志中是否存在如下打印确认是否为该原因导致: + +```sh +# dmesg +ima: 0-metadata_list-compact-bash-5.1.8-6.oe2203sp1.x86_64 not appraised, disabling digest lists lookup for appraisal +``` + +如上述日志,则说明在开启IMA摘要列表评估模式的情况下,已经导入了一个签名错误的摘要列表文件,从而导致功能关闭。 + +### 解决方法 + +用户需要重启系统,并修复错误的摘要列表签名信息。 + +## **问题5:openEuler 24.03 LTS及之后版本导入用户自定义的IMA证书失败** + +Linux 6.6内核新增了对导入证书的字段校验限制,对于导入IMA密钥环的证书,需要满足如下约束(遵循X.509标准格式): + +- 为数字签名证书,即设置`keyUsage=digitalSignature`字段; +- 非CA证书,即不可设置`basicConstraints=CA:TRUE`字段; +- 非中间证书,即不可设置`keyUsage=keyCertSign`字段。 + +## **问题6:开启IMA评估模式后kdump服务启动失败** + +开启IMA评估enforce模式后,如果IMA策略中配置了如下KEXEC_KERNEL_CHECK规则,可能导致kdump服务启动失败。 + +```shell +appraise func=KEXEC_KERNEL_CHECK appraise_type=imasig +``` + +原因是在该场景下,所有通过KEXEC加载的文件都需要经过完整性校验,因此内核限制kdump加载内核映像文件时必须使用kexec_file_load系统调用。可通过修改/etc/sysconfig/kdump配置文件的KDUMP_FILE_LOAD开启kexec_file_load系统调用。 + +```shell +KDUMP_FILE_LOAD="on" +``` + +同时,kexec_file_load系统调用自身也会执行文件的签名校验,因此要求被加载的内核映像文件必须包含正确的安全启动签名,而且当前内核中必须包含对应的验签证书。 + +## **问题7:RAS安装后无法启动** + +### 原因分析 + +因为在当前RAS的设计逻辑中,程序启动后需要从当前目录查找一份名为 `ecdsakey.pub` 的文件进行读取并作为之后访问该程序的身份验证码,若当前目录没有该文件,则RAS启动会报错。 + +### 解决方法 + +解决方法一:运行 `ras -T` 生成测试用token后会生成 `ecdsakey.pub` 。 + +解决方法二:自行部署oauth2认证服务后,将对应JWT token生成方对应的验证公钥保存为 `ecdsakey.pub` 。 + +## **问题8:RAS启动后,通过restapi无法访问** + +因为RAS默认以https模式启动,开发者需要向RAS提供合法的证书才能正常访问,而http模式下启动的RAS则不需要提供证书。 diff --git a/docs/zh/faq/virtualization/virt_faq.md b/docs/zh/faq/virtualization/virt_faq.md new file mode 100644 index 0000000000000000000000000000000000000000..d3a4cf9a9d558b66981b1a2b8dd28a4267174079 --- /dev/null +++ b/docs/zh/faq/virtualization/virt_faq.md @@ -0,0 +1,17 @@ +# 虚拟化常见问题与解决办法 + +## **问题1:使用libcareplus工具制作的qemu热补丁无法加载** + +原因:qemu版本和热补丁版本不一致。 + +解决方法:下载qemu对应版本的源码,同时需保持制作热补丁的环境和制作qemu包环境一致,buildID可作为二者是否一致的判定标准。因用户无qemu版本的制作环境,故可以 **自行编包并安装** ,使用自编包中的/usr/libexec/qemu-kvm的buildID。 + +## **问题2:使用libcareplus工具制作的热补丁已加载但未生效** + +原因:不支持死循环、不退出、递归的函数,不支持对初始化函数、inline 函数以及小于5字节的短函数。 + +解决方法:查看补丁所在函数是否在约束限制中。 + +## **问题3:使用kvmtop工具第一次显示的结果为间隔0.05秒的两次采样计算得到的结果,波动较大** + +此为开源top框架缺陷导致,暂无解决方案。 diff --git a/dsl/assets/img/cloud-bg.png b/dsl/assets/img/cloud-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..9a9589f9c55249f92c69eac54a61d26c15822a91 Binary files /dev/null and b/dsl/assets/img/cloud-bg.png differ diff --git a/dsl/assets/img/cloud-icon.svg b/dsl/assets/img/cloud-icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..9a33cfc1f672081d824a19bd0c2fbee08674fd72 --- /dev/null +++ b/dsl/assets/img/cloud-icon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/dsl/assets/img/dev-station-bg.svg b/dsl/assets/img/dev-station-bg.svg new file mode 100644 index 0000000000000000000000000000000000000000..c08c34f5c02b10aa2a8b0ee606a1157efa6fb026 --- /dev/null +++ b/dsl/assets/img/dev-station-bg.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/dsl/assets/img/dev-station-icon.svg b/dsl/assets/img/dev-station-icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..c29a4f7152dd66a70f0e92b553a55d95bc308a11 --- /dev/null +++ b/dsl/assets/img/dev-station-icon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/dsl/assets/img/docs-dev-guide-bg-dark-mb.png b/dsl/assets/img/docs-dev-guide-bg-dark-mb.png new file mode 100644 index 0000000000000000000000000000000000000000..4389369086d138a57e0f40a20c91aae3bb4d359f Binary files /dev/null and b/dsl/assets/img/docs-dev-guide-bg-dark-mb.png differ diff --git a/dsl/assets/img/docs-dev-guide-bg-dark.png b/dsl/assets/img/docs-dev-guide-bg-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..553d0c58ab372b61f0146e9e9635990656ff35d2 Binary files /dev/null and b/dsl/assets/img/docs-dev-guide-bg-dark.png differ diff --git a/dsl/assets/img/docs-dev-guide-bg-light-mb.png b/dsl/assets/img/docs-dev-guide-bg-light-mb.png new file mode 100644 index 0000000000000000000000000000000000000000..4c06aec0fc08d3d94deb617592fa32963e9a0f2d Binary files /dev/null and b/dsl/assets/img/docs-dev-guide-bg-light-mb.png differ diff --git a/dsl/assets/img/docs-dev-guide-bg-light.png b/dsl/assets/img/docs-dev-guide-bg-light.png new file mode 100644 index 0000000000000000000000000000000000000000..85e09770fd108a2c884197428bf739afef3bff2d Binary files /dev/null and b/dsl/assets/img/docs-dev-guide-bg-light.png differ diff --git a/dsl/assets/img/edge-computing-bg.png b/dsl/assets/img/edge-computing-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..b1a708eacda8b68eea5ed25c505c28b60a4d3ba1 Binary files /dev/null and b/dsl/assets/img/edge-computing-bg.png differ diff --git a/dsl/assets/img/edge-computing-icon.svg b/dsl/assets/img/edge-computing-icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..dc314594239dd5a812ea8b059576341d337c28da --- /dev/null +++ b/dsl/assets/img/edge-computing-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/dsl/assets/img/embedded-bg.png b/dsl/assets/img/embedded-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..646afee988b57bcb1f064952d6352ec4efb73644 Binary files /dev/null and b/dsl/assets/img/embedded-bg.png differ diff --git a/dsl/assets/img/embedded-icon.svg b/dsl/assets/img/embedded-icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..3e50be90cd181a5a30b8c34454f8db79dc1ce39c --- /dev/null +++ b/dsl/assets/img/embedded-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/dsl/assets/img/install-guide-bg-dark-mb.png b/dsl/assets/img/install-guide-bg-dark-mb.png new file mode 100644 index 0000000000000000000000000000000000000000..979f2a920d9b0dafd5895250c6c845eebac7e404 Binary files /dev/null and b/dsl/assets/img/install-guide-bg-dark-mb.png differ diff --git a/dsl/assets/img/install-guide-bg-dark.png b/dsl/assets/img/install-guide-bg-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..3ed275d32e81e46123470c4817061362f8946c0a Binary files /dev/null and b/dsl/assets/img/install-guide-bg-dark.png differ diff --git a/dsl/assets/img/install-guide-bg-light-mb.png b/dsl/assets/img/install-guide-bg-light-mb.png new file mode 100644 index 0000000000000000000000000000000000000000..ff42e30277ab93c7434d15e002494b59fc9ab97e Binary files /dev/null and b/dsl/assets/img/install-guide-bg-light-mb.png differ diff --git a/dsl/assets/img/install-guide-bg-light.png b/dsl/assets/img/install-guide-bg-light.png new file mode 100644 index 0000000000000000000000000000000000000000..bfd8d0b5e727cbe117bd87fe6ec5ccd3a02ca686 Binary files /dev/null and b/dsl/assets/img/install-guide-bg-light.png differ diff --git a/dsl/assets/img/qa-bg-dark-mb.png b/dsl/assets/img/qa-bg-dark-mb.png new file mode 100644 index 0000000000000000000000000000000000000000..f6a64344682fd16a5161f43f55cfa870470afaa7 Binary files /dev/null and b/dsl/assets/img/qa-bg-dark-mb.png differ diff --git a/dsl/assets/img/qa-bg-dark.png b/dsl/assets/img/qa-bg-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..a3285bf61dcf2e05909b4f4ed313c09257c86f34 Binary files /dev/null and b/dsl/assets/img/qa-bg-dark.png differ diff --git a/dsl/assets/img/qa-bg-light-mb.png b/dsl/assets/img/qa-bg-light-mb.png new file mode 100644 index 0000000000000000000000000000000000000000..3a7b87d4f14f284505f42047817ff3227162e8dd Binary files /dev/null and b/dsl/assets/img/qa-bg-light-mb.png differ diff --git a/dsl/assets/img/qa-bg-light.png b/dsl/assets/img/qa-bg-light.png new file mode 100644 index 0000000000000000000000000000000000000000..e0aedadc5684fc42ccdf1a4ee36010025669194d Binary files /dev/null and b/dsl/assets/img/qa-bg-light.png differ diff --git a/dsl/assets/img/server-bg.png b/dsl/assets/img/server-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..7a92ccfeaa7f6d875706816176e97fa883f08e0e Binary files /dev/null and b/dsl/assets/img/server-bg.png differ diff --git a/dsl/assets/img/server-icon.svg b/dsl/assets/img/server-icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..87433c4c25b20ee953c1a71027bd389665977a80 --- /dev/null +++ b/dsl/assets/img/server-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/dsl/assets/img/started-bg-dark-mb.png b/dsl/assets/img/started-bg-dark-mb.png new file mode 100644 index 0000000000000000000000000000000000000000..3edeabb509dc11b86898dde7ed99ab07db74328b Binary files /dev/null and b/dsl/assets/img/started-bg-dark-mb.png differ diff --git a/dsl/assets/img/started-bg-dark.png b/dsl/assets/img/started-bg-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..737cab03621ae3b05d075827ccd107b7dc6f5b94 Binary files /dev/null and b/dsl/assets/img/started-bg-dark.png differ diff --git a/dsl/assets/img/started-bg-light-mb.png b/dsl/assets/img/started-bg-light-mb.png new file mode 100644 index 0000000000000000000000000000000000000000..11dbc204a278b79037fb5c481d697e8c2fd49a6c Binary files /dev/null and b/dsl/assets/img/started-bg-light-mb.png differ diff --git a/dsl/assets/img/started-bg-light.png b/dsl/assets/img/started-bg-light.png new file mode 100644 index 0000000000000000000000000000000000000000..d6183fa6a470420835e1a45935cbfa9fc9fe6c00 Binary files /dev/null and b/dsl/assets/img/started-bg-light.png differ diff --git a/dsl/assets/img/virtualization-bg.png b/dsl/assets/img/virtualization-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..e5fb2c233ec151e41ffae3256fdf2e4db4b8ac55 Binary files /dev/null and b/dsl/assets/img/virtualization-bg.png differ diff --git a/dsl/assets/img/virtualization-icon.svg b/dsl/assets/img/virtualization-icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..b994926478f883206645ad3371f6d92b48d5d1a2 --- /dev/null +++ b/dsl/assets/img/virtualization-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/dsl/en/home.json b/dsl/en/home.json new file mode 100644 index 0000000000000000000000000000000000000000..8625c9131a4545f7afecfc42d69837b6e545c891 --- /dev/null +++ b/dsl/en/home.json @@ -0,0 +1,120 @@ +{ + "hots": [ + "Installation guide", + "Administrator guide", + "x2openEuler migration", + "Application development guide", + "UKUI user guide" + ], + "recommend": { + "title": "Others", + "columns": 2, + "columns_mb": 2, + "items": [ + { + "title": "Quick Start", + "desc": "Learn the community essentials in 10 minutes, build and grow quickly.", + "href": "/en/docs/25.03/server/quickstart/quickstart/quick-start.html", + "bg_light": "/dsl/assets/img/started-bg-light.png", + "bg_dark": "/dsl/assets/img/started-bg-dark.png", + "bg_mb_light": "/dsl/assets/img/started-bg-light-mb.png", + "bg_mb_dark": "/dsl/assets/img/started-bg-dark-mb.png" + }, + { + "title": "Installation Guide", + "desc": "Step-by-step instructions for installing openEuler.", + "href": "/en/docs/25.03/server/installation_upgrade/installation/installation-preparations.html", + "bg_light": "/dsl/assets/img/install-guide-bg-light.png", + "bg_dark": "/dsl/assets/img/install-guide-bg-dark.png", + "bg_mb_light": "/dsl/assets/img/install-guide-bg-light-mb.png", + "bg_mb_dark": "/dsl/assets/img/install-guide-bg-dark-mb.png" + } + ] + }, + "sections": [ + { + "title": "Scenarios", + "columns": 3, + "columns_mb": 2, + "items": [ + { + "title": "Server", + "desc": "Explore guides for server installation, upgrades, management, performance tuning, and application development.", + "href": "/en/docs/25.03/server/index.html", + "icon": "/dsl/assets/img/server-icon.svg", + "bg": "/dsl/assets/img/server-bg.png" + }, + { + "title": "Virtualization", + "desc": "Learn, install, and use virtualization technologies.", + "href": "/en/docs/25.03/virtualization/index.html", + "icon": "/dsl/assets/img/virtualization-icon.svg", + "bg": "/dsl/assets/img/virtualization-bg.png" + }, + { + "title": "Cloud", + "desc": "Deploy containers and clusters with the comprehensive guides.", + "href": "/en/docs/25.03/cloud/index.html", + "icon": "/dsl/assets/img/cloud-icon.svg", + "bg": "/dsl/assets/img/cloud-bg.png" + }, + { + "title": "Edge", + "desc": "Get started with KubeEdge and K3S installation and usage.", + "href": "/en/docs/25.03/edge_computing/index.html", + "icon": "/dsl/assets/img/edge-computing-icon.svg", + "bg": "/dsl/assets/img/edge-computing-bg.png" + }, + { + "title": "Embedded", + "desc": "Build images, develop applications, and manage embedded systems.", + "href": "/en/docs/25.03/embedded/index.html", + "icon": "/dsl/assets/img/embedded-icon.svg", + "bg": "/dsl/assets/img/embedded-bg.png" + } + ] + }, + { + "title": "Tools", + "columns": 4, + "columns_mb": 2, + "items": [ + { + "title": "Community Tools", + "desc": "Discover guides for image building, compilation, performance optimization, migration, virtualization, and epkg package manager.", + "href": "/en/docs/25.03/tools/community_tools/index.html" + }, + { + "title": "Community DevOps Services", + "desc": "Leverage source code and package management services.", + "href": "/en/docs/25.03/tools/devops/index.html" + }, + { + "title": "AI", + "desc": "Access guides for the openEuler Intelligent Interaction Platform and container images for AI model services.", + "href": "/en/docs/25.03/tools/ai/index.html" + }, + { + "title": "Desktop", + "desc": "Set up and use graphical desktop environments.", + "href": "/en/docs/25.03/tools/desktop/index.html" + }, + { + "title": "Cloud", + "desc": "Explore user guides for CTinspector, CPDS and other essential tools.", + "href": "/en/docs/25.03/tools/cloud/index.html" + }, + { + "title": "System Operations", + "desc": "Create hot patches and monitor your system with specialized tools.", + "href": "/en/docs/25.03/tools/maintenance/index.html" + }, + { + "title": "Security", + "desc": "Implement security configurations with our recommended tools.", + "href": "/en/docs/25.03/tools/security/index.html" + } + ] + } + ] +} diff --git a/dsl/zh/home.json b/dsl/zh/home.json new file mode 100644 index 0000000000000000000000000000000000000000..8d91bc288be7a38d8161531a67feb4e3c7538519 --- /dev/null +++ b/dsl/zh/home.json @@ -0,0 +1,147 @@ +{ + "hots": [ + "安装指南", + "管理员指南", + "x2openEuler迁移专区", + "应用开发指南", + "UKUI用户指南" + ], + "recommend": { + "title": "其它", + "columns": 4, + "columns_mb": 2, + "items": [ + { + "title": "新手入门", + "desc": "10分钟玩转社区,快速构建与成长", + "href": "/zh/docs/25.03/server/quickstart/quickstart/quick-start.html", + "bg_light": "/dsl/assets/img/started-bg-light.png", + "bg_dark": "/dsl/assets/img/started-bg-dark.png", + "bg_mb_light": "/dsl/assets/img/started-bg-light-mb.png", + "bg_mb_dark": "/dsl/assets/img/started-bg-dark-mb.png" + }, + { + "title": "安装指南", + "desc": "安装 openEuler 操作系统", + "href": "/zh/docs/25.03/server/installation_upgrade/installation/installation-preparations.html", + "bg_light": "/dsl/assets/img/install-guide-bg-light.png", + "bg_dark": "/dsl/assets/img/install-guide-bg-dark.png", + "bg_mb_light": "/dsl/assets/img/install-guide-bg-light-mb.png", + "bg_mb_dark": "/dsl/assets/img/install-guide-bg-dark-mb.png" + }, + { + "title": "常见问题", + "desc": "常见问题与解决方法", + "href": "/zh/docs/common/faq/general/general_faq.html", + "bg_light": "/dsl/assets/img/qa-bg-light.png", + "bg_dark": "/dsl/assets/img/qa-bg-dark.png", + "bg_mb_light": "/dsl/assets/img/qa-bg-light-mb.png", + "bg_mb_dark": "/dsl/assets/img/qa-bg-dark-mb.png", + "dropdown": true + }, + { + "title": "文档开发指南", + "desc": "参与文档开发的方式", + "href": "/zh/docs/common/contribute/directory_structure_introductory.html", + "bg_light": "/dsl/assets/img/docs-dev-guide-bg-light.png", + "bg_dark": "/dsl/assets/img/docs-dev-guide-bg-dark.png", + "bg_mb_light": "/dsl/assets/img/docs-dev-guide-bg-light-mb.png", + "bg_mb_dark": "/dsl/assets/img/docs-dev-guide-bg-dark-mb.png", + "dropdown": true + } + ] + }, + "sections": [ + { + "title": "业务场景", + "columns": 3, + "columns_mb": 2, + "items": [ + { + "title": "服务器", + "desc": "提供服务器场景的安装升级、管理运维、性能调优、应用开发等操作指南", + "href": "/zh/docs/25.03/server/index.html", + "icon": "/dsl/assets/img/server-icon.svg", + "bg": "/dsl/assets/img/server-bg.png" + }, + { + "title": "虚拟化", + "desc": "帮助用户了解、安装和使用虚拟化", + "href": "/zh/docs/25.03/virtualization/index.html", + "icon": "/dsl/assets/img/virtualization-icon.svg", + "bg": "/dsl/assets/img/virtualization-bg.png" + }, + { + "title": "云原生", + "desc": "帮助用户安装和使用容器,部署集群等", + "href": "/zh/docs/25.03/cloud/index.html", + "icon": "/dsl/assets/img/cloud-icon.svg", + "bg": "/dsl/assets/img/cloud-bg.png" + }, + { + "title": "边缘计算", + "desc": "提供 KubeEdge、K3S 的安装和使用介绍", + "href": "/zh/docs/25.03/edge_computing/index.html", + "icon": "/dsl/assets/img/edge-computing-icon.svg", + "bg": "/dsl/assets/img/edge-computing-bg.png" + }, + { + "title": "嵌入式", + "desc": "提供嵌入式场景的镜像构建、应用开发、系统管理等操作指南", + "href": "/zh/docs/25.03/embedded/index.html", + "icon": "/dsl/assets/img/embedded-icon.svg", + "bg": "/dsl/assets/img/embedded-bg.png" + }, + { + "title": "DevStation", + "desc": "帮助⽤户了解 openEuler 社区⼀站式开发者⼯作站 DevStation", + "href": "/zh/docs/25.03/devstation/index.html", + "icon": "/dsl/assets/img/dev-station-icon.svg", + "bg": "/dsl/assets/img/dev-station-bg.svg" + } + ] + }, + { + "title": "工具", + "columns": 4, + "columns_mb": 2, + "items": [ + { + "title": "社区工具", + "desc": "提供镜像构建、编译、性能优化、迁移、虚拟化、epkg 软件包工具使用指南", + "href": "/zh/docs/25.03/tools/community_tools/index.html" + }, + { + "title": "DevOps(社区服务)", + "desc": "帮助用户使用源码管理、包管理服务", + "href": "/zh/docs/25.03/tools/devops/index.html" + }, + { + "title": "AI", + "desc": "提供 openEuler 大模型智能交互平台,AI 大模型服务镜像等使用指南", + "href": "/zh/docs/25.03/tools/ai/index.html" + }, + { + "title": "图形桌面使用", + "desc": "帮助用户安装和使用桌面环境", + "href": "/zh/docs/25.03/tools/desktop/index.html" + }, + { + "title": "云原生工具", + "desc": "提供云原生常用工具用户指南,包含 CTinspector、CPDS 等", + "href": "/zh/docs/25.03/tools/cloud/index.html" + }, + { + "title": "系统运维", + "desc": "提供热补丁制作、系统监控工具使用指南", + "href": "/zh/docs/25.03/tools/maintenance/index.html" + }, + { + "title": "安全", + "desc": "提供安全配置常用工具使用指南", + "href": "/zh/docs/25.03/tools/security/index.html" + } + ] + } + ] +} diff --git a/package.json b/package.json new file mode 100644 index 0000000000000000000000000000000000000000..909a6f70df873bedaef61403ce6b5ec24ad3dd5e --- /dev/null +++ b/package.json @@ -0,0 +1,16 @@ +{ + "name": "website-v2", + "version": "0.0.1", + "description": "", + "main": "index.js", + "scripts": { + "dev": "vuepress dev docs", + "build": "vuepress build docs" + }, + "keywords": [], + "author": "", + "license": "", + "dependencies": { + "vuepress": "^1.5.2" + } +}